From 5d68c5c49bde0748747221c5bfc2f057930715e3 Mon Sep 17 00:00:00 2001 From: James Carl Date: Thu, 31 Oct 2024 01:32:59 -0400 Subject: [PATCH 001/106] Add Nix support --- .envrc | 1 + Cargo.nix | 6846 ++++++++++++++++++++++++++++++++++++++++ build_dependencies.nix | 27 + crate-hashes.json | 7 + default.nix | 23 +- shell.nix | 11 + 6 files changed, 6902 insertions(+), 13 deletions(-) create mode 100644 .envrc create mode 100644 Cargo.nix create mode 100644 build_dependencies.nix create mode 100644 crate-hashes.json create mode 100644 shell.nix diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..65326bb --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use nix \ No newline at end of file diff --git a/Cargo.nix b/Cargo.nix new file mode 100644 index 0000000..1ed9df6 --- /dev/null +++ b/Cargo.nix @@ -0,0 +1,6846 @@ + +# This file was @generated by crate2nix 0.14.0 with the command: +# "generate" +# See https://github.com/kolloch/crate2nix for more info. + +{ nixpkgs ? +, pkgs ? import nixpkgs { config = {}; } +, lib ? pkgs.lib +, stdenv ? pkgs.stdenv +, buildRustCrateForPkgs ? pkgs: pkgs.buildRustCrate + # This is used as the `crateOverrides` argument for `buildRustCrate`. +, defaultCrateOverrides ? pkgs.defaultCrateOverrides + # The features to enable for the root_crate or the workspace_members. +, rootFeatures ? [ "default" ] + # If true, throw errors instead of issueing deprecation warnings. +, strictDeprecation ? false + # Used for conditional compilation based on CPU feature detection. +, targetFeatures ? [] + # Whether to perform release builds: longer compile times, faster binaries. +, release ? true + # Additional crate2nix configuration if it exists. +, crateConfig + ? if builtins.pathExists ./crate-config.nix + then pkgs.callPackage ./crate-config.nix {} + else {} +}: + +rec { + # + # "public" attributes that we attempt to keep stable with new versions of crate2nix. + # + + + # Refer your crate build derivation by name here. + # You can override the features with + # workspaceMembers."${crateName}".build.override { features = [ "default" "feature1" ... ]; }. + workspaceMembers = { + "command_cad" = rec { + packageId = "command_cad"; + build = internal.buildRustCrateWithFeatures { + packageId = "command_cad"; + }; + + # Debug support which might change between releases. + # File a bug if you depend on any for non-debug work! + debug = internal.debugCrate { inherit packageId; }; + }; + "common_data_types" = rec { + packageId = "common_data_types"; + build = internal.buildRustCrateWithFeatures { + packageId = "common_data_types"; + }; + + # Debug support which might change between releases. + # File a bug if you depend on any for non-debug work! + debug = internal.debugCrate { inherit packageId; }; + }; + "macros" = rec { + packageId = "macros"; + build = internal.buildRustCrateWithFeatures { + packageId = "macros"; + }; + + # Debug support which might change between releases. + # File a bug if you depend on any for non-debug work! + debug = internal.debugCrate { inherit packageId; }; + }; + }; + + # A derivation that joins the outputs of all workspace members together. + allWorkspaceMembers = pkgs.symlinkJoin { + name = "all-workspace-members"; + paths = + let members = builtins.attrValues workspaceMembers; + in builtins.map (m: m.build) members; + }; + + # + # "internal" ("private") attributes that may change in every new version of crate2nix. + # + + internal = rec { + # Build and dependency information for crates. + # Many of the fields are passed one-to-one to buildRustCrate. + # + # Noteworthy: + # * `dependencies`/`buildDependencies`: similar to the corresponding fields for buildRustCrate. + # but with additional information which is used during dependency/feature resolution. + # * `resolvedDependencies`: the selected default features reported by cargo - only included for debugging. + # * `devDependencies` as of now not used by `buildRustCrate` but used to + # inject test dependencies into the build + + crates = { + "adler" = rec { + crateName = "adler"; + version = "1.0.2"; + edition = "2015"; + sha256 = "1zim79cvzd5yrkzl3nyfx0avijwgk9fqv3yrscdy1cc79ih02qpj"; + authors = [ + "Jonas Schievink " + ]; + features = { + "compiler_builtins" = [ "dep:compiler_builtins" ]; + "core" = [ "dep:core" ]; + "default" = [ "std" ]; + "rustc-dep-of-std" = [ "core" "compiler_builtins" ]; + }; + }; + "ahash" = rec { + crateName = "ahash"; + version = "0.8.11"; + edition = "2018"; + sha256 = "04chdfkls5xmhp1d48gnjsmglbqibizs3bpbj6rsj604m10si7g8"; + authors = [ + "Tom Kaitchuck " + ]; + dependencies = [ + { + name = "cfg-if"; + packageId = "cfg-if"; + } + { + name = "once_cell"; + packageId = "once_cell"; + usesDefaultFeatures = false; + target = { target, features }: (!(("arm" == target."arch" or null) && ("none" == target."os" or null))); + features = [ "alloc" ]; + } + { + name = "zerocopy"; + packageId = "zerocopy"; + usesDefaultFeatures = false; + features = [ "simd" ]; + } + ]; + buildDependencies = [ + { + name = "version_check"; + packageId = "version_check"; + } + ]; + features = { + "atomic-polyfill" = [ "dep:atomic-polyfill" "once_cell/atomic-polyfill" ]; + "compile-time-rng" = [ "const-random" ]; + "const-random" = [ "dep:const-random" ]; + "default" = [ "std" "runtime-rng" ]; + "getrandom" = [ "dep:getrandom" ]; + "runtime-rng" = [ "getrandom" ]; + "serde" = [ "dep:serde" ]; + }; + }; + "aliasable" = rec { + crateName = "aliasable"; + version = "0.1.3"; + edition = "2018"; + sha256 = "1z8548zdjlm4ps1k0d7x68lfdyji02crwcc9rw3q3bb106f643r5"; + authors = [ + "avitex " + ]; + features = { + "aliasable_deref_trait" = [ "dep:aliasable_deref_trait" ]; + "default" = [ "alloc" ]; + "stable_deref_trait" = [ "dep:stable_deref_trait" ]; + "traits" = [ "stable_deref_trait" "aliasable_deref_trait" ]; + }; + resolvedDefaultFeatures = [ "alloc" "default" ]; + }; + "allocator-api2" = rec { + crateName = "allocator-api2"; + version = "0.2.18"; + edition = "2018"; + sha256 = "0kr6lfnxvnj164j1x38g97qjlhb7akppqzvgfs0697140ixbav2w"; + libName = "allocator_api2"; + authors = [ + "Zakarum " + ]; + features = { + "default" = [ "std" ]; + "serde" = [ "dep:serde" ]; + "std" = [ "alloc" ]; + }; + resolvedDefaultFeatures = [ "alloc" ]; + }; + "android-tzdata" = rec { + crateName = "android-tzdata"; + version = "0.1.1"; + edition = "2018"; + sha256 = "1w7ynjxrfs97xg3qlcdns4kgfpwcdv824g611fq32cag4cdr96g9"; + libName = "android_tzdata"; + authors = [ + "RumovZ" + ]; + + }; + "android_system_properties" = rec { + crateName = "android_system_properties"; + version = "0.1.5"; + edition = "2018"; + sha256 = "04b3wrz12837j7mdczqd95b732gw5q7q66cv4yn4646lvccp57l1"; + authors = [ + "Nicolas Silva " + ]; + dependencies = [ + { + name = "libc"; + packageId = "libc"; + } + ]; + + }; + "anstream" = rec { + crateName = "anstream"; + version = "0.6.14"; + edition = "2021"; + sha256 = "0nx1vnfs2lil1sl14l49i6jvp6zpjczn85wxx4xw1ycafvx7b321"; + dependencies = [ + { + name = "anstyle"; + packageId = "anstyle"; + } + { + name = "anstyle-parse"; + packageId = "anstyle-parse"; + } + { + name = "anstyle-query"; + packageId = "anstyle-query"; + optional = true; + } + { + name = "anstyle-wincon"; + packageId = "anstyle-wincon"; + optional = true; + target = { target, features }: (target."windows" or false); + } + { + name = "colorchoice"; + packageId = "colorchoice"; + } + { + name = "is_terminal_polyfill"; + packageId = "is_terminal_polyfill"; + } + { + name = "utf8parse"; + packageId = "utf8parse"; + } + ]; + features = { + "auto" = [ "dep:anstyle-query" ]; + "default" = [ "auto" "wincon" ]; + "wincon" = [ "dep:anstyle-wincon" ]; + }; + resolvedDefaultFeatures = [ "auto" "default" "wincon" ]; + }; + "anstyle" = rec { + crateName = "anstyle"; + version = "1.0.7"; + edition = "2021"; + sha256 = "06qxmrba0xbhv07jpdvrdrhw1hjlb9icj88bqvlnissz9bqgr383"; + features = { + "default" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "anstyle-parse" = rec { + crateName = "anstyle-parse"; + version = "0.2.4"; + edition = "2021"; + sha256 = "1m121pa4plpcb4g7xali2kv9njmgb3713q3fxf60b4jd0fli2fn0"; + libName = "anstyle_parse"; + dependencies = [ + { + name = "utf8parse"; + packageId = "utf8parse"; + optional = true; + } + ]; + features = { + "core" = [ "dep:arrayvec" ]; + "default" = [ "utf8" ]; + "utf8" = [ "dep:utf8parse" ]; + }; + resolvedDefaultFeatures = [ "default" "utf8" ]; + }; + "anstyle-query" = rec { + crateName = "anstyle-query"; + version = "1.0.3"; + edition = "2021"; + sha256 = "1x9pyl231rry5g45dvkdb2sfnl2dx2f4qd9a5v3ml8kr9ryr0k56"; + libName = "anstyle_query"; + dependencies = [ + { + name = "windows-sys"; + packageId = "windows-sys 0.52.0"; + target = { target, features }: (target."windows" or false); + features = [ "Win32_System_Console" "Win32_Foundation" ]; + } + ]; + + }; + "anstyle-wincon" = rec { + crateName = "anstyle-wincon"; + version = "3.0.3"; + edition = "2021"; + sha256 = "06gv2vbj4hvwb8fxqjmvabp5kx2w01cjgh86pd98y1mpzr4q98v1"; + libName = "anstyle_wincon"; + dependencies = [ + { + name = "anstyle"; + packageId = "anstyle"; + } + { + name = "windows-sys"; + packageId = "windows-sys 0.52.0"; + target = { target, features }: (target."windows" or false); + features = [ "Win32_System_Console" "Win32_Foundation" ]; + } + ]; + + }; + "anyhow" = rec { + crateName = "anyhow"; + version = "1.0.86"; + edition = "2018"; + sha256 = "1nk301x8qhpdaks6a9zvcp7yakjqnczjmqndbg7vk4494d3d1ldk"; + authors = [ + "David Tolnay " + ]; + features = { + "backtrace" = [ "dep:backtrace" ]; + "default" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "approx 0.3.2" = rec { + crateName = "approx"; + version = "0.3.2"; + edition = "2015"; + sha256 = "1hx580xjdxl3766js9b49rnbnmr8gw8c060809l43k9f0xshprph"; + authors = [ + "Brendan Zabarauskas " + ]; + dependencies = [ + { + name = "num-traits"; + packageId = "num-traits"; + usesDefaultFeatures = false; + } + ]; + features = { + "default" = [ "std" ]; + "num-complex" = [ "dep:num-complex" ]; + }; + resolvedDefaultFeatures = [ "std" ]; + }; + "approx 0.5.1" = rec { + crateName = "approx"; + version = "0.5.1"; + edition = "2015"; + sha256 = "1ilpv3dgd58rasslss0labarq7jawxmivk17wsh8wmkdm3q15cfa"; + authors = [ + "Brendan Zabarauskas " + ]; + dependencies = [ + { + name = "num-traits"; + packageId = "num-traits"; + usesDefaultFeatures = false; + } + ]; + features = { + "default" = [ "std" ]; + "num-complex" = [ "dep:num-complex" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "arrayvec" = rec { + crateName = "arrayvec"; + version = "0.7.4"; + edition = "2018"; + sha256 = "04b7n722jij0v3fnm3qk072d5ysc2q30rl9fz33zpfhzah30mlwn"; + authors = [ + "bluss" + ]; + features = { + "default" = [ "std" ]; + "serde" = [ "dep:serde" ]; + "zeroize" = [ "dep:zeroize" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "autocfg" = rec { + crateName = "autocfg"; + version = "1.3.0"; + edition = "2015"; + sha256 = "1c3njkfzpil03k92q0mij5y1pkhhfr4j3bf0h53bgl2vs85lsjqc"; + authors = [ + "Josh Stone " + ]; + + }; + "bezier-rs" = rec { + crateName = "bezier-rs"; + version = "0.4.0"; + edition = "2021"; + sha256 = "1pj1ax64kgqinxc45kgjq39yx4sbqscv7p0sz22gkqi68cqsmqxx"; + libName = "bezier_rs"; + authors = [ + "Graphite Authors " + ]; + dependencies = [ + { + name = "glam"; + packageId = "glam"; + features = [ "serde" ]; + } + ]; + features = { + "dyn-any" = [ "dep:dyn-any" ]; + "serde" = [ "dep:serde" ]; + }; + }; + "bitflags 1.3.2" = rec { + crateName = "bitflags"; + version = "1.3.2"; + edition = "2018"; + sha256 = "12ki6w8gn1ldq7yz9y680llwk5gmrhrzszaa17g1sbrw2r2qvwxy"; + authors = [ + "The Rust Project Developers" + ]; + features = { + "compiler_builtins" = [ "dep:compiler_builtins" ]; + "core" = [ "dep:core" ]; + "rustc-dep-of-std" = [ "core" "compiler_builtins" ]; + }; + resolvedDefaultFeatures = [ "default" ]; + }; + "bitflags 2.5.0" = rec { + crateName = "bitflags"; + version = "2.5.0"; + edition = "2021"; + sha256 = "1h91vdx1il069vdiiissj8ymzj130rbiic0dbs77yxjgjim9sjyg"; + authors = [ + "The Rust Project Developers" + ]; + features = { + "arbitrary" = [ "dep:arbitrary" ]; + "bytemuck" = [ "dep:bytemuck" ]; + "compiler_builtins" = [ "dep:compiler_builtins" ]; + "core" = [ "dep:core" ]; + "rustc-dep-of-std" = [ "core" "compiler_builtins" ]; + "serde" = [ "dep:serde" ]; + }; + resolvedDefaultFeatures = [ "std" ]; + }; + "bumpalo" = rec { + crateName = "bumpalo"; + version = "3.16.0"; + edition = "2021"; + sha256 = "0b015qb4knwanbdlp1x48pkb4pm57b8gidbhhhxr900q2wb6fabr"; + authors = [ + "Nick Fitzgerald " + ]; + features = { + "allocator-api2" = [ "dep:allocator-api2" ]; + "serde" = [ "dep:serde" ]; + }; + resolvedDefaultFeatures = [ "default" ]; + }; + "bytecount" = rec { + crateName = "bytecount"; + version = "0.6.8"; + edition = "2018"; + sha256 = "1klqfjwn41fwmcqw4z03v6i4imgrf7lmf3b5s9v74hxir8hrps2w"; + authors = [ + "Andre Bogus " + "Joshua Landau " + ]; + features = { + }; + }; + "bytemuck" = rec { + crateName = "bytemuck"; + version = "1.16.0"; + edition = "2018"; + sha256 = "19dwdvjri09mhgrngy0737965pchm25ix2yma8sgwpjxrcalr0vq"; + authors = [ + "Lokathor " + ]; + features = { + "bytemuck_derive" = [ "dep:bytemuck_derive" ]; + "derive" = [ "bytemuck_derive" ]; + "extern_crate_std" = [ "extern_crate_alloc" ]; + }; + }; + "byteorder 0.4.2" = rec { + crateName = "byteorder"; + version = "0.4.2"; + edition = "2015"; + sha256 = "010k8mb3fi4jgbj4nxzggyi7zg2jvm7aqirdyf5c1348h4cb9j4n"; + authors = [ + "Andrew Gallant " + ]; + features = { + }; + }; + "byteorder 1.5.0" = rec { + crateName = "byteorder"; + version = "1.5.0"; + edition = "2021"; + sha256 = "0jzncxyf404mwqdbspihyzpkndfgda450l0893pz5xj685cg5l0z"; + authors = [ + "Andrew Gallant " + ]; + features = { + "default" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "casey" = rec { + crateName = "casey"; + version = "0.4.0"; + edition = "2018"; + sha256 = "0sv5ll6aavwcigmr53b22dg16adlz4pa2pb73367sna974k8cib1"; + procMacro = true; + authors = [ + "jordy25519 " + ]; + dependencies = [ + { + name = "syn"; + packageId = "syn 1.0.109"; + } + ]; + + }; + "castaway" = rec { + crateName = "castaway"; + version = "0.2.2"; + edition = "2018"; + sha256 = "1k1z4v61vq7la56js1azkr0k9b415vif2kaxiqk3d1gw6mbfs5wa"; + authors = [ + "Stephen M. Coakley " + ]; + dependencies = [ + { + name = "rustversion"; + packageId = "rustversion"; + } + ]; + features = { + "default" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "cc" = rec { + crateName = "cc"; + version = "1.0.98"; + edition = "2018"; + sha256 = "0gzhij74hblfkzwwyysdc8crfd6fr0m226vzmijmwwhdakkp1hj1"; + authors = [ + "Alex Crichton " + ]; + dependencies = [ + { + name = "jobserver"; + packageId = "jobserver"; + optional = true; + usesDefaultFeatures = false; + } + { + name = "libc"; + packageId = "libc"; + optional = true; + usesDefaultFeatures = false; + target = { target, features }: (target."unix" or false); + } + { + name = "once_cell"; + packageId = "once_cell"; + optional = true; + } + ]; + features = { + "jobserver" = [ "dep:jobserver" ]; + "libc" = [ "dep:libc" ]; + "once_cell" = [ "dep:once_cell" ]; + "parallel" = [ "libc" "jobserver" "once_cell" ]; + }; + resolvedDefaultFeatures = [ "jobserver" "libc" "once_cell" "parallel" ]; + }; + "cfg-if" = rec { + crateName = "cfg-if"; + version = "1.0.0"; + edition = "2018"; + sha256 = "1za0vb97n4brpzpv8lsbnzmq5r8f2b0cpqqr0sy8h5bn751xxwds"; + libName = "cfg_if"; + authors = [ + "Alex Crichton " + ]; + features = { + "compiler_builtins" = [ "dep:compiler_builtins" ]; + "core" = [ "dep:core" ]; + "rustc-dep-of-std" = [ "core" "compiler_builtins" ]; + }; + }; + "chrono" = rec { + crateName = "chrono"; + version = "0.4.38"; + edition = "2021"; + sha256 = "009l8vc5p8750vn02z30mblg4pv2qhkbfizhfwmzc6vpy5nr67x2"; + dependencies = [ + { + name = "android-tzdata"; + packageId = "android-tzdata"; + optional = true; + target = { target, features }: ("android" == target."os" or null); + } + { + name = "iana-time-zone"; + packageId = "iana-time-zone"; + optional = true; + target = { target, features }: (target."unix" or false); + features = [ "fallback" ]; + } + { + name = "js-sys"; + packageId = "js-sys"; + optional = true; + target = { target, features }: (("wasm32" == target."arch" or null) && (!(("emscripten" == target."os" or null) || ("wasi" == target."os" or null)))); + } + { + name = "num-traits"; + packageId = "num-traits"; + usesDefaultFeatures = false; + } + { + name = "wasm-bindgen"; + packageId = "wasm-bindgen"; + optional = true; + target = { target, features }: (("wasm32" == target."arch" or null) && (!(("emscripten" == target."os" or null) || ("wasi" == target."os" or null)))); + } + { + name = "windows-targets"; + packageId = "windows-targets 0.52.5"; + optional = true; + target = { target, features }: (target."windows" or false); + } + ]; + features = { + "android-tzdata" = [ "dep:android-tzdata" ]; + "arbitrary" = [ "dep:arbitrary" ]; + "clock" = [ "winapi" "iana-time-zone" "android-tzdata" "now" ]; + "default" = [ "clock" "std" "oldtime" "wasmbind" ]; + "iana-time-zone" = [ "dep:iana-time-zone" ]; + "js-sys" = [ "dep:js-sys" ]; + "now" = [ "std" ]; + "pure-rust-locales" = [ "dep:pure-rust-locales" ]; + "rkyv" = [ "dep:rkyv" "rkyv/size_32" ]; + "rkyv-16" = [ "dep:rkyv" "rkyv?/size_16" ]; + "rkyv-32" = [ "dep:rkyv" "rkyv?/size_32" ]; + "rkyv-64" = [ "dep:rkyv" "rkyv?/size_64" ]; + "rkyv-validation" = [ "rkyv?/validation" ]; + "serde" = [ "dep:serde" ]; + "std" = [ "alloc" ]; + "unstable-locales" = [ "pure-rust-locales" ]; + "wasm-bindgen" = [ "dep:wasm-bindgen" ]; + "wasmbind" = [ "wasm-bindgen" "js-sys" ]; + "winapi" = [ "windows-targets" ]; + "windows-targets" = [ "dep:windows-targets" ]; + }; + resolvedDefaultFeatures = [ "alloc" "android-tzdata" "clock" "iana-time-zone" "js-sys" "now" "std" "wasm-bindgen" "wasmbind" "winapi" "windows-targets" ]; + }; + "clap" = rec { + crateName = "clap"; + version = "4.5.4"; + edition = "2021"; + crateBin = []; + sha256 = "1828wm9qws5gh2xnimnvmp2vria6d6hsxnqmhnm84dwjcxm0dg4h"; + dependencies = [ + { + name = "clap_builder"; + packageId = "clap_builder"; + usesDefaultFeatures = false; + } + { + name = "clap_derive"; + packageId = "clap_derive"; + optional = true; + } + ]; + features = { + "cargo" = [ "clap_builder/cargo" ]; + "color" = [ "clap_builder/color" ]; + "debug" = [ "clap_builder/debug" "clap_derive?/debug" ]; + "default" = [ "std" "color" "help" "usage" "error-context" "suggestions" ]; + "deprecated" = [ "clap_builder/deprecated" "clap_derive?/deprecated" ]; + "derive" = [ "dep:clap_derive" ]; + "env" = [ "clap_builder/env" ]; + "error-context" = [ "clap_builder/error-context" ]; + "help" = [ "clap_builder/help" ]; + "std" = [ "clap_builder/std" ]; + "string" = [ "clap_builder/string" ]; + "suggestions" = [ "clap_builder/suggestions" ]; + "unicode" = [ "clap_builder/unicode" ]; + "unstable-doc" = [ "clap_builder/unstable-doc" "derive" ]; + "unstable-styles" = [ "clap_builder/unstable-styles" ]; + "unstable-v5" = [ "clap_builder/unstable-v5" "clap_derive?/unstable-v5" "deprecated" ]; + "usage" = [ "clap_builder/usage" ]; + "wrap_help" = [ "clap_builder/wrap_help" ]; + }; + resolvedDefaultFeatures = [ "color" "default" "derive" "error-context" "help" "std" "suggestions" "usage" "wrap_help" ]; + }; + "clap_builder" = rec { + crateName = "clap_builder"; + version = "4.5.2"; + edition = "2021"; + sha256 = "1d7p4hph4fyhaphkf0v5zv0kq4lz25a9jq2f901yrq3afqp9w4mf"; + dependencies = [ + { + name = "anstream"; + packageId = "anstream"; + optional = true; + } + { + name = "anstyle"; + packageId = "anstyle"; + } + { + name = "clap_lex"; + packageId = "clap_lex"; + } + { + name = "strsim"; + packageId = "strsim"; + optional = true; + } + { + name = "terminal_size"; + packageId = "terminal_size"; + optional = true; + } + ]; + features = { + "color" = [ "dep:anstream" ]; + "debug" = [ "dep:backtrace" ]; + "default" = [ "std" "color" "help" "usage" "error-context" "suggestions" ]; + "std" = [ "anstyle/std" ]; + "suggestions" = [ "dep:strsim" "error-context" ]; + "unicode" = [ "dep:unicode-width" "dep:unicase" ]; + "unstable-doc" = [ "cargo" "wrap_help" "env" "unicode" "string" ]; + "unstable-styles" = [ "color" ]; + "unstable-v5" = [ "deprecated" ]; + "wrap_help" = [ "help" "dep:terminal_size" ]; + }; + resolvedDefaultFeatures = [ "color" "error-context" "help" "std" "suggestions" "usage" "wrap_help" ]; + }; + "clap_derive" = rec { + crateName = "clap_derive"; + version = "4.5.4"; + edition = "2021"; + sha256 = "0r2gs2p10pb435w52xzsgz2mmx5qd3qfkmk29y4mbz9ph11k30aj"; + procMacro = true; + dependencies = [ + { + name = "heck"; + packageId = "heck 0.5.0"; + } + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 2.0.66"; + features = [ "full" ]; + } + ]; + features = { + "raw-deprecated" = [ "deprecated" ]; + "unstable-v5" = [ "deprecated" ]; + }; + resolvedDefaultFeatures = [ "default" ]; + }; + "clap_lex" = rec { + crateName = "clap_lex"; + version = "0.7.0"; + edition = "2021"; + sha256 = "1kh1sckgq71kay2rrr149pl9gbsrvyccsq6xm5xpnq0cxnyqzk4q"; + + }; + "colorchoice" = rec { + crateName = "colorchoice"; + version = "1.0.1"; + edition = "2021"; + sha256 = "08h4jsrd2j5k6lp1b9v5p1f1g7cmyzm4djsvb3ydywdb4hmqashb"; + + }; + "command_cad" = rec { + crateName = "command_cad"; + version = "0.6.0"; + edition = "2021"; + crateBin = [ + { + name = "command_cad"; + path = "src/main.rs"; + requiredFeatures = [ ]; + } + ]; + # We can't filter paths with references in Nix 2.4 + # See https://github.com/NixOS/nix/issues/5410 + src = if ((lib.versionOlder builtins.nixVersion "2.4pre20211007") || (lib.versionOlder "2.5" builtins.nixVersion )) + then lib.cleanSourceWith { filter = sourceFilter; src = ./.; } + else ./.; + dependencies = [ + { + name = "anyhow"; + packageId = "anyhow"; + } + { + name = "arrayvec"; + packageId = "arrayvec"; + } + { + name = "bezier-rs"; + packageId = "bezier-rs"; + } + { + name = "casey"; + packageId = "casey"; + } + { + name = "clap"; + packageId = "clap"; + features = [ "derive" "wrap_help" ]; + } + { + name = "common_data_types"; + packageId = "common_data_types"; + } + { + name = "compact_str"; + packageId = "compact_str"; + } + { + name = "const-str"; + packageId = "const-str"; + } + { + name = "enum_dispatch"; + packageId = "enum_dispatch"; + } + { + name = "enum_downcast"; + packageId = "enum_downcast"; + features = [ "derive" ]; + } + { + name = "fj-core"; + packageId = "fj-core"; + } + { + name = "fj-export"; + packageId = "fj-export"; + } + { + name = "fj-math"; + packageId = "fj-math"; + } + { + name = "fortuples"; + packageId = "fortuples"; + } + { + name = "git2"; + packageId = "git2"; + } + { + name = "glam"; + packageId = "glam"; + } + { + name = "imstr"; + packageId = "imstr"; + features = [ "std" "nom" ]; + } + { + name = "lazy_static"; + packageId = "lazy_static"; + } + { + name = "log"; + packageId = "log"; + } + { + name = "macros"; + packageId = "macros"; + } + { + name = "nalgebra"; + packageId = "nalgebra"; + } + { + name = "nom"; + packageId = "nom"; + } + { + name = "nom_locate"; + packageId = "nom_locate"; + } + { + name = "ouroboros"; + packageId = "ouroboros"; + } + { + name = "paste"; + packageId = "paste"; + } + { + name = "semver"; + packageId = "semver"; + features = [ "serde" ]; + } + { + name = "serde"; + packageId = "serde"; + features = [ "derive" ]; + } + { + name = "serde_json"; + packageId = "serde_json"; + } + { + name = "serde_yaml"; + packageId = "serde_yaml"; + } + { + name = "stderrlog"; + packageId = "stderrlog"; + } + { + name = "tempfile"; + packageId = "tempfile"; + } + { + name = "uom"; + packageId = "uom"; + } + { + name = "whoami"; + packageId = "whoami"; + } + ]; + buildDependencies = [ + { + name = "common_data_types"; + packageId = "common_data_types"; + } + { + name = "csv"; + packageId = "csv"; + } + { + name = "serde"; + packageId = "serde"; + features = [ "derive" ]; + } + { + name = "uneval"; + packageId = "uneval"; + } + ]; + + }; + "common_data_types" = rec { + crateName = "common_data_types"; + version = "0.1.0"; + edition = "2021"; + # We can't filter paths with references in Nix 2.4 + # See https://github.com/NixOS/nix/issues/5410 + src = if ((lib.versionOlder builtins.nixVersion "2.4pre20211007") || (lib.versionOlder "2.5" builtins.nixVersion )) + then lib.cleanSourceWith { filter = sourceFilter; src = ./crates/common_data_types; } + else ./crates/common_data_types; + dependencies = [ + { + name = "ordered-float"; + packageId = "ordered-float"; + } + { + name = "paste"; + packageId = "paste"; + } + { + name = "serde"; + packageId = "serde"; + features = [ "derive" ]; + } + ]; + + }; + "compact_str" = rec { + crateName = "compact_str"; + version = "0.7.1"; + edition = "2021"; + sha256 = "0gvvfc2c6pg1rwr2w36ra4674w3lzwg97vq2v6k791w30169qszq"; + authors = [ + "Parker Timmerman " + ]; + dependencies = [ + { + name = "castaway"; + packageId = "castaway"; + } + { + name = "cfg-if"; + packageId = "cfg-if"; + } + { + name = "itoa"; + packageId = "itoa"; + } + { + name = "ryu"; + packageId = "ryu"; + } + { + name = "static_assertions"; + packageId = "static_assertions"; + } + ]; + devDependencies = [ + { + name = "cfg-if"; + packageId = "cfg-if"; + } + ]; + features = { + "arbitrary" = [ "dep:arbitrary" ]; + "bytes" = [ "dep:bytes" ]; + "markup" = [ "dep:markup" ]; + "proptest" = [ "dep:proptest" ]; + "quickcheck" = [ "dep:quickcheck" ]; + "rkyv" = [ "dep:rkyv" ]; + "serde" = [ "dep:serde" ]; + "smallvec" = [ "dep:smallvec" ]; + }; + }; + "const-str" = rec { + crateName = "const-str"; + version = "0.5.7"; + edition = "2021"; + sha256 = "1agvan36a2fgks5w47kk8idym54rdk504p6q2nj8gf9v136cq61n"; + libName = "const_str"; + authors = [ + "Nugine " + ]; + features = { + "all" = [ "std" "proc" "regex" "http" "case" ]; + "case" = [ "proc" "const-str-proc-macro?/heck" ]; + "http" = [ "proc" "const-str-proc-macro?/http" ]; + "proc" = [ "dep:const-str-proc-macro" ]; + "regex" = [ "proc" "const-str-proc-macro?/regex" ]; + }; + resolvedDefaultFeatures = [ "default" ]; + }; + "core-foundation-sys" = rec { + crateName = "core-foundation-sys"; + version = "0.8.6"; + edition = "2018"; + sha256 = "13w6sdf06r0hn7bx2b45zxsg1mm2phz34jikm6xc5qrbr6djpsh6"; + libName = "core_foundation_sys"; + authors = [ + "The Servo Project Developers" + ]; + features = { + "default" = [ "link" ]; + }; + resolvedDefaultFeatures = [ "default" "link" ]; + }; + "crc32fast" = rec { + crateName = "crc32fast"; + version = "1.4.2"; + edition = "2015"; + sha256 = "1czp7vif73b8xslr3c9yxysmh9ws2r8824qda7j47ffs9pcnjxx9"; + authors = [ + "Sam Rijs " + "Alex Crichton " + ]; + dependencies = [ + { + name = "cfg-if"; + packageId = "cfg-if"; + } + ]; + features = { + "default" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "crossbeam-utils" = rec { + crateName = "crossbeam-utils"; + version = "0.8.20"; + edition = "2021"; + sha256 = "100fksq5mm1n7zj242cclkw6yf7a4a8ix3lvpfkhxvdhbda9kv12"; + libName = "crossbeam_utils"; + features = { + "default" = [ "std" ]; + "loom" = [ "dep:loom" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "csv" = rec { + crateName = "csv"; + version = "1.3.0"; + edition = "2021"; + sha256 = "1zjrlycvn44fxd9m8nwy8x33r9ncgk0k3wvy4fnvb9rpsks4ymxc"; + authors = [ + "Andrew Gallant " + ]; + dependencies = [ + { + name = "csv-core"; + packageId = "csv-core"; + } + { + name = "itoa"; + packageId = "itoa"; + } + { + name = "ryu"; + packageId = "ryu"; + } + { + name = "serde"; + packageId = "serde"; + } + ]; + devDependencies = [ + { + name = "serde"; + packageId = "serde"; + features = [ "derive" ]; + } + ]; + + }; + "csv-core" = rec { + crateName = "csv-core"; + version = "0.1.11"; + edition = "2018"; + sha256 = "0w7s7qa60xb054rqddpyg53xq2b29sf3rbhcl8sbdx02g4yjpyjy"; + libName = "csv_core"; + authors = [ + "Andrew Gallant " + ]; + dependencies = [ + { + name = "memchr"; + packageId = "memchr"; + usesDefaultFeatures = false; + } + ]; + features = { + "libc" = [ "memchr/libc" ]; + }; + resolvedDefaultFeatures = [ "default" ]; + }; + "decorum" = rec { + crateName = "decorum"; + version = "0.3.1"; + edition = "2018"; + sha256 = "1kz5zlh2j345vgr9fbs223wxgz0hd3jkndj91hzmqkx1r39mj5r8"; + authors = [ + "Sean Olson " + ]; + dependencies = [ + { + name = "approx"; + packageId = "approx 0.3.2"; + optional = true; + usesDefaultFeatures = false; + } + { + name = "num-traits"; + packageId = "num-traits"; + usesDefaultFeatures = false; + } + { + name = "serde"; + packageId = "serde"; + optional = true; + usesDefaultFeatures = false; + } + { + name = "serde_derive"; + packageId = "serde_derive"; + optional = true; + usesDefaultFeatures = false; + } + ]; + features = { + "approx" = [ "dep:approx" ]; + "default" = [ "approx" "serialize-serde" "std" ]; + "serde" = [ "dep:serde" ]; + "serde_derive" = [ "dep:serde_derive" ]; + "serialize-serde" = [ "serde" "serde_derive" ]; + "std" = [ "approx/std" "num-traits/std" ]; + }; + resolvedDefaultFeatures = [ "approx" "default" "serde" "serde_derive" "serialize-serde" "std" ]; + }; + "downcast-rs" = rec { + crateName = "downcast-rs"; + version = "1.2.1"; + edition = "2015"; + sha256 = "1lmrq383d1yszp7mg5i7i56b17x2lnn3kb91jwsq0zykvg2jbcvm"; + libName = "downcast_rs"; + authors = [ + "Ashish Myles " + "Runji Wang " + ]; + features = { + "default" = [ "std" ]; + }; + }; + "either" = rec { + crateName = "either"; + version = "1.12.0"; + edition = "2018"; + sha256 = "12xmhlrv5gfsraimh6xaxcmb0qh6cc7w7ap4sw40ky9wfm095jix"; + authors = [ + "bluss" + ]; + features = { + "default" = [ "use_std" ]; + "serde" = [ "dep:serde" ]; + }; + resolvedDefaultFeatures = [ "use_std" ]; + }; + "enum_dispatch" = rec { + crateName = "enum_dispatch"; + version = "0.3.13"; + edition = "2018"; + sha256 = "1kby2jz173ggg7wk41vjsskmkdyx7749ll8lhqhv6mb5qqmww65a"; + procMacro = true; + authors = [ + "Anton Lazarev " + ]; + dependencies = [ + { + name = "once_cell"; + packageId = "once_cell"; + } + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 2.0.66"; + features = [ "full" ]; + } + ]; + + }; + "enum_downcast" = rec { + crateName = "enum_downcast"; + version = "0.1.0"; + edition = "2021"; + sha256 = "0jlbrpffnrq6mgijii27gm6a3g14xags783ldzjlly8drdgh6cp5"; + dependencies = [ + { + name = "enum_downcast_derive"; + packageId = "enum_downcast_derive"; + optional = true; + } + ]; + features = { + "derive" = [ "enum_downcast_derive" ]; + "enum_downcast_derive" = [ "dep:enum_downcast_derive" ]; + }; + resolvedDefaultFeatures = [ "default" "derive" "enum_downcast_derive" ]; + }; + "enum_downcast_derive" = rec { + crateName = "enum_downcast_derive"; + version = "0.1.0"; + edition = "2021"; + sha256 = "0jk3gvzvhjdh4bvykm1j8hv41l6gm1kwgxxd2c1s2snqj5zris50"; + procMacro = true; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 2.0.66"; + features = [ "full" "extra-traits" ]; + } + ]; + + }; + "equivalent" = rec { + crateName = "equivalent"; + version = "1.0.1"; + edition = "2015"; + sha256 = "1malmx5f4lkfvqasz319lq6gb3ddg19yzf9s8cykfsgzdmyq0hsl"; + + }; + "errno" = rec { + crateName = "errno"; + version = "0.3.9"; + edition = "2018"; + sha256 = "1fi0m0493maq1jygcf1bya9cymz2pc1mqxj26bdv7yjd37v5qk2k"; + authors = [ + "Chris Wong " + ]; + dependencies = [ + { + name = "libc"; + packageId = "libc"; + usesDefaultFeatures = false; + target = { target, features }: ("hermit" == target."os" or null); + } + { + name = "libc"; + packageId = "libc"; + usesDefaultFeatures = false; + target = { target, features }: ("wasi" == target."os" or null); + } + { + name = "libc"; + packageId = "libc"; + usesDefaultFeatures = false; + target = { target, features }: (target."unix" or false); + } + { + name = "windows-sys"; + packageId = "windows-sys 0.52.0"; + target = { target, features }: (target."windows" or false); + features = [ "Win32_Foundation" "Win32_System_Diagnostics_Debug" ]; + } + ]; + features = { + "default" = [ "std" ]; + "std" = [ "libc/std" ]; + }; + resolvedDefaultFeatures = [ "std" ]; + }; + "fastrand" = rec { + crateName = "fastrand"; + version = "2.1.0"; + edition = "2018"; + sha256 = "06p5d0rxq7by260m4ym9ial0bwgi0v42lrvhl6nm2g7h0h2m3h4z"; + authors = [ + "Stjepan Glavina " + ]; + features = { + "default" = [ "std" ]; + "getrandom" = [ "dep:getrandom" ]; + "js" = [ "std" "getrandom" ]; + "std" = [ "alloc" ]; + }; + resolvedDefaultFeatures = [ "alloc" "default" "std" ]; + }; + "fj-core" = rec { + crateName = "fj-core"; + version = "0.49.0"; + edition = "2021"; + workspace_member = null; + src = pkgs.fetchgit { + url = "https://github.com/hannobraun/fornjot.git"; + rev = "613779934166dea13b7f87c0d56f3952f9658ff9"; + sha256 = "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d"; + }; + libName = "fj_core"; + dependencies = [ + { + name = "fj-interop"; + packageId = "fj-interop"; + } + { + name = "fj-math"; + packageId = "fj-math"; + } + { + name = "itertools"; + packageId = "itertools 0.13.0"; + } + { + name = "parking_lot"; + packageId = "parking_lot"; + } + { + name = "robust"; + packageId = "robust"; + } + { + name = "spade"; + packageId = "spade"; + } + { + name = "thiserror"; + packageId = "thiserror"; + } + { + name = "type-map"; + packageId = "type-map"; + } + ]; + + }; + "fj-export" = rec { + crateName = "fj-export"; + version = "0.49.0"; + edition = "2021"; + workspace_member = null; + src = pkgs.fetchgit { + url = "https://github.com/hannobraun/fornjot.git"; + rev = "613779934166dea13b7f87c0d56f3952f9658ff9"; + sha256 = "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d"; + }; + libName = "fj_export"; + dependencies = [ + { + name = "fj-interop"; + packageId = "fj-interop"; + } + { + name = "fj-math"; + packageId = "fj-math"; + } + { + name = "stl"; + packageId = "stl"; + } + { + name = "thiserror"; + packageId = "thiserror"; + } + { + name = "threemf"; + packageId = "threemf"; + } + { + name = "wavefront_rs"; + packageId = "wavefront_rs"; + } + ]; + + }; + "fj-interop" = rec { + crateName = "fj-interop"; + version = "0.49.0"; + edition = "2021"; + workspace_member = null; + src = pkgs.fetchgit { + url = "https://github.com/hannobraun/fornjot.git"; + rev = "613779934166dea13b7f87c0d56f3952f9658ff9"; + sha256 = "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d"; + }; + libName = "fj_interop"; + dependencies = [ + { + name = "fj-math"; + packageId = "fj-math"; + } + ]; + + }; + "fj-math" = rec { + crateName = "fj-math"; + version = "0.49.0"; + edition = "2021"; + workspace_member = null; + src = pkgs.fetchgit { + url = "https://github.com/hannobraun/fornjot.git"; + rev = "613779934166dea13b7f87c0d56f3952f9658ff9"; + sha256 = "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d"; + }; + libName = "fj_math"; + dependencies = [ + { + name = "approx"; + packageId = "approx 0.5.1"; + } + { + name = "decorum"; + packageId = "decorum"; + } + { + name = "nalgebra"; + packageId = "nalgebra"; + } + { + name = "num-traits"; + packageId = "num-traits"; + } + { + name = "parry2d-f64"; + packageId = "parry2d-f64"; + } + { + name = "parry3d-f64"; + packageId = "parry3d-f64"; + } + { + name = "robust"; + packageId = "robust"; + } + ]; + + }; + "flate2" = rec { + crateName = "flate2"; + version = "1.0.30"; + edition = "2018"; + sha256 = "1bjx56n0wq5w7vsjn7b5rbmqiw0vc3mfzz1rl7i2jy0wzmy44m2z"; + authors = [ + "Alex Crichton " + "Josh Triplett " + ]; + dependencies = [ + { + name = "crc32fast"; + packageId = "crc32fast"; + } + { + name = "miniz_oxide"; + packageId = "miniz_oxide"; + optional = true; + usesDefaultFeatures = false; + features = [ "with-alloc" ]; + } + { + name = "miniz_oxide"; + packageId = "miniz_oxide"; + usesDefaultFeatures = false; + target = { target, features }: (("wasm32" == target."arch" or null) && (!("emscripten" == target."os" or null))); + features = [ "with-alloc" ]; + } + ]; + features = { + "any_zlib" = [ "any_impl" ]; + "cloudflare-zlib-sys" = [ "dep:cloudflare-zlib-sys" ]; + "cloudflare_zlib" = [ "any_zlib" "cloudflare-zlib-sys" ]; + "default" = [ "rust_backend" ]; + "libz-ng-sys" = [ "dep:libz-ng-sys" ]; + "libz-rs-sys" = [ "dep:libz-rs-sys" ]; + "libz-sys" = [ "dep:libz-sys" ]; + "miniz-sys" = [ "rust_backend" ]; + "miniz_oxide" = [ "dep:miniz_oxide" ]; + "rust_backend" = [ "miniz_oxide" "any_impl" ]; + "zlib" = [ "any_zlib" "libz-sys" ]; + "zlib-default" = [ "any_zlib" "libz-sys/default" ]; + "zlib-ng" = [ "any_zlib" "libz-ng-sys" ]; + "zlib-ng-compat" = [ "zlib" "libz-sys/zlib-ng" ]; + "zlib-rs" = [ "any_zlib" "libz-rs-sys" ]; + }; + resolvedDefaultFeatures = [ "any_impl" "miniz_oxide" "rust_backend" ]; + }; + "form_urlencoded" = rec { + crateName = "form_urlencoded"; + version = "1.2.1"; + edition = "2018"; + sha256 = "0milh8x7nl4f450s3ddhg57a3flcv6yq8hlkyk6fyr3mcb128dp1"; + authors = [ + "The rust-url developers" + ]; + dependencies = [ + { + name = "percent-encoding"; + packageId = "percent-encoding"; + usesDefaultFeatures = false; + } + ]; + features = { + "alloc" = [ "percent-encoding/alloc" ]; + "default" = [ "std" ]; + "std" = [ "alloc" "percent-encoding/std" ]; + }; + resolvedDefaultFeatures = [ "alloc" "default" "std" ]; + }; + "fortuples" = rec { + crateName = "fortuples"; + version = "0.9.1"; + edition = "2021"; + sha256 = "1kpam2ipawqhypc1fsvvnl993jnxa3ifavpvxnvw9jp9hy00lqw7"; + procMacro = true; + authors = [ + "Daniel Shiposha" + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 1.0.109"; + features = [ "full" ]; + } + ]; + features = { + }; + }; + "git2" = rec { + crateName = "git2"; + version = "0.18.3"; + edition = "2018"; + sha256 = "0w7gcq6v9kdlh0vcv27xrk09c1bhkarqhnp52pvnnximzrxnlbi3"; + authors = [ + "Josh Triplett " + "Alex Crichton " + ]; + dependencies = [ + { + name = "bitflags"; + packageId = "bitflags 2.5.0"; + } + { + name = "libc"; + packageId = "libc"; + } + { + name = "libgit2-sys"; + packageId = "libgit2-sys"; + } + { + name = "log"; + packageId = "log"; + } + { + name = "openssl-probe"; + packageId = "openssl-probe"; + optional = true; + target = { target, features }: ((target."unix" or false) && (!("macos" == target."os" or null))); + } + { + name = "openssl-sys"; + packageId = "openssl-sys"; + optional = true; + target = { target, features }: ((target."unix" or false) && (!("macos" == target."os" or null))); + } + { + name = "url"; + packageId = "url"; + } + ]; + features = { + "default" = [ "ssh" "https" "ssh_key_from_memory" ]; + "https" = [ "libgit2-sys/https" "openssl-sys" "openssl-probe" ]; + "openssl-probe" = [ "dep:openssl-probe" ]; + "openssl-sys" = [ "dep:openssl-sys" ]; + "ssh" = [ "libgit2-sys/ssh" ]; + "ssh_key_from_memory" = [ "libgit2-sys/ssh_key_from_memory" ]; + "vendored-libgit2" = [ "libgit2-sys/vendored" ]; + "vendored-openssl" = [ "openssl-sys/vendored" "libgit2-sys/vendored-openssl" ]; + "zlib-ng-compat" = [ "libgit2-sys/zlib-ng-compat" ]; + }; + resolvedDefaultFeatures = [ "default" "https" "openssl-probe" "openssl-sys" "ssh" "ssh_key_from_memory" ]; + }; + "glam" = rec { + crateName = "glam"; + version = "0.24.2"; + edition = "2021"; + sha256 = "0ibrq68ldg1gyynb5ss5hx0gr6p3397cfclh1xrl5prba4bqqhdm"; + authors = [ + "Cameron Hart " + ]; + dependencies = [ + { + name = "serde"; + packageId = "serde"; + optional = true; + usesDefaultFeatures = false; + } + ]; + features = { + "approx" = [ "dep:approx" ]; + "bytecheck" = [ "dep:bytecheck" ]; + "bytemuck" = [ "dep:bytemuck" ]; + "default" = [ "std" ]; + "libm" = [ "dep:libm" ]; + "mint" = [ "dep:mint" ]; + "rand" = [ "dep:rand" ]; + "rkyv" = [ "dep:rkyv" ]; + "serde" = [ "dep:serde" ]; + }; + resolvedDefaultFeatures = [ "default" "serde" "std" ]; + }; + "hashbrown" = rec { + crateName = "hashbrown"; + version = "0.14.5"; + edition = "2021"; + sha256 = "1wa1vy1xs3mp11bn3z9dv0jricgr6a2j0zkf1g19yz3vw4il89z5"; + authors = [ + "Amanieu d'Antras " + ]; + dependencies = [ + { + name = "ahash"; + packageId = "ahash"; + optional = true; + usesDefaultFeatures = false; + } + { + name = "allocator-api2"; + packageId = "allocator-api2"; + optional = true; + usesDefaultFeatures = false; + features = [ "alloc" ]; + } + ]; + features = { + "ahash" = [ "dep:ahash" ]; + "alloc" = [ "dep:alloc" ]; + "allocator-api2" = [ "dep:allocator-api2" ]; + "compiler_builtins" = [ "dep:compiler_builtins" ]; + "core" = [ "dep:core" ]; + "default" = [ "ahash" "inline-more" "allocator-api2" ]; + "equivalent" = [ "dep:equivalent" ]; + "nightly" = [ "allocator-api2?/nightly" "bumpalo/allocator_api" ]; + "rayon" = [ "dep:rayon" ]; + "rkyv" = [ "dep:rkyv" ]; + "rustc-dep-of-std" = [ "nightly" "core" "compiler_builtins" "alloc" "rustc-internal-api" ]; + "serde" = [ "dep:serde" ]; + }; + resolvedDefaultFeatures = [ "ahash" "allocator-api2" "default" "inline-more" "raw" ]; + }; + "heck 0.4.1" = rec { + crateName = "heck"; + version = "0.4.1"; + edition = "2018"; + sha256 = "1a7mqsnycv5z4z5vnv1k34548jzmc0ajic7c1j8jsaspnhw5ql4m"; + authors = [ + "Without Boats " + ]; + features = { + "unicode" = [ "unicode-segmentation" ]; + "unicode-segmentation" = [ "dep:unicode-segmentation" ]; + }; + resolvedDefaultFeatures = [ "default" ]; + }; + "heck 0.5.0" = rec { + crateName = "heck"; + version = "0.5.0"; + edition = "2021"; + sha256 = "1sjmpsdl8czyh9ywl3qcsfsq9a307dg4ni2vnlwgnzzqhc4y0113"; + + }; + "hermit-abi" = rec { + crateName = "hermit-abi"; + version = "0.3.9"; + edition = "2021"; + sha256 = "092hxjbjnq5fmz66grd9plxd0sh6ssg5fhgwwwqbrzgzkjwdycfj"; + libName = "hermit_abi"; + authors = [ + "Stefan Lankes" + ]; + features = { + "alloc" = [ "dep:alloc" ]; + "compiler_builtins" = [ "dep:compiler_builtins" ]; + "core" = [ "dep:core" ]; + "rustc-dep-of-std" = [ "core" "alloc" "compiler_builtins/rustc-dep-of-std" ]; + }; + resolvedDefaultFeatures = [ "default" ]; + }; + "iana-time-zone" = rec { + crateName = "iana-time-zone"; + version = "0.1.60"; + edition = "2018"; + sha256 = "0hdid5xz3jznm04lysjm3vi93h3c523w0hcc3xba47jl3ddbpzz7"; + libName = "iana_time_zone"; + authors = [ + "Andrew Straw " + "René Kijewski " + "Ryan Lopopolo " + ]; + dependencies = [ + { + name = "android_system_properties"; + packageId = "android_system_properties"; + target = { target, features }: ("android" == target."os" or null); + } + { + name = "core-foundation-sys"; + packageId = "core-foundation-sys"; + target = { target, features }: (("macos" == target."os" or null) || ("ios" == target."os" or null)); + } + { + name = "iana-time-zone-haiku"; + packageId = "iana-time-zone-haiku"; + target = { target, features }: ("haiku" == target."os" or null); + } + { + name = "js-sys"; + packageId = "js-sys"; + target = { target, features }: ("wasm32" == target."arch" or null); + } + { + name = "wasm-bindgen"; + packageId = "wasm-bindgen"; + target = { target, features }: ("wasm32" == target."arch" or null); + } + { + name = "windows-core"; + packageId = "windows-core"; + target = { target, features }: ("windows" == target."os" or null); + } + ]; + features = { + }; + resolvedDefaultFeatures = [ "fallback" ]; + }; + "iana-time-zone-haiku" = rec { + crateName = "iana-time-zone-haiku"; + version = "0.1.2"; + edition = "2018"; + sha256 = "17r6jmj31chn7xs9698r122mapq85mfnv98bb4pg6spm0si2f67k"; + libName = "iana_time_zone_haiku"; + authors = [ + "René Kijewski " + ]; + buildDependencies = [ + { + name = "cc"; + packageId = "cc"; + } + ]; + + }; + "idna" = rec { + crateName = "idna"; + version = "0.5.0"; + edition = "2018"; + sha256 = "1xhjrcjqq0l5bpzvdgylvpkgk94panxgsirzhjnnqfdgc4a9nkb3"; + authors = [ + "The rust-url developers" + ]; + dependencies = [ + { + name = "unicode-bidi"; + packageId = "unicode-bidi"; + usesDefaultFeatures = false; + features = [ "hardcoded-data" ]; + } + { + name = "unicode-normalization"; + packageId = "unicode-normalization"; + usesDefaultFeatures = false; + } + ]; + features = { + "default" = [ "std" ]; + "std" = [ "alloc" "unicode-bidi/std" "unicode-normalization/std" ]; + }; + resolvedDefaultFeatures = [ "alloc" "default" "std" ]; + }; + "imstr" = rec { + crateName = "imstr"; + version = "0.2.0"; + edition = "2021"; + workspace_member = null; + src = pkgs.fetchgit { + url = "https://github.com/IamTheCarl/imstr"; + rev = "a679d58d06f06a8e87c8640922aa157a0f86693f"; + sha256 = "0csqvjlgi1wvrfhidy0khivwx5p3h0rhwzz5r5zsx0zzwn7qpn2d"; + }; + authors = [ + "Patrick Elsen " + ]; + dependencies = [ + { + name = "nom"; + packageId = "nom"; + optional = true; + } + ]; + features = { + "nom" = [ "dep:nom" ]; + "peg" = [ "dep:peg-runtime" ]; + "serde" = [ "dep:serde" ]; + }; + resolvedDefaultFeatures = [ "default" "nom" "std" ]; + }; + "indexmap" = rec { + crateName = "indexmap"; + version = "2.2.6"; + edition = "2021"; + sha256 = "09hgwi2ig0wyj5rjziia76zmhgfj95k0jb4ic3iiawm4vlavg3qn"; + dependencies = [ + { + name = "equivalent"; + packageId = "equivalent"; + usesDefaultFeatures = false; + } + { + name = "hashbrown"; + packageId = "hashbrown"; + usesDefaultFeatures = false; + features = [ "raw" ]; + } + ]; + features = { + "arbitrary" = [ "dep:arbitrary" ]; + "borsh" = [ "dep:borsh" ]; + "default" = [ "std" ]; + "quickcheck" = [ "dep:quickcheck" ]; + "rayon" = [ "dep:rayon" ]; + "rustc-rayon" = [ "dep:rustc-rayon" ]; + "serde" = [ "dep:serde" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "is-terminal" = rec { + crateName = "is-terminal"; + version = "0.4.12"; + edition = "2018"; + sha256 = "12vk6g0f94zlxl6mdh5gc4jdjb469n9k9s7y3vb0iml05gpzagzj"; + libName = "is_terminal"; + authors = [ + "softprops " + "Dan Gohman " + ]; + dependencies = [ + { + name = "hermit-abi"; + packageId = "hermit-abi"; + target = { target, features }: ("hermit" == target."os" or null); + } + { + name = "libc"; + packageId = "libc"; + target = { target, features }: ((target."unix" or false) || ("wasi" == target."os" or null)); + } + { + name = "windows-sys"; + packageId = "windows-sys 0.52.0"; + target = { target, features }: (target."windows" or false); + features = [ "Win32_Foundation" "Win32_Storage_FileSystem" "Win32_System_Console" ]; + } + ]; + devDependencies = [ + { + name = "libc"; + packageId = "libc"; + target = {target, features}: ((target."unix" or false) || ("wasi" == target."os" or null)); + } + ]; + + }; + "is_terminal_polyfill" = rec { + crateName = "is_terminal_polyfill"; + version = "1.70.0"; + edition = "2021"; + sha256 = "0018q5cf3rifbnzfc1w1z1xcx9c6i7xlywp2n0fw4limq1vqaizq"; + features = { + }; + resolvedDefaultFeatures = [ "default" ]; + }; + "itertools 0.12.1" = rec { + crateName = "itertools"; + version = "0.12.1"; + edition = "2018"; + sha256 = "0s95jbb3ndj1lvfxyq5wanc0fm0r6hg6q4ngb92qlfdxvci10ads"; + authors = [ + "bluss" + ]; + dependencies = [ + { + name = "either"; + packageId = "either"; + usesDefaultFeatures = false; + } + ]; + features = { + "default" = [ "use_std" ]; + "use_std" = [ "use_alloc" "either/use_std" ]; + }; + resolvedDefaultFeatures = [ "default" "use_alloc" "use_std" ]; + }; + "itertools 0.13.0" = rec { + crateName = "itertools"; + version = "0.13.0"; + edition = "2018"; + sha256 = "11hiy3qzl643zcigknclh446qb9zlg4dpdzfkjaa9q9fqpgyfgj1"; + authors = [ + "bluss" + ]; + dependencies = [ + { + name = "either"; + packageId = "either"; + usesDefaultFeatures = false; + } + ]; + features = { + "default" = [ "use_std" ]; + "use_std" = [ "use_alloc" "either/use_std" ]; + }; + resolvedDefaultFeatures = [ "default" "use_alloc" "use_std" ]; + }; + "itoa" = rec { + crateName = "itoa"; + version = "1.0.11"; + edition = "2018"; + sha256 = "0nv9cqjwzr3q58qz84dcz63ggc54yhf1yqar1m858m1kfd4g3wa9"; + authors = [ + "David Tolnay " + ]; + features = { + "no-panic" = [ "dep:no-panic" ]; + }; + }; + "jobserver" = rec { + crateName = "jobserver"; + version = "0.1.31"; + edition = "2021"; + sha256 = "0vnyfxr5gm03j3lpnd1zswnyvqa40kbssy08pz2m35salfm9kc6j"; + authors = [ + "Alex Crichton " + ]; + dependencies = [ + { + name = "libc"; + packageId = "libc"; + target = { target, features }: (target."unix" or false); + } + ]; + + }; + "js-sys" = rec { + crateName = "js-sys"; + version = "0.3.69"; + edition = "2018"; + sha256 = "0v99rz97asnzapb0jsc3jjhvxpfxr7h7qd97yqyrf9i7viimbh99"; + libName = "js_sys"; + authors = [ + "The wasm-bindgen Developers" + ]; + dependencies = [ + { + name = "wasm-bindgen"; + packageId = "wasm-bindgen"; + } + ]; + + }; + "lazy_static" = rec { + crateName = "lazy_static"; + version = "1.4.0"; + edition = "2015"; + sha256 = "0in6ikhw8mgl33wjv6q6xfrb5b9jr16q8ygjy803fay4zcisvaz2"; + authors = [ + "Marvin Löbel " + ]; + features = { + "spin" = [ "dep:spin" ]; + "spin_no_std" = [ "spin" ]; + }; + }; + "libc" = rec { + crateName = "libc"; + version = "0.2.155"; + edition = "2015"; + sha256 = "0z44c53z54znna8n322k5iwg80arxxpdzjj5260pxxzc9a58icwp"; + authors = [ + "The Rust Project Developers" + ]; + features = { + "default" = [ "std" ]; + "rustc-dep-of-std" = [ "align" "rustc-std-workspace-core" ]; + "rustc-std-workspace-core" = [ "dep:rustc-std-workspace-core" ]; + "use_std" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "default" "extra_traits" "std" ]; + }; + "libgit2-sys" = rec { + crateName = "libgit2-sys"; + version = "0.16.2+1.7.2"; + edition = "2018"; + links = "git2"; + sha256 = "1s149nkximw3n42925rp0jax1sf1zmf8gpcim2g9sp7fnkc2chgf"; + libName = "libgit2_sys"; + libPath = "lib.rs"; + authors = [ + "Josh Triplett " + "Alex Crichton " + ]; + dependencies = [ + { + name = "libc"; + packageId = "libc"; + } + { + name = "libssh2-sys"; + packageId = "libssh2-sys"; + optional = true; + } + { + name = "libz-sys"; + packageId = "libz-sys"; + usesDefaultFeatures = false; + features = [ "libc" ]; + } + { + name = "openssl-sys"; + packageId = "openssl-sys"; + optional = true; + target = { target, features }: (target."unix" or false); + } + ]; + buildDependencies = [ + { + name = "cc"; + packageId = "cc"; + features = [ "parallel" ]; + } + { + name = "pkg-config"; + packageId = "pkg-config"; + } + ]; + features = { + "https" = [ "openssl-sys" ]; + "libssh2-sys" = [ "dep:libssh2-sys" ]; + "openssl-sys" = [ "dep:openssl-sys" ]; + "ssh" = [ "libssh2-sys" ]; + "vendored-openssl" = [ "openssl-sys/vendored" ]; + "zlib-ng-compat" = [ "libz-sys/zlib-ng" "libssh2-sys?/zlib-ng-compat" ]; + }; + resolvedDefaultFeatures = [ "https" "libssh2-sys" "openssl-sys" "ssh" "ssh_key_from_memory" ]; + }; + "libm" = rec { + crateName = "libm"; + version = "0.2.8"; + edition = "2018"; + sha256 = "0n4hk1rs8pzw8hdfmwn96c4568s93kfxqgcqswr7sajd2diaihjf"; + authors = [ + "Jorge Aparicio " + ]; + features = { + "musl-reference-tests" = [ "rand" ]; + "rand" = [ "dep:rand" ]; + }; + resolvedDefaultFeatures = [ "default" ]; + }; + "libssh2-sys" = rec { + crateName = "libssh2-sys"; + version = "0.3.0"; + edition = "2015"; + links = "ssh2"; + sha256 = "1vkidqw5ll71ynqc93hgcq62iqkklzb5268zffd13ql7nwqa1j1d"; + libName = "libssh2_sys"; + libPath = "lib.rs"; + authors = [ + "Alex Crichton " + "Wez Furlong " + "Matteo Bigoi " + ]; + dependencies = [ + { + name = "libc"; + packageId = "libc"; + } + { + name = "libz-sys"; + packageId = "libz-sys"; + usesDefaultFeatures = false; + features = [ "libc" ]; + } + { + name = "openssl-sys"; + packageId = "openssl-sys"; + target = { target, features }: (target."unix" or false); + } + { + name = "openssl-sys"; + packageId = "openssl-sys"; + optional = true; + target = { target, features }: (target."windows" or false); + } + ]; + buildDependencies = [ + { + name = "cc"; + packageId = "cc"; + } + { + name = "pkg-config"; + packageId = "pkg-config"; + } + { + name = "vcpkg"; + packageId = "vcpkg"; + target = {target, features}: ("msvc" == target."env" or null); + } + ]; + features = { + "openssl-on-win32" = [ "openssl-sys" ]; + "openssl-sys" = [ "dep:openssl-sys" ]; + "vendored-openssl" = [ "openssl-sys/vendored" ]; + "zlib-ng-compat" = [ "libz-sys/zlib-ng" ]; + }; + }; + "libz-sys" = rec { + crateName = "libz-sys"; + version = "1.1.18"; + edition = "2018"; + links = "z"; + sha256 = "0bpqmfzvijbrqs29vphnafjz834lpz6pabbsnf85rqppb9pa4pf1"; + libName = "libz_sys"; + authors = [ + "Alex Crichton " + "Josh Triplett " + "Sebastian Thiel " + ]; + dependencies = [ + { + name = "libc"; + packageId = "libc"; + optional = true; + } + ]; + buildDependencies = [ + { + name = "cc"; + packageId = "cc"; + } + { + name = "pkg-config"; + packageId = "pkg-config"; + } + { + name = "vcpkg"; + packageId = "vcpkg"; + } + ]; + features = { + "cmake" = [ "dep:cmake" ]; + "default" = [ "libc" "stock-zlib" ]; + "libc" = [ "dep:libc" ]; + "zlib-ng" = [ "libc" "cmake" ]; + "zlib-ng-no-cmake-experimental-community-maintained" = [ "libc" ]; + }; + resolvedDefaultFeatures = [ "libc" ]; + }; + "linux-raw-sys" = rec { + crateName = "linux-raw-sys"; + version = "0.4.14"; + edition = "2021"; + sha256 = "12gsjgbhhjwywpqcrizv80vrp7p7grsz5laqq773i33wphjsxcvq"; + libName = "linux_raw_sys"; + authors = [ + "Dan Gohman " + ]; + features = { + "compiler_builtins" = [ "dep:compiler_builtins" ]; + "core" = [ "dep:core" ]; + "default" = [ "std" "general" "errno" ]; + "rustc-dep-of-std" = [ "core" "compiler_builtins" "no_std" ]; + }; + resolvedDefaultFeatures = [ "elf" "errno" "general" "ioctl" "no_std" ]; + }; + "lock_api" = rec { + crateName = "lock_api"; + version = "0.4.12"; + edition = "2021"; + sha256 = "05qvxa6g27yyva25a5ghsg85apdxkvr77yhkyhapj6r8vnf8pbq7"; + authors = [ + "Amanieu d'Antras " + ]; + dependencies = [ + { + name = "scopeguard"; + packageId = "scopeguard"; + usesDefaultFeatures = false; + } + ]; + buildDependencies = [ + { + name = "autocfg"; + packageId = "autocfg"; + } + ]; + features = { + "default" = [ "atomic_usize" ]; + "owning_ref" = [ "dep:owning_ref" ]; + "serde" = [ "dep:serde" ]; + }; + resolvedDefaultFeatures = [ "atomic_usize" "default" ]; + }; + "log" = rec { + crateName = "log"; + version = "0.4.21"; + edition = "2021"; + sha256 = "074hldq1q8rlzq2s2qa8f25hj4s3gpw71w64vdwzjd01a4g8rvch"; + authors = [ + "The Rust Project Developers" + ]; + features = { + "kv_serde" = [ "kv_std" "value-bag/serde" "serde" ]; + "kv_std" = [ "std" "kv" "value-bag/error" ]; + "kv_sval" = [ "kv" "value-bag/sval" "sval" "sval_ref" ]; + "kv_unstable" = [ "kv" "value-bag" ]; + "kv_unstable_serde" = [ "kv_serde" "kv_unstable_std" ]; + "kv_unstable_std" = [ "kv_std" "kv_unstable" ]; + "kv_unstable_sval" = [ "kv_sval" "kv_unstable" ]; + "serde" = [ "dep:serde" ]; + "sval" = [ "dep:sval" ]; + "sval_ref" = [ "dep:sval_ref" ]; + "value-bag" = [ "dep:value-bag" ]; + }; + resolvedDefaultFeatures = [ "std" ]; + }; + "macros" = rec { + crateName = "macros"; + version = "0.1.0"; + edition = "2021"; + # We can't filter paths with references in Nix 2.4 + # See https://github.com/NixOS/nix/issues/5410 + src = if ((lib.versionOlder builtins.nixVersion "2.4pre20211007") || (lib.versionOlder "2.5" builtins.nixVersion )) + then lib.cleanSourceWith { filter = sourceFilter; src = ./crates/macros; } + else ./crates/macros; + procMacro = true; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 2.0.66"; + features = [ "derive" ]; + } + ]; + + }; + "matrixmultiply" = rec { + crateName = "matrixmultiply"; + version = "0.3.8"; + edition = "2018"; + sha256 = "1whgrp8ph7904aslqx87h9qm0ks4pxdj2nysffmrhiys6v7w2x3m"; + authors = [ + "bluss" + "R. Janis Goldschmidt" + ]; + dependencies = [ + { + name = "rawpointer"; + packageId = "rawpointer"; + } + ]; + buildDependencies = [ + { + name = "autocfg"; + packageId = "autocfg"; + } + ]; + features = { + "default" = [ "std" ]; + "num_cpus" = [ "dep:num_cpus" ]; + "once_cell" = [ "dep:once_cell" ]; + "thread-tree" = [ "dep:thread-tree" ]; + "threading" = [ "thread-tree" "std" "once_cell" "num_cpus" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "memchr" = rec { + crateName = "memchr"; + version = "2.7.2"; + edition = "2021"; + sha256 = "07bcqxb0vx4ji0648ny5xsicjnpma95x1n07v7mi7jrhsz2l11kc"; + authors = [ + "Andrew Gallant " + "bluss" + ]; + features = { + "compiler_builtins" = [ "dep:compiler_builtins" ]; + "core" = [ "dep:core" ]; + "default" = [ "std" ]; + "logging" = [ "dep:log" ]; + "rustc-dep-of-std" = [ "core" "compiler_builtins" ]; + "std" = [ "alloc" ]; + "use_std" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "alloc" "default" "std" "use_std" ]; + }; + "minimal-lexical" = rec { + crateName = "minimal-lexical"; + version = "0.2.1"; + edition = "2018"; + sha256 = "16ppc5g84aijpri4jzv14rvcnslvlpphbszc7zzp6vfkddf4qdb8"; + libName = "minimal_lexical"; + authors = [ + "Alex Huszagh " + ]; + features = { + "default" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "std" ]; + }; + "miniz_oxide" = rec { + crateName = "miniz_oxide"; + version = "0.7.3"; + edition = "2018"; + sha256 = "1bndap8kj8ihlaz23a5cq0ihc09xh3c1m4ip5dbnpilmw4gx1pw7"; + authors = [ + "Frommi " + "oyvindln " + ]; + dependencies = [ + { + name = "adler"; + packageId = "adler"; + usesDefaultFeatures = false; + } + ]; + features = { + "alloc" = [ "dep:alloc" ]; + "compiler_builtins" = [ "dep:compiler_builtins" ]; + "core" = [ "dep:core" ]; + "default" = [ "with-alloc" ]; + "rustc-dep-of-std" = [ "core" "alloc" "compiler_builtins" "adler/rustc-dep-of-std" ]; + "simd" = [ "simd-adler32" ]; + "simd-adler32" = [ "dep:simd-adler32" ]; + }; + resolvedDefaultFeatures = [ "with-alloc" ]; + }; + "nalgebra" = rec { + crateName = "nalgebra"; + version = "0.32.5"; + edition = "2018"; + sha256 = "1vx210cjajqmrkrlr1ls7s67pb7iy3z0z9nslgfll9939y6r191y"; + authors = [ + "Sébastien Crozet " + ]; + dependencies = [ + { + name = "approx"; + packageId = "approx 0.5.1"; + usesDefaultFeatures = false; + } + { + name = "matrixmultiply"; + packageId = "matrixmultiply"; + optional = true; + } + { + name = "nalgebra-macros"; + packageId = "nalgebra-macros"; + optional = true; + } + { + name = "num-complex"; + packageId = "num-complex"; + usesDefaultFeatures = false; + } + { + name = "num-rational"; + packageId = "num-rational"; + usesDefaultFeatures = false; + } + { + name = "num-traits"; + packageId = "num-traits"; + usesDefaultFeatures = false; + } + { + name = "simba"; + packageId = "simba"; + usesDefaultFeatures = false; + } + { + name = "typenum"; + packageId = "typenum"; + } + ]; + features = { + "alga" = [ "dep:alga" ]; + "arbitrary" = [ "quickcheck" ]; + "bytemuck" = [ "dep:bytemuck" ]; + "compare" = [ "matrixcompare-core" ]; + "convert-bytemuck" = [ "bytemuck" ]; + "convert-glam014" = [ "glam014" ]; + "convert-glam015" = [ "glam015" ]; + "convert-glam016" = [ "glam016" ]; + "convert-glam017" = [ "glam017" ]; + "convert-glam018" = [ "glam018" ]; + "convert-glam019" = [ "glam019" ]; + "convert-glam020" = [ "glam020" ]; + "convert-glam021" = [ "glam021" ]; + "convert-glam022" = [ "glam022" ]; + "convert-glam023" = [ "glam023" ]; + "convert-glam024" = [ "glam024" ]; + "convert-glam025" = [ "glam025" ]; + "convert-mint" = [ "mint" ]; + "cuda" = [ "cust_core" "simba/cuda" ]; + "cust_core" = [ "dep:cust_core" ]; + "debug" = [ "approx/num-complex" "rand" ]; + "default" = [ "std" "macros" ]; + "glam014" = [ "dep:glam014" ]; + "glam015" = [ "dep:glam015" ]; + "glam016" = [ "dep:glam016" ]; + "glam017" = [ "dep:glam017" ]; + "glam018" = [ "dep:glam018" ]; + "glam019" = [ "dep:glam019" ]; + "glam020" = [ "dep:glam020" ]; + "glam021" = [ "dep:glam021" ]; + "glam022" = [ "dep:glam022" ]; + "glam023" = [ "dep:glam023" ]; + "glam024" = [ "dep:glam024" ]; + "glam025" = [ "dep:glam025" ]; + "io" = [ "pest" "pest_derive" ]; + "libm" = [ "simba/libm" ]; + "libm-force" = [ "simba/libm_force" ]; + "macros" = [ "nalgebra-macros" ]; + "matrixcompare-core" = [ "dep:matrixcompare-core" ]; + "matrixmultiply" = [ "dep:matrixmultiply" ]; + "mint" = [ "dep:mint" ]; + "nalgebra-macros" = [ "dep:nalgebra-macros" ]; + "pest" = [ "dep:pest" ]; + "pest_derive" = [ "dep:pest_derive" ]; + "proptest" = [ "dep:proptest" ]; + "proptest-support" = [ "proptest" ]; + "quickcheck" = [ "dep:quickcheck" ]; + "rand" = [ "rand-no-std" "rand-package/std" "rand-package/std_rng" "rand_distr" ]; + "rand-no-std" = [ "rand-package" ]; + "rand-package" = [ "dep:rand-package" ]; + "rand_distr" = [ "dep:rand_distr" ]; + "rayon" = [ "dep:rayon" ]; + "rkyv" = [ "dep:rkyv" ]; + "rkyv-safe-deser" = [ "rkyv-serialize" "rkyv/validation" ]; + "rkyv-serialize" = [ "rkyv-serialize-no-std" "rkyv/std" "rkyv/validation" ]; + "rkyv-serialize-no-std" = [ "rkyv/size_32" ]; + "serde" = [ "dep:serde" ]; + "serde-serialize" = [ "serde-serialize-no-std" "serde/std" ]; + "serde-serialize-no-std" = [ "serde" "num-complex/serde" ]; + "std" = [ "matrixmultiply" "simba/std" ]; + }; + resolvedDefaultFeatures = [ "default" "libm" "macros" "matrixmultiply" "nalgebra-macros" "std" ]; + }; + "nalgebra-macros" = rec { + crateName = "nalgebra-macros"; + version = "0.2.1"; + edition = "2018"; + sha256 = "166rzbzi1hcyjfvwxmrdimrcmflvxxifjfkqxxkdjfnhcznilxli"; + procMacro = true; + libName = "nalgebra_macros"; + authors = [ + "Andreas Longva" + "Sébastien Crozet " + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 1.0.109"; + features = [ "full" ]; + } + ]; + + }; + "nom" = rec { + crateName = "nom"; + version = "7.1.3"; + edition = "2018"; + sha256 = "0jha9901wxam390jcf5pfa0qqfrgh8li787jx2ip0yk5b8y9hwyj"; + authors = [ + "contact@geoffroycouprie.com" + ]; + dependencies = [ + { + name = "memchr"; + packageId = "memchr"; + usesDefaultFeatures = false; + } + { + name = "minimal-lexical"; + packageId = "minimal-lexical"; + usesDefaultFeatures = false; + } + ]; + features = { + "default" = [ "std" ]; + "std" = [ "alloc" "memchr/std" "minimal-lexical/std" ]; + }; + resolvedDefaultFeatures = [ "alloc" "default" "std" ]; + }; + "nom_locate" = rec { + crateName = "nom_locate"; + version = "4.2.0"; + edition = "2018"; + sha256 = "1wx87c2pm84h63rb4rsjrqzgx574x1zy93av1jk3swdhag086g0y"; + authors = [ + "Florent FAYOLLE " + "Christopher Durham " + "Valentin Lorentz " + ]; + dependencies = [ + { + name = "bytecount"; + packageId = "bytecount"; + } + { + name = "memchr"; + packageId = "memchr"; + usesDefaultFeatures = false; + } + { + name = "nom"; + packageId = "nom"; + usesDefaultFeatures = false; + } + ]; + features = { + "alloc" = [ "nom/alloc" ]; + "default" = [ "std" ]; + "generic-simd" = [ "bytecount/generic-simd" ]; + "runtime-dispatch-simd" = [ "bytecount/runtime-dispatch-simd" ]; + "stable-deref-trait" = [ "stable_deref_trait" ]; + "stable_deref_trait" = [ "dep:stable_deref_trait" ]; + "std" = [ "nom/std" "alloc" "memchr/use_std" ]; + }; + resolvedDefaultFeatures = [ "alloc" "default" "std" ]; + }; + "num-complex" = rec { + crateName = "num-complex"; + version = "0.4.6"; + edition = "2021"; + sha256 = "15cla16mnw12xzf5g041nxbjjm9m85hdgadd5dl5d0b30w9qmy3k"; + libName = "num_complex"; + authors = [ + "The Rust Project Developers" + ]; + dependencies = [ + { + name = "num-traits"; + packageId = "num-traits"; + usesDefaultFeatures = false; + features = [ "i128" ]; + } + ]; + features = { + "bytecheck" = [ "dep:bytecheck" ]; + "bytemuck" = [ "dep:bytemuck" ]; + "default" = [ "std" ]; + "libm" = [ "num-traits/libm" ]; + "rand" = [ "dep:rand" ]; + "rkyv" = [ "dep:rkyv" ]; + "serde" = [ "dep:serde" ]; + "std" = [ "num-traits/std" ]; + }; + }; + "num-derive" = rec { + crateName = "num-derive"; + version = "0.4.2"; + edition = "2021"; + sha256 = "00p2am9ma8jgd2v6xpsz621wc7wbn1yqi71g15gc3h67m7qmafgd"; + procMacro = true; + libName = "num_derive"; + authors = [ + "The Rust Project Developers" + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 2.0.66"; + } + ]; + + }; + "num-integer" = rec { + crateName = "num-integer"; + version = "0.1.46"; + edition = "2018"; + sha256 = "13w5g54a9184cqlbsq80rnxw4jj4s0d8wv75jsq5r2lms8gncsbr"; + libName = "num_integer"; + authors = [ + "The Rust Project Developers" + ]; + dependencies = [ + { + name = "num-traits"; + packageId = "num-traits"; + usesDefaultFeatures = false; + features = [ "i128" ]; + } + ]; + features = { + "default" = [ "std" ]; + "std" = [ "num-traits/std" ]; + }; + resolvedDefaultFeatures = [ "i128" ]; + }; + "num-rational" = rec { + crateName = "num-rational"; + version = "0.4.2"; + edition = "2021"; + sha256 = "093qndy02817vpgcqjnj139im3jl7vkq4h68kykdqqh577d18ggq"; + libName = "num_rational"; + authors = [ + "The Rust Project Developers" + ]; + dependencies = [ + { + name = "num-integer"; + packageId = "num-integer"; + usesDefaultFeatures = false; + features = [ "i128" ]; + } + { + name = "num-traits"; + packageId = "num-traits"; + usesDefaultFeatures = false; + features = [ "i128" ]; + } + ]; + features = { + "default" = [ "num-bigint" "std" ]; + "num-bigint" = [ "dep:num-bigint" ]; + "num-bigint-std" = [ "num-bigint/std" ]; + "serde" = [ "dep:serde" ]; + "std" = [ "num-bigint?/std" "num-integer/std" "num-traits/std" ]; + }; + }; + "num-traits" = rec { + crateName = "num-traits"; + version = "0.2.19"; + edition = "2021"; + sha256 = "0h984rhdkkqd4ny9cif7y2azl3xdfb7768hb9irhpsch4q3gq787"; + libName = "num_traits"; + authors = [ + "The Rust Project Developers" + ]; + dependencies = [ + { + name = "libm"; + packageId = "libm"; + optional = true; + } + ]; + buildDependencies = [ + { + name = "autocfg"; + packageId = "autocfg"; + } + ]; + features = { + "default" = [ "std" ]; + "libm" = [ "dep:libm" ]; + }; + resolvedDefaultFeatures = [ "default" "i128" "libm" "std" ]; + }; + "once_cell" = rec { + crateName = "once_cell"; + version = "1.19.0"; + edition = "2021"; + sha256 = "14kvw7px5z96dk4dwdm1r9cqhhy2cyj1l5n5b29mynbb8yr15nrz"; + authors = [ + "Aleksey Kladov " + ]; + features = { + "alloc" = [ "race" ]; + "atomic-polyfill" = [ "critical-section" ]; + "critical-section" = [ "dep:critical-section" "portable-atomic" ]; + "default" = [ "std" ]; + "parking_lot" = [ "dep:parking_lot_core" ]; + "portable-atomic" = [ "dep:portable-atomic" ]; + "std" = [ "alloc" ]; + }; + resolvedDefaultFeatures = [ "alloc" "default" "race" "std" ]; + }; + "openssl-probe" = rec { + crateName = "openssl-probe"; + version = "0.1.5"; + edition = "2015"; + sha256 = "1kq18qm48rvkwgcggfkqq6pm948190czqc94d6bm2sir5hq1l0gz"; + libName = "openssl_probe"; + authors = [ + "Alex Crichton " + ]; + + }; + "openssl-sys" = rec { + crateName = "openssl-sys"; + version = "0.9.102"; + edition = "2018"; + links = "openssl"; + sha256 = "18jzni7xzdcqwf9r8kp6j46abrxqn82dvc2ylf9kij7varyn75y5"; + build = "build/main.rs"; + libName = "openssl_sys"; + authors = [ + "Alex Crichton " + "Steven Fackler " + ]; + dependencies = [ + { + name = "libc"; + packageId = "libc"; + } + ]; + buildDependencies = [ + { + name = "cc"; + packageId = "cc"; + } + { + name = "pkg-config"; + packageId = "pkg-config"; + } + { + name = "vcpkg"; + packageId = "vcpkg"; + } + ]; + features = { + "bindgen" = [ "dep:bindgen" ]; + "bssl-sys" = [ "dep:bssl-sys" ]; + "openssl-src" = [ "dep:openssl-src" ]; + "unstable_boringssl" = [ "bssl-sys" ]; + "vendored" = [ "openssl-src" ]; + }; + }; + "ordered-float" = rec { + crateName = "ordered-float"; + version = "4.2.0"; + edition = "2021"; + sha256 = "0kjqcvvbcsibbx3hnj7ag06bd9gv2zfi5ja6rgyh2kbxbh3zfvd7"; + libName = "ordered_float"; + authors = [ + "Jonathan Reem " + "Matt Brubeck " + ]; + dependencies = [ + { + name = "num-traits"; + packageId = "num-traits"; + usesDefaultFeatures = false; + } + ]; + features = { + "arbitrary" = [ "dep:arbitrary" ]; + "borsh" = [ "dep:borsh" ]; + "bytemuck" = [ "dep:bytemuck" ]; + "default" = [ "std" ]; + "proptest" = [ "dep:proptest" ]; + "rand" = [ "dep:rand" ]; + "randtest" = [ "rand/std" "rand/std_rng" ]; + "rkyv" = [ "rkyv_32" ]; + "rkyv_16" = [ "dep:rkyv" "rkyv?/size_16" ]; + "rkyv_32" = [ "dep:rkyv" "rkyv?/size_32" ]; + "rkyv_64" = [ "dep:rkyv" "rkyv?/size_64" ]; + "rkyv_ck" = [ "rkyv?/validation" ]; + "schemars" = [ "dep:schemars" ]; + "serde" = [ "dep:serde" "rand?/serde1" ]; + "speedy" = [ "dep:speedy" ]; + "std" = [ "num-traits/std" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "ouroboros" = rec { + crateName = "ouroboros"; + version = "0.18.4"; + edition = "2018"; + sha256 = "0rsazk2hh2w626585scb7ylaf500y5insp3rnkbdwnm2jq4s4kwl"; + authors = [ + "Josh " + ]; + dependencies = [ + { + name = "aliasable"; + packageId = "aliasable"; + } + { + name = "ouroboros_macro"; + packageId = "ouroboros_macro"; + } + { + name = "static_assertions"; + packageId = "static_assertions"; + } + ]; + features = { + "default" = [ "std" ]; + "std" = [ "ouroboros_macro/std" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "ouroboros_macro" = rec { + crateName = "ouroboros_macro"; + version = "0.18.4"; + edition = "2018"; + sha256 = "1gb5njxh9clp9krjc7kfbz17g5racjlld1bsjkjx13sjs7mdxc1r"; + procMacro = true; + authors = [ + "Josh " + ]; + dependencies = [ + { + name = "heck"; + packageId = "heck 0.4.1"; + } + { + name = "itertools"; + packageId = "itertools 0.12.1"; + } + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "proc-macro2-diagnostics"; + packageId = "proc-macro2-diagnostics"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 2.0.66"; + features = [ "full" ]; + } + ]; + features = { + }; + resolvedDefaultFeatures = [ "std" ]; + }; + "parking_lot" = rec { + crateName = "parking_lot"; + version = "0.12.3"; + edition = "2021"; + sha256 = "09ws9g6245iiq8z975h8ycf818a66q3c6zv4b5h8skpm7hc1igzi"; + authors = [ + "Amanieu d'Antras " + ]; + dependencies = [ + { + name = "lock_api"; + packageId = "lock_api"; + } + { + name = "parking_lot_core"; + packageId = "parking_lot_core"; + } + ]; + features = { + "arc_lock" = [ "lock_api/arc_lock" ]; + "deadlock_detection" = [ "parking_lot_core/deadlock_detection" ]; + "nightly" = [ "parking_lot_core/nightly" "lock_api/nightly" ]; + "owning_ref" = [ "lock_api/owning_ref" ]; + "serde" = [ "lock_api/serde" ]; + }; + resolvedDefaultFeatures = [ "default" ]; + }; + "parking_lot_core" = rec { + crateName = "parking_lot_core"; + version = "0.9.10"; + edition = "2021"; + sha256 = "1y3cf9ld9ijf7i4igwzffcn0xl16dxyn4c5bwgjck1dkgabiyh0y"; + authors = [ + "Amanieu d'Antras " + ]; + dependencies = [ + { + name = "cfg-if"; + packageId = "cfg-if"; + } + { + name = "libc"; + packageId = "libc"; + target = { target, features }: (target."unix" or false); + } + { + name = "redox_syscall"; + packageId = "redox_syscall 0.5.1"; + target = { target, features }: ("redox" == target."os" or null); + } + { + name = "smallvec"; + packageId = "smallvec"; + } + { + name = "windows-targets"; + packageId = "windows-targets 0.52.5"; + target = { target, features }: (target."windows" or false); + } + ]; + features = { + "backtrace" = [ "dep:backtrace" ]; + "deadlock_detection" = [ "petgraph" "thread-id" "backtrace" ]; + "petgraph" = [ "dep:petgraph" ]; + "thread-id" = [ "dep:thread-id" ]; + }; + }; + "parry2d-f64" = rec { + crateName = "parry2d-f64"; + version = "0.15.1"; + edition = "2021"; + sha256 = "1lch9w3rhwwwqd3fhjv9j0sbkikdx94xcy68zhcy5wxm7md7css1"; + libName = "parry2d_f64"; + authors = [ + "Sébastien Crozet " + ]; + dependencies = [ + { + name = "approx"; + packageId = "approx 0.5.1"; + usesDefaultFeatures = false; + } + { + name = "arrayvec"; + packageId = "arrayvec"; + usesDefaultFeatures = false; + } + { + name = "bitflags"; + packageId = "bitflags 1.3.2"; + } + { + name = "downcast-rs"; + packageId = "downcast-rs"; + usesDefaultFeatures = false; + } + { + name = "either"; + packageId = "either"; + usesDefaultFeatures = false; + } + { + name = "log"; + packageId = "log"; + } + { + name = "nalgebra"; + packageId = "nalgebra"; + usesDefaultFeatures = false; + features = [ "libm" ]; + } + { + name = "num-derive"; + packageId = "num-derive"; + } + { + name = "num-traits"; + packageId = "num-traits"; + usesDefaultFeatures = false; + } + { + name = "rustc-hash"; + packageId = "rustc-hash"; + optional = true; + } + { + name = "simba"; + packageId = "simba"; + usesDefaultFeatures = false; + } + { + name = "slab"; + packageId = "slab"; + optional = true; + } + { + name = "smallvec"; + packageId = "smallvec"; + } + { + name = "spade"; + packageId = "spade"; + optional = true; + } + ]; + devDependencies = [ + { + name = "simba"; + packageId = "simba"; + usesDefaultFeatures = false; + features = [ "partial_fixed_point_support" ]; + } + ]; + features = { + "bytemuck" = [ "dep:bytemuck" ]; + "bytemuck-serialize" = [ "bytemuck" "nalgebra/convert-bytemuck" ]; + "cust_core" = [ "dep:cust_core" ]; + "default" = [ "required-features" "std" ]; + "enhanced-determinism" = [ "simba/libm_force" "indexmap" ]; + "indexmap" = [ "dep:indexmap" ]; + "parallel" = [ "rayon" ]; + "rayon" = [ "dep:rayon" ]; + "required-features" = [ "dim2" "f64" ]; + "rkyv" = [ "dep:rkyv" ]; + "rkyv-serialize" = [ "rkyv/validation" "nalgebra/rkyv-serialize" "simba/rkyv-serialize" ]; + "rustc-hash" = [ "dep:rustc-hash" ]; + "serde" = [ "dep:serde" ]; + "serde-serialize" = [ "serde" "nalgebra/serde-serialize" "arrayvec/serde" ]; + "simd-nightly" = [ "simba/packed_simd" "simd-is-enabled" ]; + "simd-stable" = [ "simba/wide" "simd-is-enabled" ]; + "slab" = [ "dep:slab" ]; + "spade" = [ "dep:spade" ]; + "std" = [ "nalgebra/std" "slab" "rustc-hash" "simba/std" "arrayvec/std" "spade" ]; + }; + resolvedDefaultFeatures = [ "default" "dim2" "f64" "required-features" "rustc-hash" "slab" "spade" "std" ]; + }; + "parry3d-f64" = rec { + crateName = "parry3d-f64"; + version = "0.15.1"; + edition = "2021"; + sha256 = "0vnp9vm5k50hc06qrqw2smg89gr0spgd6nbd0qlwlgi7fjipzh7x"; + libName = "parry3d_f64"; + authors = [ + "Sébastien Crozet " + ]; + dependencies = [ + { + name = "approx"; + packageId = "approx 0.5.1"; + usesDefaultFeatures = false; + } + { + name = "arrayvec"; + packageId = "arrayvec"; + usesDefaultFeatures = false; + } + { + name = "bitflags"; + packageId = "bitflags 1.3.2"; + } + { + name = "downcast-rs"; + packageId = "downcast-rs"; + usesDefaultFeatures = false; + } + { + name = "either"; + packageId = "either"; + usesDefaultFeatures = false; + } + { + name = "log"; + packageId = "log"; + } + { + name = "nalgebra"; + packageId = "nalgebra"; + usesDefaultFeatures = false; + features = [ "libm" ]; + } + { + name = "num-derive"; + packageId = "num-derive"; + } + { + name = "num-traits"; + packageId = "num-traits"; + usesDefaultFeatures = false; + } + { + name = "rustc-hash"; + packageId = "rustc-hash"; + optional = true; + } + { + name = "simba"; + packageId = "simba"; + usesDefaultFeatures = false; + } + { + name = "slab"; + packageId = "slab"; + optional = true; + } + { + name = "smallvec"; + packageId = "smallvec"; + } + { + name = "spade"; + packageId = "spade"; + optional = true; + } + ]; + features = { + "bytemuck" = [ "dep:bytemuck" ]; + "bytemuck-serialize" = [ "bytemuck" "nalgebra/convert-bytemuck" ]; + "cust_core" = [ "dep:cust_core" ]; + "default" = [ "required-features" "std" ]; + "enhanced-determinism" = [ "simba/libm_force" "indexmap" ]; + "indexmap" = [ "dep:indexmap" ]; + "parallel" = [ "rayon" ]; + "rayon" = [ "dep:rayon" ]; + "required-features" = [ "dim3" "f64" ]; + "rkyv" = [ "dep:rkyv" ]; + "rkyv-serialize" = [ "rkyv/validation" "nalgebra/rkyv-serialize" "simba/rkyv-serialize" ]; + "rustc-hash" = [ "dep:rustc-hash" ]; + "serde" = [ "dep:serde" ]; + "serde-serialize" = [ "serde" "nalgebra/serde-serialize" ]; + "simd-nightly" = [ "simba/packed_simd" "simd-is-enabled" ]; + "simd-stable" = [ "simba/wide" "simd-is-enabled" ]; + "slab" = [ "dep:slab" ]; + "spade" = [ "dep:spade" ]; + "std" = [ "nalgebra/std" "slab" "rustc-hash" "simba/std" "arrayvec/std" "spade" ]; + }; + resolvedDefaultFeatures = [ "default" "dim3" "f64" "required-features" "rustc-hash" "slab" "spade" "std" ]; + }; + "paste" = rec { + crateName = "paste"; + version = "1.0.15"; + edition = "2018"; + sha256 = "02pxffpdqkapy292harq6asfjvadgp1s005fip9ljfsn9fvxgh2p"; + procMacro = true; + authors = [ + "David Tolnay " + ]; + + }; + "percent-encoding" = rec { + crateName = "percent-encoding"; + version = "2.3.1"; + edition = "2018"; + sha256 = "0gi8wgx0dcy8rnv1kywdv98lwcx67hz0a0zwpib5v2i08r88y573"; + libName = "percent_encoding"; + authors = [ + "The rust-url developers" + ]; + features = { + "default" = [ "std" ]; + "std" = [ "alloc" ]; + }; + resolvedDefaultFeatures = [ "alloc" "default" "std" ]; + }; + "pkg-config" = rec { + crateName = "pkg-config"; + version = "0.3.30"; + edition = "2015"; + sha256 = "1v07557dj1sa0aly9c90wsygc0i8xv5vnmyv0g94lpkvj8qb4cfj"; + libName = "pkg_config"; + authors = [ + "Alex Crichton " + ]; + + }; + "proc-macro2" = rec { + crateName = "proc-macro2"; + version = "1.0.84"; + edition = "2021"; + sha256 = "1mj998115z75c0007glkdr8qj57ibv82h7kg6r8hnc914slwd5pc"; + libName = "proc_macro2"; + authors = [ + "David Tolnay " + "Alex Crichton " + ]; + dependencies = [ + { + name = "unicode-ident"; + packageId = "unicode-ident"; + } + ]; + features = { + "default" = [ "proc-macro" ]; + }; + resolvedDefaultFeatures = [ "default" "proc-macro" ]; + }; + "proc-macro2-diagnostics" = rec { + crateName = "proc-macro2-diagnostics"; + version = "0.10.1"; + edition = "2018"; + sha256 = "1j48ipc80pykvhx6yhndfa774s58ax1h6sm6mlhf09ls76f6l1mg"; + libName = "proc_macro2_diagnostics"; + authors = [ + "Sergio Benitez " + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 2.0.66"; + } + { + name = "yansi"; + packageId = "yansi"; + optional = true; + } + ]; + buildDependencies = [ + { + name = "version_check"; + packageId = "version_check"; + } + ]; + features = { + "colors" = [ "yansi" ]; + "default" = [ "colors" ]; + "yansi" = [ "dep:yansi" ]; + }; + resolvedDefaultFeatures = [ "colors" "default" "yansi" ]; + }; + "quick-xml" = rec { + crateName = "quick-xml"; + version = "0.31.0"; + edition = "2021"; + sha256 = "0cravqanylzh5cq2v6hzlfqgxcid5nrp2snnb3pf4m0and2a610h"; + libName = "quick_xml"; + dependencies = [ + { + name = "memchr"; + packageId = "memchr"; + } + { + name = "serde"; + packageId = "serde"; + optional = true; + } + ]; + features = { + "arbitrary" = [ "dep:arbitrary" ]; + "async-tokio" = [ "tokio" ]; + "document-features" = [ "dep:document-features" ]; + "encoding" = [ "encoding_rs" ]; + "encoding_rs" = [ "dep:encoding_rs" ]; + "serde" = [ "dep:serde" ]; + "serde-types" = [ "serde/derive" ]; + "serialize" = [ "serde" ]; + "tokio" = [ "dep:tokio" ]; + }; + resolvedDefaultFeatures = [ "default" "serde" "serialize" ]; + }; + "quote" = rec { + crateName = "quote"; + version = "1.0.36"; + edition = "2018"; + sha256 = "19xcmh445bg6simirnnd4fvkmp6v2qiwxh5f6rw4a70h76pnm9qg"; + authors = [ + "David Tolnay " + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + usesDefaultFeatures = false; + } + ]; + features = { + "default" = [ "proc-macro" ]; + "proc-macro" = [ "proc-macro2/proc-macro" ]; + }; + resolvedDefaultFeatures = [ "default" "proc-macro" ]; + }; + "rawpointer" = rec { + crateName = "rawpointer"; + version = "0.2.1"; + edition = "2015"; + sha256 = "1qy1qvj17yh957vhffnq6agq0brvylw27xgks171qrah75wmg8v0"; + authors = [ + "bluss" + ]; + + }; + "redox_syscall 0.4.1" = rec { + crateName = "redox_syscall"; + version = "0.4.1"; + edition = "2018"; + sha256 = "1aiifyz5dnybfvkk4cdab9p2kmphag1yad6iknc7aszlxxldf8j7"; + libName = "syscall"; + authors = [ + "Jeremy Soller " + ]; + dependencies = [ + { + name = "bitflags"; + packageId = "bitflags 1.3.2"; + } + ]; + features = { + "core" = [ "dep:core" ]; + "rustc-dep-of-std" = [ "core" "bitflags/rustc-dep-of-std" ]; + }; + }; + "redox_syscall 0.5.1" = rec { + crateName = "redox_syscall"; + version = "0.5.1"; + edition = "2018"; + sha256 = "0zja6y3av9z50gg1hh0vsc053941wng21r43whhk8mfb9n4m5426"; + libName = "syscall"; + authors = [ + "Jeremy Soller " + ]; + dependencies = [ + { + name = "bitflags"; + packageId = "bitflags 2.5.0"; + } + ]; + features = { + "core" = [ "dep:core" ]; + "rustc-dep-of-std" = [ "core" "bitflags/rustc-dep-of-std" ]; + }; + }; + "robust" = rec { + crateName = "robust"; + version = "1.1.0"; + edition = "2021"; + sha256 = "0c5fhzk7dc1ci9dyjy0xrv6nlrkbmprlj1lqkvrqhs3dbymadx6b"; + authors = [ + "The Spade Developers" + "The GeoRust Developers" + ]; + features = { + "ieee754" = [ "dep:ieee754" ]; + "no_std" = [ "ieee754" ]; + }; + }; + "rustc-hash" = rec { + crateName = "rustc-hash"; + version = "1.1.0"; + edition = "2015"; + sha256 = "1qkc5khrmv5pqi5l5ca9p5nl5hs742cagrndhbrlk3dhlrx3zm08"; + libName = "rustc_hash"; + authors = [ + "The Rust Project Developers" + ]; + features = { + "default" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "rustix" = rec { + crateName = "rustix"; + version = "0.38.34"; + edition = "2021"; + sha256 = "03vkqa2ism7q56rkifyy8mns0wwqrk70f4i4fd53r97p8b05xp3h"; + authors = [ + "Dan Gohman " + "Jakub Konka " + ]; + dependencies = [ + { + name = "bitflags"; + packageId = "bitflags 2.5.0"; + usesDefaultFeatures = false; + } + { + name = "errno"; + packageId = "errno"; + rename = "libc_errno"; + optional = true; + usesDefaultFeatures = false; + target = { target, features }: ((!(target."rustix_use_libc" or false)) && (!(target."miri" or false)) && ("linux" == target."os" or null) && ("little" == target."endian" or null) && (("arm" == target."arch" or null) || (("aarch64" == target."arch" or null) && ("64" == target."pointer_width" or null)) || ("riscv64" == target."arch" or null) || ((target."rustix_use_experimental_asm" or false) && ("powerpc64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips32r6" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64r6" == target."arch" or null)) || ("x86" == target."arch" or null) || (("x86_64" == target."arch" or null) && ("64" == target."pointer_width" or null)))); + } + { + name = "errno"; + packageId = "errno"; + rename = "libc_errno"; + usesDefaultFeatures = false; + target = { target, features }: ((!(target."windows" or false)) && ((target."rustix_use_libc" or false) || (target."miri" or false) || (!(("linux" == target."os" or null) && ("little" == target."endian" or null) && (("arm" == target."arch" or null) || (("aarch64" == target."arch" or null) && ("64" == target."pointer_width" or null)) || ("riscv64" == target."arch" or null) || ((target."rustix_use_experimental_asm" or false) && ("powerpc64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips32r6" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64r6" == target."arch" or null)) || ("x86" == target."arch" or null) || (("x86_64" == target."arch" or null) && ("64" == target."pointer_width" or null))))))); + } + { + name = "errno"; + packageId = "errno"; + rename = "libc_errno"; + usesDefaultFeatures = false; + target = { target, features }: (target."windows" or false); + } + { + name = "libc"; + packageId = "libc"; + optional = true; + usesDefaultFeatures = false; + target = { target, features }: ((!(target."rustix_use_libc" or false)) && (!(target."miri" or false)) && ("linux" == target."os" or null) && ("little" == target."endian" or null) && (("arm" == target."arch" or null) || (("aarch64" == target."arch" or null) && ("64" == target."pointer_width" or null)) || ("riscv64" == target."arch" or null) || ((target."rustix_use_experimental_asm" or false) && ("powerpc64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips32r6" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64r6" == target."arch" or null)) || ("x86" == target."arch" or null) || (("x86_64" == target."arch" or null) && ("64" == target."pointer_width" or null)))); + } + { + name = "libc"; + packageId = "libc"; + usesDefaultFeatures = false; + target = { target, features }: ((!(target."windows" or false)) && ((target."rustix_use_libc" or false) || (target."miri" or false) || (!(("linux" == target."os" or null) && ("little" == target."endian" or null) && (("arm" == target."arch" or null) || (("aarch64" == target."arch" or null) && ("64" == target."pointer_width" or null)) || ("riscv64" == target."arch" or null) || ((target."rustix_use_experimental_asm" or false) && ("powerpc64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips32r6" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64r6" == target."arch" or null)) || ("x86" == target."arch" or null) || (("x86_64" == target."arch" or null) && ("64" == target."pointer_width" or null))))))); + } + { + name = "linux-raw-sys"; + packageId = "linux-raw-sys"; + usesDefaultFeatures = false; + target = { target, features }: ((("android" == target."os" or null) || ("linux" == target."os" or null)) && ((target."rustix_use_libc" or false) || (target."miri" or false) || (!(("linux" == target."os" or null) && ("little" == target."endian" or null) && (("arm" == target."arch" or null) || (("aarch64" == target."arch" or null) && ("64" == target."pointer_width" or null)) || ("riscv64" == target."arch" or null) || ((target."rustix_use_experimental_asm" or false) && ("powerpc64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips32r6" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64r6" == target."arch" or null)) || ("x86" == target."arch" or null) || (("x86_64" == target."arch" or null) && ("64" == target."pointer_width" or null))))))); + features = [ "general" "ioctl" "no_std" ]; + } + { + name = "linux-raw-sys"; + packageId = "linux-raw-sys"; + usesDefaultFeatures = false; + target = { target, features }: ((!(target."rustix_use_libc" or false)) && (!(target."miri" or false)) && ("linux" == target."os" or null) && ("little" == target."endian" or null) && (("arm" == target."arch" or null) || (("aarch64" == target."arch" or null) && ("64" == target."pointer_width" or null)) || ("riscv64" == target."arch" or null) || ((target."rustix_use_experimental_asm" or false) && ("powerpc64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips32r6" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64r6" == target."arch" or null)) || ("x86" == target."arch" or null) || (("x86_64" == target."arch" or null) && ("64" == target."pointer_width" or null)))); + features = [ "general" "errno" "ioctl" "no_std" "elf" ]; + } + { + name = "windows-sys"; + packageId = "windows-sys 0.52.0"; + target = { target, features }: (target."windows" or false); + features = [ "Win32_Foundation" "Win32_Networking_WinSock" "Win32_NetworkManagement_IpHelper" "Win32_System_Threading" ]; + } + ]; + devDependencies = [ + { + name = "errno"; + packageId = "errno"; + rename = "libc_errno"; + usesDefaultFeatures = false; + } + { + name = "libc"; + packageId = "libc"; + } + ]; + features = { + "all-apis" = [ "event" "fs" "io_uring" "mm" "mount" "net" "param" "pipe" "process" "procfs" "pty" "rand" "runtime" "shm" "stdio" "system" "termios" "thread" "time" ]; + "default" = [ "std" "use-libc-auxv" ]; + "io_uring" = [ "event" "fs" "net" "linux-raw-sys/io_uring" ]; + "itoa" = [ "dep:itoa" ]; + "libc" = [ "dep:libc" ]; + "libc-extra-traits" = [ "libc?/extra_traits" ]; + "libc_errno" = [ "dep:libc_errno" ]; + "linux_latest" = [ "linux_4_11" ]; + "net" = [ "linux-raw-sys/net" "linux-raw-sys/netlink" "linux-raw-sys/if_ether" "linux-raw-sys/xdp" ]; + "once_cell" = [ "dep:once_cell" ]; + "param" = [ "fs" ]; + "process" = [ "linux-raw-sys/prctl" ]; + "procfs" = [ "once_cell" "itoa" "fs" ]; + "pty" = [ "itoa" "fs" ]; + "runtime" = [ "linux-raw-sys/prctl" ]; + "rustc-dep-of-std" = [ "dep:core" "dep:alloc" "dep:compiler_builtins" "linux-raw-sys/rustc-dep-of-std" "bitflags/rustc-dep-of-std" "compiler_builtins?/rustc-dep-of-std" ]; + "shm" = [ "fs" ]; + "std" = [ "bitflags/std" "alloc" "libc?/std" "libc_errno?/std" "libc-extra-traits" ]; + "system" = [ "linux-raw-sys/system" ]; + "thread" = [ "linux-raw-sys/prctl" ]; + "use-libc" = [ "libc_errno" "libc" "libc-extra-traits" ]; + }; + resolvedDefaultFeatures = [ "alloc" "default" "fs" "libc-extra-traits" "std" "termios" "use-libc-auxv" ]; + }; + "rustversion" = rec { + crateName = "rustversion"; + version = "1.0.17"; + edition = "2018"; + sha256 = "1mm3fckyvb0l2209in1n2k05sws5d9mpkszbnwhq3pkq8apjhpcm"; + procMacro = true; + build = "build/build.rs"; + authors = [ + "David Tolnay " + ]; + + }; + "ryu" = rec { + crateName = "ryu"; + version = "1.0.18"; + edition = "2018"; + sha256 = "17xx2s8j1lln7iackzd9p0sv546vjq71i779gphjq923vjh5pjzk"; + authors = [ + "David Tolnay " + ]; + features = { + "no-panic" = [ "dep:no-panic" ]; + }; + }; + "safe_arch" = rec { + crateName = "safe_arch"; + version = "0.7.1"; + edition = "2018"; + sha256 = "0m63dasp3rs9mkaa5wai6l6v14lbb788igaidys7k8g6w5f0g67k"; + authors = [ + "Lokathor " + ]; + dependencies = [ + { + name = "bytemuck"; + packageId = "bytemuck"; + optional = true; + } + ]; + features = { + "bytemuck" = [ "dep:bytemuck" ]; + }; + resolvedDefaultFeatures = [ "bytemuck" "default" ]; + }; + "scopeguard" = rec { + crateName = "scopeguard"; + version = "1.2.0"; + edition = "2015"; + sha256 = "0jcz9sd47zlsgcnm1hdw0664krxwb5gczlif4qngj2aif8vky54l"; + authors = [ + "bluss" + ]; + features = { + "default" = [ "use_std" ]; + }; + }; + "semver" = rec { + crateName = "semver"; + version = "1.0.23"; + edition = "2018"; + sha256 = "12wqpxfflclbq4dv8sa6gchdh92ahhwn4ci1ls22wlby3h57wsb1"; + authors = [ + "David Tolnay " + ]; + dependencies = [ + { + name = "serde"; + packageId = "serde"; + optional = true; + usesDefaultFeatures = false; + } + ]; + features = { + "default" = [ "std" ]; + "serde" = [ "dep:serde" ]; + }; + resolvedDefaultFeatures = [ "default" "serde" "std" ]; + }; + "serde" = rec { + crateName = "serde"; + version = "1.0.203"; + edition = "2018"; + sha256 = "1500ghq198n6py5anvz5qbqagd9h1hq04f4qpsvjzrvix56snlvj"; + authors = [ + "Erick Tryzelaar " + "David Tolnay " + ]; + dependencies = [ + { + name = "serde_derive"; + packageId = "serde_derive"; + optional = true; + } + { + name = "serde_derive"; + packageId = "serde_derive"; + target = { target, features }: false; + } + ]; + devDependencies = [ + { + name = "serde_derive"; + packageId = "serde_derive"; + } + ]; + features = { + "default" = [ "std" ]; + "derive" = [ "serde_derive" ]; + "serde_derive" = [ "dep:serde_derive" ]; + }; + resolvedDefaultFeatures = [ "default" "derive" "serde_derive" "std" ]; + }; + "serde_derive" = rec { + crateName = "serde_derive"; + version = "1.0.203"; + edition = "2015"; + sha256 = "1fmmqmfza3mwxb1v80737dj01gznrh8mhgqgylkndx5npq7bq32h"; + procMacro = true; + authors = [ + "Erick Tryzelaar " + "David Tolnay " + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + usesDefaultFeatures = false; + features = [ "proc-macro" ]; + } + { + name = "quote"; + packageId = "quote"; + usesDefaultFeatures = false; + features = [ "proc-macro" ]; + } + { + name = "syn"; + packageId = "syn 2.0.66"; + usesDefaultFeatures = false; + features = [ "clone-impls" "derive" "parsing" "printing" "proc-macro" ]; + } + ]; + features = { + }; + resolvedDefaultFeatures = [ "default" ]; + }; + "serde_json" = rec { + crateName = "serde_json"; + version = "1.0.117"; + edition = "2021"; + sha256 = "1hxziifjlc0kn1cci9d4crmjc7qwnfi20lxwyj9lzca2c7m84la5"; + authors = [ + "Erick Tryzelaar " + "David Tolnay " + ]; + dependencies = [ + { + name = "itoa"; + packageId = "itoa"; + } + { + name = "ryu"; + packageId = "ryu"; + } + { + name = "serde"; + packageId = "serde"; + usesDefaultFeatures = false; + } + ]; + devDependencies = [ + { + name = "serde"; + packageId = "serde"; + features = [ "derive" ]; + } + ]; + features = { + "alloc" = [ "serde/alloc" ]; + "default" = [ "std" ]; + "indexmap" = [ "dep:indexmap" ]; + "preserve_order" = [ "indexmap" "std" ]; + "std" = [ "serde/std" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "serde_yaml" = rec { + crateName = "serde_yaml"; + version = "0.9.34+deprecated"; + edition = "2021"; + sha256 = "0isba1fjyg3l6rxk156k600ilzr8fp7crv82rhal0rxz5qd1m2va"; + authors = [ + "David Tolnay " + ]; + dependencies = [ + { + name = "indexmap"; + packageId = "indexmap"; + } + { + name = "itoa"; + packageId = "itoa"; + } + { + name = "ryu"; + packageId = "ryu"; + } + { + name = "serde"; + packageId = "serde"; + } + { + name = "unsafe-libyaml"; + packageId = "unsafe-libyaml"; + } + ]; + + }; + "simba" = rec { + crateName = "simba"; + version = "0.8.1"; + edition = "2018"; + sha256 = "1bnf7ainywmaz2z67ss1q0bjwccf80c50c50r6hlpay69z4hf586"; + authors = [ + "sebcrozet " + ]; + dependencies = [ + { + name = "approx"; + packageId = "approx 0.5.1"; + usesDefaultFeatures = false; + } + { + name = "num-complex"; + packageId = "num-complex"; + usesDefaultFeatures = false; + } + { + name = "num-traits"; + packageId = "num-traits"; + usesDefaultFeatures = false; + } + { + name = "paste"; + packageId = "paste"; + } + { + name = "wide"; + packageId = "wide"; + optional = true; + usesDefaultFeatures = false; + } + ]; + features = { + "cordic" = [ "dep:cordic" ]; + "cuda" = [ "cuda_std" "cust_core" ]; + "cuda_std" = [ "dep:cuda_std" ]; + "cust_core" = [ "dep:cust_core" ]; + "decimal" = [ "dep:decimal" ]; + "default" = [ "std" ]; + "fixed" = [ "dep:fixed" ]; + "libm" = [ "num-traits/libm" ]; + "libm_force" = [ "dep:libm_force" ]; + "packed_simd" = [ "dep:packed_simd" ]; + "partial_fixed_point_support" = [ "fixed" "cordic" ]; + "rand" = [ "dep:rand" ]; + "rkyv" = [ "dep:rkyv" ]; + "rkyv-serialize" = [ "rkyv" ]; + "serde" = [ "dep:serde" ]; + "serde_serialize" = [ "serde" "fixed/serde" ]; + "std" = [ "wide/std" ]; + "wide" = [ "dep:wide" ]; + }; + resolvedDefaultFeatures = [ "libm" "std" "wide" ]; + }; + "slab" = rec { + crateName = "slab"; + version = "0.4.9"; + edition = "2018"; + sha256 = "0rxvsgir0qw5lkycrqgb1cxsvxzjv9bmx73bk5y42svnzfba94lg"; + authors = [ + "Carl Lerche " + ]; + buildDependencies = [ + { + name = "autocfg"; + packageId = "autocfg"; + } + ]; + features = { + "default" = [ "std" ]; + "serde" = [ "dep:serde" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "smallvec" = rec { + crateName = "smallvec"; + version = "1.13.2"; + edition = "2018"; + sha256 = "0rsw5samawl3wsw6glrsb127rx6sh89a8wyikicw6dkdcjd1lpiw"; + authors = [ + "The Servo Project Developers" + ]; + features = { + "arbitrary" = [ "dep:arbitrary" ]; + "const_new" = [ "const_generics" ]; + "drain_keep_rest" = [ "drain_filter" ]; + "serde" = [ "dep:serde" ]; + }; + }; + "spade" = rec { + crateName = "spade"; + version = "2.8.0"; + edition = "2021"; + sha256 = "1h68d205s3cida0r1iba9shfxqhlbzy9gaa1gr4l5r4s2q4sh82v"; + authors = [ + "Stefan Altmayer " + ]; + dependencies = [ + { + name = "hashbrown"; + packageId = "hashbrown"; + } + { + name = "num-traits"; + packageId = "num-traits"; + } + { + name = "robust"; + packageId = "robust"; + } + { + name = "smallvec"; + packageId = "smallvec"; + } + ]; + features = { + "default" = [ "std" ]; + "serde" = [ "dep:serde" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; + "static_assertions" = rec { + crateName = "static_assertions"; + version = "1.1.0"; + edition = "2015"; + sha256 = "0gsl6xmw10gvn3zs1rv99laj5ig7ylffnh71f9l34js4nr4r7sx2"; + authors = [ + "Nikolai Vazquez" + ]; + features = { + }; + }; + "stderrlog" = rec { + crateName = "stderrlog"; + version = "0.6.0"; + edition = "2018"; + sha256 = "0syw0ypmd5b8a9kpj3nm1q9z8lr3glb0wxnn69yv2alr5xvi1jb1"; + authors = [ + "Doug Goldstein " + ]; + dependencies = [ + { + name = "chrono"; + packageId = "chrono"; + optional = true; + usesDefaultFeatures = false; + features = [ "clock" "std" "wasmbind" ]; + } + { + name = "is-terminal"; + packageId = "is-terminal"; + } + { + name = "log"; + packageId = "log"; + features = [ "std" ]; + } + { + name = "termcolor"; + packageId = "termcolor"; + } + { + name = "thread_local"; + packageId = "thread_local"; + } + ]; + features = { + "chrono" = [ "dep:chrono" ]; + "default" = [ "timestamps" ]; + "timestamps" = [ "chrono" ]; + }; + resolvedDefaultFeatures = [ "chrono" "default" "timestamps" ]; + }; + "stl" = rec { + crateName = "stl"; + version = "0.2.1"; + edition = "2015"; + sha256 = "04kfj8isclf2cl60bx4pk4fvfzvilfpg409aavq533r5m6rp4vj6"; + authors = [ + "Eric Holk " + ]; + dependencies = [ + { + name = "byteorder"; + packageId = "byteorder 0.4.2"; + } + ]; + + }; + "strsim" = rec { + crateName = "strsim"; + version = "0.11.1"; + edition = "2015"; + sha256 = "0kzvqlw8hxqb7y598w1s0hxlnmi84sg5vsipp3yg5na5d1rvba3x"; + authors = [ + "Danny Guo " + "maxbachmann " + ]; + + }; + "syn 1.0.109" = rec { + crateName = "syn"; + version = "1.0.109"; + edition = "2018"; + sha256 = "0ds2if4600bd59wsv7jjgfkayfzy3hnazs394kz6zdkmna8l3dkj"; + authors = [ + "David Tolnay " + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + usesDefaultFeatures = false; + } + { + name = "quote"; + packageId = "quote"; + optional = true; + usesDefaultFeatures = false; + } + { + name = "unicode-ident"; + packageId = "unicode-ident"; + } + ]; + features = { + "default" = [ "derive" "parsing" "printing" "clone-impls" "proc-macro" ]; + "printing" = [ "quote" ]; + "proc-macro" = [ "proc-macro2/proc-macro" "quote/proc-macro" ]; + "quote" = [ "dep:quote" ]; + "test" = [ "syn-test-suite/all-features" ]; + }; + resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "full" "parsing" "printing" "proc-macro" "quote" ]; + }; + "syn 2.0.66" = rec { + crateName = "syn"; + version = "2.0.66"; + edition = "2021"; + sha256 = "1xfgrprsbz8j31kabvfinb4fyhajlk2q7lxa18fb006yl90kyby4"; + authors = [ + "David Tolnay " + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + usesDefaultFeatures = false; + } + { + name = "quote"; + packageId = "quote"; + optional = true; + usesDefaultFeatures = false; + } + { + name = "unicode-ident"; + packageId = "unicode-ident"; + } + ]; + features = { + "default" = [ "derive" "parsing" "printing" "clone-impls" "proc-macro" ]; + "printing" = [ "dep:quote" ]; + "proc-macro" = [ "proc-macro2/proc-macro" "quote?/proc-macro" ]; + "test" = [ "syn-test-suite/all-features" ]; + }; + resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "extra-traits" "full" "parsing" "printing" "proc-macro" "visit" ]; + }; + "tempfile" = rec { + crateName = "tempfile"; + version = "3.10.1"; + edition = "2021"; + sha256 = "1wdzz35ri168jn9al4s1g2rnsrr5ci91khgarc2rvpb3nappzdw5"; + authors = [ + "Steven Allen " + "The Rust Project Developers" + "Ashley Mannix " + "Jason White " + ]; + dependencies = [ + { + name = "cfg-if"; + packageId = "cfg-if"; + } + { + name = "fastrand"; + packageId = "fastrand"; + } + { + name = "rustix"; + packageId = "rustix"; + target = { target, features }: ((target."unix" or false) || ("wasi" == target."os" or null)); + features = [ "fs" ]; + } + { + name = "windows-sys"; + packageId = "windows-sys 0.52.0"; + target = { target, features }: (target."windows" or false); + features = [ "Win32_Storage_FileSystem" "Win32_Foundation" ]; + } + ]; + features = { + }; + }; + "termcolor" = rec { + crateName = "termcolor"; + version = "1.1.3"; + edition = "2018"; + sha256 = "0mbpflskhnz3jf312k50vn0hqbql8ga2rk0k79pkgchip4q4vcms"; + authors = [ + "Andrew Gallant " + ]; + dependencies = [ + { + name = "winapi-util"; + packageId = "winapi-util"; + target = { target, features }: (target."windows" or false); + } + ]; + + }; + "terminal_size" = rec { + crateName = "terminal_size"; + version = "0.3.0"; + edition = "2021"; + sha256 = "1xqdzdjq77smg41z67vg3qwrcilf1zf5330gdrgm22lyghmvzgi1"; + authors = [ + "Andrew Chin " + ]; + dependencies = [ + { + name = "rustix"; + packageId = "rustix"; + target = { target, features }: (!(target."windows" or false)); + features = [ "termios" ]; + } + { + name = "windows-sys"; + packageId = "windows-sys 0.48.0"; + target = { target, features }: (target."windows" or false); + features = [ "Win32_Foundation" "Win32_System_Console" ]; + } + ]; + + }; + "thiserror" = rec { + crateName = "thiserror"; + version = "1.0.61"; + edition = "2021"; + sha256 = "028prh962l16cmjivwb1g9xalbpqip0305zhq006mg74dc6whin5"; + authors = [ + "David Tolnay " + ]; + dependencies = [ + { + name = "thiserror-impl"; + packageId = "thiserror-impl"; + } + ]; + + }; + "thiserror-impl" = rec { + crateName = "thiserror-impl"; + version = "1.0.61"; + edition = "2021"; + sha256 = "0cvm37hp0kbcyk1xac1z0chpbd9pbn2g456iyid6sah0a113ihs6"; + procMacro = true; + libName = "thiserror_impl"; + authors = [ + "David Tolnay " + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 2.0.66"; + } + ]; + + }; + "thread_local" = rec { + crateName = "thread_local"; + version = "1.1.8"; + edition = "2021"; + sha256 = "173i5lyjh011gsimk21np9jn8al18rxsrkjli20a7b8ks2xgk7lb"; + authors = [ + "Amanieu d'Antras " + ]; + dependencies = [ + { + name = "cfg-if"; + packageId = "cfg-if"; + } + { + name = "once_cell"; + packageId = "once_cell"; + } + ]; + features = { + }; + }; + "threemf" = rec { + crateName = "threemf"; + version = "0.5.0"; + edition = "2021"; + sha256 = "08q1amp0k8v7rv0gjh9slvvnfwxra95dl9b39fspkiwdgni6wbjl"; + authors = [ + "Hanno Braun " + ]; + dependencies = [ + { + name = "quick-xml"; + packageId = "quick-xml"; + features = [ "serialize" ]; + } + { + name = "serde"; + packageId = "serde"; + features = [ "derive" ]; + } + { + name = "thiserror"; + packageId = "thiserror"; + } + { + name = "zip"; + packageId = "zip"; + usesDefaultFeatures = false; + features = [ "deflate" ]; + } + ]; + + }; + "tinyvec" = rec { + crateName = "tinyvec"; + version = "1.6.0"; + edition = "2018"; + sha256 = "0l6bl2h62a5m44jdnpn7lmj14rd44via8180i7121fvm73mmrk47"; + authors = [ + "Lokathor " + ]; + dependencies = [ + { + name = "tinyvec_macros"; + packageId = "tinyvec_macros"; + optional = true; + } + ]; + features = { + "alloc" = [ "tinyvec_macros" ]; + "arbitrary" = [ "dep:arbitrary" ]; + "real_blackbox" = [ "criterion/real_blackbox" ]; + "rustc_1_55" = [ "rustc_1_40" ]; + "rustc_1_57" = [ "rustc_1_55" ]; + "serde" = [ "dep:serde" ]; + "std" = [ "alloc" ]; + "tinyvec_macros" = [ "dep:tinyvec_macros" ]; + }; + resolvedDefaultFeatures = [ "alloc" "default" "tinyvec_macros" ]; + }; + "tinyvec_macros" = rec { + crateName = "tinyvec_macros"; + version = "0.1.1"; + edition = "2018"; + sha256 = "081gag86208sc3y6sdkshgw3vysm5d34p431dzw0bshz66ncng0z"; + authors = [ + "Soveu " + ]; + + }; + "type-map" = rec { + crateName = "type-map"; + version = "0.5.0"; + edition = "2018"; + sha256 = "17qaga12nkankr7hi2mv43f4lnc78hg480kz6j9zmy4g0h28ddny"; + libName = "type_map"; + authors = [ + "Jacob Brown " + ]; + dependencies = [ + { + name = "rustc-hash"; + packageId = "rustc-hash"; + } + ]; + + }; + "typenum" = rec { + crateName = "typenum"; + version = "1.17.0"; + edition = "2018"; + sha256 = "09dqxv69m9lj9zvv6xw5vxaqx15ps0vxyy5myg33i0kbqvq0pzs2"; + build = "build/main.rs"; + authors = [ + "Paho Lurie-Gregg " + "Andre Bogus " + ]; + features = { + "scale-info" = [ "dep:scale-info" ]; + "scale_info" = [ "scale-info/derive" ]; + }; + }; + "uneval" = rec { + crateName = "uneval"; + version = "0.2.4"; + edition = "2021"; + sha256 = "0wyw25yz7qhhd4i1wg0bf764aw6fkq6gd630x0mpx3b4v0pmvk33"; + authors = [ + "Cerber Ursi " + ]; + dependencies = [ + { + name = "serde"; + packageId = "serde"; + } + { + name = "thiserror"; + packageId = "thiserror"; + } + ]; + + }; + "unicode-bidi" = rec { + crateName = "unicode-bidi"; + version = "0.3.15"; + edition = "2018"; + sha256 = "0xcdxm7h0ydyprwpcbh436rbs6s6lph7f3gr527lzgv6lw053y88"; + libName = "unicode_bidi"; + authors = [ + "The Servo Project Developers" + ]; + features = { + "default" = [ "std" "hardcoded-data" ]; + "flame" = [ "dep:flame" ]; + "flame_it" = [ "flame" "flamer" ]; + "flamer" = [ "dep:flamer" ]; + "serde" = [ "dep:serde" ]; + "with_serde" = [ "serde" ]; + }; + resolvedDefaultFeatures = [ "hardcoded-data" "std" ]; + }; + "unicode-ident" = rec { + crateName = "unicode-ident"; + version = "1.0.12"; + edition = "2018"; + sha256 = "0jzf1znfpb2gx8nr8mvmyqs1crnv79l57nxnbiszc7xf7ynbjm1k"; + libName = "unicode_ident"; + authors = [ + "David Tolnay " + ]; + + }; + "unicode-normalization" = rec { + crateName = "unicode-normalization"; + version = "0.1.23"; + edition = "2018"; + sha256 = "1x81a50h2zxigj74b9bqjsirxxbyhmis54kg600xj213vf31cvd5"; + libName = "unicode_normalization"; + authors = [ + "kwantam " + "Manish Goregaokar " + ]; + dependencies = [ + { + name = "tinyvec"; + packageId = "tinyvec"; + features = [ "alloc" ]; + } + ]; + features = { + "default" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "std" ]; + }; + "unsafe-libyaml" = rec { + crateName = "unsafe-libyaml"; + version = "0.2.11"; + edition = "2021"; + crateBin = []; + sha256 = "0qdq69ffl3v5pzx9kzxbghzn0fzn266i1xn70y88maybz9csqfk7"; + libName = "unsafe_libyaml"; + authors = [ + "David Tolnay " + ]; + + }; + "uom" = rec { + crateName = "uom"; + version = "0.35.0"; + edition = "2018"; + sha256 = "1cl7853v99bpzrwcn6102gvj8gysw7b768anyfksficqg961jql3"; + authors = [ + "Mike Boutin " + ]; + dependencies = [ + { + name = "num-traits"; + packageId = "num-traits"; + usesDefaultFeatures = false; + } + { + name = "typenum"; + packageId = "typenum"; + } + ]; + features = { + "bigint" = [ "bigint-support" ]; + "bigint-support" = [ "num-bigint" "num-rational/num-bigint-std" ]; + "bigrational" = [ "bigint-support" ]; + "biguint" = [ "bigint-support" ]; + "complex-support" = [ "num-complex" ]; + "complex32" = [ "complex-support" ]; + "complex64" = [ "complex-support" ]; + "default" = [ "autoconvert" "f32" "f64" "si" "std" ]; + "i128" = [ "rational-support" ]; + "i16" = [ "rational-support" ]; + "i32" = [ "rational-support" ]; + "i64" = [ "rational-support" ]; + "i8" = [ "rational-support" ]; + "isize" = [ "rational-support" ]; + "num-bigint" = [ "dep:num-bigint" ]; + "num-complex" = [ "dep:num-complex" ]; + "num-rational" = [ "dep:num-rational" ]; + "rational" = [ "rational-support" ]; + "rational-support" = [ "num-rational" ]; + "rational32" = [ "rational-support" ]; + "rational64" = [ "rational-support" ]; + "serde" = [ "dep:serde" ]; + "std" = [ "num-traits/std" ]; + "u128" = [ "rational-support" ]; + "u16" = [ "rational-support" ]; + "u32" = [ "rational-support" ]; + "u64" = [ "rational-support" ]; + "u8" = [ "rational-support" ]; + "use_serde" = [ "serde" ]; + "usize" = [ "rational-support" ]; + }; + resolvedDefaultFeatures = [ "autoconvert" "default" "f32" "f64" "si" "std" ]; + }; + "url" = rec { + crateName = "url"; + version = "2.5.0"; + edition = "2018"; + sha256 = "0cs65961miawncdg2z20171w0vqrmraswv2ihdpd8lxp7cp31rii"; + authors = [ + "The rust-url developers" + ]; + dependencies = [ + { + name = "form_urlencoded"; + packageId = "form_urlencoded"; + } + { + name = "idna"; + packageId = "idna"; + } + { + name = "percent-encoding"; + packageId = "percent-encoding"; + } + ]; + features = { + "serde" = [ "dep:serde" ]; + }; + resolvedDefaultFeatures = [ "default" ]; + }; + "utf8parse" = rec { + crateName = "utf8parse"; + version = "0.2.1"; + edition = "2018"; + sha256 = "02ip1a0az0qmc2786vxk2nqwsgcwf17d3a38fkf0q7hrmwh9c6vi"; + authors = [ + "Joe Wilm " + "Christian Duerr " + ]; + features = { + }; + resolvedDefaultFeatures = [ "default" ]; + }; + "vcpkg" = rec { + crateName = "vcpkg"; + version = "0.2.15"; + edition = "2015"; + sha256 = "09i4nf5y8lig6xgj3f7fyrvzd3nlaw4znrihw8psidvv5yk4xkdc"; + authors = [ + "Jim McGrath " + ]; + + }; + "version_check" = rec { + crateName = "version_check"; + version = "0.9.4"; + edition = "2015"; + sha256 = "0gs8grwdlgh0xq660d7wr80x14vxbizmd8dbp29p2pdncx8lp1s9"; + authors = [ + "Sergio Benitez " + ]; + + }; + "wasite" = rec { + crateName = "wasite"; + version = "0.1.0"; + edition = "2018"; + sha256 = "0nw5h9nmcl4fyf4j5d4mfdjfgvwi1cakpi349wc4zrr59wxxinmq"; + + }; + "wasm-bindgen" = rec { + crateName = "wasm-bindgen"; + version = "0.2.92"; + edition = "2018"; + sha256 = "1a4mcw13nsk3fr8fxjzf9kk1wj88xkfsmnm0pjraw01ryqfm7qjb"; + libName = "wasm_bindgen"; + authors = [ + "The wasm-bindgen Developers" + ]; + dependencies = [ + { + name = "cfg-if"; + packageId = "cfg-if"; + } + { + name = "wasm-bindgen-macro"; + packageId = "wasm-bindgen-macro"; + } + ]; + features = { + "default" = [ "spans" "std" ]; + "enable-interning" = [ "std" ]; + "gg-alloc" = [ "wasm-bindgen-test/gg-alloc" ]; + "serde" = [ "dep:serde" ]; + "serde-serialize" = [ "serde" "serde_json" "std" ]; + "serde_json" = [ "dep:serde_json" ]; + "spans" = [ "wasm-bindgen-macro/spans" ]; + "strict-macro" = [ "wasm-bindgen-macro/strict-macro" ]; + "xxx_debug_only_print_generated_code" = [ "wasm-bindgen-macro/xxx_debug_only_print_generated_code" ]; + }; + resolvedDefaultFeatures = [ "default" "spans" "std" ]; + }; + "wasm-bindgen-backend" = rec { + crateName = "wasm-bindgen-backend"; + version = "0.2.92"; + edition = "2018"; + sha256 = "1nj7wxbi49f0rw9d44rjzms26xlw6r76b2mrggx8jfbdjrxphkb1"; + libName = "wasm_bindgen_backend"; + authors = [ + "The wasm-bindgen Developers" + ]; + dependencies = [ + { + name = "bumpalo"; + packageId = "bumpalo"; + } + { + name = "log"; + packageId = "log"; + } + { + name = "once_cell"; + packageId = "once_cell"; + } + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 2.0.66"; + features = [ "full" ]; + } + { + name = "wasm-bindgen-shared"; + packageId = "wasm-bindgen-shared"; + } + ]; + features = { + "extra-traits" = [ "syn/extra-traits" ]; + }; + resolvedDefaultFeatures = [ "spans" ]; + }; + "wasm-bindgen-macro" = rec { + crateName = "wasm-bindgen-macro"; + version = "0.2.92"; + edition = "2018"; + sha256 = "09npa1srjjabd6nfph5yc03jb26sycjlxhy0c2a1pdrpx4yq5y51"; + procMacro = true; + libName = "wasm_bindgen_macro"; + authors = [ + "The wasm-bindgen Developers" + ]; + dependencies = [ + { + name = "quote"; + packageId = "quote"; + } + { + name = "wasm-bindgen-macro-support"; + packageId = "wasm-bindgen-macro-support"; + } + ]; + features = { + "spans" = [ "wasm-bindgen-macro-support/spans" ]; + "strict-macro" = [ "wasm-bindgen-macro-support/strict-macro" ]; + }; + resolvedDefaultFeatures = [ "spans" ]; + }; + "wasm-bindgen-macro-support" = rec { + crateName = "wasm-bindgen-macro-support"; + version = "0.2.92"; + edition = "2018"; + sha256 = "1dqv2xs8zcyw4kjgzj84bknp2h76phmsb3n7j6hn396h4ssifkz9"; + libName = "wasm_bindgen_macro_support"; + authors = [ + "The wasm-bindgen Developers" + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 2.0.66"; + features = [ "visit" "full" ]; + } + { + name = "wasm-bindgen-backend"; + packageId = "wasm-bindgen-backend"; + } + { + name = "wasm-bindgen-shared"; + packageId = "wasm-bindgen-shared"; + } + ]; + features = { + "extra-traits" = [ "syn/extra-traits" ]; + "spans" = [ "wasm-bindgen-backend/spans" ]; + }; + resolvedDefaultFeatures = [ "spans" ]; + }; + "wasm-bindgen-shared" = rec { + crateName = "wasm-bindgen-shared"; + version = "0.2.92"; + edition = "2018"; + links = "wasm_bindgen"; + sha256 = "15kyavsrna2cvy30kg03va257fraf9x00ny554vxngvpyaa0q6dg"; + libName = "wasm_bindgen_shared"; + authors = [ + "The wasm-bindgen Developers" + ]; + + }; + "wavefront_rs" = rec { + crateName = "wavefront_rs"; + version = "2.0.0-beta.1"; + edition = "2018"; + sha256 = "0c4r3l5772hzwbf2vxivh9dgs54mg0c6kq9ycg69qgqw4zi3gwn2"; + authors = [ + "Alexander Weber " + ]; + + }; + "web-sys" = rec { + crateName = "web-sys"; + version = "0.3.69"; + edition = "2018"; + sha256 = "1vqkxk935xa8zcnsi4bd88sb267ly2i24xl1yiq26d1n32hskbvp"; + libName = "web_sys"; + authors = [ + "The wasm-bindgen Developers" + ]; + dependencies = [ + { + name = "js-sys"; + packageId = "js-sys"; + } + { + name = "wasm-bindgen"; + packageId = "wasm-bindgen"; + } + ]; + features = { + "AbortSignal" = [ "EventTarget" ]; + "AnalyserNode" = [ "AudioNode" "EventTarget" ]; + "Animation" = [ "EventTarget" ]; + "AnimationEvent" = [ "Event" ]; + "AnimationPlaybackEvent" = [ "Event" ]; + "Attr" = [ "EventTarget" "Node" ]; + "AudioBufferSourceNode" = [ "AudioNode" "AudioScheduledSourceNode" "EventTarget" ]; + "AudioContext" = [ "BaseAudioContext" "EventTarget" ]; + "AudioDestinationNode" = [ "AudioNode" "EventTarget" ]; + "AudioNode" = [ "EventTarget" ]; + "AudioProcessingEvent" = [ "Event" ]; + "AudioScheduledSourceNode" = [ "AudioNode" "EventTarget" ]; + "AudioStreamTrack" = [ "EventTarget" "MediaStreamTrack" ]; + "AudioTrackList" = [ "EventTarget" ]; + "AudioWorklet" = [ "Worklet" ]; + "AudioWorkletGlobalScope" = [ "WorkletGlobalScope" ]; + "AudioWorkletNode" = [ "AudioNode" "EventTarget" ]; + "AuthenticatorAssertionResponse" = [ "AuthenticatorResponse" ]; + "AuthenticatorAttestationResponse" = [ "AuthenticatorResponse" ]; + "BaseAudioContext" = [ "EventTarget" ]; + "BatteryManager" = [ "EventTarget" ]; + "BeforeUnloadEvent" = [ "Event" ]; + "BiquadFilterNode" = [ "AudioNode" "EventTarget" ]; + "BlobEvent" = [ "Event" ]; + "Bluetooth" = [ "EventTarget" ]; + "BluetoothAdvertisingEvent" = [ "Event" ]; + "BluetoothDevice" = [ "EventTarget" ]; + "BluetoothPermissionResult" = [ "EventTarget" "PermissionStatus" ]; + "BluetoothRemoteGattCharacteristic" = [ "EventTarget" ]; + "BluetoothRemoteGattService" = [ "EventTarget" ]; + "BroadcastChannel" = [ "EventTarget" ]; + "CanvasCaptureMediaStream" = [ "EventTarget" "MediaStream" ]; + "CanvasCaptureMediaStreamTrack" = [ "EventTarget" "MediaStreamTrack" ]; + "CdataSection" = [ "CharacterData" "EventTarget" "Node" "Text" ]; + "ChannelMergerNode" = [ "AudioNode" "EventTarget" ]; + "ChannelSplitterNode" = [ "AudioNode" "EventTarget" ]; + "CharacterData" = [ "EventTarget" "Node" ]; + "ChromeWorker" = [ "EventTarget" "Worker" ]; + "Clipboard" = [ "EventTarget" ]; + "ClipboardEvent" = [ "Event" ]; + "CloseEvent" = [ "Event" ]; + "Comment" = [ "CharacterData" "EventTarget" "Node" ]; + "CompositionEvent" = [ "Event" "UiEvent" ]; + "ConstantSourceNode" = [ "AudioNode" "AudioScheduledSourceNode" "EventTarget" ]; + "ConvolverNode" = [ "AudioNode" "EventTarget" ]; + "CssAnimation" = [ "Animation" "EventTarget" ]; + "CssConditionRule" = [ "CssGroupingRule" "CssRule" ]; + "CssCounterStyleRule" = [ "CssRule" ]; + "CssFontFaceRule" = [ "CssRule" ]; + "CssFontFeatureValuesRule" = [ "CssRule" ]; + "CssGroupingRule" = [ "CssRule" ]; + "CssImportRule" = [ "CssRule" ]; + "CssKeyframeRule" = [ "CssRule" ]; + "CssKeyframesRule" = [ "CssRule" ]; + "CssMediaRule" = [ "CssConditionRule" "CssGroupingRule" "CssRule" ]; + "CssNamespaceRule" = [ "CssRule" ]; + "CssPageRule" = [ "CssRule" ]; + "CssStyleRule" = [ "CssRule" ]; + "CssStyleSheet" = [ "StyleSheet" ]; + "CssSupportsRule" = [ "CssConditionRule" "CssGroupingRule" "CssRule" ]; + "CssTransition" = [ "Animation" "EventTarget" ]; + "CustomEvent" = [ "Event" ]; + "DedicatedWorkerGlobalScope" = [ "EventTarget" "WorkerGlobalScope" ]; + "DelayNode" = [ "AudioNode" "EventTarget" ]; + "DeviceLightEvent" = [ "Event" ]; + "DeviceMotionEvent" = [ "Event" ]; + "DeviceOrientationEvent" = [ "Event" ]; + "DeviceProximityEvent" = [ "Event" ]; + "Document" = [ "EventTarget" "Node" ]; + "DocumentFragment" = [ "EventTarget" "Node" ]; + "DocumentTimeline" = [ "AnimationTimeline" ]; + "DocumentType" = [ "EventTarget" "Node" ]; + "DomMatrix" = [ "DomMatrixReadOnly" ]; + "DomPoint" = [ "DomPointReadOnly" ]; + "DomRect" = [ "DomRectReadOnly" ]; + "DomRequest" = [ "EventTarget" ]; + "DragEvent" = [ "Event" "MouseEvent" "UiEvent" ]; + "DynamicsCompressorNode" = [ "AudioNode" "EventTarget" ]; + "Element" = [ "EventTarget" "Node" ]; + "ErrorEvent" = [ "Event" ]; + "EventSource" = [ "EventTarget" ]; + "ExtendableEvent" = [ "Event" ]; + "ExtendableMessageEvent" = [ "Event" "ExtendableEvent" ]; + "FetchEvent" = [ "Event" "ExtendableEvent" ]; + "FetchObserver" = [ "EventTarget" ]; + "File" = [ "Blob" ]; + "FileReader" = [ "EventTarget" ]; + "FileSystemDirectoryEntry" = [ "FileSystemEntry" ]; + "FileSystemDirectoryHandle" = [ "FileSystemHandle" ]; + "FileSystemFileEntry" = [ "FileSystemEntry" ]; + "FileSystemFileHandle" = [ "FileSystemHandle" ]; + "FileSystemWritableFileStream" = [ "WritableStream" ]; + "FocusEvent" = [ "Event" "UiEvent" ]; + "FontFaceSet" = [ "EventTarget" ]; + "FontFaceSetLoadEvent" = [ "Event" ]; + "GainNode" = [ "AudioNode" "EventTarget" ]; + "GamepadAxisMoveEvent" = [ "Event" "GamepadEvent" ]; + "GamepadButtonEvent" = [ "Event" "GamepadEvent" ]; + "GamepadEvent" = [ "Event" ]; + "GpuDevice" = [ "EventTarget" ]; + "GpuInternalError" = [ "GpuError" ]; + "GpuOutOfMemoryError" = [ "GpuError" ]; + "GpuPipelineError" = [ "DomException" ]; + "GpuUncapturedErrorEvent" = [ "Event" ]; + "GpuValidationError" = [ "GpuError" ]; + "HashChangeEvent" = [ "Event" ]; + "Hid" = [ "EventTarget" ]; + "HidConnectionEvent" = [ "Event" ]; + "HidDevice" = [ "EventTarget" ]; + "HidInputReportEvent" = [ "Event" ]; + "HtmlAnchorElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlAreaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlAudioElement" = [ "Element" "EventTarget" "HtmlElement" "HtmlMediaElement" "Node" ]; + "HtmlBaseElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlBodyElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlBrElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlButtonElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlCanvasElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlDListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlDataElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlDataListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlDetailsElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlDialogElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlDirectoryElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlDivElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlDocument" = [ "Document" "EventTarget" "Node" ]; + "HtmlElement" = [ "Element" "EventTarget" "Node" ]; + "HtmlEmbedElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlFieldSetElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlFontElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlFormControlsCollection" = [ "HtmlCollection" ]; + "HtmlFormElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlFrameElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlFrameSetElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlHeadElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlHeadingElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlHrElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlHtmlElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlIFrameElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlImageElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlInputElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlLabelElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlLegendElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlLiElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlLinkElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlMapElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlMediaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlMenuElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlMenuItemElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlMetaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlMeterElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlModElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlOListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlObjectElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlOptGroupElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlOptionElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlOptionsCollection" = [ "HtmlCollection" ]; + "HtmlOutputElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlParagraphElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlParamElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlPictureElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlPreElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlProgressElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlQuoteElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlScriptElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlSelectElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlSlotElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlSourceElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlSpanElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlStyleElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlTableCaptionElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlTableCellElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlTableColElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlTableElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlTableRowElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlTableSectionElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlTemplateElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlTextAreaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlTimeElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlTitleElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlTrackElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlUListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlUnknownElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; + "HtmlVideoElement" = [ "Element" "EventTarget" "HtmlElement" "HtmlMediaElement" "Node" ]; + "IdbCursorWithValue" = [ "IdbCursor" ]; + "IdbDatabase" = [ "EventTarget" ]; + "IdbFileHandle" = [ "EventTarget" ]; + "IdbFileRequest" = [ "DomRequest" "EventTarget" ]; + "IdbLocaleAwareKeyRange" = [ "IdbKeyRange" ]; + "IdbMutableFile" = [ "EventTarget" ]; + "IdbOpenDbRequest" = [ "EventTarget" "IdbRequest" ]; + "IdbRequest" = [ "EventTarget" ]; + "IdbTransaction" = [ "EventTarget" ]; + "IdbVersionChangeEvent" = [ "Event" ]; + "IirFilterNode" = [ "AudioNode" "EventTarget" ]; + "ImageCaptureErrorEvent" = [ "Event" ]; + "ImageTrack" = [ "EventTarget" ]; + "InputEvent" = [ "Event" "UiEvent" ]; + "KeyboardEvent" = [ "Event" "UiEvent" ]; + "KeyframeEffect" = [ "AnimationEffect" ]; + "LocalMediaStream" = [ "EventTarget" "MediaStream" ]; + "MediaDevices" = [ "EventTarget" ]; + "MediaElementAudioSourceNode" = [ "AudioNode" "EventTarget" ]; + "MediaEncryptedEvent" = [ "Event" ]; + "MediaKeyError" = [ "Event" ]; + "MediaKeyMessageEvent" = [ "Event" ]; + "MediaKeySession" = [ "EventTarget" ]; + "MediaQueryList" = [ "EventTarget" ]; + "MediaQueryListEvent" = [ "Event" ]; + "MediaRecorder" = [ "EventTarget" ]; + "MediaRecorderErrorEvent" = [ "Event" ]; + "MediaSource" = [ "EventTarget" ]; + "MediaStream" = [ "EventTarget" ]; + "MediaStreamAudioDestinationNode" = [ "AudioNode" "EventTarget" ]; + "MediaStreamAudioSourceNode" = [ "AudioNode" "EventTarget" ]; + "MediaStreamEvent" = [ "Event" ]; + "MediaStreamTrack" = [ "EventTarget" ]; + "MediaStreamTrackEvent" = [ "Event" ]; + "MediaStreamTrackGenerator" = [ "EventTarget" "MediaStreamTrack" ]; + "MessageEvent" = [ "Event" ]; + "MessagePort" = [ "EventTarget" ]; + "MidiAccess" = [ "EventTarget" ]; + "MidiConnectionEvent" = [ "Event" ]; + "MidiInput" = [ "EventTarget" "MidiPort" ]; + "MidiMessageEvent" = [ "Event" ]; + "MidiOutput" = [ "EventTarget" "MidiPort" ]; + "MidiPort" = [ "EventTarget" ]; + "MouseEvent" = [ "Event" "UiEvent" ]; + "MouseScrollEvent" = [ "Event" "MouseEvent" "UiEvent" ]; + "MutationEvent" = [ "Event" ]; + "NetworkInformation" = [ "EventTarget" ]; + "Node" = [ "EventTarget" ]; + "Notification" = [ "EventTarget" ]; + "NotificationEvent" = [ "Event" "ExtendableEvent" ]; + "OfflineAudioCompletionEvent" = [ "Event" ]; + "OfflineAudioContext" = [ "BaseAudioContext" "EventTarget" ]; + "OfflineResourceList" = [ "EventTarget" ]; + "OffscreenCanvas" = [ "EventTarget" ]; + "OscillatorNode" = [ "AudioNode" "AudioScheduledSourceNode" "EventTarget" ]; + "PageTransitionEvent" = [ "Event" ]; + "PaintWorkletGlobalScope" = [ "WorkletGlobalScope" ]; + "PannerNode" = [ "AudioNode" "EventTarget" ]; + "PaymentMethodChangeEvent" = [ "Event" "PaymentRequestUpdateEvent" ]; + "PaymentRequestUpdateEvent" = [ "Event" ]; + "Performance" = [ "EventTarget" ]; + "PerformanceMark" = [ "PerformanceEntry" ]; + "PerformanceMeasure" = [ "PerformanceEntry" ]; + "PerformanceNavigationTiming" = [ "PerformanceEntry" "PerformanceResourceTiming" ]; + "PerformanceResourceTiming" = [ "PerformanceEntry" ]; + "PermissionStatus" = [ "EventTarget" ]; + "PointerEvent" = [ "Event" "MouseEvent" "UiEvent" ]; + "PopStateEvent" = [ "Event" ]; + "PopupBlockedEvent" = [ "Event" ]; + "PresentationAvailability" = [ "EventTarget" ]; + "PresentationConnection" = [ "EventTarget" ]; + "PresentationConnectionAvailableEvent" = [ "Event" ]; + "PresentationConnectionCloseEvent" = [ "Event" ]; + "PresentationConnectionList" = [ "EventTarget" ]; + "PresentationRequest" = [ "EventTarget" ]; + "ProcessingInstruction" = [ "CharacterData" "EventTarget" "Node" ]; + "ProgressEvent" = [ "Event" ]; + "PromiseRejectionEvent" = [ "Event" ]; + "PublicKeyCredential" = [ "Credential" ]; + "PushEvent" = [ "Event" "ExtendableEvent" ]; + "RadioNodeList" = [ "NodeList" ]; + "RtcDataChannel" = [ "EventTarget" ]; + "RtcDataChannelEvent" = [ "Event" ]; + "RtcPeerConnection" = [ "EventTarget" ]; + "RtcPeerConnectionIceErrorEvent" = [ "Event" ]; + "RtcPeerConnectionIceEvent" = [ "Event" ]; + "RtcTrackEvent" = [ "Event" ]; + "RtcdtmfSender" = [ "EventTarget" ]; + "RtcdtmfToneChangeEvent" = [ "Event" ]; + "Screen" = [ "EventTarget" ]; + "ScreenOrientation" = [ "EventTarget" ]; + "ScriptProcessorNode" = [ "AudioNode" "EventTarget" ]; + "ScrollAreaEvent" = [ "Event" "UiEvent" ]; + "SecurityPolicyViolationEvent" = [ "Event" ]; + "Serial" = [ "EventTarget" ]; + "SerialPort" = [ "EventTarget" ]; + "ServiceWorker" = [ "EventTarget" ]; + "ServiceWorkerContainer" = [ "EventTarget" ]; + "ServiceWorkerGlobalScope" = [ "EventTarget" "WorkerGlobalScope" ]; + "ServiceWorkerRegistration" = [ "EventTarget" ]; + "ShadowRoot" = [ "DocumentFragment" "EventTarget" "Node" ]; + "SharedWorker" = [ "EventTarget" ]; + "SharedWorkerGlobalScope" = [ "EventTarget" "WorkerGlobalScope" ]; + "SourceBuffer" = [ "EventTarget" ]; + "SourceBufferList" = [ "EventTarget" ]; + "SpeechRecognition" = [ "EventTarget" ]; + "SpeechRecognitionError" = [ "Event" ]; + "SpeechRecognitionEvent" = [ "Event" ]; + "SpeechSynthesis" = [ "EventTarget" ]; + "SpeechSynthesisErrorEvent" = [ "Event" "SpeechSynthesisEvent" ]; + "SpeechSynthesisEvent" = [ "Event" ]; + "SpeechSynthesisUtterance" = [ "EventTarget" ]; + "StereoPannerNode" = [ "AudioNode" "EventTarget" ]; + "StorageEvent" = [ "Event" ]; + "SubmitEvent" = [ "Event" ]; + "SvgAnimateElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ]; + "SvgAnimateMotionElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ]; + "SvgAnimateTransformElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ]; + "SvgAnimationElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgCircleElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ]; + "SvgClipPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgComponentTransferFunctionElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgDefsElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; + "SvgDescElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgElement" = [ "Element" "EventTarget" "Node" ]; + "SvgEllipseElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ]; + "SvgFilterElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgForeignObjectElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; + "SvgGeometryElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; + "SvgGradientElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgGraphicsElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgImageElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; + "SvgLineElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ]; + "SvgLinearGradientElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGradientElement" ]; + "SvgMarkerElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgMaskElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgMetadataElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ]; + "SvgPathSegArcAbs" = [ "SvgPathSeg" ]; + "SvgPathSegArcRel" = [ "SvgPathSeg" ]; + "SvgPathSegClosePath" = [ "SvgPathSeg" ]; + "SvgPathSegCurvetoCubicAbs" = [ "SvgPathSeg" ]; + "SvgPathSegCurvetoCubicRel" = [ "SvgPathSeg" ]; + "SvgPathSegCurvetoCubicSmoothAbs" = [ "SvgPathSeg" ]; + "SvgPathSegCurvetoCubicSmoothRel" = [ "SvgPathSeg" ]; + "SvgPathSegCurvetoQuadraticAbs" = [ "SvgPathSeg" ]; + "SvgPathSegCurvetoQuadraticRel" = [ "SvgPathSeg" ]; + "SvgPathSegCurvetoQuadraticSmoothAbs" = [ "SvgPathSeg" ]; + "SvgPathSegCurvetoQuadraticSmoothRel" = [ "SvgPathSeg" ]; + "SvgPathSegLinetoAbs" = [ "SvgPathSeg" ]; + "SvgPathSegLinetoHorizontalAbs" = [ "SvgPathSeg" ]; + "SvgPathSegLinetoHorizontalRel" = [ "SvgPathSeg" ]; + "SvgPathSegLinetoRel" = [ "SvgPathSeg" ]; + "SvgPathSegLinetoVerticalAbs" = [ "SvgPathSeg" ]; + "SvgPathSegLinetoVerticalRel" = [ "SvgPathSeg" ]; + "SvgPathSegMovetoAbs" = [ "SvgPathSeg" ]; + "SvgPathSegMovetoRel" = [ "SvgPathSeg" ]; + "SvgPatternElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgPolygonElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ]; + "SvgPolylineElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ]; + "SvgRadialGradientElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGradientElement" ]; + "SvgRectElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ]; + "SvgScriptElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgSetElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ]; + "SvgStopElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgStyleElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgSwitchElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; + "SvgSymbolElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgTextContentElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; + "SvgTextElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" "SvgTextPositioningElement" ]; + "SvgTextPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" ]; + "SvgTextPositioningElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" ]; + "SvgTitleElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgUseElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; + "SvgViewElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgaElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; + "SvgfeBlendElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeColorMatrixElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeComponentTransferElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeCompositeElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeConvolveMatrixElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeDiffuseLightingElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeDisplacementMapElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeDistantLightElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeDropShadowElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeFloodElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeFuncAElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ]; + "SvgfeFuncBElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ]; + "SvgfeFuncGElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ]; + "SvgfeFuncRElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ]; + "SvgfeGaussianBlurElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeImageElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeMergeElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeMergeNodeElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeMorphologyElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeOffsetElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfePointLightElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeSpecularLightingElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeSpotLightElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeTileElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgfeTurbulenceElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvggElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; + "SvgmPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; + "SvgsvgElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; + "SvgtSpanElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" "SvgTextPositioningElement" ]; + "TaskController" = [ "AbortController" ]; + "TaskPriorityChangeEvent" = [ "Event" ]; + "TaskSignal" = [ "AbortSignal" "EventTarget" ]; + "TcpServerSocket" = [ "EventTarget" ]; + "TcpServerSocketEvent" = [ "Event" ]; + "TcpSocket" = [ "EventTarget" ]; + "TcpSocketErrorEvent" = [ "Event" ]; + "TcpSocketEvent" = [ "Event" ]; + "Text" = [ "CharacterData" "EventTarget" "Node" ]; + "TextTrack" = [ "EventTarget" ]; + "TextTrackCue" = [ "EventTarget" ]; + "TextTrackList" = [ "EventTarget" ]; + "TimeEvent" = [ "Event" ]; + "TouchEvent" = [ "Event" "UiEvent" ]; + "TrackEvent" = [ "Event" ]; + "TransitionEvent" = [ "Event" ]; + "UiEvent" = [ "Event" ]; + "Usb" = [ "EventTarget" ]; + "UsbConnectionEvent" = [ "Event" ]; + "UsbPermissionResult" = [ "EventTarget" "PermissionStatus" ]; + "UserProximityEvent" = [ "Event" ]; + "ValueEvent" = [ "Event" ]; + "VideoStreamTrack" = [ "EventTarget" "MediaStreamTrack" ]; + "VideoTrackList" = [ "EventTarget" ]; + "VrDisplay" = [ "EventTarget" ]; + "VttCue" = [ "EventTarget" "TextTrackCue" ]; + "WakeLockSentinel" = [ "EventTarget" ]; + "WaveShaperNode" = [ "AudioNode" "EventTarget" ]; + "WebGlContextEvent" = [ "Event" ]; + "WebKitCssMatrix" = [ "DomMatrix" "DomMatrixReadOnly" ]; + "WebSocket" = [ "EventTarget" ]; + "WebTransportError" = [ "DomException" ]; + "WebTransportReceiveStream" = [ "ReadableStream" ]; + "WebTransportSendStream" = [ "WritableStream" ]; + "WheelEvent" = [ "Event" "MouseEvent" "UiEvent" ]; + "Window" = [ "EventTarget" ]; + "WindowClient" = [ "Client" ]; + "Worker" = [ "EventTarget" ]; + "WorkerDebuggerGlobalScope" = [ "EventTarget" ]; + "WorkerGlobalScope" = [ "EventTarget" ]; + "XmlDocument" = [ "Document" "EventTarget" "Node" ]; + "XmlHttpRequest" = [ "EventTarget" "XmlHttpRequestEventTarget" ]; + "XmlHttpRequestEventTarget" = [ "EventTarget" ]; + "XmlHttpRequestUpload" = [ "EventTarget" "XmlHttpRequestEventTarget" ]; + "XrBoundedReferenceSpace" = [ "EventTarget" "XrReferenceSpace" "XrSpace" ]; + "XrInputSourceEvent" = [ "Event" ]; + "XrInputSourcesChangeEvent" = [ "Event" ]; + "XrJointPose" = [ "XrPose" ]; + "XrJointSpace" = [ "EventTarget" "XrSpace" ]; + "XrLayer" = [ "EventTarget" ]; + "XrPermissionStatus" = [ "EventTarget" "PermissionStatus" ]; + "XrReferenceSpace" = [ "EventTarget" "XrSpace" ]; + "XrReferenceSpaceEvent" = [ "Event" ]; + "XrSession" = [ "EventTarget" ]; + "XrSessionEvent" = [ "Event" ]; + "XrSpace" = [ "EventTarget" ]; + "XrSystem" = [ "EventTarget" ]; + "XrViewerPose" = [ "XrPose" ]; + "XrWebGlLayer" = [ "EventTarget" "XrLayer" ]; + }; + resolvedDefaultFeatures = [ "Document" "EventTarget" "Location" "Navigator" "Node" "Window" ]; + }; + "whoami" = rec { + crateName = "whoami"; + version = "1.5.1"; + edition = "2018"; + sha256 = "1aafr70h2zlqr73i58bj84hdf9rgplxbpygqbgsqhkk3mngv8jm4"; + dependencies = [ + { + name = "redox_syscall"; + packageId = "redox_syscall 0.4.1"; + target = { target, features }: (("redox" == target."os" or null) && (!("wasm32" == target."arch" or null))); + } + { + name = "wasite"; + packageId = "wasite"; + target = { target, features }: (("wasm32" == target."arch" or null) && ("wasi" == target."os" or null)); + } + { + name = "web-sys"; + packageId = "web-sys"; + optional = true; + target = { target, features }: (("wasm32" == target."arch" or null) && (!("wasi" == target."os" or null)) && (!("daku" == target."os" or null))); + features = [ "Navigator" "Document" "Window" "Location" ]; + } + ]; + features = { + "default" = [ "web" ]; + "web" = [ "web-sys" ]; + "web-sys" = [ "dep:web-sys" ]; + }; + resolvedDefaultFeatures = [ "default" "web" "web-sys" ]; + }; + "wide" = rec { + crateName = "wide"; + version = "0.7.21"; + edition = "2018"; + sha256 = "1z6pfk6pkxribm9d9ikbgjdx0ppfq3ss8r1hb8jkqgxhl54wg3fd"; + authors = [ + "Lokathor " + ]; + dependencies = [ + { + name = "bytemuck"; + packageId = "bytemuck"; + } + { + name = "safe_arch"; + packageId = "safe_arch"; + features = [ "bytemuck" ]; + } + ]; + features = { + "default" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "std" ]; + }; + "winapi-util" = rec { + crateName = "winapi-util"; + version = "0.1.8"; + edition = "2021"; + sha256 = "0svcgddd2rw06mj4r76gj655qsa1ikgz3d3gzax96fz7w62c6k2d"; + libName = "winapi_util"; + authors = [ + "Andrew Gallant " + ]; + dependencies = [ + { + name = "windows-sys"; + packageId = "windows-sys 0.52.0"; + target = { target, features }: (target."windows" or false); + features = [ "Win32_Foundation" "Win32_Storage_FileSystem" "Win32_System_Console" "Win32_System_SystemInformation" ]; + } + ]; + + }; + "windows-core" = rec { + crateName = "windows-core"; + version = "0.52.0"; + edition = "2021"; + sha256 = "1nc3qv7sy24x0nlnb32f7alzpd6f72l4p24vl65vydbyil669ark"; + libName = "windows_core"; + authors = [ + "Microsoft" + ]; + dependencies = [ + { + name = "windows-targets"; + packageId = "windows-targets 0.52.5"; + } + ]; + features = { + }; + resolvedDefaultFeatures = [ "default" ]; + }; + "windows-sys 0.48.0" = rec { + crateName = "windows-sys"; + version = "0.48.0"; + edition = "2018"; + sha256 = "1aan23v5gs7gya1lc46hqn9mdh8yph3fhxmhxlw36pn6pqc28zb7"; + libName = "windows_sys"; + authors = [ + "Microsoft" + ]; + dependencies = [ + { + name = "windows-targets"; + packageId = "windows-targets 0.48.5"; + } + ]; + features = { + "Wdk_System" = [ "Wdk" ]; + "Wdk_System_OfflineRegistry" = [ "Wdk_System" ]; + "Win32_Data" = [ "Win32" ]; + "Win32_Data_HtmlHelp" = [ "Win32_Data" ]; + "Win32_Data_RightsManagement" = [ "Win32_Data" ]; + "Win32_Data_Xml" = [ "Win32_Data" ]; + "Win32_Data_Xml_MsXml" = [ "Win32_Data_Xml" ]; + "Win32_Data_Xml_XmlLite" = [ "Win32_Data_Xml" ]; + "Win32_Devices" = [ "Win32" ]; + "Win32_Devices_AllJoyn" = [ "Win32_Devices" ]; + "Win32_Devices_BiometricFramework" = [ "Win32_Devices" ]; + "Win32_Devices_Bluetooth" = [ "Win32_Devices" ]; + "Win32_Devices_Communication" = [ "Win32_Devices" ]; + "Win32_Devices_DeviceAccess" = [ "Win32_Devices" ]; + "Win32_Devices_DeviceAndDriverInstallation" = [ "Win32_Devices" ]; + "Win32_Devices_DeviceQuery" = [ "Win32_Devices" ]; + "Win32_Devices_Display" = [ "Win32_Devices" ]; + "Win32_Devices_Enumeration" = [ "Win32_Devices" ]; + "Win32_Devices_Enumeration_Pnp" = [ "Win32_Devices_Enumeration" ]; + "Win32_Devices_Fax" = [ "Win32_Devices" ]; + "Win32_Devices_FunctionDiscovery" = [ "Win32_Devices" ]; + "Win32_Devices_Geolocation" = [ "Win32_Devices" ]; + "Win32_Devices_HumanInterfaceDevice" = [ "Win32_Devices" ]; + "Win32_Devices_ImageAcquisition" = [ "Win32_Devices" ]; + "Win32_Devices_PortableDevices" = [ "Win32_Devices" ]; + "Win32_Devices_Properties" = [ "Win32_Devices" ]; + "Win32_Devices_Pwm" = [ "Win32_Devices" ]; + "Win32_Devices_Sensors" = [ "Win32_Devices" ]; + "Win32_Devices_SerialCommunication" = [ "Win32_Devices" ]; + "Win32_Devices_Tapi" = [ "Win32_Devices" ]; + "Win32_Devices_Usb" = [ "Win32_Devices" ]; + "Win32_Devices_WebServicesOnDevices" = [ "Win32_Devices" ]; + "Win32_Foundation" = [ "Win32" ]; + "Win32_Gaming" = [ "Win32" ]; + "Win32_Globalization" = [ "Win32" ]; + "Win32_Graphics" = [ "Win32" ]; + "Win32_Graphics_Dwm" = [ "Win32_Graphics" ]; + "Win32_Graphics_Gdi" = [ "Win32_Graphics" ]; + "Win32_Graphics_Hlsl" = [ "Win32_Graphics" ]; + "Win32_Graphics_OpenGL" = [ "Win32_Graphics" ]; + "Win32_Graphics_Printing" = [ "Win32_Graphics" ]; + "Win32_Graphics_Printing_PrintTicket" = [ "Win32_Graphics_Printing" ]; + "Win32_Management" = [ "Win32" ]; + "Win32_Management_MobileDeviceManagementRegistration" = [ "Win32_Management" ]; + "Win32_Media" = [ "Win32" ]; + "Win32_Media_Audio" = [ "Win32_Media" ]; + "Win32_Media_Audio_Apo" = [ "Win32_Media_Audio" ]; + "Win32_Media_Audio_DirectMusic" = [ "Win32_Media_Audio" ]; + "Win32_Media_Audio_Endpoints" = [ "Win32_Media_Audio" ]; + "Win32_Media_Audio_XAudio2" = [ "Win32_Media_Audio" ]; + "Win32_Media_DeviceManager" = [ "Win32_Media" ]; + "Win32_Media_DxMediaObjects" = [ "Win32_Media" ]; + "Win32_Media_KernelStreaming" = [ "Win32_Media" ]; + "Win32_Media_LibrarySharingServices" = [ "Win32_Media" ]; + "Win32_Media_MediaPlayer" = [ "Win32_Media" ]; + "Win32_Media_Multimedia" = [ "Win32_Media" ]; + "Win32_Media_Speech" = [ "Win32_Media" ]; + "Win32_Media_Streaming" = [ "Win32_Media" ]; + "Win32_Media_WindowsMediaFormat" = [ "Win32_Media" ]; + "Win32_NetworkManagement" = [ "Win32" ]; + "Win32_NetworkManagement_Dhcp" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_Dns" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_InternetConnectionWizard" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_IpHelper" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_MobileBroadband" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_Multicast" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_Ndis" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_NetBios" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_NetManagement" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_NetShell" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_NetworkDiagnosticsFramework" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_NetworkPolicyServer" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_P2P" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_QoS" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_Rras" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_Snmp" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WNet" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WebDav" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WiFi" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WindowsConnectNow" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WindowsConnectionManager" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WindowsFilteringPlatform" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WindowsFirewall" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WindowsNetworkVirtualization" = [ "Win32_NetworkManagement" ]; + "Win32_Networking" = [ "Win32" ]; + "Win32_Networking_ActiveDirectory" = [ "Win32_Networking" ]; + "Win32_Networking_BackgroundIntelligentTransferService" = [ "Win32_Networking" ]; + "Win32_Networking_Clustering" = [ "Win32_Networking" ]; + "Win32_Networking_HttpServer" = [ "Win32_Networking" ]; + "Win32_Networking_Ldap" = [ "Win32_Networking" ]; + "Win32_Networking_NetworkListManager" = [ "Win32_Networking" ]; + "Win32_Networking_RemoteDifferentialCompression" = [ "Win32_Networking" ]; + "Win32_Networking_WebSocket" = [ "Win32_Networking" ]; + "Win32_Networking_WinHttp" = [ "Win32_Networking" ]; + "Win32_Networking_WinInet" = [ "Win32_Networking" ]; + "Win32_Networking_WinSock" = [ "Win32_Networking" ]; + "Win32_Networking_WindowsWebServices" = [ "Win32_Networking" ]; + "Win32_Security" = [ "Win32" ]; + "Win32_Security_AppLocker" = [ "Win32_Security" ]; + "Win32_Security_Authentication" = [ "Win32_Security" ]; + "Win32_Security_Authentication_Identity" = [ "Win32_Security_Authentication" ]; + "Win32_Security_Authentication_Identity_Provider" = [ "Win32_Security_Authentication_Identity" ]; + "Win32_Security_Authorization" = [ "Win32_Security" ]; + "Win32_Security_Authorization_UI" = [ "Win32_Security_Authorization" ]; + "Win32_Security_ConfigurationSnapin" = [ "Win32_Security" ]; + "Win32_Security_Credentials" = [ "Win32_Security" ]; + "Win32_Security_Cryptography" = [ "Win32_Security" ]; + "Win32_Security_Cryptography_Catalog" = [ "Win32_Security_Cryptography" ]; + "Win32_Security_Cryptography_Certificates" = [ "Win32_Security_Cryptography" ]; + "Win32_Security_Cryptography_Sip" = [ "Win32_Security_Cryptography" ]; + "Win32_Security_Cryptography_UI" = [ "Win32_Security_Cryptography" ]; + "Win32_Security_DiagnosticDataQuery" = [ "Win32_Security" ]; + "Win32_Security_DirectoryServices" = [ "Win32_Security" ]; + "Win32_Security_EnterpriseData" = [ "Win32_Security" ]; + "Win32_Security_ExtensibleAuthenticationProtocol" = [ "Win32_Security" ]; + "Win32_Security_Isolation" = [ "Win32_Security" ]; + "Win32_Security_LicenseProtection" = [ "Win32_Security" ]; + "Win32_Security_NetworkAccessProtection" = [ "Win32_Security" ]; + "Win32_Security_Tpm" = [ "Win32_Security" ]; + "Win32_Security_WinTrust" = [ "Win32_Security" ]; + "Win32_Security_WinWlx" = [ "Win32_Security" ]; + "Win32_Storage" = [ "Win32" ]; + "Win32_Storage_Cabinets" = [ "Win32_Storage" ]; + "Win32_Storage_CloudFilters" = [ "Win32_Storage" ]; + "Win32_Storage_Compression" = [ "Win32_Storage" ]; + "Win32_Storage_DataDeduplication" = [ "Win32_Storage" ]; + "Win32_Storage_DistributedFileSystem" = [ "Win32_Storage" ]; + "Win32_Storage_EnhancedStorage" = [ "Win32_Storage" ]; + "Win32_Storage_FileHistory" = [ "Win32_Storage" ]; + "Win32_Storage_FileServerResourceManager" = [ "Win32_Storage" ]; + "Win32_Storage_FileSystem" = [ "Win32_Storage" ]; + "Win32_Storage_Imapi" = [ "Win32_Storage" ]; + "Win32_Storage_IndexServer" = [ "Win32_Storage" ]; + "Win32_Storage_InstallableFileSystems" = [ "Win32_Storage" ]; + "Win32_Storage_IscsiDisc" = [ "Win32_Storage" ]; + "Win32_Storage_Jet" = [ "Win32_Storage" ]; + "Win32_Storage_OfflineFiles" = [ "Win32_Storage" ]; + "Win32_Storage_OperationRecorder" = [ "Win32_Storage" ]; + "Win32_Storage_Packaging" = [ "Win32_Storage" ]; + "Win32_Storage_Packaging_Appx" = [ "Win32_Storage_Packaging" ]; + "Win32_Storage_Packaging_Opc" = [ "Win32_Storage_Packaging" ]; + "Win32_Storage_ProjectedFileSystem" = [ "Win32_Storage" ]; + "Win32_Storage_StructuredStorage" = [ "Win32_Storage" ]; + "Win32_Storage_Vhd" = [ "Win32_Storage" ]; + "Win32_Storage_VirtualDiskService" = [ "Win32_Storage" ]; + "Win32_Storage_Vss" = [ "Win32_Storage" ]; + "Win32_Storage_Xps" = [ "Win32_Storage" ]; + "Win32_Storage_Xps_Printing" = [ "Win32_Storage_Xps" ]; + "Win32_System" = [ "Win32" ]; + "Win32_System_AddressBook" = [ "Win32_System" ]; + "Win32_System_Antimalware" = [ "Win32_System" ]; + "Win32_System_ApplicationInstallationAndServicing" = [ "Win32_System" ]; + "Win32_System_ApplicationVerifier" = [ "Win32_System" ]; + "Win32_System_AssessmentTool" = [ "Win32_System" ]; + "Win32_System_ClrHosting" = [ "Win32_System" ]; + "Win32_System_Com" = [ "Win32_System" ]; + "Win32_System_Com_CallObj" = [ "Win32_System_Com" ]; + "Win32_System_Com_ChannelCredentials" = [ "Win32_System_Com" ]; + "Win32_System_Com_Events" = [ "Win32_System_Com" ]; + "Win32_System_Com_Marshal" = [ "Win32_System_Com" ]; + "Win32_System_Com_StructuredStorage" = [ "Win32_System_Com" ]; + "Win32_System_Com_UI" = [ "Win32_System_Com" ]; + "Win32_System_Com_Urlmon" = [ "Win32_System_Com" ]; + "Win32_System_ComponentServices" = [ "Win32_System" ]; + "Win32_System_Console" = [ "Win32_System" ]; + "Win32_System_Contacts" = [ "Win32_System" ]; + "Win32_System_CorrelationVector" = [ "Win32_System" ]; + "Win32_System_DataExchange" = [ "Win32_System" ]; + "Win32_System_DeploymentServices" = [ "Win32_System" ]; + "Win32_System_DesktopSharing" = [ "Win32_System" ]; + "Win32_System_DeveloperLicensing" = [ "Win32_System" ]; + "Win32_System_Diagnostics" = [ "Win32_System" ]; + "Win32_System_Diagnostics_Ceip" = [ "Win32_System_Diagnostics" ]; + "Win32_System_Diagnostics_ClrProfiling" = [ "Win32_System_Diagnostics" ]; + "Win32_System_Diagnostics_Debug" = [ "Win32_System_Diagnostics" ]; + "Win32_System_Diagnostics_Debug_ActiveScript" = [ "Win32_System_Diagnostics_Debug" ]; + "Win32_System_Diagnostics_Debug_Extensions" = [ "Win32_System_Diagnostics_Debug" ]; + "Win32_System_Diagnostics_Etw" = [ "Win32_System_Diagnostics" ]; + "Win32_System_Diagnostics_ProcessSnapshotting" = [ "Win32_System_Diagnostics" ]; + "Win32_System_Diagnostics_ToolHelp" = [ "Win32_System_Diagnostics" ]; + "Win32_System_DistributedTransactionCoordinator" = [ "Win32_System" ]; + "Win32_System_Environment" = [ "Win32_System" ]; + "Win32_System_ErrorReporting" = [ "Win32_System" ]; + "Win32_System_EventCollector" = [ "Win32_System" ]; + "Win32_System_EventLog" = [ "Win32_System" ]; + "Win32_System_EventNotificationService" = [ "Win32_System" ]; + "Win32_System_GroupPolicy" = [ "Win32_System" ]; + "Win32_System_HostCompute" = [ "Win32_System" ]; + "Win32_System_HostComputeNetwork" = [ "Win32_System" ]; + "Win32_System_HostComputeSystem" = [ "Win32_System" ]; + "Win32_System_Hypervisor" = [ "Win32_System" ]; + "Win32_System_IO" = [ "Win32_System" ]; + "Win32_System_Iis" = [ "Win32_System" ]; + "Win32_System_Ioctl" = [ "Win32_System" ]; + "Win32_System_JobObjects" = [ "Win32_System" ]; + "Win32_System_Js" = [ "Win32_System" ]; + "Win32_System_Kernel" = [ "Win32_System" ]; + "Win32_System_LibraryLoader" = [ "Win32_System" ]; + "Win32_System_Mailslots" = [ "Win32_System" ]; + "Win32_System_Mapi" = [ "Win32_System" ]; + "Win32_System_Memory" = [ "Win32_System" ]; + "Win32_System_Memory_NonVolatile" = [ "Win32_System_Memory" ]; + "Win32_System_MessageQueuing" = [ "Win32_System" ]; + "Win32_System_MixedReality" = [ "Win32_System" ]; + "Win32_System_Mmc" = [ "Win32_System" ]; + "Win32_System_Ole" = [ "Win32_System" ]; + "Win32_System_ParentalControls" = [ "Win32_System" ]; + "Win32_System_PasswordManagement" = [ "Win32_System" ]; + "Win32_System_Performance" = [ "Win32_System" ]; + "Win32_System_Performance_HardwareCounterProfiling" = [ "Win32_System_Performance" ]; + "Win32_System_Pipes" = [ "Win32_System" ]; + "Win32_System_Power" = [ "Win32_System" ]; + "Win32_System_ProcessStatus" = [ "Win32_System" ]; + "Win32_System_RealTimeCommunications" = [ "Win32_System" ]; + "Win32_System_Recovery" = [ "Win32_System" ]; + "Win32_System_Registry" = [ "Win32_System" ]; + "Win32_System_RemoteAssistance" = [ "Win32_System" ]; + "Win32_System_RemoteDesktop" = [ "Win32_System" ]; + "Win32_System_RemoteManagement" = [ "Win32_System" ]; + "Win32_System_RestartManager" = [ "Win32_System" ]; + "Win32_System_Restore" = [ "Win32_System" ]; + "Win32_System_Rpc" = [ "Win32_System" ]; + "Win32_System_Search" = [ "Win32_System" ]; + "Win32_System_Search_Common" = [ "Win32_System_Search" ]; + "Win32_System_SecurityCenter" = [ "Win32_System" ]; + "Win32_System_ServerBackup" = [ "Win32_System" ]; + "Win32_System_Services" = [ "Win32_System" ]; + "Win32_System_SettingsManagementInfrastructure" = [ "Win32_System" ]; + "Win32_System_SetupAndMigration" = [ "Win32_System" ]; + "Win32_System_Shutdown" = [ "Win32_System" ]; + "Win32_System_StationsAndDesktops" = [ "Win32_System" ]; + "Win32_System_SubsystemForLinux" = [ "Win32_System" ]; + "Win32_System_SystemInformation" = [ "Win32_System" ]; + "Win32_System_SystemServices" = [ "Win32_System" ]; + "Win32_System_TaskScheduler" = [ "Win32_System" ]; + "Win32_System_Threading" = [ "Win32_System" ]; + "Win32_System_Time" = [ "Win32_System" ]; + "Win32_System_TpmBaseServices" = [ "Win32_System" ]; + "Win32_System_UpdateAgent" = [ "Win32_System" ]; + "Win32_System_UpdateAssessment" = [ "Win32_System" ]; + "Win32_System_UserAccessLogging" = [ "Win32_System" ]; + "Win32_System_VirtualDosMachines" = [ "Win32_System" ]; + "Win32_System_WindowsProgramming" = [ "Win32_System" ]; + "Win32_System_WindowsSync" = [ "Win32_System" ]; + "Win32_System_Wmi" = [ "Win32_System" ]; + "Win32_UI" = [ "Win32" ]; + "Win32_UI_Accessibility" = [ "Win32_UI" ]; + "Win32_UI_Animation" = [ "Win32_UI" ]; + "Win32_UI_ColorSystem" = [ "Win32_UI" ]; + "Win32_UI_Controls" = [ "Win32_UI" ]; + "Win32_UI_Controls_Dialogs" = [ "Win32_UI_Controls" ]; + "Win32_UI_Controls_RichEdit" = [ "Win32_UI_Controls" ]; + "Win32_UI_HiDpi" = [ "Win32_UI" ]; + "Win32_UI_Input" = [ "Win32_UI" ]; + "Win32_UI_Input_Ime" = [ "Win32_UI_Input" ]; + "Win32_UI_Input_Ink" = [ "Win32_UI_Input" ]; + "Win32_UI_Input_KeyboardAndMouse" = [ "Win32_UI_Input" ]; + "Win32_UI_Input_Pointer" = [ "Win32_UI_Input" ]; + "Win32_UI_Input_Radial" = [ "Win32_UI_Input" ]; + "Win32_UI_Input_Touch" = [ "Win32_UI_Input" ]; + "Win32_UI_Input_XboxController" = [ "Win32_UI_Input" ]; + "Win32_UI_InteractionContext" = [ "Win32_UI" ]; + "Win32_UI_LegacyWindowsEnvironmentFeatures" = [ "Win32_UI" ]; + "Win32_UI_Magnification" = [ "Win32_UI" ]; + "Win32_UI_Notifications" = [ "Win32_UI" ]; + "Win32_UI_Ribbon" = [ "Win32_UI" ]; + "Win32_UI_Shell" = [ "Win32_UI" ]; + "Win32_UI_Shell_Common" = [ "Win32_UI_Shell" ]; + "Win32_UI_Shell_PropertiesSystem" = [ "Win32_UI_Shell" ]; + "Win32_UI_TabletPC" = [ "Win32_UI" ]; + "Win32_UI_TextServices" = [ "Win32_UI" ]; + "Win32_UI_WindowsAndMessaging" = [ "Win32_UI" ]; + "Win32_UI_Wpf" = [ "Win32_UI" ]; + "Win32_Web" = [ "Win32" ]; + "Win32_Web_InternetExplorer" = [ "Win32_Web" ]; + }; + resolvedDefaultFeatures = [ "Win32" "Win32_Foundation" "Win32_System" "Win32_System_Console" "default" ]; + }; + "windows-sys 0.52.0" = rec { + crateName = "windows-sys"; + version = "0.52.0"; + edition = "2021"; + sha256 = "0gd3v4ji88490zgb6b5mq5zgbvwv7zx1ibn8v3x83rwcdbryaar8"; + libName = "windows_sys"; + authors = [ + "Microsoft" + ]; + dependencies = [ + { + name = "windows-targets"; + packageId = "windows-targets 0.52.5"; + } + ]; + features = { + "Wdk_Foundation" = [ "Wdk" ]; + "Wdk_Graphics" = [ "Wdk" ]; + "Wdk_Graphics_Direct3D" = [ "Wdk_Graphics" ]; + "Wdk_Storage" = [ "Wdk" ]; + "Wdk_Storage_FileSystem" = [ "Wdk_Storage" ]; + "Wdk_Storage_FileSystem_Minifilters" = [ "Wdk_Storage_FileSystem" ]; + "Wdk_System" = [ "Wdk" ]; + "Wdk_System_IO" = [ "Wdk_System" ]; + "Wdk_System_OfflineRegistry" = [ "Wdk_System" ]; + "Wdk_System_Registry" = [ "Wdk_System" ]; + "Wdk_System_SystemInformation" = [ "Wdk_System" ]; + "Wdk_System_SystemServices" = [ "Wdk_System" ]; + "Wdk_System_Threading" = [ "Wdk_System" ]; + "Win32_Data" = [ "Win32" ]; + "Win32_Data_HtmlHelp" = [ "Win32_Data" ]; + "Win32_Data_RightsManagement" = [ "Win32_Data" ]; + "Win32_Devices" = [ "Win32" ]; + "Win32_Devices_AllJoyn" = [ "Win32_Devices" ]; + "Win32_Devices_BiometricFramework" = [ "Win32_Devices" ]; + "Win32_Devices_Bluetooth" = [ "Win32_Devices" ]; + "Win32_Devices_Communication" = [ "Win32_Devices" ]; + "Win32_Devices_DeviceAndDriverInstallation" = [ "Win32_Devices" ]; + "Win32_Devices_DeviceQuery" = [ "Win32_Devices" ]; + "Win32_Devices_Display" = [ "Win32_Devices" ]; + "Win32_Devices_Enumeration" = [ "Win32_Devices" ]; + "Win32_Devices_Enumeration_Pnp" = [ "Win32_Devices_Enumeration" ]; + "Win32_Devices_Fax" = [ "Win32_Devices" ]; + "Win32_Devices_HumanInterfaceDevice" = [ "Win32_Devices" ]; + "Win32_Devices_PortableDevices" = [ "Win32_Devices" ]; + "Win32_Devices_Properties" = [ "Win32_Devices" ]; + "Win32_Devices_Pwm" = [ "Win32_Devices" ]; + "Win32_Devices_Sensors" = [ "Win32_Devices" ]; + "Win32_Devices_SerialCommunication" = [ "Win32_Devices" ]; + "Win32_Devices_Tapi" = [ "Win32_Devices" ]; + "Win32_Devices_Usb" = [ "Win32_Devices" ]; + "Win32_Devices_WebServicesOnDevices" = [ "Win32_Devices" ]; + "Win32_Foundation" = [ "Win32" ]; + "Win32_Gaming" = [ "Win32" ]; + "Win32_Globalization" = [ "Win32" ]; + "Win32_Graphics" = [ "Win32" ]; + "Win32_Graphics_Dwm" = [ "Win32_Graphics" ]; + "Win32_Graphics_Gdi" = [ "Win32_Graphics" ]; + "Win32_Graphics_GdiPlus" = [ "Win32_Graphics" ]; + "Win32_Graphics_Hlsl" = [ "Win32_Graphics" ]; + "Win32_Graphics_OpenGL" = [ "Win32_Graphics" ]; + "Win32_Graphics_Printing" = [ "Win32_Graphics" ]; + "Win32_Graphics_Printing_PrintTicket" = [ "Win32_Graphics_Printing" ]; + "Win32_Management" = [ "Win32" ]; + "Win32_Management_MobileDeviceManagementRegistration" = [ "Win32_Management" ]; + "Win32_Media" = [ "Win32" ]; + "Win32_Media_Audio" = [ "Win32_Media" ]; + "Win32_Media_DxMediaObjects" = [ "Win32_Media" ]; + "Win32_Media_KernelStreaming" = [ "Win32_Media" ]; + "Win32_Media_Multimedia" = [ "Win32_Media" ]; + "Win32_Media_Streaming" = [ "Win32_Media" ]; + "Win32_Media_WindowsMediaFormat" = [ "Win32_Media" ]; + "Win32_NetworkManagement" = [ "Win32" ]; + "Win32_NetworkManagement_Dhcp" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_Dns" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_InternetConnectionWizard" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_IpHelper" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_Multicast" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_Ndis" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_NetBios" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_NetManagement" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_NetShell" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_NetworkDiagnosticsFramework" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_P2P" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_QoS" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_Rras" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_Snmp" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WNet" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WebDav" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WiFi" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WindowsConnectionManager" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WindowsFilteringPlatform" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WindowsFirewall" = [ "Win32_NetworkManagement" ]; + "Win32_NetworkManagement_WindowsNetworkVirtualization" = [ "Win32_NetworkManagement" ]; + "Win32_Networking" = [ "Win32" ]; + "Win32_Networking_ActiveDirectory" = [ "Win32_Networking" ]; + "Win32_Networking_Clustering" = [ "Win32_Networking" ]; + "Win32_Networking_HttpServer" = [ "Win32_Networking" ]; + "Win32_Networking_Ldap" = [ "Win32_Networking" ]; + "Win32_Networking_WebSocket" = [ "Win32_Networking" ]; + "Win32_Networking_WinHttp" = [ "Win32_Networking" ]; + "Win32_Networking_WinInet" = [ "Win32_Networking" ]; + "Win32_Networking_WinSock" = [ "Win32_Networking" ]; + "Win32_Networking_WindowsWebServices" = [ "Win32_Networking" ]; + "Win32_Security" = [ "Win32" ]; + "Win32_Security_AppLocker" = [ "Win32_Security" ]; + "Win32_Security_Authentication" = [ "Win32_Security" ]; + "Win32_Security_Authentication_Identity" = [ "Win32_Security_Authentication" ]; + "Win32_Security_Authorization" = [ "Win32_Security" ]; + "Win32_Security_Credentials" = [ "Win32_Security" ]; + "Win32_Security_Cryptography" = [ "Win32_Security" ]; + "Win32_Security_Cryptography_Catalog" = [ "Win32_Security_Cryptography" ]; + "Win32_Security_Cryptography_Certificates" = [ "Win32_Security_Cryptography" ]; + "Win32_Security_Cryptography_Sip" = [ "Win32_Security_Cryptography" ]; + "Win32_Security_Cryptography_UI" = [ "Win32_Security_Cryptography" ]; + "Win32_Security_DiagnosticDataQuery" = [ "Win32_Security" ]; + "Win32_Security_DirectoryServices" = [ "Win32_Security" ]; + "Win32_Security_EnterpriseData" = [ "Win32_Security" ]; + "Win32_Security_ExtensibleAuthenticationProtocol" = [ "Win32_Security" ]; + "Win32_Security_Isolation" = [ "Win32_Security" ]; + "Win32_Security_LicenseProtection" = [ "Win32_Security" ]; + "Win32_Security_NetworkAccessProtection" = [ "Win32_Security" ]; + "Win32_Security_WinTrust" = [ "Win32_Security" ]; + "Win32_Security_WinWlx" = [ "Win32_Security" ]; + "Win32_Storage" = [ "Win32" ]; + "Win32_Storage_Cabinets" = [ "Win32_Storage" ]; + "Win32_Storage_CloudFilters" = [ "Win32_Storage" ]; + "Win32_Storage_Compression" = [ "Win32_Storage" ]; + "Win32_Storage_DistributedFileSystem" = [ "Win32_Storage" ]; + "Win32_Storage_FileHistory" = [ "Win32_Storage" ]; + "Win32_Storage_FileSystem" = [ "Win32_Storage" ]; + "Win32_Storage_Imapi" = [ "Win32_Storage" ]; + "Win32_Storage_IndexServer" = [ "Win32_Storage" ]; + "Win32_Storage_InstallableFileSystems" = [ "Win32_Storage" ]; + "Win32_Storage_IscsiDisc" = [ "Win32_Storage" ]; + "Win32_Storage_Jet" = [ "Win32_Storage" ]; + "Win32_Storage_Nvme" = [ "Win32_Storage" ]; + "Win32_Storage_OfflineFiles" = [ "Win32_Storage" ]; + "Win32_Storage_OperationRecorder" = [ "Win32_Storage" ]; + "Win32_Storage_Packaging" = [ "Win32_Storage" ]; + "Win32_Storage_Packaging_Appx" = [ "Win32_Storage_Packaging" ]; + "Win32_Storage_ProjectedFileSystem" = [ "Win32_Storage" ]; + "Win32_Storage_StructuredStorage" = [ "Win32_Storage" ]; + "Win32_Storage_Vhd" = [ "Win32_Storage" ]; + "Win32_Storage_Xps" = [ "Win32_Storage" ]; + "Win32_System" = [ "Win32" ]; + "Win32_System_AddressBook" = [ "Win32_System" ]; + "Win32_System_Antimalware" = [ "Win32_System" ]; + "Win32_System_ApplicationInstallationAndServicing" = [ "Win32_System" ]; + "Win32_System_ApplicationVerifier" = [ "Win32_System" ]; + "Win32_System_ClrHosting" = [ "Win32_System" ]; + "Win32_System_Com" = [ "Win32_System" ]; + "Win32_System_Com_Marshal" = [ "Win32_System_Com" ]; + "Win32_System_Com_StructuredStorage" = [ "Win32_System_Com" ]; + "Win32_System_Com_Urlmon" = [ "Win32_System_Com" ]; + "Win32_System_ComponentServices" = [ "Win32_System" ]; + "Win32_System_Console" = [ "Win32_System" ]; + "Win32_System_CorrelationVector" = [ "Win32_System" ]; + "Win32_System_DataExchange" = [ "Win32_System" ]; + "Win32_System_DeploymentServices" = [ "Win32_System" ]; + "Win32_System_DeveloperLicensing" = [ "Win32_System" ]; + "Win32_System_Diagnostics" = [ "Win32_System" ]; + "Win32_System_Diagnostics_Ceip" = [ "Win32_System_Diagnostics" ]; + "Win32_System_Diagnostics_Debug" = [ "Win32_System_Diagnostics" ]; + "Win32_System_Diagnostics_Debug_Extensions" = [ "Win32_System_Diagnostics_Debug" ]; + "Win32_System_Diagnostics_Etw" = [ "Win32_System_Diagnostics" ]; + "Win32_System_Diagnostics_ProcessSnapshotting" = [ "Win32_System_Diagnostics" ]; + "Win32_System_Diagnostics_ToolHelp" = [ "Win32_System_Diagnostics" ]; + "Win32_System_DistributedTransactionCoordinator" = [ "Win32_System" ]; + "Win32_System_Environment" = [ "Win32_System" ]; + "Win32_System_ErrorReporting" = [ "Win32_System" ]; + "Win32_System_EventCollector" = [ "Win32_System" ]; + "Win32_System_EventLog" = [ "Win32_System" ]; + "Win32_System_EventNotificationService" = [ "Win32_System" ]; + "Win32_System_GroupPolicy" = [ "Win32_System" ]; + "Win32_System_HostCompute" = [ "Win32_System" ]; + "Win32_System_HostComputeNetwork" = [ "Win32_System" ]; + "Win32_System_HostComputeSystem" = [ "Win32_System" ]; + "Win32_System_Hypervisor" = [ "Win32_System" ]; + "Win32_System_IO" = [ "Win32_System" ]; + "Win32_System_Iis" = [ "Win32_System" ]; + "Win32_System_Ioctl" = [ "Win32_System" ]; + "Win32_System_JobObjects" = [ "Win32_System" ]; + "Win32_System_Js" = [ "Win32_System" ]; + "Win32_System_Kernel" = [ "Win32_System" ]; + "Win32_System_LibraryLoader" = [ "Win32_System" ]; + "Win32_System_Mailslots" = [ "Win32_System" ]; + "Win32_System_Mapi" = [ "Win32_System" ]; + "Win32_System_Memory" = [ "Win32_System" ]; + "Win32_System_Memory_NonVolatile" = [ "Win32_System_Memory" ]; + "Win32_System_MessageQueuing" = [ "Win32_System" ]; + "Win32_System_MixedReality" = [ "Win32_System" ]; + "Win32_System_Ole" = [ "Win32_System" ]; + "Win32_System_PasswordManagement" = [ "Win32_System" ]; + "Win32_System_Performance" = [ "Win32_System" ]; + "Win32_System_Performance_HardwareCounterProfiling" = [ "Win32_System_Performance" ]; + "Win32_System_Pipes" = [ "Win32_System" ]; + "Win32_System_Power" = [ "Win32_System" ]; + "Win32_System_ProcessStatus" = [ "Win32_System" ]; + "Win32_System_Recovery" = [ "Win32_System" ]; + "Win32_System_Registry" = [ "Win32_System" ]; + "Win32_System_RemoteDesktop" = [ "Win32_System" ]; + "Win32_System_RemoteManagement" = [ "Win32_System" ]; + "Win32_System_RestartManager" = [ "Win32_System" ]; + "Win32_System_Restore" = [ "Win32_System" ]; + "Win32_System_Rpc" = [ "Win32_System" ]; + "Win32_System_Search" = [ "Win32_System" ]; + "Win32_System_Search_Common" = [ "Win32_System_Search" ]; + "Win32_System_SecurityCenter" = [ "Win32_System" ]; + "Win32_System_Services" = [ "Win32_System" ]; + "Win32_System_SetupAndMigration" = [ "Win32_System" ]; + "Win32_System_Shutdown" = [ "Win32_System" ]; + "Win32_System_StationsAndDesktops" = [ "Win32_System" ]; + "Win32_System_SubsystemForLinux" = [ "Win32_System" ]; + "Win32_System_SystemInformation" = [ "Win32_System" ]; + "Win32_System_SystemServices" = [ "Win32_System" ]; + "Win32_System_Threading" = [ "Win32_System" ]; + "Win32_System_Time" = [ "Win32_System" ]; + "Win32_System_TpmBaseServices" = [ "Win32_System" ]; + "Win32_System_UserAccessLogging" = [ "Win32_System" ]; + "Win32_System_Variant" = [ "Win32_System" ]; + "Win32_System_VirtualDosMachines" = [ "Win32_System" ]; + "Win32_System_WindowsProgramming" = [ "Win32_System" ]; + "Win32_System_Wmi" = [ "Win32_System" ]; + "Win32_UI" = [ "Win32" ]; + "Win32_UI_Accessibility" = [ "Win32_UI" ]; + "Win32_UI_ColorSystem" = [ "Win32_UI" ]; + "Win32_UI_Controls" = [ "Win32_UI" ]; + "Win32_UI_Controls_Dialogs" = [ "Win32_UI_Controls" ]; + "Win32_UI_HiDpi" = [ "Win32_UI" ]; + "Win32_UI_Input" = [ "Win32_UI" ]; + "Win32_UI_Input_Ime" = [ "Win32_UI_Input" ]; + "Win32_UI_Input_KeyboardAndMouse" = [ "Win32_UI_Input" ]; + "Win32_UI_Input_Pointer" = [ "Win32_UI_Input" ]; + "Win32_UI_Input_Touch" = [ "Win32_UI_Input" ]; + "Win32_UI_Input_XboxController" = [ "Win32_UI_Input" ]; + "Win32_UI_InteractionContext" = [ "Win32_UI" ]; + "Win32_UI_Magnification" = [ "Win32_UI" ]; + "Win32_UI_Shell" = [ "Win32_UI" ]; + "Win32_UI_Shell_PropertiesSystem" = [ "Win32_UI_Shell" ]; + "Win32_UI_TabletPC" = [ "Win32_UI" ]; + "Win32_UI_TextServices" = [ "Win32_UI" ]; + "Win32_UI_WindowsAndMessaging" = [ "Win32_UI" ]; + "Win32_Web" = [ "Win32" ]; + "Win32_Web_InternetExplorer" = [ "Win32_Web" ]; + }; + resolvedDefaultFeatures = [ "Win32" "Win32_Foundation" "Win32_NetworkManagement" "Win32_NetworkManagement_IpHelper" "Win32_Networking" "Win32_Networking_WinSock" "Win32_Storage" "Win32_Storage_FileSystem" "Win32_System" "Win32_System_Console" "Win32_System_Diagnostics" "Win32_System_Diagnostics_Debug" "Win32_System_SystemInformation" "Win32_System_Threading" "default" ]; + }; + "windows-targets 0.48.5" = rec { + crateName = "windows-targets"; + version = "0.48.5"; + edition = "2018"; + sha256 = "034ljxqshifs1lan89xwpcy1hp0lhdh4b5n0d2z4fwjx2piacbws"; + libName = "windows_targets"; + authors = [ + "Microsoft" + ]; + dependencies = [ + { + name = "windows_aarch64_gnullvm"; + packageId = "windows_aarch64_gnullvm 0.48.5"; + target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "aarch64-pc-windows-gnullvm"); + } + { + name = "windows_aarch64_msvc"; + packageId = "windows_aarch64_msvc 0.48.5"; + target = { target, features }: (("aarch64" == target."arch" or null) && ("msvc" == target."env" or null) && (!(target."windows_raw_dylib" or false))); + } + { + name = "windows_i686_gnu"; + packageId = "windows_i686_gnu 0.48.5"; + target = { target, features }: (("x86" == target."arch" or null) && ("gnu" == target."env" or null) && (!(target."windows_raw_dylib" or false))); + } + { + name = "windows_i686_msvc"; + packageId = "windows_i686_msvc 0.48.5"; + target = { target, features }: (("x86" == target."arch" or null) && ("msvc" == target."env" or null) && (!(target."windows_raw_dylib" or false))); + } + { + name = "windows_x86_64_gnu"; + packageId = "windows_x86_64_gnu 0.48.5"; + target = { target, features }: (("x86_64" == target."arch" or null) && ("gnu" == target."env" or null) && (!("llvm" == target."abi" or null)) && (!(target."windows_raw_dylib" or false))); + } + { + name = "windows_x86_64_gnullvm"; + packageId = "windows_x86_64_gnullvm 0.48.5"; + target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "x86_64-pc-windows-gnullvm"); + } + { + name = "windows_x86_64_msvc"; + packageId = "windows_x86_64_msvc 0.48.5"; + target = { target, features }: (("x86_64" == target."arch" or null) && ("msvc" == target."env" or null) && (!(target."windows_raw_dylib" or false))); + } + ]; + + }; + "windows-targets 0.52.5" = rec { + crateName = "windows-targets"; + version = "0.52.5"; + edition = "2021"; + sha256 = "1sz7jrnkygmmlj1ia8fk85wbyil450kq5qkh5qh9sh2rcnj161vg"; + libName = "windows_targets"; + authors = [ + "Microsoft" + ]; + dependencies = [ + { + name = "windows_aarch64_gnullvm"; + packageId = "windows_aarch64_gnullvm 0.52.5"; + target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "aarch64-pc-windows-gnullvm"); + } + { + name = "windows_aarch64_msvc"; + packageId = "windows_aarch64_msvc 0.52.5"; + target = { target, features }: (("aarch64" == target."arch" or null) && ("msvc" == target."env" or null) && (!(target."windows_raw_dylib" or false))); + } + { + name = "windows_i686_gnu"; + packageId = "windows_i686_gnu 0.52.5"; + target = { target, features }: (("x86" == target."arch" or null) && ("gnu" == target."env" or null) && (!("llvm" == target."abi" or null)) && (!(target."windows_raw_dylib" or false))); + } + { + name = "windows_i686_gnullvm"; + packageId = "windows_i686_gnullvm"; + target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "i686-pc-windows-gnullvm"); + } + { + name = "windows_i686_msvc"; + packageId = "windows_i686_msvc 0.52.5"; + target = { target, features }: (("x86" == target."arch" or null) && ("msvc" == target."env" or null) && (!(target."windows_raw_dylib" or false))); + } + { + name = "windows_x86_64_gnu"; + packageId = "windows_x86_64_gnu 0.52.5"; + target = { target, features }: (("x86_64" == target."arch" or null) && ("gnu" == target."env" or null) && (!("llvm" == target."abi" or null)) && (!(target."windows_raw_dylib" or false))); + } + { + name = "windows_x86_64_gnullvm"; + packageId = "windows_x86_64_gnullvm 0.52.5"; + target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "x86_64-pc-windows-gnullvm"); + } + { + name = "windows_x86_64_msvc"; + packageId = "windows_x86_64_msvc 0.52.5"; + target = { target, features }: ((("x86_64" == target."arch" or null) || ("arm64ec" == target."arch" or null)) && ("msvc" == target."env" or null) && (!(target."windows_raw_dylib" or false))); + } + ]; + + }; + "windows_aarch64_gnullvm 0.48.5" = rec { + crateName = "windows_aarch64_gnullvm"; + version = "0.48.5"; + edition = "2018"; + sha256 = "1n05v7qblg1ci3i567inc7xrkmywczxrs1z3lj3rkkxw18py6f1b"; + authors = [ + "Microsoft" + ]; + + }; + "windows_aarch64_gnullvm 0.52.5" = rec { + crateName = "windows_aarch64_gnullvm"; + version = "0.52.5"; + edition = "2021"; + sha256 = "0qrjimbj67nnyn7zqy15mzzmqg0mn5gsr2yciqjxm3cb3vbyx23h"; + authors = [ + "Microsoft" + ]; + + }; + "windows_aarch64_msvc 0.48.5" = rec { + crateName = "windows_aarch64_msvc"; + version = "0.48.5"; + edition = "2018"; + sha256 = "1g5l4ry968p73g6bg6jgyvy9lb8fyhcs54067yzxpcpkf44k2dfw"; + authors = [ + "Microsoft" + ]; + + }; + "windows_aarch64_msvc 0.52.5" = rec { + crateName = "windows_aarch64_msvc"; + version = "0.52.5"; + edition = "2021"; + sha256 = "1dmga8kqlmln2ibckk6mxc9n59vdg8ziqa2zr8awcl720hazv1cr"; + authors = [ + "Microsoft" + ]; + + }; + "windows_i686_gnu 0.48.5" = rec { + crateName = "windows_i686_gnu"; + version = "0.48.5"; + edition = "2018"; + sha256 = "0gklnglwd9ilqx7ac3cn8hbhkraqisd0n83jxzf9837nvvkiand7"; + authors = [ + "Microsoft" + ]; + + }; + "windows_i686_gnu 0.52.5" = rec { + crateName = "windows_i686_gnu"; + version = "0.52.5"; + edition = "2021"; + sha256 = "0w4np3l6qwlra9s2xpflqrs60qk1pz6ahhn91rr74lvdy4y0gfl8"; + authors = [ + "Microsoft" + ]; + + }; + "windows_i686_gnullvm" = rec { + crateName = "windows_i686_gnullvm"; + version = "0.52.5"; + edition = "2021"; + sha256 = "1s9f4gff0cixd86mw3n63rpmsm4pmr4ffndl6s7qa2h35492dx47"; + authors = [ + "Microsoft" + ]; + + }; + "windows_i686_msvc 0.48.5" = rec { + crateName = "windows_i686_msvc"; + version = "0.48.5"; + edition = "2018"; + sha256 = "01m4rik437dl9rdf0ndnm2syh10hizvq0dajdkv2fjqcywrw4mcg"; + authors = [ + "Microsoft" + ]; + + }; + "windows_i686_msvc 0.52.5" = rec { + crateName = "windows_i686_msvc"; + version = "0.52.5"; + edition = "2021"; + sha256 = "1gw7fklxywgpnwbwg43alb4hm0qjmx72hqrlwy5nanrxs7rjng6v"; + authors = [ + "Microsoft" + ]; + + }; + "windows_x86_64_gnu 0.48.5" = rec { + crateName = "windows_x86_64_gnu"; + version = "0.48.5"; + edition = "2018"; + sha256 = "13kiqqcvz2vnyxzydjh73hwgigsdr2z1xpzx313kxll34nyhmm2k"; + authors = [ + "Microsoft" + ]; + + }; + "windows_x86_64_gnu 0.52.5" = rec { + crateName = "windows_x86_64_gnu"; + version = "0.52.5"; + edition = "2021"; + sha256 = "1n8p2mcf3lw6300k77a0knksssmgwb9hynl793mhkzyydgvlchjf"; + authors = [ + "Microsoft" + ]; + + }; + "windows_x86_64_gnullvm 0.48.5" = rec { + crateName = "windows_x86_64_gnullvm"; + version = "0.48.5"; + edition = "2018"; + sha256 = "1k24810wfbgz8k48c2yknqjmiigmql6kk3knmddkv8k8g1v54yqb"; + authors = [ + "Microsoft" + ]; + + }; + "windows_x86_64_gnullvm 0.52.5" = rec { + crateName = "windows_x86_64_gnullvm"; + version = "0.52.5"; + edition = "2021"; + sha256 = "15n56jrh4s5bz66zimavr1rmcaw6wa306myrvmbc6rydhbj9h8l5"; + authors = [ + "Microsoft" + ]; + + }; + "windows_x86_64_msvc 0.48.5" = rec { + crateName = "windows_x86_64_msvc"; + version = "0.48.5"; + edition = "2018"; + sha256 = "0f4mdp895kkjh9zv8dxvn4pc10xr7839lf5pa9l0193i2pkgr57d"; + authors = [ + "Microsoft" + ]; + + }; + "windows_x86_64_msvc 0.52.5" = rec { + crateName = "windows_x86_64_msvc"; + version = "0.52.5"; + edition = "2021"; + sha256 = "1w1bn24ap8dp9i85s8mlg8cim2bl2368bd6qyvm0xzqvzmdpxi5y"; + authors = [ + "Microsoft" + ]; + + }; + "yansi" = rec { + crateName = "yansi"; + version = "1.0.1"; + edition = "2021"; + sha256 = "0jdh55jyv0dpd38ij4qh60zglbw9aa8wafqai6m0wa7xaxk3mrfg"; + authors = [ + "Sergio Benitez " + ]; + features = { + "default" = [ "std" ]; + "detect-env" = [ "std" ]; + "detect-tty" = [ "is-terminal" "std" ]; + "hyperlink" = [ "std" ]; + "is-terminal" = [ "dep:is-terminal" ]; + "std" = [ "alloc" ]; + }; + resolvedDefaultFeatures = [ "alloc" "default" "std" ]; + }; + "zerocopy" = rec { + crateName = "zerocopy"; + version = "0.7.34"; + edition = "2018"; + sha256 = "11xhrwixm78m6ca1jdxf584wdwvpgg7q00vg21fhwl0psvyf71xf"; + authors = [ + "Joshua Liebow-Feeser " + ]; + dependencies = [ + { + name = "zerocopy-derive"; + packageId = "zerocopy-derive"; + optional = true; + } + { + name = "zerocopy-derive"; + packageId = "zerocopy-derive"; + target = { target, features }: false; + } + ]; + devDependencies = [ + { + name = "zerocopy-derive"; + packageId = "zerocopy-derive"; + } + ]; + features = { + "__internal_use_only_features_that_work_on_stable" = [ "alloc" "derive" "simd" ]; + "byteorder" = [ "dep:byteorder" ]; + "default" = [ "byteorder" ]; + "derive" = [ "zerocopy-derive" ]; + "simd-nightly" = [ "simd" ]; + "zerocopy-derive" = [ "dep:zerocopy-derive" ]; + }; + resolvedDefaultFeatures = [ "simd" ]; + }; + "zerocopy-derive" = rec { + crateName = "zerocopy-derive"; + version = "0.7.34"; + edition = "2018"; + sha256 = "0fqvglw01w3hp7xj9gdk1800x9j7v58s9w8ijiyiz2a7krb39s8m"; + procMacro = true; + libName = "zerocopy_derive"; + authors = [ + "Joshua Liebow-Feeser " + ]; + dependencies = [ + { + name = "proc-macro2"; + packageId = "proc-macro2"; + } + { + name = "quote"; + packageId = "quote"; + } + { + name = "syn"; + packageId = "syn 2.0.66"; + } + ]; + + }; + "zip" = rec { + crateName = "zip"; + version = "0.6.6"; + edition = "2021"; + sha256 = "0qcjbqfvbwxi5g9wbymf2r05cvziic2qqj4xy64q3hp48vi980vn"; + authors = [ + "Mathijs van de Nes " + "Marli Frost " + "Ryan Levick " + ]; + dependencies = [ + { + name = "byteorder"; + packageId = "byteorder 1.5.0"; + } + { + name = "crc32fast"; + packageId = "crc32fast"; + } + { + name = "crossbeam-utils"; + packageId = "crossbeam-utils"; + target = { target, features }: ((("arm" == target."arch" or null) && ("32" == target."pointer_width" or null)) || ("mips" == target."arch" or null) || ("powerpc" == target."arch" or null)); + } + { + name = "flate2"; + packageId = "flate2"; + optional = true; + usesDefaultFeatures = false; + } + ]; + features = { + "aes" = [ "dep:aes" ]; + "aes-crypto" = [ "aes" "constant_time_eq" "hmac" "pbkdf2" "sha1" ]; + "bzip2" = [ "dep:bzip2" ]; + "constant_time_eq" = [ "dep:constant_time_eq" ]; + "default" = [ "aes-crypto" "bzip2" "deflate" "time" "zstd" ]; + "deflate" = [ "flate2/rust_backend" ]; + "deflate-miniz" = [ "flate2/default" ]; + "deflate-zlib" = [ "flate2/zlib" ]; + "flate2" = [ "dep:flate2" ]; + "hmac" = [ "dep:hmac" ]; + "pbkdf2" = [ "dep:pbkdf2" ]; + "sha1" = [ "dep:sha1" ]; + "time" = [ "dep:time" ]; + "zstd" = [ "dep:zstd" ]; + }; + resolvedDefaultFeatures = [ "deflate" "flate2" ]; + }; + }; + + # +# crate2nix/default.nix (excerpt start) +# + + /* Target (platform) data for conditional dependencies. + This corresponds roughly to what buildRustCrate is setting. + */ + makeDefaultTarget = platform: { + unix = platform.isUnix; + windows = platform.isWindows; + fuchsia = true; + test = false; + + /* We are choosing an arbitrary rust version to grab `lib` from, + which is unfortunate, but `lib` has been version-agnostic the + whole time so this is good enough for now. + */ + os = pkgs.rust.lib.toTargetOs platform; + arch = pkgs.rust.lib.toTargetArch platform; + family = pkgs.rust.lib.toTargetFamily platform; + vendor = pkgs.rust.lib.toTargetVendor platform; + env = "gnu"; + endian = + if platform.parsed.cpu.significantByte.name == "littleEndian" + then "little" else "big"; + pointer_width = toString platform.parsed.cpu.bits; + debug_assertions = false; + }; + + /* Filters common temp files and build files. */ + # TODO(pkolloch): Substitute with gitignore filter + sourceFilter = name: type: + let + baseName = builtins.baseNameOf (builtins.toString name); + in + ! ( + # Filter out git + baseName == ".gitignore" + || (type == "directory" && baseName == ".git") + + # Filter out build results + || ( + type == "directory" && ( + baseName == "target" + || baseName == "_site" + || baseName == ".sass-cache" + || baseName == ".jekyll-metadata" + || baseName == "build-artifacts" + ) + ) + + # Filter out nix-build result symlinks + || ( + type == "symlink" && lib.hasPrefix "result" baseName + ) + + # Filter out IDE config + || ( + type == "directory" && ( + baseName == ".idea" || baseName == ".vscode" + ) + ) || lib.hasSuffix ".iml" baseName + + # Filter out nix build files + || baseName == "Cargo.nix" + + # Filter out editor backup / swap files. + || lib.hasSuffix "~" baseName + || builtins.match "^\\.sw[a-z]$$" baseName != null + || builtins.match "^\\..*\\.sw[a-z]$$" baseName != null + || lib.hasSuffix ".tmp" baseName + || lib.hasSuffix ".bak" baseName + || baseName == "tests.nix" + ); + + /* Returns a crate which depends on successful test execution + of crate given as the second argument. + + testCrateFlags: list of flags to pass to the test exectuable + testInputs: list of packages that should be available during test execution + */ + crateWithTest = { crate, testCrate, testCrateFlags, testInputs, testPreRun, testPostRun }: + assert builtins.typeOf testCrateFlags == "list"; + assert builtins.typeOf testInputs == "list"; + assert builtins.typeOf testPreRun == "string"; + assert builtins.typeOf testPostRun == "string"; + let + # override the `crate` so that it will build and execute tests instead of + # building the actual lib and bin targets We just have to pass `--test` + # to rustc and it will do the right thing. We execute the tests and copy + # their log and the test executables to $out for later inspection. + test = + let + drv = testCrate.override + ( + _: { + buildTests = true; + } + ); + # If the user hasn't set any pre/post commands, we don't want to + # insert empty lines. This means that any existing users of crate2nix + # don't get a spurious rebuild unless they set these explicitly. + testCommand = pkgs.lib.concatStringsSep "\n" + (pkgs.lib.filter (s: s != "") [ + testPreRun + "$f $testCrateFlags 2>&1 | tee -a $out" + testPostRun + ]); + in + pkgs.runCommand "run-tests-${testCrate.name}" + { + inherit testCrateFlags; + buildInputs = testInputs; + } '' + set -e + + export RUST_BACKTRACE=1 + + # recreate a file hierarchy as when running tests with cargo + + # the source for test data + # It's necessary to locate the source in $NIX_BUILD_TOP/source/ + # instead of $NIX_BUILD_TOP/ + # because we compiled those test binaries in the former and not the latter. + # So all paths will expect source tree to be there and not in the build top directly. + # For example: $NIX_BUILD_TOP := /build in general, if you ask yourself. + # NOTE: There could be edge cases if `crate.sourceRoot` does exist but + # it's very hard to reason about them. + # Open a bug if you run into this! + mkdir -p source/ + cd source/ + + ${pkgs.buildPackages.xorg.lndir}/bin/lndir ${crate.src} + + # build outputs + testRoot=target/debug + mkdir -p $testRoot + + # executables of the crate + # we copy to prevent std::env::current_exe() to resolve to a store location + for i in ${crate}/bin/*; do + cp "$i" "$testRoot" + done + chmod +w -R . + + # test harness executables are suffixed with a hash, like cargo does + # this allows to prevent name collision with the main + # executables of the crate + hash=$(basename $out) + for file in ${drv}/tests/*; do + f=$testRoot/$(basename $file)-$hash + cp $file $f + ${testCommand} + done + ''; + in + pkgs.runCommand "${crate.name}-linked" + { + inherit (crate) outputs crateName; + passthru = (crate.passthru or { }) // { + inherit test; + }; + } + (lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) '' + echo tested by ${test} + '' + '' + ${lib.concatMapStringsSep "\n" (output: "ln -s ${crate.${output}} ${"$"}${output}") crate.outputs} + ''); + + /* A restricted overridable version of builtRustCratesWithFeatures. */ + buildRustCrateWithFeatures = + { packageId + , features ? rootFeatures + , crateOverrides ? defaultCrateOverrides + , buildRustCrateForPkgsFunc ? null + , runTests ? false + , testCrateFlags ? [ ] + , testInputs ? [ ] + # Any command to run immediatelly before a test is executed. + , testPreRun ? "" + # Any command run immediatelly after a test is executed. + , testPostRun ? "" + }: + lib.makeOverridable + ( + { features + , crateOverrides + , runTests + , testCrateFlags + , testInputs + , testPreRun + , testPostRun + }: + let + buildRustCrateForPkgsFuncOverriden = + if buildRustCrateForPkgsFunc != null + then buildRustCrateForPkgsFunc + else + ( + if crateOverrides == pkgs.defaultCrateOverrides + then buildRustCrateForPkgs + else + pkgs: (buildRustCrateForPkgs pkgs).override { + defaultCrateOverrides = crateOverrides; + } + ); + builtRustCrates = builtRustCratesWithFeatures { + inherit packageId features; + buildRustCrateForPkgsFunc = buildRustCrateForPkgsFuncOverriden; + runTests = false; + }; + builtTestRustCrates = builtRustCratesWithFeatures { + inherit packageId features; + buildRustCrateForPkgsFunc = buildRustCrateForPkgsFuncOverriden; + runTests = true; + }; + drv = builtRustCrates.crates.${packageId}; + testDrv = builtTestRustCrates.crates.${packageId}; + derivation = + if runTests then + crateWithTest + { + crate = drv; + testCrate = testDrv; + inherit testCrateFlags testInputs testPreRun testPostRun; + } + else drv; + in + derivation + ) + { inherit features crateOverrides runTests testCrateFlags testInputs testPreRun testPostRun; }; + + /* Returns an attr set with packageId mapped to the result of buildRustCrateForPkgsFunc + for the corresponding crate. + */ + builtRustCratesWithFeatures = + { packageId + , features + , crateConfigs ? crates + , buildRustCrateForPkgsFunc + , runTests + , makeTarget ? makeDefaultTarget + } @ args: + assert (builtins.isAttrs crateConfigs); + assert (builtins.isString packageId); + assert (builtins.isList features); + assert (builtins.isAttrs (makeTarget stdenv.hostPlatform)); + assert (builtins.isBool runTests); + let + rootPackageId = packageId; + mergedFeatures = mergePackageFeatures + ( + args // { + inherit rootPackageId; + target = makeTarget stdenv.hostPlatform // { test = runTests; }; + } + ); + # Memoize built packages so that reappearing packages are only built once. + builtByPackageIdByPkgs = mkBuiltByPackageIdByPkgs pkgs; + mkBuiltByPackageIdByPkgs = pkgs: + let + self = { + crates = lib.mapAttrs (packageId: value: buildByPackageIdForPkgsImpl self pkgs packageId) crateConfigs; + target = makeTarget pkgs.stdenv.hostPlatform; + build = mkBuiltByPackageIdByPkgs pkgs.buildPackages; + }; + in + self; + buildByPackageIdForPkgsImpl = self: pkgs: packageId: + let + features = mergedFeatures."${packageId}" or [ ]; + crateConfig' = crateConfigs."${packageId}"; + crateConfig = + builtins.removeAttrs crateConfig' [ "resolvedDefaultFeatures" "devDependencies" ]; + devDependencies = + lib.optionals + (runTests && packageId == rootPackageId) + (crateConfig'.devDependencies or [ ]); + dependencies = + dependencyDerivations { + inherit features; + inherit (self) target; + buildByPackageId = depPackageId: + # proc_macro crates must be compiled for the build architecture + if crateConfigs.${depPackageId}.procMacro or false + then self.build.crates.${depPackageId} + else self.crates.${depPackageId}; + dependencies = + (crateConfig.dependencies or [ ]) + ++ devDependencies; + }; + buildDependencies = + dependencyDerivations { + inherit features; + inherit (self.build) target; + buildByPackageId = depPackageId: + self.build.crates.${depPackageId}; + dependencies = crateConfig.buildDependencies or [ ]; + }; + dependenciesWithRenames = + let + buildDeps = filterEnabledDependencies { + inherit features; + inherit (self) target; + dependencies = crateConfig.dependencies or [ ] ++ devDependencies; + }; + hostDeps = filterEnabledDependencies { + inherit features; + inherit (self.build) target; + dependencies = crateConfig.buildDependencies or [ ]; + }; + in + lib.filter (d: d ? "rename") (hostDeps ++ buildDeps); + # Crate renames have the form: + # + # { + # crate_name = [ + # { version = "1.2.3"; rename = "crate_name01"; } + # ]; + # # ... + # } + crateRenames = + let + grouped = + lib.groupBy + (dependency: dependency.name) + dependenciesWithRenames; + versionAndRename = dep: + let + package = crateConfigs."${dep.packageId}"; + in + { inherit (dep) rename; inherit (package) version; }; + in + lib.mapAttrs (name: builtins.map versionAndRename) grouped; + in + buildRustCrateForPkgsFunc pkgs + ( + crateConfig // { + # https://github.com/NixOS/nixpkgs/issues/218712 + dontStrip = stdenv.hostPlatform.isDarwin; + src = crateConfig.src or ( + pkgs.fetchurl rec { + name = "${crateConfig.crateName}-${crateConfig.version}.tar.gz"; + # https://www.pietroalbini.org/blog/downloading-crates-io/ + # Not rate-limited, CDN URL. + url = "https://static.crates.io/crates/${crateConfig.crateName}/${crateConfig.crateName}-${crateConfig.version}.crate"; + sha256 = + assert (lib.assertMsg (crateConfig ? sha256) "Missing sha256 for ${name}"); + crateConfig.sha256; + } + ); + extraRustcOpts = lib.lists.optional (targetFeatures != [ ]) "-C target-feature=${lib.concatMapStringsSep "," (x: "+${x}") targetFeatures}"; + inherit features dependencies buildDependencies crateRenames release; + } + ); + in + builtByPackageIdByPkgs; + + /* Returns the actual derivations for the given dependencies. */ + dependencyDerivations = + { buildByPackageId + , features + , dependencies + , target + }: + assert (builtins.isList features); + assert (builtins.isList dependencies); + assert (builtins.isAttrs target); + let + enabledDependencies = filterEnabledDependencies { + inherit dependencies features target; + }; + depDerivation = dependency: buildByPackageId dependency.packageId; + in + map depDerivation enabledDependencies; + + /* Returns a sanitized version of val with all values substituted that cannot + be serialized as JSON. + */ + sanitizeForJson = val: + if builtins.isAttrs val + then lib.mapAttrs (n: sanitizeForJson) val + else if builtins.isList val + then builtins.map sanitizeForJson val + else if builtins.isFunction val + then "function" + else val; + + /* Returns various tools to debug a crate. */ + debugCrate = { packageId, target ? makeDefaultTarget stdenv.hostPlatform }: + assert (builtins.isString packageId); + let + debug = rec { + # The built tree as passed to buildRustCrate. + buildTree = buildRustCrateWithFeatures { + buildRustCrateForPkgsFunc = _: lib.id; + inherit packageId; + }; + sanitizedBuildTree = sanitizeForJson buildTree; + dependencyTree = sanitizeForJson + ( + buildRustCrateWithFeatures { + buildRustCrateForPkgsFunc = _: crate: { + "01_crateName" = crate.crateName or false; + "02_features" = crate.features or [ ]; + "03_dependencies" = crate.dependencies or [ ]; + }; + inherit packageId; + } + ); + mergedPackageFeatures = mergePackageFeatures { + features = rootFeatures; + inherit packageId target; + }; + diffedDefaultPackageFeatures = diffDefaultPackageFeatures { + inherit packageId target; + }; + }; + in + { internal = debug; }; + + /* Returns differences between cargo default features and crate2nix default + features. + + This is useful for verifying the feature resolution in crate2nix. + */ + diffDefaultPackageFeatures = + { crateConfigs ? crates + , packageId + , target + }: + assert (builtins.isAttrs crateConfigs); + let + prefixValues = prefix: lib.mapAttrs (n: v: { "${prefix}" = v; }); + mergedFeatures = + prefixValues + "crate2nix" + (mergePackageFeatures { inherit crateConfigs packageId target; features = [ "default" ]; }); + configs = prefixValues "cargo" crateConfigs; + combined = lib.foldAttrs (a: b: a // b) { } [ mergedFeatures configs ]; + onlyInCargo = + builtins.attrNames + (lib.filterAttrs (n: v: !(v ? "crate2nix") && (v ? "cargo")) combined); + onlyInCrate2Nix = + builtins.attrNames + (lib.filterAttrs (n: v: (v ? "crate2nix") && !(v ? "cargo")) combined); + differentFeatures = lib.filterAttrs + ( + n: v: + (v ? "crate2nix") + && (v ? "cargo") + && (v.crate2nix.features or [ ]) != (v."cargo".resolved_default_features or [ ]) + ) + combined; + in + builtins.toJSON { + inherit onlyInCargo onlyInCrate2Nix differentFeatures; + }; + + /* Returns an attrset mapping packageId to the list of enabled features. + + If multiple paths to a dependency enable different features, the + corresponding feature sets are merged. Features in rust are additive. + */ + mergePackageFeatures = + { crateConfigs ? crates + , packageId + , rootPackageId ? packageId + , features ? rootFeatures + , dependencyPath ? [ crates.${packageId}.crateName ] + , featuresByPackageId ? { } + , target + # Adds devDependencies to the crate with rootPackageId. + , runTests ? false + , ... + } @ args: + assert (builtins.isAttrs crateConfigs); + assert (builtins.isString packageId); + assert (builtins.isString rootPackageId); + assert (builtins.isList features); + assert (builtins.isList dependencyPath); + assert (builtins.isAttrs featuresByPackageId); + assert (builtins.isAttrs target); + assert (builtins.isBool runTests); + let + crateConfig = crateConfigs."${packageId}" or (builtins.throw "Package not found: ${packageId}"); + expandedFeatures = expandFeatures (crateConfig.features or { }) features; + enabledFeatures = enableFeatures (crateConfig.dependencies or [ ]) expandedFeatures; + depWithResolvedFeatures = dependency: + let + inherit (dependency) packageId; + features = dependencyFeatures enabledFeatures dependency; + in + { inherit packageId features; }; + resolveDependencies = cache: path: dependencies: + assert (builtins.isAttrs cache); + assert (builtins.isList dependencies); + let + enabledDependencies = filterEnabledDependencies { + inherit dependencies target; + features = enabledFeatures; + }; + directDependencies = map depWithResolvedFeatures enabledDependencies; + foldOverCache = op: lib.foldl op cache directDependencies; + in + foldOverCache + ( + cache: { packageId, features }: + let + cacheFeatures = cache.${packageId} or [ ]; + combinedFeatures = sortedUnique (cacheFeatures ++ features); + in + if cache ? ${packageId} && cache.${packageId} == combinedFeatures + then cache + else + mergePackageFeatures { + features = combinedFeatures; + featuresByPackageId = cache; + inherit crateConfigs packageId target runTests rootPackageId; + } + ); + cacheWithSelf = + let + cacheFeatures = featuresByPackageId.${packageId} or [ ]; + combinedFeatures = sortedUnique (cacheFeatures ++ enabledFeatures); + in + featuresByPackageId // { + "${packageId}" = combinedFeatures; + }; + cacheWithDependencies = + resolveDependencies cacheWithSelf "dep" + ( + crateConfig.dependencies or [ ] + ++ lib.optionals + (runTests && packageId == rootPackageId) + (crateConfig.devDependencies or [ ]) + ); + cacheWithAll = + resolveDependencies + cacheWithDependencies "build" + (crateConfig.buildDependencies or [ ]); + in + cacheWithAll; + + /* Returns the enabled dependencies given the enabled features. */ + filterEnabledDependencies = { dependencies, features, target }: + assert (builtins.isList dependencies); + assert (builtins.isList features); + assert (builtins.isAttrs target); + + lib.filter + ( + dep: + let + targetFunc = dep.target or (features: true); + in + targetFunc { inherit features target; } + && ( + !(dep.optional or false) + || builtins.any (doesFeatureEnableDependency dep) features + ) + ) + dependencies; + + /* Returns whether the given feature should enable the given dependency. */ + doesFeatureEnableDependency = dependency: feature: + let + name = dependency.rename or dependency.name; + prefix = "${name}/"; + len = builtins.stringLength prefix; + startsWithPrefix = builtins.substring 0 len feature == prefix; + in + feature == name || feature == "dep:" + name || startsWithPrefix; + + /* Returns the expanded features for the given inputFeatures by applying the + rules in featureMap. + + featureMap is an attribute set which maps feature names to lists of further + feature names to enable in case this feature is selected. + */ + expandFeatures = featureMap: inputFeatures: + assert (builtins.isAttrs featureMap); + assert (builtins.isList inputFeatures); + let + expandFeaturesNoCycle = oldSeen: inputFeatures: + if inputFeatures != [ ] + then + let + # The feature we're currently expanding. + feature = builtins.head inputFeatures; + # All the features we've seen/expanded so far, including the one + # we're currently processing. + seen = oldSeen // { ${feature} = 1; }; + # Expand the feature but be careful to not re-introduce a feature + # that we've already seen: this can easily cause a cycle, see issue + # #209. + enables = builtins.filter (f: !(seen ? "${f}")) (featureMap."${feature}" or [ ]); + in + [ feature ] ++ (expandFeaturesNoCycle seen (builtins.tail inputFeatures ++ enables)) + # No more features left, nothing to expand to. + else [ ]; + outFeatures = expandFeaturesNoCycle { } inputFeatures; + in + sortedUnique outFeatures; + + /* This function adds optional dependencies as features if they are enabled + indirectly by dependency features. This function mimics Cargo's behavior + described in a note at: + https://doc.rust-lang.org/nightly/cargo/reference/features.html#dependency-features + */ + enableFeatures = dependencies: features: + assert (builtins.isList features); + assert (builtins.isList dependencies); + let + additionalFeatures = lib.concatMap + ( + dependency: + assert (builtins.isAttrs dependency); + let + enabled = builtins.any (doesFeatureEnableDependency dependency) features; + in + if (dependency.optional or false) && enabled + then [ (dependency.rename or dependency.name) ] + else [ ] + ) + dependencies; + in + sortedUnique (features ++ additionalFeatures); + + /* + Returns the actual features for the given dependency. + + features: The features of the crate that refers this dependency. + */ + dependencyFeatures = features: dependency: + assert (builtins.isList features); + assert (builtins.isAttrs dependency); + let + defaultOrNil = + if dependency.usesDefaultFeatures or true + then [ "default" ] + else [ ]; + explicitFeatures = dependency.features or [ ]; + additionalDependencyFeatures = + let + name = dependency.rename or dependency.name; + stripPrefixMatch = prefix: s: + if lib.hasPrefix prefix s + then lib.removePrefix prefix s + else null; + extractFeature = feature: lib.findFirst + (f: f != null) + null + (map (prefix: stripPrefixMatch prefix feature) [ + (name + "/") + (name + "?/") + ]); + dependencyFeatures = lib.filter (f: f != null) (map extractFeature features); + in + dependencyFeatures; + in + defaultOrNil ++ explicitFeatures ++ additionalDependencyFeatures; + + /* Sorts and removes duplicates from a list of strings. */ + sortedUnique = features: + assert (builtins.isList features); + assert (builtins.all builtins.isString features); + let + outFeaturesSet = lib.foldl (set: feature: set // { "${feature}" = 1; }) { } features; + outFeaturesUnique = builtins.attrNames outFeaturesSet; + in + builtins.sort (a: b: a < b) outFeaturesUnique; + + deprecationWarning = message: value: + if strictDeprecation + then builtins.throw "strictDeprecation enabled, aborting: ${message}" + else builtins.trace message value; + + # + # crate2nix/default.nix (excerpt end) + # + }; +} + diff --git a/build_dependencies.nix b/build_dependencies.nix new file mode 100644 index 0000000..9f8f67e --- /dev/null +++ b/build_dependencies.nix @@ -0,0 +1,27 @@ +{ pkgs }: +let + rust-overlay = import (builtins.fetchTarball "https://github.com/oxalica/rust-overlay/archive/stable.tar.gz"); + pkgs = import { overlays = [ rust-overlay ]; }; + rust = pkgs.rust-bin.stable.latest.default.override { + extensions = [ + "rust-src" + "rust-analyzer" + "rustfmt" + "clippy" + ]; + targets = [ + "x86_64-unknown-linux-gnu" + ]; + }; + rust_platform = pkgs.makeRustPlatform { + cargo = rust; + rustc = rust; + }; +in +[ + rust + rust_platform.bindgenHook + pkgs.crate2nix + pkgs.openssl + pkgs.pkg-config +] diff --git a/crate-hashes.json b/crate-hashes.json new file mode 100644 index 0000000..8399f77 --- /dev/null +++ b/crate-hashes.json @@ -0,0 +1,7 @@ +{ + "git+https://github.com/IamTheCarl/imstr#0.2.0": "0csqvjlgi1wvrfhidy0khivwx5p3h0rhwzz5r5zsx0zzwn7qpn2d", + "git+https://github.com/hannobraun/fornjot.git#fj-core@0.49.0": "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d", + "git+https://github.com/hannobraun/fornjot.git#fj-export@0.49.0": "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d", + "git+https://github.com/hannobraun/fornjot.git#fj-interop@0.49.0": "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d", + "git+https://github.com/hannobraun/fornjot.git#fj-math@0.49.0": "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d" +} \ No newline at end of file diff --git a/default.nix b/default.nix index 86d234d..53f4200 100644 --- a/default.nix +++ b/default.nix @@ -1,13 +1,10 @@ -# `nixpkgs` by default if no argument is passed to it. -{ pkgs ? import {} }: - -# This avoids typing `pkgs.` before each package name. -with pkgs; - -# Defines a shell. -mkShell { - # Sets the build inputs, i.e. what will be available in our - # local environment. - buildInputs = [ rustup pkg-config openssl_3_1 ]; -} - +{ pkgs ? import { } }: +let + addDeps = list: { ... }: { + nativeBuildInputs = list ++ (import ./build_dependencies.nix { + pkgs = pkgs; + }); + }; + cargo_nix = pkgs.callPackage ./Cargo.nix { }; +in +cargo_nix.workspaceMembers."command_cad".build.overrideAttrs { } diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..bde131e --- /dev/null +++ b/shell.nix @@ -0,0 +1,11 @@ +{ pkgs ? import { } }: +pkgs.mkShell { + buildInputs = (import ./build_dependencies.nix { + pkgs = pkgs; + }); + + # Set environment variables + shellHook = '' + export OPENSSL_NO_VENDOR=1 + ''; +} From 1fb96d26fca156b300b6c287965e275662aa78e7 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 17 Nov 2024 14:47:37 -0500 Subject: [PATCH 002/106] Implement tree-sitter parser --- Cargo.lock | 398 +- Cargo.toml | 2 +- build_dependencies.nix | 16 + crates/formatter/Cargo.toml | 10 + crates/formatter/src/arguments.rs | 15 + crates/formatter/src/main.rs | 33 + crates/formatter/test_files/empty_closure.ccm | 2 + .../.editorconfig | 46 + .../.gitattributes | 37 + .../tree-sitter-command-cad-model/.gitignore | 40 + .../CMakeLists.txt | 58 + .../tree-sitter-command-cad-model/Cargo.toml | 23 + crates/tree-sitter-command-cad-model/Makefile | 94 + .../Package.swift | 37 + .../tree-sitter-command-cad-model/binding.gyp | 30 + .../c/tree-sitter-command_cad_model.h | 16 + .../c/tree-sitter-command_cad_model.pc.in | 11 + .../bindings/go/binding.go | 13 + .../bindings/go/binding_test.go | 15 + .../bindings/go/go.mod | 5 + .../bindings/node/binding.cc | 20 + .../bindings/node/index.d.ts | 28 + .../bindings/node/index.js | 7 + .../tree_sitter_command_cad_model/__init__.py | 5 + .../__init__.pyi | 1 + .../tree_sitter_command_cad_model/binding.c | 27 + .../tree_sitter_command_cad_model/py.typed | 0 .../bindings/rust/build.rs | 22 + .../bindings/rust/lib.rs | 54 + .../command_cad_model.h | 16 + crates/tree-sitter-command-cad-model/go.mod | 5 + .../tree-sitter-command-cad-model/grammar.js | 223 + .../package.json | 53 + .../pyproject.toml | 29 + crates/tree-sitter-command-cad-model/setup.py | 62 + .../src/grammar.json | 1667 ++++ .../src/node-types.json | 892 ++ .../src/parser.c | 8069 +++++++++++++++++ .../src/tree_sitter/alloc.h | 54 + .../src/tree_sitter/array.h | 290 + .../src/tree_sitter/parser.h | 265 + .../test/corpus/assignment.txt | 41 + .../test/corpus/closure.txt | 95 + .../test/corpus/code_block.txt | 95 + .../test/corpus/comments.txt | 35 + .../test/corpus/dictionary_construction.txt | 83 + .../test/corpus/for_loop.txt | 21 + .../test/corpus/if.txt | 50 + .../test/corpus/list.txt | 83 + .../test/corpus/precedence.txt | 45 + .../test/corpus/primitives.txt | 130 + .../test/corpus/struct_definition.txt | 241 + .../test/corpus/variable_paths.txt | 46 + .../tree-sitter.json | 34 + 54 files changed, 13674 insertions(+), 15 deletions(-) create mode 100644 crates/formatter/Cargo.toml create mode 100644 crates/formatter/src/arguments.rs create mode 100644 crates/formatter/src/main.rs create mode 100644 crates/formatter/test_files/empty_closure.ccm create mode 100644 crates/tree-sitter-command-cad-model/.editorconfig create mode 100644 crates/tree-sitter-command-cad-model/.gitattributes create mode 100644 crates/tree-sitter-command-cad-model/.gitignore create mode 100644 crates/tree-sitter-command-cad-model/CMakeLists.txt create mode 100644 crates/tree-sitter-command-cad-model/Cargo.toml create mode 100644 crates/tree-sitter-command-cad-model/Makefile create mode 100644 crates/tree-sitter-command-cad-model/Package.swift create mode 100644 crates/tree-sitter-command-cad-model/binding.gyp create mode 100644 crates/tree-sitter-command-cad-model/bindings/c/tree-sitter-command_cad_model.h create mode 100644 crates/tree-sitter-command-cad-model/bindings/c/tree-sitter-command_cad_model.pc.in create mode 100644 crates/tree-sitter-command-cad-model/bindings/go/binding.go create mode 100644 crates/tree-sitter-command-cad-model/bindings/go/binding_test.go create mode 100644 crates/tree-sitter-command-cad-model/bindings/go/go.mod create mode 100644 crates/tree-sitter-command-cad-model/bindings/node/binding.cc create mode 100644 crates/tree-sitter-command-cad-model/bindings/node/index.d.ts create mode 100644 crates/tree-sitter-command-cad-model/bindings/node/index.js create mode 100644 crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.py create mode 100644 crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.pyi create mode 100644 crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/binding.c create mode 100644 crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/py.typed create mode 100644 crates/tree-sitter-command-cad-model/bindings/rust/build.rs create mode 100644 crates/tree-sitter-command-cad-model/bindings/rust/lib.rs create mode 100644 crates/tree-sitter-command-cad-model/bindings/swift/TreeSitterCommandCadModel/command_cad_model.h create mode 100644 crates/tree-sitter-command-cad-model/go.mod create mode 100644 crates/tree-sitter-command-cad-model/grammar.js create mode 100644 crates/tree-sitter-command-cad-model/package.json create mode 100644 crates/tree-sitter-command-cad-model/pyproject.toml create mode 100644 crates/tree-sitter-command-cad-model/setup.py create mode 100644 crates/tree-sitter-command-cad-model/src/grammar.json create mode 100644 crates/tree-sitter-command-cad-model/src/node-types.json create mode 100644 crates/tree-sitter-command-cad-model/src/parser.c create mode 100644 crates/tree-sitter-command-cad-model/src/tree_sitter/alloc.h create mode 100644 crates/tree-sitter-command-cad-model/src/tree_sitter/array.h create mode 100644 crates/tree-sitter-command-cad-model/src/tree_sitter/parser.h create mode 100644 crates/tree-sitter-command-cad-model/test/corpus/assignment.txt create mode 100644 crates/tree-sitter-command-cad-model/test/corpus/closure.txt create mode 100644 crates/tree-sitter-command-cad-model/test/corpus/code_block.txt create mode 100644 crates/tree-sitter-command-cad-model/test/corpus/comments.txt create mode 100644 crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt create mode 100644 crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt create mode 100644 crates/tree-sitter-command-cad-model/test/corpus/if.txt create mode 100644 crates/tree-sitter-command-cad-model/test/corpus/list.txt create mode 100644 crates/tree-sitter-command-cad-model/test/corpus/precedence.txt create mode 100644 crates/tree-sitter-command-cad-model/test/corpus/primitives.txt create mode 100644 crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt create mode 100644 crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt create mode 100644 crates/tree-sitter-command-cad-model/tree-sitter.json diff --git a/Cargo.lock b/Cargo.lock index 4c44c8f..027efd0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + [[package]] name = "adler" version = "1.0.2" @@ -20,6 +29,15 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + [[package]] name = "aliasable" version = "0.1.3" @@ -47,6 +65,15 @@ dependencies = [ "libc", ] +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anstream" version = "0.6.14" @@ -132,6 +159,21 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "bezier-rs" version = "0.4.0" @@ -402,6 +444,12 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + [[package]] name = "downcast-rs" version = "1.2.1" @@ -537,6 +585,16 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "formatter" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "topiary-core", + "tree-sitter-command-cad-model", +] + [[package]] name = "fortuples" version = "0.9.1" @@ -548,6 +606,101 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + [[package]] name = "git2" version = "0.18.3" @@ -668,6 +821,15 @@ version = "1.70.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.12.1" @@ -703,9 +865,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" dependencies = [ "wasm-bindgen", ] @@ -927,6 +1089,15 @@ dependencies = [ "libm", ] +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.19.0" @@ -985,6 +1156,15 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "pad" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3" +dependencies = [ + "unicode-width", +] + [[package]] name = "parking_lot" version = "0.12.3" @@ -1064,12 +1244,44 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[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 = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi", +] + +[[package]] +name = "prettydiff" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ff1fec61082821f8236cf6c0c14e8172b62ce8a72a0eedc30d3b247bb68dc11" +dependencies = [ + "ansi_term", + "pad", +] + [[package]] name = "proc-macro2" version = "1.0.84" @@ -1135,12 +1347,47 @@ dependencies = [ "bitflags 2.5.0", ] +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + [[package]] name = "robust" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + [[package]] name = "rustc-hash" version = "1.1.0" @@ -1424,6 +1671,89 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "tokio" +version = "1.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +dependencies = [ + "backtrace", + "pin-project-lite", + "tokio-macros", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + +[[package]] +name = "topiary-core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0236570d34c4e60d88e6bce8446f6d6fd51f5e1e4bdea68cdcf0d1ff5c89776d" +dependencies = [ + "futures", + "itertools 0.11.0", + "log", + "pretty_assertions", + "prettydiff", + "serde", + "serde_json", + "tokio", + "topiary-tree-sitter-facade", + "topiary-web-tree-sitter-sys", +] + +[[package]] +name = "topiary-tree-sitter-facade" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb978cfd5d4686e9193eed02c6c3abe8aac98e9d4942aaaf83ea472fc9b32d6" +dependencies = [ + "js-sys", + "topiary-web-tree-sitter-sys", + "tree-sitter", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "topiary-web-tree-sitter-sys" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e6ec4ec3a2426af1ff74688cd19c841a1e852403665d96b455946cb491cb0b6" +dependencies = [ + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "tree-sitter" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df7cc499ceadd4dcdf7ec6d4cbc34ece92c3fa07821e287aedecd4416c516dca" +dependencies = [ + "cc", + "regex", +] + +[[package]] +name = "tree-sitter-command-cad-model" +version = "0.0.1" +dependencies = [ + "cc", + "tree-sitter", +] + [[package]] name = "type-map" version = "0.5.0" @@ -1470,6 +1800,12 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + [[package]] name = "unsafe-libyaml" version = "0.2.11" @@ -1523,9 +1859,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1533,9 +1869,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" dependencies = [ "bumpalo", "log", @@ -1546,11 +1882,23 @@ dependencies = [ "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.92" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1558,9 +1906,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" dependencies = [ "proc-macro2", "quote", @@ -1571,9 +1919,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" [[package]] name = "wavefront_rs" @@ -1583,9 +1931,9 @@ checksum = "c2f237e2271c3f9ccc633ee16918789514fd5a823bf62ddce21f8a730a1d9930" [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" dependencies = [ "js-sys", "wasm-bindgen", @@ -1612,6 +1960,22 @@ dependencies = [ "safe_arch", ] +[[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.8" @@ -1621,6 +1985,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[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" diff --git a/Cargo.toml b/Cargo.toml index d8769de..b617112 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,4 @@ -workspace = { members = ["crates/common_data_types", "crates/macros"] } +workspace = { members = ["crates/common_data_types", "crates/macros", "crates/formatter"] } [package] name = "command_cad" version = "0.6.0" diff --git a/build_dependencies.nix b/build_dependencies.nix index 9f8f67e..937969b 100644 --- a/build_dependencies.nix +++ b/build_dependencies.nix @@ -17,11 +17,27 @@ let cargo = rust; rustc = rust; }; + + tree-sitter-cli = rust_platform.buildRustPackage rec { + pname = "tree-sitter-cli"; + version = "0.22.6"; + + src = pkgs.fetchCrate { + inherit pname version; + sha256 = "sha256-bqWGJ8ZbqKAI0T9Fzx9pW6dOztJZ72dzJNOj1jtOc4o="; + }; + + cargoSha256 = "sha256-BreZqkSP/fis5HmjFYQeDux2EB37nqFaIS4HVRTe3Kg="; + doCheck = false; + }; in [ rust rust_platform.bindgenHook + tree-sitter-cli pkgs.crate2nix pkgs.openssl pkgs.pkg-config + pkgs.nodejs_22 + pkgs.gcc ] diff --git a/crates/formatter/Cargo.toml b/crates/formatter/Cargo.toml new file mode 100644 index 0000000..11899bb --- /dev/null +++ b/crates/formatter/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "formatter" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0" +tree-sitter-command-cad-model= { path = "../tree-sitter-command-cad-model" } +topiary-core = "0.5.1" +clap = { version = "4.4", features = [ "derive", "wrap_help" ] } \ No newline at end of file diff --git a/crates/formatter/src/arguments.rs b/crates/formatter/src/arguments.rs new file mode 100644 index 0000000..5a1ded5 --- /dev/null +++ b/crates/formatter/src/arguments.rs @@ -0,0 +1,15 @@ +use std::path::PathBuf; + +#[derive(clap::Parser)] +#[command(name = "formatter")] +#[command(bin_name = "formatter")] +/// Format a Command CAD script +pub struct RunArgs { + #[arg(long)] + /// Path to script to format. Leave unspecified to use standard input. + pub input: Option, + + #[arg(long)] + /// Path to output file. Leave unspecified to use standard output. + pub output: Option, +} diff --git a/crates/formatter/src/main.rs b/crates/formatter/src/main.rs new file mode 100644 index 0000000..843657c --- /dev/null +++ b/crates/formatter/src/main.rs @@ -0,0 +1,33 @@ +use std::{ + fs, + io::{self, Read, Write}, +}; + +use anyhow::{Context, Result}; +use clap::Parser as _; + +mod arguments; + +fn main() { + if let Err(error) = trampoline() { + eprintln!("Fatal error: {error:?}") + } +} + +fn trampoline() -> Result<()> { + let args = arguments::RunArgs::parse(); + + let mut input: Box = if let Some(input) = args.input { + Box::new(fs::File::open(input).context("Failed to open input file")?) + } else { + Box::new(std::io::stdin()) + }; + + let mut input_str = String::new(); + input + .read_to_string(&mut input_str) + .context("Failed to read input file")?; + let input = input_str; + + todo!() +} diff --git a/crates/formatter/test_files/empty_closure.ccm b/crates/formatter/test_files/empty_closure.ccm new file mode 100644 index 0000000..0655b8c --- /dev/null +++ b/crates/formatter/test_files/empty_closure.ccm @@ -0,0 +1,2 @@ +# An empty closure that takes no arguments, and returns no arguments. +() -> {} \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/.editorconfig b/crates/tree-sitter-command-cad-model/.editorconfig new file mode 100644 index 0000000..65330c4 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/.editorconfig @@ -0,0 +1,46 @@ +root = true + +[*] +charset = utf-8 + +[*.{json,toml,yml,gyp}] +indent_style = space +indent_size = 2 + +[*.js] +indent_style = space +indent_size = 2 + +[*.scm] +indent_style = space +indent_size = 2 + +[*.{c,cc,h}] +indent_style = space +indent_size = 4 + +[*.rs] +indent_style = space +indent_size = 4 + +[*.{py,pyi}] +indent_style = space +indent_size = 4 + +[*.swift] +indent_style = space +indent_size = 4 + +[*.go] +indent_style = tab +indent_size = 8 + +[Makefile] +indent_style = tab +indent_size = 8 + +[parser.c] +indent_size = 2 + +[{alloc,array,parser}.h] +indent_size = 2 diff --git a/crates/tree-sitter-command-cad-model/.gitattributes b/crates/tree-sitter-command-cad-model/.gitattributes new file mode 100644 index 0000000..7e2cae0 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/.gitattributes @@ -0,0 +1,37 @@ +* text=auto eol=lf + +# Generated source files +src/*.json linguist-generated +src/parser.c linguist-generated +src/tree_sitter/* linguist-generated + +# C bindings +bindings/c/* linguist-generated +CMakeLists.txt linguist-generated +Makefile linguist-generated + +# Rust bindings +bindings/rust/* linguist-generated +Cargo.toml linguist-generated +Cargo.lock linguist-generated + +# Node.js bindings +bindings/node/* linguist-generated +binding.gyp linguist-generated +package.json linguist-generated +package-lock.json linguist-generated + +# Python bindings +bindings/python/** linguist-generated +setup.py linguist-generated +pyproject.toml linguist-generated + +# Go bindings +bindings/go/* linguist-generated +go.mod linguist-generated +go.sum linguist-generated + +# Swift bindings +bindings/swift/** linguist-generated +Package.swift linguist-generated +Package.resolved linguist-generated diff --git a/crates/tree-sitter-command-cad-model/.gitignore b/crates/tree-sitter-command-cad-model/.gitignore new file mode 100644 index 0000000..308fcab --- /dev/null +++ b/crates/tree-sitter-command-cad-model/.gitignore @@ -0,0 +1,40 @@ +# Rust artifacts +target/ + +# Node artifacts +build/ +prebuilds/ +node_modules/ + +# Swift artifacts +.build/ + +# Go artifacts +_obj/ + +# Python artifacts +.venv/ +dist/ +*.egg-info +*.whl + +# C artifacts +*.a +*.so +*.so.* +*.dylib +*.dll +*.pc + +# Example dirs +/examples/*/ + +# Grammar volatiles +*.wasm +*.obj +*.o + +# Archives +*.tar.gz +*.tgz +*.zip diff --git a/crates/tree-sitter-command-cad-model/CMakeLists.txt b/crates/tree-sitter-command-cad-model/CMakeLists.txt new file mode 100644 index 0000000..618c40e --- /dev/null +++ b/crates/tree-sitter-command-cad-model/CMakeLists.txt @@ -0,0 +1,58 @@ +cmake_minimum_required(VERSION 3.13) + +project(tree-sitter-command_cad_model + VERSION "0.1.0" + DESCRIPTION "Scripts for creating models in Command CAD" + HOMEPAGE_URL "https://github.com/iamthecarl/commandcad" + LANGUAGES C) + +option(BUILD_SHARED_LIBS "Build using shared libraries" ON) +option(TREE_SITTER_REUSE_ALLOCATOR "Reuse the library allocator" OFF) + +set(TREE_SITTER_ABI_VERSION 14 CACHE STRING "Tree-sitter ABI version") +if(NOT ${TREE_SITTER_ABI_VERSION} MATCHES "^[0-9]+$") + unset(TREE_SITTER_ABI_VERSION CACHE) + message(FATAL_ERROR "TREE_SITTER_ABI_VERSION must be an integer") +endif() + +find_program(TREE_SITTER_CLI tree-sitter DOC "Tree-sitter CLI") + +add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/parser.c" + DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/grammar.json" + COMMAND "${TREE_SITTER_CLI}" generate src/grammar.json + --abi=${TREE_SITTER_ABI_VERSION} + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT "Generating parser.c") + +add_library(tree-sitter-command_cad_model src/parser.c) +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/scanner.c) + target_sources(tree-sitter-command_cad_model PRIVATE src/scanner.c) +endif() +target_include_directories(tree-sitter-command_cad_model PRIVATE src) + +target_compile_definitions(tree-sitter-command_cad_model PRIVATE + $<$:TREE_SITTER_REUSE_ALLOCATOR> + $<$:TREE_SITTER_DEBUG>) + +set_target_properties(tree-sitter-command_cad_model + PROPERTIES + C_STANDARD 11 + POSITION_INDEPENDENT_CODE ON + SOVERSION "${TREE_SITTER_ABI_VERSION}.${PROJECT_VERSION_MAJOR}" + DEFINE_SYMBOL "") + +configure_file(bindings/c/tree-sitter-command_cad_model.pc.in + "${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-command_cad_model.pc" @ONLY) + +include(GNUInstallDirs) + +install(FILES bindings/c/tree-sitter-command_cad_model.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/tree_sitter") +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-command_cad_model.pc" + DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig") +install(TARGETS tree-sitter-command_cad_model + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + +add_custom_target(ts-test "${TREE_SITTER_CLI}" test + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT "tree-sitter test") diff --git a/crates/tree-sitter-command-cad-model/Cargo.toml b/crates/tree-sitter-command-cad-model/Cargo.toml new file mode 100644 index 0000000..541f846 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "tree-sitter-command-cad-model" +description = "CommandCadModel grammar for tree-sitter" +version = "0.0.1" +license = "MIT" +readme = "README.md" +keywords = ["incremental", "parsing", "tree-sitter", "command-cad-model"] +categories = ["parsing", "text-editors"] +repository = "https://github.com/tree-sitter/tree-sitter-command-cad-model" +edition = "2021" +autoexamples = false + +build = "bindings/rust/build.rs" +include = ["bindings/rust/*", "grammar.js", "queries/*", "src/*"] + +[lib] +path = "bindings/rust/lib.rs" + +[dependencies] +tree-sitter = ">=0.22.6" + +[build-dependencies] +cc = "1.0.87" diff --git a/crates/tree-sitter-command-cad-model/Makefile b/crates/tree-sitter-command-cad-model/Makefile new file mode 100644 index 0000000..3497397 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/Makefile @@ -0,0 +1,94 @@ +ifeq ($(OS),Windows_NT) +$(error Windows is not supported) +endif + +LANGUAGE_NAME := tree-sitter-command_cad_model +HOMEPAGE_URL := https://github.com/iamthecarl/commandcad +VERSION := 0.1.0 + +# repository +SRC_DIR := src + +TS ?= tree-sitter + +# install directory layout +PREFIX ?= /usr/local +INCLUDEDIR ?= $(PREFIX)/include +LIBDIR ?= $(PREFIX)/lib +PCLIBDIR ?= $(LIBDIR)/pkgconfig + +# source/object files +PARSER := $(SRC_DIR)/parser.c +EXTRAS := $(filter-out $(PARSER),$(wildcard $(SRC_DIR)/*.c)) +OBJS := $(patsubst %.c,%.o,$(PARSER) $(EXTRAS)) + +# flags +ARFLAGS ?= rcs +override CFLAGS += -I$(SRC_DIR) -std=c11 -fPIC + +# ABI versioning +SONAME_MAJOR = $(shell sed -n 's/\#define LANGUAGE_VERSION //p' $(PARSER)) +SONAME_MINOR = $(word 1,$(subst ., ,$(VERSION))) + +# OS-specific bits +ifeq ($(shell uname),Darwin) + SOEXT = dylib + SOEXTVER_MAJOR = $(SONAME_MAJOR).$(SOEXT) + SOEXTVER = $(SONAME_MAJOR).$(SONAME_MINOR).$(SOEXT) + LINKSHARED = -dynamiclib -Wl,-install_name,$(LIBDIR)/lib$(LANGUAGE_NAME).$(SOEXTVER),-rpath,@executable_path/../Frameworks +else + SOEXT = so + SOEXTVER_MAJOR = $(SOEXT).$(SONAME_MAJOR) + SOEXTVER = $(SOEXT).$(SONAME_MAJOR).$(SONAME_MINOR) + LINKSHARED = -shared -Wl,-soname,lib$(LANGUAGE_NAME).$(SOEXTVER) +endif +ifneq ($(filter $(shell uname),FreeBSD NetBSD DragonFly),) + PCLIBDIR := $(PREFIX)/libdata/pkgconfig +endif + +all: lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) $(LANGUAGE_NAME).pc + +lib$(LANGUAGE_NAME).a: $(OBJS) + $(AR) $(ARFLAGS) $@ $^ + +lib$(LANGUAGE_NAME).$(SOEXT): $(OBJS) + $(CC) $(LDFLAGS) $(LINKSHARED) $^ $(LDLIBS) -o $@ +ifneq ($(STRIP),) + $(STRIP) $@ +endif + +$(LANGUAGE_NAME).pc: bindings/c/$(LANGUAGE_NAME).pc.in + sed -e 's|@PROJECT_VERSION@|$(VERSION)|' \ + -e 's|@CMAKE_INSTALL_LIBDIR@|$(LIBDIR:$(PREFIX)/%=%)|' \ + -e 's|@CMAKE_INSTALL_INCLUDEDIR@|$(INCLUDEDIR:$(PREFIX)/%=%)|' \ + -e 's|@PROJECT_DESCRIPTION@|$(DESCRIPTION)|' \ + -e 's|@PROJECT_HOMEPAGE_URL@|$(HOMEPAGE_URL)|' \ + -e 's|@CMAKE_INSTALL_PREFIX@|$(PREFIX)|' $< > $@ + +$(PARSER): $(SRC_DIR)/grammar.json + $(TS) generate $^ + +install: all + install -d '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter '$(DESTDIR)$(PCLIBDIR)' '$(DESTDIR)$(LIBDIR)' + install -m644 bindings/c/$(LANGUAGE_NAME).h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h + install -m644 $(LANGUAGE_NAME).pc '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc + install -m644 lib$(LANGUAGE_NAME).a '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a + install -m755 lib$(LANGUAGE_NAME).$(SOEXT) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER) + ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) + ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) + +uninstall: + $(RM) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a \ + '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER) \ + '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) \ + '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) \ + '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h \ + '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc + +clean: + $(RM) $(OBJS) $(LANGUAGE_NAME).pc lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) + +test: + $(TS) test + +.PHONY: all install uninstall clean test diff --git a/crates/tree-sitter-command-cad-model/Package.swift b/crates/tree-sitter-command-cad-model/Package.swift new file mode 100644 index 0000000..47882c2 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/Package.swift @@ -0,0 +1,37 @@ +// swift-tools-version:5.3 +import PackageDescription + +let package = Package( + name: "TreeSitterCommandCadModel", + products: [ + .library(name: "TreeSitterCommandCadModel", targets: ["TreeSitterCommandCadModel"]), + ], + dependencies: [ + .package(url: "https://github.com/ChimeHQ/SwiftTreeSitter", from: "0.8.0"), + ], + targets: [ + .target( + name: "TreeSitterCommandCadModel", + dependencies: [], + path: ".", + sources: [ + "src/parser.c", + // NOTE: if your language has an external scanner, add it here. + ], + resources: [ + .copy("queries") + ], + publicHeadersPath: "bindings/swift", + cSettings: [.headerSearchPath("src")] + ), + .testTarget( + name: "TreeSitterCommandCadModelTests", + dependencies: [ + "SwiftTreeSitter", + "TreeSitterCommandCadModel", + ], + path: "bindings/swift/TreeSitterCommandCadModelTests" + ) + ], + cLanguageStandard: .c11 +) diff --git a/crates/tree-sitter-command-cad-model/binding.gyp b/crates/tree-sitter-command-cad-model/binding.gyp new file mode 100644 index 0000000..5fc9b2c --- /dev/null +++ b/crates/tree-sitter-command-cad-model/binding.gyp @@ -0,0 +1,30 @@ +{ + "targets": [ + { + "target_name": "tree_sitter_command_cad_model_binding", + "dependencies": [ + " + +typedef struct TSLanguage TSLanguage; + +extern "C" TSLanguage *tree_sitter_command_cad_model(); + +// "tree-sitter", "language" hashed with BLAKE2 +const napi_type_tag LANGUAGE_TYPE_TAG = { + 0x8AF2E5212AD58ABF, 0xD5006CAD83ABBA16 +}; + +Napi::Object Init(Napi::Env env, Napi::Object exports) { + exports["name"] = Napi::String::New(env, "command_cad_model"); + auto language = Napi::External::New(env, tree_sitter_command_cad_model()); + language.TypeTag(&LANGUAGE_TYPE_TAG); + exports["language"] = language; + return exports; +} + +NODE_API_MODULE(tree_sitter_command_cad_model_binding, Init) diff --git a/crates/tree-sitter-command-cad-model/bindings/node/index.d.ts b/crates/tree-sitter-command-cad-model/bindings/node/index.d.ts new file mode 100644 index 0000000..efe259e --- /dev/null +++ b/crates/tree-sitter-command-cad-model/bindings/node/index.d.ts @@ -0,0 +1,28 @@ +type BaseNode = { + type: string; + named: boolean; +}; + +type ChildNode = { + multiple: boolean; + required: boolean; + types: BaseNode[]; +}; + +type NodeInfo = + | (BaseNode & { + subtypes: BaseNode[]; + }) + | (BaseNode & { + fields: { [name: string]: ChildNode }; + children: ChildNode[]; + }); + +type Language = { + name: string; + language: unknown; + nodeTypeInfo: NodeInfo[]; +}; + +declare const language: Language; +export = language; diff --git a/crates/tree-sitter-command-cad-model/bindings/node/index.js b/crates/tree-sitter-command-cad-model/bindings/node/index.js new file mode 100644 index 0000000..6657bcf --- /dev/null +++ b/crates/tree-sitter-command-cad-model/bindings/node/index.js @@ -0,0 +1,7 @@ +const root = require("path").join(__dirname, "..", ".."); + +module.exports = require("node-gyp-build")(root); + +try { + module.exports.nodeTypeInfo = require("../../src/node-types.json"); +} catch (_) {} diff --git a/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.py b/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.py new file mode 100644 index 0000000..f447501 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.py @@ -0,0 +1,5 @@ +"CommandCadModel grammar for tree-sitter" + +from ._binding import language + +__all__ = ["language"] diff --git a/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.pyi b/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.pyi new file mode 100644 index 0000000..5416666 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.pyi @@ -0,0 +1 @@ +def language() -> int: ... diff --git a/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/binding.c b/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/binding.c new file mode 100644 index 0000000..2fdeac5 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/binding.c @@ -0,0 +1,27 @@ +#include + +typedef struct TSLanguage TSLanguage; + +TSLanguage *tree_sitter_command_cad_model(void); + +static PyObject* _binding_language(PyObject *self, PyObject *args) { + return PyLong_FromVoidPtr(tree_sitter_command_cad_model()); +} + +static PyMethodDef methods[] = { + {"language", _binding_language, METH_NOARGS, + "Get the tree-sitter language for this grammar."}, + {NULL, NULL, 0, NULL} +}; + +static struct PyModuleDef module = { + .m_base = PyModuleDef_HEAD_INIT, + .m_name = "_binding", + .m_doc = NULL, + .m_size = -1, + .m_methods = methods +}; + +PyMODINIT_FUNC PyInit__binding(void) { + return PyModule_Create(&module); +} diff --git a/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/py.typed b/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/crates/tree-sitter-command-cad-model/bindings/rust/build.rs b/crates/tree-sitter-command-cad-model/bindings/rust/build.rs new file mode 100644 index 0000000..fe987ec --- /dev/null +++ b/crates/tree-sitter-command-cad-model/bindings/rust/build.rs @@ -0,0 +1,22 @@ +fn main() { + let src_dir = std::path::Path::new("src"); + + let mut c_config = cc::Build::new(); + c_config.std("c11").include(src_dir); + + #[cfg(target_env = "msvc")] + c_config.flag("-utf-8"); + + let parser_path = src_dir.join("parser.c"); + c_config.file(&parser_path); + println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap()); + + // NOTE: if your language uses an external scanner, uncomment this block: + /* + let scanner_path = src_dir.join("scanner.c"); + c_config.file(&scanner_path); + println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap()); + */ + + c_config.compile("tree-sitter-command_cad_model"); +} diff --git a/crates/tree-sitter-command-cad-model/bindings/rust/lib.rs b/crates/tree-sitter-command-cad-model/bindings/rust/lib.rs new file mode 100644 index 0000000..79eb826 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/bindings/rust/lib.rs @@ -0,0 +1,54 @@ +//! This crate provides CommandCadModel 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: +//! +//! ``` +//! let code = r#" +//! "#; +//! let mut parser = tree_sitter::Parser::new(); +//! parser.set_language(&tree_sitter_command_cad_model::language()).expect("Error loading CommandCadModel grammar"); +//! let tree = parser.parse(code, None).unwrap(); +//! assert!(!tree.root_node().has_error()); +//! ``` +//! +//! [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 tree_sitter::Language; + +extern "C" { + fn tree_sitter_command_cad_model() -> 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_command_cad_model() } +} + +/// 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"); + +// Uncomment these to include any queries that this grammar contains + +// pub const HIGHLIGHTS_QUERY: &str = include_str!("../../queries/highlights.scm"); +// pub const INJECTIONS_QUERY: &str = include_str!("../../queries/injections.scm"); +// pub const LOCALS_QUERY: &str = include_str!("../../queries/locals.scm"); +// pub const TAGS_QUERY: &str = include_str!("../../queries/tags.scm"); + +#[cfg(test)] +mod tests { + #[test] + fn test_can_load_grammar() { + let mut parser = tree_sitter::Parser::new(); + parser + .set_language(&super::language()) + .expect("Error loading CommandCadModel grammar"); + } +} diff --git a/crates/tree-sitter-command-cad-model/bindings/swift/TreeSitterCommandCadModel/command_cad_model.h b/crates/tree-sitter-command-cad-model/bindings/swift/TreeSitterCommandCadModel/command_cad_model.h new file mode 100644 index 0000000..a9a91cd --- /dev/null +++ b/crates/tree-sitter-command-cad-model/bindings/swift/TreeSitterCommandCadModel/command_cad_model.h @@ -0,0 +1,16 @@ +#ifndef TREE_SITTER_COMMAND_CAD_MODEL_H_ +#define TREE_SITTER_COMMAND_CAD_MODEL_H_ + +typedef struct TSLanguage TSLanguage; + +#ifdef __cplusplus +extern "C" { +#endif + +const TSLanguage *tree_sitter_command_cad_model(void); + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_COMMAND_CAD_MODEL_H_ diff --git a/crates/tree-sitter-command-cad-model/go.mod b/crates/tree-sitter-command-cad-model/go.mod new file mode 100644 index 0000000..2943667 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/go.mod @@ -0,0 +1,5 @@ +module github.com/iamthecarl/commandcad + +go 1.22 + +require github.com/tree-sitter/go-tree-sitter v0.24.0 diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js new file mode 100644 index 0000000..c7ce549 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -0,0 +1,223 @@ +/** + * @file Scripts for creating models in Command CAD + * @author James Carl + * @license AGPL + */ + +/// +// @ts-check + +const PREC = { + unit: 16, + call: 15, + field: 14, + unary: 12, + exponential: 11, + multiplicative: 10, + additive: 9, + shift: 8, + bitand: 7, + bitxor: 6, + bitor: 5, + comparative: 4, + and: 3, + or: 2, + range: 1, + assign: 0, + closure: -1, +}; + +module.exports = grammar({ + name: "command_cad_model", + extras: $ => [$.comment, $._whitespace], + word: $ => $.identifier, + rules: { + source_file: $ => $.expression, + + comment: $ => token(seq('#', /.*/)), + _whitespace: _ => /\s/, + identifier: _ => /[a-zA-Z_][a-zA-Z0-9_]*/, + string: _ => /\"(\\\"|[^\"])*\"/, + default: _ => 'default', + void: _ => seq('(', ')'), + + signed_integer: _ => /[0-9]+[iI]/, + unsigned_integer: _ => /[0-9]+[uU]/, + + number: _ => /[0-9]+/, + unit_quote: _ => /'(\\'|[^'])*'/, + + _float: $ => choice( + seq($.number, '.', $.number), + seq($.number), + ), + + _unit: $ => choice($.identifier, $.unit_quote), + + scalar: $ => prec.left(PREC.unit, seq($._float, optional($._unit))), + + boolean: $ => choice('true', 'false'), + + expression: $ => choice( + $.void, + $.parenthesis, + $.default, + $.signed_integer, + $.unsigned_integer, + $.scalar, + $.boolean, + $.string, + $.path, + $.list, + $.if, + $.struct_definition, + $.dictionary_construction, + $.procedural_block, + $.closure_definition, + $.unary_expression, + $.binary_expression, + ), + unary_expression: $ => prec(PREC.unary, choice( + seq('-', $.expression), + seq('+', $.expression), + seq('!', $.expression), + )), + binary_expression: $ => { + const table = [ + [PREC.exponential, '**'], + + [PREC.multiplicative, '*'], + [PREC.multiplicative, '/'], + [PREC.multiplicative, '//'], + + [PREC.additive, '+'], + [PREC.additive, '-'], + + [PREC.shift, '<<'], + [PREC.shift, '>>'], + + [PREC.bitand, '&'], + [PREC.bitor, '|'], + [PREC.bitxor, '^'], + + [PREC.comparative, '>'], + [PREC.comparative, '>='], + [PREC.comparative, '=='], + [PREC.comparative, '<='], + [PREC.comparative, '<'], + [PREC.comparative, '!='], + + [PREC.and, '&&'], + [PREC.or, '||'], + + [PREC.range, '..'], + [PREC.range, '..='], + + ]; + + return choice(...table.map(([precedence, operator]) => prec.left(precedence, seq( + field('a', $.expression), + field('op', operator), + field('b', $.expression), + )))); + }, + + if: $ => seq('if', $.expression, $.procedural_block, optional(seq('else', $.procedural_block))), + + _variable_type: $ => $.path, + path: $ => choice($.local_path, $.argument_path), + argument_path: $ => seq('@', repeat(seq('.', $.identifier))), + local_path: $ => seq($.identifier, repeat(seq('.', $.identifier))), + + _declaration_type: $ => seq(':', $._variable_type), + + parenthesis: $ => seq('(', $.expression, ')'), + list: $ => seq( + '[', + repeat(seq($.expression, ',')), + optional(seq($.expression)), + ']' + ), + + varadic_dots: $ => '...', + + struct_member: $ => seq(field('name', $.identifier), $._declaration_type, field('default', optional(seq('=', $.expression)))), + _struct_final_element: $ => choice( + seq($.struct_member), + $.varadic_dots, + seq($.varadic_dots, ',') + ), + struct_definition: $ => seq('(', + choice( + seq( + repeat1(seq($.struct_member, ',')), + optional($._struct_final_element), + ), + $._struct_final_element + ), + ')'), + + dictionary_member_assignment: $ => seq($.identifier, '=', $.expression), + dictionary_construction: $ => seq('(', + choice( + seq( + repeat1(seq($.dictionary_member_assignment, ',')), + optional($.dictionary_member_assignment), + ), + $.dictionary_member_assignment + ), + ')' + ), + + procedural_block: $ => seq( + '{', + repeat($.statement), + '}' + ), + + closure_captured_variables: $ => seq( + '[', + seq(repeat(seq($.identifier, ',')), optional($.identifier)), + ']' + ), + closure_definition: $ => prec.left(PREC.closure, seq( + choice($.struct_definition, $.path, $.void), $.closure_captured_variables, '->', choice($.struct_definition, $.path, $.void), $.expression, + )), + + closed_expression: $ => seq($.expression, ';'), + + statement: $ => choice( + $.assign, + $.let, + $.for, + $.expression, + $.closed_expression, + ), + + assignment_operator: $ => { + let operators = [ + '=', + '&=', + '|=', + '^=', + '&&=', + '||=', + '^^=', + '+=', + '-=', + '**=', + '*=', + '//=', + '/=', + '<<=', + '>>=' + ]; + + return choice(...operators); + }, + + let: $ => seq('let', $.identifier, $.assignment_operator, $.expression, ';'), + assign: $ => seq($.path, $.assignment_operator, $.expression, ';'), + for: $ => seq('for', $.identifier, 'in', $.expression, $.procedural_block), + } +}); diff --git a/crates/tree-sitter-command-cad-model/package.json b/crates/tree-sitter-command-cad-model/package.json new file mode 100644 index 0000000..f4932da --- /dev/null +++ b/crates/tree-sitter-command-cad-model/package.json @@ -0,0 +1,53 @@ +{ + "name": "tree-sitter-command-cad-model", + "version": "0.0.1", + "description": "CommandCadModel grammar for tree-sitter", + "repository": "github:tree-sitter/tree-sitter-command-cad-model", + "license": "MIT", + "main": "bindings/node", + "types": "bindings/node", + "keywords": [ + "incremental", + "parsing", + "tree-sitter", + "command_cad_model" + ], + "files": [ + "grammar.js", + "binding.gyp", + "prebuilds/**", + "bindings/node/*", + "queries/*", + "src/**" + ], + "dependencies": { + "node-addon-api": "^7.1.0", + "node-gyp-build": "^4.8.0" + }, + "devDependencies": { + "prebuildify": "^6.0.0", + "tree-sitter-cli": "^0.22.6" + }, + "peerDependencies": { + "tree-sitter": "^0.21.0" + }, + "peerDependenciesMeta": { + "tree-sitter": { + "optional": true + } + }, + "scripts": { + "install": "node-gyp-build", + "prebuildify": "prebuildify --napi --strip", + "build": "tree-sitter generate --no-bindings", + "build-wasm": "tree-sitter build --wasm", + "test": "tree-sitter test", + "parse": "tree-sitter parse" + }, + "tree-sitter": [ + { + "scope": "source.command_cad_model", + "injection-regex": "^command_cad_model$" + } + ] +} diff --git a/crates/tree-sitter-command-cad-model/pyproject.toml b/crates/tree-sitter-command-cad-model/pyproject.toml new file mode 100644 index 0000000..705de88 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/pyproject.toml @@ -0,0 +1,29 @@ +[build-system] +requires = ["setuptools>=42", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "tree-sitter-command-cad-model" +description = "Scripts for creating models in Command CAD" +version = "0.1.0" +keywords = ["incremental", "parsing", "tree-sitter", "command-cad-model"] +classifiers = [ + "Intended Audience :: Developers", + "Topic :: Software Development :: Compilers", + "Topic :: Text Processing :: Linguistic", + "Typing :: Typed", +] +authors = [{ name = "James Carl" }] +requires-python = ">=3.9" +license.text = "AGPL" +readme = "README.md" + +[project.urls] +Homepage = "https://github.com/iamthecarl/commandcad" + +[project.optional-dependencies] +core = ["tree-sitter~=0.22"] + +[tool.cibuildwheel] +build = "cp39-*" +build-frontend = "build" diff --git a/crates/tree-sitter-command-cad-model/setup.py b/crates/tree-sitter-command-cad-model/setup.py new file mode 100644 index 0000000..cd3a3da --- /dev/null +++ b/crates/tree-sitter-command-cad-model/setup.py @@ -0,0 +1,62 @@ +from os.path import isdir, join +from platform import system + +from setuptools import Extension, find_packages, setup +from setuptools.command.build import build +from wheel.bdist_wheel import bdist_wheel + + +class Build(build): + def run(self): + if isdir("queries"): + dest = join(self.build_lib, "tree_sitter_command_cad_model", "queries") + self.copy_tree("queries", dest) + super().run() + + +class BdistWheel(bdist_wheel): + def get_tag(self): + python, abi, platform = super().get_tag() + if python.startswith("cp"): + python, abi = "cp39", "abi3" + return python, abi, platform + + +setup( + packages=find_packages("bindings/python"), + package_dir={"": "bindings/python"}, + package_data={ + "tree_sitter_command_cad_model": ["*.pyi", "py.typed"], + "tree_sitter_command_cad_model.queries": ["*.scm"], + }, + ext_package="tree_sitter_command_cad_model", + ext_modules=[ + Extension( + name="_binding", + sources=[ + "bindings/python/tree_sitter_command_cad_model/binding.c", + "src/parser.c", + # NOTE: if your language uses an external scanner, add it here. + ], + extra_compile_args=[ + "-std=c11", + "-fvisibility=hidden", + ] if system() != "Windows" else [ + "/std:c11", + "/utf-8", + ], + define_macros=[ + ("Py_LIMITED_API", "0x03090000"), + ("PY_SSIZE_T_CLEAN", None), + ("TREE_SITTER_HIDE_SYMBOLS", None), + ], + include_dirs=["src"], + py_limited_api=True, + ) + ], + cmdclass={ + "build": Build, + "bdist_wheel": BdistWheel + }, + zip_safe=False +) diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json new file mode 100644 index 0000000..6181f78 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -0,0 +1,1667 @@ +{ + "name": "command_cad_model", + "word": "identifier", + "rules": { + "source_file": { + "type": "SYMBOL", + "name": "expression" + }, + "comment": { + "type": "TOKEN", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "#" + }, + { + "type": "PATTERN", + "value": ".*" + } + ] + } + }, + "_whitespace": { + "type": "PATTERN", + "value": "\\s" + }, + "identifier": { + "type": "PATTERN", + "value": "[a-zA-Z_][a-zA-Z0-9_]*" + }, + "string": { + "type": "PATTERN", + "value": "\\\"(\\\\\\\"|[^\\\"])*\\\"" + }, + "default": { + "type": "STRING", + "value": "default" + }, + "void": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "signed_integer": { + "type": "PATTERN", + "value": "[0-9]+[iI]" + }, + "unsigned_integer": { + "type": "PATTERN", + "value": "[0-9]+[uU]" + }, + "number": { + "type": "PATTERN", + "value": "[0-9]+" + }, + "unit_quote": { + "type": "PATTERN", + "value": "'(\\\\'|[^'])*'" + }, + "_float": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "number" + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "number" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "number" + } + ] + } + ] + }, + "_unit": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "unit_quote" + } + ] + }, + "scalar": { + "type": "PREC_LEFT", + "value": 16, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_float" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_unit" + }, + { + "type": "BLANK" + } + ] + } + ] + } + }, + "boolean": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "true" + }, + { + "type": "STRING", + "value": "false" + } + ] + }, + "expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "void" + }, + { + "type": "SYMBOL", + "name": "parenthesis" + }, + { + "type": "SYMBOL", + "name": "default" + }, + { + "type": "SYMBOL", + "name": "signed_integer" + }, + { + "type": "SYMBOL", + "name": "unsigned_integer" + }, + { + "type": "SYMBOL", + "name": "scalar" + }, + { + "type": "SYMBOL", + "name": "boolean" + }, + { + "type": "SYMBOL", + "name": "string" + }, + { + "type": "SYMBOL", + "name": "path" + }, + { + "type": "SYMBOL", + "name": "list" + }, + { + "type": "SYMBOL", + "name": "if" + }, + { + "type": "SYMBOL", + "name": "struct_definition" + }, + { + "type": "SYMBOL", + "name": "dictionary_construction" + }, + { + "type": "SYMBOL", + "name": "procedural_block" + }, + { + "type": "SYMBOL", + "name": "closure_definition" + }, + { + "type": "SYMBOL", + "name": "unary_expression" + }, + { + "type": "SYMBOL", + "name": "binary_expression" + } + ] + }, + "unary_expression": { + "type": "PREC", + "value": 12, + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "-" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "+" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "!" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + ] + } + }, + "binary_expression": { + "type": "CHOICE", + "members": [ + { + "type": "PREC_LEFT", + "value": 11, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "**" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "*" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "/" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "//" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 9, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "+" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 9, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "-" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 8, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "<<" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 8, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": ">>" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 7, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "&" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 5, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "|" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 6, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "^" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 4, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": ">" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 4, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": ">=" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 4, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "==" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 4, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "<=" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 4, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "<" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 4, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "!=" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 3, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "&&" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "||" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": ".." + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "..=" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + } + } + ] + }, + "if": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "if" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "procedural_block" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "else" + }, + { + "type": "SYMBOL", + "name": "procedural_block" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "_variable_type": { + "type": "SYMBOL", + "name": "path" + }, + "path": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "local_path" + }, + { + "type": "SYMBOL", + "name": "argument_path" + } + ] + }, + "argument_path": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "@" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + } + } + ] + }, + "local_path": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + } + } + ] + }, + "_declaration_type": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "_variable_type" + } + ] + }, + "parenthesis": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "list": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "," + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "varadic_dots": { + "type": "STRING", + "value": "..." + }, + "struct_member": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "SYMBOL", + "name": "_declaration_type" + }, + { + "type": "FIELD", + "name": "default", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "BLANK" + } + ] + } + } + ] + }, + "_struct_final_element": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "struct_member" + } + ] + }, + { + "type": "SYMBOL", + "name": "varadic_dots" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "varadic_dots" + }, + { + "type": "STRING", + "value": "," + } + ] + } + ] + }, + "struct_definition": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "struct_member" + }, + { + "type": "STRING", + "value": "," + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_struct_final_element" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SYMBOL", + "name": "_struct_final_element" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "dictionary_member_assignment": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + "dictionary_construction": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "dictionary_member_assignment" + }, + { + "type": "STRING", + "value": "," + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "dictionary_member_assignment" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SYMBOL", + "name": "dictionary_member_assignment" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "procedural_block": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "REPEAT", + "content": { + "type": "SYMBOL", + "name": "statement" + } + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "closure_captured_variables": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "STRING", + "value": "," + } + ] + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "closure_definition": { + "type": "PREC_LEFT", + "value": -1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "struct_definition" + }, + { + "type": "SYMBOL", + "name": "path" + }, + { + "type": "SYMBOL", + "name": "void" + } + ] + }, + { + "type": "SYMBOL", + "name": "closure_captured_variables" + }, + { + "type": "STRING", + "value": "->" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "struct_definition" + }, + { + "type": "SYMBOL", + "name": "path" + }, + { + "type": "SYMBOL", + "name": "void" + } + ] + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + }, + "closed_expression": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ";" + } + ] + }, + "statement": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "assign" + }, + { + "type": "SYMBOL", + "name": "let" + }, + { + "type": "SYMBOL", + "name": "for" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "closed_expression" + } + ] + }, + "assignment_operator": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "STRING", + "value": "&=" + }, + { + "type": "STRING", + "value": "|=" + }, + { + "type": "STRING", + "value": "^=" + }, + { + "type": "STRING", + "value": "&&=" + }, + { + "type": "STRING", + "value": "||=" + }, + { + "type": "STRING", + "value": "^^=" + }, + { + "type": "STRING", + "value": "+=" + }, + { + "type": "STRING", + "value": "-=" + }, + { + "type": "STRING", + "value": "**=" + }, + { + "type": "STRING", + "value": "*=" + }, + { + "type": "STRING", + "value": "//=" + }, + { + "type": "STRING", + "value": "/=" + }, + { + "type": "STRING", + "value": "<<=" + }, + { + "type": "STRING", + "value": ">>=" + } + ] + }, + "let": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "let" + }, + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "assignment_operator" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ";" + } + ] + }, + "assign": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "path" + }, + { + "type": "SYMBOL", + "name": "assignment_operator" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ";" + } + ] + }, + "for": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "for" + }, + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "STRING", + "value": "in" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SYMBOL", + "name": "procedural_block" + } + ] + } + }, + "extras": [ + { + "type": "SYMBOL", + "name": "comment" + }, + { + "type": "SYMBOL", + "name": "_whitespace" + } + ], + "conflicts": [], + "precedences": [], + "externals": [], + "inline": [], + "supertypes": [] +} diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json new file mode 100644 index 0000000..884ab9a --- /dev/null +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -0,0 +1,892 @@ +[ + { + "type": "argument_path", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "assign", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "assignment_operator", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "path", + "named": true + } + ] + } + }, + { + "type": "assignment_operator", + "named": true, + "fields": {} + }, + { + "type": "binary_expression", + "named": true, + "fields": { + "a": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "b": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "op": { + "multiple": false, + "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": "..=", + "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": "boolean", + "named": true, + "fields": {} + }, + { + "type": "closed_expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "closure_captured_variables", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "closure_definition", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "closure_captured_variables", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "path", + "named": true + }, + { + "type": "struct_definition", + "named": true + }, + { + "type": "void", + "named": true + } + ] + } + }, + { + "type": "dictionary_construction", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "dictionary_member_assignment", + "named": true + } + ] + } + }, + { + "type": "dictionary_member_assignment", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "binary_expression", + "named": true + }, + { + "type": "boolean", + "named": true + }, + { + "type": "closure_definition", + "named": true + }, + { + "type": "default", + "named": true + }, + { + "type": "dictionary_construction", + "named": true + }, + { + "type": "if", + "named": true + }, + { + "type": "list", + "named": true + }, + { + "type": "parenthesis", + "named": true + }, + { + "type": "path", + "named": true + }, + { + "type": "procedural_block", + "named": true + }, + { + "type": "scalar", + "named": true + }, + { + "type": "signed_integer", + "named": true + }, + { + "type": "string", + "named": true + }, + { + "type": "struct_definition", + "named": true + }, + { + "type": "unary_expression", + "named": true + }, + { + "type": "unsigned_integer", + "named": true + }, + { + "type": "void", + "named": true + } + ] + } + }, + { + "type": "for", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "procedural_block", + "named": true + } + ] + } + }, + { + "type": "if", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "procedural_block", + "named": true + } + ] + } + }, + { + "type": "let", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "assignment_operator", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "list", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "local_path", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "parenthesis", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "path", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "argument_path", + "named": true + }, + { + "type": "local_path", + "named": true + } + ] + } + }, + { + "type": "procedural_block", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "statement", + "named": true + } + ] + } + }, + { + "type": "scalar", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + }, + { + "type": "number", + "named": true + }, + { + "type": "unit_quote", + "named": true + } + ] + } + }, + { + "type": "source_file", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "statement", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "assign", + "named": true + }, + { + "type": "closed_expression", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "for", + "named": true + }, + { + "type": "let", + "named": true + } + ] + } + }, + { + "type": "struct_definition", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "struct_member", + "named": true + }, + { + "type": "varadic_dots", + "named": true + } + ] + } + }, + { + "type": "struct_member", + "named": true, + "fields": { + "default": { + "multiple": true, + "required": false, + "types": [ + { + "type": "=", + "named": false + }, + { + "type": "expression", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "path", + "named": true + } + ] + } + }, + { + "type": "unary_expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "void", + "named": true, + "fields": {} + }, + { + "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": ">", + "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": "comment", + "named": true + }, + { + "type": "default", + "named": true + }, + { + "type": "else", + "named": false + }, + { + "type": "false", + "named": false + }, + { + "type": "for", + "named": false + }, + { + "type": "identifier", + "named": true + }, + { + "type": "if", + "named": false + }, + { + "type": "in", + "named": false + }, + { + "type": "let", + "named": false + }, + { + "type": "number", + "named": true + }, + { + "type": "signed_integer", + "named": true + }, + { + "type": "string", + "named": true + }, + { + "type": "true", + "named": false + }, + { + "type": "unit_quote", + "named": true + }, + { + "type": "unsigned_integer", + "named": true + }, + { + "type": "varadic_dots", + "named": true + }, + { + "type": "{", + "named": false + }, + { + "type": "|", + "named": false + }, + { + "type": "|=", + "named": false + }, + { + "type": "||", + "named": false + }, + { + "type": "||=", + "named": false + }, + { + "type": "}", + "named": false + } +] \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c new file mode 100644 index 0000000..8b45ee5 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -0,0 +1,8069 @@ +#include "tree_sitter/parser.h" + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#endif + +#define LANGUAGE_VERSION 14 +#define STATE_COUNT 158 +#define LARGE_STATE_COUNT 10 +#define SYMBOL_COUNT 104 +#define ALIAS_COUNT 0 +#define TOKEN_COUNT 67 +#define EXTERNAL_TOKEN_COUNT 0 +#define FIELD_COUNT 5 +#define MAX_ALIAS_SEQUENCE_LENGTH 5 +#define PRODUCTION_ID_COUNT 4 + +enum ts_symbol_identifiers { + sym_identifier = 1, + sym_comment = 2, + sym__whitespace = 3, + sym_string = 4, + sym_default = 5, + anon_sym_LPAREN = 6, + anon_sym_RPAREN = 7, + sym_signed_integer = 8, + sym_unsigned_integer = 9, + sym_number = 10, + sym_unit_quote = 11, + anon_sym_DOT = 12, + anon_sym_true = 13, + anon_sym_false = 14, + anon_sym_DASH = 15, + anon_sym_PLUS = 16, + anon_sym_BANG = 17, + anon_sym_STAR_STAR = 18, + anon_sym_STAR = 19, + anon_sym_SLASH = 20, + anon_sym_SLASH_SLASH = 21, + anon_sym_LT_LT = 22, + anon_sym_GT_GT = 23, + anon_sym_AMP = 24, + anon_sym_PIPE = 25, + anon_sym_CARET = 26, + anon_sym_GT = 27, + anon_sym_GT_EQ = 28, + anon_sym_EQ_EQ = 29, + anon_sym_LT_EQ = 30, + anon_sym_LT = 31, + anon_sym_BANG_EQ = 32, + anon_sym_AMP_AMP = 33, + anon_sym_PIPE_PIPE = 34, + anon_sym_DOT_DOT = 35, + anon_sym_DOT_DOT_EQ = 36, + anon_sym_if = 37, + anon_sym_else = 38, + anon_sym_AT = 39, + anon_sym_COLON = 40, + anon_sym_LBRACK = 41, + anon_sym_COMMA = 42, + anon_sym_RBRACK = 43, + sym_varadic_dots = 44, + anon_sym_EQ = 45, + anon_sym_LBRACE = 46, + anon_sym_RBRACE = 47, + anon_sym_DASH_GT = 48, + anon_sym_SEMI = 49, + anon_sym_AMP_EQ = 50, + anon_sym_PIPE_EQ = 51, + anon_sym_CARET_EQ = 52, + anon_sym_AMP_AMP_EQ = 53, + anon_sym_PIPE_PIPE_EQ = 54, + anon_sym_CARET_CARET_EQ = 55, + anon_sym_PLUS_EQ = 56, + anon_sym_DASH_EQ = 57, + anon_sym_STAR_STAR_EQ = 58, + anon_sym_STAR_EQ = 59, + anon_sym_SLASH_SLASH_EQ = 60, + anon_sym_SLASH_EQ = 61, + anon_sym_LT_LT_EQ = 62, + anon_sym_GT_GT_EQ = 63, + anon_sym_let = 64, + anon_sym_for = 65, + anon_sym_in = 66, + sym_source_file = 67, + sym_void = 68, + sym__float = 69, + sym__unit = 70, + sym_scalar = 71, + sym_boolean = 72, + sym_expression = 73, + sym_unary_expression = 74, + sym_binary_expression = 75, + sym_if = 76, + sym__variable_type = 77, + sym_path = 78, + sym_argument_path = 79, + sym_local_path = 80, + sym__declaration_type = 81, + sym_parenthesis = 82, + sym_list = 83, + sym_struct_member = 84, + sym__struct_final_element = 85, + sym_struct_definition = 86, + sym_dictionary_member_assignment = 87, + sym_dictionary_construction = 88, + sym_procedural_block = 89, + sym_closure_captured_variables = 90, + sym_closure_definition = 91, + sym_closed_expression = 92, + sym_statement = 93, + sym_assignment_operator = 94, + sym_let = 95, + sym_assign = 96, + sym_for = 97, + aux_sym_argument_path_repeat1 = 98, + aux_sym_list_repeat1 = 99, + aux_sym_struct_definition_repeat1 = 100, + aux_sym_dictionary_construction_repeat1 = 101, + aux_sym_procedural_block_repeat1 = 102, + aux_sym_closure_captured_variables_repeat1 = 103, +}; + +static const char * const ts_symbol_names[] = { + [ts_builtin_sym_end] = "end", + [sym_identifier] = "identifier", + [sym_comment] = "comment", + [sym__whitespace] = "_whitespace", + [sym_string] = "string", + [sym_default] = "default", + [anon_sym_LPAREN] = "(", + [anon_sym_RPAREN] = ")", + [sym_signed_integer] = "signed_integer", + [sym_unsigned_integer] = "unsigned_integer", + [sym_number] = "number", + [sym_unit_quote] = "unit_quote", + [anon_sym_DOT] = ".", + [anon_sym_true] = "true", + [anon_sym_false] = "false", + [anon_sym_DASH] = "-", + [anon_sym_PLUS] = "+", + [anon_sym_BANG] = "!", + [anon_sym_STAR_STAR] = "**", + [anon_sym_STAR] = "*", + [anon_sym_SLASH] = "/", + [anon_sym_SLASH_SLASH] = "//", + [anon_sym_LT_LT] = "<<", + [anon_sym_GT_GT] = ">>", + [anon_sym_AMP] = "&", + [anon_sym_PIPE] = "|", + [anon_sym_CARET] = "^", + [anon_sym_GT] = ">", + [anon_sym_GT_EQ] = ">=", + [anon_sym_EQ_EQ] = "==", + [anon_sym_LT_EQ] = "<=", + [anon_sym_LT] = "<", + [anon_sym_BANG_EQ] = "!=", + [anon_sym_AMP_AMP] = "&&", + [anon_sym_PIPE_PIPE] = "||", + [anon_sym_DOT_DOT] = "..", + [anon_sym_DOT_DOT_EQ] = "..=", + [anon_sym_if] = "if", + [anon_sym_else] = "else", + [anon_sym_AT] = "@", + [anon_sym_COLON] = ":", + [anon_sym_LBRACK] = "[", + [anon_sym_COMMA] = ",", + [anon_sym_RBRACK] = "]", + [sym_varadic_dots] = "varadic_dots", + [anon_sym_EQ] = "=", + [anon_sym_LBRACE] = "{", + [anon_sym_RBRACE] = "}", + [anon_sym_DASH_GT] = "->", + [anon_sym_SEMI] = ";", + [anon_sym_AMP_EQ] = "&=", + [anon_sym_PIPE_EQ] = "|=", + [anon_sym_CARET_EQ] = "^=", + [anon_sym_AMP_AMP_EQ] = "&&=", + [anon_sym_PIPE_PIPE_EQ] = "||=", + [anon_sym_CARET_CARET_EQ] = "^^=", + [anon_sym_PLUS_EQ] = "+=", + [anon_sym_DASH_EQ] = "-=", + [anon_sym_STAR_STAR_EQ] = "**=", + [anon_sym_STAR_EQ] = "*=", + [anon_sym_SLASH_SLASH_EQ] = "//=", + [anon_sym_SLASH_EQ] = "/=", + [anon_sym_LT_LT_EQ] = "<<=", + [anon_sym_GT_GT_EQ] = ">>=", + [anon_sym_let] = "let", + [anon_sym_for] = "for", + [anon_sym_in] = "in", + [sym_source_file] = "source_file", + [sym_void] = "void", + [sym__float] = "_float", + [sym__unit] = "_unit", + [sym_scalar] = "scalar", + [sym_boolean] = "boolean", + [sym_expression] = "expression", + [sym_unary_expression] = "unary_expression", + [sym_binary_expression] = "binary_expression", + [sym_if] = "if", + [sym__variable_type] = "_variable_type", + [sym_path] = "path", + [sym_argument_path] = "argument_path", + [sym_local_path] = "local_path", + [sym__declaration_type] = "_declaration_type", + [sym_parenthesis] = "parenthesis", + [sym_list] = "list", + [sym_struct_member] = "struct_member", + [sym__struct_final_element] = "_struct_final_element", + [sym_struct_definition] = "struct_definition", + [sym_dictionary_member_assignment] = "dictionary_member_assignment", + [sym_dictionary_construction] = "dictionary_construction", + [sym_procedural_block] = "procedural_block", + [sym_closure_captured_variables] = "closure_captured_variables", + [sym_closure_definition] = "closure_definition", + [sym_closed_expression] = "closed_expression", + [sym_statement] = "statement", + [sym_assignment_operator] = "assignment_operator", + [sym_let] = "let", + [sym_assign] = "assign", + [sym_for] = "for", + [aux_sym_argument_path_repeat1] = "argument_path_repeat1", + [aux_sym_list_repeat1] = "list_repeat1", + [aux_sym_struct_definition_repeat1] = "struct_definition_repeat1", + [aux_sym_dictionary_construction_repeat1] = "dictionary_construction_repeat1", + [aux_sym_procedural_block_repeat1] = "procedural_block_repeat1", + [aux_sym_closure_captured_variables_repeat1] = "closure_captured_variables_repeat1", +}; + +static const TSSymbol ts_symbol_map[] = { + [ts_builtin_sym_end] = ts_builtin_sym_end, + [sym_identifier] = sym_identifier, + [sym_comment] = sym_comment, + [sym__whitespace] = sym__whitespace, + [sym_string] = sym_string, + [sym_default] = sym_default, + [anon_sym_LPAREN] = anon_sym_LPAREN, + [anon_sym_RPAREN] = anon_sym_RPAREN, + [sym_signed_integer] = sym_signed_integer, + [sym_unsigned_integer] = sym_unsigned_integer, + [sym_number] = sym_number, + [sym_unit_quote] = sym_unit_quote, + [anon_sym_DOT] = anon_sym_DOT, + [anon_sym_true] = anon_sym_true, + [anon_sym_false] = anon_sym_false, + [anon_sym_DASH] = anon_sym_DASH, + [anon_sym_PLUS] = anon_sym_PLUS, + [anon_sym_BANG] = anon_sym_BANG, + [anon_sym_STAR_STAR] = anon_sym_STAR_STAR, + [anon_sym_STAR] = anon_sym_STAR, + [anon_sym_SLASH] = anon_sym_SLASH, + [anon_sym_SLASH_SLASH] = anon_sym_SLASH_SLASH, + [anon_sym_LT_LT] = anon_sym_LT_LT, + [anon_sym_GT_GT] = anon_sym_GT_GT, + [anon_sym_AMP] = anon_sym_AMP, + [anon_sym_PIPE] = anon_sym_PIPE, + [anon_sym_CARET] = anon_sym_CARET, + [anon_sym_GT] = anon_sym_GT, + [anon_sym_GT_EQ] = anon_sym_GT_EQ, + [anon_sym_EQ_EQ] = anon_sym_EQ_EQ, + [anon_sym_LT_EQ] = anon_sym_LT_EQ, + [anon_sym_LT] = anon_sym_LT, + [anon_sym_BANG_EQ] = anon_sym_BANG_EQ, + [anon_sym_AMP_AMP] = anon_sym_AMP_AMP, + [anon_sym_PIPE_PIPE] = anon_sym_PIPE_PIPE, + [anon_sym_DOT_DOT] = anon_sym_DOT_DOT, + [anon_sym_DOT_DOT_EQ] = anon_sym_DOT_DOT_EQ, + [anon_sym_if] = anon_sym_if, + [anon_sym_else] = anon_sym_else, + [anon_sym_AT] = anon_sym_AT, + [anon_sym_COLON] = anon_sym_COLON, + [anon_sym_LBRACK] = anon_sym_LBRACK, + [anon_sym_COMMA] = anon_sym_COMMA, + [anon_sym_RBRACK] = anon_sym_RBRACK, + [sym_varadic_dots] = sym_varadic_dots, + [anon_sym_EQ] = anon_sym_EQ, + [anon_sym_LBRACE] = anon_sym_LBRACE, + [anon_sym_RBRACE] = anon_sym_RBRACE, + [anon_sym_DASH_GT] = anon_sym_DASH_GT, + [anon_sym_SEMI] = anon_sym_SEMI, + [anon_sym_AMP_EQ] = anon_sym_AMP_EQ, + [anon_sym_PIPE_EQ] = anon_sym_PIPE_EQ, + [anon_sym_CARET_EQ] = anon_sym_CARET_EQ, + [anon_sym_AMP_AMP_EQ] = anon_sym_AMP_AMP_EQ, + [anon_sym_PIPE_PIPE_EQ] = anon_sym_PIPE_PIPE_EQ, + [anon_sym_CARET_CARET_EQ] = anon_sym_CARET_CARET_EQ, + [anon_sym_PLUS_EQ] = anon_sym_PLUS_EQ, + [anon_sym_DASH_EQ] = anon_sym_DASH_EQ, + [anon_sym_STAR_STAR_EQ] = anon_sym_STAR_STAR_EQ, + [anon_sym_STAR_EQ] = anon_sym_STAR_EQ, + [anon_sym_SLASH_SLASH_EQ] = anon_sym_SLASH_SLASH_EQ, + [anon_sym_SLASH_EQ] = anon_sym_SLASH_EQ, + [anon_sym_LT_LT_EQ] = anon_sym_LT_LT_EQ, + [anon_sym_GT_GT_EQ] = anon_sym_GT_GT_EQ, + [anon_sym_let] = anon_sym_let, + [anon_sym_for] = anon_sym_for, + [anon_sym_in] = anon_sym_in, + [sym_source_file] = sym_source_file, + [sym_void] = sym_void, + [sym__float] = sym__float, + [sym__unit] = sym__unit, + [sym_scalar] = sym_scalar, + [sym_boolean] = sym_boolean, + [sym_expression] = sym_expression, + [sym_unary_expression] = sym_unary_expression, + [sym_binary_expression] = sym_binary_expression, + [sym_if] = sym_if, + [sym__variable_type] = sym__variable_type, + [sym_path] = sym_path, + [sym_argument_path] = sym_argument_path, + [sym_local_path] = sym_local_path, + [sym__declaration_type] = sym__declaration_type, + [sym_parenthesis] = sym_parenthesis, + [sym_list] = sym_list, + [sym_struct_member] = sym_struct_member, + [sym__struct_final_element] = sym__struct_final_element, + [sym_struct_definition] = sym_struct_definition, + [sym_dictionary_member_assignment] = sym_dictionary_member_assignment, + [sym_dictionary_construction] = sym_dictionary_construction, + [sym_procedural_block] = sym_procedural_block, + [sym_closure_captured_variables] = sym_closure_captured_variables, + [sym_closure_definition] = sym_closure_definition, + [sym_closed_expression] = sym_closed_expression, + [sym_statement] = sym_statement, + [sym_assignment_operator] = sym_assignment_operator, + [sym_let] = sym_let, + [sym_assign] = sym_assign, + [sym_for] = sym_for, + [aux_sym_argument_path_repeat1] = aux_sym_argument_path_repeat1, + [aux_sym_list_repeat1] = aux_sym_list_repeat1, + [aux_sym_struct_definition_repeat1] = aux_sym_struct_definition_repeat1, + [aux_sym_dictionary_construction_repeat1] = aux_sym_dictionary_construction_repeat1, + [aux_sym_procedural_block_repeat1] = aux_sym_procedural_block_repeat1, + [aux_sym_closure_captured_variables_repeat1] = aux_sym_closure_captured_variables_repeat1, +}; + +static const TSSymbolMetadata ts_symbol_metadata[] = { + [ts_builtin_sym_end] = { + .visible = false, + .named = true, + }, + [sym_identifier] = { + .visible = true, + .named = true, + }, + [sym_comment] = { + .visible = true, + .named = true, + }, + [sym__whitespace] = { + .visible = false, + .named = true, + }, + [sym_string] = { + .visible = true, + .named = true, + }, + [sym_default] = { + .visible = true, + .named = true, + }, + [anon_sym_LPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_RPAREN] = { + .visible = true, + .named = false, + }, + [sym_signed_integer] = { + .visible = true, + .named = true, + }, + [sym_unsigned_integer] = { + .visible = true, + .named = true, + }, + [sym_number] = { + .visible = true, + .named = true, + }, + [sym_unit_quote] = { + .visible = true, + .named = true, + }, + [anon_sym_DOT] = { + .visible = true, + .named = false, + }, + [anon_sym_true] = { + .visible = true, + .named = false, + }, + [anon_sym_false] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH] = { + .visible = true, + .named = false, + }, + [anon_sym_PLUS] = { + .visible = true, + .named = false, + }, + [anon_sym_BANG] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR_STAR] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH_SLASH] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_LT] = { + .visible = true, + .named = false, + }, + [anon_sym_GT_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_AMP] = { + .visible = true, + .named = false, + }, + [anon_sym_PIPE] = { + .visible = true, + .named = false, + }, + [anon_sym_CARET] = { + .visible = true, + .named = false, + }, + [anon_sym_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_GT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_LT] = { + .visible = true, + .named = false, + }, + [anon_sym_BANG_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_AMP_AMP] = { + .visible = true, + .named = false, + }, + [anon_sym_PIPE_PIPE] = { + .visible = true, + .named = false, + }, + [anon_sym_DOT_DOT] = { + .visible = true, + .named = false, + }, + [anon_sym_DOT_DOT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_if] = { + .visible = true, + .named = false, + }, + [anon_sym_else] = { + .visible = true, + .named = false, + }, + [anon_sym_AT] = { + .visible = true, + .named = false, + }, + [anon_sym_COLON] = { + .visible = true, + .named = false, + }, + [anon_sym_LBRACK] = { + .visible = true, + .named = false, + }, + [anon_sym_COMMA] = { + .visible = true, + .named = false, + }, + [anon_sym_RBRACK] = { + .visible = true, + .named = false, + }, + [sym_varadic_dots] = { + .visible = true, + .named = true, + }, + [anon_sym_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_LBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_RBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_SEMI] = { + .visible = true, + .named = false, + }, + [anon_sym_AMP_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_PIPE_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_CARET_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_AMP_AMP_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_PIPE_PIPE_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_CARET_CARET_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_PLUS_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR_STAR_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH_SLASH_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_LT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_GT_GT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_let] = { + .visible = true, + .named = false, + }, + [anon_sym_for] = { + .visible = true, + .named = false, + }, + [anon_sym_in] = { + .visible = true, + .named = false, + }, + [sym_source_file] = { + .visible = true, + .named = true, + }, + [sym_void] = { + .visible = true, + .named = true, + }, + [sym__float] = { + .visible = false, + .named = true, + }, + [sym__unit] = { + .visible = false, + .named = true, + }, + [sym_scalar] = { + .visible = true, + .named = true, + }, + [sym_boolean] = { + .visible = true, + .named = true, + }, + [sym_expression] = { + .visible = true, + .named = true, + }, + [sym_unary_expression] = { + .visible = true, + .named = true, + }, + [sym_binary_expression] = { + .visible = true, + .named = true, + }, + [sym_if] = { + .visible = true, + .named = true, + }, + [sym__variable_type] = { + .visible = false, + .named = true, + }, + [sym_path] = { + .visible = true, + .named = true, + }, + [sym_argument_path] = { + .visible = true, + .named = true, + }, + [sym_local_path] = { + .visible = true, + .named = true, + }, + [sym__declaration_type] = { + .visible = false, + .named = true, + }, + [sym_parenthesis] = { + .visible = true, + .named = true, + }, + [sym_list] = { + .visible = true, + .named = true, + }, + [sym_struct_member] = { + .visible = true, + .named = true, + }, + [sym__struct_final_element] = { + .visible = false, + .named = true, + }, + [sym_struct_definition] = { + .visible = true, + .named = true, + }, + [sym_dictionary_member_assignment] = { + .visible = true, + .named = true, + }, + [sym_dictionary_construction] = { + .visible = true, + .named = true, + }, + [sym_procedural_block] = { + .visible = true, + .named = true, + }, + [sym_closure_captured_variables] = { + .visible = true, + .named = true, + }, + [sym_closure_definition] = { + .visible = true, + .named = true, + }, + [sym_closed_expression] = { + .visible = true, + .named = true, + }, + [sym_statement] = { + .visible = true, + .named = true, + }, + [sym_assignment_operator] = { + .visible = true, + .named = true, + }, + [sym_let] = { + .visible = true, + .named = true, + }, + [sym_assign] = { + .visible = true, + .named = true, + }, + [sym_for] = { + .visible = true, + .named = true, + }, + [aux_sym_argument_path_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_list_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_struct_definition_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_dictionary_construction_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_procedural_block_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_closure_captured_variables_repeat1] = { + .visible = false, + .named = false, + }, +}; + +enum ts_field_identifiers { + field_a = 1, + field_b = 2, + field_default = 3, + field_name = 4, + field_op = 5, +}; + +static const char * const ts_field_names[] = { + [0] = NULL, + [field_a] = "a", + [field_b] = "b", + [field_default] = "default", + [field_name] = "name", + [field_op] = "op", +}; + +static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { + [1] = {.index = 0, .length = 1}, + [2] = {.index = 1, .length = 3}, + [3] = {.index = 4, .length = 3}, +}; + +static const TSFieldMapEntry ts_field_map_entries[] = { + [0] = + {field_name, 0}, + [1] = + {field_a, 0}, + {field_b, 2}, + {field_op, 1}, + [4] = + {field_default, 2}, + {field_default, 3}, + {field_name, 0}, +}; + +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] = 4, + [5] = 5, + [6] = 6, + [7] = 7, + [8] = 8, + [9] = 9, + [10] = 10, + [11] = 11, + [12] = 12, + [13] = 13, + [14] = 14, + [15] = 15, + [16] = 16, + [17] = 17, + [18] = 18, + [19] = 19, + [20] = 20, + [21] = 21, + [22] = 22, + [23] = 23, + [24] = 24, + [25] = 25, + [26] = 26, + [27] = 27, + [28] = 28, + [29] = 29, + [30] = 30, + [31] = 31, + [32] = 32, + [33] = 33, + [34] = 34, + [35] = 35, + [36] = 36, + [37] = 37, + [38] = 38, + [39] = 39, + [40] = 40, + [41] = 41, + [42] = 42, + [43] = 43, + [44] = 44, + [45] = 45, + [46] = 46, + [47] = 47, + [48] = 48, + [49] = 49, + [50] = 50, + [51] = 51, + [52] = 51, + [53] = 53, + [54] = 54, + [55] = 55, + [56] = 56, + [57] = 57, + [58] = 58, + [59] = 59, + [60] = 60, + [61] = 61, + [62] = 62, + [63] = 62, + [64] = 64, + [65] = 65, + [66] = 66, + [67] = 67, + [68] = 68, + [69] = 69, + [70] = 70, + [71] = 58, + [72] = 53, + [73] = 54, + [74] = 64, + [75] = 65, + [76] = 66, + [77] = 67, + [78] = 68, + [79] = 69, + [80] = 61, + [81] = 70, + [82] = 82, + [83] = 33, + [84] = 35, + [85] = 85, + [86] = 41, + [87] = 40, + [88] = 43, + [89] = 39, + [90] = 42, + [91] = 36, + [92] = 44, + [93] = 38, + [94] = 45, + [95] = 46, + [96] = 47, + [97] = 97, + [98] = 98, + [99] = 99, + [100] = 100, + [101] = 101, + [102] = 102, + [103] = 103, + [104] = 104, + [105] = 105, + [106] = 106, + [107] = 107, + [108] = 108, + [109] = 109, + [110] = 110, + [111] = 111, + [112] = 112, + [113] = 113, + [114] = 114, + [115] = 115, + [116] = 116, + [117] = 116, + [118] = 118, + [119] = 119, + [120] = 120, + [121] = 121, + [122] = 122, + [123] = 123, + [124] = 124, + [125] = 125, + [126] = 126, + [127] = 127, + [128] = 128, + [129] = 129, + [130] = 130, + [131] = 131, + [132] = 132, + [133] = 133, + [134] = 134, + [135] = 135, + [136] = 136, + [137] = 137, + [138] = 138, + [139] = 139, + [140] = 140, + [141] = 141, + [142] = 142, + [143] = 143, + [144] = 144, + [145] = 145, + [146] = 146, + [147] = 147, + [148] = 148, + [149] = 149, + [150] = 150, + [151] = 151, + [152] = 152, + [153] = 153, + [154] = 154, + [155] = 155, + [156] = 156, + [157] = 146, +}; + +static bool ts_lex(TSLexer *lexer, TSStateId state) { + START_LEXER(); + eof = lexer->eof(lexer); + switch (state) { + case 0: + if (eof) ADVANCE(12); + ADVANCE_MAP( + '!', 34, + '"', 2, + '#', 13, + '&', 41, + '\'', 5, + '(', 18, + ')', 19, + '*', 36, + '+', 32, + ',', 58, + '-', 30, + '.', 26, + '/', 37, + ':', 56, + ';', 65, + '<', 48, + '=', 61, + '>', 44, + '@', 55, + '[', 57, + ']', 59, + '^', 43, + '{', 62, + '|', 42, + '}', 63, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(14); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); + END_STATE(); + case 1: + ADVANCE_MAP( + '!', 33, + '"', 2, + '#', 13, + '(', 18, + ')', 19, + '+', 31, + '-', 28, + '.', 8, + '@', 55, + '[', 57, + '{', 62, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(14); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); + END_STATE(); + case 2: + if (lookahead == '"') ADVANCE(16); + if (lookahead == '\\') ADVANCE(3); + if (lookahead != 0) ADVANCE(2); + END_STATE(); + case 3: + if (lookahead == '"') ADVANCE(17); + if (lookahead == '\\') ADVANCE(3); + if (lookahead != 0) ADVANCE(2); + END_STATE(); + case 4: + if (lookahead == '#') ADVANCE(13); + if (lookahead == '-') ADVANCE(10); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(14); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(23); + END_STATE(); + case 5: + if (lookahead == '\'') ADVANCE(24); + if (lookahead == '\\') ADVANCE(6); + if (lookahead != 0) ADVANCE(5); + END_STATE(); + case 6: + if (lookahead == '\'') ADVANCE(25); + if (lookahead == '\\') ADVANCE(6); + if (lookahead != 0) ADVANCE(5); + END_STATE(); + case 7: + if (lookahead == '.') ADVANCE(60); + END_STATE(); + case 8: + if (lookahead == '.') ADVANCE(7); + END_STATE(); + case 9: + if (lookahead == '=') ADVANCE(71); + END_STATE(); + case 10: + if (lookahead == '>') ADVANCE(64); + END_STATE(); + case 11: + if (eof) ADVANCE(12); + ADVANCE_MAP( + '!', 34, + '"', 2, + '#', 13, + '&', 41, + '\'', 5, + '(', 18, + ')', 19, + '*', 36, + '+', 32, + ',', 58, + '-', 29, + '.', 27, + '/', 37, + ':', 56, + ';', 65, + '<', 48, + '=', 61, + '>', 44, + '@', 55, + '[', 57, + ']', 59, + '^', 43, + '{', 62, + '|', 42, + '}', 63, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(14); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); + END_STATE(); + case 12: + ACCEPT_TOKEN(ts_builtin_sym_end); + END_STATE(); + case 13: + ACCEPT_TOKEN(sym_comment); + if (lookahead != 0 && + lookahead != '\n') ADVANCE(13); + END_STATE(); + case 14: + ACCEPT_TOKEN(sym__whitespace); + END_STATE(); + case 15: + ACCEPT_TOKEN(sym_identifier); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); + END_STATE(); + case 16: + ACCEPT_TOKEN(sym_string); + END_STATE(); + case 17: + ACCEPT_TOKEN(sym_string); + if (lookahead == '"') ADVANCE(16); + if (lookahead == '\\') ADVANCE(3); + if (lookahead != 0) ADVANCE(2); + END_STATE(); + case 18: + ACCEPT_TOKEN(anon_sym_LPAREN); + END_STATE(); + case 19: + ACCEPT_TOKEN(anon_sym_RPAREN); + END_STATE(); + case 20: + ACCEPT_TOKEN(sym_signed_integer); + END_STATE(); + case 21: + ACCEPT_TOKEN(sym_unsigned_integer); + END_STATE(); + case 22: + ACCEPT_TOKEN(sym_number); + if (lookahead == 'I' || + lookahead == 'i') ADVANCE(20); + if (lookahead == 'U' || + lookahead == 'u') ADVANCE(21); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); + END_STATE(); + case 23: + ACCEPT_TOKEN(sym_number); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(23); + END_STATE(); + case 24: + ACCEPT_TOKEN(sym_unit_quote); + END_STATE(); + case 25: + ACCEPT_TOKEN(sym_unit_quote); + if (lookahead == '\'') ADVANCE(24); + if (lookahead == '\\') ADVANCE(6); + if (lookahead != 0) ADVANCE(5); + END_STATE(); + case 26: + ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(52); + END_STATE(); + case 27: + ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(53); + END_STATE(); + case 28: + ACCEPT_TOKEN(anon_sym_DASH); + END_STATE(); + case 29: + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '=') ADVANCE(73); + END_STATE(); + case 30: + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '=') ADVANCE(73); + if (lookahead == '>') ADVANCE(64); + END_STATE(); + case 31: + ACCEPT_TOKEN(anon_sym_PLUS); + END_STATE(); + case 32: + ACCEPT_TOKEN(anon_sym_PLUS); + if (lookahead == '=') ADVANCE(72); + END_STATE(); + case 33: + ACCEPT_TOKEN(anon_sym_BANG); + END_STATE(); + case 34: + ACCEPT_TOKEN(anon_sym_BANG); + if (lookahead == '=') ADVANCE(49); + END_STATE(); + case 35: + ACCEPT_TOKEN(anon_sym_STAR_STAR); + if (lookahead == '=') ADVANCE(74); + END_STATE(); + case 36: + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '*') ADVANCE(35); + if (lookahead == '=') ADVANCE(75); + END_STATE(); + case 37: + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '/') ADVANCE(38); + if (lookahead == '=') ADVANCE(77); + END_STATE(); + case 38: + ACCEPT_TOKEN(anon_sym_SLASH_SLASH); + if (lookahead == '=') ADVANCE(76); + END_STATE(); + case 39: + ACCEPT_TOKEN(anon_sym_LT_LT); + if (lookahead == '=') ADVANCE(78); + END_STATE(); + case 40: + ACCEPT_TOKEN(anon_sym_GT_GT); + if (lookahead == '=') ADVANCE(79); + END_STATE(); + case 41: + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(50); + if (lookahead == '=') ADVANCE(66); + END_STATE(); + case 42: + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '=') ADVANCE(67); + if (lookahead == '|') ADVANCE(51); + END_STATE(); + case 43: + ACCEPT_TOKEN(anon_sym_CARET); + if (lookahead == '=') ADVANCE(68); + if (lookahead == '^') ADVANCE(9); + END_STATE(); + case 44: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(45); + if (lookahead == '>') ADVANCE(40); + END_STATE(); + case 45: + ACCEPT_TOKEN(anon_sym_GT_EQ); + END_STATE(); + case 46: + ACCEPT_TOKEN(anon_sym_EQ_EQ); + END_STATE(); + case 47: + ACCEPT_TOKEN(anon_sym_LT_EQ); + END_STATE(); + case 48: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '<') ADVANCE(39); + if (lookahead == '=') ADVANCE(47); + END_STATE(); + case 49: + ACCEPT_TOKEN(anon_sym_BANG_EQ); + END_STATE(); + case 50: + ACCEPT_TOKEN(anon_sym_AMP_AMP); + if (lookahead == '=') ADVANCE(69); + END_STATE(); + case 51: + ACCEPT_TOKEN(anon_sym_PIPE_PIPE); + if (lookahead == '=') ADVANCE(70); + END_STATE(); + case 52: + ACCEPT_TOKEN(anon_sym_DOT_DOT); + if (lookahead == '.') ADVANCE(60); + if (lookahead == '=') ADVANCE(54); + END_STATE(); + case 53: + ACCEPT_TOKEN(anon_sym_DOT_DOT); + if (lookahead == '=') ADVANCE(54); + END_STATE(); + case 54: + ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); + END_STATE(); + case 55: + ACCEPT_TOKEN(anon_sym_AT); + END_STATE(); + case 56: + ACCEPT_TOKEN(anon_sym_COLON); + END_STATE(); + case 57: + ACCEPT_TOKEN(anon_sym_LBRACK); + END_STATE(); + case 58: + ACCEPT_TOKEN(anon_sym_COMMA); + END_STATE(); + case 59: + ACCEPT_TOKEN(anon_sym_RBRACK); + END_STATE(); + case 60: + ACCEPT_TOKEN(sym_varadic_dots); + END_STATE(); + case 61: + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '=') ADVANCE(46); + END_STATE(); + case 62: + ACCEPT_TOKEN(anon_sym_LBRACE); + END_STATE(); + case 63: + ACCEPT_TOKEN(anon_sym_RBRACE); + END_STATE(); + case 64: + ACCEPT_TOKEN(anon_sym_DASH_GT); + END_STATE(); + case 65: + ACCEPT_TOKEN(anon_sym_SEMI); + END_STATE(); + case 66: + ACCEPT_TOKEN(anon_sym_AMP_EQ); + END_STATE(); + case 67: + ACCEPT_TOKEN(anon_sym_PIPE_EQ); + END_STATE(); + case 68: + ACCEPT_TOKEN(anon_sym_CARET_EQ); + END_STATE(); + case 69: + ACCEPT_TOKEN(anon_sym_AMP_AMP_EQ); + END_STATE(); + case 70: + ACCEPT_TOKEN(anon_sym_PIPE_PIPE_EQ); + END_STATE(); + case 71: + ACCEPT_TOKEN(anon_sym_CARET_CARET_EQ); + END_STATE(); + case 72: + ACCEPT_TOKEN(anon_sym_PLUS_EQ); + END_STATE(); + case 73: + ACCEPT_TOKEN(anon_sym_DASH_EQ); + END_STATE(); + case 74: + ACCEPT_TOKEN(anon_sym_STAR_STAR_EQ); + END_STATE(); + case 75: + ACCEPT_TOKEN(anon_sym_STAR_EQ); + END_STATE(); + case 76: + ACCEPT_TOKEN(anon_sym_SLASH_SLASH_EQ); + END_STATE(); + case 77: + ACCEPT_TOKEN(anon_sym_SLASH_EQ); + END_STATE(); + case 78: + ACCEPT_TOKEN(anon_sym_LT_LT_EQ); + END_STATE(); + case 79: + ACCEPT_TOKEN(anon_sym_GT_GT_EQ); + 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 == 'd') ADVANCE(1); + if (lookahead == 'e') ADVANCE(2); + if (lookahead == 'f') ADVANCE(3); + if (lookahead == 'i') ADVANCE(4); + if (lookahead == 'l') ADVANCE(5); + if (lookahead == 't') ADVANCE(6); + END_STATE(); + case 1: + if (lookahead == 'e') ADVANCE(7); + END_STATE(); + case 2: + if (lookahead == 'l') ADVANCE(8); + END_STATE(); + case 3: + if (lookahead == 'a') ADVANCE(9); + if (lookahead == 'o') ADVANCE(10); + END_STATE(); + case 4: + if (lookahead == 'f') ADVANCE(11); + if (lookahead == 'n') ADVANCE(12); + END_STATE(); + case 5: + if (lookahead == 'e') ADVANCE(13); + END_STATE(); + case 6: + if (lookahead == 'r') ADVANCE(14); + END_STATE(); + case 7: + if (lookahead == 'f') ADVANCE(15); + END_STATE(); + case 8: + if (lookahead == 's') ADVANCE(16); + END_STATE(); + case 9: + if (lookahead == 'l') ADVANCE(17); + END_STATE(); + case 10: + if (lookahead == 'r') ADVANCE(18); + END_STATE(); + case 11: + ACCEPT_TOKEN(anon_sym_if); + END_STATE(); + case 12: + ACCEPT_TOKEN(anon_sym_in); + END_STATE(); + case 13: + if (lookahead == 't') ADVANCE(19); + END_STATE(); + case 14: + if (lookahead == 'u') ADVANCE(20); + END_STATE(); + case 15: + if (lookahead == 'a') ADVANCE(21); + END_STATE(); + case 16: + if (lookahead == 'e') ADVANCE(22); + END_STATE(); + case 17: + if (lookahead == 's') ADVANCE(23); + END_STATE(); + case 18: + ACCEPT_TOKEN(anon_sym_for); + END_STATE(); + case 19: + ACCEPT_TOKEN(anon_sym_let); + END_STATE(); + case 20: + if (lookahead == 'e') ADVANCE(24); + END_STATE(); + case 21: + if (lookahead == 'u') ADVANCE(25); + END_STATE(); + case 22: + ACCEPT_TOKEN(anon_sym_else); + END_STATE(); + case 23: + if (lookahead == 'e') ADVANCE(26); + END_STATE(); + case 24: + ACCEPT_TOKEN(anon_sym_true); + END_STATE(); + case 25: + if (lookahead == 'l') ADVANCE(27); + END_STATE(); + case 26: + ACCEPT_TOKEN(anon_sym_false); + END_STATE(); + case 27: + if (lookahead == 't') ADVANCE(28); + END_STATE(); + case 28: + ACCEPT_TOKEN(sym_default); + END_STATE(); + default: + return false; + } +} + +static const TSLexMode ts_lex_modes[STATE_COUNT] = { + [0] = {.lex_state = 0}, + [1] = {.lex_state = 11}, + [2] = {.lex_state = 11}, + [3] = {.lex_state = 11}, + [4] = {.lex_state = 11}, + [5] = {.lex_state = 11}, + [6] = {.lex_state = 11}, + [7] = {.lex_state = 11}, + [8] = {.lex_state = 11}, + [9] = {.lex_state = 11}, + [10] = {.lex_state = 11}, + [11] = {.lex_state = 11}, + [12] = {.lex_state = 11}, + [13] = {.lex_state = 11}, + [14] = {.lex_state = 11}, + [15] = {.lex_state = 11}, + [16] = {.lex_state = 11}, + [17] = {.lex_state = 11}, + [18] = {.lex_state = 11}, + [19] = {.lex_state = 11}, + [20] = {.lex_state = 11}, + [21] = {.lex_state = 11}, + [22] = {.lex_state = 11}, + [23] = {.lex_state = 11}, + [24] = {.lex_state = 11}, + [25] = {.lex_state = 11}, + [26] = {.lex_state = 11}, + [27] = {.lex_state = 11}, + [28] = {.lex_state = 11}, + [29] = {.lex_state = 11}, + [30] = {.lex_state = 11}, + [31] = {.lex_state = 11}, + [32] = {.lex_state = 11}, + [33] = {.lex_state = 11}, + [34] = {.lex_state = 1}, + [35] = {.lex_state = 11}, + [36] = {.lex_state = 11}, + [37] = {.lex_state = 11}, + [38] = {.lex_state = 11}, + [39] = {.lex_state = 11}, + [40] = {.lex_state = 11}, + [41] = {.lex_state = 11}, + [42] = {.lex_state = 11}, + [43] = {.lex_state = 11}, + [44] = {.lex_state = 11}, + [45] = {.lex_state = 11}, + [46] = {.lex_state = 11}, + [47] = {.lex_state = 11}, + [48] = {.lex_state = 11}, + [49] = {.lex_state = 11}, + [50] = {.lex_state = 11}, + [51] = {.lex_state = 11}, + [52] = {.lex_state = 11}, + [53] = {.lex_state = 11}, + [54] = {.lex_state = 11}, + [55] = {.lex_state = 11}, + [56] = {.lex_state = 11}, + [57] = {.lex_state = 11}, + [58] = {.lex_state = 11}, + [59] = {.lex_state = 11}, + [60] = {.lex_state = 11}, + [61] = {.lex_state = 11}, + [62] = {.lex_state = 11}, + [63] = {.lex_state = 11}, + [64] = {.lex_state = 11}, + [65] = {.lex_state = 11}, + [66] = {.lex_state = 11}, + [67] = {.lex_state = 11}, + [68] = {.lex_state = 11}, + [69] = {.lex_state = 11}, + [70] = {.lex_state = 11}, + [71] = {.lex_state = 11}, + [72] = {.lex_state = 11}, + [73] = {.lex_state = 11}, + [74] = {.lex_state = 11}, + [75] = {.lex_state = 11}, + [76] = {.lex_state = 11}, + [77] = {.lex_state = 11}, + [78] = {.lex_state = 11}, + [79] = {.lex_state = 11}, + [80] = {.lex_state = 11}, + [81] = {.lex_state = 11}, + [82] = {.lex_state = 11}, + [83] = {.lex_state = 11}, + [84] = {.lex_state = 11}, + [85] = {.lex_state = 11}, + [86] = {.lex_state = 11}, + [87] = {.lex_state = 11}, + [88] = {.lex_state = 11}, + [89] = {.lex_state = 11}, + [90] = {.lex_state = 11}, + [91] = {.lex_state = 11}, + [92] = {.lex_state = 11}, + [93] = {.lex_state = 11}, + [94] = {.lex_state = 11}, + [95] = {.lex_state = 11}, + [96] = {.lex_state = 11}, + [97] = {.lex_state = 11}, + [98] = {.lex_state = 11}, + [99] = {.lex_state = 11}, + [100] = {.lex_state = 11}, + [101] = {.lex_state = 11}, + [102] = {.lex_state = 11}, + [103] = {.lex_state = 11}, + [104] = {.lex_state = 11}, + [105] = {.lex_state = 11}, + [106] = {.lex_state = 11}, + [107] = {.lex_state = 11}, + [108] = {.lex_state = 11}, + [109] = {.lex_state = 11}, + [110] = {.lex_state = 11}, + [111] = {.lex_state = 11}, + [112] = {.lex_state = 11}, + [113] = {.lex_state = 11}, + [114] = {.lex_state = 0}, + [115] = {.lex_state = 11}, + [116] = {.lex_state = 0}, + [117] = {.lex_state = 0}, + [118] = {.lex_state = 1}, + [119] = {.lex_state = 1}, + [120] = {.lex_state = 0}, + [121] = {.lex_state = 1}, + [122] = {.lex_state = 0}, + [123] = {.lex_state = 0}, + [124] = {.lex_state = 0}, + [125] = {.lex_state = 1}, + [126] = {.lex_state = 0}, + [127] = {.lex_state = 0}, + [128] = {.lex_state = 0}, + [129] = {.lex_state = 0}, + [130] = {.lex_state = 0}, + [131] = {.lex_state = 0}, + [132] = {.lex_state = 0}, + [133] = {.lex_state = 0}, + [134] = {.lex_state = 0}, + [135] = {.lex_state = 0}, + [136] = {.lex_state = 0}, + [137] = {.lex_state = 0}, + [138] = {.lex_state = 0}, + [139] = {.lex_state = 0}, + [140] = {.lex_state = 0}, + [141] = {.lex_state = 0}, + [142] = {.lex_state = 0}, + [143] = {.lex_state = 4}, + [144] = {.lex_state = 0}, + [145] = {.lex_state = 0}, + [146] = {.lex_state = 4}, + [147] = {.lex_state = 0}, + [148] = {.lex_state = 0}, + [149] = {.lex_state = 0}, + [150] = {.lex_state = 4}, + [151] = {.lex_state = 4}, + [152] = {.lex_state = 0}, + [153] = {.lex_state = 4}, + [154] = {.lex_state = 0}, + [155] = {.lex_state = 0}, + [156] = {.lex_state = 0}, + [157] = {.lex_state = 4}, +}; + +static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { + [0] = { + [ts_builtin_sym_end] = ACTIONS(1), + [sym_identifier] = ACTIONS(1), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(1), + [sym_default] = ACTIONS(1), + [anon_sym_LPAREN] = ACTIONS(1), + [anon_sym_RPAREN] = ACTIONS(1), + [sym_signed_integer] = ACTIONS(1), + [sym_unsigned_integer] = ACTIONS(1), + [sym_number] = ACTIONS(1), + [sym_unit_quote] = ACTIONS(1), + [anon_sym_DOT] = ACTIONS(1), + [anon_sym_true] = ACTIONS(1), + [anon_sym_false] = ACTIONS(1), + [anon_sym_DASH] = ACTIONS(1), + [anon_sym_PLUS] = ACTIONS(1), + [anon_sym_BANG] = ACTIONS(1), + [anon_sym_STAR_STAR] = ACTIONS(1), + [anon_sym_STAR] = ACTIONS(1), + [anon_sym_SLASH] = ACTIONS(1), + [anon_sym_SLASH_SLASH] = ACTIONS(1), + [anon_sym_LT_LT] = ACTIONS(1), + [anon_sym_GT_GT] = ACTIONS(1), + [anon_sym_AMP] = ACTIONS(1), + [anon_sym_PIPE] = ACTIONS(1), + [anon_sym_CARET] = ACTIONS(1), + [anon_sym_GT] = ACTIONS(1), + [anon_sym_GT_EQ] = ACTIONS(1), + [anon_sym_EQ_EQ] = ACTIONS(1), + [anon_sym_LT_EQ] = ACTIONS(1), + [anon_sym_LT] = ACTIONS(1), + [anon_sym_BANG_EQ] = ACTIONS(1), + [anon_sym_AMP_AMP] = ACTIONS(1), + [anon_sym_PIPE_PIPE] = ACTIONS(1), + [anon_sym_DOT_DOT] = ACTIONS(1), + [anon_sym_DOT_DOT_EQ] = ACTIONS(1), + [anon_sym_if] = ACTIONS(1), + [anon_sym_else] = ACTIONS(1), + [anon_sym_AT] = ACTIONS(1), + [anon_sym_COLON] = ACTIONS(1), + [anon_sym_LBRACK] = ACTIONS(1), + [anon_sym_COMMA] = ACTIONS(1), + [anon_sym_RBRACK] = ACTIONS(1), + [sym_varadic_dots] = ACTIONS(1), + [anon_sym_EQ] = ACTIONS(1), + [anon_sym_LBRACE] = ACTIONS(1), + [anon_sym_RBRACE] = ACTIONS(1), + [anon_sym_DASH_GT] = ACTIONS(1), + [anon_sym_SEMI] = ACTIONS(1), + [anon_sym_AMP_EQ] = ACTIONS(1), + [anon_sym_PIPE_EQ] = ACTIONS(1), + [anon_sym_CARET_EQ] = ACTIONS(1), + [anon_sym_AMP_AMP_EQ] = ACTIONS(1), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(1), + [anon_sym_CARET_CARET_EQ] = ACTIONS(1), + [anon_sym_PLUS_EQ] = ACTIONS(1), + [anon_sym_DASH_EQ] = ACTIONS(1), + [anon_sym_STAR_STAR_EQ] = ACTIONS(1), + [anon_sym_STAR_EQ] = ACTIONS(1), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(1), + [anon_sym_SLASH_EQ] = ACTIONS(1), + [anon_sym_LT_LT_EQ] = ACTIONS(1), + [anon_sym_GT_GT_EQ] = ACTIONS(1), + [anon_sym_let] = ACTIONS(1), + [anon_sym_for] = ACTIONS(1), + [anon_sym_in] = ACTIONS(1), + }, + [1] = { + [sym_source_file] = STATE(144), + [sym_void] = STATE(84), + [sym__float] = STATE(83), + [sym_scalar] = STATE(20), + [sym_boolean] = STATE(20), + [sym_expression] = STATE(107), + [sym_unary_expression] = STATE(20), + [sym_binary_expression] = STATE(20), + [sym_if] = STATE(20), + [sym_path] = STATE(84), + [sym_argument_path] = STATE(8), + [sym_local_path] = STATE(8), + [sym_parenthesis] = STATE(20), + [sym_list] = STATE(20), + [sym_struct_definition] = STATE(84), + [sym_dictionary_construction] = STATE(20), + [sym_procedural_block] = STATE(20), + [sym_closure_definition] = STATE(20), + [sym_identifier] = ACTIONS(5), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(7), + [sym_default] = ACTIONS(9), + [anon_sym_LPAREN] = ACTIONS(11), + [sym_signed_integer] = ACTIONS(7), + [sym_unsigned_integer] = ACTIONS(7), + [sym_number] = ACTIONS(13), + [anon_sym_true] = ACTIONS(15), + [anon_sym_false] = ACTIONS(15), + [anon_sym_DASH] = ACTIONS(17), + [anon_sym_PLUS] = ACTIONS(17), + [anon_sym_BANG] = ACTIONS(17), + [anon_sym_if] = ACTIONS(19), + [anon_sym_AT] = ACTIONS(21), + [anon_sym_LBRACK] = ACTIONS(23), + [anon_sym_LBRACE] = ACTIONS(25), + }, + [2] = { + [aux_sym_argument_path_repeat1] = STATE(4), + [ts_builtin_sym_end] = ACTIONS(27), + [sym_identifier] = ACTIONS(29), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(27), + [sym_default] = ACTIONS(29), + [anon_sym_LPAREN] = ACTIONS(27), + [anon_sym_RPAREN] = ACTIONS(27), + [sym_signed_integer] = ACTIONS(27), + [sym_unsigned_integer] = ACTIONS(27), + [sym_number] = ACTIONS(29), + [anon_sym_DOT] = ACTIONS(31), + [anon_sym_true] = ACTIONS(29), + [anon_sym_false] = ACTIONS(29), + [anon_sym_DASH] = ACTIONS(29), + [anon_sym_PLUS] = ACTIONS(29), + [anon_sym_BANG] = ACTIONS(29), + [anon_sym_STAR_STAR] = ACTIONS(29), + [anon_sym_STAR] = ACTIONS(29), + [anon_sym_SLASH] = ACTIONS(29), + [anon_sym_SLASH_SLASH] = ACTIONS(29), + [anon_sym_LT_LT] = ACTIONS(29), + [anon_sym_GT_GT] = ACTIONS(29), + [anon_sym_AMP] = ACTIONS(29), + [anon_sym_PIPE] = ACTIONS(29), + [anon_sym_CARET] = ACTIONS(29), + [anon_sym_GT] = ACTIONS(29), + [anon_sym_GT_EQ] = ACTIONS(27), + [anon_sym_EQ_EQ] = ACTIONS(27), + [anon_sym_LT_EQ] = ACTIONS(27), + [anon_sym_LT] = ACTIONS(29), + [anon_sym_BANG_EQ] = ACTIONS(27), + [anon_sym_AMP_AMP] = ACTIONS(29), + [anon_sym_PIPE_PIPE] = ACTIONS(29), + [anon_sym_DOT_DOT] = ACTIONS(29), + [anon_sym_DOT_DOT_EQ] = ACTIONS(27), + [anon_sym_if] = ACTIONS(29), + [anon_sym_AT] = ACTIONS(27), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_COMMA] = ACTIONS(27), + [anon_sym_RBRACK] = ACTIONS(27), + [anon_sym_EQ] = ACTIONS(29), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_RBRACE] = ACTIONS(27), + [anon_sym_SEMI] = ACTIONS(27), + [anon_sym_AMP_EQ] = ACTIONS(27), + [anon_sym_PIPE_EQ] = ACTIONS(27), + [anon_sym_CARET_EQ] = ACTIONS(27), + [anon_sym_AMP_AMP_EQ] = ACTIONS(27), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(27), + [anon_sym_CARET_CARET_EQ] = ACTIONS(27), + [anon_sym_PLUS_EQ] = ACTIONS(27), + [anon_sym_DASH_EQ] = ACTIONS(27), + [anon_sym_STAR_STAR_EQ] = ACTIONS(27), + [anon_sym_STAR_EQ] = ACTIONS(27), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(27), + [anon_sym_SLASH_EQ] = ACTIONS(27), + [anon_sym_LT_LT_EQ] = ACTIONS(27), + [anon_sym_GT_GT_EQ] = ACTIONS(27), + [anon_sym_let] = ACTIONS(29), + [anon_sym_for] = ACTIONS(29), + }, + [3] = { + [aux_sym_argument_path_repeat1] = STATE(5), + [ts_builtin_sym_end] = ACTIONS(33), + [sym_identifier] = ACTIONS(35), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(33), + [sym_default] = ACTIONS(35), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_RPAREN] = ACTIONS(33), + [sym_signed_integer] = ACTIONS(33), + [sym_unsigned_integer] = ACTIONS(33), + [sym_number] = ACTIONS(35), + [anon_sym_DOT] = ACTIONS(31), + [anon_sym_true] = ACTIONS(35), + [anon_sym_false] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_STAR_STAR] = ACTIONS(35), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_SLASH] = ACTIONS(35), + [anon_sym_SLASH_SLASH] = ACTIONS(35), + [anon_sym_LT_LT] = ACTIONS(35), + [anon_sym_GT_GT] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(35), + [anon_sym_PIPE] = ACTIONS(35), + [anon_sym_CARET] = ACTIONS(35), + [anon_sym_GT] = ACTIONS(35), + [anon_sym_GT_EQ] = ACTIONS(33), + [anon_sym_EQ_EQ] = ACTIONS(33), + [anon_sym_LT_EQ] = ACTIONS(33), + [anon_sym_LT] = ACTIONS(35), + [anon_sym_BANG_EQ] = ACTIONS(33), + [anon_sym_AMP_AMP] = ACTIONS(35), + [anon_sym_PIPE_PIPE] = ACTIONS(35), + [anon_sym_DOT_DOT] = ACTIONS(35), + [anon_sym_DOT_DOT_EQ] = ACTIONS(33), + [anon_sym_if] = ACTIONS(35), + [anon_sym_AT] = ACTIONS(33), + [anon_sym_LBRACK] = ACTIONS(33), + [anon_sym_COMMA] = ACTIONS(33), + [anon_sym_RBRACK] = ACTIONS(33), + [anon_sym_EQ] = ACTIONS(35), + [anon_sym_LBRACE] = ACTIONS(33), + [anon_sym_RBRACE] = ACTIONS(33), + [anon_sym_SEMI] = ACTIONS(33), + [anon_sym_AMP_EQ] = ACTIONS(33), + [anon_sym_PIPE_EQ] = ACTIONS(33), + [anon_sym_CARET_EQ] = ACTIONS(33), + [anon_sym_AMP_AMP_EQ] = ACTIONS(33), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(33), + [anon_sym_CARET_CARET_EQ] = ACTIONS(33), + [anon_sym_PLUS_EQ] = ACTIONS(33), + [anon_sym_DASH_EQ] = ACTIONS(33), + [anon_sym_STAR_STAR_EQ] = ACTIONS(33), + [anon_sym_STAR_EQ] = ACTIONS(33), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(33), + [anon_sym_SLASH_EQ] = ACTIONS(33), + [anon_sym_LT_LT_EQ] = ACTIONS(33), + [anon_sym_GT_GT_EQ] = ACTIONS(33), + [anon_sym_let] = ACTIONS(35), + [anon_sym_for] = ACTIONS(35), + }, + [4] = { + [aux_sym_argument_path_repeat1] = STATE(6), + [ts_builtin_sym_end] = ACTIONS(37), + [sym_identifier] = ACTIONS(39), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(37), + [sym_default] = ACTIONS(39), + [anon_sym_LPAREN] = ACTIONS(37), + [anon_sym_RPAREN] = ACTIONS(37), + [sym_signed_integer] = ACTIONS(37), + [sym_unsigned_integer] = ACTIONS(37), + [sym_number] = ACTIONS(39), + [anon_sym_DOT] = ACTIONS(31), + [anon_sym_true] = ACTIONS(39), + [anon_sym_false] = ACTIONS(39), + [anon_sym_DASH] = ACTIONS(39), + [anon_sym_PLUS] = ACTIONS(39), + [anon_sym_BANG] = ACTIONS(39), + [anon_sym_STAR_STAR] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(39), + [anon_sym_SLASH] = ACTIONS(39), + [anon_sym_SLASH_SLASH] = ACTIONS(39), + [anon_sym_LT_LT] = ACTIONS(39), + [anon_sym_GT_GT] = ACTIONS(39), + [anon_sym_AMP] = ACTIONS(39), + [anon_sym_PIPE] = ACTIONS(39), + [anon_sym_CARET] = ACTIONS(39), + [anon_sym_GT] = ACTIONS(39), + [anon_sym_GT_EQ] = ACTIONS(37), + [anon_sym_EQ_EQ] = ACTIONS(37), + [anon_sym_LT_EQ] = ACTIONS(37), + [anon_sym_LT] = ACTIONS(39), + [anon_sym_BANG_EQ] = ACTIONS(37), + [anon_sym_AMP_AMP] = ACTIONS(39), + [anon_sym_PIPE_PIPE] = ACTIONS(39), + [anon_sym_DOT_DOT] = ACTIONS(39), + [anon_sym_DOT_DOT_EQ] = ACTIONS(37), + [anon_sym_if] = ACTIONS(39), + [anon_sym_AT] = ACTIONS(37), + [anon_sym_LBRACK] = ACTIONS(37), + [anon_sym_COMMA] = ACTIONS(37), + [anon_sym_RBRACK] = ACTIONS(37), + [anon_sym_EQ] = ACTIONS(39), + [anon_sym_LBRACE] = ACTIONS(37), + [anon_sym_RBRACE] = ACTIONS(37), + [anon_sym_SEMI] = ACTIONS(37), + [anon_sym_AMP_EQ] = ACTIONS(37), + [anon_sym_PIPE_EQ] = ACTIONS(37), + [anon_sym_CARET_EQ] = ACTIONS(37), + [anon_sym_AMP_AMP_EQ] = ACTIONS(37), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(37), + [anon_sym_CARET_CARET_EQ] = ACTIONS(37), + [anon_sym_PLUS_EQ] = ACTIONS(37), + [anon_sym_DASH_EQ] = ACTIONS(37), + [anon_sym_STAR_STAR_EQ] = ACTIONS(37), + [anon_sym_STAR_EQ] = ACTIONS(37), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(37), + [anon_sym_SLASH_EQ] = ACTIONS(37), + [anon_sym_LT_LT_EQ] = ACTIONS(37), + [anon_sym_GT_GT_EQ] = ACTIONS(37), + [anon_sym_let] = ACTIONS(39), + [anon_sym_for] = ACTIONS(39), + }, + [5] = { + [aux_sym_argument_path_repeat1] = STATE(6), + [ts_builtin_sym_end] = ACTIONS(41), + [sym_identifier] = ACTIONS(43), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(41), + [sym_default] = ACTIONS(43), + [anon_sym_LPAREN] = ACTIONS(41), + [anon_sym_RPAREN] = ACTIONS(41), + [sym_signed_integer] = ACTIONS(41), + [sym_unsigned_integer] = ACTIONS(41), + [sym_number] = ACTIONS(43), + [anon_sym_DOT] = ACTIONS(31), + [anon_sym_true] = ACTIONS(43), + [anon_sym_false] = ACTIONS(43), + [anon_sym_DASH] = ACTIONS(43), + [anon_sym_PLUS] = ACTIONS(43), + [anon_sym_BANG] = ACTIONS(43), + [anon_sym_STAR_STAR] = ACTIONS(43), + [anon_sym_STAR] = ACTIONS(43), + [anon_sym_SLASH] = ACTIONS(43), + [anon_sym_SLASH_SLASH] = ACTIONS(43), + [anon_sym_LT_LT] = ACTIONS(43), + [anon_sym_GT_GT] = ACTIONS(43), + [anon_sym_AMP] = ACTIONS(43), + [anon_sym_PIPE] = ACTIONS(43), + [anon_sym_CARET] = ACTIONS(43), + [anon_sym_GT] = ACTIONS(43), + [anon_sym_GT_EQ] = ACTIONS(41), + [anon_sym_EQ_EQ] = ACTIONS(41), + [anon_sym_LT_EQ] = ACTIONS(41), + [anon_sym_LT] = ACTIONS(43), + [anon_sym_BANG_EQ] = ACTIONS(41), + [anon_sym_AMP_AMP] = ACTIONS(43), + [anon_sym_PIPE_PIPE] = ACTIONS(43), + [anon_sym_DOT_DOT] = ACTIONS(43), + [anon_sym_DOT_DOT_EQ] = ACTIONS(41), + [anon_sym_if] = ACTIONS(43), + [anon_sym_AT] = ACTIONS(41), + [anon_sym_LBRACK] = ACTIONS(41), + [anon_sym_COMMA] = ACTIONS(41), + [anon_sym_RBRACK] = ACTIONS(41), + [anon_sym_EQ] = ACTIONS(43), + [anon_sym_LBRACE] = ACTIONS(41), + [anon_sym_RBRACE] = ACTIONS(41), + [anon_sym_SEMI] = ACTIONS(41), + [anon_sym_AMP_EQ] = ACTIONS(41), + [anon_sym_PIPE_EQ] = ACTIONS(41), + [anon_sym_CARET_EQ] = ACTIONS(41), + [anon_sym_AMP_AMP_EQ] = ACTIONS(41), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(41), + [anon_sym_CARET_CARET_EQ] = ACTIONS(41), + [anon_sym_PLUS_EQ] = ACTIONS(41), + [anon_sym_DASH_EQ] = ACTIONS(41), + [anon_sym_STAR_STAR_EQ] = ACTIONS(41), + [anon_sym_STAR_EQ] = ACTIONS(41), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(41), + [anon_sym_SLASH_EQ] = ACTIONS(41), + [anon_sym_LT_LT_EQ] = ACTIONS(41), + [anon_sym_GT_GT_EQ] = ACTIONS(41), + [anon_sym_let] = ACTIONS(43), + [anon_sym_for] = ACTIONS(43), + }, + [6] = { + [aux_sym_argument_path_repeat1] = STATE(6), + [ts_builtin_sym_end] = ACTIONS(45), + [sym_identifier] = ACTIONS(47), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(45), + [sym_default] = ACTIONS(47), + [anon_sym_LPAREN] = ACTIONS(45), + [anon_sym_RPAREN] = ACTIONS(45), + [sym_signed_integer] = ACTIONS(45), + [sym_unsigned_integer] = ACTIONS(45), + [sym_number] = ACTIONS(47), + [anon_sym_DOT] = ACTIONS(49), + [anon_sym_true] = ACTIONS(47), + [anon_sym_false] = ACTIONS(47), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_BANG] = ACTIONS(47), + [anon_sym_STAR_STAR] = ACTIONS(47), + [anon_sym_STAR] = ACTIONS(47), + [anon_sym_SLASH] = ACTIONS(47), + [anon_sym_SLASH_SLASH] = ACTIONS(47), + [anon_sym_LT_LT] = ACTIONS(47), + [anon_sym_GT_GT] = ACTIONS(47), + [anon_sym_AMP] = ACTIONS(47), + [anon_sym_PIPE] = ACTIONS(47), + [anon_sym_CARET] = ACTIONS(47), + [anon_sym_GT] = ACTIONS(47), + [anon_sym_GT_EQ] = ACTIONS(45), + [anon_sym_EQ_EQ] = ACTIONS(45), + [anon_sym_LT_EQ] = ACTIONS(45), + [anon_sym_LT] = ACTIONS(47), + [anon_sym_BANG_EQ] = ACTIONS(45), + [anon_sym_AMP_AMP] = ACTIONS(47), + [anon_sym_PIPE_PIPE] = ACTIONS(47), + [anon_sym_DOT_DOT] = ACTIONS(47), + [anon_sym_DOT_DOT_EQ] = ACTIONS(45), + [anon_sym_if] = ACTIONS(47), + [anon_sym_AT] = ACTIONS(45), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_COMMA] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(45), + [anon_sym_EQ] = ACTIONS(47), + [anon_sym_LBRACE] = ACTIONS(45), + [anon_sym_RBRACE] = ACTIONS(45), + [anon_sym_SEMI] = ACTIONS(45), + [anon_sym_AMP_EQ] = ACTIONS(45), + [anon_sym_PIPE_EQ] = ACTIONS(45), + [anon_sym_CARET_EQ] = ACTIONS(45), + [anon_sym_AMP_AMP_EQ] = ACTIONS(45), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(45), + [anon_sym_CARET_CARET_EQ] = ACTIONS(45), + [anon_sym_PLUS_EQ] = ACTIONS(45), + [anon_sym_DASH_EQ] = ACTIONS(45), + [anon_sym_STAR_STAR_EQ] = ACTIONS(45), + [anon_sym_STAR_EQ] = ACTIONS(45), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(45), + [anon_sym_SLASH_EQ] = ACTIONS(45), + [anon_sym_LT_LT_EQ] = ACTIONS(45), + [anon_sym_GT_GT_EQ] = ACTIONS(45), + [anon_sym_let] = ACTIONS(47), + [anon_sym_for] = ACTIONS(47), + }, + [7] = { + [ts_builtin_sym_end] = ACTIONS(45), + [sym_identifier] = ACTIONS(47), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(45), + [sym_default] = ACTIONS(47), + [anon_sym_LPAREN] = ACTIONS(45), + [anon_sym_RPAREN] = ACTIONS(45), + [sym_signed_integer] = ACTIONS(45), + [sym_unsigned_integer] = ACTIONS(45), + [sym_number] = ACTIONS(47), + [anon_sym_DOT] = ACTIONS(47), + [anon_sym_true] = ACTIONS(47), + [anon_sym_false] = ACTIONS(47), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_BANG] = ACTIONS(47), + [anon_sym_STAR_STAR] = ACTIONS(47), + [anon_sym_STAR] = ACTIONS(47), + [anon_sym_SLASH] = ACTIONS(47), + [anon_sym_SLASH_SLASH] = ACTIONS(47), + [anon_sym_LT_LT] = ACTIONS(47), + [anon_sym_GT_GT] = ACTIONS(47), + [anon_sym_AMP] = ACTIONS(47), + [anon_sym_PIPE] = ACTIONS(47), + [anon_sym_CARET] = ACTIONS(47), + [anon_sym_GT] = ACTIONS(47), + [anon_sym_GT_EQ] = ACTIONS(45), + [anon_sym_EQ_EQ] = ACTIONS(45), + [anon_sym_LT_EQ] = ACTIONS(45), + [anon_sym_LT] = ACTIONS(47), + [anon_sym_BANG_EQ] = ACTIONS(45), + [anon_sym_AMP_AMP] = ACTIONS(47), + [anon_sym_PIPE_PIPE] = ACTIONS(47), + [anon_sym_DOT_DOT] = ACTIONS(47), + [anon_sym_DOT_DOT_EQ] = ACTIONS(45), + [anon_sym_if] = ACTIONS(47), + [anon_sym_AT] = ACTIONS(45), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_COMMA] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(45), + [anon_sym_EQ] = ACTIONS(47), + [anon_sym_LBRACE] = ACTIONS(45), + [anon_sym_RBRACE] = ACTIONS(45), + [anon_sym_SEMI] = ACTIONS(45), + [anon_sym_AMP_EQ] = ACTIONS(45), + [anon_sym_PIPE_EQ] = ACTIONS(45), + [anon_sym_CARET_EQ] = ACTIONS(45), + [anon_sym_AMP_AMP_EQ] = ACTIONS(45), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(45), + [anon_sym_CARET_CARET_EQ] = ACTIONS(45), + [anon_sym_PLUS_EQ] = ACTIONS(45), + [anon_sym_DASH_EQ] = ACTIONS(45), + [anon_sym_STAR_STAR_EQ] = ACTIONS(45), + [anon_sym_STAR_EQ] = ACTIONS(45), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(45), + [anon_sym_SLASH_EQ] = ACTIONS(45), + [anon_sym_LT_LT_EQ] = ACTIONS(45), + [anon_sym_GT_GT_EQ] = ACTIONS(45), + [anon_sym_let] = ACTIONS(47), + [anon_sym_for] = ACTIONS(47), + }, + [8] = { + [ts_builtin_sym_end] = ACTIONS(52), + [sym_identifier] = ACTIONS(54), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(52), + [sym_default] = ACTIONS(54), + [anon_sym_LPAREN] = ACTIONS(52), + [anon_sym_RPAREN] = ACTIONS(52), + [sym_signed_integer] = ACTIONS(52), + [sym_unsigned_integer] = ACTIONS(52), + [sym_number] = ACTIONS(54), + [anon_sym_true] = ACTIONS(54), + [anon_sym_false] = ACTIONS(54), + [anon_sym_DASH] = ACTIONS(54), + [anon_sym_PLUS] = ACTIONS(54), + [anon_sym_BANG] = ACTIONS(54), + [anon_sym_STAR_STAR] = ACTIONS(54), + [anon_sym_STAR] = ACTIONS(54), + [anon_sym_SLASH] = ACTIONS(54), + [anon_sym_SLASH_SLASH] = ACTIONS(54), + [anon_sym_LT_LT] = ACTIONS(54), + [anon_sym_GT_GT] = ACTIONS(54), + [anon_sym_AMP] = ACTIONS(54), + [anon_sym_PIPE] = ACTIONS(54), + [anon_sym_CARET] = ACTIONS(54), + [anon_sym_GT] = ACTIONS(54), + [anon_sym_GT_EQ] = ACTIONS(52), + [anon_sym_EQ_EQ] = ACTIONS(52), + [anon_sym_LT_EQ] = ACTIONS(52), + [anon_sym_LT] = ACTIONS(54), + [anon_sym_BANG_EQ] = ACTIONS(52), + [anon_sym_AMP_AMP] = ACTIONS(54), + [anon_sym_PIPE_PIPE] = ACTIONS(54), + [anon_sym_DOT_DOT] = ACTIONS(54), + [anon_sym_DOT_DOT_EQ] = ACTIONS(52), + [anon_sym_if] = ACTIONS(54), + [anon_sym_AT] = ACTIONS(52), + [anon_sym_LBRACK] = ACTIONS(52), + [anon_sym_COMMA] = ACTIONS(52), + [anon_sym_RBRACK] = ACTIONS(52), + [anon_sym_EQ] = ACTIONS(54), + [anon_sym_LBRACE] = ACTIONS(52), + [anon_sym_RBRACE] = ACTIONS(52), + [anon_sym_SEMI] = ACTIONS(52), + [anon_sym_AMP_EQ] = ACTIONS(52), + [anon_sym_PIPE_EQ] = ACTIONS(52), + [anon_sym_CARET_EQ] = ACTIONS(52), + [anon_sym_AMP_AMP_EQ] = ACTIONS(52), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(52), + [anon_sym_CARET_CARET_EQ] = ACTIONS(52), + [anon_sym_PLUS_EQ] = ACTIONS(52), + [anon_sym_DASH_EQ] = ACTIONS(52), + [anon_sym_STAR_STAR_EQ] = ACTIONS(52), + [anon_sym_STAR_EQ] = ACTIONS(52), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(52), + [anon_sym_SLASH_EQ] = ACTIONS(52), + [anon_sym_LT_LT_EQ] = ACTIONS(52), + [anon_sym_GT_GT_EQ] = ACTIONS(52), + [anon_sym_let] = ACTIONS(54), + [anon_sym_for] = ACTIONS(54), + }, + [9] = { + [sym_closure_captured_variables] = STATE(157), + [sym_assignment_operator] = STATE(56), + [sym_identifier] = ACTIONS(56), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(58), + [sym_default] = ACTIONS(56), + [anon_sym_LPAREN] = ACTIONS(58), + [sym_signed_integer] = ACTIONS(58), + [sym_unsigned_integer] = ACTIONS(58), + [sym_number] = ACTIONS(56), + [anon_sym_true] = ACTIONS(56), + [anon_sym_false] = ACTIONS(56), + [anon_sym_DASH] = ACTIONS(56), + [anon_sym_PLUS] = ACTIONS(56), + [anon_sym_BANG] = ACTIONS(56), + [anon_sym_STAR_STAR] = ACTIONS(56), + [anon_sym_STAR] = ACTIONS(56), + [anon_sym_SLASH] = ACTIONS(56), + [anon_sym_SLASH_SLASH] = ACTIONS(56), + [anon_sym_LT_LT] = ACTIONS(56), + [anon_sym_GT_GT] = ACTIONS(56), + [anon_sym_AMP] = ACTIONS(56), + [anon_sym_PIPE] = ACTIONS(56), + [anon_sym_CARET] = ACTIONS(56), + [anon_sym_GT] = ACTIONS(56), + [anon_sym_GT_EQ] = ACTIONS(58), + [anon_sym_EQ_EQ] = ACTIONS(58), + [anon_sym_LT_EQ] = ACTIONS(58), + [anon_sym_LT] = ACTIONS(56), + [anon_sym_BANG_EQ] = ACTIONS(58), + [anon_sym_AMP_AMP] = ACTIONS(56), + [anon_sym_PIPE_PIPE] = ACTIONS(56), + [anon_sym_DOT_DOT] = ACTIONS(56), + [anon_sym_DOT_DOT_EQ] = ACTIONS(58), + [anon_sym_if] = ACTIONS(56), + [anon_sym_AT] = ACTIONS(58), + [anon_sym_LBRACK] = ACTIONS(58), + [anon_sym_EQ] = ACTIONS(60), + [anon_sym_LBRACE] = ACTIONS(58), + [anon_sym_RBRACE] = ACTIONS(58), + [anon_sym_SEMI] = ACTIONS(58), + [anon_sym_AMP_EQ] = ACTIONS(62), + [anon_sym_PIPE_EQ] = ACTIONS(62), + [anon_sym_CARET_EQ] = ACTIONS(62), + [anon_sym_AMP_AMP_EQ] = ACTIONS(62), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(62), + [anon_sym_CARET_CARET_EQ] = ACTIONS(62), + [anon_sym_PLUS_EQ] = ACTIONS(62), + [anon_sym_DASH_EQ] = ACTIONS(62), + [anon_sym_STAR_STAR_EQ] = ACTIONS(62), + [anon_sym_STAR_EQ] = ACTIONS(62), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(62), + [anon_sym_SLASH_EQ] = ACTIONS(62), + [anon_sym_LT_LT_EQ] = ACTIONS(62), + [anon_sym_GT_GT_EQ] = ACTIONS(62), + [anon_sym_let] = ACTIONS(56), + [anon_sym_for] = ACTIONS(56), + }, +}; + +static const uint16_t ts_small_parse_table[] = { + [0] = 4, + ACTIONS(68), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(66), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(64), 28, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + sym_unit_quote, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [56] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(72), 17, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + anon_sym_for, + ACTIONS(70), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [109] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(76), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(74), 28, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + sym_unit_quote, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [162] = 4, + ACTIONS(82), 1, + anon_sym_else, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(80), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(78), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [217] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(86), 17, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + anon_sym_for, + ACTIONS(84), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [270] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(90), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(88), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [322] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(94), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(92), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [374] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(98), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(96), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [426] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(102), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(100), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [478] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(106), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(104), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [530] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(56), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(58), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [582] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(110), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(108), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [634] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(114), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(112), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [686] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(118), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(116), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [738] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(122), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(120), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [790] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(126), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(124), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [842] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(130), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(128), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [894] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(134), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(132), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [946] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(138), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(136), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [998] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(142), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(140), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1050] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + ACTIONS(146), 1, + anon_sym_RBRACE, + ACTIONS(148), 1, + anon_sym_let, + ACTIONS(150), 1, + anon_sym_for, + STATE(9), 1, + sym_path, + STATE(33), 1, + sym__float, + STATE(37), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + STATE(32), 2, + sym_statement, + aux_sym_procedural_block_repeat1, + STATE(35), 2, + sym_void, + sym_struct_definition, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(108), 4, + sym_closed_expression, + sym_let, + sym_assign, + sym_for, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [1141] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + ACTIONS(148), 1, + anon_sym_let, + ACTIONS(150), 1, + anon_sym_for, + ACTIONS(152), 1, + anon_sym_RBRACE, + STATE(9), 1, + sym_path, + STATE(33), 1, + sym__float, + STATE(37), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + STATE(30), 2, + sym_statement, + aux_sym_procedural_block_repeat1, + STATE(35), 2, + sym_void, + sym_struct_definition, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(108), 4, + sym_closed_expression, + sym_let, + sym_assign, + sym_for, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [1232] = 23, + ACTIONS(154), 1, + sym_identifier, + ACTIONS(160), 1, + sym_default, + ACTIONS(163), 1, + anon_sym_LPAREN, + ACTIONS(166), 1, + sym_number, + ACTIONS(175), 1, + anon_sym_if, + ACTIONS(178), 1, + anon_sym_AT, + ACTIONS(181), 1, + anon_sym_LBRACK, + ACTIONS(184), 1, + anon_sym_LBRACE, + ACTIONS(187), 1, + anon_sym_RBRACE, + ACTIONS(189), 1, + anon_sym_let, + ACTIONS(192), 1, + anon_sym_for, + STATE(9), 1, + sym_path, + STATE(33), 1, + sym__float, + STATE(37), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(169), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + STATE(32), 2, + sym_statement, + aux_sym_procedural_block_repeat1, + STATE(35), 2, + sym_void, + sym_struct_definition, + ACTIONS(157), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(172), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(108), 4, + sym_closed_expression, + sym_let, + sym_assign, + sym_for, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [1323] = 5, + ACTIONS(199), 1, + sym_unit_quote, + STATE(16), 1, + sym__unit, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(195), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(197), 23, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1377] = 24, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + ACTIONS(201), 1, + sym_identifier, + ACTIONS(203), 1, + anon_sym_RPAREN, + ACTIONS(205), 1, + sym_varadic_dots, + STATE(83), 1, + sym__float, + STATE(105), 1, + sym_expression, + STATE(119), 1, + aux_sym_struct_definition_repeat1, + STATE(123), 1, + aux_sym_dictionary_construction_repeat1, + STATE(131), 1, + sym_dictionary_member_assignment, + STATE(139), 1, + sym_struct_member, + STATE(145), 1, + sym__struct_final_element, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [1468] = 4, + STATE(157), 1, + sym_closure_captured_variables, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(56), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(58), 23, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1519] = 10, + ACTIONS(209), 1, + anon_sym_STAR_STAR, + ACTIONS(213), 1, + anon_sym_SLASH_SLASH, + ACTIONS(217), 1, + anon_sym_AMP, + ACTIONS(219), 1, + anon_sym_CARET, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(207), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(211), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(215), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(134), 13, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(132), 16, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1581] = 18, + ACTIONS(209), 1, + anon_sym_STAR_STAR, + ACTIONS(213), 1, + anon_sym_SLASH_SLASH, + ACTIONS(217), 1, + anon_sym_AMP, + ACTIONS(219), 1, + anon_sym_CARET, + ACTIONS(225), 1, + anon_sym_PIPE, + ACTIONS(231), 1, + anon_sym_AMP_AMP, + ACTIONS(233), 1, + anon_sym_PIPE_PIPE, + ACTIONS(235), 1, + anon_sym_DOT_DOT, + ACTIONS(237), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(239), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(207), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(211), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(215), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(227), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(229), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(223), 8, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + ACTIONS(221), 9, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_let, + anon_sym_for, + [1659] = 13, + ACTIONS(209), 1, + anon_sym_STAR_STAR, + ACTIONS(213), 1, + anon_sym_SLASH_SLASH, + ACTIONS(217), 1, + anon_sym_AMP, + ACTIONS(219), 1, + anon_sym_CARET, + ACTIONS(225), 1, + anon_sym_PIPE, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(207), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(211), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(215), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(227), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(229), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(134), 10, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(132), 12, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1727] = 11, + ACTIONS(209), 1, + anon_sym_STAR_STAR, + ACTIONS(213), 1, + anon_sym_SLASH_SLASH, + ACTIONS(217), 1, + anon_sym_AMP, + ACTIONS(219), 1, + anon_sym_CARET, + ACTIONS(225), 1, + anon_sym_PIPE, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(207), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(211), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(215), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(134), 12, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(132), 16, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1791] = 6, + ACTIONS(209), 1, + anon_sym_STAR_STAR, + ACTIONS(213), 1, + anon_sym_SLASH_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(211), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(134), 14, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(132), 21, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1845] = 4, + ACTIONS(209), 1, + anon_sym_STAR_STAR, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(134), 16, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(132), 22, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1895] = 7, + ACTIONS(209), 1, + anon_sym_STAR_STAR, + ACTIONS(213), 1, + anon_sym_SLASH_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(207), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(211), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(134), 14, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(132), 19, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1951] = 8, + ACTIONS(209), 1, + anon_sym_STAR_STAR, + ACTIONS(213), 1, + anon_sym_SLASH_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(207), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(211), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(215), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(134), 14, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(132), 17, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [2009] = 9, + ACTIONS(209), 1, + anon_sym_STAR_STAR, + ACTIONS(213), 1, + anon_sym_SLASH_SLASH, + ACTIONS(217), 1, + anon_sym_AMP, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(207), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(211), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(215), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(134), 13, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(132), 17, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [2069] = 14, + ACTIONS(209), 1, + anon_sym_STAR_STAR, + ACTIONS(213), 1, + anon_sym_SLASH_SLASH, + ACTIONS(217), 1, + anon_sym_AMP, + ACTIONS(219), 1, + anon_sym_CARET, + ACTIONS(225), 1, + anon_sym_PIPE, + ACTIONS(231), 1, + anon_sym_AMP_AMP, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(207), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(211), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(215), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(227), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(229), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(134), 10, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(132), 11, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [2139] = 15, + ACTIONS(209), 1, + anon_sym_STAR_STAR, + ACTIONS(213), 1, + anon_sym_SLASH_SLASH, + ACTIONS(217), 1, + anon_sym_AMP, + ACTIONS(219), 1, + anon_sym_CARET, + ACTIONS(225), 1, + anon_sym_PIPE, + ACTIONS(231), 1, + anon_sym_AMP_AMP, + ACTIONS(233), 1, + anon_sym_PIPE_PIPE, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(207), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(211), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(215), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(227), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(229), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(132), 10, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + ACTIONS(134), 10, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + [2211] = 17, + ACTIONS(209), 1, + anon_sym_STAR_STAR, + ACTIONS(213), 1, + anon_sym_SLASH_SLASH, + ACTIONS(217), 1, + anon_sym_AMP, + ACTIONS(219), 1, + anon_sym_CARET, + ACTIONS(225), 1, + anon_sym_PIPE, + ACTIONS(231), 1, + anon_sym_AMP_AMP, + ACTIONS(233), 1, + anon_sym_PIPE_PIPE, + ACTIONS(235), 1, + anon_sym_DOT_DOT, + ACTIONS(237), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(207), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(211), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(215), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(227), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(229), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(241), 9, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(243), 9, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [2287] = 19, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + ACTIONS(245), 1, + anon_sym_RBRACK, + STATE(50), 1, + aux_sym_list_repeat1, + STATE(83), 1, + sym__float, + STATE(102), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2363] = 19, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + ACTIONS(247), 1, + anon_sym_RBRACK, + STATE(48), 1, + aux_sym_list_repeat1, + STATE(83), 1, + sym__float, + STATE(97), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2439] = 19, + ACTIONS(249), 1, + sym_identifier, + ACTIONS(255), 1, + sym_default, + ACTIONS(258), 1, + anon_sym_LPAREN, + ACTIONS(261), 1, + sym_number, + ACTIONS(270), 1, + anon_sym_if, + ACTIONS(273), 1, + anon_sym_AT, + ACTIONS(276), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_RBRACK, + ACTIONS(281), 1, + anon_sym_LBRACE, + STATE(50), 1, + aux_sym_list_repeat1, + STATE(83), 1, + sym__float, + STATE(103), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(264), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(252), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(267), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2515] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(33), 1, + sym__float, + STATE(38), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(35), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2585] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(93), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2655] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(94), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2725] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(95), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2795] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(99), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2865] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(106), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2935] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(101), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3005] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(89), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3075] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(104), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3145] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(100), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3215] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(96), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3285] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(22), 1, + sym_expression, + STATE(83), 1, + sym__float, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3355] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(22), 1, + sym_expression, + STATE(33), 1, + sym__float, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(35), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3425] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(33), 1, + sym__float, + STATE(40), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(35), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3495] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(27), 1, + sym_expression, + STATE(33), 1, + sym__float, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(35), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3565] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(33), 1, + sym__float, + STATE(41), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(35), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3635] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(33), 1, + sym__float, + STATE(42), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(35), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3705] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(33), 1, + sym__float, + STATE(43), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(35), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3775] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(33), 1, + sym__float, + STATE(36), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(35), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3845] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(33), 1, + sym__float, + STATE(44), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(35), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3915] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(33), 1, + sym__float, + STATE(39), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(35), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3985] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(33), 1, + sym__float, + STATE(45), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(35), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [4055] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(33), 1, + sym__float, + STATE(46), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(35), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [4125] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(87), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [4195] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(27), 1, + sym_expression, + STATE(83), 1, + sym__float, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [4265] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(86), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [4335] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(90), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [4405] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(88), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [4475] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(91), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [4545] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(33), 1, + sym__float, + STATE(47), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(144), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(35), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [4615] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(92), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [4685] = 17, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + sym_number, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(83), 1, + sym__float, + STATE(98), 1, + sym_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + anon_sym_true, + anon_sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(7), 3, + sym_string, + sym_signed_integer, + sym_unsigned_integer, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(20), 10, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [4755] = 5, + STATE(16), 1, + sym__unit, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(199), 2, + sym_identifier, + sym_unit_quote, + ACTIONS(195), 7, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(197), 20, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [4798] = 5, + ACTIONS(284), 1, + anon_sym_LBRACK, + STATE(146), 1, + sym_closure_captured_variables, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(56), 7, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(58), 20, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [4840] = 8, + ACTIONS(31), 1, + anon_sym_DOT, + ACTIONS(286), 1, + anon_sym_COLON, + ACTIONS(288), 1, + anon_sym_EQ, + STATE(4), 1, + aux_sym_argument_path_repeat1, + STATE(126), 1, + sym__declaration_type, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(29), 7, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(27), 16, + anon_sym_RPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + [4887] = 4, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(134), 7, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(132), 19, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [4925] = 6, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(134), 5, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(132), 18, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [4967] = 8, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(134), 5, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(132), 14, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [5013] = 11, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(134), 3, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(132), 13, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [5065] = 7, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(134), 5, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(132), 16, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [5109] = 10, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(134), 4, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(132), 13, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [5159] = 9, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(134), 4, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(132), 14, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [5207] = 13, + ACTIONS(134), 1, + anon_sym_DOT_DOT, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(132), 9, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [5263] = 14, + ACTIONS(134), 1, + anon_sym_DOT_DOT, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(132), 8, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [5321] = 15, + ACTIONS(134), 1, + anon_sym_DOT_DOT, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(132), 7, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_DOT_DOT_EQ, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [5381] = 16, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(314), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(243), 6, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [5443] = 17, + ACTIONS(245), 1, + anon_sym_RBRACK, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(314), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(318), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [5503] = 17, + ACTIONS(25), 1, + anon_sym_LBRACE, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(314), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, + anon_sym_DOT_DOT_EQ, + STATE(13), 1, + sym_procedural_block, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [5563] = 16, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(314), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(320), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [5621] = 17, + ACTIONS(25), 1, + anon_sym_LBRACE, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(314), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, + anon_sym_DOT_DOT_EQ, + STATE(110), 1, + sym_procedural_block, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [5681] = 16, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(314), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(322), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [5739] = 17, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(314), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(318), 1, + anon_sym_COMMA, + ACTIONS(324), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [5799] = 16, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(314), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(318), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [5856] = 16, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(314), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(326), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [5913] = 16, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(314), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(328), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [5970] = 16, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(314), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(330), 1, + anon_sym_SEMI, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [6027] = 16, + ACTIONS(290), 1, + anon_sym_STAR_STAR, + ACTIONS(294), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(314), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(332), 1, + ts_builtin_sym_end, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(292), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [6084] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(221), 8, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(223), 11, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + [6112] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(334), 8, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(336), 11, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + [6140] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(338), 8, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(340), 11, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + [6168] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(342), 8, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(344), 11, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + [6196] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(346), 8, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(348), 11, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + [6224] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(350), 6, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_if, + ACTIONS(279), 11, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_LBRACE, + [6250] = 3, + STATE(59), 1, + sym_assignment_operator, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(62), 15, + anon_sym_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + anon_sym_AMP_AMP_EQ, + anon_sym_PIPE_PIPE_EQ, + anon_sym_CARET_CARET_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_SLASH_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + [6275] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(352), 6, + sym_identifier, + sym_default, + sym_number, + anon_sym_true, + anon_sym_false, + anon_sym_if, + ACTIONS(354), 10, + sym_string, + anon_sym_LPAREN, + sym_signed_integer, + sym_unsigned_integer, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + [6300] = 6, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(358), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + STATE(8), 2, + sym_argument_path, + sym_local_path, + STATE(61), 3, + sym_void, + sym_path, + sym_struct_definition, + [6323] = 6, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(358), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + STATE(8), 2, + sym_argument_path, + sym_local_path, + STATE(80), 3, + sym_void, + sym_path, + sym_struct_definition, + [6346] = 7, + ACTIONS(203), 1, + anon_sym_RPAREN, + ACTIONS(205), 1, + sym_varadic_dots, + ACTIONS(360), 1, + sym_identifier, + STATE(119), 1, + aux_sym_struct_definition_repeat1, + STATE(139), 1, + sym_struct_member, + STATE(145), 1, + sym__struct_final_element, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6369] = 7, + ACTIONS(205), 1, + sym_varadic_dots, + ACTIONS(360), 1, + sym_identifier, + ACTIONS(362), 1, + anon_sym_RPAREN, + STATE(121), 1, + aux_sym_struct_definition_repeat1, + STATE(139), 1, + sym_struct_member, + STATE(152), 1, + sym__struct_final_element, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6392] = 5, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + STATE(8), 2, + sym_argument_path, + sym_local_path, + STATE(124), 2, + sym__variable_type, + sym_path, + [6411] = 5, + ACTIONS(364), 1, + sym_identifier, + STATE(121), 1, + aux_sym_struct_definition_repeat1, + STATE(141), 1, + sym_struct_member, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(367), 2, + anon_sym_RPAREN, + sym_varadic_dots, + [6429] = 5, + ACTIONS(369), 1, + sym_identifier, + ACTIONS(372), 1, + anon_sym_RPAREN, + STATE(122), 1, + aux_sym_dictionary_construction_repeat1, + STATE(149), 1, + sym_dictionary_member_assignment, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6446] = 5, + ACTIONS(374), 1, + sym_identifier, + ACTIONS(376), 1, + anon_sym_RPAREN, + STATE(122), 1, + aux_sym_dictionary_construction_repeat1, + STATE(137), 1, + sym_dictionary_member_assignment, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6463] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(378), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_EQ, + [6473] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(367), 3, + sym_identifier, + anon_sym_RPAREN, + sym_varadic_dots, + [6483] = 3, + ACTIONS(382), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(380), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [6495] = 4, + ACTIONS(384), 1, + sym_identifier, + ACTIONS(386), 1, + anon_sym_RBRACK, + STATE(128), 1, + aux_sym_closure_captured_variables_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6509] = 4, + ACTIONS(388), 1, + sym_identifier, + ACTIONS(391), 1, + anon_sym_RBRACK, + STATE(128), 1, + aux_sym_closure_captured_variables_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6523] = 4, + ACTIONS(393), 1, + sym_identifier, + ACTIONS(395), 1, + anon_sym_RBRACK, + STATE(127), 1, + aux_sym_closure_captured_variables_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6537] = 3, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(26), 1, + sym_procedural_block, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6548] = 3, + ACTIONS(376), 1, + anon_sym_RPAREN, + ACTIONS(397), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6559] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(372), 2, + sym_identifier, + anon_sym_RPAREN, + [6568] = 3, + ACTIONS(286), 1, + anon_sym_COLON, + STATE(126), 1, + sym__declaration_type, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6579] = 3, + ACTIONS(399), 1, + anon_sym_RPAREN, + ACTIONS(401), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6590] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(391), 2, + sym_identifier, + anon_sym_RBRACK, + [6599] = 3, + ACTIONS(403), 1, + anon_sym_COMMA, + ACTIONS(405), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6610] = 3, + ACTIONS(397), 1, + anon_sym_COMMA, + ACTIONS(407), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6621] = 3, + ACTIONS(386), 1, + anon_sym_RBRACK, + ACTIONS(403), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6632] = 3, + ACTIONS(399), 1, + anon_sym_RPAREN, + ACTIONS(409), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6643] = 2, + ACTIONS(411), 1, + anon_sym_in, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6651] = 2, + ACTIONS(409), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6659] = 2, + ACTIONS(413), 1, + sym_identifier, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6667] = 2, + ACTIONS(415), 1, + sym_number, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6675] = 2, + ACTIONS(417), 1, + ts_builtin_sym_end, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6683] = 2, + ACTIONS(362), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6691] = 2, + ACTIONS(419), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6699] = 2, + ACTIONS(421), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6707] = 2, + ACTIONS(423), 1, + sym_identifier, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6715] = 2, + ACTIONS(397), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6723] = 2, + ACTIONS(425), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6731] = 2, + ACTIONS(427), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6739] = 2, + ACTIONS(429), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6747] = 2, + ACTIONS(431), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6755] = 2, + ACTIONS(433), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6763] = 2, + ACTIONS(403), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6771] = 2, + ACTIONS(435), 1, + sym_identifier, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [6779] = 2, + ACTIONS(437), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, +}; + +static const uint32_t ts_small_parse_table_map[] = { + [SMALL_STATE(10)] = 0, + [SMALL_STATE(11)] = 56, + [SMALL_STATE(12)] = 109, + [SMALL_STATE(13)] = 162, + [SMALL_STATE(14)] = 217, + [SMALL_STATE(15)] = 270, + [SMALL_STATE(16)] = 322, + [SMALL_STATE(17)] = 374, + [SMALL_STATE(18)] = 426, + [SMALL_STATE(19)] = 478, + [SMALL_STATE(20)] = 530, + [SMALL_STATE(21)] = 582, + [SMALL_STATE(22)] = 634, + [SMALL_STATE(23)] = 686, + [SMALL_STATE(24)] = 738, + [SMALL_STATE(25)] = 790, + [SMALL_STATE(26)] = 842, + [SMALL_STATE(27)] = 894, + [SMALL_STATE(28)] = 946, + [SMALL_STATE(29)] = 998, + [SMALL_STATE(30)] = 1050, + [SMALL_STATE(31)] = 1141, + [SMALL_STATE(32)] = 1232, + [SMALL_STATE(33)] = 1323, + [SMALL_STATE(34)] = 1377, + [SMALL_STATE(35)] = 1468, + [SMALL_STATE(36)] = 1519, + [SMALL_STATE(37)] = 1581, + [SMALL_STATE(38)] = 1659, + [SMALL_STATE(39)] = 1727, + [SMALL_STATE(40)] = 1791, + [SMALL_STATE(41)] = 1845, + [SMALL_STATE(42)] = 1895, + [SMALL_STATE(43)] = 1951, + [SMALL_STATE(44)] = 2009, + [SMALL_STATE(45)] = 2069, + [SMALL_STATE(46)] = 2139, + [SMALL_STATE(47)] = 2211, + [SMALL_STATE(48)] = 2287, + [SMALL_STATE(49)] = 2363, + [SMALL_STATE(50)] = 2439, + [SMALL_STATE(51)] = 2515, + [SMALL_STATE(52)] = 2585, + [SMALL_STATE(53)] = 2655, + [SMALL_STATE(54)] = 2725, + [SMALL_STATE(55)] = 2795, + [SMALL_STATE(56)] = 2865, + [SMALL_STATE(57)] = 2935, + [SMALL_STATE(58)] = 3005, + [SMALL_STATE(59)] = 3075, + [SMALL_STATE(60)] = 3145, + [SMALL_STATE(61)] = 3215, + [SMALL_STATE(62)] = 3285, + [SMALL_STATE(63)] = 3355, + [SMALL_STATE(64)] = 3425, + [SMALL_STATE(65)] = 3495, + [SMALL_STATE(66)] = 3565, + [SMALL_STATE(67)] = 3635, + [SMALL_STATE(68)] = 3705, + [SMALL_STATE(69)] = 3775, + [SMALL_STATE(70)] = 3845, + [SMALL_STATE(71)] = 3915, + [SMALL_STATE(72)] = 3985, + [SMALL_STATE(73)] = 4055, + [SMALL_STATE(74)] = 4125, + [SMALL_STATE(75)] = 4195, + [SMALL_STATE(76)] = 4265, + [SMALL_STATE(77)] = 4335, + [SMALL_STATE(78)] = 4405, + [SMALL_STATE(79)] = 4475, + [SMALL_STATE(80)] = 4545, + [SMALL_STATE(81)] = 4615, + [SMALL_STATE(82)] = 4685, + [SMALL_STATE(83)] = 4755, + [SMALL_STATE(84)] = 4798, + [SMALL_STATE(85)] = 4840, + [SMALL_STATE(86)] = 4887, + [SMALL_STATE(87)] = 4925, + [SMALL_STATE(88)] = 4967, + [SMALL_STATE(89)] = 5013, + [SMALL_STATE(90)] = 5065, + [SMALL_STATE(91)] = 5109, + [SMALL_STATE(92)] = 5159, + [SMALL_STATE(93)] = 5207, + [SMALL_STATE(94)] = 5263, + [SMALL_STATE(95)] = 5321, + [SMALL_STATE(96)] = 5381, + [SMALL_STATE(97)] = 5443, + [SMALL_STATE(98)] = 5503, + [SMALL_STATE(99)] = 5563, + [SMALL_STATE(100)] = 5621, + [SMALL_STATE(101)] = 5681, + [SMALL_STATE(102)] = 5739, + [SMALL_STATE(103)] = 5799, + [SMALL_STATE(104)] = 5856, + [SMALL_STATE(105)] = 5913, + [SMALL_STATE(106)] = 5970, + [SMALL_STATE(107)] = 6027, + [SMALL_STATE(108)] = 6084, + [SMALL_STATE(109)] = 6112, + [SMALL_STATE(110)] = 6140, + [SMALL_STATE(111)] = 6168, + [SMALL_STATE(112)] = 6196, + [SMALL_STATE(113)] = 6224, + [SMALL_STATE(114)] = 6250, + [SMALL_STATE(115)] = 6275, + [SMALL_STATE(116)] = 6300, + [SMALL_STATE(117)] = 6323, + [SMALL_STATE(118)] = 6346, + [SMALL_STATE(119)] = 6369, + [SMALL_STATE(120)] = 6392, + [SMALL_STATE(121)] = 6411, + [SMALL_STATE(122)] = 6429, + [SMALL_STATE(123)] = 6446, + [SMALL_STATE(124)] = 6463, + [SMALL_STATE(125)] = 6473, + [SMALL_STATE(126)] = 6483, + [SMALL_STATE(127)] = 6495, + [SMALL_STATE(128)] = 6509, + [SMALL_STATE(129)] = 6523, + [SMALL_STATE(130)] = 6537, + [SMALL_STATE(131)] = 6548, + [SMALL_STATE(132)] = 6559, + [SMALL_STATE(133)] = 6568, + [SMALL_STATE(134)] = 6579, + [SMALL_STATE(135)] = 6590, + [SMALL_STATE(136)] = 6599, + [SMALL_STATE(137)] = 6610, + [SMALL_STATE(138)] = 6621, + [SMALL_STATE(139)] = 6632, + [SMALL_STATE(140)] = 6643, + [SMALL_STATE(141)] = 6651, + [SMALL_STATE(142)] = 6659, + [SMALL_STATE(143)] = 6667, + [SMALL_STATE(144)] = 6675, + [SMALL_STATE(145)] = 6683, + [SMALL_STATE(146)] = 6691, + [SMALL_STATE(147)] = 6699, + [SMALL_STATE(148)] = 6707, + [SMALL_STATE(149)] = 6715, + [SMALL_STATE(150)] = 6723, + [SMALL_STATE(151)] = 6731, + [SMALL_STATE(152)] = 6739, + [SMALL_STATE(153)] = 6747, + [SMALL_STATE(154)] = 6755, + [SMALL_STATE(155)] = 6763, + [SMALL_STATE(156)] = 6771, + [SMALL_STATE(157)] = 6779, +}; + +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 = false}}, SHIFT(2), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), + [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), + [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [27] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_local_path, 1, 0, 0), + [29] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_local_path, 1, 0, 0), + [31] = {.entry = {.count = 1, .reusable = false}}, SHIFT(142), + [33] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_path, 1, 0, 0), + [35] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_path, 1, 0, 0), + [37] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_local_path, 2, 0, 0), + [39] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_local_path, 2, 0, 0), + [41] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_path, 2, 0, 0), + [43] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_path, 2, 0, 0), + [45] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), + [47] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), + [49] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), SHIFT_REPEAT(142), + [52] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), + [54] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), + [56] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [58] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [60] = {.entry = {.count = 1, .reusable = false}}, SHIFT(115), + [62] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), + [64] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 0), + [66] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 0), + [68] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), + [70] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 2, 0, 0), + [72] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 2, 0, 0), + [74] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 0), + [76] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 0), + [78] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 0), + [80] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 0), + [82] = {.entry = {.count = 1, .reusable = false}}, SHIFT(130), + [84] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 3, 0, 0), + [86] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 3, 0, 0), + [88] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 0), + [90] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 0), + [92] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 0), + [94] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 0), + [96] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_void, 2, 0, 0), + [98] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_void, 2, 0, 0), + [100] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [102] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [104] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 0), + [106] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 0), + [108] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [112] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 0), + [114] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 0), + [116] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [118] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [120] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [122] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [126] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [128] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 0), + [130] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 0), + [132] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 2), + [134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 2), + [136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 0), + [138] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 0), + [140] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 0), + [142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 0), + [144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [148] = {.entry = {.count = 1, .reusable = false}}, SHIFT(156), + [150] = {.entry = {.count = 1, .reusable = false}}, SHIFT(148), + [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [154] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(2), + [157] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [160] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [163] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(34), + [166] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(10), + [169] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(18), + [172] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(63), + [175] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(82), + [178] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(3), + [181] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(49), + [184] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(31), + [187] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), + [189] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(156), + [192] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(148), + [195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 0), + [197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 0), + [199] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [201] = {.entry = {.count = 1, .reusable = false}}, SHIFT(85), + [203] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [205] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [211] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), + [213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [217] = {.entry = {.count = 1, .reusable = false}}, SHIFT(68), + [219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [221] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), + [223] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), + [225] = {.entry = {.count = 1, .reusable = false}}, SHIFT(69), + [227] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), + [229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [235] = {.entry = {.count = 1, .reusable = false}}, SHIFT(73), + [237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [241] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 0), + [243] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 0), + [245] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [247] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [249] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(2), + [252] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [255] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [258] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(34), + [261] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), + [264] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(18), + [267] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(62), + [270] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(82), + [273] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), + [276] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(49), + [279] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [281] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(31), + [284] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [286] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [288] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [292] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), + [294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [300] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), + [302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(79), + [304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), + [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), + [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 0), + [322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 3), + [324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), + [332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assign, 4, 0, 0), + [336] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assign, 4, 0, 0), + [338] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for, 5, 0, 0), + [340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for, 5, 0, 0), + [342] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let, 5, 0, 0), + [344] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let, 5, 0, 0), + [346] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closed_expression, 2, 0, 0), + [348] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closed_expression, 2, 0, 0), + [350] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [352] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_operator, 1, 0, 0), + [354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_operator, 1, 0, 0), + [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), + [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [364] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(133), + [367] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [369] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(154), + [372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), + [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [378] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__declaration_type, 2, 0, 0), + [380] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 1), + [382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [388] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(155), + [391] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), + [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), + [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), + [399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), + [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [417] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [421] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [425] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), + [427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [431] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), +}; + +#ifdef __cplusplus +extern "C" { +#endif +#ifdef TREE_SITTER_HIDE_SYMBOLS +#define TS_PUBLIC +#elif defined(_WIN32) +#define TS_PUBLIC __declspec(dllexport) +#else +#define TS_PUBLIC __attribute__((visibility("default"))) +#endif + +TS_PUBLIC const TSLanguage *tree_sitter_command_cad_model(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_identifier, + .primary_state_ids = ts_primary_state_ids, + }; + return &language; +} +#ifdef __cplusplus +} +#endif diff --git a/crates/tree-sitter-command-cad-model/src/tree_sitter/alloc.h b/crates/tree-sitter-command-cad-model/src/tree_sitter/alloc.h new file mode 100644 index 0000000..1f4466d --- /dev/null +++ b/crates/tree-sitter-command-cad-model/src/tree_sitter/alloc.h @@ -0,0 +1,54 @@ +#ifndef TREE_SITTER_ALLOC_H_ +#define TREE_SITTER_ALLOC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +// Allow clients to override allocation functions +#ifdef TREE_SITTER_REUSE_ALLOCATOR + +extern void *(*ts_current_malloc)(size_t); +extern void *(*ts_current_calloc)(size_t, size_t); +extern void *(*ts_current_realloc)(void *, size_t); +extern void (*ts_current_free)(void *); + +#ifndef ts_malloc +#define ts_malloc ts_current_malloc +#endif +#ifndef ts_calloc +#define ts_calloc ts_current_calloc +#endif +#ifndef ts_realloc +#define ts_realloc ts_current_realloc +#endif +#ifndef ts_free +#define ts_free ts_current_free +#endif + +#else + +#ifndef ts_malloc +#define ts_malloc malloc +#endif +#ifndef ts_calloc +#define ts_calloc calloc +#endif +#ifndef ts_realloc +#define ts_realloc realloc +#endif +#ifndef ts_free +#define ts_free free +#endif + +#endif + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_ALLOC_H_ diff --git a/crates/tree-sitter-command-cad-model/src/tree_sitter/array.h b/crates/tree-sitter-command-cad-model/src/tree_sitter/array.h new file mode 100644 index 0000000..15a3b23 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/src/tree_sitter/array.h @@ -0,0 +1,290 @@ +#ifndef TREE_SITTER_ARRAY_H_ +#define TREE_SITTER_ARRAY_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./alloc.h" + +#include +#include +#include +#include +#include + +#ifdef _MSC_VER +#pragma warning(disable : 4101) +#elif defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-variable" +#endif + +#define Array(T) \ + struct { \ + T *contents; \ + uint32_t size; \ + uint32_t capacity; \ + } + +/// Initialize an array. +#define array_init(self) \ + ((self)->size = 0, (self)->capacity = 0, (self)->contents = NULL) + +/// Create an empty array. +#define array_new() \ + { NULL, 0, 0 } + +/// Get a pointer to the element at a given `index` in the array. +#define array_get(self, _index) \ + (assert((uint32_t)(_index) < (self)->size), &(self)->contents[_index]) + +/// Get a pointer to the first element in the array. +#define array_front(self) array_get(self, 0) + +/// Get a pointer to the last element in the array. +#define array_back(self) array_get(self, (self)->size - 1) + +/// Clear the array, setting its size to zero. Note that this does not free any +/// memory allocated for the array's contents. +#define array_clear(self) ((self)->size = 0) + +/// Reserve `new_capacity` elements of space in the array. If `new_capacity` is +/// less than the array's current capacity, this function has no effect. +#define array_reserve(self, new_capacity) \ + _array__reserve((Array *)(self), array_elem_size(self), new_capacity) + +/// Free any memory allocated for this array. Note that this does not free any +/// memory allocated for the array's contents. +#define array_delete(self) _array__delete((Array *)(self)) + +/// Push a new `element` onto the end of the array. +#define array_push(self, element) \ + (_array__grow((Array *)(self), 1, array_elem_size(self)), \ + (self)->contents[(self)->size++] = (element)) + +/// Increase the array's size by `count` elements. +/// New elements are zero-initialized. +#define array_grow_by(self, count) \ + do { \ + if ((count) == 0) break; \ + _array__grow((Array *)(self), count, array_elem_size(self)); \ + memset((self)->contents + (self)->size, 0, (count) * array_elem_size(self)); \ + (self)->size += (count); \ + } while (0) + +/// Append all elements from one array to the end of another. +#define array_push_all(self, other) \ + array_extend((self), (other)->size, (other)->contents) + +/// Append `count` elements to the end of the array, reading their values from the +/// `contents` pointer. +#define array_extend(self, count, contents) \ + _array__splice( \ + (Array *)(self), array_elem_size(self), (self)->size, \ + 0, count, contents \ + ) + +/// Remove `old_count` elements from the array starting at the given `index`. At +/// the same index, insert `new_count` new elements, reading their values from the +/// `new_contents` pointer. +#define array_splice(self, _index, old_count, new_count, new_contents) \ + _array__splice( \ + (Array *)(self), array_elem_size(self), _index, \ + old_count, new_count, new_contents \ + ) + +/// Insert one `element` into the array at the given `index`. +#define array_insert(self, _index, element) \ + _array__splice((Array *)(self), array_elem_size(self), _index, 0, 1, &(element)) + +/// Remove one element from the array at the given `index`. +#define array_erase(self, _index) \ + _array__erase((Array *)(self), array_elem_size(self), _index) + +/// Pop the last element off the array, returning the element by value. +#define array_pop(self) ((self)->contents[--(self)->size]) + +/// Assign the contents of one array to another, reallocating if necessary. +#define array_assign(self, other) \ + _array__assign((Array *)(self), (const Array *)(other), array_elem_size(self)) + +/// Swap one array with another +#define array_swap(self, other) \ + _array__swap((Array *)(self), (Array *)(other)) + +/// Get the size of the array contents +#define array_elem_size(self) (sizeof *(self)->contents) + +/// Search a sorted array for a given `needle` value, using the given `compare` +/// callback to determine the order. +/// +/// If an existing element is found to be equal to `needle`, then the `index` +/// out-parameter is set to the existing value's index, and the `exists` +/// out-parameter is set to true. Otherwise, `index` is set to an index where +/// `needle` should be inserted in order to preserve the sorting, and `exists` +/// is set to false. +#define array_search_sorted_with(self, compare, needle, _index, _exists) \ + _array__search_sorted(self, 0, compare, , needle, _index, _exists) + +/// Search a sorted array for a given `needle` value, using integer comparisons +/// of a given struct field (specified with a leading dot) to determine the order. +/// +/// See also `array_search_sorted_with`. +#define array_search_sorted_by(self, field, needle, _index, _exists) \ + _array__search_sorted(self, 0, _compare_int, field, needle, _index, _exists) + +/// Insert a given `value` into a sorted array, using the given `compare` +/// callback to determine the order. +#define array_insert_sorted_with(self, compare, value) \ + do { \ + unsigned _index, _exists; \ + array_search_sorted_with(self, compare, &(value), &_index, &_exists); \ + if (!_exists) array_insert(self, _index, value); \ + } while (0) + +/// Insert a given `value` into a sorted array, using integer comparisons of +/// a given struct field (specified with a leading dot) to determine the order. +/// +/// See also `array_search_sorted_by`. +#define array_insert_sorted_by(self, field, value) \ + do { \ + unsigned _index, _exists; \ + array_search_sorted_by(self, field, (value) field, &_index, &_exists); \ + if (!_exists) array_insert(self, _index, value); \ + } while (0) + +// Private + +typedef Array(void) Array; + +/// This is not what you're looking for, see `array_delete`. +static inline void _array__delete(Array *self) { + if (self->contents) { + ts_free(self->contents); + self->contents = NULL; + self->size = 0; + self->capacity = 0; + } +} + +/// This is not what you're looking for, see `array_erase`. +static inline void _array__erase(Array *self, size_t element_size, + uint32_t index) { + assert(index < self->size); + char *contents = (char *)self->contents; + memmove(contents + index * element_size, contents + (index + 1) * element_size, + (self->size - index - 1) * element_size); + self->size--; +} + +/// This is not what you're looking for, see `array_reserve`. +static inline void _array__reserve(Array *self, size_t element_size, uint32_t new_capacity) { + if (new_capacity > self->capacity) { + if (self->contents) { + self->contents = ts_realloc(self->contents, new_capacity * element_size); + } else { + self->contents = ts_malloc(new_capacity * element_size); + } + self->capacity = new_capacity; + } +} + +/// This is not what you're looking for, see `array_assign`. +static inline void _array__assign(Array *self, const Array *other, size_t element_size) { + _array__reserve(self, element_size, other->size); + self->size = other->size; + memcpy(self->contents, other->contents, self->size * element_size); +} + +/// This is not what you're looking for, see `array_swap`. +static inline void _array__swap(Array *self, Array *other) { + Array swap = *other; + *other = *self; + *self = swap; +} + +/// This is not what you're looking for, see `array_push` or `array_grow_by`. +static inline void _array__grow(Array *self, uint32_t count, size_t element_size) { + uint32_t new_size = self->size + count; + if (new_size > self->capacity) { + uint32_t new_capacity = self->capacity * 2; + if (new_capacity < 8) new_capacity = 8; + if (new_capacity < new_size) new_capacity = new_size; + _array__reserve(self, element_size, new_capacity); + } +} + +/// This is not what you're looking for, see `array_splice`. +static inline void _array__splice(Array *self, size_t element_size, + uint32_t index, uint32_t old_count, + uint32_t new_count, const void *elements) { + uint32_t new_size = self->size + new_count - old_count; + uint32_t old_end = index + old_count; + uint32_t new_end = index + new_count; + assert(old_end <= self->size); + + _array__reserve(self, element_size, new_size); + + char *contents = (char *)self->contents; + if (self->size > old_end) { + memmove( + contents + new_end * element_size, + contents + old_end * element_size, + (self->size - old_end) * element_size + ); + } + if (new_count > 0) { + if (elements) { + memcpy( + (contents + index * element_size), + elements, + new_count * element_size + ); + } else { + memset( + (contents + index * element_size), + 0, + new_count * element_size + ); + } + } + self->size += new_count - old_count; +} + +/// A binary search routine, based on Rust's `std::slice::binary_search_by`. +/// This is not what you're looking for, see `array_search_sorted_with` or `array_search_sorted_by`. +#define _array__search_sorted(self, start, compare, suffix, needle, _index, _exists) \ + do { \ + *(_index) = start; \ + *(_exists) = false; \ + uint32_t size = (self)->size - *(_index); \ + if (size == 0) break; \ + int comparison; \ + while (size > 1) { \ + uint32_t half_size = size / 2; \ + uint32_t mid_index = *(_index) + half_size; \ + comparison = compare(&((self)->contents[mid_index] suffix), (needle)); \ + if (comparison <= 0) *(_index) = mid_index; \ + size -= half_size; \ + } \ + comparison = compare(&((self)->contents[*(_index)] suffix), (needle)); \ + if (comparison == 0) *(_exists) = true; \ + else if (comparison < 0) *(_index) += 1; \ + } while (0) + +/// Helper macro for the `_sorted_by` routines below. This takes the left (existing) +/// parameter by reference in order to work with the generic sorting function above. +#define _compare_int(a, b) ((int)*(a) - (int)(b)) + +#ifdef _MSC_VER +#pragma warning(default : 4101) +#elif defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_ARRAY_H_ diff --git a/crates/tree-sitter-command-cad-model/src/tree_sitter/parser.h b/crates/tree-sitter-command-cad-model/src/tree_sitter/parser.h new file mode 100644 index 0000000..17f0e94 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/src/tree_sitter/parser.h @@ -0,0 +1,265 @@ +#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 + +#ifndef TREE_SITTER_API_H_ +typedef uint16_t TSStateId; +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; + +typedef struct { + int32_t start; + int32_t end; +} TSCharacterRange; + +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; +}; + +static inline bool set_contains(TSCharacterRange *ranges, uint32_t len, int32_t lookahead) { + uint32_t index = 0; + uint32_t size = len - index; + while (size > 1) { + uint32_t half_size = size / 2; + uint32_t mid_index = index + half_size; + TSCharacterRange *range = &ranges[mid_index]; + if (lookahead >= range->start && lookahead <= range->end) { + return true; + } else if (lookahead > range->end) { + index = mid_index; + } + size -= half_size; + } + TSCharacterRange *range = &ranges[index]; + return (lookahead >= range->start && lookahead <= range->end); +} + +/* + * Lexer Macros + */ + +#ifdef _MSC_VER +#define UNUSED __pragma(warning(suppress : 4101)) +#else +#define UNUSED __attribute__((unused)) +#endif + +#define START_LEXER() \ + bool result = false; \ + bool skip = false; \ + UNUSED \ + 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 ADVANCE_MAP(...) \ + { \ + static const uint16_t map[] = { __VA_ARGS__ }; \ + for (uint32_t i = 0; i < sizeof(map) / sizeof(map[0]); i += 2) { \ + if (map[i] == lookahead) { \ + state = map[i + 1]; \ + goto next_state; \ + } \ + } \ + } + +#define SKIP(state_value) \ + { \ + skip = true; \ + 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_name, children, precedence, prod_id) \ + {{ \ + .reduce = { \ + .type = TSParseActionTypeReduce, \ + .symbol = symbol_name, \ + .child_count = children, \ + .dynamic_precedence = precedence, \ + .production_id = prod_id \ + }, \ + }} + +#define RECOVER() \ + {{ \ + .type = TSParseActionTypeRecover \ + }} + +#define ACCEPT_INPUT() \ + {{ \ + .type = TSParseActionTypeAccept \ + }} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_PARSER_H_ diff --git a/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt b/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt new file mode 100644 index 0000000..ddb6157 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt @@ -0,0 +1,41 @@ +================== +Assign +================== + + { + test = 5i; + } + +--- + +(source_file + (expression + (procedural_block + (statement + (assign + (path + (local_path + (identifier))) + (assignment_operator) + (expression + (signed_integer))))))) + +================== +Let +================== + +{ + let test = 5i; +} + +--- + +(source_file + (expression + (procedural_block + (statement + (let + (identifier) + (assignment_operator) + (expression + (signed_integer))))))) \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt new file mode 100644 index 0000000..c255658 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -0,0 +1,95 @@ +================== +Empty +================== + +()[] -> std.None {} + +--- + +(source_file + (expression + (closure_definition + (void) + (closure_captured_variables) + (path + (local_path + (identifier) + (identifier))) + (expression + (procedural_block))))) + +================== +Capture +================== + +()[a, b, c] -> std.None {} + +--- + +(source_file + (expression + (closure_definition + (void) + (closure_captured_variables + (identifier) + (identifier) + (identifier)) + (path + (local_path + (identifier) + (identifier))) + (expression + (procedural_block))))) + +================== +Capture, +================== + +()[a, b, c,] -> std.None {} + +--- + +(source_file + (expression + (closure_definition + (void) + (closure_captured_variables + (identifier) + (identifier) + (identifier)) + (path + (local_path + (identifier) + (identifier))) + (expression + (procedural_block))))) + +================== +With a statement +================== + +()[] -> std.None { + value = 5i; +} + +--- + +(source_file + (expression + (closure_definition + (void) + (closure_captured_variables) + (path + (local_path + (identifier) + (identifier))) + (expression + (procedural_block + (statement + (assign + (path + (local_path + (identifier))) + (assignment_operator) + (expression + (signed_integer))))))))) \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt b/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt new file mode 100644 index 0000000..1e9b8fd --- /dev/null +++ b/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt @@ -0,0 +1,95 @@ +================== +Empty +================== + +{} + +--- + +(source_file + (expression + (procedural_block))) + +================== +Closed statement +================== + +{ + 5i; +} + +--- + +(source_file + (expression + (procedural_block + (statement + (closed_expression + (expression + (signed_integer))))))) + +================== +Open statement +================== + +{ + 5i +} + +--- + +(source_file + (expression + (procedural_block + (statement + (expression + (signed_integer)))))) + +================== +Two open statements +================== + +{ + 5i 5i +} + +--- + +(source_file + (expression + (procedural_block + (statement + (expression + (signed_integer))) + (statement + (expression + (signed_integer)))))) + +================== +If statement +================== + +{ + if this { + + } + + 5i +} + +--- + +(source_file + (expression + (procedural_block + (statement + (expression + (if + (expression + (path + (local_path + (identifier)))) + (procedural_block)))) + (statement + (expression + (signed_integer)))))) \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt new file mode 100644 index 0000000..01f507b --- /dev/null +++ b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt @@ -0,0 +1,35 @@ +================== +Comment +================== + +# There's a comment before the code. +() + +--- + +(source_file + (comment) + (expression + (void))) + +================== +Comment +================== + +# There's a comment before the code. +()[]->std.None {} + +--- + +(source_file + (comment) + (expression + (closure_definition + (void) + (closure_captured_variables) + (path + (local_path + (identifier) + (identifier))) + (expression + (procedural_block))))) \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt b/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt new file mode 100644 index 0000000..14e0bb6 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt @@ -0,0 +1,83 @@ +================== +One +================== + +(one = a) + +--- + +(source_file + (expression + (dictionary_construction + (dictionary_member_assignment + (identifier) + (expression + (path + (local_path + (identifier)))))))) + +================== +One, +================== + +(one = a,) + +--- + +(source_file + (expression + (dictionary_construction + (dictionary_member_assignment + (identifier) + (expression + (path + (local_path + (identifier)))))))) + +================== +One, two +================== + +(one = a, two = b) + +--- + +(source_file + (expression + (dictionary_construction + (dictionary_member_assignment + (identifier) + (expression + (path + (local_path + (identifier))))) + (dictionary_member_assignment + (identifier) + (expression + (path + (local_path + (identifier)))))))) + +================== +One, two, +================== + +(one = a, two = b,) + +--- + +(source_file + (expression + (dictionary_construction + (dictionary_member_assignment + (identifier) + (expression + (path + (local_path + (identifier))))) + (dictionary_member_assignment + (identifier) + (expression + (path + (local_path + (identifier)))))))) \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt b/crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt new file mode 100644 index 0000000..934b673 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt @@ -0,0 +1,21 @@ +================== +Assign +================== + + { + for x in y {} + } + +--- + +(source_file + (expression + (procedural_block + (statement + (for + (identifier) + (expression + (path + (local_path + (identifier)))) + (procedural_block)))))) \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/test/corpus/if.txt b/crates/tree-sitter-command-cad-model/test/corpus/if.txt new file mode 100644 index 0000000..940a59e --- /dev/null +++ b/crates/tree-sitter-command-cad-model/test/corpus/if.txt @@ -0,0 +1,50 @@ +================== +If +================== + +if true {} + +--- + +(source_file + (expression + (if + (expression + (boolean)) + (procedural_block)))) + +================== +If else +================== + +if true {} else {} + +--- + +(source_file + (expression + (if + (expression + (boolean)) + (procedural_block) + (procedural_block)))) + +================== +With other operations +================== + +1 + if true {} + +--- + +(source_file + (expression + (binary_expression + (expression + (scalar + (number))) + (expression + (if + (expression + (boolean)) + (procedural_block)))))) \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/test/corpus/list.txt b/crates/tree-sitter-command-cad-model/test/corpus/list.txt new file mode 100644 index 0000000..63f5847 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/test/corpus/list.txt @@ -0,0 +1,83 @@ +================== +Empty +================== + +[] + +--- + +(source_file + (expression + (list))) + +================== +Single +================== + +[this,] + +--- + +(source_file + (expression + (list + (expression + (path + (local_path + (identifier))))))) + +================== +Multi +================== + +[this, is, a, test] + +--- + +(source_file + (expression + (list + (expression + (path + (local_path + (identifier)))) + (expression + (path + (local_path + (identifier)))) + (expression + (path + (local_path + (identifier)))) + (expression + (path + (local_path + (identifier))))))) + +================== +Multi with comma at the end +================== + +[this, is, a, test,] + +--- + +(source_file + (expression + (list + (expression + (path + (local_path + (identifier)))) + (expression + (path + (local_path + (identifier)))) + (expression + (path + (local_path + (identifier)))) + (expression + (path + (local_path + (identifier))))))) \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt b/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt new file mode 100644 index 0000000..dc560b5 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt @@ -0,0 +1,45 @@ +================== +Precedence +================== + +(a + b * c ** d >= e) + c + +--- + +(source_file + (expression + (binary_expression + (expression + (parenthesis + (expression + (binary_expression + (expression + (binary_expression + (expression + (path + (local_path + (identifier)))) + (expression + (binary_expression + (expression + (path + (local_path + (identifier)))) + (expression + (binary_expression + (expression + (path + (local_path + (identifier)))) + (expression + (path + (local_path + (identifier)))))))))) + (expression + (path + (local_path + (identifier)))))))) + (expression + (path + (local_path + (identifier))))))) \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt b/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt new file mode 100644 index 0000000..fdb1283 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt @@ -0,0 +1,130 @@ +================== +Comment +================== + +() + +--- + +(source_file + (expression + (void))) + +================== +String +================== + +"Some text" + +--- + +(source_file + (expression + (string))) + +================== +Escaped string +================== + +"Some \"text\"" + +--- + +(source_file + (expression + (string))) + +================== +Signed Integer Positive +================== + +123i + +--- + +(source_file + (expression + (signed_integer))) + +================== +Signed Integer Positive with plus +================== + ++123i + +--- + +(source_file + (expression + (unary_expression + (expression + (signed_integer))))) + +================== +Signed Integer Positive with minus +================== + +-123i + +--- + +(source_file + (expression + (unary_expression + (expression + (signed_integer))))) + +================== +Scalar no decimal no unit +================== + +123 + +--- + +(source_file + (expression + (scalar + (number)))) + +================== +Scalar no unit +================== + +123.321 + +--- + +(source_file + (expression + (scalar + (number) + (number)))) + +================== +Scalar with unquoted unit +================== + +123 mm + +--- + +(source_file + (expression + (scalar + (number) + (identifier)))) + +================== +Scalar with quoted unit +================== + +123 'mm' + +--- + +(source_file + (expression + (scalar + (number) + (unit_quote)))) \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt b/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt new file mode 100644 index 0000000..af628c0 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt @@ -0,0 +1,241 @@ +================== +One +================== + +( one: std.Constraint ) + +--- + +(source_file + (expression + (struct_definition + (struct_member + (identifier) + (path + (local_path + (identifier) + (identifier))))))) + +================== +One, +================== + +( one: std.Constraint ) + +--- + +(source_file + (expression + (struct_definition + (struct_member + (identifier) + (path + (local_path + (identifier) + (identifier))))))) + +================== +... +================== + +( ... ) + +--- + +(source_file + (expression + (struct_definition + (varadic_dots)))) + +================== +..., +================== + +( ..., ) + +--- + +(source_file + (expression + (struct_definition + (varadic_dots)))) + +================== +One, ... +================== + +( one: std.Constraint, ... ) + +--- + +(source_file + (expression + (struct_definition + (struct_member + (identifier) + (path + (local_path + (identifier) + (identifier)))) + (varadic_dots)))) + +================== +One, ..., +================== + +( one: std.Constraint, ..., ) + +--- + +(source_file + (expression + (struct_definition + (struct_member + (identifier) + (path + (local_path + (identifier) + (identifier)))) + (varadic_dots)))) + +================== +One, two +================== + +( one: std.Constraint, two: std.Constraint ) + +--- + +(source_file + (expression + (struct_definition + (struct_member + (identifier) + (path + (local_path + (identifier) + (identifier)))) + (struct_member + (identifier) + (path + (local_path + (identifier) + (identifier))))))) + +================== +One, two, +================== + +( one: std.Constraint, two: std.Constraint, ) + +--- + +(source_file + (expression + (struct_definition + (struct_member + (identifier) + (path + (local_path + (identifier) + (identifier)))) + (struct_member + (identifier) + (path + (local_path + (identifier) + (identifier))))))) + +================== +One, two, ... +================== + +( one: std.Constraint, two: std.Constraint, ... ) + +--- + +(source_file + (expression + (struct_definition + (struct_member + (identifier) + (path + (local_path + (identifier) + (identifier)))) + (struct_member + (identifier) + (path + (local_path + (identifier) + (identifier)))) + (varadic_dots)))) + +================== +One, two, ..., +================== + +( one: std.Constraint, two: std.Constraint, ..., ) + +--- + +(source_file + (expression + (struct_definition + (struct_member + (identifier) + (path + (local_path + (identifier) + (identifier)))) + (struct_member + (identifier) + (path + (local_path + (identifier) + (identifier)))) + (varadic_dots)))) + +================== +Default +================== + +( one: std.Constraint = a ) + +--- + +(source_file + (expression + (struct_definition + (struct_member + (identifier) + (path + (local_path + (identifier) + (identifier))) + (expression + (path + (local_path + (identifier)))))))) + +================== +Default, +================== + +( one: std.Constraint = a, ) + +--- + +(source_file + (expression + (struct_definition + (struct_member + (identifier) + (path + (local_path + (identifier) + (identifier))) + (expression + (path + (local_path + (identifier)))))))) \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt b/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt new file mode 100644 index 0000000..bb16d59 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt @@ -0,0 +1,46 @@ +================== +Local Variable Path +================== + +this.is.a.test + +--- + +(source_file +(expression + (path + (local_path + (identifier) + (identifier) + (identifier) + (identifier))))) + +================== +Argument +================== + +@ + +--- + +(source_file +(expression + (path + (argument_path)))) + +================== +Argument Variable Path +================== + +@.this.is.a.test + +--- + +(source_file +(expression + (path + (argument_path + (identifier) + (identifier) + (identifier) + (identifier))))) \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/tree-sitter.json b/crates/tree-sitter-command-cad-model/tree-sitter.json new file mode 100644 index 0000000..839ac35 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/tree-sitter.json @@ -0,0 +1,34 @@ +{ + "grammars": [ + { + "name": "command_cad_model", + "camelcase": "CommandCadModel", + "scope": "source.command_cad_model", + "file-types": [ + ".ccm" + ], + "injection-regex": "^command_cad_model$" + } + ], + "metadata": { + "version": "0.1.0", + "license": "AGPL", + "description": "Scripts for creating models in Command CAD", + "authors": [ + { + "name": "James Carl" + } + ], + "links": { + "repository": "https://github.com/IamTheCarl/CommandCAD" + } + }, + "bindings": { + "c": true, + "go": true, + "node": true, + "python": true, + "rust": true, + "swift": true + } +} \ No newline at end of file From b9b6b474a7549a02c80d77a377963570997af59a Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 22 Nov 2024 17:35:38 -0500 Subject: [PATCH 003/106] Implement Topiary formatter --- crates/topiary/command_cad_model.scm | 74 ++++++++++++++++++++++++++++ crates/topiary/language.ncl | 12 +++++ crates/topiary/shell.nix | 27 ++++++++++ crates/topiary/test.ccm | 22 +++++++++ 4 files changed, 135 insertions(+) create mode 100644 crates/topiary/command_cad_model.scm create mode 100644 crates/topiary/language.ncl create mode 100644 crates/topiary/shell.nix create mode 100644 crates/topiary/test.ccm diff --git a/crates/topiary/command_cad_model.scm b/crates/topiary/command_cad_model.scm new file mode 100644 index 0000000..776966a --- /dev/null +++ b/crates/topiary/command_cad_model.scm @@ -0,0 +1,74 @@ +; These should not be formatted. +[ + (comment) + (string) +] @leaf + +; Surround spaces +[ + "else" + "for" + "if" + "let" + "in" + "*" + "/" + "//" + "+" + "-" + "<<" + ">>" + "&" + "|" + "^" + ">" + ">=" + "==" + "<=" + "<" + "!=" + "&&" + "||" + "->" + "=" + "&=" + "|=" + "^=" + "&&=" + "||=" + "^^=" + "+=" + "-=" + "**=" + "*=" + "//=" + "/=" + "<<=" + ">>=" + (path) +] @prepend_space @append_space + +; Allow blank lines before. +[ + (statement) + (comment) +] @allow_blank_line_before + +; Newlines go after statements. +( + (statement) @append_spaced_softline + . + (comment)* @do_nothing +) +(comment) @append_hardline @prepend_space +("," @prepend_antispace @append_space) +(struct_definition ")" @prepend_antispace) + +(procedural_block + . + "{" @append_spaced_softline @append_indent_start + + + "}" @prepend_indent_end + . +) diff --git a/crates/topiary/language.ncl b/crates/topiary/language.ncl new file mode 100644 index 0000000..f1a1403 --- /dev/null +++ b/crates/topiary/language.ncl @@ -0,0 +1,12 @@ +{ + languages = { + command_cad_model = { + extensions = ["ccm"], + grammar = { + git = "https://github.com/IamTheCarl/CommandCAD.git", + rev = "eb24b9bc749c4a494a71cdeb3e4345f446c05be8", + subdir = "crates/tree-sitter-command-cad-model" + }, + } + }, +} \ No newline at end of file diff --git a/crates/topiary/shell.nix b/crates/topiary/shell.nix new file mode 100644 index 0000000..5e003d9 --- /dev/null +++ b/crates/topiary/shell.nix @@ -0,0 +1,27 @@ +{ pkgs ? import { } }: +let + topiary = pkgs.rustPlatform.buildRustPackage rec { + pname = "topiary-cli"; + version = "0.5.1"; + + src = pkgs.fetchCrate { + inherit pname version; + sha256 = "sha256-D8P4LHq8DxDH2o2aWJjDmMnx+aDlcb0zjeVcUry3jrs="; + }; + + cargoSha256 = "sha256-5c88uUZ3USeRQ6QY/Qfax5UbLsAX6xswybLPhybCJko="; + + # Checks require network access to download languages. + doCheck = false; + }; +in +pkgs.mkShell { + buildInputs = [ + topiary + ]; + + # TODO make this point to the directory with our language query. + shellHook = '' + # export TOPIARTY_LANGUAGE_DIR= + ''; +} diff --git a/crates/topiary/test.ccm b/crates/topiary/test.ccm new file mode 100644 index 0000000..6e811d2 --- /dev/null +++ b/crates/topiary/test.ccm @@ -0,0 +1,22 @@ +# This is a comment +()[] -> std.None { + let value = 5i; # This is some text. + let value = 3i; + + let some_text = "This is some text my man."; + + if this { + # True + } else { + # False + } + + # This is some other text. + let value = 1i + 2i * 3i; + + for i in list { } + + value = 3i; + + let my_function = (a: std.Length, b: std.Length)[value, value2] -> std.None { }; +} From 9a169c9fac924dffb65d61c7a45f058ee567df97 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 23 Nov 2024 09:06:12 -0500 Subject: [PATCH 004/106] Early development of an interpreter --- Cargo.lock | 595 +++++++++--------- Cargo.toml | 2 +- build_dependencies.nix | 6 +- crates/formatter/Cargo.toml | 2 +- crates/interpreter/Cargo.toml | 13 + crates/interpreter/build.rs | 63 ++ crates/interpreter/src/lib.rs | 104 +++ .../tree-sitter-command-cad-model/grammar.js | 4 +- .../src/grammar.json | 16 +- .../src/node-types.json | 20 +- .../src/parser.c | 384 +++++------ .../test/corpus/if.txt | 6 +- 12 files changed, 703 insertions(+), 512 deletions(-) create mode 100644 crates/interpreter/Cargo.toml create mode 100644 crates/interpreter/build.rs create mode 100644 crates/interpreter/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 027efd0..fce6379 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "addr2line" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" -dependencies = [ - "gimli", -] - [[package]] name = "adler" version = "1.0.2" @@ -65,15 +56,6 @@ dependencies = [ "libc", ] -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - [[package]] name = "anstream" version = "0.6.14" @@ -160,19 +142,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] -name = "backtrace" -version = "0.3.73" +name = "beef" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" [[package]] name = "bezier-rs" @@ -245,13 +218,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.98" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" dependencies = [ "jobserver", "libc", - "once_cell", + "shlex", ] [[package]] @@ -260,6 +233,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "check_keyword" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3678a4fc14c47dce76127d66f9b2637ff497af665d5618f1f756f4ad1b4a5b1" +dependencies = [ + "phf", +] + [[package]] name = "chrono" version = "0.4.38" @@ -306,7 +288,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.89", ] [[package]] @@ -390,6 +372,15 @@ version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "core-foundation-sys" version = "0.8.6" @@ -444,12 +435,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "diff" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" - [[package]] name = "downcast-rs" version = "1.2.1" @@ -462,6 +447,26 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +[[package]] +name = "enum-map" +version = "3.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb2a23ad36148a32085addb3ef1aa39805d044d4532ff258360d523a4eff38e5" +dependencies = [ + "enum-map-derive", +] + +[[package]] +name = "enum-map-derive" +version = "1.0.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44600091ce205df4f8b661e98617d49c37b2dd609e449ec82b0fb5d7b33e2eeb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + [[package]] name = "enum_dispatch" version = "0.3.13" @@ -471,7 +476,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.89", ] [[package]] @@ -491,7 +496,7 @@ checksum = "a0e8987f91d86aa10313adf7c767a8cfd040364432d4e9f722b049b8ff7e634a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.89", ] [[package]] @@ -576,6 +581,12 @@ dependencies = [ "miniz_oxide", ] +[[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" @@ -591,7 +602,6 @@ version = "0.1.0" dependencies = [ "anyhow", "clap", - "topiary-core", "tree-sitter-command-cad-model", ] @@ -606,101 +616,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "gimli" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" - [[package]] name = "git2" version = "0.18.3" @@ -804,6 +719,16 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "interpreter" +version = "0.1.0" +dependencies = [ + "tree-sitter", + "tree-sitter-command-cad-model", + "type-sitter", + "type-sitter-gen", +] + [[package]] name = "is-terminal" version = "0.4.12" @@ -821,15 +746,6 @@ version = "1.70.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.12.1" @@ -863,6 +779,12 @@ dependencies = [ "libc", ] +[[package]] +name = "join-lazy-fmt" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e90f66baf362a8a5ce2ca820290fbede0572a76fabf8408bc68c02f9ad1d03bf" + [[package]] name = "js-sys" version = "0.3.68" @@ -880,9 +802,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" [[package]] name = "libgit2-sys" @@ -898,6 +820,16 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "libloading" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if", + "windows-targets 0.52.5", +] + [[package]] name = "libm" version = "0.2.8" @@ -952,13 +884,46 @@ version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +[[package]] +name = "logos" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c6b6e02facda28ca5fb8dbe4b152496ba3b1bd5a4b40bb2b1b2d8ad74e0f39b" +dependencies = [ + "logos-derive", +] + +[[package]] +name = "logos-codegen" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b32eb6b5f26efacd015b000bfc562186472cd9b34bdba3f6b264e2a052676d10" +dependencies = [ + "beef", + "fnv", + "lazy_static", + "proc-macro2", + "quote", + "regex-syntax", + "syn 2.0.89", +] + +[[package]] +name = "logos-derive" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e5d0c5463c911ef55624739fc353238b4e310f0144be1f875dc42fec6bfd5ec" +dependencies = [ + "logos-codegen", +] + [[package]] name = "macros" version = "0.1.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.89", ] [[package]] @@ -1057,7 +1022,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.89", ] [[package]] @@ -1089,15 +1054,6 @@ dependencies = [ "libm", ] -[[package]] -name = "object" -version = "0.36.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" version = "1.19.0" @@ -1153,16 +1109,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.66", -] - -[[package]] -name = "pad" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3" -dependencies = [ - "unicode-width", + "syn 2.0.89", ] [[package]] @@ -1245,48 +1192,68 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] -name = "pin-project-lite" -version = "0.2.15" +name = "phf" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared", +] [[package]] -name = "pin-utils" -version = "0.1.0" +name = "phf_generator" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand", +] [[package]] -name = "pkg-config" -version = "0.3.30" +name = "phf_macros" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.89", +] [[package]] -name = "pretty_assertions" -version = "1.4.1" +name = "phf_shared" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" dependencies = [ - "diff", - "yansi", + "siphasher", ] [[package]] -name = "prettydiff" -version = "0.6.4" +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "prettyplease" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ff1fec61082821f8236cf6c0c14e8172b62ce8a72a0eedc30d3b247bb68dc11" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ - "ansi_term", - "pad", + "proc-macro2", + "syn 2.0.89", ] [[package]] name = "proc-macro2" -version = "1.0.84" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec96c6a92621310b51366f1e28d05ef11489516e93be030060e5fc12024a49d6" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -1299,7 +1266,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.89", "version_check", "yansi", ] @@ -1316,13 +1283,28 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + [[package]] name = "rawpointer" version = "0.2.1" @@ -1382,12 +1364,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - [[package]] name = "rustc-hash" version = "1.1.0" @@ -1428,6 +1404,15 @@ dependencies = [ "bytemuck", ] +[[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 = "scopeguard" version = "1.2.0" @@ -1445,31 +1430,32 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.203" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.89", ] [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -1487,6 +1473,12 @@ dependencies = [ "unsafe-libyaml", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "simba" version = "0.8.1" @@ -1500,6 +1492,12 @@ dependencies = [ "wide", ] +[[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" @@ -1509,6 +1507,12 @@ 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.2" @@ -1555,6 +1559,12 @@ dependencies = [ "byteorder 0.4.2", ] +[[package]] +name = "streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" + [[package]] name = "strsim" version = "0.11.1" @@ -1574,9 +1584,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" dependencies = [ "proc-macro2", "quote", @@ -1631,7 +1641,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.89", ] [[package]] @@ -1672,95 +1682,96 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] -name = "tokio" -version = "1.41.1" +name = "tree-sitter" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +checksum = "b67baf55e7e1b6806063b1e51041069c90afff16afcbbccd278d899f9d84bca4" dependencies = [ - "backtrace", - "pin-project-lite", - "tokio-macros", + "cc", + "regex", + "regex-syntax", + "streaming-iterator", + "tree-sitter-language", ] [[package]] -name = "tokio-macros" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +name = "tree-sitter-command-cad-model" +version = "0.0.1" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", + "cc", + "tree-sitter", ] [[package]] -name = "topiary-core" -version = "0.5.1" +name = "tree-sitter-language" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0236570d34c4e60d88e6bce8446f6d6fd51f5e1e4bdea68cdcf0d1ff5c89776d" -dependencies = [ - "futures", - "itertools 0.11.0", - "log", - "pretty_assertions", - "prettydiff", - "serde", - "serde_json", - "tokio", - "topiary-tree-sitter-facade", - "topiary-web-tree-sitter-sys", -] +checksum = "e8ddffe35a0e5eeeadf13ff7350af564c6e73993a24db62caee1822b185c2600" [[package]] -name = "topiary-tree-sitter-facade" -version = "0.5.1" +name = "type-map" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb978cfd5d4686e9193eed02c6c3abe8aac98e9d4942aaaf83ea472fc9b32d6" +checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" dependencies = [ - "js-sys", - "topiary-web-tree-sitter-sys", - "tree-sitter", - "wasm-bindgen", - "web-sys", + "rustc-hash", ] [[package]] -name = "topiary-web-tree-sitter-sys" -version = "0.5.1" +name = "type-sitter" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e6ec4ec3a2426af1ff74688cd19c841a1e852403665d96b455946cb491cb0b6" +checksum = "1bbcf20b0a8aff76d7b418c1811598a7ba6bc7b8d2c3955a21034ca481d6f0e3" dependencies = [ - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", + "type-sitter-lib", + "type-sitter-proc", ] [[package]] -name = "tree-sitter" -version = "0.22.6" +name = "type-sitter-gen" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7cc499ceadd4dcdf7ec6d4cbc34ece92c3fa07821e287aedecd4416c516dca" +checksum = "9e84c1f7c03c217cfcf77ad1613a20efd3521d6b66e8e941f062e6600b0c45ea" dependencies = [ "cc", - "regex", + "check_keyword", + "convert_case", + "enum-map", + "join-lazy-fmt", + "libc", + "libloading", + "logos", + "prettyplease", + "proc-macro2", + "quote", + "serde", + "serde_json", + "slice-group-by", + "syn 2.0.89", + "tree-sitter", + "tree-sitter-language", + "walkdir", ] [[package]] -name = "tree-sitter-command-cad-model" -version = "0.0.1" +name = "type-sitter-lib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2d942ec6387309622737c9c5c16601e5e09f331f00b28014d572dc3bf6e55f3" dependencies = [ - "cc", + "streaming-iterator", "tree-sitter", ] [[package]] -name = "type-map" -version = "0.5.0" +name = "type-sitter-proc" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" +checksum = "470884f0a6d76a3362633fa21a73cd16b2e715dfd12075f52289fe7dd4a72e49" dependencies = [ - "rustc-hash", + "proc-macro2", + "syn 2.0.89", + "type-sitter-gen", ] [[package]] @@ -1801,10 +1812,10 @@ dependencies = [ ] [[package]] -name = "unicode-width" -version = "0.1.14" +name = "unicode-segmentation" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unsafe-libyaml" @@ -1851,6 +1862,16 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "wasite" version = "0.1.0" @@ -1878,22 +1899,10 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.89", "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" @@ -1912,7 +1921,7 @@ checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.89", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1960,22 +1969,6 @@ dependencies = [ "safe_arch", ] -[[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.8" @@ -1985,12 +1978,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[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" @@ -2162,7 +2149,7 @@ checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.89", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index b617112..8ce89d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,4 @@ -workspace = { members = ["crates/common_data_types", "crates/macros", "crates/formatter"] } +workspace = { members = ["crates/common_data_types", "crates/macros", "crates/formatter", "crates/interpreter"] } [package] name = "command_cad" version = "0.6.0" diff --git a/build_dependencies.nix b/build_dependencies.nix index 937969b..2aa3bc5 100644 --- a/build_dependencies.nix +++ b/build_dependencies.nix @@ -20,14 +20,14 @@ let tree-sitter-cli = rust_platform.buildRustPackage rec { pname = "tree-sitter-cli"; - version = "0.22.6"; + version = "0.24.4"; src = pkgs.fetchCrate { inherit pname version; - sha256 = "sha256-bqWGJ8ZbqKAI0T9Fzx9pW6dOztJZ72dzJNOj1jtOc4o="; + sha256 = "sha256-+45nWB37pR6yUqyFovlnOTCCHSPPeoKa0mcEYQn2I1o="; }; - cargoSha256 = "sha256-BreZqkSP/fis5HmjFYQeDux2EB37nqFaIS4HVRTe3Kg="; + cargoSha256 = "sha256-WDMAuRbU7Afuwg4D9oZG2ZIQfhkFXZXhCnJ3qqZyuSo="; doCheck = false; }; in diff --git a/crates/formatter/Cargo.toml b/crates/formatter/Cargo.toml index 11899bb..957d038 100644 --- a/crates/formatter/Cargo.toml +++ b/crates/formatter/Cargo.toml @@ -6,5 +6,5 @@ edition = "2021" [dependencies] anyhow = "1.0" tree-sitter-command-cad-model= { path = "../tree-sitter-command-cad-model" } -topiary-core = "0.5.1" +# topiary-core = "0.5.1" clap = { version = "4.4", features = [ "derive", "wrap_help" ] } \ No newline at end of file diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml new file mode 100644 index 0000000..7ea7d89 --- /dev/null +++ b/crates/interpreter/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "interpreter" +version = "0.1.0" +edition = "2021" + +[dependencies] +tree-sitter = "0.24.4" +tree-sitter-command-cad-model = { path = "../tree-sitter-command-cad-model" } +type-sitter = "0.5.2" + +[build-dependencies] +type-sitter-gen = "0.5.2" +tree-sitter-command-cad-model = { path = "../tree-sitter-command-cad-model" } \ No newline at end of file diff --git a/crates/interpreter/build.rs b/crates/interpreter/build.rs new file mode 100644 index 0000000..87586b7 --- /dev/null +++ b/crates/interpreter/build.rs @@ -0,0 +1,63 @@ +// use std::path::{Path, PathBuf}; +// use std::{env, fs}; +// use type_sitter_gen::{generate_nodes, generate_queries, super_nodes}; +// +// fn main() { +// // Common setup +// let out_dir = PathBuf::from(env::var_os("OUT_DIR").unwrap()); +// println!("cargo::rerun-if-changed=build.rs"); +// +// let parser_path = "../tree-sitter-command-cad-model"; +// +// // Obligatory: in this and future lines, replace `vendor/path/to/tree-sitter-foobar-lang` +// // with the path to your grammar's folder, relative to the folder containing `Cargo.toml` +// println!("cargo::rerun-if-changed={parser_path}"); +// +// let parser_path = Path::new(parser_path); +// +// // To generate nodes +// let path = parser_path.join("src/node-types.json"); +// fs::write( +// out_dir.join("nodes.rs"), +// generate_nodes(path).unwrap().into_string(), +// ) +// .unwrap(); +// +// // To generate queries +// fs::write( +// out_dir.join("queries.rs"), +// generate_queries( +// parser_path.join("queries"), +// parser_path, +// // Replace with a different `syn::Path` if the nodes don't exist in a subling to `dest_path` named `nodes` +// &super_nodes(), +// // Replace with `true` if you are using the `yak-sitter` feature (by default, no) +// false, +// ) +// .unwrap() +// .into_string(), +// ) +// .unwrap(); +// } +use std::path::PathBuf; +use std::{env, fs}; +use type_sitter_gen::generate_nodes; + +fn main() { + // Common setup. Same as before + let out_dir = PathBuf::from(env::var_os("OUT_DIR").unwrap()); + println!("cargo::rerun-if-changed=build.rs"); + + // Obligatory: in this and future lines, replace `vendor/path/to/tree-sitter-foobar-lang` + // with the path to your grammar's folder, relative to the folder containing `Cargo.toml` + println!("cargo::rerun-if-changed=vendor/path/to/tree-sitter-foobar-lang"); + + // To generate nodes + fs::write( + out_dir.join("nodes.rs"), + generate_nodes(tree_sitter_command_cad_model::NODE_TYPES) + .unwrap() + .into_string(), + ) + .unwrap(); +} diff --git a/crates/interpreter/src/lib.rs b/crates/interpreter/src/lib.rs new file mode 100644 index 0000000..ff47441 --- /dev/null +++ b/crates/interpreter/src/lib.rs @@ -0,0 +1,104 @@ +use nodes::{Boolean, List, SourceFile}; +use type_sitter::{IncorrectKind, Node, NodeResult}; + +mod nodes { + include!(concat!(env!("OUT_DIR"), "/nodes.rs")); +} + +use nodes::anon_unions::{ + BinaryExpression_Boolean_ClosureDefinition_Default_DictionaryConstruction_If_List_Parenthesis_Path_ProceduralBlock_Scalar_SignedInteger_String_StructDefinition_UnaryExpression_UnsignedInteger_Void as EType, + False_True as BooleanValue, +}; + +pub enum Expression { + BinaryExpression(()), + Boolean(bool), + ClosureDefinition(()), + Default, + DictionaryConstruction(()), + If(()), + List(Vec), + Parenthesis(Box), + Path(()), + ProceduralBlock(()), + Scalar(()), + SignedInteger(i64), + String(String), + StructDefinition(()), + UnaryExpression(()), + UnsignedInteger(u64), + Void, +} + +impl<'t> TryFrom> for Expression { + type Error = IncorrectKind<'t>; + + fn try_from(value: Boolean<'t>) -> Result { + Ok(Self::Boolean(matches!( + value.child()?, + BooleanValue::True(_) + ))) + } +} + +impl<'t> TryFrom> for Expression { + type Error = IncorrectKind<'t>; + + fn try_from(value: List<'t>) -> Result { + let mut cursor = value.walk(); + + let mut list = Vec::new(); + for expression in value.expressions(&mut cursor) { + let expression = expression?; + let expression = Self::try_from(expression)?; + list.push(expression); + } + + Ok(Self::List(list)) + } +} +impl<'t> TryFrom> for Expression { + type Error = IncorrectKind<'t>; + + fn try_from(value: nodes::Parenthesis<'t>) -> Result { + let expression = value.expression()?; + Self::try_from(expression) + } +} + +impl<'t> TryFrom> for Expression { + type Error = IncorrectKind<'t>; + + fn try_from(value: nodes::Expression<'t>) -> Result { + match value.child()? { + EType::BinaryExpression(binary_expression) => todo!(), + EType::Boolean(value) => Self::try_from(value), + EType::ClosureDefinition(closure_definition) => todo!(), + EType::Default(_) => Ok(Self::Default), + EType::DictionaryConstruction(dictionary_construction) => todo!(), + EType::If(_) => todo!(), + EType::List(list) => Self::try_from(list), + EType::Parenthesis(parenthesis) => Self::try_from(parenthesis), + EType::Path(path) => todo!(), + EType::ProceduralBlock(procedural_block) => todo!(), + EType::Scalar(scalar) => todo!(), + EType::SignedInteger(signed_integer) => todo!(), + EType::String(_) => todo!(), + EType::StructDefinition(struct_definition) => todo!(), + EType::UnaryExpression(unary_expression) => todo!(), + EType::UnsignedInteger(unsigned_integer) => todo!(), + EType::Void(void) => Ok(Self::Void), + } + } +} + +pub fn new() -> type_sitter::Parser> { + type_sitter::Parser::new(&tree_sitter_command_cad_model::language()) + .expect("Error loading CommandCadModel grammar") +} + +pub fn compile<'t>(tree: &'t type_sitter::Tree>) -> NodeResult<'t, Expression> { + let root = tree.root_node()?; + + Expression::try_from(root.expression()?) +} diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index c7ce549..269a545 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -56,7 +56,9 @@ module.exports = grammar({ scalar: $ => prec.left(PREC.unit, seq($._float, optional($._unit))), - boolean: $ => choice('true', 'false'), + true: $ => 'true', + false: $ => 'false', + boolean: $ => choice($.true, $.false), expression: $ => choice( $.void, diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 6181f78..df15250 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -136,16 +136,24 @@ ] } }, + "true": { + "type": "STRING", + "value": "true" + }, + "false": { + "type": "STRING", + "value": "false" + }, "boolean": { "type": "CHOICE", "members": [ { - "type": "STRING", - "value": "true" + "type": "SYMBOL", + "name": "true" }, { - "type": "STRING", - "value": "false" + "type": "SYMBOL", + "name": "false" } ] }, diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 884ab9a..e321a40 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -161,7 +161,21 @@ { "type": "boolean", "named": true, - "fields": {} + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "false", + "named": true + }, + { + "type": "true", + "named": true + } + ] + } }, { "type": "closed_expression", @@ -815,7 +829,7 @@ }, { "type": "false", - "named": false + "named": true }, { "type": "for", @@ -851,7 +865,7 @@ }, { "type": "true", - "named": false + "named": true }, { "type": "unit_quote", diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 8b45ee5..1d048bf 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -28,8 +28,8 @@ enum ts_symbol_identifiers { sym_number = 10, sym_unit_quote = 11, anon_sym_DOT = 12, - anon_sym_true = 13, - anon_sym_false = 14, + sym_true = 13, + sym_false = 14, anon_sym_DASH = 15, anon_sym_PLUS = 16, anon_sym_BANG = 17, @@ -135,8 +135,8 @@ static const char * const ts_symbol_names[] = { [sym_number] = "number", [sym_unit_quote] = "unit_quote", [anon_sym_DOT] = ".", - [anon_sym_true] = "true", - [anon_sym_false] = "false", + [sym_true] = "true", + [sym_false] = "false", [anon_sym_DASH] = "-", [anon_sym_PLUS] = "+", [anon_sym_BANG] = "!", @@ -242,8 +242,8 @@ static const TSSymbol ts_symbol_map[] = { [sym_number] = sym_number, [sym_unit_quote] = sym_unit_quote, [anon_sym_DOT] = anon_sym_DOT, - [anon_sym_true] = anon_sym_true, - [anon_sym_false] = anon_sym_false, + [sym_true] = sym_true, + [sym_false] = sym_false, [anon_sym_DASH] = anon_sym_DASH, [anon_sym_PLUS] = anon_sym_PLUS, [anon_sym_BANG] = anon_sym_BANG, @@ -388,13 +388,13 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, - [anon_sym_true] = { + [sym_true] = { .visible = true, - .named = false, + .named = true, }, - [anon_sym_false] = { + [sym_false] = { .visible = true, - .named = false, + .named = true, }, [anon_sym_DASH] = { .visible = true, @@ -1437,13 +1437,13 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { if (lookahead == 'e') ADVANCE(26); END_STATE(); case 24: - ACCEPT_TOKEN(anon_sym_true); + ACCEPT_TOKEN(sym_true); END_STATE(); case 25: if (lookahead == 'l') ADVANCE(27); END_STATE(); case 26: - ACCEPT_TOKEN(anon_sym_false); + ACCEPT_TOKEN(sym_false); END_STATE(); case 27: if (lookahead == 't') ADVANCE(28); @@ -1632,8 +1632,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_number] = ACTIONS(1), [sym_unit_quote] = ACTIONS(1), [anon_sym_DOT] = ACTIONS(1), - [anon_sym_true] = ACTIONS(1), - [anon_sym_false] = ACTIONS(1), + [sym_true] = ACTIONS(1), + [sym_false] = ACTIONS(1), [anon_sym_DASH] = ACTIONS(1), [anon_sym_PLUS] = ACTIONS(1), [anon_sym_BANG] = ACTIONS(1), @@ -1715,8 +1715,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_signed_integer] = ACTIONS(7), [sym_unsigned_integer] = ACTIONS(7), [sym_number] = ACTIONS(13), - [anon_sym_true] = ACTIONS(15), - [anon_sym_false] = ACTIONS(15), + [sym_true] = ACTIONS(15), + [sym_false] = ACTIONS(15), [anon_sym_DASH] = ACTIONS(17), [anon_sym_PLUS] = ACTIONS(17), [anon_sym_BANG] = ACTIONS(17), @@ -1739,8 +1739,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_unsigned_integer] = ACTIONS(27), [sym_number] = ACTIONS(29), [anon_sym_DOT] = ACTIONS(31), - [anon_sym_true] = ACTIONS(29), - [anon_sym_false] = ACTIONS(29), + [sym_true] = ACTIONS(29), + [sym_false] = ACTIONS(29), [anon_sym_DASH] = ACTIONS(29), [anon_sym_PLUS] = ACTIONS(29), [anon_sym_BANG] = ACTIONS(29), @@ -1803,8 +1803,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_unsigned_integer] = ACTIONS(33), [sym_number] = ACTIONS(35), [anon_sym_DOT] = ACTIONS(31), - [anon_sym_true] = ACTIONS(35), - [anon_sym_false] = ACTIONS(35), + [sym_true] = ACTIONS(35), + [sym_false] = ACTIONS(35), [anon_sym_DASH] = ACTIONS(35), [anon_sym_PLUS] = ACTIONS(35), [anon_sym_BANG] = ACTIONS(35), @@ -1867,8 +1867,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_unsigned_integer] = ACTIONS(37), [sym_number] = ACTIONS(39), [anon_sym_DOT] = ACTIONS(31), - [anon_sym_true] = ACTIONS(39), - [anon_sym_false] = ACTIONS(39), + [sym_true] = ACTIONS(39), + [sym_false] = ACTIONS(39), [anon_sym_DASH] = ACTIONS(39), [anon_sym_PLUS] = ACTIONS(39), [anon_sym_BANG] = ACTIONS(39), @@ -1931,8 +1931,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_unsigned_integer] = ACTIONS(41), [sym_number] = ACTIONS(43), [anon_sym_DOT] = ACTIONS(31), - [anon_sym_true] = ACTIONS(43), - [anon_sym_false] = ACTIONS(43), + [sym_true] = ACTIONS(43), + [sym_false] = ACTIONS(43), [anon_sym_DASH] = ACTIONS(43), [anon_sym_PLUS] = ACTIONS(43), [anon_sym_BANG] = ACTIONS(43), @@ -1995,8 +1995,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_unsigned_integer] = ACTIONS(45), [sym_number] = ACTIONS(47), [anon_sym_DOT] = ACTIONS(49), - [anon_sym_true] = ACTIONS(47), - [anon_sym_false] = ACTIONS(47), + [sym_true] = ACTIONS(47), + [sym_false] = ACTIONS(47), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_BANG] = ACTIONS(47), @@ -2058,8 +2058,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_unsigned_integer] = ACTIONS(45), [sym_number] = ACTIONS(47), [anon_sym_DOT] = ACTIONS(47), - [anon_sym_true] = ACTIONS(47), - [anon_sym_false] = ACTIONS(47), + [sym_true] = ACTIONS(47), + [sym_false] = ACTIONS(47), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_BANG] = ACTIONS(47), @@ -2120,8 +2120,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_signed_integer] = ACTIONS(52), [sym_unsigned_integer] = ACTIONS(52), [sym_number] = ACTIONS(54), - [anon_sym_true] = ACTIONS(54), - [anon_sym_false] = ACTIONS(54), + [sym_true] = ACTIONS(54), + [sym_false] = ACTIONS(54), [anon_sym_DASH] = ACTIONS(54), [anon_sym_PLUS] = ACTIONS(54), [anon_sym_BANG] = ACTIONS(54), @@ -2182,8 +2182,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_signed_integer] = ACTIONS(58), [sym_unsigned_integer] = ACTIONS(58), [sym_number] = ACTIONS(56), - [anon_sym_true] = ACTIONS(56), - [anon_sym_false] = ACTIONS(56), + [sym_true] = ACTIONS(56), + [sym_false] = ACTIONS(56), [anon_sym_DASH] = ACTIONS(56), [anon_sym_PLUS] = ACTIONS(56), [anon_sym_BANG] = ACTIONS(56), @@ -2243,8 +2243,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2293,8 +2293,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2343,8 +2343,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2395,8 +2395,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2444,8 +2444,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2494,8 +2494,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2543,8 +2543,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2592,8 +2592,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2641,8 +2641,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2690,8 +2690,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2739,8 +2739,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2788,8 +2788,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2837,8 +2837,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2886,8 +2886,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2935,8 +2935,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -2984,8 +2984,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -3033,8 +3033,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -3082,8 +3082,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -3131,8 +3131,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -3180,8 +3180,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -3254,8 +3254,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -3322,8 +3322,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -3390,8 +3390,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(169), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -3437,8 +3437,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -3513,8 +3513,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -3551,8 +3551,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -3613,8 +3613,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_PIPE, anon_sym_GT, @@ -3694,8 +3694,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_if, anon_sym_let, @@ -3735,8 +3735,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_DOT_DOT, anon_sym_if, @@ -3782,8 +3782,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_GT, anon_sym_LT, @@ -3823,8 +3823,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_AMP, anon_sym_PIPE, @@ -3866,8 +3866,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -3920,8 +3920,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_AMP, anon_sym_PIPE, @@ -3972,8 +3972,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_AMP, anon_sym_PIPE, @@ -4024,8 +4024,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_PIPE, anon_sym_GT, @@ -4089,8 +4089,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_DOT_DOT, anon_sym_if, @@ -4158,8 +4158,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_DOT_DOT, anon_sym_if, @@ -4208,8 +4208,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_BANG, anon_sym_if, anon_sym_let, @@ -4253,8 +4253,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -4310,8 +4310,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -4367,8 +4367,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(264), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -4420,8 +4420,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -4473,8 +4473,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -4526,8 +4526,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -4579,8 +4579,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -4632,8 +4632,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -4685,8 +4685,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -4738,8 +4738,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -4791,8 +4791,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -4844,8 +4844,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -4897,8 +4897,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -4950,8 +4950,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5003,8 +5003,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5056,8 +5056,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5109,8 +5109,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5162,8 +5162,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5215,8 +5215,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5268,8 +5268,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5321,8 +5321,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5374,8 +5374,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5427,8 +5427,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5480,8 +5480,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5533,8 +5533,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5586,8 +5586,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5639,8 +5639,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5692,8 +5692,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5745,8 +5745,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5798,8 +5798,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5851,8 +5851,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5904,8 +5904,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -5957,8 +5957,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -6010,8 +6010,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -6063,8 +6063,8 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, sym__whitespace, ACTIONS(15), 2, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, STATE(8), 2, sym_argument_path, sym_local_path, @@ -7117,8 +7117,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_if, anon_sym_let, anon_sym_for, @@ -7142,8 +7142,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_if, anon_sym_let, anon_sym_for, @@ -7167,8 +7167,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_if, anon_sym_let, anon_sym_for, @@ -7192,8 +7192,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_if, anon_sym_let, anon_sym_for, @@ -7217,8 +7217,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_if, anon_sym_let, anon_sym_for, @@ -7242,8 +7242,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_if, ACTIONS(279), 11, sym_string, @@ -7287,8 +7287,8 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, sym_default, sym_number, - anon_sym_true, - anon_sym_false, + sym_true, + sym_false, anon_sym_if, ACTIONS(354), 10, sym_string, diff --git a/crates/tree-sitter-command-cad-model/test/corpus/if.txt b/crates/tree-sitter-command-cad-model/test/corpus/if.txt index 940a59e..7d85bbc 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/if.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/if.txt @@ -10,7 +10,7 @@ if true {} (expression (if (expression - (boolean)) + (boolean (true))) (procedural_block)))) ================== @@ -25,7 +25,7 @@ if true {} else {} (expression (if (expression - (boolean)) + (boolean (true))) (procedural_block) (procedural_block)))) @@ -46,5 +46,5 @@ With other operations (expression (if (expression - (boolean)) + (boolean (true))) (procedural_block)))))) \ No newline at end of file From f18ae9ee88d4fb46f86c08114425bb9536bd570e Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 29 Nov 2024 15:22:18 -0500 Subject: [PATCH 005/106] Implement AST builder --- Cargo.lock | 84 +- Cargo.toml | 2 +- build_dependencies.nix | 2 +- crates/common_data_types/src/lib.rs | 10 + crates/interpreter/Cargo.toml | 9 +- crates/interpreter/build.rs | 2 +- crates/interpreter/src/compile/expressions.rs | 1667 +++++ crates/interpreter/src/compile/mod.rs | 78 + crates/interpreter/src/compile/statements.rs | 461 ++ crates/interpreter/src/lib.rs | 106 +- .../tree-sitter-command-cad-model/grammar.js | 56 +- .../src/grammar.json | 592 +- .../src/node-types.json | 574 +- .../src/parser.c | 5569 +++++++++-------- .../src/tree_sitter/alloc.h | 8 +- .../src/tree_sitter/parser.h | 1 + .../test/corpus/assignment.txt | 4 +- .../test/corpus/closure.txt | 2 +- .../test/corpus/code_block.txt | 10 +- .../test/corpus/primitives.txt | 20 +- .../test/corpus/struct_definition.txt | 4 +- crates/units/Cargo.toml | 13 + crates/units/build.rs | 606 ++ crates/units/src/lib.rs | 35 + crates/units/src/units.csv | 2387 +++++++ 25 files changed, 9305 insertions(+), 2997 deletions(-) create mode 100644 crates/interpreter/src/compile/expressions.rs create mode 100644 crates/interpreter/src/compile/mod.rs create mode 100644 crates/interpreter/src/compile/statements.rs create mode 100644 crates/units/Cargo.toml create mode 100644 crates/units/build.rs create mode 100644 crates/units/src/lib.rs create mode 100644 crates/units/src/units.csv diff --git a/Cargo.lock b/Cargo.lock index fce6379..e59419c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "adler" @@ -723,10 +723,13 @@ dependencies = [ name = "interpreter" version = "0.1.0" dependencies = [ + "common_data_types", "tree-sitter", "tree-sitter-command-cad-model", "type-sitter", "type-sitter-gen", + "units", + "unwrap-enum", ] [[package]] @@ -746,6 +749,15 @@ version = "1.70.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.12.1" @@ -1271,6 +1283,28 @@ dependencies = [ "yansi", ] +[[package]] +name = "quasiquote" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d7f3e24436387bc9ee9963246739f2a851d9ca85ed73a2c5b878bf908e9b34d" +dependencies = [ + "proc-macro2", + "quasiquote-proc-macro", + "quote", +] + +[[package]] +name = "quasiquote-proc-macro" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79bc0a2b2a185610156579070227676cf31d6282045d01273bbfc65804df6022" +dependencies = [ + "itertools 0.10.5", + "proc-macro2", + "quote", +] + [[package]] name = "quick-xml" version = "0.31.0" @@ -1719,9 +1753,9 @@ dependencies = [ [[package]] name = "type-sitter" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bbcf20b0a8aff76d7b418c1811598a7ba6bc7b8d2c3955a21034ca481d6f0e3" +checksum = "eb9f4c4ddbd678e359ff89aae45047d07054424fcd6a9a54e0b08c59c86a089f" dependencies = [ "type-sitter-lib", "type-sitter-proc", @@ -1729,9 +1763,9 @@ dependencies = [ [[package]] name = "type-sitter-gen" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e84c1f7c03c217cfcf77ad1613a20efd3521d6b66e8e941f062e6600b0c45ea" +checksum = "eac9d1ff21ac9de07753e3caa368db9442f493d7cb4e3f6c50bd487d4ccea4a1" dependencies = [ "cc", "check_keyword", @@ -1755,9 +1789,9 @@ dependencies = [ [[package]] name = "type-sitter-lib" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d942ec6387309622737c9c5c16601e5e09f331f00b28014d572dc3bf6e55f3" +checksum = "b9bd317b595762109d7de17950090734f26ffcd881bf9c797c72fe0dc1d00220" dependencies = [ "streaming-iterator", "tree-sitter", @@ -1765,11 +1799,10 @@ dependencies = [ [[package]] name = "type-sitter-proc" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "470884f0a6d76a3362633fa21a73cd16b2e715dfd12075f52289fe7dd4a72e49" +checksum = "5fa4874fcd40bc621749354a31705e5e3dc7fcbc7ba44235e274662eae7669e6" dependencies = [ - "proc-macro2", "syn 2.0.89", "type-sitter-gen", ] @@ -1817,12 +1850,43 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +[[package]] +name = "units" +version = "0.1.0" +dependencies = [ + "common_data_types", + "csv", + "serde", + "uneval", +] + [[package]] name = "unsafe-libyaml" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" +[[package]] +name = "unwrap-enum" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8161548e56cec5b635552524711010ce2eefbe0aed221b05e7fcd80f4d0a20c" +dependencies = [ + "unwrap-enum-proc-macro", +] + +[[package]] +name = "unwrap-enum-proc-macro" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9309938e63f1a5cff15f2e4c5d426e1fed0354d3e66800942b3e1e4083984d39" +dependencies = [ + "proc-macro2", + "quasiquote", + "quote", + "syn 2.0.89", +] + [[package]] name = "uom" version = "0.35.0" diff --git a/Cargo.toml b/Cargo.toml index 8ce89d2..f808e5b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,4 @@ -workspace = { members = ["crates/common_data_types", "crates/macros", "crates/formatter", "crates/interpreter"] } +workspace = { members = ["crates/common_data_types", "crates/macros", "crates/formatter", "crates/interpreter", "crates/units"] } [package] name = "command_cad" version = "0.6.0" diff --git a/build_dependencies.nix b/build_dependencies.nix index 2aa3bc5..f14116d 100644 --- a/build_dependencies.nix +++ b/build_dependencies.nix @@ -27,7 +27,7 @@ let sha256 = "sha256-+45nWB37pR6yUqyFovlnOTCCHSPPeoKa0mcEYQn2I1o="; }; - cargoSha256 = "sha256-WDMAuRbU7Afuwg4D9oZG2ZIQfhkFXZXhCnJ3qqZyuSo="; + cargoHash = "sha256-4Zl/5nSTRJOLtXebJxERNKaqyVRXN/VpoIMu9ZpMAao="; doCheck = false; }; in diff --git a/crates/common_data_types/src/lib.rs b/crates/common_data_types/src/lib.rs index 7945510..9c458a2 100644 --- a/crates/common_data_types/src/lib.rs +++ b/crates/common_data_types/src/lib.rs @@ -256,6 +256,16 @@ pub struct ConversionFactor { pub dimension: Dimension, } +impl ConversionFactor { + pub fn convert_to_base_unit(&self, input: Float) -> Float { + input * self.coefficient + self.constant + } + + pub fn convert_from_base_unit(&self, input: Float) -> Float { + (input - self.constant) / self.coefficient + } +} + #[cfg(test)] mod test { use super::*; diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index 7ea7d89..595ce57 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -4,10 +4,13 @@ version = "0.1.0" edition = "2021" [dependencies] +common_data_types = { path = "../common_data_types" } +units = { path = "../units" } tree-sitter = "0.24.4" tree-sitter-command-cad-model = { path = "../tree-sitter-command-cad-model" } -type-sitter = "0.5.2" +type-sitter = "0.6" +unwrap-enum = "0.1.0" [build-dependencies] -type-sitter-gen = "0.5.2" -tree-sitter-command-cad-model = { path = "../tree-sitter-command-cad-model" } \ No newline at end of file +type-sitter-gen = "0.6" +tree-sitter-command-cad-model = { path = "../tree-sitter-command-cad-model" } diff --git a/crates/interpreter/build.rs b/crates/interpreter/build.rs index 87586b7..59aab22 100644 --- a/crates/interpreter/build.rs +++ b/crates/interpreter/build.rs @@ -50,7 +50,7 @@ fn main() { // Obligatory: in this and future lines, replace `vendor/path/to/tree-sitter-foobar-lang` // with the path to your grammar's folder, relative to the folder containing `Cargo.toml` - println!("cargo::rerun-if-changed=vendor/path/to/tree-sitter-foobar-lang"); + println!("cargo::rerun-if-changed=../tree-sitter-command-cad-model"); // To generate nodes fs::write( diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs new file mode 100644 index 0000000..0d425fa --- /dev/null +++ b/crates/interpreter/src/compile/expressions.rs @@ -0,0 +1,1667 @@ +use std::{path::PathBuf, sync::Arc}; + +use common_data_types::{ConversionFactor, Dimension, Float, RawFloat}; +use nodes::SourceFile; +use tree_sitter::Range; +use type_sitter::{HasChild, IncorrectKind, Node}; +use unwrap_enum::EnumAs; + +use super::{nodes, AstNode, Error, Parse, Statement}; + +#[derive(Debug, Eq, PartialEq)] +pub struct InvalidUnitError<'t, 'i> { + pub name: &'i str, + pub node: nodes::anon_unions::Identifier_UnitQuote<'t>, +} + +#[derive(Debug, Eq, PartialEq)] +pub struct ParseIntError<'t> { + pub error: std::num::ParseIntError, + pub node: nodes::Number<'t>, +} + +#[derive(Debug, Hash, Eq, PartialEq, Clone)] +pub struct SourceReference { + pub file: Arc, + pub range: Range, +} + +#[derive(Debug, Hash, Eq, PartialEq, EnumAs)] +pub enum Expression { + BinaryExpression(AstNode>), + Boolean(AstNode), + ClosureDefinition(AstNode>), + Default(AstNode<()>), + DictionaryConstruction(AstNode), + If(AstNode), + List(AstNode>>), + Parenthesis(AstNode>), + Path(AstNode), + ProceduralBlock(AstNode), + Scalar(AstNode), + SignedInteger(AstNode), + String(AstNode), + StructDefinition(AstNode), + UnaryExpression(AstNode>), + UnsignedInteger(AstNode), + Void(AstNode<()>), +} + +impl<'t> Parse<'t, nodes::anon_unions::Path_StructDefinition_Void<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::anon_unions::Path_StructDefinition_Void<'t>, + ) -> Result, Error<'t, 'i>> { + match value { + nodes::anon_unions::Path_StructDefinition_Void::Path(path) => Ok(AstNode::new( + file, + &path, + Self::Path(IdentityPath::parse(file, input, path)?), + )), + nodes::anon_unions::Path_StructDefinition_Void::StructDefinition(struct_definition) => { + Ok(AstNode::new( + file, + &struct_definition, + Self::StructDefinition(StructDefinition::parse( + file, + input, + struct_definition, + )?), + )) + } + nodes::anon_unions::Path_StructDefinition_Void::Void(void) => Ok(AstNode::new( + file, + &value, + Self::Void(AstNode::new(file, &void, ())), + )), + } + } +} + +impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::BinaryExpression<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::BinaryExpression( + BinaryExpression::parse(file, input, value).map(|o| o.into_box())?, + ), + )) + } +} + +impl<'t> Parse<'t, nodes::Boolean<'t>> for Expression { + fn parse<'i>( + file: &Arc, + _input: &'i str, + value: nodes::Boolean<'t>, + ) -> Result, Error<'t, 'i>> { + type ChildType<'t> = as HasChild<'t>>::Child; + let child = value.child()?; + + Ok(AstNode::new( + file, + &value, + Self::Boolean(AstNode::new( + file, + &child, + matches!(child, ChildType::True(_)), + )), + )) + } +} + +impl<'t> Parse<'t, nodes::ClosureDefinition<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::ClosureDefinition<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::ClosureDefinition(ClosureDefinition::parse(file, input, value)?.into_box()), + )) + } +} + +impl<'t> Parse<'t, nodes::DictionaryConstruction<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::DictionaryConstruction<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::DictionaryConstruction(DictionaryConstruction::parse(file, input, value)?), + )) + } +} + +impl<'t> Parse<'t, nodes::If<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::If<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::If(IfExpression::parse(file, input, value)?), + )) + } +} + +impl<'t> Parse<'t, nodes::List<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::List<'t>, + ) -> Result, Error<'t, 'i>> { + let mut cursor = value.walk(); + + let mut list = Vec::new(); + for expression in value.expressions(&mut cursor) { + let expression = expression?; + let expression = Self::parse(file, input, expression)?; + list.push(expression); + } + + Ok(AstNode::new( + file, + &value, + Self::List(AstNode::new(file, &value, list)), + )) + } +} + +impl<'t> Parse<'t, nodes::Parenthesis<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Parenthesis<'t>, + ) -> Result, Error<'t, 'i>> { + let expression = value.expression()?; + Ok(AstNode::new( + file, + &value, + Self::Parenthesis(Self::parse(file, input, expression).map(|e| e.into_box())?), + )) + } +} + +impl<'t> Parse<'t, nodes::Path<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Path<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::Path(IdentityPath::parse(file, input, value)?), + )) + } +} + +impl<'t> Parse<'t, nodes::ProceduralBlock<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::ProceduralBlock<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::ProceduralBlock(ProceduralBlock::parse(file, input, value)?), + )) + } +} + +impl<'t> Parse<'t, nodes::Scalar<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Scalar<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::Scalar(Scalar::parse(file, input, value)?), + )) + } +} + +impl<'t> Parse<'t, nodes::SignedInteger<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::SignedInteger<'t>, + ) -> Result, Error<'t, 'i>> { + let value = value.value()?; + let text = &input[value.byte_range()]; + let integer = text.parse().unwrap(); + + Ok(AstNode::new( + file, + &value, + Self::SignedInteger(AstNode::new(file, &value, integer)), + )) + } +} + +impl<'t> Parse<'t, nodes::String<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::String<'t>, + ) -> Result, Error<'t, 'i>> { + static ESCAPE_SEQUENCES: &[(&str, &str)] = &[("\"", "\\\""), ("\n", "\\n"), ("\\", "\\\\")]; + let raw_text = &input[value.byte_range()]; + let raw_text = &raw_text[1..raw_text.len() - 1]; + + let mut sequence_iter = ESCAPE_SEQUENCES.iter(); + let (replace, find) = sequence_iter.next().unwrap(); // Should never fail since we static initalized that array. + + let mut processed_text = raw_text.replace(find, replace); + + for (replace, find) in sequence_iter { + processed_text = processed_text.replace(find, replace); + } + + Ok(AstNode::new( + file, + &value, + Self::String(AstNode::new(file, &value, processed_text)), + )) + } +} + +impl<'t> Parse<'t, nodes::StructDefinition<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::StructDefinition<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::StructDefinition(StructDefinition::parse(file, input, value)?), + )) + } +} + +impl<'t> Parse<'t, nodes::UnaryExpression<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::UnaryExpression<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::UnaryExpression( + UnaryExpression::parse(file, input, value).map(|n| n.into_box())?, + ), + )) + } +} + +impl<'t> Parse<'t, nodes::UnsignedInteger<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::UnsignedInteger<'t>, + ) -> Result, Error<'t, 'i>> { + let integer = value.value()?; + let text = &input[integer.byte_range()]; + let integer = text.parse().unwrap(); + + Ok(AstNode::new( + file, + &value, + Self::UnsignedInteger(AstNode::new(file, &value, integer)), + )) + } +} + +impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Expression<'t>, + ) -> Result, Error<'t, 'i>> { + type ChildType<'t> = as HasChild<'t>>::Child; + + match value.child()? { + ChildType::BinaryExpression(binary_expression) => { + Self::parse(file, input, binary_expression) + } + ChildType::Boolean(value) => Self::parse(file, input, value), + ChildType::ClosureDefinition(closure_definition) => { + Self::parse(file, input, closure_definition) + } + ChildType::Default(default) => Ok(AstNode::new( + file, + &default, + Self::Default(AstNode::new(file, &default, ())), + )), + ChildType::DictionaryConstruction(dictionary_construction) => { + Self::parse(file, input, dictionary_construction) + } + ChildType::If(if_expression) => Self::parse(file, input, if_expression), + ChildType::List(list) => Self::parse(file, input, list), + ChildType::Parenthesis(parenthesis) => Self::parse(file, input, parenthesis), + ChildType::Path(path) => Self::parse(file, input, path), + ChildType::ProceduralBlock(procedural_block) => { + Self::parse(file, input, procedural_block) + } + ChildType::Scalar(scalar) => Self::parse(file, input, scalar), + ChildType::SignedInteger(signed_integer) => Self::parse(file, input, signed_integer), + ChildType::String(string) => Self::parse(file, input, string), + ChildType::StructDefinition(struct_definition) => { + Self::parse(file, input, struct_definition) + } + ChildType::UnaryExpression(unary_expression) => { + Self::parse(file, input, unary_expression) + } + ChildType::UnsignedInteger(unsigned_integer) => { + Self::parse(file, input, unsigned_integer) + } + ChildType::Void(void) => Ok(AstNode::new( + file, + &value, + Self::Void(AstNode::new(file, &void, ())), + )), + } + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub enum UnaryExpressionOperation { + Add, + Sub, + Not, +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct UnaryExpression { + pub operation: AstNode, + pub expression: AstNode, +} + +impl<'t> Parse<'t, nodes::UnaryExpression<'t>> for UnaryExpression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::UnaryExpression<'t>, + ) -> Result, Error<'t, 'i>> { + let operation = value.op()?; + + let operation = match operation { + nodes::anon_unions::Not_Add_Sub::Not(not) => { + AstNode::new(file, ¬, UnaryExpressionOperation::Not) + } + nodes::anon_unions::Not_Add_Sub::Add(add) => { + AstNode::new(file, &add, UnaryExpressionOperation::Add) + } + nodes::anon_unions::Not_Add_Sub::Sub(sub) => { + AstNode::new(file, &sub, UnaryExpressionOperation::Sub) + } + }; + + let expression = Expression::parse(file, input, value.expression()?)?; + + Ok(AstNode::new( + file, + &value, + Self { + operation, + expression, + }, + )) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub enum BinaryExpressionOperation { + NotEq, + And, + AndAnd, + Mul, + MulMul, + Add, + Sub, + DotDot, + DotDotEq, + Div, + DivDiv, + Lt, + LtLt, + LtEq, + EqEq, + Gt, + GtEq, + GtGt, + BitXor, + Or, + OrOr, +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct BinaryExpression { + pub operation: AstNode, + pub a: AstNode, + pub b: AstNode, +} + +impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for BinaryExpression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::BinaryExpression<'t>, + ) -> Result, Error<'t, 'i>> { + use nodes::anon_unions::NotEq_And_AndAnd_Mul_MulMul_Add_Sub_DotDot_DotDotEq_Div_DivDiv_Lt_LtLt_LtEq_EqEq_Gt_GtEq_GtGt_BitXor_Or_OrOr as Operation; + + let operation = value.op()?; + + let operation = match operation { + Operation::NotEq(not_eq) => { + AstNode::new(file, ¬_eq, BinaryExpressionOperation::NotEq) + } + Operation::And(and) => AstNode::new(file, &and, BinaryExpressionOperation::And), + Operation::AndAnd(and_and) => { + AstNode::new(file, &and_and, BinaryExpressionOperation::AndAnd) + } + Operation::Mul(mul) => AstNode::new(file, &mul, BinaryExpressionOperation::Mul), + Operation::MulMul(mul_mul) => { + AstNode::new(file, &mul_mul, BinaryExpressionOperation::MulMul) + } + Operation::Add(add) => AstNode::new(file, &add, BinaryExpressionOperation::Add), + Operation::Sub(sub) => AstNode::new(file, &sub, BinaryExpressionOperation::Sub), + Operation::DotDot(dot_dot) => { + AstNode::new(file, &dot_dot, BinaryExpressionOperation::DotDot) + } + Operation::DotDotEq(dot_dot_eq) => { + AstNode::new(file, &dot_dot_eq, BinaryExpressionOperation::DotDotEq) + } + Operation::Div(div) => AstNode::new(file, &div, BinaryExpressionOperation::Div), + Operation::DivDiv(div_div) => { + AstNode::new(file, &div_div, BinaryExpressionOperation::DivDiv) + } + Operation::Lt(lt) => AstNode::new(file, <, BinaryExpressionOperation::Lt), + Operation::LtLt(lt_lt) => AstNode::new(file, <_lt, BinaryExpressionOperation::LtLt), + Operation::LtEq(lt_eq) => AstNode::new(file, <_eq, BinaryExpressionOperation::LtEq), + Operation::EqEq(eq_eq) => AstNode::new(file, &eq_eq, BinaryExpressionOperation::EqEq), + Operation::Gt(gt) => AstNode::new(file, >, BinaryExpressionOperation::Gt), + Operation::GtEq(gt_eq) => AstNode::new(file, >_eq, BinaryExpressionOperation::GtEq), + Operation::GtGt(gt_gt) => AstNode::new(file, >_gt, BinaryExpressionOperation::GtGt), + Operation::BitXor(bit_xor) => { + AstNode::new(file, &bit_xor, BinaryExpressionOperation::BitXor) + } + Operation::Or(or) => AstNode::new(file, &or, BinaryExpressionOperation::Or), + Operation::OrOr(or_or) => AstNode::new(file, &or_or, BinaryExpressionOperation::OrOr), + }; + + let a = value.a()?; + let a = Expression::parse(file, input, a)?; + + let b = value.b()?; + let b = Expression::parse(file, input, b)?; + + Ok(AstNode::new(file, &value, Self { operation, a, b })) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub enum PathType { + Argument, + Local, +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct IdentityPath { + pub ty: PathType, + pub path: Vec>, +} + +impl<'t> Parse<'t, nodes::Path<'t>> for IdentityPath { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Path<'t>, + ) -> Result, Error<'t, 'i>> { + let path_type = value.child()?; + + fn collect_identifiers<'t, 'i>( + file: &Arc, + input: &'i str, + identifiers: impl Iterator, IncorrectKind<'t>>>, + ) -> Result>, Error<'t, 'i>> { + let mut path = Vec::new(); + + for ident in identifiers { + let ident = ident?; + let text = String::parse(file, input, ident)?; + + path.push(text); + } + + Ok(path) + } + + let (path_type, identifiers) = match path_type { + nodes::anon_unions::ArgumentPath_LocalPath::ArgumentPath(argument_path) => { + let mut cursor = argument_path.walk(); + + ( + PathType::Argument, + collect_identifiers(file, input, argument_path.identifiers(&mut cursor))?, + ) + } + nodes::anon_unions::ArgumentPath_LocalPath::LocalPath(local_path) => { + let mut cursor = local_path.walk(); + + ( + PathType::Local, + collect_identifiers(file, input, local_path.identifiers(&mut cursor))?, + ) + } + }; + + Ok(AstNode::new( + file, + &value, + Self { + ty: path_type, + path: identifiers, + }, + )) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct Scalar { + pub dimension: Dimension, + pub value: Float, +} + +impl<'t> Parse<'t, nodes::Scalar<'t>> for Scalar { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Scalar<'t>, + ) -> Result, Error<'t, 'i>> { + const IDENTITY_CONVERSION_FACTOR: ConversionFactor = ConversionFactor { + constant: 0.0, + coefficient: 1.0, + dimension: Dimension::zero(), + }; + + // Get the conversion factor using the unit name. + let conversion_factor = if let Some(unit_name) = value.unit() { + let unit_name = unit_name?; + let unit_name_str = &input[unit_name.byte_range()]; + if let Some(conversion_factor) = units::get_conversion_factor(unit_name_str) { + conversion_factor + } else { + // We don't know what this is. + return Err(Error::InvalidUnit(InvalidUnitError { + name: unit_name_str, + node: unit_name, + })); + } + } else { + // If a unit is not specified, we assume the zero dimension and no conversion. + &IDENTITY_CONVERSION_FACTOR + }; + + let whole_node = value.whole()?; + let whole = &input[whole_node.byte_range()]; + let whole: u64 = whole.parse().map_err(|error| ParseIntError { + error, + node: whole_node, + })?; + + let (fraction, fraction_len): (u64, _) = if let Some(fractional_node) = value.fractional() { + let fraction_str = &input[fractional_node.byte_range()]; + let fraction = fraction_str.parse().map_err(|error| ParseIntError { + error, + node: whole_node, + })?; + + (fraction, fraction_str.len()) + } else { + // Faction is not present. We assume zero. + (0, 1) + }; + + let scale_value: f64 = + whole as RawFloat + (fraction as RawFloat / (10 as RawFloat).powi(fraction_len as _)); + let scale_value = Float::new(scale_value).expect("Float was NaN"); + let scale_value = conversion_factor.convert_to_base_unit(scale_value); + + let dimension = conversion_factor.dimension; + + Ok(AstNode::new( + file, + &value, + Self { + dimension, + value: scale_value, + }, + )) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct ProceduralBlock { + pub statements: Vec>, +} + +impl<'t> Parse<'t, nodes::ProceduralBlock<'t>> for ProceduralBlock { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::ProceduralBlock<'t>, + ) -> Result, Error<'t, 'i>> { + let mut cursor = value.walk(); + let mut statements = Vec::new(); + + for statement in value.statements(&mut cursor) { + let statement = statement?; + let statement = Statement::parse(file, input, statement)?; + + statements.push(statement); + } + + Ok(AstNode::new(file, &value, Self { statements })) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct IfExpression { + pub condition: AstNode>, + pub on_true: AstNode, + pub on_false: Option>, +} + +impl<'t> Parse<'t, nodes::If<'t>> for IfExpression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::If<'t>, + ) -> Result, Error<'t, 'i>> { + let condition = value.condition()?; + let condition = Expression::parse(file, input, condition)?.into_box(); + + let on_true = ProceduralBlock::parse(file, input, value.on_true()?)?; + + let on_false = if let Some(on_false) = value.on_false() { + let on_false = on_false?; + let on_false = ProceduralBlock::parse(file, input, on_false)?; + Some(on_false) + } else { + None + }; + + Ok(AstNode::new( + file, + &value, + IfExpression { + condition, + on_true, + on_false, + }, + )) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct DictionaryMemberAssignment { + pub name: AstNode, + pub assignment: AstNode, +} + +impl<'t> Parse<'t, nodes::DictionaryMemberAssignment<'t>> for DictionaryMemberAssignment { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::DictionaryMemberAssignment<'t>, + ) -> Result, Error<'t, 'i>> { + let name = value.name()?; + let name = String::parse(file, input, name)?; + let assignment = Expression::parse(file, input, value.assignment()?)?; + + Ok(AstNode::new(file, &value, Self { name, assignment })) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct DictionaryConstruction { + pub assignments: Vec>, +} + +impl<'t> Parse<'t, nodes::DictionaryConstruction<'t>> for DictionaryConstruction { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::DictionaryConstruction<'t>, + ) -> Result, Error<'t, 'i>> { + dbg!(&value); + let mut assignments = Vec::new(); + let mut cursor = value.walk(); + let assignments_iter = value.assignmentss(&mut cursor); + + for assignment in assignments_iter { + dbg!(&assignment); + let assignment = assignment?; + + // Skip the commas. + if let Some(assignment) = assignment.as_dictionary_member_assignment() { + let assignment = DictionaryMemberAssignment::parse(file, input, assignment)?; + assignments.push(assignment); + } + } + + let node = Self { assignments }; + Ok(AstNode::new(file, &value, node)) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct ClosureDefinition { + pub argument: AstNode, + pub captures: Vec>, + pub returns: AstNode, + pub expression: AstNode, +} + +impl<'t> Parse<'t, nodes::ClosureDefinition<'t>> for ClosureDefinition { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::ClosureDefinition<'t>, + ) -> Result, Error<'t, 'i>> { + let argument = value.argument()?; + let argument = Expression::parse(file, input, argument)?; + + let captures = value.captured_variables()?; + let mut cursor = captures.walk(); + let mut identities = Vec::new(); + + for identity in captures.identifiers(&mut cursor) { + let identity = identity?; + + let text = String::parse(file, input, identity)?; + + identities.push(text); + } + + let returns = value.argument()?; + let returns = Expression::parse(file, input, returns)?; + + let expression = value.expression()?; + let expression = Expression::parse(file, input, expression)?; + + Ok(AstNode::new( + file, + &value, + Self { + argument, + captures: identities, + returns, + expression, + }, + )) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct StructMember { + pub name: AstNode, + pub ty: AstNode, + pub default: Option>, +} + +impl<'t> Parse<'t, nodes::StructMember<'t>> for StructMember { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::StructMember<'t>, + ) -> Result, Error<'t, 'i>> { + let name = value.name()?; + let name = String::parse(file, input, name)?; + + let ty = value.type_path()?; + let ty = IdentityPath::parse(file, input, ty)?; + + let default = if let Some(default) = value.default() { + let default = default?; + Some(Expression::parse(file, input, default)?) + } else { + None + }; + + Ok(AstNode::new(file, &value, Self { name, ty, default })) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct StructDefinition { + pub members: Vec>, + pub variadic: bool, +} + +impl<'t> Parse<'t, nodes::StructDefinition<'t>> for StructDefinition { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::StructDefinition<'t>, + ) -> Result, Error<'t, 'i>> { + let mut cursor = value.walk(); + + let mut members = Vec::new(); + for member in value.memberss(&mut cursor) { + let member = member?; + if let nodes::anon_unions::Comma_StructMember::StructMember(member) = member { + let member = StructMember::parse(file, input, member)?; + members.push(member); + } + } + + let mut cursor = value.walk(); + + // There can only ever be one. + let final_member = value.final_elements(&mut cursor).next(); + + let variadic = match final_member { + Some(member) => { + let member = member?; + match member { + nodes::anon_unions::Comma_StructMember_VaradicDots::Comma(_comma) => false, + nodes::anon_unions::Comma_StructMember_VaradicDots::StructMember(member) => { + let member = StructMember::parse(file, input, member)?; + members.push(member); + false + } + nodes::anon_unions::Comma_StructMember_VaradicDots::VaradicDots(_) => true, + } + } + None => false, + }; + + Ok(AstNode::new(file, &value, Self { members, variadic })) + } +} + +pub fn new_parser() -> type_sitter::Parser> { + type_sitter::Parser::new(&tree_sitter_command_cad_model::language()) + .expect("Error loading CommandCadModel grammar") +} + +pub fn compile<'t, 'i>( + file: &Arc, + input: &'i str, + tree: &'t type_sitter::Tree>, +) -> Result, Error<'t, 'i>> { + let root = tree.root_node()?; + + Expression::parse(file, input, root.expression()?) +} + +#[cfg(test)] +mod test { + use super::*; + + fn full_compile(input: &str) -> AstNode { + let test_file = Arc::new(PathBuf::from("test_file.ccm")); + let mut tree = new_parser(); + let root = tree.parse(input, None).unwrap(); + compile(&test_file, input, &root).unwrap() + } + + #[test] + fn binary_expression() { + let root = full_compile("2i + 3i"); + + let binary_expression = root.node.as_binaryexpression().unwrap(); + let operation_reference = binary_expression.node.operation.reference.clone(); + + let a = &binary_expression.node.a; + let a_reference = a.reference.clone(); + + let b = &binary_expression.node.b; + let b_reference = b.reference.clone(); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::BinaryExpression(AstNode { + reference: binary_expression.reference.clone(), + node: Box::new(BinaryExpression { + operation: AstNode { + reference: operation_reference, + node: BinaryExpressionOperation::Add + }, + a: AstNode { + reference: a_reference, + node: Expression::SignedInteger(AstNode { + reference: a.node.as_signedinteger().unwrap().reference.clone(), + node: 2 + },) + }, + b: AstNode { + reference: b_reference, + node: Expression::SignedInteger(AstNode { + reference: b.node.as_signedinteger().unwrap().reference.clone(), + node: 3 + }) + } + }) + }) + } + ); + } + + #[test] + fn boolean_true() { + let root = full_compile("true"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Boolean(AstNode { + reference: root.node.as_boolean().unwrap().reference.clone(), + node: true + }) + } + ); + } + + #[test] + fn boolean_false() { + let root = full_compile("false"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Boolean(AstNode { + reference: root.node.as_boolean().unwrap().reference.clone(), + node: false + }) + } + ); + } + + #[test] + fn closure_definition() { + let root = full_compile("()[this, that] -> () {}"); + let closure = root.node.as_closuredefinition().unwrap(); + let closure_reference = closure.reference.clone(); + let argument = &closure.node.argument; + let argument_reference = argument.reference.clone(); + let argument_void_reference = argument.node.as_void().unwrap().reference.clone(); + + let captures = &closure.node.captures; + let this_reference = captures[0].reference.clone(); + let that_reference = captures[1].reference.clone(); + + let returns = &closure.node.returns; + let returns_reference = returns.reference.clone(); + let returns_void_reference = returns.node.as_void().unwrap().reference.clone(); + + let expression = &closure.node.expression; + let expression_reference = expression.reference.clone(); + let block_reference = expression + .node + .as_proceduralblock() + .unwrap() + .reference + .clone(); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::ClosureDefinition(AstNode { + reference: closure_reference, + node: Box::new(ClosureDefinition { + argument: AstNode { + reference: argument_reference, + node: Expression::Void(AstNode { + reference: argument_void_reference, + node: () + }) + }, + captures: vec![ + AstNode { + reference: this_reference, + node: "this".to_string() + }, + AstNode { + reference: that_reference, + node: "that".to_string() + } + ], + returns: AstNode { + reference: returns_reference, + node: Expression::Void(AstNode { + reference: returns_void_reference, + node: () + }) + }, + expression: AstNode { + reference: expression_reference, + node: Expression::ProceduralBlock(AstNode { + reference: block_reference, + node: ProceduralBlock { statements: vec![] } + }) + } + }) + }) + } + ); + } + + #[test] + fn default() { + let root = full_compile("default"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Default(AstNode { + reference: root.node.as_default().unwrap().reference.clone(), + node: () + }) + } + ); + } + + #[test] + fn dictionary_construction() { + let root = full_compile("(a = true, b = false)"); + let construction_expression = root.node.as_dictionaryconstruction().unwrap(); + assert_eq!(construction_expression.node.assignments.len(), 2); + let a = &construction_expression.node.assignments[0]; + let b = &construction_expression.node.assignments[1]; + + assert_eq!( + a.node.name, + AstNode { + reference: a.node.name.reference.clone(), + node: "a".to_string() + } + ); + assert_eq!( + a.node.assignment, + AstNode { + reference: a.node.assignment.reference.clone(), + node: Expression::Boolean(AstNode { + reference: a.node.assignment.reference.clone(), + node: true + }) + } + ); + + assert_eq!( + b.node.name, + AstNode { + reference: b.node.name.reference.clone(), + node: "b".to_string() + } + ); + assert_eq!( + b.node.assignment, + AstNode { + reference: b.node.assignment.reference.clone(), + node: Expression::Boolean(AstNode { + reference: b.node.assignment.reference.clone(), + node: false + }) + } + ); + } + + #[test] + fn if_expression() { + let root = full_compile("if true {}"); + let if_expression = root.node.as_if().unwrap(); + let if_reference = if_expression.reference.clone(); + let condition = &if_expression.node.condition; + let condition_reference = condition.reference.clone(); + let boolean_reference = condition.node.as_boolean().unwrap().reference.clone(); + let true_block_reference = if_expression.node.on_true.reference.clone(); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::If(AstNode { + reference: if_reference, + node: IfExpression { + condition: AstNode { + reference: condition_reference, + node: Expression::Boolean(AstNode { + reference: boolean_reference, + node: true + }) + } + .into_box(), + on_true: AstNode { + reference: true_block_reference, + node: ProceduralBlock { statements: vec![] } + }, + on_false: None, + } + }) + } + ); + } + + #[test] + fn if_else_expression() { + let root = full_compile("if true {} else {}"); + let if_expression = root.node.as_if().unwrap(); + let if_reference = if_expression.reference.clone(); + let condition = &if_expression.node.condition; + let condition_reference = condition.reference.clone(); + let boolean_reference = condition.node.as_boolean().unwrap().reference.clone(); + let true_block_reference = if_expression.node.on_true.reference.clone(); + let false_block_reference = if_expression + .node + .on_false + .as_ref() + .unwrap() + .reference + .clone(); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::If(AstNode { + reference: if_reference, + node: IfExpression { + condition: AstNode { + reference: condition_reference, + node: Expression::Boolean(AstNode { + reference: boolean_reference, + node: true + }) + } + .into_box(), + on_true: AstNode { + reference: true_block_reference, + node: ProceduralBlock { statements: vec![] } + }, + on_false: Some(AstNode { + reference: false_block_reference, + node: ProceduralBlock { statements: vec![] } + }), + } + }) + } + ); + } + + #[test] + fn list() { + let root = full_compile("[1i, 2i, 3i, 4i, 5i]"); + + let list = root.node.as_list().unwrap(); + let list_reference = list.reference.clone(); + let element_1_reference = list.node[0].reference.clone(); + let integer_1_reference = list.node[0] + .node + .as_signedinteger() + .unwrap() + .reference + .clone(); + let element_2_reference = list.node[1].reference.clone(); + let integer_2_reference = list.node[1] + .node + .as_signedinteger() + .unwrap() + .reference + .clone(); + let element_3_reference = list.node[2].reference.clone(); + let integer_3_reference = list.node[2] + .node + .as_signedinteger() + .unwrap() + .reference + .clone(); + let element_4_reference = list.node[3].reference.clone(); + let integer_4_reference = list.node[3] + .node + .as_signedinteger() + .unwrap() + .reference + .clone(); + let element_5_reference = list.node[4].reference.clone(); + let integer_5_reference = list.node[4] + .node + .as_signedinteger() + .unwrap() + .reference + .clone(); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::List(AstNode { + reference: list_reference, + node: vec![ + AstNode { + reference: element_1_reference, + node: Expression::SignedInteger(AstNode { + reference: integer_1_reference, + node: 1, + }) + }, + AstNode { + reference: element_2_reference, + node: Expression::SignedInteger(AstNode { + reference: integer_2_reference, + node: 2, + }) + }, + AstNode { + reference: element_3_reference, + node: Expression::SignedInteger(AstNode { + reference: integer_3_reference, + node: 3, + }) + }, + AstNode { + reference: element_4_reference, + node: Expression::SignedInteger(AstNode { + reference: integer_4_reference, + node: 4, + }) + }, + AstNode { + reference: element_5_reference, + node: Expression::SignedInteger(AstNode { + reference: integer_5_reference, + node: 5, + }) + }, + ] + }) + } + ); + } + + #[test] + fn parenthesis() { + let root = full_compile("(5i)"); + let parenthesis = root.node.as_parenthesis().unwrap(); + let parenthesis_reference = parenthesis.reference.clone(); + let integer = parenthesis.node.as_signedinteger().unwrap(); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Parenthesis( + AstNode { + reference: parenthesis_reference, + node: Expression::SignedInteger(AstNode { + reference: integer.reference.clone(), + node: 5 + }) + } + .into_box() + ) + } + ); + } + + #[test] + fn local_path() { + let root = full_compile("this.thang"); + let path = root.node.as_path().unwrap(); + let this = &path.node.path[0]; + let thang = &path.node.path[1]; + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Path(AstNode { + reference: path.reference.clone(), + node: IdentityPath { + ty: PathType::Local, + path: vec![ + AstNode { + reference: this.reference.clone(), + node: "this".into() + }, + AstNode { + reference: thang.reference.clone(), + node: "thang".into() + } + ] + } + }) + } + ); + } + + #[test] + fn argument_path() { + let root = full_compile("@.this.thang"); + let path = root.node.as_path().unwrap(); + let this = &path.node.path[0]; + let thang = &path.node.path[1]; + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Path(AstNode { + reference: path.reference.clone(), + node: IdentityPath { + ty: PathType::Argument, + path: vec![ + AstNode { + reference: this.reference.clone(), + node: "this".into() + }, + AstNode { + reference: thang.reference.clone(), + node: "thang".into() + } + ] + } + }) + } + ); + } + + #[test] + fn procedural_block() { + // An unimpressive test. The more in-depth testing gets done in statements.rs + let root = full_compile("{}"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::ProceduralBlock(AstNode { + reference: root.node.as_proceduralblock().unwrap().reference.clone(), + node: ProceduralBlock { statements: vec![] } + }) + } + ); + } + + #[test] + fn scalar_no_decimal() { + let root = full_compile("0"); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Scalar(AstNode { + reference: root.node.as_scalar().unwrap().reference.clone(), + node: Scalar { + dimension: Dimension::zero(), + value: Float::new(0.0).unwrap() + } + }) + } + ); + } + + #[test] + fn scalar_no_unit() { + let root = full_compile("0.0"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Scalar(AstNode { + reference: root.node.as_scalar().unwrap().reference.clone(), + node: Scalar { + dimension: Dimension::zero(), + value: Float::new(0.0).unwrap() + } + }) + } + ); + } + + #[test] + fn scalar_with_unit() { + let root = full_compile("0.0mm"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Scalar(AstNode { + reference: root.node.as_scalar().unwrap().reference.clone(), + node: Scalar { + dimension: Dimension::length(), + value: Float::new(0.0).unwrap() + } + }) + } + ); + } + + #[test] + fn scalar_unit_conversion() { + // Test conversion factor + let root = full_compile("1cm"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Scalar(AstNode { + reference: root.node.as_scalar().unwrap().reference.clone(), + node: Scalar { + dimension: Dimension::length(), + value: Float::new(0.01).unwrap() + } + }) + } + ); + } + + #[test] + fn signed_integer() { + let root = full_compile("5i"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::SignedInteger(AstNode { + reference: root.node.as_signedinteger().unwrap().reference.clone(), + node: 5 + }) + } + ); + } + + #[test] + fn string() { + let root = full_compile("\"Some text\\n\""); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::String(AstNode { + reference: root.node.as_string().unwrap().reference.clone(), + node: "Some text\n".into() + }) + } + ); + } + + #[test] + fn struct_definition() { + let root = full_compile("( one: std.Constraint, two: std.Constraint = a, ... )"); + let struct_definition = root.node.as_structdefinition().unwrap(); + let members = &struct_definition.node.members; + let one = &members[0]; + let two = &members[1]; + let two_default = two.node.default.as_ref().unwrap(); + let two_default_path = two_default.node.as_path().unwrap(); + + assert!(struct_definition.node.variadic); + assert_eq!(members.len(), 2); + assert_eq!(two_default_path.node.path.len(), 1); + + assert_eq!( + *one, + AstNode { + reference: one.reference.clone(), + node: StructMember { + name: AstNode { + reference: one.node.name.reference.clone(), + node: "one".into() + }, + ty: AstNode { + reference: one.node.ty.reference.clone(), + node: IdentityPath { + ty: PathType::Local, + path: vec![ + AstNode { + reference: one.node.ty.node.path[0].reference.clone(), + node: "std".into(), + }, + AstNode { + reference: one.node.ty.node.path[1].reference.clone(), + node: "Constraint".into(), + } + ] + } + }, + default: None + } + } + ); + assert_eq!( + *two, + AstNode { + reference: two.reference.clone(), + node: StructMember { + name: AstNode { + reference: two.node.name.reference.clone(), + node: "two".into() + }, + ty: AstNode { + reference: two.node.ty.reference.clone(), + node: IdentityPath { + ty: PathType::Local, + path: vec![ + AstNode { + reference: two.node.ty.node.path[0].reference.clone(), + node: "std".into(), + }, + AstNode { + reference: two.node.ty.node.path[1].reference.clone(), + node: "Constraint".into(), + } + ] + } + }, + default: Some(AstNode { + reference: two_default.reference.clone(), + node: Expression::Path(AstNode { + reference: two_default_path.reference.clone(), + node: IdentityPath { + ty: PathType::Local, + path: vec![AstNode { + reference: two_default_path.node.path[0].reference.clone(), + node: "a".into() + }] + } + }) + }) + } + } + ); + } + + #[test] + fn unary_expression() { + let root = full_compile("-5i"); + let unary_expression = root.node.as_unaryexpression().unwrap(); + let unary_expression_reference = unary_expression.reference.clone(); + let expression_reference = unary_expression.node.expression.reference.clone(); + let integer_reference = unary_expression + .node + .expression + .node + .as_signedinteger() + .unwrap() + .reference + .clone(); + let operation_reference = unary_expression.node.operation.reference.clone(); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::UnaryExpression(AstNode { + reference: unary_expression_reference, + node: Box::new(UnaryExpression { + expression: AstNode { + reference: expression_reference, + node: Expression::SignedInteger(AstNode { + reference: integer_reference, + node: 5 + }) + }, + operation: AstNode { + reference: operation_reference, + node: UnaryExpressionOperation::Sub + } + }) + }) + } + ); + } + + #[test] + fn unsigned_integer() { + let root = full_compile("5u"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::UnsignedInteger(AstNode { + reference: root.node.as_unsignedinteger().unwrap().reference.clone(), + node: 5 + }) + } + ); + } + + #[test] + fn void() { + let root = full_compile("()"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Void(AstNode { + reference: root.node.as_void().unwrap().reference.clone(), + node: () + }) + } + ); + } +} diff --git a/crates/interpreter/src/compile/mod.rs b/crates/interpreter/src/compile/mod.rs new file mode 100644 index 0000000..4eab577 --- /dev/null +++ b/crates/interpreter/src/compile/mod.rs @@ -0,0 +1,78 @@ +mod expressions; +mod statements; + +use std::{path::PathBuf, sync::Arc}; +use type_sitter::{IncorrectKind, Node}; + +pub use expressions::*; +pub use statements::*; + +mod nodes { + include!(concat!(env!("OUT_DIR"), "/nodes.rs")); +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct AstNode { + reference: SourceReference, + pub node: N, +} + +impl AstNode { + fn new<'n>(file: &Arc, value: &impl Node<'n>, node: N) -> Self { + Self { + reference: SourceReference { + file: file.clone(), + range: value.range(), + }, + node, + } + } + + fn into_box(self) -> AstNode> { + AstNode { + reference: self.reference, + node: Box::new(self.node), + } + } +} + +trait Parse<'t, N: 't>: Sized { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: N, + ) -> Result, Error<'t, 'i>>; +} + +impl<'t, N: Node<'t> + 't> Parse<'t, N> for String { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: N, + ) -> Result, Error<'t, 'i>> { + let text = &input[value.byte_range()]; + Ok(AstNode::new(file, &value, text.to_string())) + } +} + +/// Represents an error while compiling. +/// I would have preferred to use the `thiserror` crate, but +/// the non static lifetime of IncorrectKind ruined any opportunity of that. +#[derive(Debug, Eq, PartialEq)] +pub enum Error<'t, 'i> { + IncorrectKind(IncorrectKind<'t>), + InvalidUnit(InvalidUnitError<'t, 'i>), + ParseInt(ParseIntError<'t>), +} + +impl<'t> From> for Error<'t, '_> { + fn from(value: IncorrectKind<'t>) -> Self { + Self::IncorrectKind(value) + } +} + +impl<'t> From> for Error<'t, '_> { + fn from(value: ParseIntError<'t>) -> Self { + Self::ParseInt(value) + } +} diff --git a/crates/interpreter/src/compile/statements.rs b/crates/interpreter/src/compile/statements.rs new file mode 100644 index 0000000..950d939 --- /dev/null +++ b/crates/interpreter/src/compile/statements.rs @@ -0,0 +1,461 @@ +use std::{path::PathBuf, sync::Arc}; + +use type_sitter::HasChild; +use unwrap_enum::EnumAs; + +use super::{nodes, AstNode, Expression, IdentityPath, Parse, ProceduralBlock}; + +#[derive(Debug, Hash, Eq, PartialEq, EnumAs)] +pub enum Statement { + Assign(AstNode), + Let(AstNode), + For(AstNode), + Expression(AstNode), + ClosedExpression(AstNode), +} + +impl<'t> Parse<'t, nodes::Statement<'t>> for Statement { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Statement<'t>, + ) -> Result, super::Error<'t, 'i>> { + type ChildType<'t> = as HasChild<'t>>::Child; + let statement = match value.child()? { + ChildType::Assign(value) => Self::Assign(Assign::parse(file, input, value)?), + ChildType::ClosedExpression(value) => { + Self::ClosedExpression(ClosedExpression::parse(file, input, value)?) + } + ChildType::Expression(value) => { + Self::Expression(Expression::parse(file, input, value)?) + } + ChildType::For(value) => Self::For(For::parse(file, input, value)?), + ChildType::Let(value) => Self::Let(Let::parse(file, input, value)?), + }; + + Ok(AstNode::new(file, &value, statement)) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct Assign { + pub to_assign: AstNode, + pub assignment_type: AstNode, + pub value: AstNode, +} + +impl<'t> Parse<'t, nodes::Assign<'t>> for Assign { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Assign<'t>, + ) -> Result, super::Error<'t, 'i>> { + let to_assign = IdentityPath::parse(file, input, value.to_assign()?)?; + let assignment_type = AssignmentType::parse(file, input, value.assignment_operator()?)?; + let assigned_value = Expression::parse(file, input, value.value()?)?; + + Ok(AstNode::new( + file, + &value, + Self { + to_assign, + assignment_type, + value: assigned_value, + }, + )) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct Let { + pub to_assign: AstNode, + pub assignment_type: AstNode, + pub value: AstNode, +} + +impl<'t> Parse<'t, nodes::Let<'t>> for Let { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Let<'t>, + ) -> Result, super::Error<'t, 'i>> { + let to_assign = String::parse(file, input, value.to_assign()?)?; + let assignment_type = AssignmentType::parse(file, input, value.assignment_operator()?)?; + let assigned_value = Expression::parse(file, input, value.value()?)?; + + Ok(AstNode::new( + file, + &value, + Self { + to_assign, + assignment_type, + value: assigned_value, + }, + )) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub enum AssignmentType { + /// = + Direct, + /// &= + BitAnd, + /// |= + BitOr, + /// ^= + BitXor, + /// &&= + LogicAnd, + /// ||= + LogicOr, + /// ^^= + LogicXor, + /// += + Add, + /// -= + Sub, + /// **= + Exponent, + /// *= + Multiply, + /// //= + IntegerDivision, + /// /= + Division, + /// <<= + LeftShift, + /// >>= + RightShift, +} + +impl<'t> Parse<'t, nodes::AssignmentOperator<'t>> for AssignmentType { + fn parse<'i>( + file: &Arc, + _input: &'i str, + value: nodes::AssignmentOperator<'t>, + ) -> Result, super::Error<'t, 'i>> { + use nodes::anon_unions::AndAndEq_AndEq_MulMulEq_MulEq_AddEq_SubEq_DivDivEq_DivEq_LtLtEq_Eq_GtGtEq_BitXorEq_BitXorBitXorEq_OrEq_OrOrEq as Operators; + let operator = value.op()?; + + let operation = match operator { + Operators::AndAndEq(_) => Self::LogicAnd, + Operators::AndEq(_) => Self::BitAnd, + Operators::MulMulEq(_) => Self::Exponent, + Operators::MulEq(_) => Self::Multiply, + Operators::AddEq(_) => Self::Add, + Operators::SubEq(_) => Self::Sub, + Operators::DivDivEq(_) => Self::IntegerDivision, + Operators::DivEq(_) => Self::Division, + Operators::LtLtEq(_) => Self::LeftShift, + Operators::Eq(_) => Self::Direct, + Operators::GtGtEq(_) => Self::RightShift, + Operators::BitXorEq(_) => Self::BitXor, + Operators::BitXorBitXorEq(_) => Self::LogicXor, + Operators::OrEq(_) => Self::BitOr, + Operators::OrOrEq(_) => Self::LogicOr, + }; + + Ok(AstNode::new(file, &operator, operation)) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct For { + pub to_assign: AstNode, + pub to_iterate: AstNode, + pub to_run: AstNode, +} + +impl<'t> Parse<'t, nodes::For<'t>> for For { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::For<'t>, + ) -> Result, super::Error<'t, 'i>> { + let to_assign = String::parse(file, input, value.to_assign()?)?; + let to_iterate = Expression::parse(file, input, value.to_iterate()?)?; + let to_run = ProceduralBlock::parse(file, input, value.to_run()?)?; + + Ok(AstNode::new( + file, + &value, + Self { + to_assign, + to_iterate, + to_run, + }, + )) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct ClosedExpression { + pub expression: AstNode, +} + +impl<'t> Parse<'t, nodes::ClosedExpression<'t>> for ClosedExpression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::ClosedExpression<'t>, + ) -> Result, super::Error<'t, 'i>> { + let expression = Expression::parse(file, input, value.expression()?)?; + + Ok(AstNode::new(file, &value, Self { expression })) + } +} + +#[cfg(test)] +mod test { + use crate::{compile::PathType, new_parser}; + + use super::*; + + fn full_compile(input: &str) -> AstNode { + let test_file = Arc::new(PathBuf::from("test_file.ccm")); + let mut tree = new_parser(); + let root = tree.parse(input, None).unwrap(); + crate::compile(&test_file, input, &root).unwrap() + } + + #[test] + fn assign() { + let root = full_compile("{ my_value.sub_value = (); }"); + let block = root.node.as_proceduralblock().unwrap(); + let statement = &block.node.statements[0]; + let assign = statement.node.as_assign().unwrap(); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::ProceduralBlock(AstNode { + reference: block.reference.clone(), + node: ProceduralBlock { + statements: vec![AstNode { + reference: statement.reference.clone(), + node: Statement::Assign(AstNode { + reference: assign.reference.clone(), + node: Assign { + to_assign: AstNode { + reference: assign.node.to_assign.reference.clone(), + node: IdentityPath { + ty: PathType::Local, + path: vec![ + AstNode { + reference: assign.node.to_assign.node.path[0] + .reference + .clone(), + node: "my_value".to_string() + }, + AstNode { + reference: assign.node.to_assign.node.path[1] + .reference + .clone(), + node: "sub_value".to_string() + } + ] + } + }, + assignment_type: AstNode { + reference: assign.node.assignment_type.reference.clone(), + node: AssignmentType::Direct + }, + value: AstNode { + reference: assign.node.value.reference.clone(), + node: Expression::Void(AstNode { + reference: assign + .node + .value + .node + .as_void() + .unwrap() + .reference + .clone(), + node: () + }) + } + } + }) + }] + } + }) + } + ); + } + + #[test] + fn assign_let() { + let root = full_compile("{ let my_value = (); }"); + let block = root.node.as_proceduralblock().unwrap(); + let statement = &block.node.statements[0]; + let let_assign = statement.node.as_let().unwrap(); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::ProceduralBlock(AstNode { + reference: block.reference.clone(), + node: ProceduralBlock { + statements: vec![AstNode { + reference: statement.reference.clone(), + node: Statement::Let(AstNode { + reference: let_assign.reference.clone(), + node: Let { + to_assign: AstNode { + reference: let_assign.node.to_assign.reference.clone(), + node: "my_value".to_string() + }, + assignment_type: AstNode { + reference: let_assign + .node + .assignment_type + .reference + .clone(), + node: AssignmentType::Direct + }, + value: AstNode { + reference: let_assign.node.value.reference.clone(), + node: Expression::Void(AstNode { + reference: let_assign + .node + .value + .node + .as_void() + .unwrap() + .reference + .clone(), + node: () + }) + } + } + }) + }] + } + }) + } + ); + } + + #[test] + fn for_statement() { + let root = full_compile("{ for i in () {} }"); + let block = root.node.as_proceduralblock().unwrap(); + let statement = &block.node.statements[0]; + let for_loop = statement.node.as_for().unwrap(); + let to_assign = &for_loop.node.to_assign; + let to_iterate = &for_loop.node.to_iterate; + let to_run = &for_loop.node.to_run; + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::ProceduralBlock(AstNode { + reference: block.reference.clone(), + node: ProceduralBlock { + statements: vec![AstNode { + reference: statement.reference.clone(), + node: Statement::For(AstNode { + reference: for_loop.reference.clone(), + node: For { + to_assign: AstNode { + reference: to_assign.reference.clone(), + node: "i".to_string() + }, + to_iterate: AstNode { + reference: to_iterate.reference.clone(), + node: Expression::Void(AstNode { + reference: to_iterate + .node + .as_void() + .unwrap() + .reference + .clone(), + node: () + }) + }, + to_run: AstNode { + reference: to_run.reference.clone(), + node: ProceduralBlock { statements: vec![] } + } + } + }) + }] + } + }) + } + ); + } + + #[test] + fn expression() { + let root = full_compile("{ () }"); + let block = root.node.as_proceduralblock().unwrap(); + let statement = &block.node.statements[0]; + let expression = statement.node.as_expression().unwrap(); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::ProceduralBlock(AstNode { + reference: block.reference.clone(), + node: ProceduralBlock { + statements: vec![AstNode { + reference: statement.reference.clone(), + node: Statement::Expression(AstNode { + reference: expression.reference.clone(), + node: Expression::Void(AstNode { + reference: expression.node.as_void().unwrap().reference.clone(), + node: () + }) + }) + }] + } + }) + } + ); + } + + #[test] + fn closed_expression() { + let root = full_compile("{ (); }"); + let block = root.node.as_proceduralblock().unwrap(); + let statement = &block.node.statements[0]; + let closed_expression = statement.node.as_closedexpression().unwrap(); + let expression = &closed_expression.node.expression; + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::ProceduralBlock(AstNode { + reference: block.reference.clone(), + node: ProceduralBlock { + statements: vec![AstNode { + reference: statement.reference.clone(), + node: Statement::ClosedExpression(AstNode { + reference: closed_expression.reference.clone(), + node: ClosedExpression { + expression: AstNode { + reference: expression.reference.clone(), + node: Expression::Void(AstNode { + reference: expression + .node + .as_void() + .unwrap() + .reference + .clone(), + node: () + }) + } + } + }) + }] + } + }) + } + ); + } +} diff --git a/crates/interpreter/src/lib.rs b/crates/interpreter/src/lib.rs index ff47441..f59858a 100644 --- a/crates/interpreter/src/lib.rs +++ b/crates/interpreter/src/lib.rs @@ -1,104 +1,4 @@ -use nodes::{Boolean, List, SourceFile}; -use type_sitter::{IncorrectKind, Node, NodeResult}; +mod compile; +// mod types; -mod nodes { - include!(concat!(env!("OUT_DIR"), "/nodes.rs")); -} - -use nodes::anon_unions::{ - BinaryExpression_Boolean_ClosureDefinition_Default_DictionaryConstruction_If_List_Parenthesis_Path_ProceduralBlock_Scalar_SignedInteger_String_StructDefinition_UnaryExpression_UnsignedInteger_Void as EType, - False_True as BooleanValue, -}; - -pub enum Expression { - BinaryExpression(()), - Boolean(bool), - ClosureDefinition(()), - Default, - DictionaryConstruction(()), - If(()), - List(Vec), - Parenthesis(Box), - Path(()), - ProceduralBlock(()), - Scalar(()), - SignedInteger(i64), - String(String), - StructDefinition(()), - UnaryExpression(()), - UnsignedInteger(u64), - Void, -} - -impl<'t> TryFrom> for Expression { - type Error = IncorrectKind<'t>; - - fn try_from(value: Boolean<'t>) -> Result { - Ok(Self::Boolean(matches!( - value.child()?, - BooleanValue::True(_) - ))) - } -} - -impl<'t> TryFrom> for Expression { - type Error = IncorrectKind<'t>; - - fn try_from(value: List<'t>) -> Result { - let mut cursor = value.walk(); - - let mut list = Vec::new(); - for expression in value.expressions(&mut cursor) { - let expression = expression?; - let expression = Self::try_from(expression)?; - list.push(expression); - } - - Ok(Self::List(list)) - } -} -impl<'t> TryFrom> for Expression { - type Error = IncorrectKind<'t>; - - fn try_from(value: nodes::Parenthesis<'t>) -> Result { - let expression = value.expression()?; - Self::try_from(expression) - } -} - -impl<'t> TryFrom> for Expression { - type Error = IncorrectKind<'t>; - - fn try_from(value: nodes::Expression<'t>) -> Result { - match value.child()? { - EType::BinaryExpression(binary_expression) => todo!(), - EType::Boolean(value) => Self::try_from(value), - EType::ClosureDefinition(closure_definition) => todo!(), - EType::Default(_) => Ok(Self::Default), - EType::DictionaryConstruction(dictionary_construction) => todo!(), - EType::If(_) => todo!(), - EType::List(list) => Self::try_from(list), - EType::Parenthesis(parenthesis) => Self::try_from(parenthesis), - EType::Path(path) => todo!(), - EType::ProceduralBlock(procedural_block) => todo!(), - EType::Scalar(scalar) => todo!(), - EType::SignedInteger(signed_integer) => todo!(), - EType::String(_) => todo!(), - EType::StructDefinition(struct_definition) => todo!(), - EType::UnaryExpression(unary_expression) => todo!(), - EType::UnsignedInteger(unsigned_integer) => todo!(), - EType::Void(void) => Ok(Self::Void), - } - } -} - -pub fn new() -> type_sitter::Parser> { - type_sitter::Parser::new(&tree_sitter_command_cad_model::language()) - .expect("Error loading CommandCadModel grammar") -} - -pub fn compile<'t>(tree: &'t type_sitter::Tree>) -> NodeResult<'t, Expression> { - let root = tree.root_node()?; - - Expression::try_from(root.expression()?) -} +pub use compile::{compile, new_parser}; diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 269a545..58d21d9 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -41,20 +41,21 @@ module.exports = grammar({ default: _ => 'default', void: _ => seq('(', ')'), - signed_integer: _ => /[0-9]+[iI]/, - unsigned_integer: _ => /[0-9]+[uU]/, + integer: _ => /[0-9]+/, + signed_integer: $ => seq(field('value', $.integer), token.immediate(/[iI]/)), + unsigned_integer: $ => seq(field('value', $.integer), token.immediate(/[uU]/)), number: _ => /[0-9]+/, unit_quote: _ => /'(\\'|[^'])*'/, _float: $ => choice( - seq($.number, '.', $.number), - seq($.number), + seq(field('whole', $.number), '.', field('fractional', $.number)), + seq(field('whole', $.number)), ), _unit: $ => choice($.identifier, $.unit_quote), - scalar: $ => prec.left(PREC.unit, seq($._float, optional($._unit))), + scalar: $ => prec.left(PREC.unit, seq($._float, field('unit', optional($._unit)))), true: $ => 'true', false: $ => 'false', @@ -80,9 +81,9 @@ module.exports = grammar({ $.binary_expression, ), unary_expression: $ => prec(PREC.unary, choice( - seq('-', $.expression), - seq('+', $.expression), - seq('!', $.expression), + seq(field('op', '-'), $.expression), + seq(field('op', '+'), $.expression), + seq(field('op', '!'), $.expression), )), binary_expression: $ => { const table = [ @@ -124,9 +125,9 @@ module.exports = grammar({ )))); }, - if: $ => seq('if', $.expression, $.procedural_block, optional(seq('else', $.procedural_block))), + if: $ => seq('if', field('condition', $.expression), field('on_true', $.procedural_block), optional(seq('else', field('on_false', $.procedural_block)))), - _variable_type: $ => $.path, + _variable_type: $ => field('type_path', $.path), path: $ => choice($.local_path, $.argument_path), argument_path: $ => seq('@', repeat(seq('.', $.identifier))), local_path: $ => seq($.identifier, repeat(seq('.', $.identifier))), @@ -143,30 +144,29 @@ module.exports = grammar({ varadic_dots: $ => '...', - struct_member: $ => seq(field('name', $.identifier), $._declaration_type, field('default', optional(seq('=', $.expression)))), + struct_member: $ => seq(field('name', $.identifier), $._declaration_type, optional(seq('=', field('default', $.expression)))), _struct_final_element: $ => choice( seq($.struct_member), - $.varadic_dots, - seq($.varadic_dots, ',') + seq($.varadic_dots, optional(',')) ), struct_definition: $ => seq('(', choice( seq( - repeat1(seq($.struct_member, ',')), - optional($._struct_final_element), + field('members', repeat1(seq($.struct_member, ','))), + field('final_element', optional($._struct_final_element)), ), - $._struct_final_element + field('final_element', $._struct_final_element) ), ')'), - dictionary_member_assignment: $ => seq($.identifier, '=', $.expression), + dictionary_member_assignment: $ => seq(field('name', $.identifier), '=', field('assignment', $.expression)), dictionary_construction: $ => seq('(', - choice( + field('assignments', seq( - repeat1(seq($.dictionary_member_assignment, ',')), - optional($.dictionary_member_assignment), + repeat(seq($.dictionary_member_assignment, ',')), + $.dictionary_member_assignment, + optional(',') ), - $.dictionary_member_assignment ), ')' ), @@ -183,7 +183,11 @@ module.exports = grammar({ ']' ), closure_definition: $ => prec.left(PREC.closure, seq( - choice($.struct_definition, $.path, $.void), $.closure_captured_variables, '->', choice($.struct_definition, $.path, $.void), $.expression, + field('argument', choice($.struct_definition, $.path, $.void)), + field('captured_variables', $.closure_captured_variables), + '->', + field('result', choice($.struct_definition, $.path, $.void)), + field('expression', $.expression), )), closed_expression: $ => seq($.expression, ';'), @@ -215,11 +219,11 @@ module.exports = grammar({ '>>=' ]; - return choice(...operators); + return choice(...operators.map((operator) => field('op', operator))); }, - let: $ => seq('let', $.identifier, $.assignment_operator, $.expression, ';'), - assign: $ => seq($.path, $.assignment_operator, $.expression, ';'), - for: $ => seq('for', $.identifier, 'in', $.expression, $.procedural_block), + let: $ => seq('let', field('to_assign', $.identifier), $.assignment_operator, field('value', $.expression), ';'), + assign: $ => seq(field('to_assign', $.path), $.assignment_operator, field('value', $.expression), ';'), + for: $ => seq('for', field('to_assign', $.identifier), 'in', field('to_iterate', $.expression), field('to_run', $.procedural_block)), } }); diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index df15250..297c82c 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -1,4 +1,5 @@ { + "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json", "name": "command_cad_model", "word": "identifier", "rules": { @@ -51,13 +52,49 @@ } ] }, - "signed_integer": { + "integer": { "type": "PATTERN", - "value": "[0-9]+[iI]" + "value": "[0-9]+" + }, + "signed_integer": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "integer" + } + }, + { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "PATTERN", + "value": "[iI]" + } + } + ] }, "unsigned_integer": { - "type": "PATTERN", - "value": "[0-9]+[uU]" + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "integer" + } + }, + { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "PATTERN", + "value": "[uU]" + } + } + ] }, "number": { "type": "PATTERN", @@ -74,16 +111,24 @@ "type": "SEQ", "members": [ { - "type": "SYMBOL", - "name": "number" + "type": "FIELD", + "name": "whole", + "content": { + "type": "SYMBOL", + "name": "number" + } }, { "type": "STRING", "value": "." }, { - "type": "SYMBOL", - "name": "number" + "type": "FIELD", + "name": "fractional", + "content": { + "type": "SYMBOL", + "name": "number" + } } ] }, @@ -91,8 +136,12 @@ "type": "SEQ", "members": [ { - "type": "SYMBOL", - "name": "number" + "type": "FIELD", + "name": "whole", + "content": { + "type": "SYMBOL", + "name": "number" + } } ] } @@ -122,16 +171,20 @@ "name": "_float" }, { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_unit" - }, - { - "type": "BLANK" - } - ] + "type": "FIELD", + "name": "unit", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_unit" + }, + { + "type": "BLANK" + } + ] + } } ] } @@ -240,8 +293,12 @@ "type": "SEQ", "members": [ { - "type": "STRING", - "value": "-" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "-" + } }, { "type": "SYMBOL", @@ -253,8 +310,12 @@ "type": "SEQ", "members": [ { - "type": "STRING", - "value": "+" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "+" + } }, { "type": "SYMBOL", @@ -266,8 +327,12 @@ "type": "SEQ", "members": [ { - "type": "STRING", - "value": "!" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "!" + } }, { "type": "SYMBOL", @@ -984,12 +1049,20 @@ "value": "if" }, { - "type": "SYMBOL", - "name": "expression" + "type": "FIELD", + "name": "condition", + "content": { + "type": "SYMBOL", + "name": "expression" + } }, { - "type": "SYMBOL", - "name": "procedural_block" + "type": "FIELD", + "name": "on_true", + "content": { + "type": "SYMBOL", + "name": "procedural_block" + } }, { "type": "CHOICE", @@ -1002,8 +1075,12 @@ "value": "else" }, { - "type": "SYMBOL", - "name": "procedural_block" + "type": "FIELD", + "name": "on_false", + "content": { + "type": "SYMBOL", + "name": "procedural_block" + } } ] }, @@ -1015,8 +1092,12 @@ ] }, "_variable_type": { - "type": "SYMBOL", - "name": "path" + "type": "FIELD", + "name": "type_path", + "content": { + "type": "SYMBOL", + "name": "path" + } }, "path": { "type": "CHOICE", @@ -1177,29 +1258,29 @@ "name": "_declaration_type" }, { - "type": "FIELD", - "name": "default", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "=" - }, - { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "default", + "content": { "type": "SYMBOL", "name": "expression" } - ] - }, - { - "type": "BLANK" - } - ] - } + } + ] + }, + { + "type": "BLANK" + } + ] } ] }, @@ -1215,10 +1296,6 @@ } ] }, - { - "type": "SYMBOL", - "name": "varadic_dots" - }, { "type": "SEQ", "members": [ @@ -1227,8 +1304,16 @@ "name": "varadic_dots" }, { - "type": "STRING", - "value": "," + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] } ] } @@ -1248,38 +1333,50 @@ "type": "SEQ", "members": [ { - "type": "REPEAT1", + "type": "FIELD", + "name": "members", "content": { - "type": "SEQ", + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "struct_member" + }, + { + "type": "STRING", + "value": "," + } + ] + } + } + }, + { + "type": "FIELD", + "name": "final_element", + "content": { + "type": "CHOICE", "members": [ { "type": "SYMBOL", - "name": "struct_member" + "name": "_struct_final_element" }, { - "type": "STRING", - "value": "," + "type": "BLANK" } ] } - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_struct_final_element" - }, - { - "type": "BLANK" - } - ] } ] }, { - "type": "SYMBOL", - "name": "_struct_final_element" + "type": "FIELD", + "name": "final_element", + "content": { + "type": "SYMBOL", + "name": "_struct_final_element" + } } ] }, @@ -1293,16 +1390,24 @@ "type": "SEQ", "members": [ { - "type": "SYMBOL", - "name": "identifier" + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } }, { "type": "STRING", "value": "=" }, { - "type": "SYMBOL", - "name": "expression" + "type": "FIELD", + "name": "assignment", + "content": { + "type": "SYMBOL", + "name": "expression" + } } ] }, @@ -1314,46 +1419,45 @@ "value": "(" }, { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "REPEAT1", - "content": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "dictionary_member_assignment" - }, - { - "type": "STRING", - "value": "," - } - ] - } - }, - { - "type": "CHOICE", + "type": "FIELD", + "name": "assignments", + "content": { + "type": "SEQ", + "members": [ + { + "type": "REPEAT", + "content": { + "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "dictionary_member_assignment" }, { - "type": "BLANK" + "type": "STRING", + "value": "," } ] } - ] - }, - { - "type": "SYMBOL", - "name": "dictionary_member_assignment" - } - ] + }, + { + "type": "SYMBOL", + "name": "dictionary_member_assignment" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } }, { "type": "STRING", @@ -1434,50 +1538,66 @@ "type": "SEQ", "members": [ { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "struct_definition" - }, - { - "type": "SYMBOL", - "name": "path" - }, - { - "type": "SYMBOL", - "name": "void" - } - ] + "type": "FIELD", + "name": "argument", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "struct_definition" + }, + { + "type": "SYMBOL", + "name": "path" + }, + { + "type": "SYMBOL", + "name": "void" + } + ] + } }, { - "type": "SYMBOL", - "name": "closure_captured_variables" + "type": "FIELD", + "name": "captured_variables", + "content": { + "type": "SYMBOL", + "name": "closure_captured_variables" + } }, { "type": "STRING", "value": "->" }, { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "struct_definition" - }, - { - "type": "SYMBOL", - "name": "path" - }, - { - "type": "SYMBOL", - "name": "void" - } - ] + "type": "FIELD", + "name": "result", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "struct_definition" + }, + { + "type": "SYMBOL", + "name": "path" + }, + { + "type": "SYMBOL", + "name": "void" + } + ] + } }, { - "type": "SYMBOL", - "name": "expression" + "type": "FIELD", + "name": "expression", + "content": { + "type": "SYMBOL", + "name": "expression" + } } ] } @@ -1524,64 +1644,124 @@ "type": "CHOICE", "members": [ { - "type": "STRING", - "value": "=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "=" + } }, { - "type": "STRING", - "value": "&=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "&=" + } }, { - "type": "STRING", - "value": "|=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "|=" + } }, { - "type": "STRING", - "value": "^=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "^=" + } }, { - "type": "STRING", - "value": "&&=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "&&=" + } }, { - "type": "STRING", - "value": "||=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "||=" + } }, { - "type": "STRING", - "value": "^^=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "^^=" + } }, { - "type": "STRING", - "value": "+=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "+=" + } }, { - "type": "STRING", - "value": "-=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "-=" + } }, { - "type": "STRING", - "value": "**=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "**=" + } }, { - "type": "STRING", - "value": "*=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "*=" + } }, { - "type": "STRING", - "value": "//=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "//=" + } }, { - "type": "STRING", - "value": "/=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "/=" + } }, { - "type": "STRING", - "value": "<<=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "<<=" + } }, { - "type": "STRING", - "value": ">>=" + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": ">>=" + } } ] }, @@ -1593,16 +1773,24 @@ "value": "let" }, { - "type": "SYMBOL", - "name": "identifier" + "type": "FIELD", + "name": "to_assign", + "content": { + "type": "SYMBOL", + "name": "identifier" + } }, { "type": "SYMBOL", "name": "assignment_operator" }, { - "type": "SYMBOL", - "name": "expression" + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } }, { "type": "STRING", @@ -1614,16 +1802,24 @@ "type": "SEQ", "members": [ { - "type": "SYMBOL", - "name": "path" + "type": "FIELD", + "name": "to_assign", + "content": { + "type": "SYMBOL", + "name": "path" + } }, { "type": "SYMBOL", "name": "assignment_operator" }, { - "type": "SYMBOL", - "name": "expression" + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } }, { "type": "STRING", @@ -1639,20 +1835,32 @@ "value": "for" }, { - "type": "SYMBOL", - "name": "identifier" + "type": "FIELD", + "name": "to_assign", + "content": { + "type": "SYMBOL", + "name": "identifier" + } }, { "type": "STRING", "value": "in" }, { - "type": "SYMBOL", - "name": "expression" + "type": "FIELD", + "name": "to_iterate", + "content": { + "type": "SYMBOL", + "name": "expression" + } }, { - "type": "SYMBOL", - "name": "procedural_block" + "type": "FIELD", + "name": "to_run", + "content": { + "type": "SYMBOL", + "name": "procedural_block" + } } ] } diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index e321a40..4f8f9b1 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -17,22 +17,35 @@ { "type": "assign", "named": true, - "fields": {}, + "fields": { + "to_assign": { + "multiple": false, + "required": true, + "types": [ + { + "type": "path", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, "children": { - "multiple": true, + "multiple": false, "required": true, "types": [ { "type": "assignment_operator", "named": true - }, - { - "type": "expression", - "named": true - }, - { - "type": "path", - "named": true } ] } @@ -40,7 +53,74 @@ { "type": "assignment_operator", "named": true, - "fields": {} + "fields": { + "op": { + "multiple": false, + "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": "<<=", + "named": false + }, + { + "type": "=", + "named": false + }, + { + "type": ">>=", + "named": false + }, + { + "type": "^=", + "named": false + }, + { + "type": "^^=", + "named": false + }, + { + "type": "|=", + "named": false + }, + { + "type": "||=", + "named": false + } + ] + } + } }, { "type": "binary_expression", @@ -210,66 +290,109 @@ { "type": "closure_definition", "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": true, - "types": [ - { - "type": "closure_captured_variables", - "named": true - }, - { - "type": "expression", - "named": true - }, - { - "type": "path", - "named": true - }, - { - "type": "struct_definition", - "named": true - }, - { - "type": "void", - "named": true - } - ] + "fields": { + "argument": { + "multiple": false, + "required": true, + "types": [ + { + "type": "path", + "named": true + }, + { + "type": "struct_definition", + "named": true + }, + { + "type": "void", + "named": true + } + ] + }, + "captured_variables": { + "multiple": false, + "required": true, + "types": [ + { + "type": "closure_captured_variables", + "named": true + } + ] + }, + "expression": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "result": { + "multiple": false, + "required": true, + "types": [ + { + "type": "path", + "named": true + }, + { + "type": "struct_definition", + "named": true + }, + { + "type": "void", + "named": true + } + ] + } } }, { "type": "dictionary_construction", "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": true, - "types": [ - { - "type": "dictionary_member_assignment", - "named": true - } - ] + "fields": { + "assignments": { + "multiple": true, + "required": true, + "types": [ + { + "type": ",", + "named": false + }, + { + "type": "dictionary_member_assignment", + "named": true + } + ] + } } }, { "type": "dictionary_member_assignment", "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": true, - "types": [ - { - "type": "expression", - "named": true - }, - { - "type": "identifier", - "named": true - } - ] + "fields": { + "assignment": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } } }, { @@ -354,64 +477,112 @@ { "type": "for", "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": true, - "types": [ - { - "type": "expression", - "named": true - }, - { - "type": "identifier", - "named": true - }, - { - "type": "procedural_block", - "named": true - } - ] + "fields": { + "to_assign": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "to_iterate": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "to_run": { + "multiple": false, + "required": true, + "types": [ + { + "type": "procedural_block", + "named": true + } + ] + } } }, { "type": "if", "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": true, - "types": [ - { - "type": "expression", - "named": true - }, - { - "type": "procedural_block", - "named": true - } - ] + "fields": { + "condition": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "on_false": { + "multiple": false, + "required": false, + "types": [ + { + "type": "procedural_block", + "named": true + } + ] + }, + "on_true": { + "multiple": false, + "required": true, + "types": [ + { + "type": "procedural_block", + "named": true + } + ] + } } }, + { + "type": "integer", + "named": true, + "fields": {} + }, { "type": "let", "named": true, - "fields": {}, + "fields": { + "to_assign": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, "children": { - "multiple": true, + "multiple": false, "required": true, "types": [ { "type": "assignment_operator", "named": true - }, - { - "type": "expression", - "named": true - }, - { - "type": "identifier", - "named": true } ] } @@ -446,6 +617,11 @@ ] } }, + { + "type": "number", + "named": true, + "fields": {} + }, { "type": "parenthesis", "named": true, @@ -498,29 +674,63 @@ { "type": "scalar", "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": true, - "types": [ - { - "type": "identifier", - "named": true - }, - { - "type": "number", - "named": true - }, - { - "type": "unit_quote", - "named": true - } - ] + "fields": { + "fractional": { + "multiple": false, + "required": false, + "types": [ + { + "type": "number", + "named": true + } + ] + }, + "unit": { + "multiple": false, + "required": false, + "types": [ + { + "type": "identifier", + "named": true + }, + { + "type": "unit_quote", + "named": true + } + ] + }, + "whole": { + "multiple": false, + "required": true, + "types": [ + { + "type": "number", + "named": true + } + ] + } + } + }, + { + "type": "signed_integer", + "named": true, + "fields": { + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "integer", + "named": true + } + ] + } } }, { "type": "source_file", "named": true, + "root": true, "fields": {}, "children": { "multiple": false, @@ -567,20 +777,39 @@ { "type": "struct_definition", "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": true, - "types": [ - { - "type": "struct_member", - "named": true - }, - { - "type": "varadic_dots", - "named": true - } - ] + "fields": { + "final_element": { + "multiple": true, + "required": false, + "types": [ + { + "type": ",", + "named": false + }, + { + "type": "struct_member", + "named": true + }, + { + "type": "varadic_dots", + "named": true + } + ] + }, + "members": { + "multiple": true, + "required": false, + "types": [ + { + "type": ",", + "named": false + }, + { + "type": "struct_member", + "named": true + } + ] + } } }, { @@ -588,13 +817,9 @@ "named": true, "fields": { "default": { - "multiple": true, + "multiple": false, "required": false, "types": [ - { - "type": "=", - "named": false - }, { "type": "expression", "named": true @@ -610,23 +835,42 @@ "named": true } ] + }, + "type_path": { + "multiple": false, + "required": true, + "types": [ + { + "type": "path", + "named": true + } + ] } - }, - "children": { - "multiple": false, - "required": true, - "types": [ - { - "type": "path", - "named": true - } - ] } }, { "type": "unary_expression", "named": true, - "fields": {}, + "fields": { + "op": { + "multiple": false, + "required": true, + "types": [ + { + "type": "!", + "named": false + }, + { + "type": "+", + "named": false + }, + { + "type": "-", + "named": false + } + ] + } + }, "children": { "multiple": false, "required": true, @@ -638,6 +882,22 @@ ] } }, + { + "type": "unsigned_integer", + "named": true, + "fields": { + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "integer", + "named": true + } + ] + } + } + }, { "type": "void", "named": true, @@ -851,14 +1111,6 @@ "type": "let", "named": false }, - { - "type": "number", - "named": true - }, - { - "type": "signed_integer", - "named": true - }, { "type": "string", "named": true @@ -871,10 +1123,6 @@ "type": "unit_quote", "named": true }, - { - "type": "unsigned_integer", - "named": true - }, { "type": "varadic_dots", "named": true diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 1d048bf..36f8390 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -5,15 +5,15 @@ #endif #define LANGUAGE_VERSION 14 -#define STATE_COUNT 158 +#define STATE_COUNT 169 #define LARGE_STATE_COUNT 10 -#define SYMBOL_COUNT 104 +#define SYMBOL_COUNT 108 #define ALIAS_COUNT 0 #define TOKEN_COUNT 67 #define EXTERNAL_TOKEN_COUNT 0 -#define FIELD_COUNT 5 +#define FIELD_COUNT 24 #define MAX_ALIAS_SEQUENCE_LENGTH 5 -#define PRODUCTION_ID_COUNT 4 +#define PRODUCTION_ID_COUNT 25 enum ts_symbol_identifiers { sym_identifier = 1, @@ -23,9 +23,9 @@ enum ts_symbol_identifiers { sym_default = 5, anon_sym_LPAREN = 6, anon_sym_RPAREN = 7, - sym_signed_integer = 8, - sym_unsigned_integer = 9, - sym_number = 10, + aux_sym_integer_token1 = 8, + aux_sym_signed_integer_token1 = 9, + aux_sym_unsigned_integer_token1 = 10, sym_unit_quote = 11, anon_sym_DOT = 12, sym_true = 13, @@ -84,41 +84,45 @@ enum ts_symbol_identifiers { anon_sym_in = 66, sym_source_file = 67, sym_void = 68, - sym__float = 69, - sym__unit = 70, - sym_scalar = 71, - sym_boolean = 72, - sym_expression = 73, - sym_unary_expression = 74, - sym_binary_expression = 75, - sym_if = 76, - sym__variable_type = 77, - sym_path = 78, - sym_argument_path = 79, - sym_local_path = 80, - sym__declaration_type = 81, - sym_parenthesis = 82, - sym_list = 83, - sym_struct_member = 84, - sym__struct_final_element = 85, - sym_struct_definition = 86, - sym_dictionary_member_assignment = 87, - sym_dictionary_construction = 88, - sym_procedural_block = 89, - sym_closure_captured_variables = 90, - sym_closure_definition = 91, - sym_closed_expression = 92, - sym_statement = 93, - sym_assignment_operator = 94, - sym_let = 95, - sym_assign = 96, - sym_for = 97, - aux_sym_argument_path_repeat1 = 98, - aux_sym_list_repeat1 = 99, - aux_sym_struct_definition_repeat1 = 100, - aux_sym_dictionary_construction_repeat1 = 101, - aux_sym_procedural_block_repeat1 = 102, - aux_sym_closure_captured_variables_repeat1 = 103, + sym_integer = 69, + sym_signed_integer = 70, + sym_unsigned_integer = 71, + sym_number = 72, + sym__float = 73, + sym__unit = 74, + sym_scalar = 75, + sym_boolean = 76, + sym_expression = 77, + sym_unary_expression = 78, + sym_binary_expression = 79, + sym_if = 80, + sym__variable_type = 81, + sym_path = 82, + sym_argument_path = 83, + sym_local_path = 84, + sym__declaration_type = 85, + sym_parenthesis = 86, + sym_list = 87, + sym_struct_member = 88, + sym__struct_final_element = 89, + sym_struct_definition = 90, + sym_dictionary_member_assignment = 91, + sym_dictionary_construction = 92, + sym_procedural_block = 93, + sym_closure_captured_variables = 94, + sym_closure_definition = 95, + sym_closed_expression = 96, + sym_statement = 97, + sym_assignment_operator = 98, + sym_let = 99, + sym_assign = 100, + sym_for = 101, + aux_sym_argument_path_repeat1 = 102, + aux_sym_list_repeat1 = 103, + aux_sym_struct_definition_repeat1 = 104, + aux_sym_dictionary_construction_repeat1 = 105, + aux_sym_procedural_block_repeat1 = 106, + aux_sym_closure_captured_variables_repeat1 = 107, }; static const char * const ts_symbol_names[] = { @@ -130,9 +134,9 @@ static const char * const ts_symbol_names[] = { [sym_default] = "default", [anon_sym_LPAREN] = "(", [anon_sym_RPAREN] = ")", - [sym_signed_integer] = "signed_integer", - [sym_unsigned_integer] = "unsigned_integer", - [sym_number] = "number", + [aux_sym_integer_token1] = "integer_token1", + [aux_sym_signed_integer_token1] = "signed_integer_token1", + [aux_sym_unsigned_integer_token1] = "unsigned_integer_token1", [sym_unit_quote] = "unit_quote", [anon_sym_DOT] = ".", [sym_true] = "true", @@ -191,6 +195,10 @@ static const char * const ts_symbol_names[] = { [anon_sym_in] = "in", [sym_source_file] = "source_file", [sym_void] = "void", + [sym_integer] = "integer", + [sym_signed_integer] = "signed_integer", + [sym_unsigned_integer] = "unsigned_integer", + [sym_number] = "number", [sym__float] = "_float", [sym__unit] = "_unit", [sym_scalar] = "scalar", @@ -237,9 +245,9 @@ static const TSSymbol ts_symbol_map[] = { [sym_default] = sym_default, [anon_sym_LPAREN] = anon_sym_LPAREN, [anon_sym_RPAREN] = anon_sym_RPAREN, - [sym_signed_integer] = sym_signed_integer, - [sym_unsigned_integer] = sym_unsigned_integer, - [sym_number] = sym_number, + [aux_sym_integer_token1] = aux_sym_integer_token1, + [aux_sym_signed_integer_token1] = aux_sym_signed_integer_token1, + [aux_sym_unsigned_integer_token1] = aux_sym_unsigned_integer_token1, [sym_unit_quote] = sym_unit_quote, [anon_sym_DOT] = anon_sym_DOT, [sym_true] = sym_true, @@ -298,6 +306,10 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_in] = anon_sym_in, [sym_source_file] = sym_source_file, [sym_void] = sym_void, + [sym_integer] = sym_integer, + [sym_signed_integer] = sym_signed_integer, + [sym_unsigned_integer] = sym_unsigned_integer, + [sym_number] = sym_number, [sym__float] = sym__float, [sym__unit] = sym__unit, [sym_scalar] = sym_scalar, @@ -368,17 +380,17 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, - [sym_signed_integer] = { - .visible = true, - .named = true, + [aux_sym_integer_token1] = { + .visible = false, + .named = false, }, - [sym_unsigned_integer] = { - .visible = true, - .named = true, + [aux_sym_signed_integer_token1] = { + .visible = false, + .named = false, }, - [sym_number] = { - .visible = true, - .named = true, + [aux_sym_unsigned_integer_token1] = { + .visible = false, + .named = false, }, [sym_unit_quote] = { .visible = true, @@ -612,6 +624,22 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym_integer] = { + .visible = true, + .named = true, + }, + [sym_signed_integer] = { + .visible = true, + .named = true, + }, + [sym_unsigned_integer] = { + .visible = true, + .named = true, + }, + [sym_number] = { + .visible = true, + .named = true, + }, [sym__float] = { .visible = false, .named = true, @@ -756,38 +784,159 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { enum ts_field_identifiers { field_a = 1, - field_b = 2, - field_default = 3, - field_name = 4, - field_op = 5, + field_argument = 2, + field_assignment = 3, + field_assignments = 4, + field_b = 5, + field_captured_variables = 6, + field_condition = 7, + field_default = 8, + field_expression = 9, + field_final_element = 10, + field_fractional = 11, + field_members = 12, + field_name = 13, + field_on_false = 14, + field_on_true = 15, + field_op = 16, + field_result = 17, + field_to_assign = 18, + field_to_iterate = 19, + field_to_run = 20, + field_type_path = 21, + field_unit = 22, + field_value = 23, + field_whole = 24, }; static const char * const ts_field_names[] = { [0] = NULL, [field_a] = "a", + [field_argument] = "argument", + [field_assignment] = "assignment", + [field_assignments] = "assignments", [field_b] = "b", + [field_captured_variables] = "captured_variables", + [field_condition] = "condition", [field_default] = "default", + [field_expression] = "expression", + [field_final_element] = "final_element", + [field_fractional] = "fractional", + [field_members] = "members", [field_name] = "name", + [field_on_false] = "on_false", + [field_on_true] = "on_true", [field_op] = "op", + [field_result] = "result", + [field_to_assign] = "to_assign", + [field_to_iterate] = "to_iterate", + [field_to_run] = "to_run", + [field_type_path] = "type_path", + [field_unit] = "unit", + [field_value] = "value", + [field_whole] = "whole", }; static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [1] = {.index = 0, .length = 1}, - [2] = {.index = 1, .length = 3}, - [3] = {.index = 4, .length = 3}, + [2] = {.index = 1, .length = 2}, + [3] = {.index = 3, .length = 1}, + [4] = {.index = 4, .length = 1}, + [5] = {.index = 5, .length = 3}, + [6] = {.index = 8, .length = 2}, + [7] = {.index = 10, .length = 1}, + [8] = {.index = 11, .length = 1}, + [9] = {.index = 12, .length = 1}, + [10] = {.index = 13, .length = 2}, + [11] = {.index = 15, .length = 2}, + [12] = {.index = 17, .length = 3}, + [13] = {.index = 20, .length = 1}, + [14] = {.index = 21, .length = 1}, + [15] = {.index = 22, .length = 2}, + [16] = {.index = 24, .length = 2}, + [17] = {.index = 26, .length = 2}, + [18] = {.index = 28, .length = 3}, + [19] = {.index = 31, .length = 3}, + [20] = {.index = 34, .length = 3}, + [21] = {.index = 37, .length = 2}, + [22] = {.index = 39, .length = 4}, + [23] = {.index = 43, .length = 2}, + [24] = {.index = 45, .length = 3}, }; static const TSFieldMapEntry ts_field_map_entries[] = { [0] = - {field_name, 0}, + {field_whole, 0}, [1] = + {field_fractional, 0, .inherited = true}, + {field_whole, 0, .inherited = true}, + [3] = + {field_op, 0}, + [4] = + {field_value, 0}, + [5] = + {field_fractional, 0, .inherited = true}, + {field_unit, 1}, + {field_whole, 0, .inherited = true}, + [8] = + {field_name, 0}, + {field_type_path, 1, .inherited = true}, + [10] = + {field_final_element, 1}, + [11] = + {field_assignments, 1}, + [12] = + {field_members, 1}, + [13] = + {field_condition, 1}, + {field_on_true, 2}, + [15] = + {field_fractional, 2}, + {field_whole, 0}, + [17] = {field_a, 0}, {field_b, 2}, {field_op, 1}, - [4] = - {field_default, 2}, + [20] = + {field_type_path, 1, .inherited = true}, + [21] = + {field_type_path, 0}, + [22] = + {field_assignment, 2}, + {field_name, 0}, + [24] = + {field_assignments, 1}, + {field_assignments, 2}, + [26] = + {field_final_element, 2}, + {field_members, 1}, + [28] = {field_default, 3}, {field_name, 0}, + {field_type_path, 1, .inherited = true}, + [31] = + {field_assignments, 1}, + {field_assignments, 2}, + {field_assignments, 3}, + [34] = + {field_condition, 1}, + {field_on_false, 4}, + {field_on_true, 2}, + [37] = + {field_to_assign, 0}, + {field_value, 2}, + [39] = + {field_argument, 0}, + {field_captured_variables, 1}, + {field_expression, 4}, + {field_result, 3}, + [43] = + {field_to_assign, 1}, + {field_value, 3}, + [45] = + {field_to_assign, 1}, + {field_to_iterate, 3}, + {field_to_run, 4}, }; static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { @@ -851,7 +1000,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [49] = 49, [50] = 50, [51] = 51, - [52] = 51, + [52] = 52, [53] = 53, [54] = 54, [55] = 55, @@ -862,47 +1011,47 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [60] = 60, [61] = 61, [62] = 62, - [63] = 62, + [63] = 63, [64] = 64, [65] = 65, - [66] = 66, + [66] = 60, [67] = 67, [68] = 68, [69] = 69, [70] = 70, - [71] = 58, - [72] = 53, - [73] = 54, - [74] = 64, - [75] = 65, - [76] = 66, - [77] = 67, - [78] = 68, - [79] = 69, - [80] = 61, + [71] = 71, + [72] = 72, + [73] = 73, + [74] = 74, + [75] = 75, + [76] = 62, + [77] = 77, + [78] = 67, + [79] = 68, + [80] = 69, [81] = 70, - [82] = 82, - [83] = 33, - [84] = 35, - [85] = 85, - [86] = 41, - [87] = 40, - [88] = 43, - [89] = 39, - [90] = 42, - [91] = 36, - [92] = 44, - [93] = 38, - [94] = 45, + [82] = 71, + [83] = 72, + [84] = 73, + [85] = 74, + [86] = 65, + [87] = 75, + [88] = 77, + [89] = 38, + [90] = 40, + [91] = 41, + [92] = 92, + [93] = 56, + [94] = 54, [95] = 46, [96] = 47, - [97] = 97, - [98] = 98, - [99] = 99, - [100] = 100, - [101] = 101, - [102] = 102, - [103] = 103, + [97] = 48, + [98] = 49, + [99] = 50, + [100] = 51, + [101] = 52, + [102] = 53, + [103] = 55, [104] = 104, [105] = 105, [106] = 106, @@ -916,14 +1065,14 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [114] = 114, [115] = 115, [116] = 116, - [117] = 116, + [117] = 117, [118] = 118, [119] = 119, [120] = 120, [121] = 121, [122] = 122, [123] = 123, - [124] = 124, + [124] = 123, [125] = 125, [126] = 126, [127] = 127, @@ -956,7 +1105,18 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [154] = 154, [155] = 155, [156] = 156, - [157] = 146, + [157] = 157, + [158] = 158, + [159] = 159, + [160] = 160, + [161] = 161, + [162] = 162, + [163] = 163, + [164] = 164, + [165] = 165, + [166] = 166, + [167] = 167, + [168] = 154, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -966,56 +1126,56 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { case 0: if (eof) ADVANCE(12); ADVANCE_MAP( - '!', 34, + '!', 31, '"', 2, '#', 13, - '&', 41, + '&', 38, '\'', 5, '(', 18, ')', 19, - '*', 36, - '+', 32, - ',', 58, - '-', 30, - '.', 26, - '/', 37, - ':', 56, - ';', 65, - '<', 48, - '=', 61, - '>', 44, - '@', 55, - '[', 57, - ']', 59, - '^', 43, - '{', 62, - '|', 42, - '}', 63, + '*', 33, + '+', 29, + ',', 55, + '-', 27, + '.', 23, + '/', 34, + ':', 53, + ';', 62, + '<', 45, + '=', 58, + '>', 41, + '@', 52, + '[', 54, + ']', 56, + '^', 40, + '{', 59, + '|', 39, + '}', 60, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(14); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(20); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); END_STATE(); case 1: ADVANCE_MAP( - '!', 33, + '!', 30, '"', 2, '#', 13, '(', 18, ')', 19, - '+', 31, - '-', 28, + '+', 28, + '-', 25, '.', 8, - '@', 55, - '[', 57, - '{', 62, + '@', 52, + '[', 54, + '{', 59, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(14); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(20); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); @@ -1035,62 +1195,61 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '-') ADVANCE(10); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(14); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(23); END_STATE(); case 5: - if (lookahead == '\'') ADVANCE(24); + if (lookahead == '\'') ADVANCE(21); if (lookahead == '\\') ADVANCE(6); if (lookahead != 0) ADVANCE(5); END_STATE(); case 6: - if (lookahead == '\'') ADVANCE(25); + if (lookahead == '\'') ADVANCE(22); if (lookahead == '\\') ADVANCE(6); if (lookahead != 0) ADVANCE(5); END_STATE(); case 7: - if (lookahead == '.') ADVANCE(60); + if (lookahead == '.') ADVANCE(57); END_STATE(); case 8: if (lookahead == '.') ADVANCE(7); END_STATE(); case 9: - if (lookahead == '=') ADVANCE(71); + if (lookahead == '=') ADVANCE(68); END_STATE(); case 10: - if (lookahead == '>') ADVANCE(64); + if (lookahead == '>') ADVANCE(61); END_STATE(); case 11: if (eof) ADVANCE(12); ADVANCE_MAP( - '!', 34, + '!', 31, '"', 2, '#', 13, - '&', 41, + '&', 38, '\'', 5, '(', 18, ')', 19, - '*', 36, - '+', 32, - ',', 58, - '-', 29, - '.', 27, - '/', 37, - ':', 56, - ';', 65, - '<', 48, - '=', 61, - '>', 44, - '@', 55, - '[', 57, - ']', 59, - '^', 43, - '{', 62, - '|', 42, - '}', 63, + '*', 33, + '+', 29, + ',', 55, + '-', 26, + '.', 24, + '/', 34, + ':', 53, + ';', 62, + '<', 45, + '=', 58, + '>', 41, + '@', 52, + '[', 54, + ']', 56, + '^', 40, + '{', 59, + '|', 39, + '}', 60, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(14); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(20); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); @@ -1129,223 +1288,209 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); case 20: - ACCEPT_TOKEN(sym_signed_integer); + ACCEPT_TOKEN(aux_sym_integer_token1); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(20); END_STATE(); case 21: - ACCEPT_TOKEN(sym_unsigned_integer); - END_STATE(); - case 22: - ACCEPT_TOKEN(sym_number); - if (lookahead == 'I' || - lookahead == 'i') ADVANCE(20); - if (lookahead == 'U' || - lookahead == 'u') ADVANCE(21); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); - END_STATE(); - case 23: - ACCEPT_TOKEN(sym_number); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(23); - END_STATE(); - case 24: ACCEPT_TOKEN(sym_unit_quote); END_STATE(); - case 25: + case 22: ACCEPT_TOKEN(sym_unit_quote); - if (lookahead == '\'') ADVANCE(24); + if (lookahead == '\'') ADVANCE(21); if (lookahead == '\\') ADVANCE(6); if (lookahead != 0) ADVANCE(5); END_STATE(); - case 26: + case 23: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(52); + if (lookahead == '.') ADVANCE(49); END_STATE(); - case 27: + case 24: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(53); + if (lookahead == '.') ADVANCE(50); END_STATE(); - case 28: + case 25: ACCEPT_TOKEN(anon_sym_DASH); END_STATE(); - case 29: + case 26: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '=') ADVANCE(73); + if (lookahead == '=') ADVANCE(70); END_STATE(); - case 30: + case 27: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '=') ADVANCE(73); - if (lookahead == '>') ADVANCE(64); + if (lookahead == '=') ADVANCE(70); + if (lookahead == '>') ADVANCE(61); END_STATE(); - case 31: + case 28: ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); - case 32: + case 29: ACCEPT_TOKEN(anon_sym_PLUS); - if (lookahead == '=') ADVANCE(72); + if (lookahead == '=') ADVANCE(69); END_STATE(); - case 33: + case 30: ACCEPT_TOKEN(anon_sym_BANG); END_STATE(); - case 34: + case 31: ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(49); + if (lookahead == '=') ADVANCE(46); END_STATE(); - case 35: + case 32: ACCEPT_TOKEN(anon_sym_STAR_STAR); - if (lookahead == '=') ADVANCE(74); + if (lookahead == '=') ADVANCE(71); END_STATE(); - case 36: + case 33: ACCEPT_TOKEN(anon_sym_STAR); - if (lookahead == '*') ADVANCE(35); - if (lookahead == '=') ADVANCE(75); + if (lookahead == '*') ADVANCE(32); + if (lookahead == '=') ADVANCE(72); END_STATE(); - case 37: + case 34: ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '/') ADVANCE(38); - if (lookahead == '=') ADVANCE(77); + if (lookahead == '/') ADVANCE(35); + if (lookahead == '=') ADVANCE(74); END_STATE(); - case 38: + case 35: ACCEPT_TOKEN(anon_sym_SLASH_SLASH); - if (lookahead == '=') ADVANCE(76); + if (lookahead == '=') ADVANCE(73); END_STATE(); - case 39: + case 36: ACCEPT_TOKEN(anon_sym_LT_LT); - if (lookahead == '=') ADVANCE(78); + if (lookahead == '=') ADVANCE(75); END_STATE(); - case 40: + case 37: ACCEPT_TOKEN(anon_sym_GT_GT); - if (lookahead == '=') ADVANCE(79); + if (lookahead == '=') ADVANCE(76); END_STATE(); - case 41: + case 38: ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(50); - if (lookahead == '=') ADVANCE(66); + if (lookahead == '&') ADVANCE(47); + if (lookahead == '=') ADVANCE(63); END_STATE(); - case 42: + case 39: ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '=') ADVANCE(67); - if (lookahead == '|') ADVANCE(51); + if (lookahead == '=') ADVANCE(64); + if (lookahead == '|') ADVANCE(48); END_STATE(); - case 43: + case 40: ACCEPT_TOKEN(anon_sym_CARET); - if (lookahead == '=') ADVANCE(68); + if (lookahead == '=') ADVANCE(65); if (lookahead == '^') ADVANCE(9); END_STATE(); - case 44: + case 41: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(45); - if (lookahead == '>') ADVANCE(40); + if (lookahead == '=') ADVANCE(42); + if (lookahead == '>') ADVANCE(37); END_STATE(); - case 45: + case 42: ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); - case 46: + case 43: ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); - case 47: + case 44: ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); - case 48: + case 45: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(39); - if (lookahead == '=') ADVANCE(47); + if (lookahead == '<') ADVANCE(36); + if (lookahead == '=') ADVANCE(44); END_STATE(); - case 49: + case 46: ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); - case 50: + case 47: ACCEPT_TOKEN(anon_sym_AMP_AMP); - if (lookahead == '=') ADVANCE(69); + if (lookahead == '=') ADVANCE(66); END_STATE(); - case 51: + case 48: ACCEPT_TOKEN(anon_sym_PIPE_PIPE); - if (lookahead == '=') ADVANCE(70); + if (lookahead == '=') ADVANCE(67); END_STATE(); - case 52: + case 49: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '.') ADVANCE(60); - if (lookahead == '=') ADVANCE(54); + if (lookahead == '.') ADVANCE(57); + if (lookahead == '=') ADVANCE(51); END_STATE(); - case 53: + case 50: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '=') ADVANCE(54); + if (lookahead == '=') ADVANCE(51); END_STATE(); - case 54: + case 51: ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); END_STATE(); - case 55: + case 52: ACCEPT_TOKEN(anon_sym_AT); END_STATE(); - case 56: + case 53: ACCEPT_TOKEN(anon_sym_COLON); END_STATE(); - case 57: + case 54: ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); - case 58: + case 55: ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); - case 59: + case 56: ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); - case 60: + case 57: ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); - case 61: + case 58: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(46); + if (lookahead == '=') ADVANCE(43); END_STATE(); - case 62: + case 59: ACCEPT_TOKEN(anon_sym_LBRACE); END_STATE(); - case 63: + case 60: ACCEPT_TOKEN(anon_sym_RBRACE); END_STATE(); - case 64: + case 61: ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); - case 65: + case 62: ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); - case 66: + case 63: ACCEPT_TOKEN(anon_sym_AMP_EQ); END_STATE(); - case 67: + case 64: ACCEPT_TOKEN(anon_sym_PIPE_EQ); END_STATE(); - case 68: + case 65: ACCEPT_TOKEN(anon_sym_CARET_EQ); END_STATE(); - case 69: + case 66: ACCEPT_TOKEN(anon_sym_AMP_AMP_EQ); END_STATE(); - case 70: + case 67: ACCEPT_TOKEN(anon_sym_PIPE_PIPE_EQ); END_STATE(); - case 71: + case 68: ACCEPT_TOKEN(anon_sym_CARET_CARET_EQ); END_STATE(); - case 72: + case 69: ACCEPT_TOKEN(anon_sym_PLUS_EQ); END_STATE(); - case 73: + case 70: ACCEPT_TOKEN(anon_sym_DASH_EQ); END_STATE(); - case 74: + case 71: ACCEPT_TOKEN(anon_sym_STAR_STAR_EQ); END_STATE(); - case 75: + case 72: ACCEPT_TOKEN(anon_sym_STAR_EQ); END_STATE(); - case 76: + case 73: ACCEPT_TOKEN(anon_sym_SLASH_SLASH_EQ); END_STATE(); - case 77: + case 74: ACCEPT_TOKEN(anon_sym_SLASH_EQ); END_STATE(); - case 78: + case 75: ACCEPT_TOKEN(anon_sym_LT_LT_EQ); END_STATE(); - case 79: + case 76: ACCEPT_TOKEN(anon_sym_GT_GT_EQ); END_STATE(); default: @@ -1358,97 +1503,109 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (lookahead == 'd') ADVANCE(1); - if (lookahead == 'e') ADVANCE(2); - if (lookahead == 'f') ADVANCE(3); - if (lookahead == 'i') ADVANCE(4); - if (lookahead == 'l') ADVANCE(5); - if (lookahead == 't') ADVANCE(6); + ADVANCE_MAP( + 'I', 1, + 'd', 2, + 'e', 3, + 'f', 4, + 'i', 5, + 'l', 6, + 't', 7, + 'U', 8, + 'u', 8, + ); END_STATE(); case 1: - if (lookahead == 'e') ADVANCE(7); + ACCEPT_TOKEN(aux_sym_signed_integer_token1); END_STATE(); case 2: - if (lookahead == 'l') ADVANCE(8); + if (lookahead == 'e') ADVANCE(9); END_STATE(); case 3: - if (lookahead == 'a') ADVANCE(9); - if (lookahead == 'o') ADVANCE(10); + if (lookahead == 'l') ADVANCE(10); END_STATE(); case 4: - if (lookahead == 'f') ADVANCE(11); - if (lookahead == 'n') ADVANCE(12); + if (lookahead == 'a') ADVANCE(11); + if (lookahead == 'o') ADVANCE(12); END_STATE(); case 5: - if (lookahead == 'e') ADVANCE(13); + ACCEPT_TOKEN(aux_sym_signed_integer_token1); + if (lookahead == 'f') ADVANCE(13); + if (lookahead == 'n') ADVANCE(14); END_STATE(); case 6: - if (lookahead == 'r') ADVANCE(14); + if (lookahead == 'e') ADVANCE(15); END_STATE(); case 7: - if (lookahead == 'f') ADVANCE(15); + if (lookahead == 'r') ADVANCE(16); END_STATE(); case 8: - if (lookahead == 's') ADVANCE(16); + ACCEPT_TOKEN(aux_sym_unsigned_integer_token1); END_STATE(); case 9: - if (lookahead == 'l') ADVANCE(17); + if (lookahead == 'f') ADVANCE(17); END_STATE(); case 10: - if (lookahead == 'r') ADVANCE(18); + if (lookahead == 's') ADVANCE(18); END_STATE(); case 11: - ACCEPT_TOKEN(anon_sym_if); + if (lookahead == 'l') ADVANCE(19); END_STATE(); case 12: - ACCEPT_TOKEN(anon_sym_in); + if (lookahead == 'r') ADVANCE(20); END_STATE(); case 13: - if (lookahead == 't') ADVANCE(19); + ACCEPT_TOKEN(anon_sym_if); END_STATE(); case 14: - if (lookahead == 'u') ADVANCE(20); + ACCEPT_TOKEN(anon_sym_in); END_STATE(); case 15: - if (lookahead == 'a') ADVANCE(21); + if (lookahead == 't') ADVANCE(21); END_STATE(); case 16: - if (lookahead == 'e') ADVANCE(22); + if (lookahead == 'u') ADVANCE(22); END_STATE(); case 17: - if (lookahead == 's') ADVANCE(23); + if (lookahead == 'a') ADVANCE(23); END_STATE(); case 18: - ACCEPT_TOKEN(anon_sym_for); + if (lookahead == 'e') ADVANCE(24); END_STATE(); case 19: - ACCEPT_TOKEN(anon_sym_let); + if (lookahead == 's') ADVANCE(25); END_STATE(); case 20: - if (lookahead == 'e') ADVANCE(24); + ACCEPT_TOKEN(anon_sym_for); END_STATE(); case 21: - if (lookahead == 'u') ADVANCE(25); + ACCEPT_TOKEN(anon_sym_let); END_STATE(); case 22: - ACCEPT_TOKEN(anon_sym_else); + if (lookahead == 'e') ADVANCE(26); END_STATE(); case 23: - if (lookahead == 'e') ADVANCE(26); + if (lookahead == 'u') ADVANCE(27); END_STATE(); case 24: - ACCEPT_TOKEN(sym_true); + ACCEPT_TOKEN(anon_sym_else); END_STATE(); case 25: - if (lookahead == 'l') ADVANCE(27); + if (lookahead == 'e') ADVANCE(28); END_STATE(); case 26: - ACCEPT_TOKEN(sym_false); + ACCEPT_TOKEN(sym_true); END_STATE(); case 27: - if (lookahead == 't') ADVANCE(28); + if (lookahead == 'l') ADVANCE(29); END_STATE(); case 28: + ACCEPT_TOKEN(sym_false); + END_STATE(); + case 29: + if (lookahead == 't') ADVANCE(30); + END_STATE(); + case 30: ACCEPT_TOKEN(sym_default); END_STATE(); default: @@ -1471,7 +1628,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [11] = {.lex_state = 11}, [12] = {.lex_state = 11}, [13] = {.lex_state = 11}, - [14] = {.lex_state = 11}, + [14] = {.lex_state = 1}, [15] = {.lex_state = 11}, [16] = {.lex_state = 11}, [17] = {.lex_state = 11}, @@ -1491,7 +1648,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [31] = {.lex_state = 11}, [32] = {.lex_state = 11}, [33] = {.lex_state = 11}, - [34] = {.lex_state = 1}, + [34] = {.lex_state = 11}, [35] = {.lex_state = 11}, [36] = {.lex_state = 11}, [37] = {.lex_state = 11}, @@ -1571,25 +1728,25 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [111] = {.lex_state = 11}, [112] = {.lex_state = 11}, [113] = {.lex_state = 11}, - [114] = {.lex_state = 0}, + [114] = {.lex_state = 11}, [115] = {.lex_state = 11}, - [116] = {.lex_state = 0}, - [117] = {.lex_state = 0}, - [118] = {.lex_state = 1}, - [119] = {.lex_state = 1}, + [116] = {.lex_state = 11}, + [117] = {.lex_state = 11}, + [118] = {.lex_state = 11}, + [119] = {.lex_state = 11}, [120] = {.lex_state = 0}, - [121] = {.lex_state = 1}, - [122] = {.lex_state = 0}, + [121] = {.lex_state = 11}, + [122] = {.lex_state = 11}, [123] = {.lex_state = 0}, [124] = {.lex_state = 0}, [125] = {.lex_state = 1}, - [126] = {.lex_state = 0}, + [126] = {.lex_state = 1}, [127] = {.lex_state = 0}, - [128] = {.lex_state = 0}, + [128] = {.lex_state = 1}, [129] = {.lex_state = 0}, [130] = {.lex_state = 0}, [131] = {.lex_state = 0}, - [132] = {.lex_state = 0}, + [132] = {.lex_state = 1}, [133] = {.lex_state = 0}, [134] = {.lex_state = 0}, [135] = {.lex_state = 0}, @@ -1600,21 +1757,32 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [140] = {.lex_state = 0}, [141] = {.lex_state = 0}, [142] = {.lex_state = 0}, - [143] = {.lex_state = 4}, + [143] = {.lex_state = 0}, [144] = {.lex_state = 0}, [145] = {.lex_state = 0}, - [146] = {.lex_state = 4}, + [146] = {.lex_state = 0}, [147] = {.lex_state = 0}, [148] = {.lex_state = 0}, [149] = {.lex_state = 0}, - [150] = {.lex_state = 4}, - [151] = {.lex_state = 4}, + [150] = {.lex_state = 0}, + [151] = {.lex_state = 0}, [152] = {.lex_state = 0}, - [153] = {.lex_state = 4}, - [154] = {.lex_state = 0}, + [153] = {.lex_state = 0}, + [154] = {.lex_state = 4}, [155] = {.lex_state = 0}, [156] = {.lex_state = 0}, - [157] = {.lex_state = 4}, + [157] = {.lex_state = 0}, + [158] = {.lex_state = 0}, + [159] = {.lex_state = 4}, + [160] = {.lex_state = 4}, + [161] = {.lex_state = 4}, + [162] = {.lex_state = 0}, + [163] = {.lex_state = 0}, + [164] = {.lex_state = 0}, + [165] = {.lex_state = 0}, + [166] = {.lex_state = 0}, + [167] = {.lex_state = 0}, + [168] = {.lex_state = 4}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -1627,9 +1795,9 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_default] = ACTIONS(1), [anon_sym_LPAREN] = ACTIONS(1), [anon_sym_RPAREN] = ACTIONS(1), - [sym_signed_integer] = ACTIONS(1), - [sym_unsigned_integer] = ACTIONS(1), - [sym_number] = ACTIONS(1), + [aux_sym_integer_token1] = ACTIONS(1), + [aux_sym_signed_integer_token1] = ACTIONS(1), + [aux_sym_unsigned_integer_token1] = ACTIONS(1), [sym_unit_quote] = ACTIONS(1), [anon_sym_DOT] = ACTIONS(1), [sym_true] = ACTIONS(1), @@ -1688,33 +1856,35 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_in] = ACTIONS(1), }, [1] = { - [sym_source_file] = STATE(144), - [sym_void] = STATE(84), - [sym__float] = STATE(83), - [sym_scalar] = STATE(20), - [sym_boolean] = STATE(20), - [sym_expression] = STATE(107), - [sym_unary_expression] = STATE(20), - [sym_binary_expression] = STATE(20), - [sym_if] = STATE(20), - [sym_path] = STATE(84), + [sym_source_file] = STATE(163), + [sym_void] = STATE(91), + [sym_integer] = STATE(142), + [sym_signed_integer] = STATE(30), + [sym_unsigned_integer] = STATE(30), + [sym_number] = STATE(13), + [sym__float] = STATE(90), + [sym_scalar] = STATE(30), + [sym_boolean] = STATE(30), + [sym_expression] = STATE(111), + [sym_unary_expression] = STATE(30), + [sym_binary_expression] = STATE(30), + [sym_if] = STATE(30), + [sym_path] = STATE(91), [sym_argument_path] = STATE(8), [sym_local_path] = STATE(8), - [sym_parenthesis] = STATE(20), - [sym_list] = STATE(20), - [sym_struct_definition] = STATE(84), - [sym_dictionary_construction] = STATE(20), - [sym_procedural_block] = STATE(20), - [sym_closure_definition] = STATE(20), + [sym_parenthesis] = STATE(30), + [sym_list] = STATE(30), + [sym_struct_definition] = STATE(91), + [sym_dictionary_construction] = STATE(30), + [sym_procedural_block] = STATE(30), + [sym_closure_definition] = STATE(30), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), [sym_default] = ACTIONS(9), [anon_sym_LPAREN] = ACTIONS(11), - [sym_signed_integer] = ACTIONS(7), - [sym_unsigned_integer] = ACTIONS(7), - [sym_number] = ACTIONS(13), + [aux_sym_integer_token1] = ACTIONS(13), [sym_true] = ACTIONS(15), [sym_false] = ACTIONS(15), [anon_sym_DASH] = ACTIONS(17), @@ -1726,7 +1896,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LBRACE] = ACTIONS(25), }, [2] = { - [aux_sym_argument_path_repeat1] = STATE(4), + [aux_sym_argument_path_repeat1] = STATE(6), [ts_builtin_sym_end] = ACTIONS(27), [sym_identifier] = ACTIONS(29), [sym_comment] = ACTIONS(3), @@ -1735,9 +1905,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_default] = ACTIONS(29), [anon_sym_LPAREN] = ACTIONS(27), [anon_sym_RPAREN] = ACTIONS(27), - [sym_signed_integer] = ACTIONS(27), - [sym_unsigned_integer] = ACTIONS(27), - [sym_number] = ACTIONS(29), + [aux_sym_integer_token1] = ACTIONS(27), [anon_sym_DOT] = ACTIONS(31), [sym_true] = ACTIONS(29), [sym_false] = ACTIONS(29), @@ -1790,7 +1958,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_for] = ACTIONS(29), }, [3] = { - [aux_sym_argument_path_repeat1] = STATE(5), + [aux_sym_argument_path_repeat1] = STATE(2), [ts_builtin_sym_end] = ACTIONS(33), [sym_identifier] = ACTIONS(35), [sym_comment] = ACTIONS(3), @@ -1799,9 +1967,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_default] = ACTIONS(35), [anon_sym_LPAREN] = ACTIONS(33), [anon_sym_RPAREN] = ACTIONS(33), - [sym_signed_integer] = ACTIONS(33), - [sym_unsigned_integer] = ACTIONS(33), - [sym_number] = ACTIONS(35), + [aux_sym_integer_token1] = ACTIONS(33), [anon_sym_DOT] = ACTIONS(31), [sym_true] = ACTIONS(35), [sym_false] = ACTIONS(35), @@ -1854,7 +2020,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_for] = ACTIONS(35), }, [4] = { - [aux_sym_argument_path_repeat1] = STATE(6), + [aux_sym_argument_path_repeat1] = STATE(5), [ts_builtin_sym_end] = ACTIONS(37), [sym_identifier] = ACTIONS(39), [sym_comment] = ACTIONS(3), @@ -1863,9 +2029,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_default] = ACTIONS(39), [anon_sym_LPAREN] = ACTIONS(37), [anon_sym_RPAREN] = ACTIONS(37), - [sym_signed_integer] = ACTIONS(37), - [sym_unsigned_integer] = ACTIONS(37), - [sym_number] = ACTIONS(39), + [aux_sym_integer_token1] = ACTIONS(37), [anon_sym_DOT] = ACTIONS(31), [sym_true] = ACTIONS(39), [sym_false] = ACTIONS(39), @@ -1927,9 +2091,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_default] = ACTIONS(43), [anon_sym_LPAREN] = ACTIONS(41), [anon_sym_RPAREN] = ACTIONS(41), - [sym_signed_integer] = ACTIONS(41), - [sym_unsigned_integer] = ACTIONS(41), - [sym_number] = ACTIONS(43), + [aux_sym_integer_token1] = ACTIONS(41), [anon_sym_DOT] = ACTIONS(31), [sym_true] = ACTIONS(43), [sym_false] = ACTIONS(43), @@ -1991,9 +2153,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_default] = ACTIONS(47), [anon_sym_LPAREN] = ACTIONS(45), [anon_sym_RPAREN] = ACTIONS(45), - [sym_signed_integer] = ACTIONS(45), - [sym_unsigned_integer] = ACTIONS(45), - [sym_number] = ACTIONS(47), + [aux_sym_integer_token1] = ACTIONS(45), [anon_sym_DOT] = ACTIONS(49), [sym_true] = ACTIONS(47), [sym_false] = ACTIONS(47), @@ -2054,9 +2214,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_default] = ACTIONS(47), [anon_sym_LPAREN] = ACTIONS(45), [anon_sym_RPAREN] = ACTIONS(45), - [sym_signed_integer] = ACTIONS(45), - [sym_unsigned_integer] = ACTIONS(45), - [sym_number] = ACTIONS(47), + [aux_sym_integer_token1] = ACTIONS(45), [anon_sym_DOT] = ACTIONS(47), [sym_true] = ACTIONS(47), [sym_false] = ACTIONS(47), @@ -2117,9 +2275,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_default] = ACTIONS(54), [anon_sym_LPAREN] = ACTIONS(52), [anon_sym_RPAREN] = ACTIONS(52), - [sym_signed_integer] = ACTIONS(52), - [sym_unsigned_integer] = ACTIONS(52), - [sym_number] = ACTIONS(54), + [aux_sym_integer_token1] = ACTIONS(52), [sym_true] = ACTIONS(54), [sym_false] = ACTIONS(54), [anon_sym_DASH] = ACTIONS(54), @@ -2171,17 +2327,15 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_for] = ACTIONS(54), }, [9] = { - [sym_closure_captured_variables] = STATE(157), - [sym_assignment_operator] = STATE(56), + [sym_closure_captured_variables] = STATE(168), + [sym_assignment_operator] = STATE(59), [sym_identifier] = ACTIONS(56), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(58), [sym_default] = ACTIONS(56), [anon_sym_LPAREN] = ACTIONS(58), - [sym_signed_integer] = ACTIONS(58), - [sym_unsigned_integer] = ACTIONS(58), - [sym_number] = ACTIONS(56), + [aux_sym_integer_token1] = ACTIONS(58), [sym_true] = ACTIONS(56), [sym_false] = ACTIONS(56), [anon_sym_DASH] = ACTIONS(56), @@ -2233,21 +2387,236 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { }; static const uint16_t ts_small_parse_table[] = { - [0] = 4, + [0] = 25, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + ACTIONS(64), 1, + aux_sym_integer_token1, ACTIONS(68), 1, - anon_sym_DOT, + anon_sym_RBRACE, + ACTIONS(70), 1, + anon_sym_let, + ACTIONS(72), 1, + anon_sym_for, + STATE(9), 1, + sym_path, + STATE(13), 1, + sym_number, + STATE(40), 1, + sym__float, + STATE(45), 1, + sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(66), 16, - sym_identifier, - sym_default, - sym_number, + ACTIONS(15), 2, sym_true, sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + STATE(11), 2, + sym_statement, + aux_sym_procedural_block_repeat1, + STATE(41), 2, + sym_void, + sym_struct_definition, + ACTIONS(66), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, + STATE(115), 4, + sym_closed_expression, + sym_let, + sym_assign, + sym_for, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [97] = 25, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + ACTIONS(64), 1, + aux_sym_integer_token1, + ACTIONS(70), 1, + anon_sym_let, + ACTIONS(72), 1, + anon_sym_for, + ACTIONS(74), 1, + anon_sym_RBRACE, + STATE(9), 1, + sym_path, + STATE(13), 1, + sym_number, + STATE(40), 1, + sym__float, + STATE(45), 1, + sym_expression, + STATE(142), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + sym_true, + sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + STATE(12), 2, + sym_statement, + aux_sym_procedural_block_repeat1, + STATE(41), 2, + sym_void, + sym_struct_definition, + ACTIONS(66), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(115), 4, + sym_closed_expression, + sym_let, + sym_assign, + sym_for, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [194] = 25, + ACTIONS(76), 1, + sym_identifier, + ACTIONS(79), 1, + sym_string, + ACTIONS(82), 1, + sym_default, + ACTIONS(85), 1, + anon_sym_LPAREN, + ACTIONS(88), 1, + aux_sym_integer_token1, + ACTIONS(97), 1, + anon_sym_if, + ACTIONS(100), 1, + anon_sym_AT, + ACTIONS(103), 1, + anon_sym_LBRACK, + ACTIONS(106), 1, + anon_sym_LBRACE, + ACTIONS(109), 1, + anon_sym_RBRACE, + ACTIONS(111), 1, + anon_sym_let, + ACTIONS(114), 1, + anon_sym_for, + STATE(9), 1, + sym_path, + STATE(13), 1, + sym_number, + STATE(40), 1, + sym__float, + STATE(45), 1, + sym_expression, + STATE(142), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(91), 2, + sym_true, + sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + STATE(12), 2, + sym_statement, + aux_sym_procedural_block_repeat1, + STATE(41), 2, + sym_void, + sym_struct_definition, + ACTIONS(94), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(115), 4, + sym_closed_expression, + sym_let, + sym_assign, + sym_for, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [291] = 4, + ACTIONS(121), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(119), 15, + sym_identifier, + sym_default, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, @@ -2256,13 +2625,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(64), 28, + ACTIONS(117), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, @@ -2285,14 +2653,84 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [56] = 3, + [345] = 26, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + aux_sym_integer_token1, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + ACTIONS(123), 1, + sym_identifier, + ACTIONS(125), 1, + anon_sym_RPAREN, + ACTIONS(127), 1, + sym_varadic_dots, + STATE(13), 1, + sym_number, + STATE(90), 1, + sym__float, + STATE(110), 1, + sym_expression, + STATE(126), 1, + aux_sym_struct_definition_repeat1, + STATE(134), 1, + aux_sym_dictionary_construction_repeat1, + STATE(139), 1, + sym_struct_member, + STATE(141), 1, + sym_dictionary_member_assignment, + STATE(142), 1, + sym_integer, + STATE(158), 1, + sym__struct_final_element, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + sym_true, + sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(91), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [442] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(72), 17, + ACTIONS(131), 16, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2307,13 +2745,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_else, anon_sym_let, anon_sym_for, - ACTIONS(70), 27, + ACTIONS(129), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2335,14 +2772,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [109] = 3, + [493] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(76), 16, + ACTIONS(135), 16, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2354,16 +2790,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_else, anon_sym_let, anon_sym_for, - ACTIONS(74), 28, + ACTIONS(133), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, - sym_unit_quote, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2385,16 +2820,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [162] = 4, - ACTIONS(82), 1, + [544] = 4, + ACTIONS(141), 1, anon_sym_else, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(80), 16, + ACTIONS(139), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2408,13 +2842,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(78), 27, + ACTIONS(137), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2436,14 +2869,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [217] = 3, + [597] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(86), 17, + ACTIONS(145), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2455,16 +2887,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - anon_sym_else, anon_sym_let, anon_sym_for, - ACTIONS(84), 27, + ACTIONS(143), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2486,14 +2917,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [270] = 3, + [648] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(90), 16, + ACTIONS(149), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2507,13 +2937,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(88), 27, + ACTIONS(147), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2535,14 +2965,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [322] = 3, + [699] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(94), 16, + ACTIONS(153), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2556,13 +2985,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(92), 27, + ACTIONS(151), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2584,14 +3012,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [374] = 3, + [749] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(98), 16, + ACTIONS(157), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2605,13 +3032,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(96), 27, + ACTIONS(155), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2633,14 +3059,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [426] = 3, + [799] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(102), 16, + ACTIONS(161), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2654,13 +3079,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(100), 27, + ACTIONS(159), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2682,14 +3106,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [478] = 3, + [849] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(106), 16, + ACTIONS(165), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2703,13 +3126,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(104), 27, + ACTIONS(163), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2731,14 +3153,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [530] = 3, + [899] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(56), 16, + ACTIONS(169), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2752,13 +3173,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(58), 27, + ACTIONS(167), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2780,14 +3200,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [582] = 3, + [949] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(110), 16, + ACTIONS(173), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2801,13 +3220,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(108), 27, + ACTIONS(171), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2829,14 +3247,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [634] = 3, + [999] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(114), 16, + ACTIONS(177), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2850,13 +3267,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(112), 27, + ACTIONS(175), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2878,14 +3294,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [686] = 3, + [1049] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(118), 16, + ACTIONS(181), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2899,13 +3314,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(116), 27, + ACTIONS(179), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2927,14 +3341,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [738] = 3, + [1099] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(122), 16, + ACTIONS(185), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2948,13 +3361,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(120), 27, + ACTIONS(183), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2976,14 +3388,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [790] = 3, + [1149] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(126), 16, + ACTIONS(189), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -2997,13 +3408,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(124), 27, + ACTIONS(187), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3025,14 +3435,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [842] = 3, + [1199] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(130), 16, + ACTIONS(56), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -3046,13 +3455,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(128), 27, + ACTIONS(58), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3074,14 +3482,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [894] = 3, + [1249] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(134), 16, + ACTIONS(193), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -3095,13 +3502,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(132), 27, + ACTIONS(191), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3123,14 +3529,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [946] = 3, + [1299] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 16, + ACTIONS(197), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -3144,13 +3549,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(136), 27, + ACTIONS(195), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3172,14 +3576,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [998] = 3, + [1349] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(142), 16, + ACTIONS(201), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -3193,13 +3596,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(140), 27, + ACTIONS(199), 26, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3221,222 +3623,300 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1050] = 23, - ACTIONS(5), 1, + [1399] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(205), 15, sym_identifier, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, - ACTIONS(19), 1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, anon_sym_if, - ACTIONS(21), 1, + anon_sym_let, + anon_sym_for, + ACTIONS(203), 26, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + aux_sym_integer_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_AT, - ACTIONS(23), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + anon_sym_COMMA, + anon_sym_RBRACK, anon_sym_LBRACE, - ACTIONS(146), 1, anon_sym_RBRACE, - ACTIONS(148), 1, - anon_sym_let, - ACTIONS(150), 1, - anon_sym_for, - STATE(9), 1, - sym_path, - STATE(33), 1, - sym__float, - STATE(37), 1, - sym_expression, + anon_sym_SEMI, + [1449] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(209), 15, + sym_identifier, + sym_default, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - STATE(32), 2, - sym_statement, - aux_sym_procedural_block_repeat1, - STATE(35), 2, - sym_void, - sym_struct_definition, - ACTIONS(7), 3, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(207), 26, + ts_builtin_sym_end, sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + anon_sym_LPAREN, + anon_sym_RPAREN, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(108), 4, - sym_closed_expression, - sym_let, - sym_assign, - sym_for, - STATE(20), 10, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [1141] = 23, - ACTIONS(5), 1, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1499] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(213), 15, sym_identifier, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, - ACTIONS(19), 1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, anon_sym_if, - ACTIONS(21), 1, + anon_sym_let, + anon_sym_for, + ACTIONS(211), 26, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + aux_sym_integer_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_AT, - ACTIONS(23), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + anon_sym_COMMA, + anon_sym_RBRACK, anon_sym_LBRACE, - ACTIONS(148), 1, - anon_sym_let, - ACTIONS(150), 1, - anon_sym_for, - ACTIONS(152), 1, anon_sym_RBRACE, - STATE(9), 1, - sym_path, - STATE(33), 1, - sym__float, - STATE(37), 1, - sym_expression, + anon_sym_SEMI, + [1549] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(217), 15, + sym_identifier, + sym_default, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - STATE(30), 2, - sym_statement, - aux_sym_procedural_block_repeat1, - STATE(35), 2, - sym_void, - sym_struct_definition, - ACTIONS(7), 3, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(215), 26, + ts_builtin_sym_end, sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + anon_sym_LPAREN, + anon_sym_RPAREN, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(108), 4, - sym_closed_expression, - sym_let, - sym_assign, - sym_for, - STATE(20), 10, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [1232] = 23, - ACTIONS(154), 1, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1599] = 4, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(219), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(145), 16, sym_identifier, - ACTIONS(160), 1, sym_default, - ACTIONS(163), 1, - anon_sym_LPAREN, - ACTIONS(166), 1, - sym_number, - ACTIONS(175), 1, + anon_sym_DOT, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, anon_sym_if, - ACTIONS(178), 1, + anon_sym_let, + anon_sym_for, + ACTIONS(143), 23, + sym_string, + anon_sym_LPAREN, + aux_sym_integer_token1, + sym_unit_quote, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_AT, - ACTIONS(181), 1, anon_sym_LBRACK, - ACTIONS(184), 1, anon_sym_LBRACE, - ACTIONS(187), 1, anon_sym_RBRACE, - ACTIONS(189), 1, - anon_sym_let, - ACTIONS(192), 1, - anon_sym_for, - STATE(9), 1, - sym_path, - STATE(33), 1, - sym__float, - STATE(37), 1, - sym_expression, + anon_sym_SEMI, + [1651] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(169), 2, + ACTIONS(223), 15, + sym_identifier, + sym_default, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - STATE(32), 2, - sym_statement, - aux_sym_procedural_block_repeat1, - STATE(35), 2, - sym_void, - sym_struct_definition, - ACTIONS(157), 3, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(221), 26, + ts_builtin_sym_end, sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(172), 3, + anon_sym_LPAREN, + anon_sym_RPAREN, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(108), 4, - sym_closed_expression, - sym_let, - sym_assign, - sym_for, - STATE(20), 10, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [1323] = 5, - ACTIONS(199), 1, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1701] = 5, + ACTIONS(229), 1, sym_unit_quote, - STATE(16), 1, + STATE(22), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(195), 16, + ACTIONS(225), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -3450,37 +3930,146 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(197), 23, + ACTIONS(227), 22, + sym_string, + anon_sym_LPAREN, + aux_sym_integer_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1753] = 4, + STATE(168), 1, + sym_closure_captured_variables, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(56), 15, + sym_identifier, + sym_default, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(58), 22, + sym_string, + anon_sym_LPAREN, + aux_sym_integer_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1802] = 21, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + aux_sym_integer_token1, + ACTIONS(19), 1, + anon_sym_if, + ACTIONS(21), 1, + anon_sym_AT, + ACTIONS(23), 1, + anon_sym_LBRACK, + ACTIONS(25), 1, + anon_sym_LBRACE, + ACTIONS(231), 1, + anon_sym_RBRACK, + STATE(13), 1, + sym_number, + STATE(43), 1, + aux_sym_list_repeat1, + STATE(90), 1, + sym__float, + STATE(109), 1, + sym_expression, + STATE(142), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(15), 2, + sym_true, + sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(17), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(91), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [1884] = 21, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, - anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_AT, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1377] = 24, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -3489,26 +4078,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - ACTIONS(201), 1, - sym_identifier, - ACTIONS(203), 1, - anon_sym_RPAREN, - ACTIONS(205), 1, - sym_varadic_dots, - STATE(83), 1, + ACTIONS(233), 1, + anon_sym_RBRACK, + STATE(13), 1, + sym_number, + STATE(44), 1, + aux_sym_list_repeat1, + STATE(90), 1, sym__float, - STATE(105), 1, + STATE(107), 1, sym_expression, - STATE(119), 1, - aux_sym_struct_definition_repeat1, - STATE(123), 1, - aux_sym_dictionary_construction_repeat1, - STATE(131), 1, - sym_dictionary_member_assignment, - STATE(139), 1, - sym_struct_member, - STATE(145), 1, - sym__struct_final_element, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -3518,19 +4099,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -3541,212 +4120,207 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [1468] = 4, - STATE(157), 1, - sym_closure_captured_variables, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(56), 16, + [1966] = 21, + ACTIONS(235), 1, sym_identifier, - sym_default, - sym_number, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(58), 23, + ACTIONS(238), 1, sym_string, + ACTIONS(241), 1, + sym_default, + ACTIONS(244), 1, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(247), 1, + aux_sym_integer_token1, + ACTIONS(256), 1, + anon_sym_if, + ACTIONS(259), 1, anon_sym_AT, + ACTIONS(262), 1, anon_sym_LBRACK, + ACTIONS(265), 1, + anon_sym_RBRACK, + ACTIONS(267), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1519] = 10, - ACTIONS(209), 1, - anon_sym_STAR_STAR, - ACTIONS(213), 1, - anon_sym_SLASH_SLASH, - ACTIONS(217), 1, - anon_sym_AMP, - ACTIONS(219), 1, - anon_sym_CARET, + STATE(13), 1, + sym_number, + STATE(44), 1, + aux_sym_list_repeat1, + STATE(90), 1, + sym__float, + STATE(113), 1, + sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(207), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(211), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(215), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(134), 13, - sym_identifier, - sym_default, - sym_number, + ACTIONS(250), 2, sym_true, sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(253), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(132), 16, - sym_string, - anon_sym_LPAREN, + STATE(91), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(30), 12, sym_signed_integer, sym_unsigned_integer, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_AT, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1581] = 18, - ACTIONS(209), 1, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2048] = 18, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(213), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, - ACTIONS(217), 1, + ACTIONS(284), 1, anon_sym_AMP, - ACTIONS(219), 1, - anon_sym_CARET, - ACTIONS(225), 1, + ACTIONS(286), 1, anon_sym_PIPE, - ACTIONS(231), 1, + ACTIONS(288), 1, + anon_sym_CARET, + ACTIONS(294), 1, anon_sym_AMP_AMP, - ACTIONS(233), 1, + ACTIONS(296), 1, anon_sym_PIPE_PIPE, - ACTIONS(235), 1, + ACTIONS(298), 1, anon_sym_DOT_DOT, - ACTIONS(237), 1, + ACTIONS(300), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(239), 1, + ACTIONS(302), 1, anon_sym_SEMI, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(207), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(211), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(215), 2, + ACTIONS(282), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(227), 2, + ACTIONS(290), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(229), 4, + ACTIONS(292), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(223), 8, + ACTIONS(272), 7, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - ACTIONS(221), 9, + ACTIONS(270), 8, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, anon_sym_if, anon_sym_let, anon_sym_for, - [1659] = 13, - ACTIONS(209), 1, + [2124] = 6, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(213), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, - ACTIONS(217), 1, - anon_sym_AMP, - ACTIONS(219), 1, - anon_sym_CARET, - ACTIONS(225), 1, - anon_sym_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(207), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(211), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(215), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(227), 2, + ACTIONS(197), 13, + sym_identifier, + sym_default, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(229), 4, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(195), 20, + sym_string, + anon_sym_LPAREN, + aux_sym_integer_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(134), 10, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [2176] = 4, + ACTIONS(276), 1, + anon_sym_STAR_STAR, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(197), 15, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(132), 12, + ACTIONS(195), 21, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, @@ -3755,47 +4329,41 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1727] = 11, - ACTIONS(209), 1, + [2224] = 7, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(213), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, - ACTIONS(217), 1, - anon_sym_AMP, - ACTIONS(219), 1, - anon_sym_CARET, - ACTIONS(225), 1, - anon_sym_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(207), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(211), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(215), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(134), 12, + ACTIONS(197), 13, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(132), 16, + ACTIONS(195), 18, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -3808,21 +4376,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1791] = 6, - ACTIONS(209), 1, + [2278] = 8, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(213), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(211), 2, + ACTIONS(274), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(134), 14, + ACTIONS(282), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(197), 13, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -3834,15 +4407,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(132), 21, + ACTIONS(195), 16, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, + aux_sym_integer_token1, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -3856,22 +4424,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1845] = 4, - ACTIONS(209), 1, + [2334] = 10, + ACTIONS(276), 1, anon_sym_STAR_STAR, + ACTIONS(280), 1, + anon_sym_SLASH_SLASH, + ACTIONS(284), 1, + anon_sym_AMP, + ACTIONS(288), 1, + anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(134), 16, + ACTIONS(274), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(278), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(282), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(197), 12, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, @@ -3879,17 +4458,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(132), 22, + ACTIONS(195), 15, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, + aux_sym_integer_token1, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -3902,28 +4474,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1895] = 7, - ACTIONS(209), 1, + [2394] = 9, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(213), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, + ACTIONS(284), 1, + anon_sym_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(207), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(211), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(134), 14, + ACTIONS(282), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(197), 12, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, - anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, @@ -3931,13 +4506,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(132), 19, + ACTIONS(195), 16, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, - anon_sym_LT_LT, - anon_sym_GT_GT, + aux_sym_integer_token1, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -3951,44 +4523,45 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1951] = 8, - ACTIONS(209), 1, + [2452] = 11, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(213), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, + ACTIONS(284), 1, + anon_sym_AMP, + ACTIONS(286), 1, + anon_sym_PIPE, + ACTIONS(288), 1, + anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(207), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(211), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(215), 2, + ACTIONS(282), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(134), 14, + ACTIONS(197), 11, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, - anon_sym_AMP, - anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(132), 17, + ACTIONS(195), 15, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, - anon_sym_CARET, + aux_sym_integer_token1, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -4001,49 +4574,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2009] = 9, - ACTIONS(209), 1, + [2514] = 13, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(213), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, - ACTIONS(217), 1, + ACTIONS(284), 1, anon_sym_AMP, + ACTIONS(286), 1, + anon_sym_PIPE, + ACTIONS(288), 1, + anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(207), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(211), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(215), 2, + ACTIONS(282), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(134), 13, + ACTIONS(290), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(292), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(197), 9, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(132), 17, + ACTIONS(195), 11, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + aux_sym_integer_token1, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, @@ -4052,43 +4627,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2069] = 14, - ACTIONS(209), 1, + [2580] = 14, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(213), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, - ACTIONS(217), 1, + ACTIONS(284), 1, anon_sym_AMP, - ACTIONS(219), 1, - anon_sym_CARET, - ACTIONS(225), 1, + ACTIONS(286), 1, anon_sym_PIPE, - ACTIONS(231), 1, + ACTIONS(288), 1, + anon_sym_CARET, + ACTIONS(294), 1, anon_sym_AMP_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(207), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(211), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(215), 2, + ACTIONS(282), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(227), 2, + ACTIONS(290), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(229), 4, + ACTIONS(292), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(134), 10, + ACTIONS(197), 9, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -4096,11 +4670,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(132), 11, + ACTIONS(195), 10, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_AT, @@ -4108,56 +4681,54 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2139] = 15, - ACTIONS(209), 1, + [2648] = 15, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(213), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, - ACTIONS(217), 1, + ACTIONS(284), 1, anon_sym_AMP, - ACTIONS(219), 1, - anon_sym_CARET, - ACTIONS(225), 1, + ACTIONS(286), 1, anon_sym_PIPE, - ACTIONS(231), 1, + ACTIONS(288), 1, + anon_sym_CARET, + ACTIONS(294), 1, anon_sym_AMP_AMP, - ACTIONS(233), 1, + ACTIONS(296), 1, anon_sym_PIPE_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(207), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(211), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(215), 2, + ACTIONS(282), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(227), 2, + ACTIONS(290), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(229), 4, + ACTIONS(292), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(132), 10, + ACTIONS(195), 9, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DOT_DOT_EQ, anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - ACTIONS(134), 10, + ACTIONS(197), 9, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, @@ -4165,131 +4736,74 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - [2211] = 17, - ACTIONS(209), 1, + [2718] = 17, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(213), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, - ACTIONS(217), 1, + ACTIONS(284), 1, anon_sym_AMP, - ACTIONS(219), 1, - anon_sym_CARET, - ACTIONS(225), 1, + ACTIONS(286), 1, anon_sym_PIPE, - ACTIONS(231), 1, + ACTIONS(288), 1, + anon_sym_CARET, + ACTIONS(294), 1, anon_sym_AMP_AMP, - ACTIONS(233), 1, + ACTIONS(296), 1, anon_sym_PIPE_PIPE, - ACTIONS(235), 1, + ACTIONS(298), 1, anon_sym_DOT_DOT, - ACTIONS(237), 1, + ACTIONS(300), 1, anon_sym_DOT_DOT_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(207), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(211), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(215), 2, + ACTIONS(282), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(227), 2, + ACTIONS(290), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(229), 4, + ACTIONS(292), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(241), 9, + ACTIONS(304), 8, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_BANG, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(243), 9, + ACTIONS(306), 8, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2287] = 19, + [2792] = 19, ACTIONS(5), 1, sym_identifier, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, - ACTIONS(19), 1, - anon_sym_if, - ACTIONS(21), 1, - anon_sym_AT, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(25), 1, - anon_sym_LBRACE, - ACTIONS(245), 1, - anon_sym_RBRACK, - STATE(50), 1, - aux_sym_list_repeat1, - STATE(83), 1, - sym__float, - STATE(102), 1, - sym_expression, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(15), 2, - sym_true, - sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(7), 3, + ACTIONS(7), 1, sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(17), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(84), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(20), 10, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [2363] = 19, - ACTIONS(5), 1, - sym_identifier, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -4298,124 +4812,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - ACTIONS(247), 1, - anon_sym_RBRACK, - STATE(48), 1, - aux_sym_list_repeat1, - STATE(83), 1, - sym__float, - STATE(97), 1, - sym_expression, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(15), 2, - sym_true, - sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(17), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(84), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(20), 10, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [2439] = 19, - ACTIONS(249), 1, - sym_identifier, - ACTIONS(255), 1, - sym_default, - ACTIONS(258), 1, - anon_sym_LPAREN, - ACTIONS(261), 1, - sym_number, - ACTIONS(270), 1, - anon_sym_if, - ACTIONS(273), 1, - anon_sym_AT, - ACTIONS(276), 1, - anon_sym_LBRACK, - ACTIONS(279), 1, - anon_sym_RBRACK, - ACTIONS(281), 1, - anon_sym_LBRACE, - STATE(50), 1, - aux_sym_list_repeat1, - STATE(83), 1, - sym__float, - STATE(103), 1, - sym_expression, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(264), 2, - sym_true, - sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(252), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(267), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(84), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(20), 10, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [2515] = 17, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, + STATE(13), 1, sym_number, - ACTIONS(19), 1, - anon_sym_if, - ACTIONS(21), 1, - anon_sym_AT, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(25), 1, - anon_sym_LBRACE, - STATE(33), 1, + STATE(90), 1, sym__float, - STATE(38), 1, + STATE(106), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -4425,19 +4829,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(35), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -4448,15 +4850,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2585] = 17, + [2868] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -4465,10 +4869,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, - STATE(93), 1, + STATE(105), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -4478,19 +4886,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -4501,15 +4907,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2655] = 17, + [2944] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -4518,10 +4926,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, - STATE(94), 1, + STATE(112), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -4531,19 +4943,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -4554,15 +4964,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2725] = 17, + [3020] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -4571,10 +4983,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, - sym__float, - STATE(95), 1, + STATE(13), 1, + sym_number, + STATE(23), 1, sym_expression, + STATE(90), 1, + sym__float, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -4584,19 +5000,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -4607,15 +5021,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2795] = 17, + [3096] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -4624,10 +5040,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, - STATE(99), 1, + STATE(108), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -4637,19 +5057,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -4660,15 +5078,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2865] = 17, + [3172] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -4677,10 +5097,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, - STATE(106), 1, + STATE(94), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -4690,19 +5114,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -4713,15 +5135,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2935] = 17, + [3248] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -4730,10 +5154,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, - STATE(101), 1, + STATE(114), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -4743,19 +5171,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -4766,15 +5192,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3005] = 17, + [3324] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -4783,10 +5211,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, - STATE(89), 1, + STATE(104), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -4796,19 +5228,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -4819,15 +5249,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3075] = 17, + [3400] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -4836,10 +5268,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, - STATE(104), 1, + STATE(93), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -4849,19 +5285,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -4872,15 +5306,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3145] = 17, + [3476] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -4889,10 +5323,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, - sym__float, - STATE(100), 1, + ACTIONS(64), 1, + aux_sym_integer_token1, + STATE(13), 1, + sym_number, + STATE(23), 1, sym_expression, + STATE(40), 1, + sym__float, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -4902,19 +5342,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(17), 3, + ACTIONS(66), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -4925,15 +5363,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3215] = 17, + [3552] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -4942,10 +5380,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, + ACTIONS(64), 1, + aux_sym_integer_token1, + STATE(13), 1, + sym_number, + STATE(40), 1, sym__float, - STATE(96), 1, + STATE(46), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -4955,19 +5399,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(17), 3, + ACTIONS(66), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -4978,15 +5420,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3285] = 17, + [3628] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -4995,10 +5437,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(22), 1, + ACTIONS(64), 1, + aux_sym_integer_token1, + STATE(13), 1, + sym_number, + STATE(32), 1, sym_expression, - STATE(83), 1, + STATE(40), 1, sym__float, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5008,19 +5456,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(17), 3, + ACTIONS(66), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5031,15 +5477,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3355] = 17, + [3704] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5048,10 +5494,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(22), 1, - sym_expression, - STATE(33), 1, + ACTIONS(64), 1, + aux_sym_integer_token1, + STATE(13), 1, + sym_number, + STATE(40), 1, sym__float, + STATE(47), 1, + sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5061,19 +5513,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + ACTIONS(66), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(35), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5084,15 +5534,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3425] = 17, + [3780] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5101,10 +5551,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(33), 1, - sym__float, + ACTIONS(64), 1, + aux_sym_integer_token1, + STATE(13), 1, + sym_number, STATE(40), 1, + sym__float, + STATE(48), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5114,19 +5570,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + ACTIONS(66), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(35), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5137,15 +5591,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3495] = 17, + [3856] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5154,10 +5608,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(27), 1, - sym_expression, - STATE(33), 1, + ACTIONS(64), 1, + aux_sym_integer_token1, + STATE(13), 1, + sym_number, + STATE(40), 1, sym__float, + STATE(49), 1, + sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5167,19 +5627,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + ACTIONS(66), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(35), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5190,15 +5648,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3565] = 17, + [3932] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5207,10 +5665,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(33), 1, + ACTIONS(64), 1, + aux_sym_integer_token1, + STATE(13), 1, + sym_number, + STATE(40), 1, sym__float, - STATE(41), 1, + STATE(50), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5220,19 +5684,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + ACTIONS(66), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(35), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5243,15 +5705,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3635] = 17, + [4008] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5260,10 +5722,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(33), 1, + ACTIONS(64), 1, + aux_sym_integer_token1, + STATE(13), 1, + sym_number, + STATE(40), 1, sym__float, - STATE(42), 1, + STATE(51), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5273,19 +5741,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + ACTIONS(66), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(35), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5296,15 +5762,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3705] = 17, + [4084] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5313,10 +5779,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(33), 1, + ACTIONS(64), 1, + aux_sym_integer_token1, + STATE(13), 1, + sym_number, + STATE(40), 1, sym__float, - STATE(43), 1, + STATE(52), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5326,19 +5798,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + ACTIONS(66), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(35), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5349,15 +5819,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3775] = 17, + [4160] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5366,10 +5836,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(33), 1, + ACTIONS(64), 1, + aux_sym_integer_token1, + STATE(13), 1, + sym_number, + STATE(40), 1, sym__float, - STATE(36), 1, + STATE(53), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5379,19 +5855,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + ACTIONS(66), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(35), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5402,15 +5876,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3845] = 17, + [4236] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5419,10 +5893,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(33), 1, + ACTIONS(64), 1, + aux_sym_integer_token1, + STATE(13), 1, + sym_number, + STATE(40), 1, sym__float, - STATE(44), 1, + STATE(54), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5432,19 +5912,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + ACTIONS(66), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(35), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5455,15 +5933,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3915] = 17, + [4312] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5472,10 +5950,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(33), 1, + ACTIONS(64), 1, + aux_sym_integer_token1, + STATE(13), 1, + sym_number, + STATE(40), 1, sym__float, - STATE(39), 1, + STATE(55), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5485,19 +5969,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + ACTIONS(66), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(35), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5508,15 +5990,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3985] = 17, + [4388] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5525,10 +6009,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(33), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, - STATE(45), 1, + STATE(95), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5538,19 +6026,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(35), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5561,15 +6047,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4055] = 17, + [4464] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5578,10 +6066,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(33), 1, - sym__float, - STATE(46), 1, + STATE(13), 1, + sym_number, + STATE(32), 1, sym_expression, + STATE(90), 1, + sym__float, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5591,19 +6083,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(35), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5614,15 +6104,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4125] = 17, + [4540] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5631,10 +6123,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, - STATE(87), 1, + STATE(96), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5644,19 +6140,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5667,15 +6161,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4195] = 17, + [4616] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5684,10 +6180,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(27), 1, - sym_expression, - STATE(83), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, + STATE(97), 1, + sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5697,19 +6197,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5720,15 +6218,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4265] = 17, + [4692] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5737,10 +6237,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, - STATE(86), 1, + STATE(98), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5750,19 +6254,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5773,15 +6275,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4335] = 17, + [4768] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5790,10 +6294,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, - sym__float, + STATE(13), 1, + sym_number, STATE(90), 1, + sym__float, + STATE(99), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5803,19 +6311,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5826,15 +6332,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4405] = 17, + [4844] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5843,10 +6351,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, - STATE(88), 1, + STATE(100), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5856,19 +6368,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5879,15 +6389,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4475] = 17, + [4920] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5896,10 +6408,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, - STATE(91), 1, + STATE(101), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5909,19 +6425,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5932,15 +6446,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4545] = 17, + [4996] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - sym_number, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -5949,10 +6463,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(33), 1, + ACTIONS(64), 1, + aux_sym_integer_token1, + STATE(13), 1, + sym_number, + STATE(40), 1, sym__float, - STATE(47), 1, + STATE(56), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -5962,19 +6482,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, - ACTIONS(144), 3, + ACTIONS(66), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(35), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -5985,15 +6503,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4615] = 17, + [5072] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -6002,10 +6522,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, - STATE(92), 1, + STATE(102), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -6015,19 +6539,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -6038,15 +6560,17 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4685] = 17, + [5148] = 19, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - sym_number, + aux_sym_integer_token1, ACTIONS(19), 1, anon_sym_if, ACTIONS(21), 1, @@ -6055,10 +6579,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(25), 1, anon_sym_LBRACE, - STATE(83), 1, + STATE(13), 1, + sym_number, + STATE(90), 1, sym__float, - STATE(98), 1, + STATE(103), 1, sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -6068,19 +6596,17 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(7), 3, - sym_string, - sym_signed_integer, - sym_unsigned_integer, ACTIONS(17), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(84), 3, + STATE(91), 3, sym_void, sym_path, sym_struct_definition, - STATE(20), 10, + STATE(30), 12, + sym_signed_integer, + sym_unsigned_integer, sym_scalar, sym_boolean, sym_unary_expression, @@ -6091,16 +6617,55 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4755] = 5, - STATE(16), 1, + [5224] = 4, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(219), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(145), 9, + sym_identifier, + anon_sym_DOT, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(143), 21, + ts_builtin_sym_end, + anon_sym_RPAREN, + sym_unit_quote, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [5267] = 5, + STATE(22), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(199), 2, + ACTIONS(229), 2, sym_identifier, sym_unit_quote, - ACTIONS(195), 7, + ACTIONS(225), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -6108,7 +6673,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(197), 20, + ACTIONS(227), 20, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_DASH, @@ -6129,10 +6694,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [4798] = 5, - ACTIONS(284), 1, + [5310] = 5, + ACTIONS(308), 1, anon_sym_LBRACK, - STATE(146), 1, + STATE(154), 1, sym_closure_captured_variables, ACTIONS(3), 2, sym_comment, @@ -6166,21 +6731,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [4840] = 8, + [5352] = 8, ACTIONS(31), 1, anon_sym_DOT, - ACTIONS(286), 1, + ACTIONS(310), 1, anon_sym_COLON, - ACTIONS(288), 1, + ACTIONS(312), 1, anon_sym_EQ, - STATE(4), 1, + STATE(2), 1, aux_sym_argument_path_repeat1, - STATE(126), 1, + STATE(130), 1, sym__declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(29), 7, + ACTIONS(35), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -6188,7 +6753,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(27), 16, + ACTIONS(33), 16, anon_sym_RPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -6205,58 +6770,114 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - [4887] = 4, - ACTIONS(290), 1, + [5399] = 16, + ACTIONS(316), 1, anon_sym_STAR_STAR, + ACTIONS(320), 1, + anon_sym_SLASH_SLASH, + ACTIONS(324), 1, + anon_sym_AMP, + ACTIONS(326), 1, + anon_sym_PIPE, + ACTIONS(328), 1, + anon_sym_CARET, + ACTIONS(334), 1, + anon_sym_AMP_AMP, + ACTIONS(336), 1, + anon_sym_PIPE_PIPE, + ACTIONS(338), 1, + anon_sym_DOT_DOT, + ACTIONS(340), 1, + anon_sym_DOT_DOT_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(134), 7, + ACTIONS(314), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(318), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(322), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(330), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(132), 19, + ACTIONS(332), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(306), 6, ts_builtin_sym_end, anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [5461] = 14, + ACTIONS(197), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, + anon_sym_STAR_STAR, + ACTIONS(320), 1, + anon_sym_SLASH_SLASH, + ACTIONS(324), 1, + anon_sym_AMP, + ACTIONS(326), 1, + anon_sym_PIPE, + ACTIONS(328), 1, + anon_sym_CARET, + ACTIONS(334), 1, + anon_sym_AMP_AMP, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH_SLASH, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(330), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(332), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(195), 8, + ts_builtin_sym_end, + anon_sym_RPAREN, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [4925] = 6, - ACTIONS(290), 1, + [5519] = 6, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, + ACTIONS(318), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(134), 5, + ACTIONS(197), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(132), 18, + ACTIONS(195), 18, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_DASH, @@ -6275,32 +6896,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [4967] = 8, - ACTIONS(290), 1, + [5561] = 4, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, - anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, + ACTIONS(197), 7, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(298), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(134), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(132), 14, + ACTIONS(195), 19, ts_builtin_sym_end, anon_sym_RPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -6313,36 +6930,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5013] = 11, - ACTIONS(290), 1, + [5599] = 7, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, - anon_sym_AMP, - ACTIONS(302), 1, - anon_sym_PIPE, - ACTIONS(304), 1, - anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(134), 3, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(197), 5, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(132), 13, + ACTIONS(195), 16, ts_builtin_sym_end, anon_sym_RPAREN, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -6354,31 +6967,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5065] = 7, - ACTIONS(290), 1, + [5643] = 8, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(134), 5, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(197), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(132), 16, + ACTIONS(195), 14, ts_builtin_sym_end, anon_sym_RPAREN, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -6391,33 +7005,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5109] = 10, - ACTIONS(290), 1, + [5689] = 10, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(134), 4, + ACTIONS(197), 4, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(132), 13, + ACTIONS(195), 13, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_GT_EQ, @@ -6431,31 +7045,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5159] = 9, - ACTIONS(290), 1, + [5739] = 9, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(134), 4, + ACTIONS(197), 4, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(132), 14, + ACTIONS(195), 14, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_CARET, @@ -6470,42 +7084,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5207] = 13, - ACTIONS(134), 1, - anon_sym_DOT_DOT, - ACTIONS(290), 1, + [5787] = 11, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(326), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(197), 3, anon_sym_GT, anon_sym_LT, - ACTIONS(308), 4, + anon_sym_DOT_DOT, + ACTIONS(195), 13, + ts_builtin_sym_end, + anon_sym_RPAREN, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(132), 9, - ts_builtin_sym_end, - anon_sym_RPAREN, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, @@ -6513,88 +7125,87 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5263] = 14, - ACTIONS(134), 1, + [5839] = 13, + ACTIONS(197), 1, anon_sym_DOT_DOT, - ACTIONS(290), 1, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(326), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, - ACTIONS(310), 1, - anon_sym_AMP_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(330), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(308), 4, + ACTIONS(332), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(132), 8, + ACTIONS(195), 9, ts_builtin_sym_end, anon_sym_RPAREN, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5321] = 15, - ACTIONS(134), 1, + [5895] = 15, + ACTIONS(197), 1, anon_sym_DOT_DOT, - ACTIONS(290), 1, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(326), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, - ACTIONS(310), 1, + ACTIONS(334), 1, anon_sym_AMP_AMP, - ACTIONS(312), 1, + ACTIONS(336), 1, anon_sym_PIPE_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(330), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(308), 4, + ACTIONS(332), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(132), 7, + ACTIONS(195), 7, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_DOT_DOT_EQ, @@ -6602,531 +7213,483 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5381] = 16, - ACTIONS(290), 1, + [5955] = 17, + ACTIONS(25), 1, + anon_sym_LBRACE, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(326), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, - ACTIONS(310), 1, + ACTIONS(334), 1, anon_sym_AMP_AMP, - ACTIONS(312), 1, + ACTIONS(336), 1, anon_sym_PIPE_PIPE, - ACTIONS(314), 1, + ACTIONS(338), 1, anon_sym_DOT_DOT, - ACTIONS(316), 1, + ACTIONS(340), 1, anon_sym_DOT_DOT_EQ, + STATE(119), 1, + sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(330), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(308), 4, + ACTIONS(332), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(243), 6, - ts_builtin_sym_end, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [5443] = 17, - ACTIONS(245), 1, - anon_sym_RBRACK, - ACTIONS(290), 1, + [6015] = 16, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(326), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, - ACTIONS(310), 1, + ACTIONS(334), 1, anon_sym_AMP_AMP, - ACTIONS(312), 1, + ACTIONS(336), 1, anon_sym_PIPE_PIPE, - ACTIONS(314), 1, + ACTIONS(338), 1, anon_sym_DOT_DOT, - ACTIONS(316), 1, + ACTIONS(340), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(318), 1, - anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(330), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(308), 4, + ACTIONS(342), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + ACTIONS(332), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5503] = 17, + [6073] = 17, ACTIONS(25), 1, anon_sym_LBRACE, - ACTIONS(290), 1, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(326), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, - ACTIONS(310), 1, + ACTIONS(334), 1, anon_sym_AMP_AMP, - ACTIONS(312), 1, + ACTIONS(336), 1, anon_sym_PIPE_PIPE, - ACTIONS(314), 1, + ACTIONS(338), 1, anon_sym_DOT_DOT, - ACTIONS(316), 1, + ACTIONS(340), 1, anon_sym_DOT_DOT_EQ, - STATE(13), 1, + STATE(17), 1, sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(306), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(308), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [5563] = 16, - ACTIONS(290), 1, - anon_sym_STAR_STAR, - ACTIONS(294), 1, - anon_sym_SLASH_SLASH, - ACTIONS(300), 1, - anon_sym_AMP, - ACTIONS(302), 1, - anon_sym_PIPE, - ACTIONS(304), 1, - anon_sym_CARET, - ACTIONS(310), 1, - anon_sym_AMP_AMP, - ACTIONS(312), 1, - anon_sym_PIPE_PIPE, - ACTIONS(314), 1, - anon_sym_DOT_DOT, - ACTIONS(316), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(292), 2, + ACTIONS(318), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(330), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(320), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - ACTIONS(308), 4, + ACTIONS(332), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5621] = 17, - ACTIONS(25), 1, - anon_sym_LBRACE, - ACTIONS(290), 1, + [6133] = 17, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(326), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, - ACTIONS(310), 1, + ACTIONS(334), 1, anon_sym_AMP_AMP, - ACTIONS(312), 1, + ACTIONS(336), 1, anon_sym_PIPE_PIPE, - ACTIONS(314), 1, + ACTIONS(338), 1, anon_sym_DOT_DOT, - ACTIONS(316), 1, + ACTIONS(340), 1, anon_sym_DOT_DOT_EQ, - STATE(110), 1, - sym_procedural_block, + ACTIONS(344), 1, + anon_sym_COMMA, + ACTIONS(346), 1, + anon_sym_RBRACK, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(330), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(308), 4, + ACTIONS(332), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5681] = 16, - ACTIONS(290), 1, + [6193] = 16, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(326), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, - ACTIONS(310), 1, + ACTIONS(334), 1, anon_sym_AMP_AMP, - ACTIONS(312), 1, + ACTIONS(336), 1, anon_sym_PIPE_PIPE, - ACTIONS(314), 1, + ACTIONS(338), 1, anon_sym_DOT_DOT, - ACTIONS(316), 1, + ACTIONS(340), 1, anon_sym_DOT_DOT_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(330), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(322), 2, + ACTIONS(348), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(308), 4, + ACTIONS(332), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5739] = 17, - ACTIONS(290), 1, + [6251] = 17, + ACTIONS(233), 1, + anon_sym_RBRACK, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(326), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, - ACTIONS(310), 1, + ACTIONS(334), 1, anon_sym_AMP_AMP, - ACTIONS(312), 1, + ACTIONS(336), 1, anon_sym_PIPE_PIPE, - ACTIONS(314), 1, + ACTIONS(338), 1, anon_sym_DOT_DOT, - ACTIONS(316), 1, + ACTIONS(340), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(318), 1, + ACTIONS(344), 1, anon_sym_COMMA, - ACTIONS(324), 1, - anon_sym_RBRACK, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(330), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(308), 4, + ACTIONS(332), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5799] = 16, - ACTIONS(290), 1, + [6311] = 16, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(326), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, - ACTIONS(310), 1, + ACTIONS(334), 1, anon_sym_AMP_AMP, - ACTIONS(312), 1, + ACTIONS(336), 1, anon_sym_PIPE_PIPE, - ACTIONS(314), 1, + ACTIONS(338), 1, anon_sym_DOT_DOT, - ACTIONS(316), 1, + ACTIONS(340), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(318), 1, - anon_sym_COMMA, + ACTIONS(350), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(330), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(308), 4, + ACTIONS(332), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5856] = 16, - ACTIONS(290), 1, + [6368] = 16, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(326), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, - ACTIONS(310), 1, + ACTIONS(334), 1, anon_sym_AMP_AMP, - ACTIONS(312), 1, + ACTIONS(336), 1, anon_sym_PIPE_PIPE, - ACTIONS(314), 1, + ACTIONS(338), 1, anon_sym_DOT_DOT, - ACTIONS(316), 1, + ACTIONS(340), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(326), 1, - anon_sym_SEMI, + ACTIONS(352), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(330), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(308), 4, + ACTIONS(332), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5913] = 16, - ACTIONS(290), 1, + [6425] = 16, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(326), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, - ACTIONS(310), 1, + ACTIONS(334), 1, anon_sym_AMP_AMP, - ACTIONS(312), 1, + ACTIONS(336), 1, anon_sym_PIPE_PIPE, - ACTIONS(314), 1, + ACTIONS(338), 1, anon_sym_DOT_DOT, - ACTIONS(316), 1, + ACTIONS(340), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(328), 1, - anon_sym_RPAREN, + ACTIONS(354), 1, + anon_sym_SEMI, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(330), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(308), 4, + ACTIONS(332), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5970] = 16, - ACTIONS(290), 1, + [6482] = 16, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(326), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, - ACTIONS(310), 1, + ACTIONS(334), 1, anon_sym_AMP_AMP, - ACTIONS(312), 1, + ACTIONS(336), 1, anon_sym_PIPE_PIPE, - ACTIONS(314), 1, + ACTIONS(338), 1, anon_sym_DOT_DOT, - ACTIONS(316), 1, + ACTIONS(340), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(330), 1, - anon_sym_SEMI, + ACTIONS(344), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(330), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(308), 4, + ACTIONS(332), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6027] = 16, - ACTIONS(290), 1, + [6539] = 16, + ACTIONS(316), 1, anon_sym_STAR_STAR, - ACTIONS(294), 1, + ACTIONS(320), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(324), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(326), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(328), 1, anon_sym_CARET, - ACTIONS(310), 1, + ACTIONS(334), 1, anon_sym_AMP_AMP, - ACTIONS(312), 1, + ACTIONS(336), 1, anon_sym_PIPE_PIPE, - ACTIONS(314), 1, + ACTIONS(338), 1, anon_sym_DOT_DOT, - ACTIONS(316), 1, + ACTIONS(340), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(332), 1, - ts_builtin_sym_end, + ACTIONS(356), 1, + anon_sym_SEMI, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(296), 2, + ACTIONS(314), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(318), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(322), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(330), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(308), 4, + ACTIONS(332), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6084] = 3, + [6596] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(221), 8, + ACTIONS(270), 7, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(223), 11, + ACTIONS(272), 10, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -7134,24 +7697,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [6112] = 3, + [6622] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(334), 8, + ACTIONS(358), 7, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(336), 11, + ACTIONS(360), 10, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -7159,24 +7720,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [6140] = 3, + [6648] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(338), 8, + ACTIONS(362), 7, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(340), 11, + ACTIONS(364), 10, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -7184,24 +7743,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [6168] = 3, + [6674] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(342), 8, + ACTIONS(366), 7, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(344), 11, + ACTIONS(368), 10, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -7209,24 +7766,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [6196] = 3, + [6700] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(346), 8, + ACTIONS(370), 7, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(348), 11, + ACTIONS(372), 10, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -7234,31 +7789,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [6224] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(350), 6, - sym_identifier, - sym_default, - sym_number, - sym_true, - sym_false, - anon_sym_if, - ACTIONS(279), 11, - sym_string, - anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - anon_sym_AT, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_LBRACE, - [6250] = 3, - STATE(59), 1, + [6726] = 3, + STATE(63), 1, sym_assignment_operator, ACTIONS(3), 2, sym_comment, @@ -7279,34 +7811,53 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SLASH_EQ, anon_sym_LT_LT_EQ, anon_sym_GT_GT_EQ, - [6275] = 3, + [6751] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(352), 6, + ACTIONS(374), 5, sym_identifier, sym_default, - sym_number, sym_true, sym_false, anon_sym_if, - ACTIONS(354), 10, + ACTIONS(265), 10, sym_string, anon_sym_LPAREN, - sym_signed_integer, - sym_unsigned_integer, + aux_sym_integer_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_LBRACE, + [6775] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(376), 5, + sym_identifier, + sym_default, + sym_true, + sym_false, + anon_sym_if, + ACTIONS(378), 9, + sym_string, + anon_sym_LPAREN, + aux_sym_integer_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, - [6300] = 6, + [6798] = 6, ACTIONS(21), 1, anon_sym_AT, - ACTIONS(356), 1, + ACTIONS(380), 1, sym_identifier, - ACTIONS(358), 1, + ACTIONS(382), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, @@ -7314,16 +7865,16 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - STATE(61), 3, + STATE(86), 3, sym_void, sym_path, sym_struct_definition, - [6323] = 6, + [6821] = 6, ACTIONS(21), 1, anon_sym_AT, - ACTIONS(356), 1, + ACTIONS(380), 1, sym_identifier, - ACTIONS(358), 1, + ACTIONS(382), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, @@ -7331,330 +7882,360 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - STATE(80), 3, + STATE(65), 3, sym_void, sym_path, sym_struct_definition, - [6346] = 7, - ACTIONS(203), 1, + [6844] = 7, + ACTIONS(125), 1, anon_sym_RPAREN, - ACTIONS(205), 1, + ACTIONS(127), 1, sym_varadic_dots, - ACTIONS(360), 1, + ACTIONS(384), 1, sym_identifier, - STATE(119), 1, + STATE(126), 1, aux_sym_struct_definition_repeat1, STATE(139), 1, sym_struct_member, - STATE(145), 1, + STATE(158), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6369] = 7, - ACTIONS(205), 1, + [6867] = 7, + ACTIONS(127), 1, sym_varadic_dots, - ACTIONS(360), 1, + ACTIONS(384), 1, sym_identifier, - ACTIONS(362), 1, + ACTIONS(386), 1, anon_sym_RPAREN, - STATE(121), 1, + STATE(128), 1, aux_sym_struct_definition_repeat1, STATE(139), 1, sym_struct_member, - STATE(152), 1, + STATE(156), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6392] = 5, + [6890] = 6, ACTIONS(21), 1, anon_sym_AT, - ACTIONS(356), 1, + ACTIONS(380), 1, sym_identifier, + STATE(136), 1, + sym__variable_type, + STATE(137), 1, + sym_path, ACTIONS(3), 2, sym_comment, sym__whitespace, STATE(8), 2, sym_argument_path, sym_local_path, - STATE(124), 2, - sym__variable_type, - sym_path, - [6411] = 5, - ACTIONS(364), 1, + [6911] = 5, + ACTIONS(388), 1, sym_identifier, - STATE(121), 1, + STATE(128), 1, aux_sym_struct_definition_repeat1, - STATE(141), 1, + STATE(164), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(367), 2, + ACTIONS(391), 2, anon_sym_RPAREN, sym_varadic_dots, - [6429] = 5, - ACTIONS(369), 1, - sym_identifier, - ACTIONS(372), 1, - anon_sym_RPAREN, - STATE(122), 1, - aux_sym_dictionary_construction_repeat1, - STATE(149), 1, - sym_dictionary_member_assignment, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [6446] = 5, - ACTIONS(374), 1, + [6929] = 4, + ACTIONS(393), 1, sym_identifier, - ACTIONS(376), 1, - anon_sym_RPAREN, - STATE(122), 1, - aux_sym_dictionary_construction_repeat1, - STATE(137), 1, - sym_dictionary_member_assignment, + ACTIONS(396), 1, + anon_sym_RBRACK, + STATE(129), 1, + aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6463] = 2, + [6943] = 3, + ACTIONS(400), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(378), 3, + ACTIONS(398), 2, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_EQ, - [6473] = 2, + [6955] = 4, + ACTIONS(402), 1, + sym_identifier, + ACTIONS(404), 1, + anon_sym_RBRACK, + STATE(133), 1, + aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(367), 3, - sym_identifier, - anon_sym_RPAREN, - sym_varadic_dots, - [6483] = 3, - ACTIONS(382), 1, - anon_sym_EQ, + [6969] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(380), 2, + ACTIONS(391), 3, + sym_identifier, anon_sym_RPAREN, - anon_sym_COMMA, - [6495] = 4, - ACTIONS(384), 1, + sym_varadic_dots, + [6979] = 4, + ACTIONS(406), 1, sym_identifier, - ACTIONS(386), 1, + ACTIONS(408), 1, anon_sym_RBRACK, - STATE(128), 1, + STATE(129), 1, aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6509] = 4, - ACTIONS(388), 1, + [6993] = 4, + ACTIONS(410), 1, sym_identifier, - ACTIONS(391), 1, - anon_sym_RBRACK, - STATE(128), 1, - aux_sym_closure_captured_variables_repeat1, + STATE(135), 1, + aux_sym_dictionary_construction_repeat1, + STATE(147), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6523] = 4, - ACTIONS(393), 1, + [7007] = 4, + ACTIONS(412), 1, sym_identifier, - ACTIONS(395), 1, - anon_sym_RBRACK, - STATE(127), 1, - aux_sym_closure_captured_variables_repeat1, + STATE(135), 1, + aux_sym_dictionary_construction_repeat1, + STATE(166), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6537] = 3, - ACTIONS(25), 1, - anon_sym_LBRACE, - STATE(26), 1, - sym_procedural_block, + [7021] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6548] = 3, - ACTIONS(376), 1, + ACTIONS(415), 3, anon_sym_RPAREN, - ACTIONS(397), 1, anon_sym_COMMA, + anon_sym_EQ, + [7031] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6559] = 2, + ACTIONS(417), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_EQ, + [7041] = 3, + ACTIONS(25), 1, + anon_sym_LBRACE, + STATE(37), 1, + sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(372), 2, - sym_identifier, + [7052] = 3, + ACTIONS(419), 1, anon_sym_RPAREN, - [6568] = 3, - ACTIONS(286), 1, + ACTIONS(421), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [7063] = 3, + ACTIONS(310), 1, anon_sym_COLON, - STATE(126), 1, + STATE(130), 1, sym__declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6579] = 3, - ACTIONS(399), 1, + [7074] = 3, + ACTIONS(423), 1, anon_sym_RPAREN, - ACTIONS(401), 1, + ACTIONS(425), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6590] = 2, + [7085] = 3, + ACTIONS(427), 1, + aux_sym_signed_integer_token1, + ACTIONS(429), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(391), 2, - sym_identifier, - anon_sym_RBRACK, - [6599] = 3, - ACTIONS(403), 1, + [7096] = 3, + ACTIONS(419), 1, + anon_sym_RPAREN, + ACTIONS(431), 1, anon_sym_COMMA, - ACTIONS(405), 1, - anon_sym_RBRACK, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6610] = 3, - ACTIONS(397), 1, + [7107] = 3, + ACTIONS(433), 1, anon_sym_COMMA, - ACTIONS(407), 1, + ACTIONS(435), 1, + anon_sym_RBRACK, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [7118] = 3, + ACTIONS(437), 1, + sym_identifier, + ACTIONS(439), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6621] = 3, - ACTIONS(386), 1, + [7129] = 3, + ACTIONS(408), 1, anon_sym_RBRACK, - ACTIONS(403), 1, + ACTIONS(433), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6632] = 3, - ACTIONS(399), 1, + [7140] = 3, + ACTIONS(439), 1, anon_sym_RPAREN, - ACTIONS(409), 1, + ACTIONS(441), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6643] = 2, - ACTIONS(411), 1, - anon_sym_in, + [7151] = 3, + ACTIONS(443), 1, + aux_sym_integer_token1, + STATE(19), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6651] = 2, - ACTIONS(409), 1, - anon_sym_COMMA, + [7162] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6659] = 2, - ACTIONS(413), 1, + ACTIONS(396), 2, + sym_identifier, + anon_sym_RBRACK, + [7171] = 3, + ACTIONS(437), 1, sym_identifier, + ACTIONS(445), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6667] = 2, - ACTIONS(415), 1, - sym_number, + [7182] = 2, + ACTIONS(447), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6675] = 2, - ACTIONS(417), 1, - ts_builtin_sym_end, + [7190] = 2, + ACTIONS(437), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6683] = 2, - ACTIONS(362), 1, - anon_sym_RPAREN, + [7198] = 2, + ACTIONS(449), 1, + anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6691] = 2, - ACTIONS(419), 1, + [7206] = 2, + ACTIONS(451), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6699] = 2, - ACTIONS(421), 1, + [7214] = 2, + ACTIONS(453), 1, + sym_identifier, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [7222] = 2, + ACTIONS(455), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6707] = 2, - ACTIONS(423), 1, - sym_identifier, + [7230] = 2, + ACTIONS(457), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6715] = 2, - ACTIONS(397), 1, - anon_sym_COMMA, + [7238] = 2, + ACTIONS(459), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6723] = 2, - ACTIONS(425), 1, + [7246] = 2, + ACTIONS(461), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6731] = 2, - ACTIONS(427), 1, + [7254] = 2, + ACTIONS(463), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6739] = 2, - ACTIONS(429), 1, - anon_sym_RPAREN, + [7262] = 2, + ACTIONS(465), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6747] = 2, - ACTIONS(431), 1, - anon_sym_DASH_GT, + [7270] = 2, + ACTIONS(467), 1, + sym_identifier, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [7278] = 2, + ACTIONS(469), 1, + ts_builtin_sym_end, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [7286] = 2, + ACTIONS(421), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6755] = 2, + [7294] = 2, ACTIONS(433), 1, - anon_sym_EQ, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6763] = 2, - ACTIONS(403), 1, + [7302] = 2, + ACTIONS(471), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6771] = 2, - ACTIONS(435), 1, - sym_identifier, + [7310] = 2, + ACTIONS(473), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6779] = 2, - ACTIONS(437), 1, + [7318] = 2, + ACTIONS(475), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, @@ -7663,362 +8244,392 @@ static const uint16_t ts_small_parse_table[] = { static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(10)] = 0, - [SMALL_STATE(11)] = 56, - [SMALL_STATE(12)] = 109, - [SMALL_STATE(13)] = 162, - [SMALL_STATE(14)] = 217, - [SMALL_STATE(15)] = 270, - [SMALL_STATE(16)] = 322, - [SMALL_STATE(17)] = 374, - [SMALL_STATE(18)] = 426, - [SMALL_STATE(19)] = 478, - [SMALL_STATE(20)] = 530, - [SMALL_STATE(21)] = 582, - [SMALL_STATE(22)] = 634, - [SMALL_STATE(23)] = 686, - [SMALL_STATE(24)] = 738, - [SMALL_STATE(25)] = 790, - [SMALL_STATE(26)] = 842, - [SMALL_STATE(27)] = 894, - [SMALL_STATE(28)] = 946, - [SMALL_STATE(29)] = 998, - [SMALL_STATE(30)] = 1050, - [SMALL_STATE(31)] = 1141, - [SMALL_STATE(32)] = 1232, - [SMALL_STATE(33)] = 1323, - [SMALL_STATE(34)] = 1377, - [SMALL_STATE(35)] = 1468, - [SMALL_STATE(36)] = 1519, - [SMALL_STATE(37)] = 1581, - [SMALL_STATE(38)] = 1659, - [SMALL_STATE(39)] = 1727, - [SMALL_STATE(40)] = 1791, - [SMALL_STATE(41)] = 1845, - [SMALL_STATE(42)] = 1895, - [SMALL_STATE(43)] = 1951, - [SMALL_STATE(44)] = 2009, - [SMALL_STATE(45)] = 2069, - [SMALL_STATE(46)] = 2139, - [SMALL_STATE(47)] = 2211, - [SMALL_STATE(48)] = 2287, - [SMALL_STATE(49)] = 2363, - [SMALL_STATE(50)] = 2439, - [SMALL_STATE(51)] = 2515, - [SMALL_STATE(52)] = 2585, - [SMALL_STATE(53)] = 2655, - [SMALL_STATE(54)] = 2725, - [SMALL_STATE(55)] = 2795, - [SMALL_STATE(56)] = 2865, - [SMALL_STATE(57)] = 2935, - [SMALL_STATE(58)] = 3005, - [SMALL_STATE(59)] = 3075, - [SMALL_STATE(60)] = 3145, - [SMALL_STATE(61)] = 3215, - [SMALL_STATE(62)] = 3285, - [SMALL_STATE(63)] = 3355, - [SMALL_STATE(64)] = 3425, - [SMALL_STATE(65)] = 3495, - [SMALL_STATE(66)] = 3565, - [SMALL_STATE(67)] = 3635, - [SMALL_STATE(68)] = 3705, - [SMALL_STATE(69)] = 3775, - [SMALL_STATE(70)] = 3845, - [SMALL_STATE(71)] = 3915, - [SMALL_STATE(72)] = 3985, - [SMALL_STATE(73)] = 4055, - [SMALL_STATE(74)] = 4125, - [SMALL_STATE(75)] = 4195, - [SMALL_STATE(76)] = 4265, - [SMALL_STATE(77)] = 4335, - [SMALL_STATE(78)] = 4405, - [SMALL_STATE(79)] = 4475, - [SMALL_STATE(80)] = 4545, - [SMALL_STATE(81)] = 4615, - [SMALL_STATE(82)] = 4685, - [SMALL_STATE(83)] = 4755, - [SMALL_STATE(84)] = 4798, - [SMALL_STATE(85)] = 4840, - [SMALL_STATE(86)] = 4887, - [SMALL_STATE(87)] = 4925, - [SMALL_STATE(88)] = 4967, - [SMALL_STATE(89)] = 5013, - [SMALL_STATE(90)] = 5065, - [SMALL_STATE(91)] = 5109, - [SMALL_STATE(92)] = 5159, - [SMALL_STATE(93)] = 5207, - [SMALL_STATE(94)] = 5263, - [SMALL_STATE(95)] = 5321, - [SMALL_STATE(96)] = 5381, - [SMALL_STATE(97)] = 5443, - [SMALL_STATE(98)] = 5503, - [SMALL_STATE(99)] = 5563, - [SMALL_STATE(100)] = 5621, - [SMALL_STATE(101)] = 5681, - [SMALL_STATE(102)] = 5739, - [SMALL_STATE(103)] = 5799, - [SMALL_STATE(104)] = 5856, - [SMALL_STATE(105)] = 5913, - [SMALL_STATE(106)] = 5970, - [SMALL_STATE(107)] = 6027, - [SMALL_STATE(108)] = 6084, - [SMALL_STATE(109)] = 6112, - [SMALL_STATE(110)] = 6140, - [SMALL_STATE(111)] = 6168, - [SMALL_STATE(112)] = 6196, - [SMALL_STATE(113)] = 6224, - [SMALL_STATE(114)] = 6250, - [SMALL_STATE(115)] = 6275, - [SMALL_STATE(116)] = 6300, - [SMALL_STATE(117)] = 6323, - [SMALL_STATE(118)] = 6346, - [SMALL_STATE(119)] = 6369, - [SMALL_STATE(120)] = 6392, - [SMALL_STATE(121)] = 6411, - [SMALL_STATE(122)] = 6429, - [SMALL_STATE(123)] = 6446, - [SMALL_STATE(124)] = 6463, - [SMALL_STATE(125)] = 6473, - [SMALL_STATE(126)] = 6483, - [SMALL_STATE(127)] = 6495, - [SMALL_STATE(128)] = 6509, - [SMALL_STATE(129)] = 6523, - [SMALL_STATE(130)] = 6537, - [SMALL_STATE(131)] = 6548, - [SMALL_STATE(132)] = 6559, - [SMALL_STATE(133)] = 6568, - [SMALL_STATE(134)] = 6579, - [SMALL_STATE(135)] = 6590, - [SMALL_STATE(136)] = 6599, - [SMALL_STATE(137)] = 6610, - [SMALL_STATE(138)] = 6621, - [SMALL_STATE(139)] = 6632, - [SMALL_STATE(140)] = 6643, - [SMALL_STATE(141)] = 6651, - [SMALL_STATE(142)] = 6659, - [SMALL_STATE(143)] = 6667, - [SMALL_STATE(144)] = 6675, - [SMALL_STATE(145)] = 6683, - [SMALL_STATE(146)] = 6691, - [SMALL_STATE(147)] = 6699, - [SMALL_STATE(148)] = 6707, - [SMALL_STATE(149)] = 6715, - [SMALL_STATE(150)] = 6723, - [SMALL_STATE(151)] = 6731, - [SMALL_STATE(152)] = 6739, - [SMALL_STATE(153)] = 6747, - [SMALL_STATE(154)] = 6755, - [SMALL_STATE(155)] = 6763, - [SMALL_STATE(156)] = 6771, - [SMALL_STATE(157)] = 6779, + [SMALL_STATE(11)] = 97, + [SMALL_STATE(12)] = 194, + [SMALL_STATE(13)] = 291, + [SMALL_STATE(14)] = 345, + [SMALL_STATE(15)] = 442, + [SMALL_STATE(16)] = 493, + [SMALL_STATE(17)] = 544, + [SMALL_STATE(18)] = 597, + [SMALL_STATE(19)] = 648, + [SMALL_STATE(20)] = 699, + [SMALL_STATE(21)] = 749, + [SMALL_STATE(22)] = 799, + [SMALL_STATE(23)] = 849, + [SMALL_STATE(24)] = 899, + [SMALL_STATE(25)] = 949, + [SMALL_STATE(26)] = 999, + [SMALL_STATE(27)] = 1049, + [SMALL_STATE(28)] = 1099, + [SMALL_STATE(29)] = 1149, + [SMALL_STATE(30)] = 1199, + [SMALL_STATE(31)] = 1249, + [SMALL_STATE(32)] = 1299, + [SMALL_STATE(33)] = 1349, + [SMALL_STATE(34)] = 1399, + [SMALL_STATE(35)] = 1449, + [SMALL_STATE(36)] = 1499, + [SMALL_STATE(37)] = 1549, + [SMALL_STATE(38)] = 1599, + [SMALL_STATE(39)] = 1651, + [SMALL_STATE(40)] = 1701, + [SMALL_STATE(41)] = 1753, + [SMALL_STATE(42)] = 1802, + [SMALL_STATE(43)] = 1884, + [SMALL_STATE(44)] = 1966, + [SMALL_STATE(45)] = 2048, + [SMALL_STATE(46)] = 2124, + [SMALL_STATE(47)] = 2176, + [SMALL_STATE(48)] = 2224, + [SMALL_STATE(49)] = 2278, + [SMALL_STATE(50)] = 2334, + [SMALL_STATE(51)] = 2394, + [SMALL_STATE(52)] = 2452, + [SMALL_STATE(53)] = 2514, + [SMALL_STATE(54)] = 2580, + [SMALL_STATE(55)] = 2648, + [SMALL_STATE(56)] = 2718, + [SMALL_STATE(57)] = 2792, + [SMALL_STATE(58)] = 2868, + [SMALL_STATE(59)] = 2944, + [SMALL_STATE(60)] = 3020, + [SMALL_STATE(61)] = 3096, + [SMALL_STATE(62)] = 3172, + [SMALL_STATE(63)] = 3248, + [SMALL_STATE(64)] = 3324, + [SMALL_STATE(65)] = 3400, + [SMALL_STATE(66)] = 3476, + [SMALL_STATE(67)] = 3552, + [SMALL_STATE(68)] = 3628, + [SMALL_STATE(69)] = 3704, + [SMALL_STATE(70)] = 3780, + [SMALL_STATE(71)] = 3856, + [SMALL_STATE(72)] = 3932, + [SMALL_STATE(73)] = 4008, + [SMALL_STATE(74)] = 4084, + [SMALL_STATE(75)] = 4160, + [SMALL_STATE(76)] = 4236, + [SMALL_STATE(77)] = 4312, + [SMALL_STATE(78)] = 4388, + [SMALL_STATE(79)] = 4464, + [SMALL_STATE(80)] = 4540, + [SMALL_STATE(81)] = 4616, + [SMALL_STATE(82)] = 4692, + [SMALL_STATE(83)] = 4768, + [SMALL_STATE(84)] = 4844, + [SMALL_STATE(85)] = 4920, + [SMALL_STATE(86)] = 4996, + [SMALL_STATE(87)] = 5072, + [SMALL_STATE(88)] = 5148, + [SMALL_STATE(89)] = 5224, + [SMALL_STATE(90)] = 5267, + [SMALL_STATE(91)] = 5310, + [SMALL_STATE(92)] = 5352, + [SMALL_STATE(93)] = 5399, + [SMALL_STATE(94)] = 5461, + [SMALL_STATE(95)] = 5519, + [SMALL_STATE(96)] = 5561, + [SMALL_STATE(97)] = 5599, + [SMALL_STATE(98)] = 5643, + [SMALL_STATE(99)] = 5689, + [SMALL_STATE(100)] = 5739, + [SMALL_STATE(101)] = 5787, + [SMALL_STATE(102)] = 5839, + [SMALL_STATE(103)] = 5895, + [SMALL_STATE(104)] = 5955, + [SMALL_STATE(105)] = 6015, + [SMALL_STATE(106)] = 6073, + [SMALL_STATE(107)] = 6133, + [SMALL_STATE(108)] = 6193, + [SMALL_STATE(109)] = 6251, + [SMALL_STATE(110)] = 6311, + [SMALL_STATE(111)] = 6368, + [SMALL_STATE(112)] = 6425, + [SMALL_STATE(113)] = 6482, + [SMALL_STATE(114)] = 6539, + [SMALL_STATE(115)] = 6596, + [SMALL_STATE(116)] = 6622, + [SMALL_STATE(117)] = 6648, + [SMALL_STATE(118)] = 6674, + [SMALL_STATE(119)] = 6700, + [SMALL_STATE(120)] = 6726, + [SMALL_STATE(121)] = 6751, + [SMALL_STATE(122)] = 6775, + [SMALL_STATE(123)] = 6798, + [SMALL_STATE(124)] = 6821, + [SMALL_STATE(125)] = 6844, + [SMALL_STATE(126)] = 6867, + [SMALL_STATE(127)] = 6890, + [SMALL_STATE(128)] = 6911, + [SMALL_STATE(129)] = 6929, + [SMALL_STATE(130)] = 6943, + [SMALL_STATE(131)] = 6955, + [SMALL_STATE(132)] = 6969, + [SMALL_STATE(133)] = 6979, + [SMALL_STATE(134)] = 6993, + [SMALL_STATE(135)] = 7007, + [SMALL_STATE(136)] = 7021, + [SMALL_STATE(137)] = 7031, + [SMALL_STATE(138)] = 7041, + [SMALL_STATE(139)] = 7052, + [SMALL_STATE(140)] = 7063, + [SMALL_STATE(141)] = 7074, + [SMALL_STATE(142)] = 7085, + [SMALL_STATE(143)] = 7096, + [SMALL_STATE(144)] = 7107, + [SMALL_STATE(145)] = 7118, + [SMALL_STATE(146)] = 7129, + [SMALL_STATE(147)] = 7140, + [SMALL_STATE(148)] = 7151, + [SMALL_STATE(149)] = 7162, + [SMALL_STATE(150)] = 7171, + [SMALL_STATE(151)] = 7182, + [SMALL_STATE(152)] = 7190, + [SMALL_STATE(153)] = 7198, + [SMALL_STATE(154)] = 7206, + [SMALL_STATE(155)] = 7214, + [SMALL_STATE(156)] = 7222, + [SMALL_STATE(157)] = 7230, + [SMALL_STATE(158)] = 7238, + [SMALL_STATE(159)] = 7246, + [SMALL_STATE(160)] = 7254, + [SMALL_STATE(161)] = 7262, + [SMALL_STATE(162)] = 7270, + [SMALL_STATE(163)] = 7278, + [SMALL_STATE(164)] = 7286, + [SMALL_STATE(165)] = 7294, + [SMALL_STATE(166)] = 7302, + [SMALL_STATE(167)] = 7310, + [SMALL_STATE(168)] = 7318, }; 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 = false}}, SHIFT(2), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), - [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), - [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82), - [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), - [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), - [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [27] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_local_path, 1, 0, 0), - [29] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_local_path, 1, 0, 0), - [31] = {.entry = {.count = 1, .reusable = false}}, SHIFT(142), - [33] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_path, 1, 0, 0), - [35] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_path, 1, 0, 0), - [37] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_local_path, 2, 0, 0), - [39] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_local_path, 2, 0, 0), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), + [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(24), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), + [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [27] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_local_path, 2, 0, 0), + [29] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_local_path, 2, 0, 0), + [31] = {.entry = {.count = 1, .reusable = false}}, SHIFT(162), + [33] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_local_path, 1, 0, 0), + [35] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_local_path, 1, 0, 0), + [37] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_path, 1, 0, 0), + [39] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_path, 1, 0, 0), [41] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_path, 2, 0, 0), [43] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_path, 2, 0, 0), [45] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), [47] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), - [49] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), SHIFT_REPEAT(142), + [49] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), SHIFT_REPEAT(162), [52] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), [54] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), [56] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), [58] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [60] = {.entry = {.count = 1, .reusable = false}}, SHIFT(115), - [62] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), - [64] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 0), - [66] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 0), - [68] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), - [70] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 2, 0, 0), - [72] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 2, 0, 0), - [74] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 0), - [76] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 0), - [78] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 0), - [80] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 0), - [82] = {.entry = {.count = 1, .reusable = false}}, SHIFT(130), - [84] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 3, 0, 0), - [86] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 3, 0, 0), - [88] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 0), - [90] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 0), - [92] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 0), - [94] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 0), - [96] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_void, 2, 0, 0), - [98] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_void, 2, 0, 0), - [100] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [102] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [104] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 0), - [106] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 0), - [108] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [112] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 0), - [114] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 0), - [116] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [118] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [120] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [122] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [126] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [128] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 0), - [130] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 0), - [132] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 2), - [134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 2), - [136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 0), - [138] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 0), - [140] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 0), - [142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 0), - [144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [148] = {.entry = {.count = 1, .reusable = false}}, SHIFT(156), - [150] = {.entry = {.count = 1, .reusable = false}}, SHIFT(148), - [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [154] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(2), - [157] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [160] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [163] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(34), - [166] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [169] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(18), - [172] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(63), - [175] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(82), - [178] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(3), - [181] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(49), - [184] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(31), - [187] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), - [189] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(156), - [192] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(148), - [195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 0), - [197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 0), - [199] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [201] = {.entry = {.count = 1, .reusable = false}}, SHIFT(85), - [203] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [205] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), - [207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [211] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), - [213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [217] = {.entry = {.count = 1, .reusable = false}}, SHIFT(68), - [219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [221] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), - [223] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), - [225] = {.entry = {.count = 1, .reusable = false}}, SHIFT(69), - [227] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), - [229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), - [231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [235] = {.entry = {.count = 1, .reusable = false}}, SHIFT(73), - [237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), - [241] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 0), - [243] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 0), - [245] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [247] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [249] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(2), - [252] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [255] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [258] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(34), - [261] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [264] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(18), - [267] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(62), - [270] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(82), - [273] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), - [276] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(49), - [279] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [281] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(31), - [284] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), - [286] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), - [288] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), - [290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), - [292] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), - [294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), - [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), - [298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), - [300] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), - [302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(79), - [304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), - [306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), - [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), - [312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), - [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), - [318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), - [320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 0), - [322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 3), - [324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), - [328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), - [332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assign, 4, 0, 0), - [336] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assign, 4, 0, 0), - [338] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for, 5, 0, 0), - [340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for, 5, 0, 0), - [342] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let, 5, 0, 0), - [344] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let, 5, 0, 0), - [346] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closed_expression, 2, 0, 0), - [348] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closed_expression, 2, 0, 0), - [350] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [352] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_operator, 1, 0, 0), - [354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_operator, 1, 0, 0), - [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), - [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), - [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), - [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [364] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(133), - [367] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [369] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(154), - [372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), - [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [378] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__declaration_type, 2, 0, 0), - [380] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 1), - [382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), - [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), - [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [388] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(155), - [391] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), - [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), - [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), - [399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), - [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), - [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), - [411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [417] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), - [421] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [425] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), - [427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), - [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [431] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), - [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), - [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), - [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [60] = {.entry = {.count = 1, .reusable = false}}, SHIFT(122), + [62] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [64] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [66] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [68] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [70] = {.entry = {.count = 1, .reusable = false}}, SHIFT(151), + [72] = {.entry = {.count = 1, .reusable = false}}, SHIFT(155), + [74] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [76] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(3), + [79] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(30), + [82] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(30), + [85] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(14), + [88] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(38), + [91] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(24), + [94] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(66), + [97] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(57), + [100] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(4), + [103] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(42), + [106] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(10), + [109] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), + [111] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(151), + [114] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(155), + [117] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [119] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [121] = {.entry = {.count = 1, .reusable = false}}, SHIFT(148), + [123] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), + [125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 2, 0, 0), + [131] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 2, 0, 0), + [133] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 3, 0, 0), + [135] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 3, 0, 0), + [137] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 10), + [139] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 10), + [141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(138), + [143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [145] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [147] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 11), + [149] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 11), + [151] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 8), + [153] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 8), + [155] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [157] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), + [161] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), + [163] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), + [165] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), + [167] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [169] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [173] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [175] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 7), + [177] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 7), + [179] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [181] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [183] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), + [185] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), + [187] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [189] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [191] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_void, 2, 0, 0), + [193] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_void, 2, 0, 0), + [195] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 12), + [197] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 12), + [199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 16), + [201] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 16), + [203] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 17), + [205] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 17), + [207] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [209] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [211] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 19), + [213] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 19), + [215] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 20), + [217] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 20), + [219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_integer, 1, 0, 0), + [221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), + [223] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), + [225] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [227] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [235] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), + [238] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(30), + [241] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(30), + [244] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(14), + [247] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(89), + [250] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(24), + [253] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(60), + [256] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(57), + [259] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(4), + [262] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(42), + [265] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [267] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), + [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), + [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), + [274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [278] = {.entry = {.count = 1, .reusable = false}}, SHIFT(69), + [280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [282] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [284] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), + [286] = {.entry = {.count = 1, .reusable = false}}, SHIFT(72), + [288] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [290] = {.entry = {.count = 1, .reusable = false}}, SHIFT(74), + [292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [298] = {.entry = {.count = 1, .reusable = false}}, SHIFT(77), + [300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [304] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 22), + [306] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 22), + [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), + [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), + [314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), + [318] = {.entry = {.count = 1, .reusable = false}}, SHIFT(80), + [320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [324] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82), + [326] = {.entry = {.count = 1, .reusable = false}}, SHIFT(83), + [328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [330] = {.entry = {.count = 1, .reusable = false}}, SHIFT(85), + [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [338] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88), + [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [342] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 15), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [348] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 18), + [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [358] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closed_expression, 2, 0, 0), + [360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closed_expression, 2, 0, 0), + [362] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assign, 4, 0, 21), + [364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assign, 4, 0, 21), + [366] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let, 5, 0, 23), + [368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let, 5, 0, 23), + [370] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for, 5, 0, 24), + [372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for, 5, 0, 24), + [374] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [376] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_operator, 1, 0, 3), + [378] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_operator, 1, 0, 3), + [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [388] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(140), + [391] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [393] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(165), + [396] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), + [398] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 6), + [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), + [402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), + [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), + [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [412] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(157), + [415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__declaration_type, 2, 0, 13), + [417] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_type, 1, 0, 14), + [419] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), + [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [437] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [461] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), + [463] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), + [465] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), + [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [469] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [473] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/src/tree_sitter/alloc.h b/crates/tree-sitter-command-cad-model/src/tree_sitter/alloc.h index 1f4466d..1abdd12 100644 --- a/crates/tree-sitter-command-cad-model/src/tree_sitter/alloc.h +++ b/crates/tree-sitter-command-cad-model/src/tree_sitter/alloc.h @@ -12,10 +12,10 @@ extern "C" { // Allow clients to override allocation functions #ifdef TREE_SITTER_REUSE_ALLOCATOR -extern void *(*ts_current_malloc)(size_t); -extern void *(*ts_current_calloc)(size_t, size_t); -extern void *(*ts_current_realloc)(void *, size_t); -extern void (*ts_current_free)(void *); +extern void *(*ts_current_malloc)(size_t size); +extern void *(*ts_current_calloc)(size_t count, size_t size); +extern void *(*ts_current_realloc)(void *ptr, size_t size); +extern void (*ts_current_free)(void *ptr); #ifndef ts_malloc #define ts_malloc ts_current_malloc diff --git a/crates/tree-sitter-command-cad-model/src/tree_sitter/parser.h b/crates/tree-sitter-command-cad-model/src/tree_sitter/parser.h index 17f0e94..799f599 100644 --- a/crates/tree-sitter-command-cad-model/src/tree_sitter/parser.h +++ b/crates/tree-sitter-command-cad-model/src/tree_sitter/parser.h @@ -47,6 +47,7 @@ struct TSLexer { uint32_t (*get_column)(TSLexer *); bool (*is_at_included_range_start)(const TSLexer *); bool (*eof)(const TSLexer *); + void (*log)(const TSLexer *, const char *, ...); }; typedef enum { diff --git a/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt b/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt index ddb6157..536243c 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt @@ -18,7 +18,7 @@ Assign (identifier))) (assignment_operator) (expression - (signed_integer))))))) + (signed_integer (integer)))))))) ================== Let @@ -38,4 +38,4 @@ Let (identifier) (assignment_operator) (expression - (signed_integer))))))) \ No newline at end of file + (signed_integer (integer)))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index c255658..793cf67 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -92,4 +92,4 @@ With a statement (identifier))) (assignment_operator) (expression - (signed_integer))))))))) \ No newline at end of file + (signed_integer (integer)))))))))) \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt b/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt index 1e9b8fd..638372f 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt @@ -26,7 +26,7 @@ Closed statement (statement (closed_expression (expression - (signed_integer))))))) + (signed_integer (integer)))))))) ================== Open statement @@ -43,7 +43,7 @@ Open statement (procedural_block (statement (expression - (signed_integer)))))) + (signed_integer (integer))))))) ================== Two open statements @@ -60,10 +60,10 @@ Two open statements (procedural_block (statement (expression - (signed_integer))) + (signed_integer (integer)))) (statement (expression - (signed_integer)))))) + (signed_integer (integer))))))) ================== If statement @@ -92,4 +92,4 @@ If statement (procedural_block)))) (statement (expression - (signed_integer)))))) \ No newline at end of file + (signed_integer (integer))))))) \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt b/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt index fdb1283..cbc1f70 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt @@ -34,6 +34,18 @@ Escaped string (expression (string))) +================== +Unsigned Integer +================== + +123u + +--- + +(source_file + (expression + (unsigned_integer (integer)))) + ================== Signed Integer Positive ================== @@ -44,13 +56,13 @@ Signed Integer Positive (source_file (expression - (signed_integer))) + (signed_integer (integer)))) ================== Signed Integer Positive with plus ================== -+123i ++123 i --- @@ -58,7 +70,7 @@ Signed Integer Positive with plus (expression (unary_expression (expression - (signed_integer))))) + (signed_integer (integer)))))) ================== Signed Integer Positive with minus @@ -72,7 +84,7 @@ Signed Integer Positive with minus (expression (unary_expression (expression - (signed_integer))))) + (signed_integer (integer)))))) ================== Scalar no decimal no unit diff --git a/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt b/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt index af628c0..fa978ed 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt @@ -20,7 +20,7 @@ One One, ================== -( one: std.Constraint ) +( one: std.Constraint, ) --- @@ -238,4 +238,4 @@ Default, (expression (path (local_path - (identifier)))))))) \ No newline at end of file + (identifier)))))))) diff --git a/crates/units/Cargo.toml b/crates/units/Cargo.toml new file mode 100644 index 0000000..72ab85b --- /dev/null +++ b/crates/units/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "units" +version = "0.1.0" +edition = "2021" + +[dependencies] +common_data_types = { path = "../common_data_types" } + +[build-dependencies] +csv = "1.3.0" +serde = { version = "1.0", features = [ "derive" ] } +uneval = "0.2.4" +common_data_types = { path = "../common_data_types" } \ No newline at end of file diff --git a/crates/units/build.rs b/crates/units/build.rs new file mode 100644 index 0000000..bad0d80 --- /dev/null +++ b/crates/units/build.rs @@ -0,0 +1,606 @@ +use std::{collections::HashMap, fs::File}; + +use serde::Deserialize; + +use common_data_types::{ + BaseUnits, ConversionFactor, ConversionFactorDatabase, Dimension, DimensionNameDatabase, + RatioTypeHint, UnitDescription, UnitList, +}; + +#[derive(Debug, Deserialize)] +pub struct Row { + pub dimension_name: String, + pub length: i8, + pub mass: i8, + pub time: i8, + pub electric_current: i8, + pub thermodynamic_temperature: i8, + pub amount_of_substance: i8, + pub luminous_intensity: i8, + pub angle_kind: bool, + pub constituent_concentration_kind: bool, + pub information_kind: bool, + pub solid_angle_kind: bool, + pub temperature_kind: bool, + pub pixel_kind: bool, + pub singular: String, + pub plural: String, + pub abbreviation: String, + pub keyboard_friendly_abbreviation: String, + pub conversion_coefficient: f64, + pub conversion_constant: f64, +} + +macro_rules! get_base_unit { + ($unit_names:ident, $unit_info:ident, $name:literal) => {{ + let dimension = $unit_info.get($name).expect("Did not find unit info"); + let name = $unit_names + .get($name) + .expect("Did not find unit name") + .clone(); + (*dimension, name.into()) + }}; +} + +fn main() { + println!("cargo:rerun-if-changed=src/units.csv"); + + let mut source_data = csv::ReaderBuilder::new() + .flexible(false) + .has_headers(true) + .from_path("src/units.csv") + .unwrap(); + + let mut conversion_factors = ConversionFactorDatabase::new(); + let mut dimension_names = DimensionNameDatabase::new(); + let mut unit_list: HashMap> = HashMap::new(); + + let mut dimension_base_units: HashMap = HashMap::new(); + let mut unit_names_to_abbreviations: HashMap = HashMap::new(); + + for result in source_data.deserialize() { + let row: Row = result.unwrap(); + + // Enforce keyboard friendly abbreviations only using ascii characters. + if !row.keyboard_friendly_abbreviation.is_ascii() { + panic!( + "Abbreviation `{}` contains non-ascii characters", + row.keyboard_friendly_abbreviation + ); + } + + unit_names_to_abbreviations.insert( + row.singular.clone(), + row.keyboard_friendly_abbreviation.clone(), + ); + + let mut ratio_type_hint = RatioTypeHint::default(); + + ratio_type_hint.set_is_angle(row.angle_kind); + ratio_type_hint.set_is_constituent_concentration(row.constituent_concentration_kind); + ratio_type_hint.set_is_information(row.information_kind); + ratio_type_hint.set_is_solid_angle(row.solid_angle_kind); + ratio_type_hint.set_is_temperature(row.temperature_kind); + ratio_type_hint.set_is_pixel(row.pixel_kind); + + let dimension = Dimension { + length: row.length, + mass: row.mass, + time: row.time, + electric_current: row.electric_current, + thermodynamic_temprature: row.thermodynamic_temperature, + amount_of_substance: row.amount_of_substance, + luminous_intensity: row.luminous_intensity, + ratio_type_hint, + }; + + dimension_base_units.insert(row.singular.clone(), dimension); + + // Record conversion factor. + let already_exists = conversion_factors + .insert( + row.keyboard_friendly_abbreviation.clone().into(), + ConversionFactor { + constant: row.conversion_constant, + coefficient: row.conversion_coefficient, + dimension, + }, + ) + .is_some(); + + if already_exists { + panic!( + "Multiple units use the abbreviation `{}`", + row.keyboard_friendly_abbreviation + ); + } + + // Self-deduplicating list of names for the dimensions. + dimension_names.insert(dimension, row.dimension_name.clone().into()); + + unit_list + .entry(row.dimension_name) + .or_default() + .push(UnitDescription { + abbreviation: row.abbreviation, + keyboard_friendly_abbreviation: row.keyboard_friendly_abbreviation, + name: row.singular, + plural_name: row.plural, + }); + } + + let base_units: BaseUnits = BaseUnits::from([ + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "meter second" + ), // abasement + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "meter per second squared" + ), // acceleration + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "joule second" + ), // action + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "mole"), // amount_of_substance + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "radian"), // angle + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "radian second" + ), // angular_abasement + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "radian per second squared" + ), // angular_acceleration + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "radian per second cubed" + ), // angular_jerk + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "radian per second" + ), // angular_velocity + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "square meter" + ), // area + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "state per square meter joule" + ), // areal_density_of_states + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "kilogram per square meter" + ), // areal_mass_density + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "per square meter" + ), // areal_number_density + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "per square meter second" + ), // areal_number_rate + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "joule per kilogram" + ), // available_energy + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "farad"), // capacitance + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "katal"), // catalytic_activity + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "katal per cubic meter" + ), // catalytic_activity_concentration + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "radian per meter" + ), // curvature + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "square meter per second" + ), // diffusion_coefficient + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "pascal second" + ), // dynamic_viscosity + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "coulomb"), // electric_charge + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "coulomb per square meter" + ), // electric_charge_areal_density + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "coulomb per meter" + ), // electric_charge_linear_density + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "coulomb per cubic meter" + ), // electric_charge_volumetric_density + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "ampere"), // electric_current + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "ampere per square meter" + ), // electric_current_density + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "coulomb meter" + ), // electric_dipole_moment + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "coulomb per square meter" + ), // electric_displacement_field + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "volt per meter" + ), // electric_field + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "volt meter" + ), // electric_flux + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "farad per meter" + ), // electric_permittivity + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "volt"), // electric_potential + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "coulomb square meter" + ), // electric_quadrupole_moment + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "siemens"), // electrical_conductance + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "siemens per meter" + ), // electrical_conductivity + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "square meter per volt second" + ), // electrical_mobility + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "ohm"), // electrical_resistance + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "ohm meter" + ), // electrical_resistivity + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "joule"), // energy + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "newton"), // force + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "hertz"), // frequency + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "hertz per second" + ), // frequency_drift + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "joule per kelvin" + ), // heat_capacity + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "watt per square meter" + ), // heat_flux_density + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "watt per square meter kelvin" + ), // heat_transfer + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "henry"), // inductance + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "byte"), // information + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "byte per second" + ), // information_rate + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "second per meter" + ), // inverse_velocity + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "meter per second cubed" + ), // jerk + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "meter"), // length + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "state per meter joule" + ), // linear_density_of_states + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "kilogram per meter" + ), // linear_mass_density + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "per meter" + ), // linear_number_density + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "per meter second" + ), // linear_number_rate + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "watt per meter" + ), // linear_power_density + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "candela per square meter" + ), // luminance + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "candela"), // luminous_intensity + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "ampere per meter" + ), // magnetic_field_strength + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "weber"), // magnetic_flux + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "tesla"), // magnetic_flux_density + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "ampere square meter" + ), // magnetic_moment + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "henry per meter" + ), // magnetic_permeability + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "kilogram" + ), // mass + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "kilogram per cubic meter" + ), // mass_concentration + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "kilogram per cubic meter" + ), // mass_density + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "kilogram per square meter second" + ), // mass_flux + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "kilogram per joule" + ), // mass_per_energy + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "kilogram per second" + ), // mass_rate + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "mole per kilogram" + ), // molality + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "mole per cubic meter" + ), // molar_concentration + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "joule per mole" + ), // molar_energy + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "mole per square meter second" + ), // molar_flux + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "joule per kelvin mole" + ), // molar_heat_capacity + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "kilogram per mole" + ), // molar_mass + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "becquerel per mole" + ), // molar_radioactivity + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "cubic meter per mole" + ), // molar_volume + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "kilogram square meter" + ), // moment_of_inertia + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "kilogram meter per second" + ), // momentum + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "watt"), // power + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "watt per second" + ), // power_rate + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "pascal"), // pressure + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "joule per square meter" + ), // radiant_exposure + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "becquerel" + ), // radioactivity + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "number"), // ratio + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "reciprocal meter" + ), // reciprocal_length + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "steradian" + ), // solid_angle + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "square meter per kilogram" + ), // specific_area + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "joule per kilogram kelvin" + ), // specific_heat_capacity + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "watt per kilogram" + ), // specific_power + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "becquerel per kilogram" + ), // specific_radioactivity + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "cubic meter per kilogram" + ), // specific_volume + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "ampere per meter" + ), // surface_electric_current_density + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "per kelvin" + ), // temperature_coefficient + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "kelvin per meter" + ), // temperature_gradient + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "kelvin"), // temperature_interval + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "watt per kelvin" + ), // thermal_conductance + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "watt per meter kelvin" + ), // thermal_conductivity + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "kelvin"), // thermodynamic_temperature + get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "second"), // time + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "newton meter" + ), // torque + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "meter per second" + ), // velocity + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "cubic meter" + ), // volume + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "cubic meter per second" + ), // volume_rate + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "state per cubic meter joule" + ), // volumetric_density_of_states + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "joule per cubic meter kelvin" + ), // volumetric_heat_capacity + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "per cubic meter" + ), // volumetric_number_density + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "per cubic meter second" + ), // volumetric_number_rate + get_base_unit!( + unit_names_to_abbreviations, + dimension_base_units, + "watt per cubic meter" + ), // volumetric_power_density + ]); + + let mut unit_list: UnitList = unit_list.into_iter().collect(); + unit_list.sort_by(|(key_a, _list_a), (key_b, _list_b)| key_a.cmp(key_b)); + + // Conversion factors has some constants in it, but there's no way to represent those constants in a CSV file, so we'll just have to + // insert this warning suppression at the start of the generated file. + let conversion_factor_file_path: std::path::PathBuf = [ + std::env::var("OUT_DIR").unwrap(), + "conversion_factors.rs".into(), + ] + .iter() + .collect(); + let conversion_factor_file = File::create(conversion_factor_file_path).unwrap(); + uneval::write(conversion_factors, conversion_factor_file).unwrap(); + + uneval::to_out_dir(dimension_names, "dimension_names.rs").unwrap(); + uneval::to_out_dir(unit_list, "unit_list.rs").unwrap(); + uneval::to_out_dir(base_units, "base_units.rs").unwrap(); +} diff --git a/crates/units/src/lib.rs b/crates/units/src/lib.rs new file mode 100644 index 0000000..ed4bacf --- /dev/null +++ b/crates/units/src/lib.rs @@ -0,0 +1,35 @@ +use common_data_types::{ + ConversionFactor, ConversionFactorDatabase, Dimension, DimensionNameDatabase, RatioTypeHint, + UnitDescription, UnitList, BaseUnits +}; +use std::{borrow::Borrow, sync::OnceLock}; + +pub fn get_conversion_factor(name: &str) -> Option<&'static ConversionFactor> { + static CONVERSION_FACTORS: OnceLock = OnceLock::new(); + let database = CONVERSION_FACTORS + .get_or_init(|| include!(concat!(env!("OUT_DIR"), "/conversion_factors.rs"))); + + database.get(name) +} + +pub fn get_dimension_name(dimension: impl AsRef) -> Option<&'static str> { + static DIMENSIONS: OnceLock = OnceLock::new(); + let database = + DIMENSIONS.get_or_init(|| include!(concat!(env!("OUT_DIR"), "/dimension_names.rs"))); + + database.get(dimension.as_ref()).map(|cow| cow.borrow()) +} + +pub fn get_unit_list() -> &'static Vec<(String, Vec)> { + static UNIT_LIST: OnceLock = OnceLock::new(); + let list = UNIT_LIST.get_or_init(|| include!(concat!(env!("OUT_DIR"), "/unit_list.rs"))); + + list +} + +pub fn get_base_unit_name(dimension: impl AsRef) -> Option<&'static str> { + static BASE_UNITS: OnceLock = OnceLock::new(); + let database = BASE_UNITS.get_or_init(|| include!(concat!(env!("OUT_DIR"), "/base_units.rs"))); + + database.get(dimension.as_ref()).map(|cow| cow.borrow()) +} diff --git a/crates/units/src/units.csv b/crates/units/src/units.csv new file mode 100644 index 0000000..df68a1a --- /dev/null +++ b/crates/units/src/units.csv @@ -0,0 +1,2387 @@ +dimension_name,length,mass,time,electric_current,thermodynamic_temperature,amount_of_substance,luminous_intensity,angle_kind,constituent_concentration_kind,information_kind,solid_angle_kind,temperature_kind,pixel_kind,singular,plural,abbreviation,keyboard_friendly_abbreviation,conversion_coefficient,conversion_constant +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,attometer second,attometer seconds,am · s,am*s,1E-18,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,centimeter second,centimeter seconds,cm · s,cm*s,0.01,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,decameter second,decameter seconds,dam · s,dam*s,10,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,decimeter second,decimeter seconds,dm · s,dm*s,0.1,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,exameter second,exameter seconds,Em · s,Em*s,1E+018,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,femtometer second,femtometer seconds,fm · s,fm*s,1E-15,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,foot second,foot seconds,ft · s,ft*s,0.3048,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,gigameter second,gigameter seconds,Gm · s,Gm*s,1000000000,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,hectometer second,hectometer seconds,hm · s,hm*s,100,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,inch second,inch seconds,in · s,in*s,0.0254,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,kilometer hour,kilometer hours,km · h,km*h,3600000,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,kilometer second,kilometer seconds,km · s,km*s,1000,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,megameter second,megameter seconds,Mm · s,Mm*s,1000000,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,meter second,meter seconds,m · s,m*s,1,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,micrometer second,micrometer seconds,µm · s,um*s,0.000001,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,millimeter second,millimeter seconds,mm · s,mm*s,0.001,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,nanometer second,nanometer seconds,nm · s,nm*s,0.000000001,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,petameter second,petameter seconds,Pm · s,Pm*s,1000000000000000,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,picometer second,picometer seconds,pm · s,pm*s,1E-12,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,terameter second,terameter seconds,Tm · s,Tm*s,1000000000000,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,yoctometer second,yoctometer seconds,ym · s,ym*s,1E-24,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,yottameter second,yottameter seconds,Ym · s,Ym*s,1E+024,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,zeptometer second,zeptometer seconds,zm · s,zm*s,1E-21,0 +Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,zettameter second,zettameter seconds,Zm · s,Zm*s,1E+021,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,attometer per second squared,attometers per second squared,am/s²,am/s^2,1E-18,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,centimeter per second squared,centimeters per second squared,cm/s²,cm/s^2,0.01,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,decameter per second squared,decameters per second squared,dam/s²,dam/s^2,10,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,decimeter per second squared,decimeters per second squared,dm/s²,dm/s^2,0.1,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,exameter per second squared,exameters per second squared,Em/s²,Em/s^2,1E+018,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,femtometer per second squared,femtometers per second squared,fm/s²,fm/s^2,1E-15,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,foot per second squared,feet per second squared,ft/s²,ft/s^2,0.3048,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,galileo,galileos,Gal,Gal,0.01,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,gigameter per second squared,gigameters per second squared,Gm/s²,Gm/s^2,1000000000,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,hectometer per second squared,hectometers per second squared,hm/s²,hm/s^2,100,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,inch per second squared,inches per second squared,in/s²,in/s^2,0.0254,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,kilometer per second squared,kilometers per second squared,km/s²,km/s^2,1000,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,megameter per second squared,megameters per second squared,Mm/s²,Mm/s^2,1000000,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,meter per second squared,meters per second squared,m/s²,m/s^2,1,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,micrometer per second squared,micrometers per second squared,µm/s²,um/s^2,0.000001,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,millimeter per minute squared,millimeters per minute squared,mm/min²,mm/min^2,2.77777777777778E-07,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,millimeter per second squared,millimeters per second squared,mm/s²,mm/s^2,0.001,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,nanometer per second squared,nanometers per second squared,nm/s²,nm/s^2,0.000000001,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,petameter per second squared,petameters per second squared,Pm/s²,Pm/s^2,1000000000000000,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,picometer per second squared,picometers per second squared,pm/s²,pm/s^2,1E-12,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,standard acceleration of gravity,standard accelerations of gravity,g₀,g\0,9.80665,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,terameter per second squared,terameters per second squared,Tm/s²,Tm/s^2,1000000000000,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,yoctometer per second squared,yoctometers per second squared,ym/s²,ym/s^2,1E-24,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,yottameter per second squared,yottameters per second squared,Ym/s²,Ym/s^2,1E+024,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,zeptometer per second squared,zeptometers per second squared,zm/s²,zm/s^2,1E-21,0 +Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,zettameter per second squared,zettameters per second squared,Zm/s²,Zm/s^2,1E+021,0 +Action,2,1,-1,0,0,0,0,false,false,false,false,false,false,atomic unit of action,atomic units of action,ħ,n<-,1.054571817E-34,0 +Action,2,1,-1,0,0,0,0,false,false,false,false,false,false,electronvolt second,electronvolt seconds,eV · s,eV*s,1.602176634E-19,0 +Action,2,1,-1,0,0,0,0,false,false,false,false,false,false,erg second,erg seconds,erg · s,erg*s,0.0000001,0 +Action,2,1,-1,0,0,0,0,false,false,false,false,false,false,joule second,joule seconds,J · s,J*s,1,0 +Action,2,1,-1,0,0,0,0,false,false,false,false,false,false,planck constant,planck constants,h,h (planck),6.62607015E-34,0 +Action,2,1,-1,0,0,0,0,false,false,false,false,false,false,reduced planck constant,reduced planck constants,ħ,n<- planc,1.054571817E-34,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,attomole,attomoles,amol,amol,1E-18,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,centimole,centimoles,cmol,cmol,0.01,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,decamole,decamoles,damol,damol,10,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,decimole,decimoles,dmol,dmol,0.1,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,examole,examoles,Emol,Emol,1E+018,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,femtomole,femtomoles,fmol,fmol,1E-15,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,gigamole,gigamoles,Gmol,Gmol,1000000000,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,hectomole,hectomoles,hmol,hmol,100,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,kilomole,kilomoles,kmol,kmol,1000,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,megamole,megamoles,Mmol,Mmol,1000000,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,micromole,micromoles,µmol,umol,0.000001,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,millimole,millimoles,mmol,mmol,0.001,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,mole,moles,mol,mol,1,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,nanomole,nanomoles,nmol,nmol,0.000000001,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,particle,particles,particle,particle,1.66053906717385E-24,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,petamole,petamoles,Pmol,Pmol,1000000000000000,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,picomole,picomoles,pmol,pmol,1E-12,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,standard cubic centimeter,standard cubic centimeters,cm³(STP),cm^3(STP),4.40316145139823E-05,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,standard cubic foot,standard cubic feet,scf,scf,1.24683662345026,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,standard cubic meter,standard cubic meters,m³(STP),m^3(STP),44.0316145139823,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,standard liter,standard liters,L(STP),L(STP),0.0440316145139823,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,teramole,teramoles,Tmol,Tmol,1000000000000,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,yoctomole,yoctomoles,ymol,ymol,1E-24,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,yottamole,yottamoles,Ymol,Ymol,1E+024,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,zeptomole,zeptomoles,zmol,zmol,1E-21,0 +AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,zettamole,zettamoles,Zmol,Zmol,1E+021,0 +Angle,0,0,0,0,0,0,0,true,false,false,false,false,false,degree,degrees,°,deg,0.0174532925199433,0 +Angle,0,0,0,0,0,0,0,true,false,false,false,false,false,gon,gons,gon,gon,0.015707963267949,0 +Angle,0,0,0,0,0,0,0,true,false,false,false,false,false,mil,mils,mil,mil,0.0009817477,0 +Angle,0,0,0,0,0,0,0,true,false,false,false,false,false,minute,minutes,′,angle_minute,0.000290888208665722,0 +Angle,0,0,0,0,0,0,0,true,false,false,false,false,false,radian,radians,rad,rad,1,0 +Angle,0,0,0,0,0,0,0,true,false,false,false,false,false,revolution,revolutions,r,r,6.28318530717959,0 +Angle,0,0,0,0,0,0,0,true,false,false,false,false,false,second,seconds,″,angle_second,4.84813681109536E-06,0 +AngularAbsement,0,0,1,0,0,0,0,true,false,false,false,false,false,degree second,degree seconds,° · s,deg*s,0.0174532925199433,0 +AngularAbsement,0,0,1,0,0,0,0,true,false,false,false,false,false,radian second,radian seconds,rad · s,rad*s,1,0 +AngularAcceleration,0,0,-2,0,0,0,0,true,false,false,false,false,false,degree per second squared,degrees per second squared,°/s²,deg/s^2,0.0174532925199433,0 +AngularAcceleration,0,0,-2,0,0,0,0,true,false,false,false,false,false,radian per second squared,radians per second squared,rad/s²,rad/s^2,1,0 +AngularJerk,0,0,-3,0,0,0,0,true,false,false,false,false,false,degree per second cubed,degrees per second cubed,°/s³,deg/s^3,0.0174532925199433,0 +AngularJerk,0,0,-3,0,0,0,0,true,false,false,false,false,false,radian per second cubed,radians per second cubed,rad/s³,rad/s^3,1,0 +AngularVelocity,0,0,-1,0,0,0,0,true,false,false,false,false,false,degree per second,degrees per second,°/s,deg/s,0.0174532925199433,0 +AngularVelocity,0,0,-1,0,0,0,0,true,false,false,false,false,false,radian per second,radians per second,rad/s,rad/s,1,0 +AngularVelocity,0,0,-1,0,0,0,0,true,false,false,false,false,false,revolution per hour,revolutions per hour,rph,rph,0.00174532925199433,0 +AngularVelocity,0,0,-1,0,0,0,0,true,false,false,false,false,false,revolution per minute,revolutions per minute,rpm,rpm,0.10471975511966,0 +AngularVelocity,0,0,-1,0,0,0,0,true,false,false,false,false,false,revolution per second,revolutions per second,rps,rps,6.28318530717959,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,acre,acres,ac,ac,4046.873,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,are,ares,a,a,100,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,barn,barns,b,b,1E-28,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,circular mil,circular mils,cmil,cmil,5.067075E-10,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,hectare,hectares,ha,ha,10000,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square attometer,square attometers,am²,am^2,1E-36,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square centimeter,square centimeters,cm²,cm^2,0.0001,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square decameter,square decameters,dam²,dam^2,100,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square decimeter,square decimeters,dm²,dm^2,0.01,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square exameter,square exameters,Em²,Em^2,1E+036,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square femtometer,square femtometers,fm²,fm^2,1E-30,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square foot,square feet,ft²,ft^2,0.09290304,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square gigameter,square gigameters,Gm²,Gm^2,1E+018,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square hectometer,square hectometers,hm²,hm^2,10000,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square inch,square inches,in²,in^2,0.00064516,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square kilometer,square kilometers,km²,km^2,1000000,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square megameter,square megameters,Mm²,Mm^2,1000000000000,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square meter,square meters,m²,m^2,1,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square micrometer,square micrometers,µm²,um^2,1E-12,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square mile,square miles,mi²,mi^2,2589988,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square millimeter,square millimeters,mm²,mm^2,0.000001,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square nanometer,square nanometers,nm²,nm^2,1E-18,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square petameter,square petameters,Pm²,Pm^2,1E+030,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square picometer,square picometers,pm²,pm^2,1E-24,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square terameter,square terameters,Tm²,Tm^2,1E+024,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square yard,square yards,yd²,yd^2,0.8361274,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square yoctometer,square yoctometers,ym²,ym^2,1E-48,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square yottameter,square yottameters,Ym²,Ym^2,1E+048,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square zeptometer,square zeptometers,zm²,zm^2,1E-42,0 +Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square zettameter,square zettameters,Zm²,Zm^2,1E+042,0 +ArealDensityOfStates,-4,-1,2,0,0,0,0,false,true,false,false,false,false,state per square centimeter electronvolt,states per square centimeter electronvolt,1/(cm² · eV),1/(cm^2*eV),6.24150907446076E+022,0 +ArealDensityOfStates,-4,-1,2,0,0,0,0,false,true,false,false,false,false,state per square centimeter joule,states per square centimeter joule,1/(cm² · J),1/(cm^2*J),10000,0 +ArealDensityOfStates,-4,-1,2,0,0,0,0,false,true,false,false,false,false,state per square meter joule,states per square meter joule,1/(m² · J),1/(m^2*J),1,0 +ArealMassDensity,-2,1,0,0,-1,0,0,false,false,false,false,false,false,gram per square centimeter,grams per square centimeter,g/cm²,g/cm^2,10,0 +ArealMassDensity,-2,1,0,0,-1,0,0,false,false,false,false,false,false,gram per square meter,grams per square meter,g/m²,g/m^2,0.001,0 +ArealMassDensity,-2,1,0,0,-1,0,0,false,false,false,false,false,false,kilogram per square meter,kilograms per square meter,kg/m²,kg/m^2,1,0 +ArealMassDensity,-2,1,0,0,-1,0,0,false,false,false,false,false,false,ounce per square foot,ounces per square foot,oz/ft²,oz/ft^2,0.305151693636721,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per acre,per acre,ac⁻²,Ac^-2,0.000247104369225325,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per are,per are,a⁻²,A^-2,0.01,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per barn,per barn,b⁻²,b^-2,1E+028,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per circular mil,per circular mil,cmil⁻²,cmil^-2,1973525159.97888,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per hectare,per hectare,ha⁻²,ha^-2,0.0001,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square centimeter,per square centimeter,cm⁻²,cm^-2,10000,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square decimeter,per square decimeter,dm⁻²,dm^-2,100,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square foot,per square foot,ft⁻²,ft^-2,10.7639104167097,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square inch,per square inch,in⁻²,in^-2,1550.0031000062,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square kilometer,per square kilometer,km⁻²,km^-2,0.000001,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square meter,per square meter,m⁻²,m^-2,1,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square micrometer,per square micrometer,µm⁻²,um^-2,1000000000000,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square mile,per square mile,mi⁻²,mi^-2,3.86102174990772E-07,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square millimeter,per square millimeter,mm⁻²,mm^-2,1000000,0 +ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square yard,per square yard,yd⁻²,yd^-2,1.1959899890854,0 +ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per acre second,per acre second,ac⁻¹ · s⁻¹,ac^-1*s^-1,0.000247104369225325,0 +ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per are second,per are second,a⁻¹ · s⁻¹,a^-1*s^-1,0.01,0 +ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per barn second,per barn second,b⁻¹ · s⁻¹,b^-1*s^-1,1E+028,0 +ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per circular mil second,per circular mil second,cmil⁻¹ · s⁻¹,cmil^-1*s^-1,1973525159.97888,0 +ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per hectare second,per hectare second,ha⁻¹ · s⁻¹,ha^-1*s^-1,0.0001,0 +ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per square centimeter second,per square centimeter second,cm⁻² · s⁻¹,cm^-2*s^-1,10000,0 +ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per square foot second,per square foot second,ft⁻² · s⁻¹,ft^-2*s^-1,10.7639104167097,0 +ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per square inch second,per square inch second,in⁻² · s⁻¹,in^-2*s^-1,1550.0031000062,0 +ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per square meter second,per square meter second,m⁻² · s⁻¹,m^-2*s^-1,1,0 +ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per square mile second,per square mile second,mi⁻² · s⁻¹,mi^-2*s^-1,3.86102174990772E-07,0 +ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per square yard second,per square yard second,yd⁻² · s⁻¹,yd^-2*s^-1,1.1959899890854,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,attojoule per kilogram,attojoules per kilogram,aJ/kg,aJ/kg,1E-18,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,British thermal unit (IT) per pound,British thermal units (IT) per pound,Btu (IT)/lb,Btu (IT)/lb,2326.0001710787,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,British thermal unit per pound,British thermal units per pound,Btu/lb,Btu/lb,2324.44370761062,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,calorie (IT) per gram,calories (IT) per gram,cal (IT)/lb,Cal (IT)/lb,4186.8,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,calorie per gram,calories per gram,cal/lb,cal/lb,4184,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,centijoule per kilogram,centijoules per kilogram,cJ/kg,cJ/kg,0.01,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,decajoule per kilogram,decajoules per kilogram,daJ/kg,daJ/kg,10,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,decijoule per kilogram,decijoules per kilogram,dJ/kg,dJ/kg,0.1,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,exajoule per kilogram,exajoules per kilogram,EJ/kg,EJ/kg,1E+018,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,femtojoule per kilogram,femtojoules per kilogram,fJ/kg,fJ/kg,1E-15,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,gigajoule per kilogram,gigajoules per kilogram,GJ/kg,GJ/kg,1000000000,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,hectojoule per kilogram,hectojoules per kilogram,hJ/kg,hJ/kg,100,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per attogram,joules per attogram,J/ag,J/ag,1E+021,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per exagram,joules per exagram,J/Eg,J/Eg,1E-15,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per femtogram,joules per femtogram,J/fg,J/fg,1E+018,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per gigagram,joules per gigagram,J/Gg,J/Gg,0.000001,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per gram,joules per gram,J/g,J/g,1000,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per kilogram,joules per kilogram,J/kg,J/kg,1,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per megagram,joules per megagram,J/Mg,J/Mg,0.001,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per microgram,joules per microgram,J/µg,J/ug,1000000000,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per milligram,joules per milligram,J/mg,J/mg,1000000,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per nanogram,joules per nanogram,J/ng,J/ng,1000000000000,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per petagram,joules per petagram,J/Pg,J/Pg,1E-12,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per picogram,joules per picogram,J/pg,J/pg,1000000000000000,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per teragram,joules per teragram,J/Tg,J/Tg,0.000000001,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per yottagram,joules per yottagram,J/Yg,J/Yg,1E-21,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per zeptogram,joules per zeptogram,J/zg,J/zg,1E+024,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per zettagram,joules per zettagram,J/Zg,J/Zg,1E-18,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,kilojoule per kilogram,kilojoules per kilogram,kJ/kg,kJ/kg,1000,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,megajoule per kilogram,megajoules per kilogram,MJ/kg,MJ/kg,1000000,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,microjoule per kilogram,microjoules per kilogram,µJ/kg,uJ/kg,0.000001,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,millijoule per kilogram,millijoules per kilogram,mJ/kg,mJ/kg,0.001,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,nanojoule per kilogram,nanojoules per kilogram,nJ/kg,nJ/kg,0.000000001,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,petajoule per kilogram,petajoules per kilogram,PJ/kg,PJ/kg,1000000000000000,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,picojoule per kilogram,picojoules per kilogram,pJ/kg,pJ/kg,1E-12,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,terajoule per kilogram,terajoules per kilogram,TJ/kg,TJ/kg,1000000000000,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,yoctojoule per kilogram,yoctojoules per kilogram,yJ/kg,yJ/kg,1E-24,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,yottajoule per kilogram,yottajoules per kilogram,YJ/kg,YJ/kg,1E+024,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,zeptojoule per kilogram,zeptojoules per kilogram,zJ/kg,zJ/kg,1E-21,0 +AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,zettajoule per kilogram,zettajoules per kilogram,ZJ/kg,ZJ/kg,1E+021,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,abfarad,abfarads,abF,abF,1000000000,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,attofarad,attofarads,aF,aF,1E-18,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,centifarad,centifarads,cF,cF,0.01,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,decafarad,decafarads,daF,daF,10,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,decifarad,decifarads,dF,dF,0.1,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,exafarad,exafarads,EF,EF,1E+018,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,farad,farads,F,F,1,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,femtofarad,femtofarads,fF,fF,1E-15,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,gigafarad,gigafarads,GF,GF,1000000000,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,hectofarad,hectofarads,hF,hF,100,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,kilofarad,kilofarads,kF,kF,1000,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,megafarad,megafarads,MF,MF,1000000,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,microfarad,microfarads,µF,uF,0.000001,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,millifarad,millifarads,mF,mF,0.001,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,nanofarad,nanofarads,nF,nF,0.000000001,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,petafarad,petafarads,PF,PF,1000000000000000,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,picofarad,picofarads,pF,pF,1E-12,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,statfarad,statfarads,statF,statF,1.11265E-12,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,terafarad,terafarads,TF,TF,1000000000000,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,yoctofarad,yoctofarads,yF,yF,1E-24,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,yottafarad,yottafarads,YF,YF,1E+024,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,zeptofarad,zeptofarads,zF,zF,1E-21,0 +Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,zettafarad,zettafarads,ZF,ZF,1E+021,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,atto enzyme unit,atto enzyme units,aU,aU,1.66666666666667E-26,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,attokatal,attokatals,akat,akat,1E-18,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,centi enzyme unit,centi enzyme units,cU,cU,1.66666666666667E-10,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,centikatal,centikatals,ckat,ckat,0.01,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,deca enzyme unit,deca enzyme units,daU,daU,1.66666666666667E-07,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,decakatal,decakatals,dakat,dakat,10,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,deci enzyme unit,deci enzyme units,dU,dU,1.66666666666667E-09,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,decikatal,decikatals,dkat,dkat,0.1,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,enzyme unit,enzyme units,U,U,1.66666666666667E-08,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,exa enzyme unit,exa enzyme units,EU,EU,16666666666.6667,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,exakatal,exakatals,Ekat,Ekat,1E+018,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,femto enzyme unit,femto enzyme units,fU,fU,1.66666666666667E-23,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,femtokatal,femtokatals,fkat,fkat,1E-15,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,giga enzyme unit,giga enzyme units,GU,GU,16.6666666666667,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,gigakatal,gigakatals,Gkat,Gkat,1000000000,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,hecto enzyme unit,hecto enzyme units,hU,hU,1.66666666666667E-06,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,hectokatal,hectokatals,hkat,hkat,100,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,katal,katals,kat,kat,1,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,kilo enzyme unit,kilo enzyme units,kU,kU,1.66666666666667E-05,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,kilokatal,kilokatals,kkat,kkat,1000,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,mega enzyme unit,mega enzyme units,MU,MU,0.0166666666666667,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,megakatal,megakatals,Mkat,Mkat,1000000,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,micro enzyme unit,micro enzyme units,μU,uU,1.66666666666667E-14,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,microkatal,microkatals,µkat,ukat,0.000001,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,milli enzyme unit,milli enzyme units,mU,mU,1.66666666666667E-11,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,millikatal,millikatals,mkat,mkat,0.001,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,mole per second,moles per second,mol/s,mol/s,1,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,nano enzyme unit,nano enzyme units,nU,nU,1.66666666666667E-17,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,nanokatal,nanokatals,nkat,nkat,0.000000001,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,particle per second,particles per second,particle/s,particle/s,1.66053906717385E-24,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,peta enzyme unit,peta enzyme units,PU,PU,16666666.6666667,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,petakatal,petakatals,Pkat,Pkat,1000000000000000,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,pico enzyme unit,pico enzyme units,pU,pU,1.66666666666667E-20,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,picokatal,picokatals,pkat,pkat,1E-12,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,standard centimeter per minute,standard centimeters per minute,sccm,sccm,7.33860241899706E-07,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,standard cubic foot per hour,standard cubic feet per hour,scfm,scfm,0.0207806103908377,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,standard cubic meter per minute,standard cubic meters per minute,m³(STP)/min,m^3(STP)/min,0.733860241899705,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,standard liter per minute,standard liters per minute,slm,slm,0.000733860241899706,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,tera enzyme unit,tera enzyme units,TU,TU,16666.6666666667,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,terakatal,terakatals,Tkat,Tkat,1000000000000,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,yocto enzyme unit,yocto enzyme units,yU,yU,1.66666666666667E-32,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,yoctokatal,yoctokatals,ykat,ykat,1E-24,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,yotta enzyme unit,yotta enzyme units,YU,YU,1.66666666666667E+016,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,yottakatal,yottakatals,Ykat,Ykat,1E+024,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,zepto enzyme unit,zepto enzyme units,zU,zU,1.66666666666667E-29,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,zeptokatal,zeptokatals,zkat,zkat,1E-21,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,zetta enzyme unit,zetta enzyme units,ZU,ZU,16666666666666.7,0 +CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,zettakatal,zettakatals,Zkat,Zkat,1E+021,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,atto enzyme unit per cubic meter,atto enzyme units per cubic meter,aU/m³,aU/m^3,1.66666666666667E-26,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,attokatal per cubic meter,attokatals per cubic meter,akat/m³,akat/m^3,1E-18,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,centi enzyme unit per cubic meter,centi enzyme units per cubic meter,cU/m³,cU/m^3,1.66666666666667E-10,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,centikatal per cubic meter,centikatals per cubic meter,ckat/m³,ckat/m^3,0.01,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,deca enzyme unit per cubic meter,deca enzyme units per cubic meter,daU/m³,daU/m^3,1.66666666666667E-07,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,decakatal per cubic meter,decakatals per cubic meter,dakat/m³,dakat/m^3,10,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,deci enzyme unit per cubic meter,deci enzyme units per cubic meter,dU/m³,dU/m^3,1.66666666666667E-09,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,decikatal per cubic meter,decikatals per cubic meter,dkat/m³,dkat/m^3,0.1,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,enzyme unit per cubic decimeter,enzyme units per cubic decimeter,U/dm³,U/dm^3,1.66666666666667E-05,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,enzyme unit per cubic meter,enzyme units per cubic meter,U/m³,U/m^3,1.66666666666667E-08,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,enzyme unit per deciliter,enzyme units per deciliter,U/dL,U/dL,0.000166666666666667,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,enzyme unit per liter,enzyme units per liter,U/L,U/L,1.66666666666667E-05,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,enzyme unit per milliliter,enzyme units per milliliter,U/mL,U/mL,0.0166666666666667,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,exa enzyme unit per cubic meter,exa enzyme units per cubic meter,EU/m³,EU/m^3,16666666666.6667,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,exakatal per cubic meter,exakatals per cubic meter,Ekat/m³,Ekat/m^3,1E+018,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femto enzyme unit per cubic decimeter,femto enzyme units per cubic decimeter,fU/dm³,fU/dm^3,1.66666666666667E-20,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femto enzyme unit per cubic meter,femto enzyme units per cubic meter,fU/m³,fU/m^3,1.66666666666667E-23,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femto enzyme unit per deciliter,femto enzyme units per deciliter,fU/dL,fU/dL,1.66666666666667E-19,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femto enzyme unit per liter,femto enzyme units per liter,fU/L,fU/L,1.66666666666667E-20,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femto enzyme unit per milliliter,femto enzyme units per milliliter,fU/mL,fU/mL,1.66666666666667E-17,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femtokatal per cubic decimeter,femtokatals per cubic decimeter,fkat/dm³,fkat/dm^3,1E-12,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femtokatal per cubic meter,femtokatals per cubic meter,fkat/m³,fkat/m^3,1E-15,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femtokatal per deciliter,femtokatals per deciliter,fkat/dL,fkat/dL,1E-11,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femtokatal per liter,femtokatals per liter,fkat/L,fkat/L,1E-12,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femtokatal per milliliter,femtokatals per milliliter,fkat/mL,fkat/mL,0.000000001,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,giga enzyme unit per cubic meter,giga enzyme units per cubic meter,GU/m³,GU/m^3,16.6666666666667,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,gigakatal per cubic meter,gigakatals per cubic meter,Gkat/m³,Gkat/m^3,1000000000,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,hecto enzyme unit per cubic meter,hecto enzyme units per cubic meter,hU/m³,hU/m^3,1.66666666666667E-06,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,hectokatal per cubic meter,hectokatals per cubic meter,hkat/m³,hkat/m^3,100,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,katal per cubic decimeter,katals per cubic decimeter,kat/dm³,kat/dm^3,1000,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,katal per cubic meter,katals per cubic meter,kat/m³,kat/m^3,1,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,katal per deciliter,katals per deciliter,kat/dL,kat/dL,10000,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,katal per liter,katals per liter,kat/L,kat/L,1000,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,katal per milliliter,katals per milliliter,kat/mL,kat/mL,1000000,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilo enzyme unit per cubic decimeter,kilo enzyme units per cubic decimeter,kU/dm³,kU/dm^3,0.0166666666666667,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilo enzyme unit per cubic meter,kilo enzyme units per cubic meter,kU/m³,kU/m^3,1.66666666666667E-05,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilo enzyme unit per deciliter,kilo enzyme units per deciliter,kU/dL,kU/dL,0.166666666666667,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilo enzyme unit per liter,kilo enzyme units per liter,kU/L,kU/L,0.0166666666666667,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilo enzyme unit per milliliter,kilo enzyme units per milliliter,kU/mL,kU/mL,16.6666666666667,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilokatal per cubic decimeter,kilokatals per cubic decimeter,kkat/dm³,kkat/dm^3,1000000,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilokatal per cubic meter,kilokatals per cubic meter,kkat/m³,kkat/m^3,1000,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilokatal per deciliter,kilokatals per deciliter,kkat/dL,kkat/dL,10000000,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilokatal per liter,kilokatals per liter,kkat/L,kkat/L,1000000,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilokatal per milliliter,kilokatals per milliliter,kkat/mL,kkat/mL,1000000000,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,mega enzyme unit per cubic meter,mega enzyme units per cubic meter,MU/m³,MU/m^3,0.0166666666666667,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,megakatal per cubic meter,megakatals per cubic meter,Mkat/m³,Mkat/m^3,1000000,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,micro enzyme unit per cubic decimeter,micro enzyme units per cubic decimeter,μU/dm³,uU/dm^3,1.66666666666667E-11,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,micro enzyme unit per cubic meter,micro enzyme units per cubic meter,µU/m³,uU/m^3,1.66666666666667E-14,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,micro enzyme unit per deciliter,micro enzyme units per deciliter,μU/dL,uU/dL,1.66666666666667E-10,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,micro enzyme unit per liter,micro enzyme units per liter,μU/L,uU/L,1.66666666666667E-11,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,micro enzyme unit per milliliter,micro enzyme units per milliliter,μU/mL,uU/mL,1.66666666666667E-08,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,microkatal per cubic decimeter,microkatals per cubic decimeter,μkat/dm³,ukat/dm^3,0.001,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,microkatal per cubic meter,microkatals per cubic meter,µkat/m³,ukat/m^3,0.000001,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,microkatal per deciliter,microkatals per deciliter,μkat/dL,ukat/dL,0.01,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,microkatal per liter,microkatals per liter,μkat/L,ukat/L,0.001,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,microkatal per milliliter,microkatals per milliliter,μkat/mL,ukat/mL,1,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,milli enzyme unit per cubic decimeter,milli enzyme units per cubic decimeter,mU/dm³,mU/dm^3,1.66666666666667E-08,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,milli enzyme unit per cubic meter,milli enzyme units per cubic meter,mU/m³,mU/m^3,1.66666666666667E-11,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,milli enzyme unit per deciliter,milli enzyme units per deciliter,mU/dL,mU/dL,1.66666666666667E-07,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,milli enzyme unit per liter,milli enzyme units per liter,mU/L,mU/L,1.66666666666667E-08,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,milli enzyme unit per milliliter,milli enzyme units per milliliter,mU/mL,mU/mL,1.66666666666667E-05,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,millikatal per cubic decimeter,millikatals per cubic decimeter,mkat/dm³,mkat/dm^3,1,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,millikatal per cubic meter,millikatals per cubic meter,mkat/m³,mkat/m^3,0.001,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,millikatal per deciliter,millikatals per deciliter,mkat/dL,mkat/dL,10,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,millikatal per liter,millikatals per liter,mkat/L,mkat/L,1,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,millikatal per milliliter,millikatals per milliliter,mkat/mL,mkat/mL,1000,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nano enzyme unit per cubic decimeter,nano enzyme units per cubic decimeter,nU/dm³,nU/dm^3,1.66666666666667E-14,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nano enzyme unit per cubic meter,nano enzyme units per cubic meter,nU/m³,nU/m^3,1.66666666666667E-17,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nano enzyme unit per deciliter,nano enzyme units per deciliter,nU/dL,nU/dL,1.66666666666667E-13,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nano enzyme unit per liter,nano enzyme units per liter,nU/L,nU/L,1.66666666666667E-14,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nano enzyme unit per milliliter,nano enzyme units per milliliter,nU/mL,nU/mL,1.66666666666667E-11,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nanokatal per cubic decimeter,nanokatals per cubic decimeter,nkat/dm³,nkat/dm^3,0.000001,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nanokatal per cubic meter,nanokatals per cubic meter,nkat/m³,nkat/m^3,0.000000001,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nanokatal per deciliter,nanokatals per deciliter,nkat/dL,nkat/dL,0.00001,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nanokatal per liter,nanokatals per liter,nkat/L,nkat/L,0.000001,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nanokatal per milliliter,nanokatals per milliliter,nkat/mL,nkat/mL,0.001,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,particle per second cubic meter,particles per second cubic meter,particle · s⁻¹ · m⁻³,particle*s^-1*m^-3,1.66053906717385E-24,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,peta enzyme unit per cubic meter,peta enzyme units per cubic meter,PU/m³,PU/m^3,16666666.6666667,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,petakatal per cubic meter,petakatals per cubic meter,Pkat/m³,Pkat/m^3,1000000000000000,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,pico enzyme unit per cubic decimeter,pico enzyme units per cubic decimeter,pU/dm³,pU/dm^3,1.66666666666667E-17,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,pico enzyme unit per cubic meter,pico enzyme units per cubic meter,pU/m³,pU/m^3,1.66666666666667E-20,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,pico enzyme unit per deciliter,pico enzyme units per deciliter,pU/dL,pU/dL,1.66666666666667E-16,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,pico enzyme unit per liter,pico enzyme units per liter,pU/L,pU/L,1.66666666666667E-17,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,pico enzyme unit per milliliter,pico enzyme units per milliliter,pU/mL,pU/mL,1.66666666666667E-14,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,picokatal per cubic decimeter,picokatals per cubic decimeter,pkat/dm³,pkat/dm^3,0.000000001,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,picokatal per cubic meter,picokatals per cubic meter,pkat/m³,pkat/m^3,1E-12,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,picokatal per deciliter,picokatals per deciliter,pkat/dL,pkat/dL,0.00000001,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,picokatal per liter,picokatals per liter,pkat/L,pkat/L,0.000000001,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,picokatal per milliliter,picokatals per milliliter,pkat/mL,pkat/mL,0.000001,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,tera enzyme unit per cubic meter,tera enzyme units per cubic meter,TU/m³,TU/m^3,16666.6666666667,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,terakatal per cubic meter,terakatals per cubic meter,Tkat/m³,Tkat/m^3,1000000000000,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,yocto enzyme unit per cubic meter,yocto enzyme units per cubic meter,yU/m³,yU/m^3,1.66666666666667E-32,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,yoctokatal per cubic meter,yoctokatals per cubic meter,ykat/m³,ykat/m^3,1E-24,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,yotta enzyme unit per cubic meter,yotta enzyme units per cubic meter,YU/m³,YU/m^3,1.66666666666667E+016,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,yottakatal per cubic meter,yottakatals per cubic meter,Ykat/m³,Ykat/m^3,1E+024,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,zepto enzyme unit per cubic meter,zepto enzyme units per cubic meter,zU/m³,zU/m^3,1.66666666666667E-29,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,zeptokatal per cubic meter,zeptokatals per cubic meter,zkat/m³,zkat/m^3,1E-21,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,zetta enzyme unit per cubic meter,zetta enzyme units per cubic meter,ZU/m³,ZU/m^3,16666666666666.7,0 +CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,zettakatal per cubic meter,zettakatals per cubic meter,Zkat/m³,Zkat/m^3,1E+021,0 +Curvature,-1,0,0,0,0,0,0,true,false,false,false,false,false,degree per meter,degrees per meter,°/m,deg/m,0.0174532925199433,0 +Curvature,-1,0,0,0,0,0,0,true,false,false,false,false,false,degree per millimeter,degrees per millimeter,°/mm,deg/mm,17.4532925199433,0 +Curvature,-1,0,0,0,0,0,0,true,false,false,false,false,false,radian per meter,radians per meter,rad/m,rad/m,1,0 +Curvature,-1,0,0,0,0,0,0,true,false,false,false,false,false,radian per millimeter,radians per millimeter,rad/mm,rad/mm,1000,0 +DiffusionCoefficient,2,0,-1,0,0,0,0,false,false,false,false,false,false,centistokes,centistokes,cSt,cSt,0.000001,0 +DiffusionCoefficient,2,0,-1,0,0,0,0,false,false,false,false,false,false,square centimeter per second,square centimeters per second,cm²/s,cm^2/s,0.0001,0 +DiffusionCoefficient,2,0,-1,0,0,0,0,false,false,false,false,false,false,square meter per second,square meters per second,m²/s,m^2/s,1,0 +DiffusionCoefficient,2,0,-1,0,0,0,0,false,false,false,false,false,false,square micrometer per second,square micrometers per second,µm²/s,um^2/s,1E-12,0 +DiffusionCoefficient,2,0,-1,0,0,0,0,false,false,false,false,false,false,square millimeter per second,square millimeters per second,mm²/s,mm^2/s,0.000001,0 +DiffusionCoefficient,2,0,-1,0,0,0,0,false,false,false,false,false,false,square nanometer per second,square nanometers per second,nm²/s,nm^2/s,1E-18,0 +DiffusionCoefficient,2,0,-1,0,0,0,0,false,false,false,false,false,false,Stokes,Stokes,St,St,0.0001,0 +DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,centipoise,centipoises,cP,cP,0.001,0 +DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,gram per centimeter second,grams per centimeter second,g/(cm · s),g/(cm*s),0.1,0 +DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,micropascal second,micropascal seconds,µPa · s,uPa*s,0.000001,0 +DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,millipascal second,millipascal seconds,mPa · s,mPa*s,0.001,0 +DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,pascal second,pascal seconds,Pa · s,Pa*s,1,0 +DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,poise,poises,P,P,0.1,0 +DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,pound-force second per square foot,pound-force seconds per square foot,lbf · s/ft²,lbf*s/ft^2,47.8802631216374,0 +DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,pound-force second per square inch,pound-force seconds per square inch,lbf · s/in²,lbf*s/in^2,6894.75788951578,0 +DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,pound per foot hour,pounds per foot hour,lb/(ft · h),lb/(ft*h),0.000413378900554097,0 +DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,pound per foot second,pounds per foot second,lb/(ft · s),lb/(ft*s),1.48816404199475,0 +DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,reyn,reyns,reyn,reyn,6894.75788951578,0 +DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,slug per foot second,slugs per foot second,slug/(ft · s),slug/(ft*s),47.880249343832,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,abcoulomb,abcoulombs,abC,abC,10,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,ampere hour,ampere hours,A · h,A*h,3600,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,atomic unit of charge,atomic units of charge,a.u. of charge,a.u. of charge,1.602176634E-19,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,attocoulomb,attocoulombs,aC,aC,1E-18,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,centicoulomb,centicoulombs,cC,cC,0.01,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,coulomb,coulombs,C,C,1,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,decaampere hour,decaampere hours,daA · h,daA*h,36000,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,decacoulomb,decacoulombs,daC,daC,10,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,decicoulomb,decicoulombs,dC,dC,0.1,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,elementary charge,elementary charges,e,e,1.602176634E-19,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,exacoulomb,exacoulombs,EC,EC,1E+018,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,faraday,faradays,F,Faraday,96485.31,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,femtocoulomb,femtocoulombs,fC,fC,1E-15,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,franklin,franklins,Fr,Fr,3.335641E-10,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,gigaampere hour,gigaampere hours,GA · h,GA*h,3600000000000,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,gigacoulomb,gigacoulombs,GC,GC,1000000000,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,hectoampere hour,hectoampere hours,hA · h,hA*h,360000,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,hectocoulomb,hectocoulombs,hC,hC,100,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,kiloampere hour,kiloampere hours,kA · h,kA*h,3600000,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,kilocoulomb,kilocoulombs,kC,kC,1000,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,megaampere hour,megaampere hours,MA · h,MA*h,3600000000,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,megacoulomb,megacoulombs,MC,MC,1000000,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,microampere hour,microampere hours,µA · h,uA*h,0.0036,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,microcoulomb,microcoulombs,µC,uC,0.000001,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,milliampere hour,milliampere hours,mA · h,mA*h,3.6,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,millcoulomb,millcoulombs,mC,mC,0.001,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,nanocoulomb,nanocoulombs,nC,nC,0.000000001,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,petaampere hour,petaampere hours,PA · h,PA*h,3.6E+018,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,petacoulomb,petacoulombs,PC,PC,1000000000000000,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,picocoulomb,picocoulombs,pC,pC,1E-12,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,statcoulomb,statcoulombs,statC,statC,3.335641E-10,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,teraampere hour,teraampere hours,TA · h,TA*h,3600000000000000,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,teracoulomb,teracoulombs,TC,TC,1000000000000,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,yoctocoulomb,yoctocoulombs,yC,yC,1E-24,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,yottacoulomb,yottacoulombs,YC,YC,1E+024,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,zeptocoulomb,zeptocoulombs,zC,zC,1E-21,0 +ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,zettacoulomb,zettacoulombs,ZC,ZC,1E+021,0 +ElectricChargeArealDensity,-2,0,1,1,0,0,0,false,true,false,false,false,false,coulomb per square centimeter,coulombs per square centimeter,C/cm²,C/cm^2,10000,0 +ElectricChargeArealDensity,-2,0,1,1,0,0,0,false,true,false,false,false,false,coulomb per square meter,coulombs per square meter,C/m²,C/m^2,1,0 +ElectricChargeLinearDensity,-1,0,1,1,0,0,0,false,true,false,false,false,false,coulomb per centimeter,coulombs per centimeter,C/cm,C/cm,100,0 +ElectricChargeLinearDensity,-1,0,1,1,0,0,0,false,true,false,false,false,false,coulomb per meter,coulombs per meter,C/m,C/m,1,0 +ElectricChargeVolumetricDensity,-3,0,1,1,0,0,0,false,true,false,false,false,false,coulomb per cubic centimeter,coulombs per cubic centimeter,C/cm³,C/cm^3,1000000,0 +ElectricChargeVolumetricDensity,-3,0,1,1,0,0,0,false,true,false,false,false,false,coulomb per cubic meter,coulombs per cubic meter,C/m³,C/m^3,1,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,abampere,abamperes,abA,abA,10,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,ampere,amperes,A,A,1,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,atomic unit of charge per second,atomic units of charge per second,a.u. of charge/s,a.u. of charge/s,1.602176634E-19,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,attoampere,attoamperes,aA,aA,1E-18,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,centiampere,centiamperes,cA,cA,0.01,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,decaampere,decaamperes,daA,daA,10,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,deciampere,deciamperes,dA,dA,0.1,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,elementary charge per second,elementary charges per second,e/s,e/s,1.602176634E-19,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,exaampere,exaamperes,EA,EA,1E+018,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,femtoampere,femtoamperes,fA,fA,1E-15,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,gigaampere,gigaamperes,GA,GA,1000000000,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,gilbert,gilberts,Gi,Gi,0.7957747,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,hectoampere,hectoamperes,hA,hA,100,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,kiloampere,kiloamperes,kA,kA,1000,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,megaampere,megaamperes,MA,MA,1000000,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,microampere,microamperes,µA,uA,0.000001,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,millampere,millamperes,mA,mA,0.001,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,nanoampere,nanoamperes,nA,nA,0.000000001,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,petaampere,petaamperes,PA,PA,1000000000000000,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,picoampere,picoamperes,pA,pA,1E-12,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,statampere,statamperes,statA,statA,3.335641E-10,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,teraampere,teraamperes,TA,TA,1000000000000,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,yoctoampere,yoctoamperes,yA,yA,1E-24,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,yottaampere,yottaamperes,YA,YA,1E+024,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,zeptoampere,zeptoamperes,zA,zA,1E-21,0 +ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,zettaampere,zettaamperes,ZA,ZA,1E+021,0 +ElectricCurrentDensity,-2,0,0,1,0,0,0,false,false,false,false,false,false,ampere per square centimeter,amperes per square centimeter,A/cm²,A/cm^2,10000,0 +ElectricCurrentDensity,-2,0,0,1,0,0,0,false,false,false,false,false,false,ampere per square meter,amperes per square meter,A/m²,A/m^2,1,0 +ElectricCurrentDensity,-2,0,0,1,0,0,0,false,false,false,false,false,false,ampere per square millimeter,amperes per square millimeter,A/mm²,A/mm^2,1000000,0 +ElectricDipoleMoment,1,0,1,1,0,0,0,false,false,false,false,false,false,atomic unit of charge centimeter,atomic unit of charge centimeters,a.u. of charge · cm,a.u. of charge*cm,1.602176634E-21,0 +ElectricDipoleMoment,1,0,1,1,0,0,0,false,false,false,false,false,false,atomic unit of electric dipole moment,atomic units of electric dipole moment,e · a₀,e*a\0,8.47835362554077E-30,0 +ElectricDipoleMoment,1,0,1,1,0,0,0,false,false,false,false,false,false,coulomb meter,coulomb meters,C · m,C*m,1,0 +ElectricDipoleMoment,1,0,1,1,0,0,0,false,false,false,false,false,false,debye,debyes,D,D,3.33564095198152E-30,0 +ElectricDipoleMoment,1,0,1,1,0,0,0,false,false,false,false,false,false,elementary charge centimeter,elementary charge centimeters,e · cm,e*cm,1.602176634E-21,0 +ElectricDisplacementField,-2,0,1,1,0,0,0,false,false,false,false,false,false,coulomb per square centimeter,coulombs per square centimeter,C/cm²,C/cm^2 (displacement),10000,0 +ElectricDisplacementField,-2,0,1,1,0,0,0,false,false,false,false,false,false,coulomb per square meter,coulombs per square meter,C/m²,C/m^2 (displacement),1,0 +ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,atomic unit of electric field,atomic units of electric field,a.u. of electric field,a.u. of electric field,514220674763.26,0 +ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,kilovolt per millimeter,kilovolts per millimeter,kV/mm,kV/mm,1000000,0 +ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,megavolt per centimeter,megavolts per centimeter,MV/cm,MV/cm,100000000,0 +ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,megavolt per meter,megavolts per meter,MV/m,MV/m,1000000,0 +ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,volt per centimeter,volts per centimeter,V/cm,V/cm,100,0 +ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,volt per meter,volts per meter,V/m,V/m,1,0 +ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,volt per micrometer,volts per micrometer,V/μm,V/um,1000000,0 +ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,volt per mil,volts per mil,V/mil,V/mil,39370.0787401575,0 +ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,volt per millimeter,volts per millimeter,V/mm,V/mm,1000,0 +ElectricFlux,3,1,-3,-1,0,0,0,false,false,false,false,false,false,volt centimeter,volt centimeters,V ⋅ cm,V*cm,0.01,0 +ElectricFlux,3,1,-3,-1,0,0,0,false,false,false,false,false,false,volt meter,volt meters,V ⋅ m,V*m,1,0 +ElectricPermittivity,-3,-1,4,2,0,0,0,false,false,false,false,false,false,farad per meter,farads per meter,F/m,F/m,1,0 +ElectricPermittivity,-3,-1,4,2,0,0,0,false,false,false,false,false,false,vacuum electric permittivity,vacuum electric permittivity,ε₀,epsilon\0,8.8541878128E-12,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,abvolt,abvolts,abV,abV,0.00000001,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,attovolt,attovolts,aV,aV,1E-18,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,centivolt,centivolts,cV,cV,0.01,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,decavolt,decavolts,daV,daV,10,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,decivolt,decivolts,dV,dV,0.1,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,exavolt,exavolts,EV,EV,1E+018,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,femtovolt,femtovolts,fV,fV,1E-15,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,gigavolt,gigavolts,GV,GV,1000000000,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,hectovolt,hectovolts,hV,hV,100,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,kilovolt,kilovolts,kV,kV,1000,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,megavolt,megavolts,MV,MV,1000000,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,microvolt,microvolts,µV,uV,0.000001,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,millivolt,millivolts,mV,mV,0.001,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,nanovolt,nanovolts,nV,nV,0.000000001,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,petavolt,petavolts,PV,PV,1000000000000000,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,picovolt,picovolts,pV,pV,1E-12,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,statvolt,statvolts,statV,statV,299.7925,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,teravolt,teravolts,TV,TV,1000000000000,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,volt,volts,V,V,1,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,yoctovolt,yoctovolts,yV,yV,1E-24,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,yottavolt,yottavolts,YV,YV,1E+024,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,zeptovolt,zeptovolts,zV,zV,1E-21,0 +ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,zettavolt,zettavolts,ZV,ZV,1E+021,0 +ElectricQuadrupoleMoment,2,0,1,1,0,0,0,false,false,false,false,false,false,atomic unit of electric quadrupole moment,atomic units of electric quadrupole moment,e · a₀²,e*a\0^2,4.486551524613E-40,0 +ElectricQuadrupoleMoment,2,0,1,1,0,0,0,false,false,false,false,false,false,coulomb square meter,coulomb square meters,C · m²,C*m^2,1,0 +ElectricQuadrupoleMoment,2,0,1,1,0,0,0,false,false,false,false,false,false,elementary charge barn,elementary charge barns,e · b,e*b,1.602176634E-47,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,abmho,abmhos,abmho,abmho,1000000000,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,abmsiemens,abmsiemens,abS,abS,1000000000,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,attosiemens,attosiemens,aS,aS,1E-18,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,centisiemens,centisiemens,cS,cS,0.01,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,decasiemens,decasiemens,daS,daS,10,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,decisiemens,decisiemens,dS,dS,0.1,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,exasiemens,exasiemens,ES,ES,1E+018,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,femtosiemens,femtosiemens,fS,fS,1E-15,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,gigasiemens,gigasiemens,GS,GS,1000000000,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,hectosiemens,hectosiemens,hS,hS,100,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,kilosiemens,kilosiemens,kS,kS,1000,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,megasiemens,megasiemens,MS,MS,1000000,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,mho,mhos,℧,mho,1,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,microsiemens,microsiemens,µS,uS,0.000001,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,millisiemens,millisiemens,mS,mS,0.001,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,nanosiemens,nanosiemens,nS,nS,0.000000001,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,petasiemens,petasiemens,PS,PS,1000000000000000,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,picosiemens,picosiemens,pS,pS,1E-12,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,siemens,siemens,S,S,1,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,statmho,statmhos,statmho,statmho,1.11265E-12,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,statsiemens,statsiemens,statS,statS,1.11265E-12,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,terasiemens,terasiemens,TS,TS,1000000000000,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,yoctosiemens,yoctosiemens,yS,yS,1E-24,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,yottasiemens,yottasiemens,YS,YS,1E+024,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,zeptosiemens,zeptosiemens,zS,zS,1E-21,0 +ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,zettasiemens,zettasiemens,ZS,ZS,1E+021,0 +ElectricalConductivity,-3,-1,3,2,0,0,0,false,false,false,false,false,false,siemens per centimeter,siemens per centimeter,S/cm,S/cm,100,0 +ElectricalConductivity,-3,-1,3,2,0,0,0,false,false,false,false,false,false,siemens per meter,siemens per meter,S/m,S/m,1,0 +ElectricalMobility,0,-1,2,1,0,0,0,false,false,false,false,false,false,square centimeter per volt second,square centimeters per volt second,cm²/(V · s),cm^2/(V*s),0.0001,0 +ElectricalMobility,0,-1,2,1,0,0,0,false,false,false,false,false,false,square meter per volt second,square meters per volt second,m²/(V · s),m^2/(V*s),1,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,abohm,abohms,abΩ,abohm,0.000000001,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,attoohm,attoohms,aΩ,aohm,1E-18,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,centiohm,centiohms,cΩ,cohm,0.01,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,decaohm,decaohms,daΩ,daohm,10,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,deciohm,deciohms,dΩ,dohm,0.1,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,exaohm,exaohms,EΩ,Eohm,1E+018,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,femtoohm,femtoohms,fΩ,fohm,1E-15,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,gigaohm,gigaohms,GΩ,Gohm,1000000000,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,hectoohm,hectoohms,hΩ,hohm,100,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,kiloohm,kiloohms,kΩ,kohm,1000,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,megaohm,megaohms,MΩ,Mohm,1000000,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,microohm,microohms,µΩ,uohm,0.000001,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,milliohm,milliohms,mΩ,mohm,0.001,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,nanoohm,nanoohms,nΩ,nohm,0.000000001,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,ohm,ohms,Ω,ohm,1,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,petaohm,petaohms,PΩ,Pohm,1000000000000000,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,picoohm,picoohms,pΩ,pohm,1E-12,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,statohm,statohms,statΩ,statohm,898755291711.548,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,teraohm,teraohms,TΩ,Tohm,1000000000000,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,yoctoohm,yoctoohms,yΩ,yohm,1E-24,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,yottaohm,yottaohms,YΩ,Yohm,1E+024,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,zeptoohm,zeptoohms,zΩ,zohm,1E-21,0 +ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,zettaohm,zettaohms,ZΩ,Zohm,1E+021,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,abohm centimeter,abohm centimeters,abΩ · cm,abohm*cm,1E-11,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,abohm meter,abohm meters,abΩ · m,abohm*m,0.000000001,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,attoohm meter,attoohm meters,aΩ · m,aohm*m,1E-18,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,centiohm meter,centiohm meters,cΩ · m,cohm*m,0.01,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,decaohm meter,decaohm meters,daΩ · m,daohm*m,10,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,deciohm meter,deciohm meters,dΩ · m,dohm*m,0.1,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,exaohm meter,exaohm meters,EΩ · m,Eohm*m,1E+018,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,femtoohm meter,femtoohm meters,fΩ · m,fohm*m,1E-15,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,gigaohm meter,gigaohm meters,GΩ · m,Gohm*m,1000000000,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,hectoohm meter,hectoohm meters,hΩ · m,hohm*m,100,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,kiloohm meter,kiloohm meters,kΩ · m,kohm*m,1000,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,megaohm meter,megaohm meters,MΩ · m,Mohm*m,1000000,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,microohm meter,microohm meters,µΩ · m,uohm*m,0.000001,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,milliohm meter,milliohm meters,mΩ · m,mohm*m,0.001,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,nanoohm meter,nanoohm meters,nΩ · m,nohm*m,0.000000001,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,ohm centimeter,ohm centimeters,Ω · cm,ohm*cm,0.01,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,ohm foot,ohm feet,Ω · ft,ohm*ft,0.3048,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,ohm inch,ohm inches,Ω · in,ohm*in,0.0254,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,ohm meter,ohm meters,Ω · m,ohm*m,1,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,ohm square millimeter per meter,ohm square millimeters per meter,Ω · mm²/m,ohm*mm^2/m,0.000001,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,ohm yard,ohm yards,Ω · yd,ohm*yd,0.9144,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,petaohm meter,petaohm meters,PΩ · m,Pohm*m,1000000000000000,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,picoohm meter,picoohm meters,pΩ · m,pohm*m,1E-12,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,statohm centimeter,statohm centimeters,statΩ · cm,statohm*cm,8987552917.11548,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,statohm meter,statohm meters,statΩ · m,statohm*m,898755291711.548,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,teraohm meter,teraohm meters,TΩ · m,Tohm*m,1000000000000,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,yoctoohm meter,yoctoohm meters,yΩ · m,yohm*m,1E-24,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,yottaohm meter,yottaohm meters,YΩ · m,Yohm*m,1E+024,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,zeptoohm meter,zeptoohm meters,zΩ · m,zohm*m,1E-21,0 +ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,zettaohm meter,zettaohm meters,ZΩ · m,Zohm*m,1E+021,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,attojoule,attojoules,aJ,aJ,1E-18,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,British thermal unit,British thermal units,Btu,Btu,1054.35,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,British thermal unit (39 °F),British thermal units (39 °F),Btu₃₉,Btu\39,1059.67,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,British thermal unit (59 °F),British thermal units (59 °F),Btu₅₉,Btu\59,1054.8,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,British thermal unit (60 °F),British thermal units (60 °F),Btu₆₀,Btu\60,1054.68,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,British thermal unit (IT),British thermal units (IT),Btu (IT),Btu (IT),1055.056,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,calorie,calories,cal,cal,4.184,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,calorie (15 °C),calories (15 °C),cal₁₅,Cal\15,4.1858,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,calorie (20 °C),calories (20 °C),cal₂₀,Cal\20,4.1819,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,calorie (IT),calories (IT),cal (IT),cal (IT),4.1868,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,Calorie (IT),Calories (IT),Cal (IT),Cal (IT),4186.8,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,Calorie,Calories,Cal,Cal,4184,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,centijoule,centijoules,cJ,cJ,0.01,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,decaelectronvolt,decaelectronvolts,daeV,daeV,1.602176634E-18,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,decajoule,decajoules,daJ,daJ,10,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,decawatt hour,decawatt hours,daW · h,daW*h,36000,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,decijoule,decijoules,dJ,dJ,0.1,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,electronvolt,electronvolts,eV,eV,1.602176634E-19,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,erg,ergs,erg,erg,0.0000001,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,exajoule,exajoules,EJ,EJ,1E+018,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,femtojoule,femtojoules,fJ,fJ,1E-15,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,foot pound-force,foot pounds-force,ft · lbf,ft*lbf,1.355818,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,foot poundal,foot poundals,ft · pdl,ft*pdl,0.04214011,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,gigaelectronvolt,gigaelectronvolts,GeV,GeV,1.602176634E-10,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,gigajoule,gigajoules,GJ,GJ,1000000000,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,gigawatt hour,gigawatt hours,GW · h,GW*h,3600000000000,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,hartree,hartrees,Eₕ,E\h,4.3597447222071E-18,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,hectoelectronvolt,hectoelectronvolts,heV,heV,1.602176634E-17,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,hectojoule,hectojoules,hJ,hJ,100,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,hectowatt hour,hectowatt hours,hW · h,hW*h,360000,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,joule,joules,J,J,1,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,kilocalorie,kilocalories,kcal,kcal,4184,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,kilocalorie (IT),kilocalories (IT),kcal (IT),Kcal (IT),4186.8,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,kiloelectronvolt,kiloelectronvolts,keV,keV,1.602176634E-16,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,kilojoule,kilojoules,kJ,kJ,1000,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,kilowatt hour,kilowatt hours,kW · h,kW*h,3600000,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,megaelectronvolt,megaelectronvolts,MeV,MeV,1.602176634E-13,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,megajoule,megajoules,MJ,MJ,1000000,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,megawatt hour,megawatt hours,MW · h,MW*h,3600000000,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,microjoule,microjoules,µJ,uJ,0.000001,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,microwatt hour,microwatt hours,µW · h,uW*h,0.0036,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,millijoule,millijoules,mJ,mJ,0.001,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,milliwatt hour,milliwatt hours,mW · h,mW*h,3.6,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,nanojoule,nanojoules,nJ,nJ,0.000000001,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,petaelectronvolt,petaelectronvolts,PeV,PeV,0.0001602176634,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,petajoule,petajoules,PJ,PJ,1000000000000000,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,petawatt hour,petawatt hours,PW · h,PW*h,3.6E+018,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,picojoule,picojoules,pJ,pJ,1E-12,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,quad,quads,10¹⁵ Btu (IT),10^15 Btu (IT),1.055056E+018,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,teraelectronvolt,teraelectronvolts,TeV,TeV,0.0000001602176634,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,terajoule,terajoules,TJ,TJ,1000000000000,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,terawatt hour,terawatt hours,TW · h,TW*h,3600000000000000,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,therm (EC),therms (EC),thm (EC),Thm (EC),105506000,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,therm,therms,thm,thm,105480400,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,ton of TNT,tons of TNT,t of TNT,T of TNT,4184000000,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,watt hour,watt hours,W · h,W*h,3600,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,watt second,watt seconds,W · s,W*s,1,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,yoctojoule,yoctojoules,yJ,yJ,1E-24,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,yottajoule,yottajoules,YJ,YJ,1E+024,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,zeptojoule,zeptojoules,zJ,zJ,1E-21,0 +Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,zettajoule,zettajoules,ZJ,ZJ,1E+021,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,attonewton,attonewtons,aN,aN,1E-18,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,centinewton,centinewtons,cN,cN,0.01,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,decanewton,decanewtons,daN,daN,10,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,decinewton,decinewtons,dN,dN,0.1,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,dyne,dynes,dyn,dyn,0.00001,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,exanewton,exanewtons,EN,EN,1E+018,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,femtonewton,femtonewtons,fN,fN,1E-15,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,giganewton,giganewtons,GN,GN,1000000000,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,hectonewton,hectonewtons,hN,hN,100,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,kilogram-force,kilograms-force,kgf,kgf,9.80665,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,kilonewton,kilonewtons,kN,kN,1000,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,kip,kips,kip,kip,4448.222,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,meganewton,meganewtons,MN,MN,1000000,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,micronewton,micronewtons,µN,uN,0.000001,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,millinewton,millinewtons,mN,mN,0.001,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,nanonewton,nanonewtons,nN,nN,0.000000001,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,newton,newtons,N,N,1,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,ounce-force,ounces-force,ozf,ozf,0.2780139,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,petanewton,petanewtons,PN,PN,1000000000000000,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,piconewton,piconewtons,pN,pN,1E-12,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,pound-force,pounds-force,lbf,lbf,4.448222,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,poundal,poundals,pdl,pdl,0.138255,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,teranewton,teranewtons,TN,TN,1000000000000,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,ton-force,tons-force,2000 lbf,2000 lbf,8896.443,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,yoctonewton,yoctonewtons,yN,yN,1E-24,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,yottanewton,yottanewtons,YN,YN,1E+024,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,zeptonewton,zeptonewtons,zN,zN,1E-21,0 +Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,zettanewton,zettanewtons,ZN,ZN,1E+021,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,attohertz,attohertz,aHz,aHz,1E-18,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,centihertz,centihertz,cHz,cHz,0.01,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,cycle per day,cycles per day,1/d,1/d,1.15740740740741E-05,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,cycle per hour,cycles per hour,1/h,1/h,0.000277777777777778,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,cycle per minute,cycles per minute,1/min,1/min,0.0166666666666667,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,cycle per shake,cycles per shake,100 MHz,100 MHz,100000000,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,cycle per year,cycles per year,1/a,1/a,3.17097919837646E-08,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,decahertz,decahertz,daHz,daHz,10,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,decihertz,decihertz,dHz,dHz,0.1,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,exahertz,exahertz,EHz,EHz,1E+018,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,femtohertz,femtohertz,fHz,fHz,1E-15,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,gigahertz,gigahertz,GHz,GHz,1000000000,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,hectohertz,hectohertz,hHz,hHz,100,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,hertz,hertz,Hz,Hz,1,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,kilohertz,kilohertz,kHz,kHz,1000,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,megahertz,megahertz,MHz,MHz,1000000,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,microhertz,microhertz,µHz,uHz,0.000001,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,millihertz,millihertz,mHz,mHz,0.001,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,nanohertz,nanohertz,nHz,nHz,0.000000001,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,petahertz,petahertz,PHz,PHz,1000000000000000,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,picohertz,picohertz,pHz,pHz,1E-12,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,terahertz,terahertz,THz,THz,1000000000000,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,yoctohertz,yoctohertz,yHz,yHz,1E-24,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,yottahertz,yottahertz,YHz,YHz,1E+024,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,zeptohertz,zeptohertz,zHz,zHz,1E-21,0 +Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,zettahertz,zettahertz,ZHz,ZHz,1E+021,0 +FrequencyDrift,0,0,-2,0,0,0,0,false,false,false,false,false,false,gigahertz per second,gigahertz per second,GHz/s,GHz/s,1000000000,0 +FrequencyDrift,0,0,-2,0,0,0,0,false,false,false,false,false,false,hertz per second,hertz per second,Hz/s,Hz/s,1,0 +FrequencyDrift,0,0,-2,0,0,0,0,false,false,false,false,false,false,kilohertz per second,kilohertz per second,kHz/s,kHz/s,1000,0 +FrequencyDrift,0,0,-2,0,0,0,0,false,false,false,false,false,false,megahertz per second,megahertz per second,MHz/s,MHz/s,1000000,0 +FrequencyDrift,0,0,-2,0,0,0,0,false,false,false,false,false,false,terahertz per second,terahertz per second,THz/s,THz/s,1000000000000,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,attogram square meter per second squared kelvin,attogram square meters per second squared kelvin,ag · m²/(s² · K),ag*m^2/(s^2*K),1E-21,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,attojoule per kelvin,attojoules per kelvin,aJ/K,aJ/K,1E-18,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,Boltzmann constant,Boltzmann constants,k,k,1.380649E-23,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per degree Fahrenheit,British thermal units (IT) per degree Fahrenheit,Btu (IT)/°F,Btu (IT)/degF,1899.1008,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,British thermal unit per degree Fahrenheit,British thermal units per degree Fahrenheit,Btu/°F,Btu/degF,1897.83,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,calorie per kelvin,calories per kelvin,cal/K,cal/K,4.184,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,centigram square meter per second squared kelvin,centigram square meters per second squared kelvin,cg · m²/(s² · K),cg*m^2/(s^2*K),0.00001,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,centijoule per kelvin,centijoules per kelvin,cJ/K,cJ/K,0.01,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,decagram square meter per second squared kelvin,decagram square meters per second squared kelvin,dag · m²/(s² · K),dag*m^2/(s^2*K),0.01,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,decajoule per kelvin,decajoules per kelvin,daJ/K,daJ/K,10,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,decigram square meter per second squared kelvin,decigram square meters per second squared kelvin,dg · m²/(s² · K),dg*m^2/(s^2*K),0.0001,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,decijoule per kelvin,decijoules per kelvin,dJ/K,dJ/K,0.1,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,exagram square meter per second squared kelvin,exagram square meters per second squared kelvin,Eg · m²/(s² · K),Eg*m^2/(s^2*K),1000000000000000,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,exajoule per kelvin,exajoules per kelvin,EJ/K,EJ/K,1E+018,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,femtogram square meter per second squared kelvin,femtogram square meters per second squared kelvin,fg · m²/(s² · K),fg*m^2/(s^2*K),1E-18,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,femtojoule per kelvin,femtojoules per kelvin,fJ/K,fJ/K,1E-15,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,gigagram square meter per second squared kelvin,gigagram square meters per second squared kelvin,Gg · m²/(s² · K),Gg*m^2/(s^2*K),1000000,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,gigajoule per kelvin,gigajoules per kelvin,GJ/K,GJ/K,1000000000,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,gram square meter per second squared kelvin,gram square meters per second squared kelvin,g · m²/(s² · K),g*m^2/(s^2*K),0.001,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,hectogram square meter per second squared kelvin,hectogram square meters per second squared kelvin,hg · m²/(s² · K),hg*m^2/(s^2*K),0.1,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,hectojoule per kelvin,hectojoules per kelvin,hJ/K,hJ/K,100,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,joule per degree celsius,joules per degree celsius,J/°C,J/degC,1,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,joule per kelvin,joules per kelvin,J/K,J/K,1,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,kilogram square meter per second squared kelvin,kilogram square meters per second squared kelvin,kg · m²/(s² · K),kg*m^2/(s^2*K),1,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,kilojoule per degree celsius,kilojoules per degree celsius,kJ/°C,kJ/degC,1000,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,kilojoule per kelvin,kilojoules per kelvin,kJ/K,kJ/K,1000,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,megagram square meter per second squared kelvin,megagram square meters per second squared kelvin,Mg · m²/(s² · K),Mg*m^2/(s^2*K),1000,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,megajoule per kelvin,megajoules per kelvin,MJ/K,MJ/K,1000000,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,microgram square meter per second squared kelvin,microgram square meters per second squared kelvin,µg · m²/(s² · K),ug*m^2/(s^2*K),0.000000001,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,microjoule per kelvin,microjoules per kelvin,µJ/K,uJ/K,0.000001,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,milligram square meter per second squared kelvin,milligram square meters per second squared kelvin,mg · m²/(s² · K),mg*m^2/(s^2*K),0.000001,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,millijoule per degree celsius,millijoules per degree celsius,mJ/°C,mJ/degC,0.001,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,millijoule per kelvin,millijoules per kelvin,mJ/K,mJ/K,0.001,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,nanogram square meter per second squared kelvin,nanogram square meters per second squared kelvin,ng · m²/(s² · K),ng*m^2/(s^2*K),1E-12,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,nanojoule per kelvin,nanojoules per kelvin,nJ/K,nJ/K,0.000000001,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,petagram square meter per second squared kelvin,petagram square meters per second squared kelvin,Pg · m²/(s² · K),Pg*m^2/(s^2*K),1000000000000,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,petajoule per kelvin,petajoules per kelvin,PJ/K,PJ/K,1000000000000000,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,picogram square meter per second squared kelvin,picogram square meters per second squared kelvin,pg · m²/(s² · K),pg*m^2/(s^2*K),1E-15,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,picojoule per kelvin,picojoules per kelvin,pJ/K,pJ/K,1E-12,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,teragram square meter per second squared kelvin,teragram square meters per second squared kelvin,Tg · m²/(s² · K),Tg*m^2/(s^2*K),1000000000,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,terajoule per kelvin,terajoules per kelvin,TJ/K,TJ/K,1000000000000,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,yoctogram square meter per second squared kelvin,yoctogram square meters per second squared kelvin,yg · m²/(s² · K),yg*m^2/(s^2*K),1E-27,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,yoctojoule per kelvin,yoctojoules per kelvin,yJ/K,yJ/K,1E-24,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,yottagram square meter per second squared kelvin,yottagram square meters per second squared kelvin,Yg · m²/(s² · K),Yg*m^2/(s^2*K),1E+021,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,yottajoule per kelvin,yottajoules per kelvin,YJ/K,YJ/K,1E+024,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,zeptogram square meter per second squared kelvin,zeptogram square meters per second squared kelvin,zg · m²/(s² · K),zg*m^2/(s^2*K),1E-24,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,zeptojoule per kelvin,zeptojoules per kelvin,zJ/K,zJ/K,1E-21,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,zettagram square meter per second squared kelvin,zettagram square meters per second squared kelvin,Zg · m²/(s² · K),Zg*m^2/(s^2*K),1E+018,0 +HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,zettajoule per kelvin,zettajoules per kelvin,ZJ/K,ZJ/K,1E+021,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,attowatt per square meter,attowatts per square meter,aW/m²,aW/m^2,1E-18,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,centiwatt per square meter,centiwatts per square meter,cW/m²,cW/m^2,0.01,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,decawatt per square meter,decawatts per square meter,daW/m²,daW/m^2,10,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,deciwatt per square meter,deciwatts per square meter,dW/m²,dW/m^2,0.1,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,exawatt per square meter,exawatts per square meter,EW/m²,EW/m^2,1E+018,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,femtowatt per square meter,femtowatts per square meter,fW/m²,fW/m^2,1E-15,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,gigawatt per square meter,gigawatts per square meter,GW/m²,GW/m^2,1000000000,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,hectowatt per square meter,hectowatts per square meter,hW/m²,hW/m^2,100,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,kilowatt per square meter,kilowatts per square meter,kW/m²,kW/m^2,1000,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,megawatt per square meter,megawatts per square meter,MW/m²,MW/m^2,1000000,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,microwatt per square meter,microwatts per square meter,µW/m²,uW/m^2,0.000001,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,milliwatt per square meter,milliwatts per square meter,mW/m²,mW/m^2,0.001,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,nanowatt per square meter,nanowatts per square meter,nW/m²,nW/m^2,0.000000001,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,petawatt per square meter,petawatts per square meter,PW/m²,PW/m^2,1000000000000000,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,picowatt per square meter,picowatts per square meter,pW/m²,pW/m^2,1E-12,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,terawatt per square meter,terawatts per square meter,TW/m²,TW/m^2,1000000000000,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,watt per square centimeter,watts per square centimeter,W/cm²,W/cm^2,10000,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,watt per square meter,watts per square meter,W/m²,W/m^2,1,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,watt per square millimeter,watts per square millimeter,W/mm²,W/mm^2,1000000,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,yoctowatt per square meter,yoctowatts per square meter,yW/m²,yW/m^2,1E-24,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,yottawatt per square meter,yottawatts per square meter,YW/m²,YW/m^2,1E+024,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,zeptowatt per square meter,zeptowatts per square meter,zW/m²,zW/m^2,1E-21,0 +HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,zettawatt per square meter,zettawatts per square meter,ZW/m²,ZW/m^2,1E+021,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,attogram per second cubed kelvin,attograms per second cubed kelvin,ag/(s³ · K),ag/(s^3*K),1E-21,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,attowatt per square meter kelvin,attowatts per square meter kelvin,aW/(m² · K),aW/(m^2*K),1E-18,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per hour square foot degree Fahrenheit,British thermal units (IT) per hour square foot degree Fahrenheit,Btu (IT)/(hr · ft² · °F),Btu (IT)/(hr*ft^2*degF),5.67826413430605,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per hour square inch degree Fahrenheit,British thermal units (IT) per hour square inch degree Fahrenheit,Btu (IT)/(hr · in² · °F),Btu (IT)/(hr*in^2*degF),817.670035340071,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per minute square foot degree Fahrenheit,British thermal units (IT) per minute square foot degree Fahrenheit,Btu (IT)/(min · ft² · °F),Btu (IT)/(min*ft^2*degF),340.695848058363,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per minute square inch degree Fahrenheit,British thermal units (IT) per minute square inch degree Fahrenheit,Btu (IT)/(min · in² · °F),Btu (IT)/(min*in^2*degF),49060.2021204043,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per second square foot degree Fahrenheit,British thermal units (IT) per second square foot degree Fahrenheit,Btu (IT)/(s · ft² · °F),Btu (IT)/(s*ft^2*degF),20441.7508835018,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per second square inch degree Fahrenheit,British thermal units (IT) per second square inch degree Fahrenheit,Btu (IT)/(s · in² · °F),Btu (IT)/(s*in^2*degF),2943612.12722425,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit per hour square foot degree Fahrenheit,British thermal units per hour square foot degree Fahrenheit,Btu/(hr · ft² · °F),Btu/(hr*ft^2*degF),5.67446447392895,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit per hour square inch degree Fahrenheit,British thermal units per hour square inch degree Fahrenheit,Btu/(hr · in² · °F),Btu/(hr*in^2*degF),817.122884245769,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit per minute square foot degree Fahrenheit,British thermal units per minute square foot degree Fahrenheit,Btu/(min · ft² · °F),Btu/(min*ft^2*degF),340.467868435737,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit per minute square inch degree Fahrenheit,British thermal units per minute square inch degree Fahrenheit,Btu/(min · in² · °F),Btu/(min*in^2*degF),49027.3730547461,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit per second square foot degree Fahrenheit,British thermal units per second square foot degree Fahrenheit,Btu/(s · ft² · °F),Btu/(s*ft^2*degF),20428.0721061442,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit per second square inch degree Fahrenheit,British thermal units per second square inch degree Fahrenheit,Btu/(s · in² · °F),Btu/(s*in^2*degF),2941642.38328477,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,centigram per second cubed kelvin,centigrams per second cubed kelvin,cg/(s³ · K),cg/(s^3*K),0.00001,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,centiwatt per square meter kelvin,centiwatts per square meter kelvin,cW/(m² · K),cW/(m^2*K),0.01,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,decagram per second cubed kelvin,decagrams per second cubed kelvin,dag/(s³ · K),dag/(s^3*K),0.01,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,decawatt per square meter kelvin,decawatts per square meter kelvin,daW/(m² · K),daW/(m^2*K),10,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,decigram per second cubed kelvin,decigrams per second cubed kelvin,dg/(s³ · K),dg/(s^3*K),0.0001,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,deciwatt per square meter kelvin,deciwatts per square meter kelvin,dW/(m² · K),dW/(m^2*K),0.1,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,exagram per second cubed kelvin,exagrams per second cubed kelvin,Eg/(s³ · K),Eg/(s^3*K),1000000000000000,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,exawatt per square meter kelvin,exawatts per square meter kelvin,EW/(m² · K),EW/(m^2*K),1E+018,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,femtogram per second cubed kelvin,femtograms per second cubed kelvin,fg/(s³ · K),fg/(s^3*K),1E-18,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,femtowatt per square meter kelvin,femtowatts per square meter kelvin,fW/(m² · K),fW/(m^2*K),1E-15,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,gigagram per second cubed kelvin,gigagrams per second cubed kelvin,Gg/(s³ · K),Gg/(s^3*K),1000000,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,gigawatt per square meter kelvin,gigawatts per square meter kelvin,GW/(m² · K),GW/(m^2*K),1000000000,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,gram per second cubed kelvin,grams per second cubed kelvin,g/(s³ · K),g/(s^3*K),0.001,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,hectogram per second cubed kelvin,hectograms per second cubed kelvin,hg/(s³ · K),hg/(s^3*K),0.1,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,hectowatt per square meter kelvin,hectowatts per square meter kelvin,hW/(m² · K),hW/(m^2*K),100,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,joule per second square meter degree celsius,joules per second square meter degree celsius,J/(s · m² · °C),J/(s*m^2*degC),1,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,joule per second square meter kelvin,joules per second square meter kelvin,J/(s · m² · K),J/(s*m^2*K),1,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,kilogram per second cubed degree celsius,kilograms per second cubed degree celsius,kg/(s³ · °C),kg/(s^3*degC),1,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,kilogram per second cubed kelvin,kilograms per second cubed kelvin,kg/(s³ · K),kg/(s^3*K),1,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,kilowatt per square meter kelvin,kilowatts per square meter kelvin,kW/(m² · K),kW/(m^2*K),1000,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,megagram per second cubed kelvin,megagrams per second cubed kelvin,Mg/(s³ · K),Mg/(s^3*K),1000,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,megawatt per square meter kelvin,megawatts per square meter kelvin,MW/(m² · K),MW/(m^2*K),1000000,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,microgram per second cubed kelvin,micrograms per second cubed kelvin,µg/(s³ · K),ug/(s^3*K),0.000000001,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,microwatt per square meter kelvin,microwatts per square meter kelvin,µW/(m² · K),uW/(m^2*K),0.000001,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,milligram per second cubed kelvin,milligrams per second cubed kelvin,mg/(s³ · K),mg/(s^3*K),0.000001,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,milliwatt per square meter kelvin,milliwatts per square meter kelvin,mW/(m² · K),mW/(m^2*K),0.001,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,nanogram per second cubed kelvin,nanograms per second cubed kelvin,ng/(s³ · K),ng/(s^3*K),1E-12,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,nanowatt per square meter kelvin,nanowatts per square meter kelvin,nW/(m² · K),nW/(m^2*K),0.000000001,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,petagram per second cubed kelvin,petagrams per second cubed kelvin,Pg/(s³ · K),Pg/(s^3*K),1000000000000,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,petawatt per square meter kelvin,petawatts per square meter kelvin,PW/(m² · K),PW/(m^2*K),1000000000000000,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,picogram per second cubed kelvin,picograms per second cubed kelvin,pg/(s³ · K),pg/(s^3*K),1E-15,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,picowatt per square meter kelvin,picowatts per square meter kelvin,pW/(m² · K),pW/(m^2*K),1E-12,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,teragram per second cubed kelvin,teragrams per second cubed kelvin,Tg/(s³ · K),Tg/(s^3*K),1000000000,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,terawatt per square meter kelvin,terawatts per square meter kelvin,TW/(m² · K),TW/(m^2*K),1000000000000,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per square centimeter degree celsius,watts per square centimeter degree celsius,W/(cm² · °C),W/(cm^2*degC),10000,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per square kilometer degree celsius,watts per square kilometer degree celsius,W/(km² · °C),W/(km^2*degC),0.000001,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per square meter degree celsius,watts per square meter degree celsius,W/(m² · °C),W/(m^2*degC),1,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per square meter kelvin,watts per square meter kelvin,W/(m² · K),W/(m^2*K),1,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per square millimeter degree celsius,watts per square millimeter degree celsius,W/(mm² · °C),W/(mm^2*degC),1000000,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,yoctogram per second cubed kelvin,yoctograms per second cubed kelvin,yg/(s³ · K),yg/(s^3*K),1E-27,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,yoctowatt per square meter kelvin,yoctowatts per square meter kelvin,yW/(m² · K),yW/(m^2*K),1E-24,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,yottagram per second cubed kelvin,yottagrams per second cubed kelvin,Yg/(s³ · K),Yg/(s^3*K),1E+021,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,yottawatt per square meter kelvin,yottawatts per square meter kelvin,YW/(m² · K),YW/(m^2*K),1E+024,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,zeptogram per second cubed kelvin,zeptograms per second cubed kelvin,zg/(s³ · K),zg/(s^3*K),1E-24,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,zeptowatt per square meter kelvin,zeptowatts per square meter kelvin,zW/(m² · K),zW/(m^2*K),1E-21,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,zettagram per second cubed kelvin,zettagrams per second cubed kelvin,Zg/(s³ · K),Zg/(s^3*K),1E+018,0 +HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,zettawatt per square meter kelvin,zettawatts per square meter kelvin,ZW/(m² · K),ZW/(m^2*K),1E+021,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,abhenry,abhenries,abH,abH,0.000000001,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,attohenry,attohenries,aH,aH,1E-18,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,centihenry,centihenries,cH,cH,0.01,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,decahenry,decahenries,daH,daH,10,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,decihenry,decihenries,dH,dH,0.1,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,exahenry,exahenries,EH,EH,1E+018,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,femtohenry,femtohenries,fH,fH,1E-15,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,gigahenry,gigahenries,GH,GH,1000000000,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,hectohenry,hectohenries,hH,hH,100,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,henry,henries,H,H,1,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,kilohenry,kilohenries,kH,kH,1000,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,megahenry,megahenries,MH,MH,1000000,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,microhenry,microhenries,µH,uH,0.000001,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,millihenry,millihenries,mH,mH,0.001,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,nanohenry,nanohenries,nH,nH,0.000000001,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,petahenry,petahenries,PH,PH,1000000000000000,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,picohenry,picohenries,pH,pH,1E-12,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,stathenry,stathenries,statH,statH,898755291711.548,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,terahenry,terahenries,TH,TH,1000000000000,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,yoctohenry,yoctohenries,yH,yH,1E-24,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,yottahenry,yottahenries,YH,YH,1E+024,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,zeptohenry,zeptohenries,zH,zH,1E-21,0 +Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,zettahenry,zettahenries,ZH,ZH,1E+021,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,bit,bits,b,bit,0.125,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,byte,bytes,B,B,1,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,crumb,crumbs,crumb,crumb,0.25,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,deciban,decibans,deciban,deciban,0.041524101186092,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,exabit,exabits,Eb,Eb,1.25E+017,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,exabyte,exabytes,EB,EB,1E+018,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,exbibit,exbibits,Eib,Eib,1.44115188075856E+017,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,exbibyte,exbibytes,EiB,EiB,1.15292150460685E+018,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,gibibit,gibibits,Gib,Gib,134217728,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,gibibyte,gibibytes,GiB,GiB,1073741824,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,gigabit,gigabits,Gb,Gb,125000000,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,gigabyte,gigabytes,GB,GB,1000000000,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,hartley,hartleys,Hart,Hart,0.41524101186092,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,kibibit,kibibits,Kib,Kib,128,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,kibibyte,kibibytes,KiB,KiB,1024,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,kilobit,kilobits,kb,kb,125,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,kilobyte,kilobytes,kB,kB,1000,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,mebibit,mebibits,Mib,Mib,131072,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,mebibyte,mebibytes,MiB,MiB,1048576,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,megabit,megabits,Mb,Mb,125000,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,megabyte,megabytes,MB,MB,1000000,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,natural unit of uniformation,natural units of information,nat,nat,0.18033688011112,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,nibble,nibbles,nibble,nibble,0.5,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,octet,octets,o,o,1,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,pebibit,pebibits,Pib,Pib,140737488355328,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,pebibyte,pebibytes,PiB,PiB,1125899906842624,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,petabit,petabits,Pb,Pb,125000000000000,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,petabyte,petabytes,PB,PB,1000000000000000,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,shannon,shannons,Sh,Sh,0.125,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,tibibit,tibibits,Tib,Tib,137438953472,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,tibibyte,tibibytes,TiB,TiB,1099511627776,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,terabit,terabits,Tb,Tb,125000000000,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,terabyte,terabytes,TB,TB,1000000000000,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,trit,trits,trit,trit,0.198120312590145,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,yobibit,yobibits,Yib,Yib,1.51115727451829E+023,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,yobibyte,yobibytes,YiB,YiB,1.20892581961463E+024,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,yottabit,yottabits,Yb,Yb,1.25E+023,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,yottabyte,yottabytes,YB,YB,1E+024,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,zebibit,zebibits,Zib,Zib,1.47573952589676E+020,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,zebibyte,zebibytes,ZiB,ZiB,1.18059162071741E+021,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,zettabit,zettabits,Zb,Zb,1.25E+020,0 +Information,0,0,0,0,0,0,0,false,false,true,false,false,false,zettabyte,zettabytes,ZB,ZB,1E+021,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,bit per second,bits per second,b/s,b/s,0.125,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,byte per second,bytes per second,B/s,B/s,1,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,exabit per second,exabits per second,Eb/s,Eb/s,1.25E+017,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,exabyte per second,exabytes per second,EB/s,EB/s,1E+018,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,exbibit per second,exbibits per second,Eib/s,Eib/s,1.44115188075856E+017,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,exbibyte per second,exbibytes per second,EiB/s,EiB/s,1.15292150460685E+018,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,gibibit per second,gibibits per second,Gib/s,Gib/s,134217728,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,gibibyte per second,gibibytes per second,GiB/s,GiB/s,1073741824,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,gigabit per second,gigabits per second,Gb/s,Gb/s,125000000,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,gigabyte per second,gigabytes per second,GB/s,GB/s,1000000000,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,kibibit per second,kibibits per second,Kib/s,Kib/s,128,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,kibibyte per second,kibibytes per second,KiB/s,KiB/s,1024,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,kilobit per second,kilobits per second,kb/s,kb/s,125,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,kilobyte per second,kilobytes per second,kB/s,kB/s,1000,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,mebibit per second,mebibits per second,Mib/s,Mib/s,131072,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,mebibyte per second,mebibytes per second,MiB/s,MiB/s,1048576,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,megabit per second,megabits per second,Mb/s,Mb/s,125000,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,megabyte per second,megabytes per second,MB/s,MB/s,1000000,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,octet per second,octets per second,o/s,o/s,1,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,pebibit per second,pebibits per second,Pib/s,Pib/s,140737488355328,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,pebibyte per second,pebibytes per second,PiB/s,PiB/s,1125899906842624,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,petabit per second,petabits per second,Pb/s,Pb/s,125000000000000,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,petabyte per second,petabytes per second,PB/s,PB/s,1000000000000000,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,tebibit per second,tebibits per second,Tib/s,Tib/s,137438953472,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,tebibyte per second,tebibytes per second,TiB/s,TiB/s,1099511627776,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,terabit per second,terabits per second,Tb/s,Tb/s,125000000000,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,terabyte per second,terabytes per second,TB/s,TB/s,1000000000000,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,yobibit per second,yobibits per second,Yib/s,Yib/s,1.51115727451829E+023,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,yobibyte per second,yobibytes per second,YiB/s,YiB/s,1.20892581961463E+024,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,yottabit per second,yottabits per second,Yb/s,Yb/s,1.25E+023,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,yottabyte per second,yottabytes per second,YB/s,YB/s,1E+024,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,zebibit per second,zebibits per second,Zib/s,Zib/s,1.47573952589676E+020,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,zebibyte per second,zebibytes per second,ZiB/s,ZiB/s,1.18059162071741E+021,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,zettabit per second,zettabits per second,Zb/s,Zb/s,1.25E+020,0 +InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,zettabyte per second,zettabytes per second,ZB/s,ZB/s,1E+021,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,attosecond per meter,attoseconds per meter,am/s,am/s (inverse),1E-18,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,centisecond per meter,centiseconds per meter,cm/s,cm/s (inverse),0.01,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,decasecond per meter,decaseconds per meter,dam/s,dam/s (inverse),10,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,decisecond per meter,deciseconds per meter,dm/s,dm/s (inverse),0.1,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,exasecond per meter,exaseconds per meter,Em/s,Em/s (inverse),1E+018,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,femtosecond per meter,femtoseconds per meter,fm/s,fm/s (inverse),1E-15,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,gigasecond per meter,gigaseconds per meter,Gm/s,Gm/s (inverse),1000000000,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,hectosecond per meter,hectoseconds per meter,hm/s,hm/s (inverse),100,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,hour per foot,hours per foot,h/ft,h/ft (inverse),11811.0236220472,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,hour per kilometer,hours per kilometer,h/km,h/km (inverse),3.6,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,hour per mile,hours per mile,h/mi,h/mi (inverse),2.2369362920544,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,kilosecond per meter,kiloseconds per meter,km/s,km/s (inverse),1000,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,megasecond per meter,megaseconds per meter,Mm/s,Mm/s (inverse),1000000,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,microsecond per meter,microseconds per meter,µm/s,um/s (inverse),0.000001,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,millisecond per meter,milliseconds per meter,mm/s,mm/s (inverse),0.001,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,minute per foot,minutes per foot,min/ft,min/ft (inverse),196.850393700787,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,minute per mile,minutes per mile,min/mi,min/mi (inverse),0.03728227153,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,nanosecond per meter,nanoseconds per meter,nm/s,nm/s (inverse),0.000000001,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,petasecond per meter,petaseconds per meter,Pm/s,Pm/s (inverse),1000000000000000,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,picosecond per meter,picoseconds per meter,pm/s,pm/s (inverse),1E-12,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,second per foot,seconds per foot,s/ft,s/ft (inverse),3.28083989501312,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,second per inch,seconds per inch,s/in,s/in (inverse),39.3700787401575,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,second per meter,seconds per meter,m/s,m/s (inverse),1,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,second per mile,seconds per mile,s/mi,s/mi (inverse),0.000621371192237334,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,terasecond per meter,teraseconds per meter,Tm/s,Tm/s (inverse),1000000000000,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,yoctosecond per meter,yoctoseconds per meter,ym/s,ym/s (inverse),1E-24,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,yottasecond per meter,yottaseconds per meter,Ym/s,Ym/s (inverse),1E+024,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,zeptosecond per meter,zeptoseconds per meter,zm/s,zm/s (inverse),1E-21,0 +InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,zettasecond per meter,zettaseconds per meter,Zm/s,Zm/s (inverse),1E+021,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,attometer per second cubed,attometers per second cubed,am/s³,am/s^3,1E-18,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,centimeter per second cubed,centimeters per second cubed,cm/s³,cm/s^3,0.01,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,decameter per second cubed,decameters per second cubed,dam/s³,dam/s^3,10,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,decimeter per second cubed,decimeters per second cubed,dm/s³,dm/s^3,0.1,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,exameter per second cubed,exameters per second cubed,Em/s³,Em/s^3,1E+018,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,femtometer per second cubed,femtometers per second cubed,fm/s³,fm/s^3,1E-15,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,foot per second cubed,feet per second cubed,ft/s³,ft/s^3,0.3048,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,gigameter per second cubed,gigameters per second cubed,Gm/s³,Gm/s^3,1000000000,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,hectometer per second cubed,hectometers per second cubed,hm/s³,hm/s^3,100,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,inch per second cubed,inches per second cubed,in/s³,in/s^3,0.0254,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,kilometer per minute cubed,kilometers per minute cubed,km/min³,km/min^3,0.00462962962962963,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,kilometer per second cubed,kilometers per second cubed,km/s³,km/s^3,1000,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,megameter per second cubed,megameters per second cubed,Mm/s³,Mm/s^3,1000000,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,meter per second cubed,meters per second cubed,m/s³,m/s^3,1,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,micrometer per second cubed,micrometers per second cubed,µm/s³,um/s^3,0.000001,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,millimeter per second cubed,millimeters per second cubed,mm/s³,mm/s^3,0.001,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,nanometer per second cubed,nanometers per second cubed,nm/s³,nm/s^3,0.000000001,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,petameter per second cubed,petameters per second cubed,Pm/s³,Pm/s^3,1000000000000000,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,picometer per second cubed,picometers per second cubed,pm/s³,pm/s^3,1E-12,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,terameter per second cubed,terameters per second cubed,Tm/s³,Tm/s^3,1000000000000,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,yoctometer per second cubed,yoctometers per second cubed,ym/s³,ym/s^3,1E-24,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,yottameter per second cubed,yottameters per second cubed,Ym/s³,Ym/s^3,1E+024,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,zeptometer per second cubed,zeptometers per second cubed,zm/s³,zm/s^3,1E-21,0 +Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,zettameter per second cubed,zettameters per second cubed,Zm/s³,Zm/s^3,1E+021,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,ångström,ångströms,Å,ang,1E-10,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,astronomical unit,astronomical units,ua,ua,149597900000,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,atomic unit of length,atomic units of length,a.u. of length,a.u. of length,5.29177210903E-11,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,attometer,attometers,am,am,1E-18,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,bohr radius,bohr radiuses,a₀,a\0,5.29177210903E-11,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,centimeter,centimeters,cm,cm,0.01,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,chain,chains,ch,ch,20.11684,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,decameter,decameters,dam,dam,10,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,decimeter,decimeters,dm,dm,0.1,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,exameter,exameters,Em,Em,1E+018,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,fathom,fathoms,fathom,fathom,1.828804,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,femtometer,femtometers,fm,fm,1E-15,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,fermi,fermis,fermi,fermi,1E-15,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,foot,feet,ft,ft,0.3048,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,foot (U.S. survey),feet (U.S. survey),ft (U.S. survey),ft (U.S. survey),0.3048006,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,gigameter,gigameters,Gm,Gm,1000000000,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,hectometer,hectometers,hm,hm,100,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,inch,inches,in,in,0.0254,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,kilometer,kilometers,km,km,1000,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,light year,light years,l. y.,l. y.,9.46073E+015,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,megameter,megameters,Mm,Mm,1000000,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,meter,meters,m,m,1,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,microinch,microinches,μin,uin,0.0000000254,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,micrometer,micrometers,µm,um,0.000001,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,micron,microns,μ,u,0.000001,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,mil,mils,0.001 in,0.001 in,0.0000254,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,mile,miles,mi,mi,1609.344,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,mile (U.S. survey),miles (U.S. survey),mi (U.S. survey),mi (U.S. survey),1609.347,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,millimeter,millimeters,mm,mm,0.001,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,nanometer,nanometers,nm,nm,0.000000001,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,nautical mile,nautical miles,M,M,1852,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,parsec,parsecs,pc,pc,3.085678E+016,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,petameter,petameters,Pm,Pm,1000000000000000,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,pica (computer),picas (computer),1/6 in (computer),1/6 in (computer),0.00423333333333333,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,pica (printer's),picas (printer's),1/6 in,1/6 in,0.004217518,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,picometer,picometers,pm,pm,1E-12,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,point (computer),points (computer),1/72 in (computer),1/72 in (computer),0.0003527778,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,point (printer's),points (printer's),1/72 in,1/72 in,0.0003514598,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,rod,rods,rd,rd,5.02921,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,terameter,terameters,Tm,Tm,1000000000000,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,yard,yards,yd,yd,0.9144,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,yoctometer,yoctometers,ym,ym,1E-24,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,yottameter,yottameters,Ym,Ym,1E+024,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,zeptometer,zeptometers,zm,zm,1E-21,0 +Length,1,0,0,0,0,0,0,false,false,false,false,false,false,zettameter,zettameters,Zm,Zm,1E+021,0 +LinearDensityOfStates,-3,-1,2,0,0,0,0,false,true,false,false,false,false,state per centimeter electronvolt,states per centimeter electronvolt,1/(cm · eV),1/(cm*eV),6.24150907446076E+020,0 +LinearDensityOfStates,-3,-1,2,0,0,0,0,false,true,false,false,false,false,state per centimeter joule,states per centimeter joule,1/(cm · J),1/(cm*J),100,0 +LinearDensityOfStates,-3,-1,2,0,0,0,0,false,true,false,false,false,false,state per meter joule,states per meter joule,1/(m · J),1/(m*J),1,0 +LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,gram per centimeter,grams per centimeter,g/cm,g/cm,0.1,0 +LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,gram per kilometer,grams per kilometer,g/km,g/km,0.000001,0 +LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,kilogram per meter,kilograms per meter,kg/m,kg/m,1,0 +LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,ounce per foot,ounces per foot,oz/ft,oz/ft,0.0930102362204724,0 +LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,ounce per inch,ounces per inch,oz/in,oz/in,1.11612283464567,0 +LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,pound per foot,pounds per foot,lb/ft,lb/ft,1.48816404199475,0 +LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,pound per inch,pounds per inch,lb/in,lb/in,17.857968503937,0 +LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,pound per yard,pounds per yard,lb/yd,lb/yd,0.496054680664917,0 +LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per centimeter,per centimeter,cm⁻¹,cm^-1 (number density),100,0 +LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per decimeter,per decimeter,dm⁻¹,dm^-1 (number density),10,0 +LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per foot,per foot,ft⁻¹,ft^-1,3.28083989501312,0 +LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,foot (U.S. survey),foot (U.S. survey),ft (U.S. survey),ft (U.S. survey) (number density),3.28083343667959,0 +LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per inch,per inch,in⁻¹,in^-1,39.3700787401575,0 +LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per kilometer,per kilometer,km⁻¹,km^-1 (number density),0.001,0 +LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per meter,per meter,m⁻¹,m^-1 (number density),1,0 +LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per mile,per mile,mi⁻¹,mi^-1,0.000621371192237334,0 +LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per mile (U.S. survey),per mile (U.S. survey),mi⁻¹ (U.S. survey),mi^-1 (U.S. survey),0.000621370033933018,0 +LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per millimeter,per millimeter,mm⁻¹,mm^-1 (number density),1000,0 +LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per nautical mile,per nautical mile,M⁻¹,M^-1,0.000539956803455724,0 +LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per yard,per yard,yd⁻¹,yd^-1,1.09361329833771,0 +LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per centimeter second,per centimeter second,cm⁻¹ · s⁻¹,cm^-1*s^-1,100,0 +LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per foot second,per foot second,ft⁻¹ · s⁻¹,ft^-1*s^-1,3.28083989501312,0 +LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per foot (U.S. survey) second,per foot (U.S. survey) second,ft⁻¹ (U.S. survey) · s⁻¹,ft^-1 (U.S. survey)*s^-1,3.28083343667959,0 +LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per inch second,per inch second,in⁻¹ · s⁻¹,in^-1*s^-1,39.3700787401575,0 +LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per kilometer second,per kilometer second,km⁻¹ · s⁻¹,km^-1*s^-1,0.001,0 +LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per meter second,per meter second,m⁻¹ · s⁻¹,m^-1*s^-1,1,0 +LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per mile second,per mile second,mi⁻¹ · s⁻¹,mi^-1*s^-1,0.000621371192237334,0 +LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per mile (U.S. survey) second,per mile (U.S. survey) second,mi⁻¹ (U.S. survey) · s⁻¹,mi^-1 (U.S. survey)*s^-1,0.000621370033933018,0 +LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per millimeter second,per millimeter second,mm⁻¹ · s⁻¹,mm^-1*s^-1,1000,0 +LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per yard second,per yard second,yd⁻¹ · s⁻¹,yd^-1*s^-1,1.09361329833771,0 +LinearPowerDensity,1,1,-3,0,0,0,0,false,false,false,false,false,false,watt per centimeter,watts per centimeter,W/cm,W/cm,100,0 +LinearPowerDensity,1,1,-3,0,0,0,0,false,false,false,false,false,false,watt per meter,watts per meter,W/m,W/m,1,0 +LinearPowerDensity,1,1,-3,0,0,0,0,false,false,false,false,false,false,watt per millimeter,watts per millimeter,W/mm,W/mm,1000,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,attocandela per square meter,attocandelas per square meter,acd/m²,acd/m^2,1E-18,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square centimeter,candelas per square centimeter,cd/cm²,cd/cm^2,10000,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square foot,candelas per square foot,cd/ft²,cd/ft^2,10.7639104167097,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square gigameter,candelas per square gigameter,cd/Gm²,cd/Gm^2,1E-18,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square inch,candelas per square inch,cd/in²,cd/in^2,1550.0031000062,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square kilometer,candelas per square kilometer,cd/km²,cd/km^2,0.000001,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square megameter,candelas per square megameter,cd/Mm²,cd/Mm^2,1E-12,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square meter,candelas per square meter,cd/m²,cd/m^2,1,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square micrometer,candelas per square micrometer,cd/µm²,cd/um^2,1000000000000,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square millimeter,candelas per square millimeter,cd/mm²,cd/mm^2,1000000,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square nanometer,candelas per square nanometer,cd/nm²,cd/nm^2,1E+018,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square picometer,candelas per square picometer,cd/pm²,cd/pm^2,1E+024,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square terameter,candelas per square terameter,cd/Tm²,cd/Tm^2,1E-24,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,centicandela per square meter,centicandelas per square meter,ccd/m²,ccd/m^2,0.01,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,decacandela per square meter,decacandelas per square meter,dacd/m²,dacd/m^2,10,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,decicandela per square meter,decicandelas per square meter,dcd/m²,dcd/m^2,0.1,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,exacandela per square meter,exacandelas per square meter,Ecd/m²,Ecd/m^2,1E+018,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,femtocandela per square meter,femtocandelas per square meter,fcd/m²,fcd/m^2,1E-15,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,footlambert,footlamberts,fl,fl,3.42625909963539,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,gigacandela per square meter,gigacandelas per square meter,Gcd/m²,Gcd/m^2,1000000000,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,hectocandela per square meter,hectocandelas per square meter,hcd/m²,hcd/m^2,100,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,kilocandela per square meter,kilocandelas per square meter,kcd/m²,kcd/m^2,1000,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,lambert,lamberts,la,la,3183.09886183791,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,megacandela per square meter,megacandelas per square meter,Mcd/m²,Mcd/m^2,1000000,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,microcandela per square meter,microcandelas per square meter,µcd/m²,ucd/m^2,0.000001,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,millicandela per square meter,millicandelas per square meter,mcd/m²,mcd/m^2,0.001,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,nanocandela per square meter,nanocandelas per square meter,ncd/m²,ncd/m^2,0.000000001,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,petacandela per square meter,petacandelas per square meter,Pcd/m²,Pcd/m^2,1000000000000000,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,picocandela per square meter,picocandelas per square meter,pcd/m²,pcd/m^2,1E-12,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,stilb,stilbs,sb,sb,10000,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,teracandela per square meter,teracandelas per square meter,Tcd/m²,Tcd/m^2,1000000000000,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,yoctocandela per square meter,yoctocandelas per square meter,ycd/m²,ycd/m^2,1E-24,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,yottacandela per square meter,yottacandelas per square meter,Ycd/m²,Ycd/m^2,1E+024,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,zeptocandela per square meter,zeptocandelas per square meter,zcd/m²,zcd/m^2,1E-21,0 +Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,zettacandela per square meter,zettacandelas per square meter,Zcd/m²,Zcd/m^2,1E+021,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,attocandela,attocandelas,acd,acd,1E-18,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,candela,candelas,cd,cd,1,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,centicandela,centicandelas,ccd,ccd,0.01,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,decacandela,decacandelas,dacd,dacd,10,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,decicandela,decicandelas,dcd,dcd,0.1,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,exacandela,exacandelas,Ecd,Ecd,1E+018,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,femtocandela,femtocandelas,fcd,fcd,1E-15,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,gigacandela,gigacandelas,Gcd,Gcd,1000000000,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,hectocandela,hectocandelas,hcd,hcd,100,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,kilocandela,kilocandelas,kcd,kcd,1000,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,megacandela,megacandelas,Mcd,Mcd,1000000,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,microcandela,microcandelas,µcd,ucd,0.000001,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,millicandela,millicandelas,mcd,mcd,0.001,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,nanocandela,nanocandelas,ncd,ncd,0.000000001,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,petacandela,petacandelas,Pcd,Pcd,1000000000000000,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,picocandela,picocandelas,pcd,pcd,1E-12,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,teracandela,teracandelas,Tcd,Tcd,1000000000000,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,yoctocandela,yoctocandelas,ycd,ycd,1E-24,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,yottacandela,yottacandelas,Ycd,Ycd,1E+024,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,zeptocandela,zeptocandelas,zcd,zcd,1E-21,0 +LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,zettacandela,zettacandelas,Zcd,Zcd,1E+021,0 +MagneticFieldStrength,-1,0,0,1,0,0,0,false,false,false,false,false,false,ampere per centimeter,amperes per centimeter,A/cm,A/cm,100,0 +MagneticFieldStrength,-1,0,0,1,0,0,0,false,false,false,false,false,false,ampere per meter,amperes per meter,A/m,A/m,1,0 +MagneticFieldStrength,-1,0,0,1,0,0,0,false,false,false,false,false,false,ampere per micrometer,amperes per micrometer,A/μm,A/um,1000000,0 +MagneticFieldStrength,-1,0,0,1,0,0,0,false,false,false,false,false,false,ampere per millimeter,amperes per millimeter,A/mm,A/mm,1000,0 +MagneticFieldStrength,-1,0,0,1,0,0,0,false,false,false,false,false,false,oersted,oersteds,Oe,Oe,79.5774715459477,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,attoweber,attowebers,aWb,aWb,1E-18,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,centiweber,centiwebers,cWb,cWb,0.01,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,decaweber,decawebers,daWb,daWb,10,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,deciweber,deciwebers,dWb,dWb,0.1,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,exaweber,exawebers,EWb,EWb,1E+018,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,femtoweber,femtowebers,fWb,fWb,1E-15,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,gigaweber,gigawebers,GWb,GWb,1000000000,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,hectoweber,hectowebers,hWb,hWb,100,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,kiloweber,kilowebers,kWb,kWb,1000,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,maxwell,maxwells,Mx,Mx,0.00000001,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,megaweber,megawebers,MWb,MWb,1000000,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,microweber,microwebers,µWb,uWb,0.000001,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,milliweber,milliwebers,mWb,mWb,0.001,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,nanoweber,nanowebers,nWb,nWb,0.000000001,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,petaweber,petawebers,PWb,PWb,1000000000000000,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,picoweber,picowebers,pWb,pWb,1E-12,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,teraweber,terawebers,TWb,TWb,1000000000000,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,weber,webers,Wb,Wb,1,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,yoctoweber,yoctowebers,yWb,yWb,1E-24,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,yottaweber,yottawebers,YWb,YWb,1E+024,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,zeptoweber,zeptowebers,zWb,zWb,1E-21,0 +MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,zettaweber,zettawebers,ZWb,ZWb,1E+021,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,attotesla,attoteslas,aT,aT,1E-18,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,centitesla,centiteslas,cT,cT,0.01,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,decatesla,decateslas,daT,daT,10,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,decitesla,deciteslas,dT,dT,0.1,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,exatesla,exateslas,ET,ET,1E+018,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,femtotesla,femtoteslas,fT,fT,1E-15,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,gamma,gammas,γ,Gamma,0.000000001,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,gauss,gauss,G,G,0.0001,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,gigatesla,gigateslas,GT,GT,1000000000,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,hectotesla,hectoteslas,hT,hT,100,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,kilotesla,kiloteslas,kT,kT,1000,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,megatesla,megateslas,MT,MT,1000000,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,microtesla,microteslas,µT,uT,0.000001,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,millitesla,milliteslas,mT,mT,0.001,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,nanotesla,nanoteslas,nT,nT,0.000000001,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,petatesla,petateslas,PT,PT,1000000000000000,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,picotesla,picoteslas,pT,pT,1E-12,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,teratesla,terateslas,TT,TT,1000000000000,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,tesla,teslas,T,T,1,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,yoctotesla,yoctoteslas,yT,yT,1E-24,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,yottatesla,yottateslas,YT,YT,1E+024,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,zeptotesla,zeptoteslas,zT,zT,1E-21,0 +MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,zettatesla,zettateslas,ZT,ZT,1E+021,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,ampere square centimeter,ampere square centimeters,A · cm²,A*cm^2,0.0001,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,ampere square meter,ampere square meters,A · m²,A*m^2,1,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,atomic unit of magnetic dipole moment, atomic units of magnetic dipole moment,ħ · e/mₑ,n<-*e/m\e,1.85480201566E-23,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,Bohr magneton,Bohr magnetons,µ(Bohr),u(Bohr),9.2740100783E-24,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,deuteron magnetic moment,deuteron magnetic moments,μ(deuteron),u(deuteron),4.330735094E-27,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,electron magnetic moment,electron magnetic moments,μₑ,u\e,-9.2847647043E-24,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,erg per gauss,ergs per gauss,erg/G,erg/G,0.001,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,helion magnetic moment,helion magnetic moments,μ(helion),u(helion),-1.074617532E-26,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,joule per tesla,joules per tesla,J/T,J/T,1,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,muon magnetic moment,muon magnetic moments,μ(muon),u(muon),-4.4904483E-26,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,neutron magnetic moment,neutron magnetic moments,μ(neutron),u(neutron),-9.6623651E-27,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,newton meter per tesla,newton meters per tesla,N · m/T,N*m/T,1,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,nuclear magneton,nuclear magnetons,μ(Nuclear),u(Nuclear),5.0507837461E-27,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,proton magnetic moment,proton magnetic moments,μ(proton),u(proton),1.41060679736E-26,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,shielded helion magnetic moment,shielded helion magnetic moments,μ’(helion),u'(helion),-1.07455309E-26,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,shielded proton magnetic moment,shielded proton magnetic moments,μ’(proton),u'(proton),1.41057056E-26,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,statampere square centimeter,statampere square centimeters,statA · cm²,statA*cm^2,3.335641E-14,0 +MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,triton magnetic moment,triton magnetic moments,μ(triton),u(triton),1.5046095202E-26,0 +MagneticPermeability,1,1,-2,-2,0,0,0,false,false,false,false,false,false,henry per meter,henrys per meter,H/m,H/m,1,0 +MagneticPermeability,1,1,-2,-2,0,0,0,false,false,false,false,false,false,vacuum magnetic permeability,vacuum magnetic permeability,µ₀,u\0,1.25663706212E-06,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,attogram,attograms,ag,ag,1E-21,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,carat,carats,ct,ct,0.0002,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,centigram,centigrams,cg,cg,0.00001,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,dalton,daltons,Da,Da,1.6605390666E-27,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,decagram,decagrams,dag,dag,0.01,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,decigram,decigrams,dg,dg,0.0001,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,exagram,exagrams,Eg,Eg,1000000000000000,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,femtogram,femtograms,fg,fg,1E-18,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,gigagram,gigagrams,Gg,Gg,1000000,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,grain,grains,gr,gr,0.00006479891,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,gram,grams,g,g,0.001,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,hectogram,hectograms,hg,hg,0.1,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,hundredweight (long),hundredweight (long),cwt long,cwt long,50.80235,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,hundredweight (short),hundredweight (short),cwt short,cwt short,45.35924,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,kilogram,kilograms,kg,kg,1,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,megagram,megagrams,Mg,Mg,1000,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,microgram,micrograms,µg,ug,0.000000001,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,milligram,milligrams,mg,mg,0.000001,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,nanogram,nanograms,ng,ng,1E-12,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,ounce,ounces,oz,oz,0.02834952,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,troy ounce,troy ounces,oz t,oz t,0.03110348,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,pennyweight,pennyweight,dwt,dwt,0.001555174,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,petagram,petagrams,Pg,Pg,1000000000000,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,picogram,picograms,pg,pg,1E-15,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,pound,pounds,lb,lb,0.4535924,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,troy pound,troy pounds,lb t,lb t,0.3732417,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,slug,slugs,slug,slug,14.5939,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,teragram,teragrams,Tg,Tg,1000000000,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,ton,tons,t,t,1000,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,assay ton,assay tons,AT,AT,0.02916667,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,long ton,long tons,2240 lb,2240 lb,1016.047,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,short ton,short tons,2000 lb,2000 lb,907.1847,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,yoctogram,yoctograms,yg,yg,1E-27,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,yottagram,yottagrams,Yg,Yg,1E+021,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,zeptogram,zeptograms,zg,zg,1E-24,0 +Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,zettagram,zettagrams,Zg,Zg,1E+018,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,attogram per cubic meter,attograms per cubic meter,ag/m³,ag/m^3 (mass concentration),1E-21,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,centigram per cubic meter,centigrams per cubic meter,cg/m³,cg/m^3 (mass concentration),0.00001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,decagram per cubic meter,decagrams per cubic meter,dag/m³,dag/m^3 (mass concentration),0.01,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,decigram per cubic meter,decigrams per cubic meter,dg/m³,dg/m^3 (mass concentration),0.0001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,exagram per cubic meter,exagrams per cubic meter,Eg/m³,Eg/m^3 (mass concentration),1000000000000000,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,femtogram per cubic decimeter,femtograms per cubic decimeter,fg/dm³,fg/dm^3 (mass concentration),1E-15,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,femtogram per cubic meter,femtograms per cubic meter,fg/m³,fg/m^3 (mass concentration),1E-18,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,femtogram per deciliter,femtograms per deciliter,fg/dL,fg/dL (mass concentration),1E-14,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,femtogram per liter,femtograms per liter,fg/L,fg/L (mass concentration),1E-15,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,femtogram per milliliter,femtograms per milliliter,fg/mL,fg/mL (mass concentration),1E-12,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,gigagram per cubic meter,gigagrams per cubic meter,Gg/m³,Gg/m^3 (mass concentration),1000000,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,gram per cubic decimeter,grams per cubic decimeter,g/dm³,g/dm^3 (mass concentration),1,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,gram per cubic meter,grams per cubic meter,g/m³,g/m^3 (mass concentration),0.001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,gram per deciliter,grams per deciliter,g/dL,g/dL (mass concentration),10,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,gram per liter,grams per liter,g/L,g/L (mass concentration),1,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,gram per milliliter,grams per milliliter,g/mL,g/mL (mass concentration),1000,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,hectogram per cubic meter,hectograms per cubic meter,hg/m³,hg/m^3 (mass concentration),0.1,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,kilogram per cubic decimeter,kilograms per cubic decimeter,kg/dm³,kg/dm^3 (mass concentration),1000,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,kilogram per cubic meter,kilograms per cubic meter,kg/m³,kg/m^3 (mass concentration),1,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,kilogram per deciliter,kilograms per deciliter,kg/dL,kg/dL (mass concentration),10000,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,kilogram per liter,kilograms per liter,kg/L,kg/L (mass concentration),1000,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,kilogram per milliliter,kilograms per milliliter,kg/mL,kg/mL (mass concentration),1000000,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,megagram per cubic meter,megagrams per cubic meter,Mg/m³,Mg/m^3 (mass concentration),1000,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,microgram per cubic decimeter,micrograms per cubic decimeter,μg/dm³,ug/dm^3 (mass concentration),0.000001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,microgram per cubic meter,micrograms per cubic meter,µg/m³,ug/m^3 (mass concentration),0.000000001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,microgram per deciliter,micrograms per deciliter,μg/dL,ug/dL (mass concentration),0.00001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,microgram per liter,micrograms per liter,μg/L,ug/L (mass concentration),0.000001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,microgram per milliliter,micrograms per milliliter,μg/mL,ug/mL (mass concentration),0.001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,milligram per cubic decimeter,milligrams per cubic decimeter,mg/dm³,mg/dm^3 (mass concentration),0.001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,milligram per cubic meter,milligrams per cubic meter,mg/m³,mg/m^3 (mass concentration),0.000001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,milligram per deciliter,milligrams per deciliter,mg/dL,mg/dL (mass concentration),0.01,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,milligram per liter,milligrams per liter,mg/L,mg/L (mass concentration),0.001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,milligram per milliliter,milligrams per milliliter,mg/mL,mg/mL (mass concentration),1,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,nanogram per cubic decimeter,nanograms per cubic decimeter,ng/dm³,ng/dm^3 (mass concentration),0.000000001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,nanogram per cubic meter,nanograms per cubic meter,ng/m³,ng/m^3 (mass concentration),1E-12,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,nanogram per deciliter,nanograms per deciliter,ng/dL,ng/dL (mass concentration),0.00000001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,nanogram per liter,nanograms per liter,ng/L,ng/L (mass concentration),0.000000001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,nanogram per milliliter,nanograms per milliliter,ng/mL,ng/mL (mass concentration),0.000001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,petagram per cubic meter,petagrams per cubic meter,Pg/m³,Pg/m^3 (mass concentration),1000000000000,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,picogram per cubic decimeter,picograms per cubic decimeter,pg/dm³,pg/dm^3 (mass concentration),1E-12,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,picogram per cubic meter,picograms per cubic meter,pg/m³,pg/m^3 (mass concentration),1E-15,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,picogram per deciliter,picograms per deciliter,pg/dL,pg/dL (mass concentration),1E-11,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,picogram per liter,picograms per liter,pg/L,pg/L (mass concentration),1E-12,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,picogram per milliliter,picograms per milliliter,pg/mL,pg/mL (mass concentration),0.000000001,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,teragram per cubic meter,teragrams per cubic meter,Tg/m³,Tg/m^3 (mass concentration),1000000000,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,yoctogram per cubic meter,yoctograms per cubic meter,yg/m³,yg/m^3 (mass concentration),1E-27,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,yottagram per cubic meter,yottagrams per cubic meter,Yg/m³,Yg/m^3 (mass concentration),1E+021,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,zeptogram per cubic meter,zeptograms per cubic meter,zg/m³,zg/m^3 (mass concentration),1E-24,0 +MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,zettagram per cubic meter,zettagrams per cubic meter,Zg/m³,Zg/m^3 (mass concentration),1E+018,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,attogram per cubic meter,attograms per cubic meter,ag/m³,ag/m^3,1E-21,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,carat per cubic meter,carats per cubic meter,ct/m³,ct/m^3,0.0002,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,centigram per cubic meter,centigrams per cubic meter,cg/m³,cg/m^3,0.00001,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,decagram per cubic meter,decagrams per cubic meter,dag/m³,dag/m^3,0.01,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,decigram per cubic meter,decigrams per cubic meter,dg/m³,dg/m^3,0.0001,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,exagram per cubic meter,exagrams per cubic meter,Eg/m³,Eg/m^3,1000000000000000,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,femtogram per cubic meter,femtograms per cubic meter,fg/m³,fg/m^3,1E-18,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,gigagram per cubic meter,gigagrams per cubic meter,Gg/m³,Gg/m^3,1000000,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,grain per cubic meter,grains per cubic meter,gr/m³,gr/m^3,0.00006479891,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,grain per gallon,grains per gallon,gr/gal,gr/gal,0.0171180600684945,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,gram per cubic centimeter,grams per cubic centimeter,g/cm³,g/cm^3,1000,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,gram per cubic meter,grams per cubic meter,g/m³,g/m^3,0.001,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,hectogram per cubic meter,hectograms per cubic meter,hg/m³,hg/m^3,0.1,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,hundredweight (long) per cubic meter,hundredweight (long) per cubic meter,cwt long/m³,cwt long/m^3,50.80235,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,hundredweight (short) per cubic meter,hundredweight (short) per cubic meter,cwt short/m³,cwt short/m^3,45.35924,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,kilogram per cubic meter,kilograms per cubic meter,kg/m³,kg/m^3,1,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,megagram per cubic meter,megagrams per cubic meter,Mg/m³,Mg/m^3,1000,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,microgram per cubic meter,micrograms per cubic meter,µg/m³,ug/m^3,0.000000001,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,milligram per cubic meter,milligrams per cubic meter,mg/m³,mg/m^3,0.000001,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,nanogram per cubic meter,nanograms per cubic meter,ng/m³,ng/m^3,1E-12,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,ounce per cubic inch,ounces per cubic inch,oz/in³,oz/in^3,1729.99427597141,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,ounce per cubic meter,ounces per cubic meter,oz/m³,oz/m^3,0.02834952,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,ounce per gallon,ounces per gallon,oz/gal,oz/gal,7.48915045442874,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,ounce per Imperial gallon,ounces per Imperial gallon,oz/gal (UK),oz/gal (UK),6.23602260403996,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,troy ounce per cubic meter,troy ounces per cubic meter,oz t/m³,oz t/m^3,0.03110348,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,pennyweight per cubic meter,pennyweight per cubic meter,dwt/m³,dwt/m^3,0.001555174,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,petagram per cubic meter,petagrams per cubic meter,Pg/m³,Pg/m^3,1000000000000,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,picogram per cubic meter,picograms per cubic meter,pg/m³,pg/m^3,1E-15,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,pound per cubic foot,pounds per cubic foot,lb/ft³,lb/ft^3,16.01846250554,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,pound per cubic inch,pounds per cubic inch,lb/in³,lb/in^3,27679.9132974432,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,pound per cubic meter,pounds per cubic meter,lb/m³,lb/m^3,0.4535924,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,pound per cubic yard,pounds per cubic yard,lb/yd³,lb/yd^3,0.593276427892882,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,pound per gallon,pounds per gallon,lb/gal,lb/gal,119.826428404623,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,pound per Imperial gallon,pounds per Imperial gallon,lb/gal (UK),lb/gal (UK),99.7763792621791,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,troy pound per cubic meter,troy pounds per cubic meter,lb t/m³,lb t/m^3,0.3732417,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,slug per cubic foot,slugs per cubic foot,slug/ft³,slug/ft^3,515.378652639683,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,slug per cubic meter,slugs per cubic meter,slug/m³,slug/m^3,14.5939,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,teragram per cubic meter,teragrams per cubic meter,Tg/m³,Tg/m^3,1000000000,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,assay ton per cubic meter,assay tons per cubic meter,AT/m³,AT/m^3,0.02916667,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,long ton per cubic meter,long tons per cubic meter,2240 lb/m³,2240 lb/m^3,1016.047,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,long ton per cubic yard,long tons per cubic yard,2240 lb/yd³,2240 lb/yd^3,1328.93922987087,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,ton per cubic meter,tons per cubic meter,t/m³,t/m^3,1000,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,short ton per cubic meter,short tons per cubic meter,2000 lb/m³,2000 lb/m^3,907.1847,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,short ton per cubic yard,short tons per cubic yard,2000 lb/yd³,2000 lb/yd^3,1186.55272499071,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,yoctogram per cubic meter,yoctograms per cubic meter,yg/m³,yg/m^3,1E-27,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,yottagram per cubic meter,yottagrams per cubic meter,Yg/m³,Yg/m^3,1E+021,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,zeptogram per cubic meter,zeptograms per cubic meter,zg/m³,zg/m^3,1E-24,0 +MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,zettagram per cubic meter,zettagrams per cubic meter,Zg/m³,Zg/m^3,1E+018,0 +MassFlux,-2,1,-1,0,0,0,0,false,false,false,false,false,false,gram per square centimeter second,grams per square centimeter second,g/(cm² · s),g/(cm^2*s),10,0 +MassFlux,-2,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram per square meter second,kilograms per square meter second,kg/(m² · s),kg/(m^2*s),1,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,centigram per joule,centigrams per joule,cg/J,cg/J,0.00001,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,decagram per joule,decagrams per joule,dag/J,dag/J,0.01,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,decigram per joule,decigrams per joule,dg/J,dg/J,0.0001,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,gigagram per joule,gigagrams per joule,Gg/J,Gg/J,1000000,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,gram per gigawatt hour,grams per gigawatt hour,g/GWh,g/GWh,2.77777777777778E-16,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,gram per joule,grams per joule,g/J,g/J,0.001,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,gram per kilowatt hour,grams per kilowatt hour,g/kWh,g/kWh,2.77777777777778E-10,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,gram per megawatt hour,grams per megawatt hour,g/MWh,g/MWh,2.77777777777778E-13,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,gram per watt hour,grams per watt hour,g/Wh,g/Wh,2.77777777777778E-07,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,hectogram per joule,hectograms per joule,hg/J,hg/J,0.1,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,kilogram per gigawatt hour,kilograms per gigawatt hour,kg/GWh,kg/GWh,2.77777777777778E-13,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,kilogram per joule,kilograms per joule,kg/J,kg/J,1,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,kilogram per kilowatt hour,kilograms per kilowatt hour,kg/kWh,kg/kWh,2.77777777777778E-07,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,kilogram per megawatt hour,kilograms per megawatt hour,kg/MWh,kg/MWh,2.77777777777778E-10,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,kilogram per watt hour,kilograms per watt hour,kg/Wh,kg/Wh,0.000277777777777778,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,megagram per joule,megagrams per joule,Mg/J,Mg/J,1000,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,microgram per joule,micrograms per joule,µg/J,ug/J,0.000000001,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,milligram per joule,milligrams per joule,mg/J,mg/J,0.000001,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,pound per gigawatt hour,pounds per gigawatt hour,lb/GWh,lb/GWh,1.25997888888889E-13,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,pound per joule,pounds per joule,lb/J,lb/J,0.4535924,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,pound per kilowatt hour,pounds per kilowatt hour,lb/kWh,lb/kWh,1.25997888888889E-07,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,pound per megawatt hour,pounds per megawatt hour,lb/MWh,lb/MWh,1.25997888888889E-10,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,pound per watt hour,pounds per watt hour,lb/Wh,lb/Wh,0.000125997888888889,0 +MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,teragram per joule,teragrams per joule,Tg/J,Tg/J,1000000000,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,attogram per second,attograms per second,ag/s,ag/s,1E-21,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,carat per second,carats per second,ct/s,ct/s,0.0002,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,centigram per second,centigrams per second,cg/s,cg/s,0.00001,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,decagram per second,decagrams per second,dag/s,dag/s,0.01,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,decigram per second,decigrams per second,dg/s,dg/s,0.0001,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,exagram per second,exagrams per second,Eg/s,Eg/s,1000000000000000,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,femtogram per second,femtograms per second,fg/s,fg/s,1E-18,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,gigagram per second,gigagrams per second,Gg/s,Gg/s,1000000,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,grain per second,grains per second,gr/s,gr/s,0.00006479891,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,gram per day,grams per day,g/d,g/d,1.15740740740741E-08,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,gram per hour,grams per hour,g/h,g/h,2.77777777777778E-07,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,gram per minute,grams per minute,g/min,g/min,1.66666666666667E-05,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,gram per second,grams per second,g/s,g/s,0.001,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,hectogram per second,hectograms per second,hg/s,hg/s,0.1,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,hundredweight (long) per second,hundredweight (long) per second,cwt long/s,cwt long/s,50.80235,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,hundredweight (short) per second,hundredweight (short) per second,cwt short/s,cwt short/s,45.35924,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram per day,kilograms per day,kg/d,kg/d,1.15740740740741E-05,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram per hour,kilograms per hour,kg/h,kg/h,0.000277777777777778,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram per minute,kilograms per minute,kg/min,kg/min,0.0166666666666667,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram per second,kilograms per second,kg/s,kg/s,1,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,megagram per second,megagrams per second,Mg/s,Mg/s,1000,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,microgram per second,micrograms per second,µg/s,ug/s,0.000000001,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,milligram per second,milligrams per second,mg/s,mg/s,0.000001,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,nanogram per second,nanograms per second,ng/s,ng/s,1E-12,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,ounce per second,ounces per second,oz/s,oz/s,0.02834952,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,troy ounce per second,troy ounces per second,oz t/s,oz t/s,0.03110348,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,pennyweight per second,pennyweight per second,dwt/s,dwt/s,0.001555174,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,petagram per second,petagrams per second,Pg/s,Pg/s,1000000000000,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,picogram per second,picograms per second,pg/s,pg/s,1E-15,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,pound per day,pounds per day,lb/d,lb/d,5.24991203703704E-06,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,pound per hour,pounds per hour,lb/h,lb/h,0.000125997888888889,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,pound per minute,pounds per minute,lb/min,lb/min,0.00755987333333333,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,pound per second,pounds per second,lb/s,lb/s,0.4535924,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,troy pound per second,troy pounds per second,lb t/s,lb t/s,0.3732417,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,slug per second,slugs per second,slug/s,slug/s,14.5939,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,teragram per second,teragrams per second,Tg/s,Tg/s,1000000000,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,assay ton per second,assay tons per second,AT/s,AT/s,0.02916667,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,long ton per second,long tons per second,2240 lb/s,2240 lb/s,1016.047,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,ton per day,tons per day,t/d,t/d,0.0115740740740741,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,ton per hour,tons per hour,t/h,t/h,0.277777777777778,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,ton per minute,tons per minute,t/min,t/min,16.6666666666667,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,ton per second,tons per second,t/s,t/s,1000,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,short ton per hour,short tons per hour,2000 lb/h,2000 lb/h,0.25199575,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,short ton per second,short tons per second,2000 lb/s,2000 lb/s,907.1847,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,yoctogram per second,yoctograms per second,yg/s,yg/s,1E-27,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,yottagram per second,yottagrams per second,Yg/s,Yg/s,1E+021,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,zeptogram per second,zeptograms per second,zg/s,zg/s,1E-24,0 +MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,zettagram per second,zettagrams per second,Zg/s,Zg/s,1E+018,0 +Molality,0,-1,0,0,0,1,0,false,true,false,false,false,false,mole per kilogram,moles per kilogram,mol/kg,mol/kg,1,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,attomole per cubic meter,attomoles per cubic meter,amol/m³,amol/m^3,1E-18,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,centimole per cubic meter,centimoles per cubic meter,cmol/m³,cmol/m^3,0.01,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,decamole per cubic meter,decamoles per cubic meter,damol/m³,damol/m^3,10,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,decimole per cubic meter,decimoles per cubic meter,dmol/m³,dmol/m^3,0.1,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,examole per cubic meter,examoles per cubic meter,Emol/m³,Emol/m^3,1E+018,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,femtomole per cubic decimeter,femtomoles per cubic decimeter,fmol/dm³,fmol/dm^3,1E-12,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,femtomole per cubic meter,femtomoles per cubic meter,fmol/m³,fmol/m^3,1E-15,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,femtomole per deciliter,femtomoles per deciliter,fmol/dL,fmol/dL,1E-11,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,femtomole per liter,femtomoles per liter,fmol/L,fmol/L,1E-12,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,femtomole per milliliter,femtomoles per milliliter,fmol/mL,fmol/mL,0.000000001,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,gigamole per cubic meter,gigamoles per cubic meter,Gmol/m³,Gmol/m^3,1000000000,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,hectomole per cubic meter,hectomoles per cubic meter,hmol/m³,hmol/m^3,100,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,kilomole per cubic decimeter,kilomoles per cubic decimeter,kmol/dm³,kmol/dm^3,1000000,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,kilomole per cubic meter,kilomoles per cubic meter,kmol/m³,kmol/m^3,1000,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,kilomole per deciliter,kilomoles per deciliter,kmol/dL,kmol/dL,10000000,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,kilomole per liter,kilomoles per liter,kmol/L,kmol/L,1000000,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,kilomole per milliliter,kilomoles per milliliter,kmol/mL,kmol/mL,1000000000,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,megamole per cubic meter,megamoles per cubic meter,Mmol/m³,Mmol/m^3,1000000,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,micromole per cubic decimeter,micromoles per cubic decimeter,μmol/dm³,umol/dm^3,0.001,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,micromole per cubic meter,micromoles per cubic meter,µmol/m³,umol/m^3,0.000001,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,micromole per deciliter,micromoles per deciliter,μmol/dL,umol/dL,0.01,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,micromole per liter,micromoles per liter,μmol/L,umol/L,0.001,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,micromole per milliliter,micromoles per milliliter,μmol/mL,umol/mL,1,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,millimole per cubic decimeter,millimoles per cubic decimeter,mmol/dm³,mmol/dm^3,1,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,millimole per cubic meter,millimoles per cubic meter,mmol/m³,mmol/m^3,0.001,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,millimole per deciliter,millimoles per deciliter,mmol/dL,mmol/dL,10,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,millimole per liter,millimoles per liter,mmol/L,mmol/L,1,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,millimole per milliliter,millimoles per milliliter,mmol/mL,mmol/mL,1000,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,mole per cubic decimeter,moles per cubic decimeter,mol/dm³,mol/dm^3,1000,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,mole per cubic meter,moles per cubic meter,mol/m³,mol/m^3,1,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,mole per deciliter,moles per deciliter,mol/dL,mol/dL,10000,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,mole per liter,moles per liter,mol/L,mol/L,1000,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,mole per milliliter,moles per milliliter,mol/mL,mol/mL,1000000,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,nanomole per cubic decimeter,nanomoles per cubic decimeter,nmol/dm³,nmol/dm^3,0.000001,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,nanomole per cubic meter,nanomoles per cubic meter,nmol/m³,nmol/m^3,0.000000001,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,nanomole per deciliter,nanomoles per deciliter,nmol/dL,nmol/dL,0.00001,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,nanomole per liter,nanomoles per liter,nmol/L,nmol/L,0.000001,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,nanomole per milliliter,nanomoles per milliliter,nmol/mL,nmol/mL,0.001,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,particle per cubic decimeter,particles per cubic decimeter,particle/dm³,particle/dm^3,1.66053906717385E-21,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,particle per cubic meter,particles per cubic meter,particle/m³,particle/m^3,1.66053906717385E-24,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,particle per deciliter,particles per deciliter,particle/dL,particle/dL,1.66053906717385E-20,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,particle per liter,particles per liter,particle/L,particle/L,1.66053906717385E-21,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,particle per milliliter,particles per milliliter,particle/mL,particle/mL,1.66053906717385E-18,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,petamole per cubic meter,petamoles per cubic meter,Pmol/m³,Pmol/m^3,1000000000000000,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,picomole per cubic decimeter,picomoles per cubic decimeter,pmol/dm³,pmol/dm^3,0.000000001,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,picomole per cubic meter,picomoles per cubic meter,pmol/m³,pmol/m^3,1E-12,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,picomole per deciliter,picomoles per deciliter,pmol/dL,pmol/dL,0.00000001,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,picomole per liter,picomoles per liter,pmol/L,pmol/L,0.000000001,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,picomole per milliliter,picomoles per milliliter,pmol/mL,pmol/mL,0.000001,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,teramole per cubic meter,teramoles per cubic meter,Tmol/m³,Tmol/m^3,1000000000000,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,yoctomole per cubic meter,yoctomoles per cubic meter,ymol/m³,ymol/m^3,1E-24,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,yottamole per cubic meter,yottamoles per cubic meter,Ymol/m³,Ymol/m^3,1E+024,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,zeptomole per cubic meter,zeptomoles per cubic meter,zmol/m³,zmol/m^3,1E-21,0 +MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,zettamole per cubic meter,zettamoles per cubic meter,Zmol/m³,Zmol/m^3,1E+021,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,attojoule per mole,attojoules per mole,aJ/mol,aJ/mol,1E-18,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,British thermal unit (39 °F) per mole,British thermal units (39 °F) per mole,Btu₃₉/mol,Btu\3\9/mol,1059.67,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,British thermal unit (59 °F) per mole,British thermal units (59 °F) per mole,Btu₅₉/mol,Btu\5\9/mol,1054.8,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,British thermal unit (60 °F) per mole,British thermal units (60 °F) per mole,Btu₆₀/mol,Btu\6\0/mol,1054.68,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,British thermal unit (IT) per mole,British thermal units (IT) per mole,Btu (IT)/mol,Btu (IT)/mol,1055.056,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,British thermal unit per mole,British thermal units per mole,Btu/mol,Btu/mol,1054.35,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,calorie (15 °C) per mole,calories (15 °C) per mole,cal₁₅/mol,Cal\15/mol,4.1858,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,calorie (20 °C) per mole,calories (20 °C) per mole,cal₂₀/mol,Cal\20/mol,4.1819,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,Calorie (IT) per mole,Calories (IT) per mole,Cal (IT)/mol,Cal (IT)/mol,4186.8,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,calorie (IT) per mole,calories (IT) per mole,cal (IT)/mol,cal (IT)/mol,4.1868,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,Calorie per mole,Calories per mole,Cal/mol,Cal/mol,4184,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,calorie per mole,calories per mole,cal/mol,cal/mol,4.184,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,centijoule per mole,centijoules per mole,cJ/mol,cJ/mol,0.01,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,decajoule per mole,decajoules per mole,daJ/mol,daJ/mol,10,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,decawatt hour per mole,decawatt hours per mole,daW · h/mol,daW*h/mol,36000,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,decijoule per mole,decijoules per mole,dJ/mol,dJ/mol,0.1,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,electronvolt per mole,electronvolts per mole,eV/mol,eV/mol,1.602176634E-19,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,electronvolt per particle,electronvolts per particle,eV/particle,eV/particle,96485.33212331,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,erg per mole,ergs per mole,erg/mol,erg/mol,0.0000001,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,exajoule per mole,exajoules per mole,EJ/mol,EJ/mol,1E+018,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,femtojoule per mole,femtojoules per mole,fJ/mol,fJ/mol,1E-15,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,foot pound-force per mole,foot pounds-force per mole,ft · lbf/mol,ft*lbf/mol,1.355818,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,foot poundal per mole,foot poundals per mole,ft · pdl/mol,ft*pdl/mol,0.04214011,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,gigajoule per mole,gigajoules per mole,GJ/mol,GJ/mol,1000000000,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,gigawatt hour per mole,gigawatt hours per mole,GW · h/mol,GW*h/mol,3600000000000,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,hectojoule per mole,hectojoules per mole,hJ/mol,hJ/mol,100,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,hectowatt hour per mole,hectowatt hours per mole,hW · h/mol,hW*h/mol,360000,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,joule per mole,joules per mole,J/mol,J/mol,1,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,joule per particle,joules per particle,J/particle,J/particle,6.02214076E+023,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,kilocalorie (IT) per mole,kilocalories (IT) per mole,kcal (IT)/mol,kcal (IT)/mol,4186.8,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,kilocalorie per mole,kilocalories per mole,kcal/mol,kcal/mol,4184,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,kilogram square meter per second squared mole,kilograms square meter per second squared mole,kg · m²/(s² · mol),kg*m^2/(s^2*mol),1,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,kilojoule per mole,kilojoules per mole,kJ/mol,kJ/mol,1000,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,kilowatt hour per mole,kilowatt hours per mole,kW · h/mol,kW*h/mol,3600000,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,megajoule per mole,megajoules per mole,MJ/mol,MJ/mol,1000000,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,megawatt hour per mole,megawatt hours per mole,MW · h/mol,MW*h/mol,3600000000,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,microjoule per mole,microjoules per mole,µJ/mol,uJ/mol,0.000001,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,microwatt hour per mole,microwatt hours per mole,µW · h/mol,uW*h/mol,0.0036,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,millijoule per mole,millijoules per mole,mJ/mol,mJ/mol,0.001,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,milliwatt hour per mole,milliwatt hours per mole,mW · h/mol,mW*h/mol,3.6,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,nanojoule per mole,nanojoules per mole,nJ/mol,nJ/mol,0.000000001,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,petajoule per mole,petajoules per mole,PJ/mol,PJ/mol,1000000000000000,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,petawatt hour per mole,petawatt hours per mole,PW · h/mol,PW*h/mol,3.6E+018,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,picojoule per mole,picojoules per mole,pJ/mol,pJ/mol,1E-12,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,quad per mole,quads per mole,10¹⁵ Btu (IT)/mol,10^15 Btu (IT)/mol,1.055056E+018,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,terajoule per mole,terajoules per mole,TJ/mol,TJ/mol,1000000000000,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,terawatt hour per mole,terawatt hours per mole,TW · h/mol,TW*h/mol,3600000000000000,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,therm (EC) per mole,therms (EC) per mole,thm (EC)/mol,thm (EC)/mol,105506000,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,therm per mole,therms per mole,thm/mol,thm/mol,105480400,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,ton of TNT per mole,tons of TNT per mole,t of TNT/mol,t of TNT/mol,4184000000,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,watt hour per mole,watt hours per mole,W · h/mol,W*h/mol,3600,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,watt second per mole,watt seconds per mole,W · s/mol,W*s/mol,1,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,yoctojoule per mole,yoctojoules per mole,yJ/mol,yJ/mol,1E-24,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,yottajoule per mole,yottajoules per mole,YJ/mol,YJ/mol,1E+024,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,zeptojoule per mole,zeptojoules per mole,zJ/mol,zJ/mol,1E-21,0 +MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,zettajoule per mole,zettajoules per mole,ZJ/mol,ZJ/mol,1E+021,0 +MolarFlux,-2,0,-1,0,0,1,0,false,false,false,false,false,false,mole per square meter second,moles per square meter second,mol/(m² · s),mol/(m^2*s),1,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,attojoule per kelvin mole,attojoules per kelvin mole,aJ/(K · mol),aJ/(K*mol),1E-18,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,British thermal unit (39 °F) per kelvin mole,British thermal units (39 °F) per kelvin mole,Btu₃₉/(K · mol),Btu\3\9/(K*mol),1059.67,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,British thermal unit (59 °F) per kelvin mole,British thermal units (59 °F) per kelvin mole,Btu₅₉/(K · mol),Btu\5\9/(K*mol),1054.8,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,British thermal unit (60 °F) per kelvin mole,British thermal units (60 °F) per kelvin mole,Btu₆₀/(K · mol),Btu\6\0/(K*mol),1054.68,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,British thermal unit (IT) per kelvin mole,British thermal units (IT) per kelvin mole,Btu (IT)/(K · mol),Btu (IT)/(K*mol),1055.056,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,British thermal unit per kelvin mole,British thermal units per kelvin mole,Btu/(K · mol),Btu/(K*mol),1054.35,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,calorie (15 °C) per kelvin mole,calories (15 °C) per kelvin mole,cal₁₅/(K · mol),cal\15/(K*mol),4.1858,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,calorie (20 °C) per kelvin mole,calories (20 °C) per kelvin mole,cal₂₀/(K · mol),cal\20/(K*mol),4.1819,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,Calorie (IT) per kelvin mole,Calories (IT) per kelvin mole,Cal (IT)/(K · mol),Cal (IT)/(K*mol),4186.8,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,calorie (IT) per kelvin mole,calories (IT) per kelvin mole,cal (IT)/(K · mol),cal (IT)/(K*mol),4.1868,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,Calorie per kelvin mole,Calories per kelvin mole,Cal/(K · mol),Cal/(K*mol),4184,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,calorie per kelvin mole,calories per kelvin mole,cal/(K · mol),cal/(K*mol),4.184,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,centijoule per kelvin mole,centijoules per kelvin mole,cJ/(K · mol),cJ/(K*mol),0.01,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,decajoule per kelvin mole,decajoules per kelvin mole,daJ/(K · mol),daJ/(K*mol),10,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,decijoule per kelvin mole,decijoules per kelvin mole,dJ/(K · mol),dJ/(K*mol),0.1,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,electronvolt per kelvin particle,electronvolts per kelvin particle,eV/(K · particle),eV/(K*particle),96485.33212331,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,exajoule per kelvin mole,exajoules per kelvin mole,EJ/(K · mol),EJ/(K*mol),1E+018,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,femtojoule per kelvin mole,femtojoules per kelvin mole,fJ/(K · mol),fJ/(K*mol),1E-15,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,gigajoule per kelvin mole,gigajoules per kelvin mole,GJ/(K · mol),GJ/(K*mol),1000000000,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,hectojoule per kelvin mole,hectojoules per kelvin mole,hJ/(K · mol),hJ/(K*mol),100,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,joule per kelvin mole,joules per kelvin mole,J/(K · mol),J/(K*mol),1,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,joule per kelvin particle,joules per kelvin particle,J/(K · particle),J/(K*particle),6.02214076E+023,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,kilocalorie (IT) per kelvin mole,kilocalories (IT) per kelvin mole,kcal (IT)/(K · mol),kcal (IT)/(K*mol),4186.8,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,kilocalorie per kelvin mole,kilocalories per kelvin mole,kcal/(K · mol),kcal/(K*mol),4184,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,kilojoule per kelvin mole,kilojoules per kelvin mole,kJ/(K · mol),kJ/(K*mol),1000,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,megajoule per kelvin mole,megajoules per kelvin mole,MJ/(K · mol),MJ/(K*mol),1000000,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,microjoule per kelvin mole,microjoules per kelvin mole,µJ/(K · mol),uJ/(K*mol),0.000001,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,millijoule per kelvin mole,millijoules per kelvin mole,mJ/(K · mol),mJ/(K*mol),0.001,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,molar gas constant,molar gas constants,R,R,8.314462618,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,nanojoule per kelvin mole,nanojoules per kelvin mole,nJ/(K · mol),nJ/(K*mol),0.000000001,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,petajoule per kelvin mole,petajoules per kelvin mole,PJ/(K · mol),PJ/(K*mol),1000000000000000,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,picojoule per kelvin mole,picojoules per kelvin mole,pJ/(K · mol),pJ/(K*mol),1E-12,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,terajoule per kelvin mole,terajoules per kelvin mole,TJ/(K · mol),TJ/(K*mol),1000000000000,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,yoctojoule per kelvin mole,yoctojoules per kelvin mole,yJ/(K · mol),yJ/(K*mol),1E-24,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,yottajoule per kelvin mole,yottajoules per kelvin mole,YJ/(K · mol),YJ/(K*mol),1E+024,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,zeptojoule per kelvin mole,zeptojoules per kelvin mole,zJ/(K · mol),zJ/(K*mol),1E-21,0 +MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,zettajoule per kelvin mole,zettajoules per kelvin mole,ZJ/(K · mol),ZJ/(K*mol),1E+021,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,attogram per mole,attograms per mole,ag/mol,ag/mol,1E-21,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,centigram per mole,centigrams per mole,cg/mol,cg/mol,0.00001,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,decagram per mole,decagrams per mole,dag/mol,dag/mol,0.01,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,decigram per mole,decigrams per mole,dg/mol,dg/mol,0.0001,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,exagram per mole,exagrams per mole,Eg/mol,Eg/mol,1000000000000000,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,femtogram per mole,femtograms per mole,fg/mol,fg/mol,1E-18,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,gigagram per mole,gigagrams per mole,Gg/mol,Gg/mol,1000000,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,gram per mole,grams per mole,g/mol,g/mol,0.001,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,hectogram per mole,hectograms per mole,hg/mol,hg/mol,0.1,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,kilogram per mole,kilograms per mole,kg/mol,kg/mol,1,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,megagram per mole,megagrams per mole,Mg/mol,Mg/mol,1000,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,microgram per mole,micrograms per mole,µg/mol,ug/mol,0.000000001,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,milligram per mole,milligrams per mole,mg/mol,mg/mol,0.000001,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,nanogram per mole,nanograms per mole,ng/mol,ng/mol,1E-12,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,petagram per mole,petagrams per mole,Pg/mol,Pg/mol,1000000000000,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,picogram per mole,picograms per mole,pg/mol,pg/mol,1E-15,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,teragram per mole,teragrams per mole,Tg/mol,Tg/mol,1000000000,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,yoctogram per mole,yoctograms per mole,yg/mol,yg/mol,1E-27,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,yottagram per mole,yottagrams per mole,Yg/mol,Yg/mol,1E+021,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,zeptogram per mole,zeptograms per mole,zg/mol,zg/mol,1E-24,0 +MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,zettagram per mole,zettagrams per mole,Zg/mol,Zg/mol,1E+018,0 +MolarRadioactivity,0,0,-1,0,0,-1,0,false,true,false,false,false,false,becquerel per mole,becquerels per mole,Bq/mol,Bq/mol,1,0 +MolarRadioactivity,0,0,-1,0,0,-1,0,false,true,false,false,false,false,curie per mole,curies per mole,Ci/mol,Ci/mol,37000000000,0 +MolarRadioactivity,0,0,-1,0,0,-1,0,false,true,false,false,false,false,disintegration per minute per mole,disintegrations per minute per mole,dpm/mol,dpm/mol,0.0166666666666667,0 +MolarVolume,3,0,0,0,0,-1,0,false,false,false,false,false,false,cubic centimeter per mole,cubic centimeters per mole,cm³/mol,cm^3/mol,0.000001,0 +MolarVolume,3,0,0,0,0,-1,0,false,false,false,false,false,false,cubic decimeter per mole,cubic decimeters per mole,dm³/mol,dm^3/mol,0.001,0 +MolarVolume,3,0,0,0,0,-1,0,false,false,false,false,false,false,cubic meter per mole,cubic meters per mole,m³/mol,m^3/mol,1,0 +MolarVolume,3,0,0,0,0,-1,0,false,false,false,false,false,false,cubic meter per particle,cubic meters per particle,m³/particle,m^3/particle,6.02214076E+023,0 +MolarVolume,3,0,0,0,0,-1,0,false,false,false,false,false,false,cubic micrometer per particle,cubic micrometers per particle,µm³/particle,um^3/particle,602214.076,0 +MolarVolume,3,0,0,0,0,-1,0,false,false,false,false,false,false,cubic nanometer per particle,cubic nanometers per particle,nm³/particle,nm^3/particle,0.000602214076,0 +MomentOfInertia,2,1,0,0,0,0,0,false,false,false,false,false,false,dalton square ångström,dalton square ångströms,Da · Ų,Da*ang^2,1.6605390666E-47,0 +MomentOfInertia,2,1,0,0,0,0,0,false,false,false,false,false,false,kilogram square meter,kilogram square meters,kg · m²,kg*m^2,1,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,attogram meter per second,attogram meters per second,ag · m/s,ag*m/s,1E-21,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,centigram meter per second,centigram meters per second,cg · m/s,cg*m/s,0.00001,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,decagram meter per second,decagram meters per second,dag · m/s,dag*m/s,0.01,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,decigram meter per second,decigram meters per second,dg · m/s,dg*m/s,0.0001,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,exagram meter per second,exagram meters per second,Eg · m/s,Eg*m/s,1000000000000000,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,femtogram meter per second,femtogram meters per second,fg · m/s,fg*m/s,1E-18,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,gigagram meter per second,gigagram meters per second,Gg · m/s,Gg*m/s,1000000,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,gram meter per second,gram meters per second,g · m/s,g*m/s,0.001,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,hectogram meter per second,hectogram meters per second,hg · m/s,hg*m/s,0.1,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram attometer per second,kilogram attometers per second,kg · am/s,kg*am/s,1E-18,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram centimeter per second,kilogram centimeters per second,kg · cm/s,kg*cm/s,0.01,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram decameter per second,kilogram decameters per second,kg · dam/s,kg*dam/s,10,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram decimeter per second,kilogram decimeters per second,kg · dm/s,kg*dm/s,0.1,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram exameter per second,kilogram exameters per second,kg · Em/s,kg*Em/s,1E+018,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram femtometer per second,kilogram femtometers per second,kg · fm/s,kg*fm/s,1E-15,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram gigameter per second,kilogram gigameters per second,kg · Gm/s,kg*Gm/s,1000000000,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram hectometer per second,kilogram hectometers per second,kg · hm/s,kg*hm/s,100,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram kilometer per second,kilogram kilometers per second,kg · km/s,kg*km/s,1000,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram megameter per second,kilogram megameters per second,kg · Mm/s,kg*Mm/s,1000000,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram meter per day,kilogram meters per day,kg · m/d,kg*m/d,1.15740740740741E-05,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram meter per hour,kilogram meters per hour,kg · m/h,kg*m/h,0.000277777777777778,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram meter per minute,kilogram meters per minute,kg · m/min,kg*m/min,0.0166666666666667,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram meter per second,kilogram meters per second,kg · m/s,kg*m/s,1,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram micrometer per second,kilogram micrometers per second,kg · µm/s,kg*um/s,0.000001,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram millimeter per second,kilogram millimeters per second,kg · mm/s,kg*mm/s,0.001,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram nanometer per second,kilogram nanometers per second,kg · nm/s,kg*nm/s,0.000000001,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram petameter per second,kilogram petameters per second,kg · Pm/s,kg*Pm/s,1000000000000000,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram picometer per second,kilogram picometers per second,kg · pm/s,kg*pm/s,1E-12,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram terameter per second,kilogram terameters per second,kg · Tm/s,kg*Tm/s,1000000000000,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram yoctometer per second,kilogram yoctometers per second,kg · ym/s,kg*ym/s,1E-24,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram yottameter per second,kilogram yottameters per second,kg · Ym/s,kg*Ym/s,1E+024,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram zeptometer per second,kilogram zeptometers per second,kg · zm/s,kg*zm/s,1E-21,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram zettameter per second,kilogram zettameters per second,kg · Zm/s,kg*Zm/s,1E+021,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,megagram meter per second,megagram meters per second,Mg · m/s,Mg*m/s,1000,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,microgram meter per second,microgram meters per second,µg · m/s,ug*m/s,0.000000001,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,milligram meter per second,milligram meters per second,mg · m/s,mg*m/s,0.000001,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,nanogram meter per second,nanogram meters per second,ng · m/s,ng*m/s,1E-12,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,petagram meter per second,petagram meters per second,Pg · m/s,Pg*m/s,1000000000000,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,picogram meter per second,picogram meters per second,pg · m/s,pg*m/s,1E-15,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,pound foot per second,pound feet per second,lb · ft/s,lb*ft/s,0.13825496352,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,pound inch per second,pound inches per second,lb · in/s,lb*in/s,0.01152124696,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,slug foot per second,slug feet per second,slug · ft/s,slug*ft/s,4.44822072,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,slug inch per second,slug inches per second,slug · in/s,slug*in/s,0.37068506,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,teragram meter per second,teragram meters per second,Tg · m/s,Tg*m/s,1000000000,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,ton meter per second,ton meters per second,t · m/s,t*m/s,1000,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,yoctogram meter per second,yoctogram meters per second,yg · m/s,yg*m/s,1E-27,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,yottagram meter per second,yottagram meters per second,Yg · m/s,Yg*m/s,1E+021,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,zeptogram meter per second,zeptogram meters per second,zg · m/s,zg*m/s,1E-24,0 +Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,zettagram meter per second,zettagram meters per second,Zg · m/s,Zg*m/s,1E+018,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,attowatt,attowatts,aW,aW,1E-18,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,centiwatt,centiwatts,cW,cW,0.01,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,decawatt,decawatts,daW,daW,10,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,deciwatt,deciwatts,dW,dW,0.1,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,erg per second,ergs per second,erg/s,erg/s,0.0000001,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,exawatt,exawatts,EW,EW,1E+018,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,femtowatt,femtowatts,fW,fW,1E-15,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,foot pound-force per hour,foot pounds-force per hour,ft · lbf/h,ft*lbf/h,0.000376616111111111,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,foot pound-force per minute,foot pounds-force per minute,ft · lbf/min,ft*lbf/min,0.0225969666666667,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,foot pound-force per second,foot pounds-force per second,ft · lbf/s,ft*lbf/s,1.355818,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,gigawatt,gigawatts,GW,GW,1000000000,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,hectowatt,hectowatts,hW,hW,100,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,horsepower,horsepower,hp,hp,745.6999,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,horsepower (boiler),horsepower (boiler),hp (S),hp (S),9809.5,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,horsepower (electric),horsepower (electric),hp (E),hp (E),746,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,horsepower (Imperial),horsepower (Imperial),hp (I),hp (I),745.7,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,metric horsepower,metric horsepower,hp (M),hp (M),735.4988,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,hydraulic horsepower,hydraulic horsepower,hp (hydraulic),hp (hydraulic),746.043,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,kilowatt,kilowatts,kW,kW,1000,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,megawatt,megawatts,MW,MW,1000000,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,microwatt,microwatts,µW,uW,0.000001,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,milliwatt,milliwatts,mW,mW,0.001,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,nanowatt,nanowatts,nW,nW,0.000000001,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,petawatt,petawatts,PW,PW,1000000000000000,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,picowatt,picowatts,pW,pW,1E-12,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,terawatt,terawatts,TW,TW,1000000000000,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,watt,watts,W,W,1,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,yoctowatt,yoctowatts,yW,yW,1E-24,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,yottawatt,yottawatts,YW,YW,1E+024,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,zeptowatt,zeptowatts,zW,zW,1E-21,0 +Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,zettawatt,zettawatts,ZW,ZW,1E+021,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,attowatt per second,attowatts per second,aW/s,aW/s,1E-18,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,centiwatt per second,centiwatts per second,cW/s,cW/s,0.01,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,decawatt per second,decawatts per second,daW/s,daW/s,10,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,deciwatt per second,deciwatts per second,dW/s,dW/s,0.1,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,erg per second squared,ergs per second squared,erg/s²,erg/s^2,0.0000001,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,exawatt per second,exawatts per second,EW/s,EW/s,1E+018,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,femtowatt per second,femtowatts per second,fW/s,fW/s,1E-15,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,foot pound-force per second squared,foot pounds-force per second squared,ft · lbf/s²,ft*lbf/s^2,1.355818,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,gigawatt per second,gigawatts per second,GW/s,GW/s,1000000000,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,hectowatt per second,hectowatts per second,hW/s,hW/s,100,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,horsepower per second,horsepower per second,hp/s,hp/s,745.6999,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,horsepower per second (boiler),horsepower per second (boiler),hp/s (S),hp/s (S),9809.5,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,horsepower per second (electric),horsepower per second (electric),hp/s (E),hp/s (E),746,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,horsepower per second (Imperial),horsepower per second (Imperial),hp/s (I),hp/s (I),745.7,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,metric horsepower per second,metric horsepower per second,hp/s (M),hp/s (M),735.4988,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,hydraulic horsepower per second,hydraulic horsepower per second,hp/s (hydraulic),hp/s (hydraulic),746.043,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,kilowatt per second,kilowatts per second,kW/s,kW/s,1000,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,megawatt per second,megawatts per second,MW/s,MW/s,1000000,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,microwatt per second,microwatts per second,µW/s,uW/s,0.000001,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,milliwatt per second,milliwatts per second,mW/s,mW/s,0.001,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,nanowatt per second,nanowatts per second,nW/s,nW/s,0.000000001,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,petawatt per second,petawatts per second,PW/s,PW/s,1000000000000000,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,picowatt per second,picowatts per second,pW/s,pW/s,1E-12,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,terawatt per second,terawatts per second,TW/s,TW/s,1000000000000,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,watt per second,watts per second,W/s,W/s,1,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,yoctowatt per second,yoctowatts per second,yW/s,yW/s,1E-24,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,yottawatt per second,yottawatts per second,YW/s,YW/s,1E+024,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,zeptowatt per second,zeptowatts per second,zW/s,zW/s,1E-21,0 +PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,zettawatt per second,zettawatts per second,ZW/s,ZW/s,1E+021,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,atmosphere,atmospheres,atm,atm,101325,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,atmosphere (technical),atmospheres (technical),at,at,98066.5,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,attopascal,attopascals,aPa,aPa,1E-18,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,bar,bar,bar,bar,100000,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,centimeter of mercury,centimeters of mercury,cm Hg,cm Hg,1333.224,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,centimeter of mercury (0 °C),centimeters of mercury (0 °C),cm Hg (0 °C),cm Hg (0 degC),1333.22,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,centimeter of water,centimeters of water,cm H₂O,cm H\2O,98.0665,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,centimeter of water (4 °C),centimeters of water (4 °C),cm H₂O (4 °C),cm H\2O (4 degC),98.0638,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,centipascal,centipascals,cPa,cPa,0.01,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,decapascal,decapascals,daPa,daPa,10,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,decipascal,decipascals,dPa,dPa,0.1,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,dyne per square centimeter,dynes per square centimeter,dyn/cm²,dyn/cm^2,0.1,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,exapascal,exapascals,EPa,EPa,1E+018,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,femtopascal,femtopascals,fPa,fPa,1E-15,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,foot of mercury,feet of mercury,ft Hg,ft Hg,40636.66,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,foot of water,feet of water,ft H₂O,ft H\2O,2989.067,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,foot of water (39.2 °F),feet of water (39.2 °F),ft H₂O (39.2 °F),ft H\2O (39.2 degF),2988.98,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,gigapascal,gigapascals,GPa,GPa,1000000000,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,gram-force per square centimeter,grams-force per square centimeter,gf/cm²,gf/cm^2,98.0665,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,hectopascal,hectopascals,hPa,hPa,100,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,inch of mercury,inches of mercury,in Hg,in Hg,3386.389,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,inch of mercury (32 °F),inches of mercury (32 °F),in Hg (32 °F),in Hg (32 degF),3386.38,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,inch of mercury (60 °F),inches of mercury (60 °F),in Hg (60 °F),in Hg (60 degF),3376.85,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,inch of water,inches of water,in H₂O,in H\2O,249.0889,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,inch of water (39.2 °F),inches of water (39.2 °F),in H₂O (39.2 °F),in H\2O (39.2 degF),249.082,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,inch of water (60 °F),inches of water (60 °F),in H₂O (60 °F),in H\2O (60 degF),248.84,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,kilogram-force per square centimeter,kilograms-force per square centimeter,kgf/cm²,kgf/cm^2,98066.5,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,kilogram-force per square meter,kilograms-force per square meter,kgf/m²,kgf/m^2,9.80665,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,kilogram-force per square millimeter,kilograms-force per square millimeter,kgf/mm²,kgf/mm^2,9806650,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,kilopascal,kilopascals,kPa,kPa,1000,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,kip per square inch,kips per square inch,kip/in²,kip/in^2,6894757.88951578,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,megapascal,megapascals,MPa,MPa,1000000,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,micropascal,micropascals,µPa,uPa,0.000001,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,millibar,millibar,mbar,mbar,100,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,millimeter of mercury,millimeters of mercury,mm Hg,mm Hg,133.3224,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,millimeter of water,millimeters of water,mm H₂O,mm H\2O,9.80665,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,millipascal,millipascals,mPa,mPa,0.001,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,millitorr,millitorr,mTorr,mTorr,0.1333224,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,nanopascal,nanopascals,nPa,nPa,0.000000001,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,newton per square millimeter,newtons per square millimeter,N/mm²,N/mm^2,1000000,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,pascal,pascals,Pa,Pa,1,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,petapascal,petapascals,PPa,PPa,1000000000000000,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,picopascal,picopascals,pPa,pPa,1E-12,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,pound-force per square foot,pounds-force per square foot,lbf/ft²,lbf/ft^2,47.8802631216374,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,pound-force per square inch,pounds-force per square inch,lbf/in²,lbf/in^2,6894.75788951578,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,poundal per square foot,poundals per square foot,pdl/ft²,pdl/ft^2,1.4881644346622,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,pound-force per square inch,pounds-force per square inch,psi,psi,6894.757,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,terapascal,terapascals,TPa,TPa,1000000000000,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,torr,torr,Torr,Torr,133.3224,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,yoctopascal,yoctopascals,yPa,yPa,1E-24,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,yottapascal,yottapascals,YPa,YPa,1E+024,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,zeptopascal,zeptopascals,zPa,zPa,1E-21,0 +Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,zettapascal,zettapascals,ZPa,ZPa,1E+021,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,attojoule per square meter,attojoules per square meter,aJ/m²,aJ/m^2,1E-18,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,centijoule per square centimeter,centijoules per square centimeter,cJ/cm²,cJ/cm^2,100,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,centijoule per square meter,centijoules per square meter,cJ/m²,cJ/m^2,0.01,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,centijoule per square millimeter,centijoules per square millimeter,cJ/mm²,cJ/mm^2,10000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,decajoule per square centimeter,decajoules per square centimeter,daJ/cm²,daJ/cm^2,100000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,decajoule per square meter,decajoules per square meter,daJ/m²,daJ/m^2,10,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,decajoule per square millimeter,decajoules per square millimeter,daJ/mm²,daJ/mm^2,10000000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,decijoule per square centimeter,decijoules per square centimeter,dJ/cm²,dJ/cm^2,1000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,decijoule per square meter,decijoules per square meter,dJ/m²,dJ/m^2,0.1,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,decijoule per square millimeter,decijoules per square millimeter,dJ/mm²,dJ/mm^2,100000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,exajoule per square meter,exajoules per square meter,EJ/m²,EJ/m^2,1E+018,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,femtojoule per square meter,femtojoules per square meter,fJ/m²,fJ/m^2,1E-15,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,gigajoule per square centimeter,gigajoules per square centimeter,GJ/cm²,GJ/cm^2,10000000000000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,gigajoule per square meter,gigajoules per square meter,GJ/m²,GJ/m^2,1000000000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,gigajoule per square millimeter,gigajoules per square millimeter,GJ/mm²,GJ/mm^2,1000000000000000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,hectojoule per square centimeter,hectojoules per square centimeter,hJ/cm²,hJ/cm^2,1000000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,hectojoule per square meter,hectojoules per square meter,hJ/m²,hJ/m^2,100,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,hectojoule per square millimeter,hectojoules per square millimeter,hJ/mm²,hJ/mm^2,100000000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,joule per square centimeter,joules per square centimeter,J/cm²,J/cm^2,10000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,joule per square meter,joules per square meter,J/m²,J/m^2,1,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,joule per square millimeter,joules per square millimeter,J/mm²,J/mm^2,1000000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,kilojoule per square centimeter,kilojoules per square centimeter,kJ/cm²,kJ/cm^2,10000000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,kilojoule per square meter,kilojoules per square meter,kJ/m²,kJ/m^2,1000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,kilojoule per square millimeter,kilojoules per square millimeter,kJ/mm²,kJ/mm^2,1000000000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,megajoule per square centimeter,megajoules per square centimeter,MJ/cm²,MJ/cm^2,10000000000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,megajoule per square meter,megajoules per square meter,MJ/m²,MJ/m^2,1000000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,megajoule per square millimeter,megajoules per square millimeter,MJ/mm²,MJ/mm^2,1000000000000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,microjoule per square centimeter,microjoules per square centimeter,µJ/cm²,uJ/cm^2,0.01,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,microjoule per square meter,microjoules per square meter,µJ/m²,uJ/m^2,0.000001,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,microjoule per square millimeter,microjoules per square millimeter,µJ/mm²,uJ/mm^2,1,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,millijoule per square centimeter,millijoules per square centimeter,mJ/cm²,mJ/cm^2,10,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,millijoule per square meter,millijoules per square meter,mJ/m²,mJ/m^2,0.001,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,millijoule per square millimeter,millijoules per square millimeter,mJ/mm²,mJ/mm^2,1000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,nanojoule per square centimeter,nanojoules per square centimeter,nJ/cm²,nJ/cm^2,0.00001,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,nanojoule per square meter,nanojoules per square meter,nJ/m²,nJ/m^2,0.000000001,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,nanojoule per square millimeter,nanojoules per square millimeter,nJ/mm²,nJ/mm^2,0.001,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,petajoule per square meter,petajoules per square meter,PJ/m²,PJ/m^2,1000000000000000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,picojoule per square meter,picojoules per square meter,pJ/m²,pJ/m^2,1E-12,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,terajoule per square meter,terajoules per square meter,TJ/m²,TJ/m^2,1000000000000,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,yoctojoule per square meter,yoctojoules per square meter,yJ/m²,yJ/m^2,1E-24,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,yottajoule per square meter,yottajoules per square meter,YJ/m²,YJ/m^2,1E+024,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,zeptojoule per square meter,zeptojoules per square meter,zJ/m²,zJ/m^2,1E-21,0 +RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,zettajoule per square meter,zettajoules per square meter,ZJ/m²,ZJ/m^2,1E+021,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,becquerel,becquerels,Bq,Bq,1,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,curie,curies,Ci,Ci,37000000000,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,decabecquerel,decabecquerels,daBq,daBq,10,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,disintegration per minute,disintegrations per minute,dpm,dpm,0.0166666666666667,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,exabecquerel,exabecquerels,EBq,EBq,1E+018,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,gigabecquerel,gigabecquerels,GBq,GBq,1000000000,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,gigacurie,gigacuries,GCi,GCi,3.7E+019,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,hectobecquerel,hectobecquerels,hBq,hBq,100,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,kilobecquerel,kilobecquerels,kBq,kBq,1000,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,kilocurie,kilocuries,kCi,kCi,37000000000000,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,megabecquerel,megabecquerels,MBq,MBq,1000000,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,megacurie,megacuries,MCi,MCi,3.7E+016,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,microbecquerel,microbecquerels,µBq,uBq,0.000001,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,microcurie,microcuries,µCi,uCi,37000,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,millibecquerel,millibecquerels,mBq,mBq,0.001,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,millicurie,millicuries,mCi,mCi,37000000,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,nanobecquerel,nanobecquerels,nBq,nBq,0.000000001,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,nanocurie,nanocuries,nCi,nCi,37,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,petabecquerel,petabecquerels,PBq,PBq,1000000000000000,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,terabecquerel,terabecquerels,TBq,TBq,1000000000000,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,yottabecquerel,yottabecquerels,YBq,YBq,1E+024,0 +Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,zettabecquerel,zettabecquerels,ZBq,ZBq,1E+021,0 +Number,0,0,0,0,0,0,0,false,false,false,false,false,false,basis point,basis points,bp,bp,0.0001,0 +Number,0,0,0,0,0,0,0,false,false,false,false,false,false,part per billion,parts per billion,ppb,ppb,0.000000001,0 +Number,0,0,0,0,0,0,0,false,false,false,false,false,false,part per hundred,parts per hundred,parts per hundred,parts per hundred,0.01,0 +Number,0,0,0,0,0,0,0,false,false,false,false,false,false,part per million,parts per million,ppm,ppm (ratio),0.000001,0 +Number,0,0,0,0,0,0,0,false,false,false,false,false,false,part per quadrillion,parts per quadrillion,ppq,ppq,1E-15,0 +Number,0,0,0,0,0,0,0,false,false,false,false,false,false,part per then thousand,parts per ten thousand,parts per ten thousand,parts per ten thousand,0.0001,0 +Number,0,0,0,0,0,0,0,false,false,false,false,false,false,part per thousand,parts per thousand,parts per thousand,parts per thousand,0.001,0 +Number,0,0,0,0,0,0,0,false,false,false,false,false,false,part per trillion,parts per trillion,ppt,ppt,1E-12,0 +Number,0,0,0,0,0,0,0,false,false,false,false,false,false,per mille,per mille,‰,%\0,0.001,0 +Number,0,0,0,0,0,0,0,false,false,false,false,false,false,percent,percent,%,%,0.01,0 +Number,0,0,0,0,0,0,0,false,false,false,false,false,false,number,number,,,1,0 +ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,diopter,diopters,dpt,dpt,1,0 +ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal ångström,reciprocal ångströms,Å⁻¹,ang^-1,10000000000,0 +ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal centimeter,reciprocal centimeters,cm⁻¹,cm^-1,100,0 +ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal decimeter,reciprocal decimeters,dm⁻¹,dm^-1,10,0 +ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal kilometer,reciprocal kilometers,km⁻¹,km^-1,0.001,0 +ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal meter,reciprocal meters,m⁻¹,m^-1,1,0 +ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal micrometer,reciprocal micrometers,µm⁻¹,um^-1,1000000,0 +ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal millimeter,reciprocal millimeters,mm⁻¹,mm^-1,1000,0 +ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal nanometer,reciprocal nanometers,nm⁻¹,nm^-1,1000000000,0 +ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,Rydberg constant,Rydberg constants,R∞,Rinfinity,10973731.56816,0 +SolidAngle,2,-1,0,0,0,0,0,false,false,false,true,false,false,spat,spats,sp,sp,12.5663706143592,0 +SolidAngle,2,-1,0,0,0,0,0,false,false,false,true,false,false,square degree,square degrees,°²,deg^2,0.000304617419786709,0 +SolidAngle,2,-1,0,0,0,0,0,false,false,false,true,false,false,square minute,square minutes,′²,angle_minute^2,8.46159499407524E-08,0 +SolidAngle,2,-1,0,0,0,0,0,false,false,false,true,false,false,square second,square seconds,″²,angle_second^2,2.35044305390979E-11,0 +SolidAngle,2,-1,0,0,0,0,0,false,false,false,true,false,false,steradian,steradians,sr,sr,1,0 +SpecificArea,2,-1,0,0,0,0,0,false,false,false,false,false,false,square centimeter per gram,square centimeters per gram,cm²/g,cm^2/g,0.1,0 +SpecificArea,2,-1,0,0,0,0,0,false,false,false,false,false,false,square centimeter per kilogram,square centimeters per kilogram,cm²/kg,cm^2/kg,0.0001,0 +SpecificArea,2,-1,0,0,0,0,0,false,false,false,false,false,false,square meter per gram,square meters per gram,m²/g,m^2/g,1000,0 +SpecificArea,2,-1,0,0,0,0,0,false,false,false,false,false,false,square meter per kilogram,square meters per kilogram,m²/kg,m^2/kg,1,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,attojoule per kilogram kelvin,attojoules per kilogram kelvin,aJ/(kg · K),aJ/(kg*K),1E-18,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per ounce degree Fahrenheit,British thermal units (IT) per ounce degree Fahrenheit,Btu (IT)/(oz · °F),Btu (IT)/(oz*degF),66988.8167418708,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per pound degree Fahrenheit,British thermal units (IT) per pound degree Fahrenheit,Btu (IT)/(lb · °F),Btu (IT)/(lb*degF),4186.80030794167,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per ton degree Fahrenheit,British thermal units (IT) per ton degree Fahrenheit,Btu (IT)/(t · °F),Btu (IT)/(t*degF),1.8991008,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,British thermal unit per ounce degree Fahrenheit,British thermal units per ounce degree Fahrenheit,Btu/(oz · °F),Btu/(oz*degF),66943.990586084,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,British thermal unit per pound degree Fahrenheit,British thermal units per pound degree Fahrenheit,Btu/(lb · °F),Btu/(lb*degF),4183.99867369912,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,British thermal unit per ton degree Fahrenheit,British thermal units per ton degree Fahrenheit,Btu/(t · °F),Btu/(t*degF),1.89783,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,calorie per gram kelvin,calories per gram kelvin,cal/(g · K),cal/(g*K),4184,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,calorie per kilogram kelvin,calories per kilogram kelvin,cal/(kg · K),cal/(kg*K),4.184,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,centijoule per kilogram kelvin,centijoules per kilogram kelvin,cJ/(kg · K),cJ/(kg*K),0.01,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,decajoule per kilogram kelvin,decajoules per kilogram kelvin,daJ/(kg · K),daJ/(kg*K),10,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,decijoule per kilogram kelvin,decijoules per kilogram kelvin,dJ/(kg · K),dJ/(kg*K),0.1,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,exajoule per kilogram kelvin,exajoules per kilogram kelvin,EJ/(kg · K),EJ/(kg*K),1E+018,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,femtojoule per kilogram kelvin,femtojoules per kilogram kelvin,fJ/(kg · K),fJ/(kg*K),1E-15,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,gigajoule per kilogram kelvin,gigajoules per kilogram kelvin,GJ/(kg · K),GJ/(kg*K),1000000000,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,hectojoule per kilogram kelvin,hectojoules per kilogram kelvin,hJ/(kg · K),hJ/(kg*K),100,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,joule per gram degree celsius,joules per gram degree celsius,J/(g · °C),J/(g*degC),1000,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,joule per kilogram degree celsius,joules per kilogram degree celsius,J/(kg · °C),J/(kg*degC),1,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,joule per kilogram kelvin,joules per kilogram kelvin,J/(kg · K),J/(kg*K),1,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,kilojoule per gram degree celsius,kilojoules per gram degree celsius,kJ/(g · °C),kJ/(g*degC),1000000,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,kilojoule per kilogram degree celsius,kilojoules per kilogram degree celsius,kJ/(kg · °C),kJ/(kg*degC),1000,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,kilojoule per kilogram kelvin,kilojoules per kilogram kelvin,kJ/(kg · K),kJ/(kg*K),1000,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,megajoule per kilogram kelvin,megajoules per kilogram kelvin,MJ/(kg · K),MJ/(kg*K),1000000,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,microjoule per kilogram kelvin,microjoules per kilogram kelvin,µJ/(kg · K),uJ/(kg*K),0.000001,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,millijoule per gram degree celsius,millijoules per gram degree celsius,mJ/(g · °C),mJ/(g*degC),1,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,millijoule per kilogram degree celsius,millijoules per kilogram degree celsius,mJ/(kg · °C),mJ/(kg*degC),0.001,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,millijoule per kilogram kelvin,millijoules per kilogram kelvin,mJ/(kg · K),mJ/(kg*K),0.001,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,nanojoule per kilogram kelvin,nanojoules per kilogram kelvin,nJ/(kg · K),nJ/(kg*K),0.000000001,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,petajoule per kilogram kelvin,petajoules per kilogram kelvin,PJ/(kg · K),PJ/(kg*K),1000000000000000,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,picojoule per kilogram kelvin,picojoules per kilogram kelvin,pJ/(kg · K),pJ/(kg*K),1E-12,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,square centimeter per second squared kelvin,square centimeters per second squared kelvin,cm²/(s² · K),cm^2/(s^2*K),0.0001,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,square kilometer per second squared kelvin,square kilometers per second squared kelvin,km²/(s² · K),km^2/(s^2*K),1000000,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,square meter per second squared kelvin,square meters per second squared kelvin,m²/(s² · K),m^2/(s^2*K),1,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,square micrometer per second squared kelvin,square micrometers per second squared kelvin,µm²/(s² · K),um^2/(s^2*K),1E-12,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,square millimeter per second squared kelvin,square millimeters per second squared kelvin,mm²/(s² · K),mm^2/(s^2*K),0.000001,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,terajoule per kilogram kelvin,terajoules per kilogram kelvin,TJ/(kg · K),TJ/(kg*K),1000000000000,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,yoctojoule per kilogram kelvin,yoctojoules per kilogram kelvin,yJ/(kg · K),yJ/(kg*K),1E-24,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,yottajoule per kilogram kelvin,yottajoules per kilogram kelvin,YJ/(kg · K),YJ/(kg*K),1E+024,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,zeptojoule per kilogram kelvin,zeptojoules per kilogram kelvin,zJ/(kg · K),zJ/(kg*K),1E-21,0 +SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,zettajoule per kilogram kelvin,zettajoules per kilogram kelvin,ZJ/(kg · K),ZJ/(kg*K),1E+021,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,attowatt per kilogram,attowatts per kilogram,aW/kg,aW/kg,1E-18,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,centiwatt per kilogram,centiwatts per kilogram,cW/kg,cW/kg,0.01,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,decawatt per kilogram,decawatts per kilogram,daW/kg,daW/kg,10,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,deciwatt per kilogram,deciwatts per kilogram,dW/kg,dW/kg,0.1,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,erg per second per kilogram,ergs per second per kilogram,(erg/s)/kg,(erg/s)/kg,0.0000001,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,exawatt per kilogram,exawatts per kilogram,EW/kg,EW/kg,1E+018,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,femtowatt per kilogram,femtowatts per kilogram,fW/kg,fW/kg,1E-15,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,foot pound-force per hour per pound,foot pounds-force per hour per pound,(ft · lbf/h)/lb,(ft*lbf/h)/lb,0.000830296343393565,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,foot pound-force per minute per pound,foot pounds-force per minute per pound,(ft · lbf/min)/lb,(ft*lbf/min)/lb,0.0498177806036139,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,foot pound-force per second per pound,foot pounds-force per second per pound,(ft · lbf/s)/lb,(ft*lbf/s)/lb,2.98906683621683,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,gigawatt per kilogram,gigawatts per kilogram,GW/kg,GW/kg,1000000000,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,hectowatt per kilogram,hectowatts per kilogram,hW/kg,hW/kg,100,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,horsepower (boiler) per pound,horsepower (boiler) per pound,(hp (S))/lb,(hp (S))/lb,21626.2441786944,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,horsepower (electric) per pound,horsepower (electric) per pound,(hp (E))/lb,(hp (E))/lb,1644.64836712432,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,horsepower (Imperial) per pound,horsepower (Imperial) per pound,(hp (I))/lb,(hp (I))/lb,1643.98698038151,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,metric horsepower per pound,metric horsepower per pound,(hp (M))/lb,(hp (M))/lb,1621.49718557895,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,horsepower per pound,horsepower per pound,hp/lb,hp/lb,1643.98675991926,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,hydraulic horsepower per pound,hydraulic horsepower per pound,(hp (hydraulic))/lb,(hp (hydraulic))/lb,1644.74316589079,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,kilowatt per kilogram,kilowatts per kilogram,kW/kg,kW/kg,1000,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,megawatt per kilogram,megawatts per kilogram,MW/kg,MW/kg,1000000,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,microwatt per kilogram,microwatts per kilogram,µW/kg,uW/kg,0.000001,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,milliwatt per kilogram,milliwatts per kilogram,mW/kg,mW/kg,0.001,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,nanowatt per kilogram,nanowatts per kilogram,nW/kg,nW/kg,0.000000001,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,petawatt per kilogram,petawatts per kilogram,PW/kg,PW/kg,1000000000000000,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,picowatt per kilogram,picowatts per kilogram,pW/kg,pW/kg,1E-12,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,square meter per cubic second,square meters per cubic second,m² · s⁻³,m^2*s^-3,1,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,terawatt per kilogram,terawatts per kilogram,TW/kg,TW/kg,1000000000000,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,watt per kilogram,watts per kilogram,W/kg,W/kg,1,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,yoctowatt per kilogram,yoctowatts per kilogram,yW/kg,yW/kg,1E-24,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,yottawatt per kilogram,yottawatts per kilogram,YW/kg,YW/kg,1E+024,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,zeptowatt per kilogram,zeptowatts per kilogram,zW/kg,zW/kg,1E-21,0 +SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,zettawatt per kilogram,zettawatts per kilogram,ZW/kg,ZW/kg,1E+021,0 +SpecificRadioactivity,0,-1,-1,0,0,0,0,false,true,false,false,false,false,becquerel per kilogram,becquerels per kilogram,Bq/kg,Bq/kg,1,0 +SpecificRadioactivity,0,-1,-1,0,0,0,0,false,true,false,false,false,false,curie per kilogram,curie per kilogram,Ci/kg,Ci/kg,37000000000,0 +SpecificRadioactivity,0,-1,-1,0,0,0,0,false,true,false,false,false,false,disintegration per minute per kilogram,disintegrations per minute per kilogram,dpm/kg,dpm/kg,0.0166666666666667,0 +SpecificVolume,3,-1,0,0,0,0,0,false,false,false,false,false,false,cubic centimeter per gram,cubic centimeters per gram,cm³/g,cm^3/g,0.001,0 +SpecificVolume,3,-1,0,0,0,0,0,false,false,false,false,false,false,cubic centimeter per kilogram,cubic centimeters per kilogram,cm³/kg,cm^3/kg,0.000001,0 +SpecificVolume,3,-1,0,0,0,0,0,false,false,false,false,false,false,cubic meter per gram,cubic meters per gram,m³/g,m^3/g,1000,0 +SpecificVolume,3,-1,0,0,0,0,0,false,false,false,false,false,false,cubic meter per kilogram,cubic meters per kilogram,m³/kg,m^3/kg,1,0 +SurfaceElectricCurrentDensity,-1,0,0,1,0,0,0,false,true,false,false,false,false,ampere per centimeter,amperes per centimeter,A/cm,A/cm (surface density),100,0 +SurfaceElectricCurrentDensity,-1,0,0,1,0,0,0,false,true,false,false,false,false,ampere per meter,amperes per meter,A/m,A/m (surface density),1,0 +SurfaceElectricCurrentDensity,-1,0,0,1,0,0,0,false,true,false,false,false,false,ampere per micrometer,amperes per micrometer,A/μm,A/um (surface density),1000000,0 +SurfaceElectricCurrentDensity,-1,0,0,1,0,0,0,false,true,false,false,false,false,ampere per millimeter,amperes per millimeter,A/mm,A/mm (surface density),1000,0 +TemperatureCoefficient,0,0,0,0,-1,0,0,false,false,false,false,false,false,per kelvin,per kelvin,K⁻¹,K^-1,1,0 +TemperatureCoefficient,0,0,0,0,-1,0,0,false,false,false,false,false,false,ppm per degree Celsius,ppm per degree Celsius,ppm/°C,ppm/degC,0.000001,0 +TemperatureCoefficient,0,0,0,0,-1,0,0,false,false,false,false,false,false,ppm per kelvin,ppm per kelvin,ppm/K,ppm/K,0.000001,0 +TemperatureGradient,-1,0,0,0,1,0,0,false,false,false,false,false,false,kelvin per centimeter,kelvins per centimeter,K/cm,K/cm,100,0 +TemperatureGradient,-1,0,0,0,1,0,0,false,false,false,false,false,false,kelvin per hectometer,kelvins per hectometer,K/hm,K/hm,0.01,0 +TemperatureGradient,-1,0,0,0,1,0,0,false,false,false,false,false,false,kelvin per kilometer,kelvins per kilometer,K/km,K/km,0.001,0 +TemperatureGradient,-1,0,0,0,1,0,0,false,false,false,false,false,false,kelvin per meter,kelvins per meter,K/m,K/m,1,0 +TemperatureGradient,-1,0,0,0,1,0,0,false,false,false,false,false,false,kelvin per micrometer,kelvins per micrometer,K/µm,K/um,1000000,0 +TemperatureGradient,-1,0,0,0,1,0,0,false,false,false,false,false,false,kelvin per millimeter,kelvins per millimeter,K/mm,K/mm,1000,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,attokelvin,attokelvins,aK,aK (interval),1E-18,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,centikelvin,centikelvins,cK,cK (interval),0.01,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,decakelvin,decakelvins,daK,daK (interval),10,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,decikelvin,decikelvins,dK,dK (interval),0.1,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,degree Celsius,degrees Celsius,°C,degC (interval),1,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,degree Fahrenheit,degrees Fahrenheit,°F,degF (interval),0.555555555555556,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,degree Rankine,degrees Rankine,°R,degR (interval),0.555555555555556,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,exakelvin,exakelvins,EK,EK (interval),1E+018,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,femtokelvin,femtokelvins,fK,fK (interval),1E-15,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,gigakelvin,gigakelvins,GK,GK (interval),1000000000,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,hectokelvin,hectokelvins,hK,hK (interval),100,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,kelvin,kelvins,K,K (interval),1,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,kilokelvin,kilokelvins,kK,kK (interval),1000,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,megakelvin,megakelvins,MK,MK (interval),1000000,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,microkelvin,microkelvins,µK,uK (interval),0.000001,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,millikelvin,millikelvins,mK,mK (interval),0.001,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,nanokelvin,nanokelvins,nK,nK (interval),0.000000001,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,petakelvin,petakelvins,PK,PK (interval),1000000000000000,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,picokelvin,picokelvins,pK,pK (interval),1E-12,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,terakelvin,terakelvins,TK,TK (interval),1000000000000,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,yoctokelvin,yoctokelvins,yK,yK (interval),1E-24,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,yottakelvin,yottakelvins,YK,YK (interval),1E+024,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,zeptokelvin,zeptokelvins,zK,zK (interval),1E-21,0 +TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,zettakelvin,zettakelvins,ZK,ZK (interval),1E+021,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,attogram meter squared per second cubed kelvin,attograms meter squared per second cubed kelvin,ag · m²/(s³ · K),ag*m^2/(s^3*K),1E-21,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,attowatt per kelvin,attowatts per kelvin,aW/K,aW/K,1E-18,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,centigram meter squared per second cubed kelvin,centigrams meter squared per second cubed kelvin,cg · m²/(s³ · K),cg*m^2/(s^3*K),0.00001,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,centiwatt per kelvin,centiwatts per kelvin,cW/K,cW/K,0.01,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,decagram meter squared per second cubed kelvin,decagrams meter squared per second cubed kelvin,dag · m²/(s³ · K),dag*m^2/(s^3*K),0.01,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,decawatt per kelvin,decawatts per kelvin,daW/K,daW/K,10,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,decigram meter squared per second cubed kelvin,decigrams meter squared per second cubed kelvin,dg · m²/(s³ · K),dg*m^2/(s^3*K),0.0001,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,deciwatt per kelvin,deciwatts per kelvin,dW/K,dW/K,0.1,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,exagram meter squared per second cubed kelvin,exagrams meter squared per second cubed kelvin,Eg · m²/(s³ · K),Eg*m^2/(s^3*K),1000000000000000,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,exawatt per kelvin,exawatts per kelvin,EW/K,EW/K,1E+018,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,femtogram meter squared per second cubed kelvin,femtograms meter squared per second cubed kelvin,fg · m²/(s³ · K),fg*m^2/(s^3*K),1E-18,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,femtowatt per kelvin,femtowatts per kelvin,fW/K,fW/K,1E-15,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,gigagram meter squared per second cubed kelvin,gigagrams meter squared per second cubed kelvin,Gg · m²/(s³ · K),Gg*m^2/(s^3*K),1000000,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,gigawatt per kelvin,gigawatts per kelvin,GW/K,GW/K,1000000000,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,gram meter squared per second cubed kelvin,grams meter squared per second cubed kelvin,g · m/(s³ · K),g*m/(s^3*K),0.001,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,hectogram meter squared per second cubed kelvin,hectograms meter squared per second cubed kelvin,hg · m²/(s³ · K),hg*m^2/(s^3*K),0.1,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,hectowatt per kelvin,hectowatts per kelvin,hW/K,hW/K,100,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,kilogram meter squared per second cubed degree Celsius,kilograms meter squared per second cubed degree Celsius,kg · m²/(s³ · °C),kg*m^2/(s^3*degC),1,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,kilogram meter squared per second cubed kelvin,kilograms meter squared per second cubed kelvin,kg · m²/(s³ · K),kg*m^2/(s^3*K),1,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,kilowatt per degree Celsius,kilowatts per degree Celsius,kW/°C,kW/degC,1000,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,kilowatt per kelvin,kilowatts per kelvin,kW/K,kW/K,1000,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,megagram meter squared per second cubed kelvin,megagrams meter squared per second cubed kelvin,Mg · m²/(s³ · K),Mg*m^2/(s^3*K),1000,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,megawatt per kelvin,megawatts per kelvin,MW/K,MW/K,1000000,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,microgram meter squared per second cubed kelvin,micrograms meter squared per second cubed kelvin,µg · m/(s³ · K),ug*m/(s^3*K),0.000000001,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,microwatt per kelvin,microwatts per kelvin,µW/K,uW/K,0.000001,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,milligram meter squared per second cubed kelvin,milligrams meter squared per second cubed kelvin,mg · m²/(s³ · K),mg*m^2/(s^3*K),0.000001,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,milliwatt per degree Celsius,milliwatts per degree Celsius,mW/°C,mW/degC,0.001,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,milliwatt per kelvin,milliwatts per kelvin,mW/K,mW/K,0.001,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,nanogram meter squared per second cubed kelvin,nanograms meter squared per second cubed kelvin,ng · m²/(s³ · K),ng*m^2/(s^3*K),1E-12,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,nanowatt per kelvin,nanowatts per kelvin,nW/K,nW/K,0.000000001,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,petagram meter squared per second cubed kelvin,petagrams meter squared per second cubed kelvin,Pg · m²/(s³ · K),Pg*m^2/(s^3*K),1000000000000,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,petawatt per kelvin,petawatts per kelvin,PW/K,PW/K,1000000000000000,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,picogram meter squared per second cubed kelvin,picograms meter squared per second cubed kelvin,pg · m²/(s³ · K),pg*m^2/(s^3*K),1E-15,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,picowatt per kelvin,picowatts per kelvin,pW/K,pW/K,1E-12,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,teragram meter squared per second cubed kelvin,teragrams meter squared per second cubed kelvin,Tg · m²/(s³ · K),Tg*m^2/(s^3*K),1000000000,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,terawatt per kelvin,terawatts per kelvin,TW/K,TW/K,1000000000000,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per kelvin,watts per kelvin,W/K,W/K,1,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per degree Celsius,watts per degree Celsius,W/°C,W/degC,1,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,yoctogram meter squared per second cubed kelvin,yoctograms meter squared per second cubed kelvin,yg · m²/(s³ · K),yg*m^2/(s^3*K),1E-27,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,yoctowatt per kelvin,yoctowatts per kelvin,yW/K,yW/K,1E-24,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,yottagram meter squared per second cubed kelvin,yottagrams meter squared per second cubed kelvin,Yg · m²/(s³ · K),Yg*m^2/(s^3*K),1E+021,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,yottawatt per kelvin,yottawatts per kelvin,YW/K,YW/K,1E+024,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,zeptogram meter squared per second cubed kelvin,zeptograms meter squared per second cubed kelvin,zg · m²/(s³ · K),zg*m^2/(s^3*K),1E-24,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,zeptowatt per kelvin,zeptowatts per kelvin,zW/K,zW/K,1E-21,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,zettagram meter squared per second cubed kelvin,zettagrams meter squared per second cubed kelvin,Zg · m²/(s³ · K),Zg*m^2/(s^3*K),1E+018,0 +ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,zettawatt per kelvin,zettawatts per kelvin,ZW/K,ZW/K,1E+021,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,attogram meter per second cubed kelvin,attograms meter per second cubed kelvin,ag · m/(s³ · K),ag*m/(s^3*K),1E-21,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,attowatt per meter kelvin,attowatts per meter kelvin,aW/(m · K),aW/(m*K),1E-18,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,centigram meter per second cubed kelvin,centigrams meter per second cubed kelvin,cg · m/(s³ · K),cg*m/(s^3*K),0.00001,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,centiwatt per meter kelvin,centiwatts per meter kelvin,cW/(m · K),cW/(m*K),0.01,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,decagram meter per second cubed kelvin,decagrams meter per second cubed kelvin,dag · m/(s³ · K),dag*m/(s^3*K),0.01,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,decawatt per meter kelvin,decawatts per meter kelvin,daW/(m · K),daW/(m*K),10,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,decigram meter per second cubed kelvin,decigrams meter per second cubed kelvin,dg · m/(s³ · K),dg*m/(s^3*K),0.0001,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,deciwatt per meter kelvin,deciwatts per meter kelvin,dW/(m · K),dW/(m*K),0.1,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,exagram meter per second cubed kelvin,exagrams meter per second cubed kelvin,Eg · m/(s³ · K),Eg*m/(s^3*K),1000000000000000,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,exawatt per meter kelvin,exawatts per meter kelvin,EW/(m · K),EW/(m*K),1E+018,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,femtogram meter per second cubed kelvin,femtograms meter per second cubed kelvin,fg · m/(s³ · K),fg*m/(s^3*K),1E-18,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,femtowatt per meter kelvin,femtowatts per meter kelvin,fW/(m · K),fW/(m*K),1E-15,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,gigagram meter per second cubed kelvin,gigagrams meter per second cubed kelvin,Gg · m/(s³ · K),Gg*m/(s^3*K),1000000,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,gigawatt per meter kelvin,gigawatts per meter kelvin,GW/(m · K),GW/(m*K),1000000000,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,gram meter per second cubed kelvin,grams meter per second cubed kelvin,g · m/(s³ · K),g*m/(s^3*K) (conductivity),0.001,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,hectogram meter per second cubed kelvin,hectograms meter per second cubed kelvin,hg · m/(s³ · K),hg*m/(s^3*K),0.1,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,hectowatt per meter kelvin,hectowatts per meter kelvin,hW/(m · K),hW/(m*K),100,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,kilogram meter per second cubed degree celsius,kilograms meter per second cubed degree celsius,kg · m/(s³ · °C),kg*m/(s^3*degC),1,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,kilogram meter per second cubed kelvin,kilograms meter per second cubed kelvin,kg · m/(s³ · K),kg*m/(s^3*K),1,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,kilowatt per meter degree celsius,kilowatts per meter degree celsius,kW/(m · °C),kW/(m*degC),1000,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,kilowatt per meter kelvin,kilowatts per meter kelvin,kW/(m · K),kW/(m*K),1000,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,megagram meter per second cubed kelvin,megagrams meter per second cubed kelvin,Mg · m/(s³ · K),Mg*m/(s^3*K),1000,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,megawatt per meter kelvin,megawatts per meter kelvin,MW/(m · K),MW/(m*K),1000000,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,microgram meter per second cubed kelvin,micrograms meter per second cubed kelvin,µg · m/(s³ · K),ug*m/(s^3*K) (conductivity),0.000000001,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,microwatt per meter kelvin,microwatts per meter kelvin,µW/(m · K),uW/(m*K),0.000001,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,milligram meter per second cubed kelvin,milligrams meter per second cubed kelvin,mg · m/(s³ · K),mg*m/(s^3*K),0.000001,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,milliwatt per meter degree celsius,milliwatts per meter degree celsius,mW/(m · °C),mW/(m*degC),0.001,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,milliwatt per meter kelvin,milliwatts per meter kelvin,mW/(m · K),mW/(m*K),0.001,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,nanogram meter per second cubed kelvin,nanograms meter per second cubed kelvin,ng · m/(s³ · K),ng*m/(s^3*K),1E-12,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,nanowatt per meter kelvin,nanowatts per meter kelvin,nW/(m · K),nW/(m*K),0.000000001,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,petagram meter per second cubed kelvin,petagrams meter per second cubed kelvin,Pg · m/(s³ · K),Pg*m/(s^3*K),1000000000000,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,petawatt per meter kelvin,petawatts per meter kelvin,PW/(m · K),PW/(m*K),1000000000000000,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,picogram meter per second cubed kelvin,picograms meter per second cubed kelvin,pg · m/(s³ · K),pg*m/(s^3*K),1E-15,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,picowatt per meter kelvin,picowatts per meter kelvin,pW/(m · K),pW/(m*K),1E-12,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,teragram meter per second cubed kelvin,teragrams meter per second cubed kelvin,Tg · m/(s³ · K),Tg*m/(s^3*K),1000000000,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,terawatt per meter kelvin,terawatts per meter kelvin,TW/(m · K),TW/(m*K),1000000000000,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per meter degree celsius,watts per meter degree celsius,W/(m · °C),W/(m*degC),1,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per meter kelvin,watts per meter kelvin,W/(m · K),W/(m*K),1,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,yoctogram meter per second cubed kelvin,yoctograms meter per second cubed kelvin,yg · m/(s³ · K),yg*m/(s^3*K),1E-27,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,yoctowatt per meter kelvin,yoctowatts per meter kelvin,yW/(m · K),yW/(m*K),1E-24,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,yottagram meter per second cubed kelvin,yottagrams meter per second cubed kelvin,Yg · m/(s³ · K),Yg*m/(s^3*K),1E+021,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,yottawatt per meter kelvin,yottawatts per meter kelvin,YW/(m · K),YW/(m*K),1E+024,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,zeptogram meter per second cubed kelvin,zeptograms meter per second cubed kelvin,zg · m/(s³ · K),zg*m/(s^3*K),1E-24,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,zeptowatt per meter kelvin,zeptowatts per meter kelvin,zW/(m · K),zW/(m*K),1E-21,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,zettagram meter per second cubed kelvin,zettagrams meter per second cubed kelvin,Zg · m/(s³ · K),Zg*m/(s^3*K),1E+018,0 +ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,zettawatt per meter kelvin,zettawatts per meter kelvin,ZW/(m · K),ZW/(m*K),1E+021,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,attokelvin,attokelvins,aK,aK,1E-18,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,centikelvin,centikelvins,cK,cK,0.01,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,decakelvin,decakelvins,daK,daK,10,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,decikelvin,decikelvins,dK,dK,0.1,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,degree Celsius,degrees Celsius,°C,degC,1,273.15 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,degree Fahrenheit,degrees Fahrenheit,°F,degF,0.555555555555556,459.67 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,degree Rankine,degrees Rankine,°R,degR,0.555555555555556,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,exakelvin,exakelvins,EK,EK,1E+018,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,femtokelvin,femtokelvins,fK,fK,1E-15,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,gigakelvin,gigakelvins,GK,GK,1000000000,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,hectokelvin,hectokelvins,hK,hK,100,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,kelvin,kelvins,K,K,1,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,kilokelvin,kilokelvins,kK,kK,1000,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,megakelvin,megakelvins,MK,MK,1000000,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,microkelvin,microkelvins,µK,uK,0.000001,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,millikelvin,millikelvins,mK,mK,0.001,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,nanokelvin,nanokelvins,nK,nK,0.000000001,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,petakelvin,petakelvins,PK,PK,1000000000000000,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,picokelvin,picokelvins,pK,pK,1E-12,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,terakelvin,terakelvins,TK,TK,1000000000000,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,yoctokelvin,yoctokelvins,yK,yK,1E-24,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,yottakelvin,yottakelvins,YK,YK,1E+024,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,zeptokelvin,zeptokelvins,zK,zK,1E-21,0 +ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,zettakelvin,zettakelvins,ZK,ZK,1E+021,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,attosecond,attoseconds,as,as,1E-18,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,centisecond,centiseconds,cs,cs,0.01,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,day,days,d,d,86400,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,day (sidereal),days (sidereal),d (sidereal),d (sidereal),86164.09,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,decasecond,decaseconds,das,das,10,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,decisecond,deciseconds,ds,ds,0.1,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,exasecond,exaseconds,Es,Es,1E+018,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,femtosecond,femtoseconds,fs,fs,1E-15,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,gigasecond,gigaseconds,Gs,Gs,1000000000,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,hectosecond,hectoseconds,hs,hs,100,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,hour,hours,h,h,3600,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,hour (sidereal),hours (sidereal),h (sidereal),h (sidereal),3590.17,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,kilosecond,kiloseconds,ks,ks,1000,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,megasecond,megaseconds,Ms,Ms,1000000,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,microsecond,microseconds,µs,us,0.000001,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,millisecond,milliseconds,ms,ms,0.001,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,minute,minutes,min,min,60,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,nanosecond,nanoseconds,ns,ns,0.000000001,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,petasecond,petaseconds,Ps,Ps,1000000000000000,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,picosecond,picoseconds,ps,ps,1E-12,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,second,seconds,s,s,1,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,second (sidereal),seconds (sidereal),s (sidereal),s (sidereal),0.9972696,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,shake,shakes,10.0 ns,10.0 ns,0.00000001,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,terasecond,teraseconds,Ts,Ts,1000000000000,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,year,years,a,y,31536000,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,year (sidereal),years (sidereal),a (sidereal),a (sidereal),31558150,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,year (tropical),years (tropical),a (tropical),a (tropical),31556930,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,yoctosecond,yoctoseconds,ys,ys,1E-24,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,yottasecond,yottaseconds,Ys,Ys,1E+024,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,zeptosecond,zeptoseconds,zs,zs,1E-21,0 +Time,0,0,1,0,0,0,0,false,false,false,false,false,false,zettasecond,zettaseconds,Zs,Zs,1E+021,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,attonewton meter,attonewton meters,aN · m,aN*m,1E-18,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,centinewton meter,centinewton meters,cN · m,cN*m,0.01,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,decanewton meter,decanewton meters,daN · m,daN*m,10,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,decinewton meter,decinewton meters,dN · m,dN*m,0.1,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,dyne centimeter,dyne centimeters,dyn · cm,dyn*cm,0.0000001,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,dyne meter,dyne meters,dyn · m,dyn*m,0.00001,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,exanewton meter,exanewton meters,EN · m,EN*m,1E+018,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,femtonewton meter,femtonewton meters,fN · m,fN*m,1E-15,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,giganewton meter,giganewton meters,GN · m,GN*m,1000000000,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,hectonewton meter,hectonewton meters,hN · m,hN*m,100,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,kilogram-force meter,kilogram-force meters,kgf · m,kgf*m,9.80665,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,kilonewton meter,kilonewton meters,kN · m,kN*m,1000,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,meganewton meter,meganewton meters,MN · m,MN*m,1000000,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,micronewton meter,micronewton meters,µN · m,uN*m,0.000001,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,millinewton meter,millinewton meters,mN · m,mN*m,0.001,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,nanonewton meter,nanonewton meters,nN · m,nN*m,0.000000001,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton attometer,newton attometers,N · am,N*am,1E-18,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton centimeter,newton centimeters,N · cm,N*cm,0.01,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton decameter,newton decameters,N · dam,N*dam,10,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton decimeter,newton decimeters,N · dm,N*dm,0.1,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton exameter,newton exameters,N · Em,N*Em,1E+018,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton femtometer,newton femtometers,N · fm,N*fm,1E-15,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton gigameter,newton gigameters,N · Gm,N*Gm,1000000000,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton hectometer,newton hectometers,N · hm,N*hm,100,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton kilometer,newton kilometers,N · km,N*km,1000,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton megameter,newton megameters,N · Mm,N*Mm,1000000,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton meter,newton meters,N · m,N*m,1,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton micrometer,newton micrometers,N · µm,N*um,0.000001,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton millimeter,newton millimeters,N · mm,N*mm,0.001,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton nanometer,newton nanometers,N · nm,N*nm,0.000000001,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton petameter,newton petameters,N · Pm,N*Pm,1000000000000000,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton picometer,newton picometers,N · pm,N*pm,1E-12,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton terameter,newton terameters,N · Tm,N*Tm,1000000000000,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton yoctometer,newton yoctometers,N · ym,N*ym,1E-24,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton yottameter,newton yottameters,N · Ym,N*Ym,1E+024,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton zeptometer,newton zeptometers,N · zm,N*zm,1E-21,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton zettameter,newton zettameters,N · Zm,N*Zm,1E+021,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,ounce-force inch,ounces-force inches,ozf · in,ozf*in,0.00706155306,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,petanewton meter,petanewton meters,PN · m,PN*m,1000000000000000,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,piconewton meter,piconewton meters,pN · m,pN*m,1E-12,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,pound-force foot,pounds-force feet,lbf · ft,lbf*ft,1.3558180656,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,pound-force inch,pounds-force inches,lbf · in,lbf*in,0.1129848388,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,teranewton meter,teranewton meters,TN · m,TN*m,1000000000000,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,yoctonewton meter,yoctonewton meters,yN · m,yN*m,1E-24,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,yottanewton meter,yottanewton meters,YN · m,YN*m,1E+024,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,zeptonewton meter,zeptonewton meters,zN · m,zN*m,1E-21,0 +Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,zettanewton meter,zettanewton meters,ZN · m,ZN*m,1E+021,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,atomic unit of velocity,atomic units of velocity,a₀ · Eₕ/ħ,a\0*E\h/n<-,2187691.26364,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,attometer per second,attometers per second,am/s,am/s,1E-18,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,centimeter per second,centimeters per second,cm/s,cm/s,0.01,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,decameter per second,decameters per second,dam/s,dam/s,10,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,decimeter per second,decimeters per second,dm/s,dm/s,0.1,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,exameter per second,exameters per second,Em/s,Em/s,1E+018,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,femtometer per second,femtometers per second,fm/s,fm/s,1E-15,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,foot per hour,feet per hour,ft/h,ft/h,8.46666666666667E-05,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,foot per minute,feet per minute,ft/min,ft/min,0.00508,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,foot per second,feet per second,ft/s,ft/s,0.3048,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,gigameter per second,gigameters per second,Gm/s,Gm/s,1000000000,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,hectometer per second,hectometers per second,hm/s,hm/s,100,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,inch per second,inches per second,in/s,in/s,0.0254,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,kilometer per hour,kilometers per hour,km/h,km/h,0.277777777777778,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,kilometer per second,kilometers per second,km/s,km/s,1000,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,knot,knots,kn,kn,0.514444444444445,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,megameter per second,megameters per second,Mm/s,Mm/s,1000000,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,meter per second,meters per second,m/s,m/s,1,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,micrometer per second,micrometers per second,µm/s,um/s,0.000001,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,mile per hour,miles per hour,mi/h,mi/h,0.44704,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,mile per minute,miles per minute,mi/min,mi/min,26.8224,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,mile per second,miles per second,mi/s,mi/s,1609.344,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,millimeter per minute,millimeters per minute,mm/min,mm/min,1.66666666666667E-05,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,millimeter per second,millimeters per second,mm/s,mm/s,0.001,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,nanometer per second,nanometers per second,nm/s,nm/s,0.000000001,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,natural unit of velocity,natural units of velocity,c,c (natural units),299792458,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,petameter per second,petameters per second,Pm/s,Pm/s,1000000000000000,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,picometer per second,picometers per second,pm/s,pm/s,1E-12,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,speed of light in vacuum,speeds of light in vacuum,c,c (speed of light),299792458,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,terameter per second,terameters per second,Tm/s,Tm/s,1000000000000,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,yoctometer per second,yoctometers per second,ym/s,ym/s,1E-24,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,yottameter per second,yottameters per second,Ym/s,Ym/s,1E+024,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,zeptometer per second,zeptometers per second,zm/s,zm/s,1E-21,0 +Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,zettameter per second,zettameters per second,Zm/s,Zm/s,1E+021,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,acre-foot,acre-feet,ac · ft,ac*ft,1233.489,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,attoliter,attoliters,aL,aL,1E-21,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,barrel,barrels,bbl,bbl,0.1589873,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,bushel,bushels,bu,bu,0.03523907,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,centiliter,centiliters,cL,cL,0.00001,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cord,cords,cords,cords,3.624556,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic attometer,cubic attometers,am³,am^3,1E-54,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic centimeter,cubic centimeters,cm³,cm^3,0.000001,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic decameter,cubic decameters,dam³,dam^3,1000,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic decimeter,cubic decimeters,dm³,dm^3,0.001,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic exameter,cubic exameters,Em³,Em^3,1E+054,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic femtometer,cubic femtometers,fm³,fm^3,1E-45,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic foot,cubic feet,ft³,ft^3,0.02831685,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic gigameter,cubic gigameters,Gm³,Gm^3,1E+027,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic hectometer,cubic hectometers,hm³,hm^3,1000000,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic inch,cubic inches,in³,in^3,0.00001638706,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic kilometer,cubic kilometers,km³,km^3,1000000000,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic megameter,cubic megameters,Mm³,Mm^3,1E+018,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic meter,cubic meters,m³,m^3,1,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic micrometer,cubic micrometers,µm³,um^3,1E-18,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic mile,cubic miles,mi³,mi^3,4168182000,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic millimeter,cubic millimeters,mm³,mm^3,0.000000001,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic nanometer,cubic nanometers,nm³,nm^3,1E-27,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic petameter,cubic petameters,Pm³,Pm^3,1E+045,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic picometer,cubic picometers,pm³,pm^3,1E-36,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic terameter,cubic terameters,Tm³,Tm^3,1E+036,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic yard,cubic yards,yd³,yd^3,0.7645549,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic yoctometer,cubic yoctometers,ym³,ym^3,1E-72,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic yottameter,cubic yottameters,Ym³,Ym^3,1E+072,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic zeptometer,cubic zeptometers,zm³,zm^3,1E-63,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic zettameter,cubic zettameters,Zm³,Zm^3,1E+063,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cup,cups,cup,cup,0.0002365882,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,decaliter,decaliters,daL,daL,0.01,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,deciliter,deciliters,dL,dL,0.0001,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,exaliter,exaliters,EL,EL,1000000000000000,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,femtoliter,femtoliters,fL,fL,1E-18,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,fluid ounce,fluid ounces,fl oz,fl_oz,0.00002957353,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,Imperial fluid ounce,Imperial fluid ounces,fl oz (UK),fl oz (UK),0.00002841306,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,gallon,gallons,gal,gal,0.003785412,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,Imperial gallon,Imperial gallons,gal (UK),gal (UK),0.00454609,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,gigaliter,gigaliters,GL,GL,1000000,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,gill,gills,gi,gi,0.0001182941,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,Imperial gill,Imperial gills,gi (UK),gi (UK),0.0001420653,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,hectoliter,hectoliters,hL,hL,0.1,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,kiloliter,kiloliters,kL,kL,1,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,liter,liters,L,L,0.001,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,megaliter,megaliters,ML,ML,1000,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,microliter,microliters,µL,uL,0.000000001,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,milliliter,milliliters,mL,mL,0.000001,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,nanoliter,nanoliters,nL,nL,1E-12,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,peck,pecks,pk,pk,0.008809768,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,petaliter,petaliters,PL,PL,1000000000000,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,picoliter,picoliters,pL,pL,1E-15,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,dry pint,dry pints,dry pt,dry_pt,0.0005506105,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,liquid pint,liquid pints,liq pt,liq_pt,0.0004731765,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,dry quart,dry quarts,dry qt,dry_qt,0.001101221,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,liquid quart,liquid quarts,liq qt,liq_qt,0.0009463529,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,register ton,register tons,RT,RT,2.831685,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,stere,steres,st,st,1,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,tablespoon,tablespoons,tbsp,tbsp,0.00001478676,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,teaspoon,teaspoons,tsp,tsp,0.000004928922,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,teraliter,teraliters,TL,TL,1000000000,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,yoctoliter,yoctoliters,yL,yL,1E-27,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,yottaliter,yottaliters,YL,YL,1E+021,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,zeptoliter,zeptoliters,zL,zL,1E-24,0 +Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,zettaliter,zettaliters,ZL,ZL,1E+018,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,acre-foot per second,acre-feet per second,ac · ft/s,ac*ft/s,1233.489,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,attoliter per second,attoliters per second,aL/s,aL/s,1E-21,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,barrel per second,barrels per second,bbl/s,bbl/s,0.1589873,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,bushel per second,bushels per second,bu/s,bu/s,0.03523907,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,centiliter per second,centiliters per second,cL/s,cL/s,0.00001,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cord per second,cords per second,cords/s,cords/s,3.624556,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic attometer per second,cubic attometers per second,am³/s,am^3/s,1E-54,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic centimeter per second,cubic centimeters per second,cm³/s,cm^3/s,0.000001,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic decameter per second,cubic decameters per second,dam³/s,dam^3/s,1000,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic decimeter per second,cubic decimeters per second,dm³/s,dm^3/s,0.001,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic exameter per second,cubic exameters per second,Em³/s,Em^3/s,1E+054,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic femtometer per second,cubic femtometers per second,fm³/s,fm^3/s,1E-45,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic foot per minute,cubic feet per minute,ft³/min,ft^3/min,0.0004719475,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic foot per second,cubic feet per second,ft³/s,ft^3/s,0.02831685,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic gigameter per second,cubic gigameters per second,Gm³/s,Gm^3/s,1E+027,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic hectometer per second,cubic hectometers per second,hm³/s,hm^3/s,1000000,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic inch per minute,cubic inches per minute,in³/min,in^3/min,2.73117666666667E-07,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic inch per second,cubic inches per second,in³/s,in^3/s,0.00001638706,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic kilometer per second,cubic kilometers per second,km³/s,km^3/s,1000000000,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic megameter per second,cubic megameters per second,Mm³/s,Mm^3/s,1E+018,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic meter per hour,cubic meters per hour,m³/h,m^3/h,0.000277777777777778,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic meter per minute,cubic meters per minute,m³/min,m^3/min,0.0166666666666667,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic meter per second,cubic meters per second,m³/s,m^3/s,1,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic micrometer per second,cubic micrometers per second,µm³/s,um^3/s,1E-18,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic mile per second,cubic miles per second,mi³/s,mi^3/s,4168182000,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic millimeter per second,cubic millimeters per second,mm³/s,mm^3/s,0.000000001,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic nanometer per second,cubic nanometers per second,nm³/s,nm^3/s,1E-27,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic petameter per second,cubic petameters per second,Pm³/s,Pm^3/s,1E+045,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic picometer per second,cubic picometers per second,pm³/s,pm^3/s,1E-36,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic terameter per second,cubic terameters per second,Tm³/s,Tm^3/s,1E+036,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic yard per minute,cubic yards per minute,yd³/min,yd^3/min,0.0127425816666667,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic yard per second,cubic yards per second,yd³/s,yd^3/s,0.7645549,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic yoctometer per second,cubic yoctometers per second,ym³/s,ym^3/s,1E-72,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic yottameter per second,cubic yottameters per second,Ym³/s,Ym^3/s,1E+072,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic zeptometer per second,cubic zeptometers per second,zm³/s,zm^3/s,1E-63,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic zettameter per second,cubic zettameters per second,Zm³/s,Zm^3/s,1E+063,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cup per second,cups per second,cup/s,cup/s,0.0002365882,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,decaliter per second,decaliters per second,daL/s,daL/s,0.01,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,deciliter per second,deciliters per second,dL/s,dL/s,0.0001,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,exaliter per second,exaliters per second,EL/s,EL/s,1000000000000000,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,femtoliter per second,femtoliters per second,fL/s,fL/s,1E-18,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,Imperial fluid ounce per second,Imperial fluid ounces per second,fl oz (UK)/s,fl oz (UK)/s,0.00002841306,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,fluid ounce per second,fluid ounces per second,fl oz/s,fl_oz/s,0.00002957353,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,Imperial gallon per second,Imperial gallons per second,gal (UK)/s,gal (UK)/s,0.00454609,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,gallon per day,gallons per day,gal/d,gal/d,4.38126388888889E-08,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,gallon per minute,gallons per minute,gal/min,gal/min,0.0000630902,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,gallon per second,gallons per second,gal/s,gal/s,0.003785412,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,gigaliter per second,gigaliters per second,GL/s,GL/s,1000000,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,Imperial gill per second,Imperial gills per second,gi (UK)/s,gi (UK)/s,0.0001420653,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,gill per second,gills per second,gi/s,gi/s,0.0001182941,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,hectoliter per second,hectoliters per second,hL/s,hL/s,0.1,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,kiloliter per second,kiloliters per second,kL/s,kL/s,1,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,liter per minute,liters per minute,L/min,L/min,1.66666666666667E-05,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,liter per second,liters per second,L/s,L/s,0.001,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,megaliter per second,megaliters per second,ML/s,ML/s,1000,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,microliter per second,microliters per second,µL/s,uL/s,0.000000001,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,milliliter per second,milliliters per second,mL/s,mL/s,0.000001,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,nanoliter per second,nanoliters per second,nL/s,nL/s,1E-12,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,peck per second,pecks per second,pk/s,pk/s,0.008809768,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,petaliter per second,petaliters per second,PL/s,PL/s,1000000000000,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,picoliter per second,picoliters per second,pL/s,pL/s,1E-15,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,dry pint per second,dry pints per second,dry pt/s,dry pt/s,0.0005506105,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,liquid pint per second,liquid pints per second,liq pt/s,liq pt/s,0.0004731765,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,dry quart per second,dry quarts per second,dry qt/s,dry qt/s,0.001101221,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,liquid quart per second,liquid quarts per second,liq qt/s,liq qt/s,0.0009463529,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,register ton per second,register tons per second,RT/s,RT/s,2.831685,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,stere per second,steres per second,st/s,st/s,1,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,tablespoon per second,tablespoons per second,tbsp/s,tbsp/s,0.00001478676,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,teaspoon per second,teaspoons per second,tsp/s,tsp/s,0.000004928922,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,teraliter per second,teraliters per second,TL/s,TL/s,1000000000,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,yoctoliter per second,yoctoliters per second,yL/s,yL/s,1E-27,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,yottaliter per second,yottaliters per second,YL/s,YL/s,1E+021,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,zeptoliter per second,zeptoliters per second,zL/s,zL/s,1E-24,0 +VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,zettaliter per second,zettaliters per second,ZL/s,ZL/s,1E+018,0 +VolumetricDensityOfStates,-5,-1,2,0,0,0,0,false,true,false,false,false,false,state per cubic centimeter electronvolt,states per cubic centimeter electronvolt,1/(cm³ · eV),1/(cm^3*eV),6.24150907446076E+024,0 +VolumetricDensityOfStates,-5,-1,2,0,0,0,0,false,true,false,false,false,false,state per cubic centimeter joule,states per cubic centimeter joule,1/(cm³ · J),1/(cm^3*J),1000000,0 +VolumetricDensityOfStates,-5,-1,2,0,0,0,0,false,true,false,false,false,false,state per cubic meter joule,states per cubic meter joule,1/(m³ · J),1/(m^3*J),1,0 +VolumetricHeatCapacity,-3,0,0,0,0,0,0,false,true,false,false,false,false,calorie per cubic meter kelvin,calories per cubic meter kelvin,cal/(m³ · K),cal/(m^3*K),4.184,0 +VolumetricHeatCapacity,-3,0,0,0,0,0,0,false,true,false,false,false,false,joule per cubic meter kelvin,joules per cubic meter kelvin,J/(m³ · K),J/(m^3*K),1,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per centiliter,per centiliter,cL⁻¹,cL^-1,100000,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic centimeter,per cubic centimeter,cm⁻³,cm^-3,1000000,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic decimeter,per cubic decimeter,dm⁻³,dm^-3,1000,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic foot,per cubic foot,ft⁻³,ft^-3,35.3146624712848,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic inch,per cubic inch,in⁻³,in^-3,61023.7589903253,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic kilometer,per cubic kilometer,km⁻³,km^-3,0.000000001,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic meter,per cubic meter,m⁻³,m^-3,1,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic mile,per cubic mile,mi⁻³,mi^-3,2.39912748531614E-10,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic millimeter,per cubic millimeter,mm⁻³,mm^-3,1000000000,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic yard,per cubic yard,yd⁻³,yd^-3,1.30795054743616,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per deciliter,per deciliter,dL⁻¹,dL^-1,10000,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per fluid ounce,per fluid ounce,per fl oz,per fl oz,33814.0222016107,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per Imperial fluid ounce,per Imperial fluid ounce,per fl oz (UK),per fl oz (UK),35195.0828245884,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per gallon,per gallon,per gal,per_gal,264.172037284185,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per Imperial gallon,per Imperial gallon,per gal (UK),per gal (UK),219.969248299088,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per liter,per liter,L⁻¹,L^-1,1000,0 +VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per milliliter,per milliliter,mL⁻¹,mL^-1,1000000,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,becquerel per cubic meter,becquerels per cubic meter,Bq/m³,Bq/m^3,1,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,curie per cubic meter,curies per cubic meter,Ci/m³,Ci/m^3,37000000000,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,disintegration per minute per cubic meter,disintegrations per minute per cubic meter,dpm/m³,dpm/m^3,0.0166666666666667,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per cubic centimeter second,per cubic centimeter second,cm⁻³ · s⁻¹,cm^-3*s^-1,1000000,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per cubic foot second,per cubic foot second,ft⁻³ · s⁻¹,ft^-3*s^-1,35.3146624712848,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per cubic inch second,per cubic inch second,in⁻³ · s⁻¹,in^-3*s^-1,61023.7589903253,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per cubic meter second,per cubic meter second,m⁻³ · s⁻¹,m^-3*s^-1,1,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per cubic mile second,per cubic mile second,mi⁻³ · s⁻¹,mi^-3*s^-1,2.39912748531614E-10,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per cubic millimeter second,per cubic millimeter second,mm⁻³ · s⁻¹,mm^-3*s^-1,1000000000,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per cubic yard second,per cubic yard second,yd⁻³ · s⁻¹,yd^-3*s^-1,1.30795054743616,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per Imperial fluid ounce second,per Imperial fluid ounce second,fl oz⁻¹ (UK) · s⁻¹,fl oz^-1 (UK)*s^-1,35195.0828245884,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per fluid ounce second,per fluid ounce second,fl oz⁻¹ · s⁻¹,fl oz^-1*s^-1,33814.0222016107,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per Imperial gallon second,per Imperial gallon second,gal⁻¹ (UK) · s⁻¹,gal^-1 (UK)*s^-1,219.969248299088,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per gallon second,per gallon second,gal⁻¹ · s⁻¹,gal^-1*s^-1,264.172037284185,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per liter second,per liter second,L⁻¹ · s⁻¹,L^-1*s^-1,1000,0 +VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per milliliter second,per milliliter second,mL⁻¹ · s⁻¹,mL^-1*s^-1,1000000,0 +VolumetricPowerDensity,-1,1,-3,0,0,0,0,false,false,false,false,false,false,watt per cubic centimeter,watts per cubic centimeter,W/cm³,W/cm^3,1000000,0 +VolumetricPowerDensity,-1,1,-3,0,0,0,0,false,false,false,false,false,false,watt per cubic meter,watts per cubic meter,W/m³,W/m^3,1,0 +VolumetricPowerDensity,-1,1,-3,0,0,0,0,false,false,false,false,false,false,watt per cubic millimeter,watts per cubic millimeter,W/mm³,W/mm^3,1000000000,0 +Pixel,0,0,0,0,0,0,0,false,false,false,false,false,true,pixel,pixels,px,px,1,0 +PixelDensity,-1,0,0,0,0,0,0,false,false,false,false,false,true,pixel per inch,pixels per inch,ppi,ppi,0.3937008,0 +PixelDensity,-1,0,0,0,0,0,0,false,false,false,false,false,true,pixel per foot,pixels per foot,ppf,ppf,4.7244096,0 +PixelDensity,-1,0,0,0,0,0,0,false,false,false,false,false,true,pixel per yard,pixels per yard,ppy,ppy,14.1732288,0 +PixelDensity,-1,0,0,0,0,0,0,false,false,false,false,false,true,pixel per centimeter,pixels per centimeter,ppcm,ppcm,1,0 +PixelDensity,-1,0,0,0,0,0,0,false,false,false,false,false,true,pixel per meter,pixels per meter,ppm,ppm,0.001,0 From 7419b2a7015af7e7ca36e56fc5ffecc2ca0076eb Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 4 Apr 2025 23:47:16 -0400 Subject: [PATCH 006/106] Add value and error types --- Cargo.lock | 1344 +++++++++++------ crates/interpreter/Cargo.toml | 4 + crates/interpreter/src/execution/errors.rs | 93 ++ .../interpreter/src/execution/formatting.rs | 25 + crates/interpreter/src/execution/logging.rs | 45 + crates/interpreter/src/execution/mod.rs | 17 + .../src/execution/values/default.rs | 41 + .../interpreter/src/execution/values/mod.rs | 328 ++++ .../interpreter/src/execution/values/none.rs | 41 + .../src/execution/values/value_type.rs | 157 ++ crates/interpreter/src/lib.rs | 1 + 11 files changed, 1641 insertions(+), 455 deletions(-) create mode 100644 crates/interpreter/src/execution/errors.rs create mode 100644 crates/interpreter/src/execution/formatting.rs create mode 100644 crates/interpreter/src/execution/logging.rs create mode 100644 crates/interpreter/src/execution/mod.rs create mode 100644 crates/interpreter/src/execution/values/default.rs create mode 100644 crates/interpreter/src/execution/values/mod.rs create mode 100644 crates/interpreter/src/execution/values/none.rs create mode 100644 crates/interpreter/src/execution/values/value_type.rs diff --git a/Cargo.lock b/Cargo.lock index e59419c..54a78ba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,22 +3,10 @@ version = 4 [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aho-corasick" @@ -37,9 +25,9 @@ checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -58,9 +46,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -73,73 +61,74 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.3" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "once_cell", + "windows-sys", ] [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" [[package]] name = "approx" -version = "0.3.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" dependencies = [ "num-traits", ] [[package]] -name = "approx" -version = "0.5.1" +name = "arbitrary" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" dependencies = [ - "num-traits", + "derive_arbitrary", ] [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "beef" @@ -158,21 +147,15 @@ dependencies = [ [[package]] name = "bitflags" -version = "1.3.2" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytecount" @@ -182,9 +165,9 @@ checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "bytemuck" -version = "1.16.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" +checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" [[package]] name = "byteorder" @@ -200,27 +183,27 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "casey" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614586263949597dcc18675da12ef9b429135e13628d92eb8b8c6fa50ca5656b" +checksum = "8e779867f62d81627d1438e0d3fb6ed7d7c9d64293ca6d87a1e88781b94ece1c" dependencies = [ - "syn 1.0.109", + "syn 2.0.100", ] [[package]] name = "castaway" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a17ed5635fc8536268e5d4de1e22e81ac34419e5f052d4d51f4e01dcc263fcc" +checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" dependencies = [ "rustversion", ] [[package]] name = "cc" -version = "1.2.1" +version = "1.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +checksum = "525046617d8376e3db1deffb079e91cef90a89fc3ca5c185bbf8c9ecdd15cd5c" dependencies = [ "jobserver", "libc", @@ -244,23 +227,23 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-link", ] [[package]] name = "clap" -version = "4.5.4" +version = "4.5.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944" dependencies = [ "clap_builder", "clap_derive", @@ -268,9 +251,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9" dependencies = [ "anstream", "anstyle", @@ -281,27 +264,27 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.100", ] [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "command_cad" @@ -313,7 +296,7 @@ dependencies = [ "casey", "clap", "common_data_types", - "compact_str", + "compact_str 0.7.1", "const-str", "csv", "enum_dispatch", @@ -328,7 +311,7 @@ dependencies = [ "lazy_static", "log", "macros", - "nalgebra", + "nalgebra 0.32.6", "nom", "nom_locate", "ouroboros", @@ -366,6 +349,20 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "compact_str" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a" +dependencies = [ + "castaway", + "cfg-if", + "itoa", + "rustversion", + "ryu", + "static_assertions", +] + [[package]] name = "const-str" version = "0.5.7" @@ -383,9 +380,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "crc32fast" @@ -398,15 +395,15 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "csv" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" dependencies = [ "csv-core", "itoa", @@ -416,23 +413,47 @@ dependencies = [ [[package]] name = "csv-core" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" dependencies = [ "memchr", ] [[package]] name = "decorum" -version = "0.3.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "281759d3c8a14f5c3f0c49363be56810fcd7f910422f97f2db850c2920fde5cf" +checksum = "7fcc6bb0c903f3f815b48365bb9182092866f54a132d8ebe906f0b66952936e3" dependencies = [ - "approx 0.3.2", + "approx", "num-traits", + "rustversion", "serde", "serde_derive", + "thiserror 2.0.12", +] + +[[package]] +name = "derive_arbitrary" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] @@ -443,9 +464,18 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "either" -version = "1.12.0" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "ena" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +dependencies = [ + "log", +] [[package]] name = "enum-map" @@ -464,7 +494,7 @@ checksum = "44600091ce205df4f8b661e98617d49c37b2dd609e449ec82b0fb5d7b33e2eeb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.100", ] [[package]] @@ -476,7 +506,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.100", ] [[package]] @@ -496,55 +526,65 @@ checksum = "a0e8987f91d86aa10313adf7c767a8cfd040364432d4e9f722b049b8ff7e634a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.100", ] [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "fastrand" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "file-guard" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21ef72acf95ec3d7dbf61275be556299490a245f017cf084bd23b4f68cf9407c" +dependencies = [ + "libc", + "winapi", +] [[package]] name = "fj-core" version = "0.49.0" -source = "git+https://github.com/hannobraun/fornjot.git#613779934166dea13b7f87c0d56f3952f9658ff9" +source = "git+https://github.com/hannobraun/fornjot.git#385aee350d5c1c08569c7e4e71ba7c5192bd4633" dependencies = [ "fj-interop", "fj-math", - "itertools 0.13.0", + "itertools 0.14.0", "parking_lot", "robust", "spade", - "thiserror", + "thiserror 2.0.12", "type-map", ] [[package]] name = "fj-export" version = "0.49.0" -source = "git+https://github.com/hannobraun/fornjot.git#613779934166dea13b7f87c0d56f3952f9658ff9" +source = "git+https://github.com/hannobraun/fornjot.git#385aee350d5c1c08569c7e4e71ba7c5192bd4633" dependencies = [ "fj-interop", "fj-math", "stl", - "thiserror", + "thiserror 2.0.12", "threemf", "wavefront_rs", ] @@ -552,7 +592,7 @@ dependencies = [ [[package]] name = "fj-interop" version = "0.49.0" -source = "git+https://github.com/hannobraun/fornjot.git#613779934166dea13b7f87c0d56f3952f9658ff9" +source = "git+https://github.com/hannobraun/fornjot.git#385aee350d5c1c08569c7e4e71ba7c5192bd4633" dependencies = [ "fj-math", ] @@ -560,11 +600,12 @@ dependencies = [ [[package]] name = "fj-math" version = "0.49.0" -source = "git+https://github.com/hannobraun/fornjot.git#613779934166dea13b7f87c0d56f3952f9658ff9" +source = "git+https://github.com/hannobraun/fornjot.git#385aee350d5c1c08569c7e4e71ba7c5192bd4633" dependencies = [ - "approx 0.5.1", + "approx", "decorum", - "nalgebra", + "iter_fixed", + "nalgebra 0.33.2", "num-traits", "parry2d-f64", "parry3d-f64", @@ -573,9 +614,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.30" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", "miniz_oxide", @@ -587,6 +628,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -616,13 +663,25 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "getrandom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi", +] + [[package]] name = "git2" version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "232e6a7bfe35766bf715e55a88b39a700596c0ccfd88cd3680b4cdb40d66ef70" dependencies = [ - "bitflags 2.5.0", + "bitflags", "libc", "libgit2-sys", "log", @@ -640,14 +699,34 @@ dependencies = [ "serde", ] +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder 1.5.0", +] + [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ - "ahash", "allocator-api2", + "equivalent", + "foldhash", +] + +[[package]] +name = "heapless" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32", + "stable_deref_trait", ] [[package]] @@ -664,20 +743,21 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -691,14 +771,143 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] [[package]] @@ -711,9 +920,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" dependencies = [ "equivalent", "hashbrown", @@ -724,6 +933,10 @@ name = "interpreter" version = "0.1.0" dependencies = [ "common_data_types", + "compact_str 0.9.0", + "enum_dispatch", + "enum_downcast", + "file-guard", "tree-sitter", "tree-sitter-command-cad-model", "type-sitter", @@ -734,60 +947,58 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] -name = "itertools" -version = "0.10.5" +name = "iter_fixed" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] +checksum = "592ff74cdc6a923b2ae357dad7db2f5dcbf5d4ace9afcf3ab7c7f20b209fd949" [[package]] name = "itertools" -version = "0.12.1" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] [[package]] name = "itertools" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom", "libc", ] @@ -799,24 +1010,25 @@ checksum = "e90f66baf362a8a5ce2ca820290fbede0572a76fabf8408bc68c02f9ad1d03bf" [[package]] name = "js-sys" -version = "0.3.68" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.164" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "libgit2-sys" @@ -834,25 +1046,25 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", - "windows-targets 0.52.5", + "windows-targets", ] [[package]] name = "libm" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "libssh2-sys" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee" +checksum = "220e4f05ad4a218192533b300327f5150e809b54c4ec83b5a1d91833601811b9" dependencies = [ "cc", "libc", @@ -864,9 +1076,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.18" +version = "1.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" +checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" dependencies = [ "cc", "libc", @@ -876,9 +1088,15 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" + +[[package]] +name = "litemap" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "lock_api" @@ -890,26 +1108,32 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "lockfree-object-pool" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" + [[package]] name = "log" -version = "0.4.21" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "logos" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c6b6e02facda28ca5fb8dbe4b152496ba3b1bd5a4b40bb2b1b2d8ad74e0f39b" +checksum = "ab6f536c1af4c7cc81edf73da1f8029896e7e1e16a219ef09b184e76a296f3db" dependencies = [ "logos-derive", ] [[package]] name = "logos-codegen" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b32eb6b5f26efacd015b000bfc562186472cd9b34bdba3f6b264e2a052676d10" +checksum = "189bbfd0b61330abea797e5e9276408f2edbe4f822d7ad08685d67419aafb34e" dependencies = [ "beef", "fnv", @@ -917,14 +1141,15 @@ dependencies = [ "proc-macro2", "quote", "regex-syntax", - "syn 2.0.89", + "rustc_version", + "syn 2.0.100", ] [[package]] name = "logos-derive" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5d0c5463c911ef55624739fc353238b4e310f0144be1f875dc42fec6bfd5ec" +checksum = "ebfe8e1a19049ddbfccbd14ac834b215e11b85b90bab0c2dba7c7b92fb5d5cba" dependencies = [ "logos-codegen", ] @@ -935,14 +1160,14 @@ version = "0.1.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.100", ] [[package]] name = "matrixmultiply" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" dependencies = [ "autocfg", "rawpointer", @@ -950,9 +1175,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "minimal-lexical" @@ -962,38 +1187,54 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.3" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430" +dependencies = [ + "adler2", +] + +[[package]] +name = "nalgebra" +version = "0.32.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4" dependencies = [ - "adler", + "approx", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba 0.8.1", + "typenum", ] [[package]] name = "nalgebra" -version = "0.32.5" +version = "0.33.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea4908d4f23254adda3daa60ffef0f1ac7b8c3e9a864cf3cc154b251908a2ef" +checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" dependencies = [ - "approx 0.5.1", + "approx", "matrixmultiply", "nalgebra-macros", "num-complex", "num-rational", "num-traits", - "simba", + "simba 0.9.0", "typenum", ] [[package]] name = "nalgebra-macros" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" +checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.100", ] [[package]] @@ -1017,6 +1258,16 @@ dependencies = [ "nom", ] +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + [[package]] name = "num-complex" version = "0.4.6" @@ -1034,7 +1285,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.100", ] [[package]] @@ -1052,6 +1303,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ + "num-bigint", "num-integer", "num-traits", ] @@ -1068,21 +1320,21 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" dependencies = [ "cc", "libc", @@ -1092,18 +1344,18 @@ dependencies = [ [[package]] name = "ordered-float" -version = "4.2.0" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" dependencies = [ "num-traits", ] [[package]] name = "ouroboros" -version = "0.18.4" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "944fa20996a25aded6b4795c6d63f10014a7a83f8be9828a11860b08c5fc4a67" +checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59" dependencies = [ "aliasable", "ouroboros_macro", @@ -1112,16 +1364,15 @@ dependencies = [ [[package]] name = "ouroboros_macro" -version = "0.18.4" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39b0deead1528fd0e5947a8546a9642a9777c25f6e1e26f34c97b204bbb465bd" +checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0" dependencies = [ "heck 0.4.1", - "itertools 0.12.1", "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.89", + "syn 2.0.100", ] [[package]] @@ -1142,53 +1393,60 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.1", + "redox_syscall", "smallvec", - "windows-targets 0.52.5", + "windows-targets", ] [[package]] name = "parry2d-f64" -version = "0.15.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416b765a3db5f3e219fcc878d649ea6dc6b93490694be846c39c7398074f90d1" +checksum = "6cb6ad7b4b94d153e501bea7bee863fc83015db2f936a0a0c6745021853f1043" dependencies = [ - "approx 0.5.1", + "approx", "arrayvec", - "bitflags 1.3.2", + "bitflags", "downcast-rs", "either", + "ena", "log", - "nalgebra", + "nalgebra 0.33.2", "num-derive", "num-traits", - "rustc-hash", - "simba", + "ordered-float", + "rustc-hash 2.1.1", + "simba 0.9.0", "slab", "smallvec", "spade", + "thiserror 1.0.69", ] [[package]] name = "parry3d-f64" -version = "0.15.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc07fa374273eca29066d59d3ded520bf845ed582e38c0d60109459ea4ed76e" +checksum = "c8b2e297ab09d7c3b746e59c23f5bd44e235540424dcccbf28314db9ccf0938f" dependencies = [ - "approx 0.5.1", + "approx", "arrayvec", - "bitflags 1.3.2", + "bitflags", "downcast-rs", "either", + "ena", "log", - "nalgebra", + "nalgebra 0.33.2", "num-derive", "num-traits", - "rustc-hash", - "simba", + "ordered-float", + "rstar", + "rustc-hash 2.1.1", + "simba 0.9.0", "slab", "smallvec", "spade", + "thiserror 1.0.69", ] [[package]] @@ -1205,9 +1463,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "phf" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ "phf_macros", "phf_shared", @@ -1215,9 +1473,9 @@ dependencies = [ [[package]] name = "phf_generator" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ "phf_shared", "rand", @@ -1225,47 +1483,47 @@ dependencies = [ [[package]] name = "phf_macros" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" dependencies = [ "phf_generator", "phf_shared", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.100", ] [[package]] name = "phf_shared" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ "siphasher", ] [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "prettyplease" -version = "0.2.25" +version = "0.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" dependencies = [ "proc-macro2", - "syn 2.0.89", + "syn 2.0.100", ] [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] @@ -1278,7 +1536,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.100", "version_check", "yansi", ] @@ -1307,9 +1565,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.31.0" +version = "0.37.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +checksum = "a4ce8c88de324ff838700f36fb6ab86c96df0e3c4ab6ef3a9b2044465cce1369" dependencies = [ "memchr", "serde", @@ -1317,13 +1575,19 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "rand" version = "0.8.5" @@ -1347,20 +1611,11 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" -dependencies = [ - "bitflags 2.5.0", + "bitflags", ] [[package]] @@ -1398,42 +1653,68 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" +[[package]] +name = "rstar" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "421400d13ccfd26dfa5858199c30a5d76f9c54e0dba7575273025b43c5175dbb" +dependencies = [ + "heapless", + "num-traits", + "smallvec", +] + [[package]] name = "rustc-hash" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + [[package]] name = "rustix" -version = "0.38.34" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" dependencies = [ - "bitflags 2.5.0", + "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "safe_arch" -version = "0.7.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" dependencies = [ "bytemuck", ] @@ -1455,38 +1736,38 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "semver" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.215" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.100", ] [[package]] name = "serde_json" -version = "1.0.133" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -1519,18 +1800,37 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" dependencies = [ - "approx 0.5.1", + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "simba" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" +dependencies = [ + "approx", "num-complex", "num-traits", "paste", "wide", ] +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "siphasher" -version = "0.3.11" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" @@ -1549,15 +1849,15 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "smallvec" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" [[package]] name = "spade" -version = "2.8.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b20a809169ae442497e41a997fc5f14e2eea04e6ac590816a910d5d8068c8c0" +checksum = "1ece03ff43cd2a9b57ebf776ea5e78bd30b3b4185a619f041079f4109f385034" dependencies = [ "hashbrown", "num-traits", @@ -1565,6 +1865,12 @@ dependencies = [ "smallvec", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -1618,25 +1924,37 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.89" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "tempfile" -version = "3.10.1" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ - "cfg-if", "fastrand", + "getrandom", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -1650,32 +1968,52 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.3.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" +checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" dependencies = [ "rustix", - "windows-sys 0.48.0", + "windows-sys", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" -version = "1.0.61" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.12", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.100", ] [[package]] @@ -1690,36 +2028,31 @@ dependencies = [ [[package]] name = "threemf" -version = "0.5.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "542e6ea27d8dc779b54b6325da4a52b97367f7a63a41f9c0ce67a3096e550123" +checksum = "e7d946000a45b7cd15c3e64d781b2ea4270f30f82c2712de3267195d4fb24475" dependencies = [ "quick-xml", "serde", - "thiserror", + "thiserror 2.0.12", "zip", ] [[package]] -name = "tinyvec" -version = "1.6.0" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ - "tinyvec_macros", + "displaydoc", + "zerovec", ] -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - [[package]] name = "tree-sitter" -version = "0.24.4" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67baf55e7e1b6806063b1e51041069c90afff16afcbbccd278d899f9d84bca4" +checksum = "a5387dffa7ffc7d2dae12b50c6f7aab8ff79d6210147c6613561fc3d474c6f75" dependencies = [ "cc", "regex", @@ -1738,9 +2071,9 @@ dependencies = [ [[package]] name = "tree-sitter-language" -version = "0.1.2" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8ddffe35a0e5eeeadf13ff7350af564c6e73993a24db62caee1822b185c2600" +checksum = "c4013970217383f67b18aef68f6fb2e8d409bc5755227092d32efb0422ba24b8" [[package]] name = "type-map" @@ -1748,14 +2081,14 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" dependencies = [ - "rustc-hash", + "rustc-hash 1.1.0", ] [[package]] name = "type-sitter" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f4c4ddbd678e359ff89aae45047d07054424fcd6a9a54e0b08c59c86a089f" +checksum = "07c6b4142a07c6940da2617c3c595728ec5b5df640c5545e980d90c1352abe57" dependencies = [ "type-sitter-lib", "type-sitter-proc", @@ -1763,9 +2096,9 @@ dependencies = [ [[package]] name = "type-sitter-gen" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac9d1ff21ac9de07753e3caa368db9442f493d7cb4e3f6c50bd487d4ccea4a1" +checksum = "3b928ec2e0630b379a3b17c69a37d70baef172ad9fbbeb61dc1e516b1d915686" dependencies = [ "cc", "check_keyword", @@ -1781,7 +2114,7 @@ dependencies = [ "serde", "serde_json", "slice-group-by", - "syn 2.0.89", + "syn 2.0.100", "tree-sitter", "tree-sitter-language", "walkdir", @@ -1789,9 +2122,9 @@ dependencies = [ [[package]] name = "type-sitter-lib" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9bd317b595762109d7de17950090734f26ffcd881bf9c797c72fe0dc1d00220" +checksum = "286d4544ef134483a555889f5d67c8a98bab5fe6c1718871eaac80a00c99d088" dependencies = [ "streaming-iterator", "tree-sitter", @@ -1799,19 +2132,19 @@ dependencies = [ [[package]] name = "type-sitter-proc" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fa4874fcd40bc621749354a31705e5e3dc7fcbc7ba44235e274662eae7669e6" +checksum = "ad28647e19d26aac03d091758449d4ef30913145bbec602ce8fdd9e287d81802" dependencies = [ - "syn 2.0.89", + "syn 2.0.100", "type-sitter-gen", ] [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "uneval" @@ -1820,29 +2153,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63cc5d2fd8648d7e2be86098f60c9ece7045cc710b3c1e226910e2f37d11dc73" dependencies = [ "serde", - "thiserror", + "thiserror 1.0.69", ] -[[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.23" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-segmentation" @@ -1884,7 +2202,7 @@ dependencies = [ "proc-macro2", "quasiquote", "quote", - "syn 2.0.89", + "syn 2.0.100", ] [[package]] @@ -1899,20 +2217,32 @@ dependencies = [ [[package]] name = "url" -version = "2.5.0" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", "percent-encoding", ] +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "vcpkg" @@ -1922,9 +2252,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "walkdir" @@ -1936,6 +2266,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasite" version = "0.1.0" @@ -1944,34 +2283,35 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.91" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.91" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.100", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.91" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1979,22 +2319,25 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.91" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.100", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.91" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wavefront_rs" @@ -2004,9 +2347,9 @@ checksum = "c2f237e2271c3f9ccc633ee16918789514fd5a823bf62ddce21f8a730a1d9930" [[package]] name = "web-sys" -version = "0.3.68" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -2014,216 +2357,307 @@ dependencies = [ [[package]] name = "whoami" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" dependencies = [ - "redox_syscall 0.4.1", + "redox_syscall", "wasite", "web-sys", ] [[package]] name = "wide" -version = "0.7.21" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8dc749a1b03f3c255a3064a4f5c0ee5ed09b7c6bc6d4525d31f779cd74d7fc" +checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22" dependencies = [ "bytemuck", "safe_arch", ] +[[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.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys", ] +[[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" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" dependencies = [ - "windows-targets 0.52.5", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", ] [[package]] -name = "windows-sys" -version = "0.48.0" +name = "windows-implement" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ - "windows-targets 0.48.5", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] -name = "windows-sys" -version = "0.52.0" +name = "windows-interface" +version = "0.59.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ - "windows-targets 0.52.5", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] -name = "windows-targets" -version = "0.48.5" +name = "windows-link" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" + +[[package]] +name = "windows-result" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 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", + "windows-targets", ] [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.5" +name = "windows_aarch64_msvc" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" +name = "windows_i686_gnu" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] -name = "windows_aarch64_msvc" -version = "0.52.5" +name = "windows_i686_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] -name = "windows_i686_gnu" -version = "0.48.5" +name = "windows_i686_msvc" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] -name = "windows_i686_gnu" -version = "0.52.5" +name = "windows_x86_64_gnu" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] -name = "windows_i686_gnullvm" -version = "0.52.5" +name = "windows_x86_64_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] -name = "windows_i686_msvc" -version = "0.48.5" +name = "windows_x86_64_msvc" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "windows_i686_msvc" -version = "0.52.5" +name = "wit-bindgen-rt" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] [[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" +name = "write16" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" [[package]] -name = "windows_x86_64_gnu" -version = "0.52.5" +name = "writeable" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" +name = "yansi" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.5" +name = "yoke" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] [[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" +name = "yoke-derive" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", + "synstructure", +] [[package]] -name = "windows_x86_64_msvc" -version = "0.52.5" +name = "zerofrom" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] [[package]] -name = "yansi" -version = "1.0.1" +name = "zerofrom-derive" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", + "synstructure", +] [[package]] -name = "zerocopy" -version = "0.7.34" +name = "zerovec" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" dependencies = [ - "zerocopy-derive", + "yoke", + "zerofrom", + "zerovec-derive", ] [[package]] -name = "zerocopy-derive" -version = "0.7.34" +name = "zerovec-derive" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn 2.0.100", ] [[package]] name = "zip" -version = "0.6.6" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +checksum = "1dcb24d0152526ae49b9b96c1dcf71850ca1e0b882e4e28ed898a93c41334744" dependencies = [ - "byteorder 1.5.0", + "arbitrary", "crc32fast", "crossbeam-utils", "flate2", + "indexmap", + "memchr", + "zopfli", +] + +[[package]] +name = "zopfli" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" +dependencies = [ + "bumpalo", + "crc32fast", + "lockfree-object-pool", + "log", + "once_cell", + "simd-adler32", ] diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index 595ce57..7d623db 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -10,6 +10,10 @@ tree-sitter = "0.24.4" tree-sitter-command-cad-model = { path = "../tree-sitter-command-cad-model" } type-sitter = "0.6" unwrap-enum = "0.1.0" +file-guard = "0.2.0" +enum_dispatch = "0.3" +enum_downcast = { version = "0.1", features = [ "derive" ] } +compact_str = "0.9" [build-dependencies] type-sitter-gen = "0.6" diff --git a/crates/interpreter/src/execution/errors.rs b/crates/interpreter/src/execution/errors.rs new file mode 100644 index 0000000..ff23d80 --- /dev/null +++ b/crates/interpreter/src/execution/errors.rs @@ -0,0 +1,93 @@ +/* + * Copyright 2024 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use super::logging::StackPoint; +use std::{any::Any, fmt::Display}; + +pub type OperatorResult = std::result::Result; + +#[derive(Debug, Eq)] +pub struct Error { + pub ty: Box, + pub trace: Vec, +} + +impl PartialEq for Error { + fn eq(&self, other: &Self) -> bool { + self.ty.as_ref() == other.ty.as_ref() && self.trace == other.trace + } +} + +impl Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + writeln!(f, "{}", self.ty)?; + writeln!(f, "Backtrace:")?; + for layer in self.trace.iter() { + writeln!(f, "\t{}", layer)?; + } + + Ok(()) + } +} + +pub trait ErrorType: std::fmt::Debug + std::fmt::Display + Any {} + +pub trait Raise { + fn raise(self, stack_trace: &[StackPoint]) -> OperatorResult; +} + +impl Raise for E { + fn raise(self, stack_trace: &[StackPoint]) -> OperatorResult { + Err(Error { + ty: Box::new(self), + trace: stack_trace.into(), + }) + } +} + +trait AutoAny { + fn as_any(&self) -> &dyn Any; +} + +impl AutoAny for A { + fn as_any(&self) -> &dyn Any { + self as &dyn Any + } +} + +trait DynEq { + fn dyn_eq(&self, other: &dyn AutoAny) -> bool; +} + +impl DynEq for D { + fn dyn_eq(&self, other: &dyn AutoAny) -> bool { + if let Some(other) = other.as_any().downcast_ref::() { + todo!() + } else { + false + } + } +} + +impl PartialEq for dyn ErrorType { + fn eq(&self, other: &Self) -> bool { + todo!() + } +} + +impl Eq for dyn ErrorType {} diff --git a/crates/interpreter/src/execution/formatting.rs b/crates/interpreter/src/execution/formatting.rs new file mode 100644 index 0000000..b65a2de --- /dev/null +++ b/crates/interpreter/src/execution/formatting.rs @@ -0,0 +1,25 @@ +use std::fmt::Display; + +/// Presents iterators in a comma separated format. +pub struct IteratorFormatter(pub I) +where + I: Iterator + Clone, + D: Display; + +impl Display for IteratorFormatter +where + I: Iterator + Clone, + D: Display, +{ + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut iter = self.0.clone().peekable(); + + loop { + match (iter.next(), iter.peek().is_some()) { + (Some(next), true) => write!(f, "{}, ", next)?, + (Some(next), false) => write!(f, "{}", next)?, + (None, _) => break Ok(()), + } + } + } +} diff --git a/crates/interpreter/src/execution/logging.rs b/crates/interpreter/src/execution/logging.rs new file mode 100644 index 0000000..6aa662e --- /dev/null +++ b/crates/interpreter/src/execution/logging.rs @@ -0,0 +1,45 @@ +use std::{borrow::Cow, fmt::Display, path::PathBuf, sync::Arc}; + +use tree_sitter::Point as FilePoint; + +pub trait RuntimeLog { + fn push(&mut self, message: LogMessage); +} + +#[derive(Debug, Eq, PartialEq, Clone)] +pub struct StackPoint { + pub file: Arc, + pub file_point: FilePoint, +} + +impl Display for StackPoint { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}:{}:{}", + self.file.to_string_lossy(), + // Most IDEs expect the first line to be 1. + self.file_point.row + 1, + self.file_point.column + 1 + ) + } +} + +#[derive(Debug)] +pub struct LogMessage { + pub origin: StackPoint, + pub level: LogLevel, + pub message: Cow<'static, str>, +} + +impl std::fmt::Display for LogMessage { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}: {}", self.origin, self.message) + } +} + +#[derive(Debug, Eq, PartialEq, Clone, Copy)] +pub enum LogLevel { + Info, + Warning, +} diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs new file mode 100644 index 0000000..2bf8c82 --- /dev/null +++ b/crates/interpreter/src/execution/mod.rs @@ -0,0 +1,17 @@ +use crate::compile::Expression; + +mod errors; +mod formatting; +mod logging; +pub mod values; + +/// Caches the products of expressions. +pub struct Cache {} + +pub type CacheSignature = [u8; 32]; + +pub struct CachedExpression {} + +pub struct RuntimeContext {} + +pub fn execute_expression(expression: &Expression) {} diff --git a/crates/interpreter/src/execution/values/default.rs b/crates/interpreter/src/execution/values/default.rs new file mode 100644 index 0000000..0a9f9cb --- /dev/null +++ b/crates/interpreter/src/execution/values/default.rs @@ -0,0 +1,41 @@ +/* + * Copyright 2024 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use crate::execution::logging::{RuntimeLog, StackPoint}; + +use super::{value_type::VariableType, Object, OperatorResult, StaticTypeName}; + +#[derive(Debug, Clone, Eq, PartialEq, Hash)] +pub struct DefaultValue; + +impl Object for DefaultValue { + fn matches_type( + &self, + _ty: &VariableType, + _log: &mut dyn RuntimeLog, + _stack_trace: &[StackPoint], + ) -> OperatorResult { + Ok(false) + } +} + +impl StaticTypeName for DefaultValue { + fn static_type_name() -> &'static str { + "Default" + } +} diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs new file mode 100644 index 0000000..2709131 --- /dev/null +++ b/crates/interpreter/src/execution/values/mod.rs @@ -0,0 +1,328 @@ +use std::{borrow::Cow, cmp::Ordering, fmt::Display}; + +use enum_dispatch::enum_dispatch; +use enum_downcast::{AsVariant, EnumDowncast}; +use value_type::VariableType; + +use super::{ + errors::{ErrorType, OperatorResult, Raise as _}, + logging::{RuntimeLog, StackPoint}, +}; + +mod none; +use none::NoneType; + +mod default; +use default::DefaultValue; + +mod value_type; + +pub trait StaticTypeName { + /// Provides the type name without having an instance of the object. + /// This is used for formatting error messages when failing to cast to an expected type. + fn static_type_name() -> &'static str; +} + +#[derive(Debug, Eq, PartialEq)] +struct UnsupportedOperationError { + type_name: Cow<'static, str>, + operation_name: &'static str, +} + +impl ErrorType for UnsupportedOperationError {} + +impl Display for UnsupportedOperationError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "Type `{}` does not support {} operation", + self.type_name, self.operation_name + ) + } +} + +impl UnsupportedOperationError { + fn raise( + object: &O, + stack_trace: &[StackPoint], + operation_name: &'static str, + ) -> OperatorResult { + Self { + type_name: object.type_name(), + operation_name, + } + .raise(stack_trace) + } +} + +#[enum_dispatch] +pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { + fn matches_type( + &self, + ty: &VariableType, + log: &mut dyn RuntimeLog, + stack_trace: &[StackPoint], + ) -> OperatorResult; + + // fn format( + // &self, + // _log: &mut dyn RuntimeLog, + // stack_trace: stack_trace: &S[StackPoint], + // _f: &mut dyn Write, + // _style: Style, + // _precision: Option, + // ) -> OperatorResult { + // UnsupportedOperationError::raise(self, stack_trace, "format") + // } + + fn type_name(&self) -> Cow<'static, str> { + Self::static_type_name().into() + } + + fn and( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[StackPoint], + _rhs: &Value, + ) -> OperatorResult { + UnsupportedOperationError::raise(self, stack_trace, "and") + } + fn or( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[StackPoint], + _rhs: Value, + ) -> OperatorResult { + UnsupportedOperationError::raise(self, stack_trace, "or") + } + fn cmp( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[StackPoint], + _rhs: &Value, + ) -> OperatorResult { + UnsupportedOperationError::raise(self, stack_trace, "compare") + } + fn eq( + &self, + log: &mut dyn RuntimeLog, + stack_trace: &[StackPoint], + rhs: &Value, + ) -> OperatorResult { + Ok(matches!(self.cmp(log, stack_trace, rhs)?, Ordering::Equal)) + } + fn addition( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[StackPoint], + _rhs: &Value, + ) -> OperatorResult { + UnsupportedOperationError::raise(self, stack_trace, "addition") + } + fn subtraction( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[StackPoint], + _rhs: &Value, + ) -> OperatorResult { + UnsupportedOperationError::raise(self, stack_trace, "subtraction") + } + fn multiply( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[StackPoint], + _rhs: &Value, + ) -> OperatorResult { + UnsupportedOperationError::raise(self, stack_trace, "multiply") + } + fn divide( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[StackPoint], + _rhs: &Value, + ) -> OperatorResult { + UnsupportedOperationError::raise(self, stack_trace, "divide") + } + // fn attribute( + // &self, + // _log: &mut dyn RuntimeLog, + // _stack_trace: &[StackPoint], + // attribute: &S, + // ) -> OperatorResult { + // Err(Failure::UnknownAttribute(attribute.clone())) + // } + // fn call( + // &self, + // _context: &mut ExecutionContext, + // stack_trace: &[StackPoint], + // _arguments: Vec, + // _stack_traces: &[Expression], + // ) -> OperatorResult { + // UnsupportedOperationError::raise(self, stack_trace, "call") + // } + // fn method_call( + // &self, + // _context: &mut ExecutionContext, + // _stack_trace: &[StackPoint], + // attribute: &S, + // _arguments: Vec, + // _stack_traces: &[Expression], + // ) -> OperatorResult { + // Err(Failure::UnknownAttribute(attribute.clone())) + // } + fn index( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[StackPoint], + _index: Value, + ) -> OperatorResult { + UnsupportedOperationError::raise(self, stack_trace, "index") + } + fn iterate( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[StackPoint], + ) -> OperatorResult>> { + UnsupportedOperationError::raise(self, stack_trace, "iterate") + } + fn unary_plus( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[StackPoint], + ) -> OperatorResult { + UnsupportedOperationError::raise(self, stack_trace, "unary plus") + } + fn unary_minus( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[StackPoint], + ) -> OperatorResult { + UnsupportedOperationError::raise(self, stack_trace, "unary minus") + } + fn unary_logical_not( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[StackPoint], + ) -> OperatorResult { + UnsupportedOperationError::raise(self, stack_trace, "unary logical not") + } + + // fn export( + // &self, + // _log: &mut dyn RuntimeLog, + // stack_trace: &[StackPoint], + // ) -> OperatorResult { + // UnsupportedOperationError::raise(self, stack_trace, "export") + // } +} + +#[enum_dispatch(Object)] +#[derive(Debug, Hash, Eq, PartialEq, EnumDowncast, Clone)] +pub enum Value { + NoneType, + Default(DefaultValue), + // Boolean, + // BuiltinFunction(BuiltinFunctionRef), + // UserFunction(UserFunction), + // Structure(Structure), + // StructDefinition(StructDefinition), + // List(List), + // String(SString), + // Range(Range), + // Closure(Closure), + // Scalar, + // Vector2(Vector2), + // Vector3(Vector3), + // Vector4(Vector4), + // Transform2D, + // Transform3D, + // Quaternion, + // Cycle, + // Region, + // Sketch, + // Surface, + // Solid, + // Shell, + // Face, + // Curve, + // HalfEdge, + // Vertex, +} + +impl StaticTypeName for Value { + fn static_type_name() -> &'static str { + "Value" + } +} + +#[derive(Debug, Eq, PartialEq)] +struct DowncastError { + expected: Cow<'static, str>, + got: Cow<'static, str>, +} + +impl ErrorType for DowncastError {} + +impl Display for DowncastError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "Expected type `{}`, got {}", self.expected, self.got) + } +} + +impl Value { + pub fn downcast_ref(&self, stack_trace: &[StackPoint]) -> OperatorResult<&T> + where + T: StaticTypeName, + Self: AsVariant, + { + if let Some(value) = self.enum_downcast_ref() { + Ok(value) + } else { + DowncastError { + expected: T::static_type_name().into(), + got: self.type_name(), + } + .raise(stack_trace) + } + } + + pub fn downcast(self, stack_trace: &[StackPoint]) -> OperatorResult + where + T: StaticTypeName, + Self: TryInto, + { + match self.try_into() { + Ok(value) => Ok(value), + Err(original) => DowncastError { + expected: T::static_type_name().into(), + got: original.type_name(), + } + .raise(stack_trace)?, + } + } + + pub fn downcast_optional(self, stack_trace: &[StackPoint]) -> OperatorResult> + where + T: StaticTypeName, + Self: TryInto, + { + match self { + Self::NoneType(_) => Ok(None), + this => Ok(Some(this.downcast::(stack_trace)?)), + } + } + + // pub fn from_litteral( + // context: &mut ExecutionContext, + // value: &Litteral, + // ) -> OperatorResult { + // match value { + // Litteral::Scalar(scalar) => Scalar::from_parsed(scalar), + // Litteral::String(string) => SString::from_parsed(string), + // Litteral::List(list) => List::from_parsed(context, list), + // Litteral::Boolean(_span, value) => Ok(Self::Boolean(*value)), + // Litteral::Default(_span) => Ok(DefaultValue.into()), + // Litteral::Closure(closure) => Ok(Closure::from(closure).into()), + // } + // } +} diff --git a/crates/interpreter/src/execution/values/none.rs b/crates/interpreter/src/execution/values/none.rs new file mode 100644 index 0000000..71fdb5d --- /dev/null +++ b/crates/interpreter/src/execution/values/none.rs @@ -0,0 +1,41 @@ +/* + * Copyright 2024 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use crate::execution::logging::{RuntimeLog, StackPoint}; + +use super::{value_type::VariableType, Object, OperatorResult, StaticTypeName}; + +#[derive(Debug, Hash, Clone, Eq, PartialEq)] +pub struct NoneType; + +impl Object for NoneType { + fn matches_type( + &self, + _ty: &VariableType, + _log: &mut dyn RuntimeLog, + _stack_trace: &[StackPoint], + ) -> OperatorResult { + Ok(false) + } +} + +impl StaticTypeName for NoneType { + fn static_type_name() -> &'static str { + "None" + } +} diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs new file mode 100644 index 0000000..4c718b6 --- /dev/null +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -0,0 +1,157 @@ +/* + * Copyright 2024 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ +use std::{borrow::Cow, fmt::Display}; + +use crate::execution::formatting::IteratorFormatter; + +use super::Value; + +#[derive(Debug, Hash, Eq, PartialEq, Clone)] +pub struct ClosureSignature { + return_type: Box, + arguments: Vec, +} + +impl Display for ClosureSignature { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "({})[...] -> {}", + IteratorFormatter(self.arguments.iter()), + self.return_type + ) + } +} + +#[derive(Debug, Hash, Eq, PartialEq, Clone)] +pub enum VariableType { + String, + List, + Boolean, + Range, + Struct(String), + Scalar(String), + Vector(u8, String), + Transform(u8), + Quaternion, + Cycle, + Region, + Sketch, + Surface, + Solid, + Shell, + Face, + Curve, + HalfEdge, + Vertex, + Closure(ClosureSignature), +} + +impl VariableType { + pub fn name(&self) -> Cow<'static, str> { + match self { + Self::String => "String".into(), + Self::List => "List".into(), + Self::Boolean => "Boolean".into(), + Self::Range => "Range".into(), + Self::Struct(name) => format!("struct {}", name.as_str()).into(), + Self::Scalar(name) => name.to_string().into(), + Self::Vector(dimension, name) => { + format!("Vector{}<{}>", dimension, name.as_str()).into() + } + Self::Transform(2) => "Transform2D".into(), + Self::Transform(3) => "Transform3D".into(), + Self::Transform(_) => unreachable!(), + Self::Quaternion => "Quaternion".into(), + Self::Cycle => "Cycle".into(), + Self::Region => "Region".into(), + Self::Sketch => "Sketch".into(), + Self::Surface => "Surface".into(), + Self::Solid => "Solid".into(), + Self::Shell => "Shell".into(), + Self::Face => "Face".into(), + Self::Curve => "Curve".into(), + Self::HalfEdge => "HalfEdge".into(), + Self::Vertex => "Vertex".into(), + Self::Closure(closure) => format!("{}", closure).into(), + } + } +} + +impl Display for VariableType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::String => write!(f, "String"), + Self::List => write!(f, "List"), + Self::Boolean => write!(f, "Boolean"), + Self::Range => write!(f, "Range"), + Self::Struct(name) => write!(f, "struct {}", name.as_str()), + Self::Scalar(name) => write!(f, "{}", name.as_str()), + Self::Vector(dimension, name) => { + write!(f, "Vector{}<{}>", dimension, name.as_str()) + } + Self::Transform(2) => write!(f, "Transform2D"), + Self::Transform(3) => write!(f, "Transform3D"), + Self::Transform(_) => unreachable!(), + Self::Quaternion => write!(f, "Quaternion"), + Self::Cycle => write!(f, "Cycle"), + Self::Region => write!(f, "Region"), + Self::Sketch => write!(f, "Sketch"), + Self::Surface => write!(f, "Surface"), + Self::Solid => write!(f, "Solid"), + Self::Shell => write!(f, "Shell"), + Self::Face => write!(f, "Face"), + Self::Curve => write!(f, "Curve"), + Self::HalfEdge => write!(f, "HalfEdge"), + Self::Vertex => write!(f, "Vertex"), + Self::Closure(closure) => write!(f, "{}", closure), + } + } +} + +#[derive(Debug, Hash, Eq, PartialEq, Clone)] +pub struct MemberVariableType { + pub ty: VariableType, + pub default_value: Option, +} + +impl Display for MemberVariableType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + if self.default_value.is_some() { + write!(f, "{} = default", self.ty) + } else { + write!(f, "{}", self.ty) + } + } +} + +#[derive(Debug, Hash, Eq, PartialEq, Clone)] +pub struct MemberVariable { + pub name: String, + pub ty: MemberVariableType, +} + +impl Display for MemberVariable { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + if self.ty.default_value.is_some() { + write!(f, "{}: {} = default", self.name.as_str(), self.ty.ty) + } else { + write!(f, "{}: {}", self.name.as_str(), self.ty.ty) + } + } +} diff --git a/crates/interpreter/src/lib.rs b/crates/interpreter/src/lib.rs index f59858a..2b2752a 100644 --- a/crates/interpreter/src/lib.rs +++ b/crates/interpreter/src/lib.rs @@ -1,4 +1,5 @@ mod compile; +mod execution; // mod types; pub use compile::{compile, new_parser}; From aa6b97503f46bcfe7198f88fe49eda7c667b02c6 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 5 Apr 2025 13:18:12 -0400 Subject: [PATCH 007/106] Implement void and default expressions --- crates/interpreter/src/compile/expressions.rs | 58 ++++--- crates/interpreter/src/compile/mod.rs | 9 ++ crates/interpreter/src/compile/statements.rs | 19 +-- crates/interpreter/src/execution/errors.rs | 73 ++++----- crates/interpreter/src/execution/logging.rs | 66 +++++++- crates/interpreter/src/execution/mod.rs | 48 +++++- crates/interpreter/src/execution/stack.rs | 141 ++++++++++++++++++ .../src/execution/values/default.rs | 4 +- .../interpreter/src/execution/values/mod.rs | 48 +++--- .../src/execution/values/{none.rs => void.rs} | 12 +- 10 files changed, 358 insertions(+), 120 deletions(-) create mode 100644 crates/interpreter/src/execution/stack.rs rename crates/interpreter/src/execution/values/{none.rs => void.rs} (83%) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 0d425fa..b4891ea 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -918,18 +918,13 @@ pub fn compile<'t, 'i>( #[cfg(test)] mod test { - use super::*; + use crate::compile::full_compile; - fn full_compile(input: &str) -> AstNode { - let test_file = Arc::new(PathBuf::from("test_file.ccm")); - let mut tree = new_parser(); - let root = tree.parse(input, None).unwrap(); - compile(&test_file, input, &root).unwrap() - } + use super::*; #[test] fn binary_expression() { - let root = full_compile("2i + 3i"); + let root = full_compile("test_file.ccm", "2i + 3i"); let binary_expression = root.node.as_binaryexpression().unwrap(); let operation_reference = binary_expression.node.operation.reference.clone(); @@ -973,7 +968,7 @@ mod test { #[test] fn boolean_true() { - let root = full_compile("true"); + let root = full_compile("test_file.ccm", "true"); assert_eq!( root, AstNode { @@ -988,7 +983,7 @@ mod test { #[test] fn boolean_false() { - let root = full_compile("false"); + let root = full_compile("test_file.ccm", "false"); assert_eq!( root, AstNode { @@ -1003,7 +998,7 @@ mod test { #[test] fn closure_definition() { - let root = full_compile("()[this, that] -> () {}"); + let root = full_compile("test_file.ccm", "()[this, that] -> () {}"); let closure = root.node.as_closuredefinition().unwrap(); let closure_reference = closure.reference.clone(); let argument = &closure.node.argument; @@ -1073,7 +1068,7 @@ mod test { #[test] fn default() { - let root = full_compile("default"); + let root = full_compile("test_file.ccm", "default"); assert_eq!( root, AstNode { @@ -1088,7 +1083,7 @@ mod test { #[test] fn dictionary_construction() { - let root = full_compile("(a = true, b = false)"); + let root = full_compile("test_file.ccm", "(a = true, b = false)"); let construction_expression = root.node.as_dictionaryconstruction().unwrap(); assert_eq!(construction_expression.node.assignments.len(), 2); let a = &construction_expression.node.assignments[0]; @@ -1133,7 +1128,7 @@ mod test { #[test] fn if_expression() { - let root = full_compile("if true {}"); + let root = full_compile("test_file.ccm", "if true {}"); let if_expression = root.node.as_if().unwrap(); let if_reference = if_expression.reference.clone(); let condition = &if_expression.node.condition; @@ -1169,7 +1164,7 @@ mod test { #[test] fn if_else_expression() { - let root = full_compile("if true {} else {}"); + let root = full_compile("test_file.ccm", "if true {} else {}"); let if_expression = root.node.as_if().unwrap(); let if_reference = if_expression.reference.clone(); let condition = &if_expression.node.condition; @@ -1215,7 +1210,7 @@ mod test { #[test] fn list() { - let root = full_compile("[1i, 2i, 3i, 4i, 5i]"); + let root = full_compile("test_file.ccm", "[1i, 2i, 3i, 4i, 5i]"); let list = root.node.as_list().unwrap(); let list_reference = list.reference.clone(); @@ -1305,7 +1300,7 @@ mod test { #[test] fn parenthesis() { - let root = full_compile("(5i)"); + let root = full_compile("test_file.ccm", "(5i)"); let parenthesis = root.node.as_parenthesis().unwrap(); let parenthesis_reference = parenthesis.reference.clone(); let integer = parenthesis.node.as_signedinteger().unwrap(); @@ -1329,7 +1324,7 @@ mod test { #[test] fn local_path() { - let root = full_compile("this.thang"); + let root = full_compile("test_file.ccm", "this.thang"); let path = root.node.as_path().unwrap(); let this = &path.node.path[0]; let thang = &path.node.path[1]; @@ -1360,7 +1355,7 @@ mod test { #[test] fn argument_path() { - let root = full_compile("@.this.thang"); + let root = full_compile("test_file.ccm", "@.this.thang"); let path = root.node.as_path().unwrap(); let this = &path.node.path[0]; let thang = &path.node.path[1]; @@ -1392,7 +1387,7 @@ mod test { #[test] fn procedural_block() { // An unimpressive test. The more in-depth testing gets done in statements.rs - let root = full_compile("{}"); + let root = full_compile("test_file.ccm", "{}"); assert_eq!( root, AstNode { @@ -1407,7 +1402,7 @@ mod test { #[test] fn scalar_no_decimal() { - let root = full_compile("0"); + let root = full_compile("test_file.ccm", "0"); assert_eq!( root, @@ -1426,7 +1421,7 @@ mod test { #[test] fn scalar_no_unit() { - let root = full_compile("0.0"); + let root = full_compile("test_file.ccm", "0.0"); assert_eq!( root, AstNode { @@ -1444,7 +1439,7 @@ mod test { #[test] fn scalar_with_unit() { - let root = full_compile("0.0mm"); + let root = full_compile("test_file.ccm", "0.0mm"); assert_eq!( root, AstNode { @@ -1463,7 +1458,7 @@ mod test { #[test] fn scalar_unit_conversion() { // Test conversion factor - let root = full_compile("1cm"); + let root = full_compile("test_file.ccm", "1cm"); assert_eq!( root, AstNode { @@ -1481,7 +1476,7 @@ mod test { #[test] fn signed_integer() { - let root = full_compile("5i"); + let root = full_compile("test_file.ccm", "5i"); assert_eq!( root, AstNode { @@ -1496,7 +1491,7 @@ mod test { #[test] fn string() { - let root = full_compile("\"Some text\\n\""); + let root = full_compile("test_file.ccm", "\"Some text\\n\""); assert_eq!( root, AstNode { @@ -1511,7 +1506,10 @@ mod test { #[test] fn struct_definition() { - let root = full_compile("( one: std.Constraint, two: std.Constraint = a, ... )"); + let root = full_compile( + "test_file.ccm", + "( one: std.Constraint, two: std.Constraint = a, ... )", + ); let struct_definition = root.node.as_structdefinition().unwrap(); let members = &struct_definition.node.members; let one = &members[0]; @@ -1597,7 +1595,7 @@ mod test { #[test] fn unary_expression() { - let root = full_compile("-5i"); + let root = full_compile("test_file.ccm", "-5i"); let unary_expression = root.node.as_unaryexpression().unwrap(); let unary_expression_reference = unary_expression.reference.clone(); let expression_reference = unary_expression.node.expression.reference.clone(); @@ -1637,7 +1635,7 @@ mod test { #[test] fn unsigned_integer() { - let root = full_compile("5u"); + let root = full_compile("test_file.ccm", "5u"); assert_eq!( root, AstNode { @@ -1652,7 +1650,7 @@ mod test { #[test] fn void() { - let root = full_compile("()"); + let root = full_compile("test_file.ccm", "()"); assert_eq!( root, AstNode { diff --git a/crates/interpreter/src/compile/mod.rs b/crates/interpreter/src/compile/mod.rs index 4eab577..5e44ffd 100644 --- a/crates/interpreter/src/compile/mod.rs +++ b/crates/interpreter/src/compile/mod.rs @@ -76,3 +76,12 @@ impl<'t> From> for Error<'t, '_> { Self::ParseInt(value) } } + +/// Compiles a full document. Panics if there are any issues. +/// This is for testing only. +pub(crate) fn full_compile(file: impl Into, input: &str) -> AstNode { + let test_file = Arc::new(file.into()); + let mut tree = new_parser(); + let root = tree.parse(input, None).unwrap(); + crate::compile(&test_file, input, &root).unwrap() +} diff --git a/crates/interpreter/src/compile/statements.rs b/crates/interpreter/src/compile/statements.rs index 950d939..36bc2e7 100644 --- a/crates/interpreter/src/compile/statements.rs +++ b/crates/interpreter/src/compile/statements.rs @@ -208,20 +208,13 @@ impl<'t> Parse<'t, nodes::ClosedExpression<'t>> for ClosedExpression { #[cfg(test)] mod test { - use crate::{compile::PathType, new_parser}; + use crate::compile::{full_compile, PathType}; use super::*; - fn full_compile(input: &str) -> AstNode { - let test_file = Arc::new(PathBuf::from("test_file.ccm")); - let mut tree = new_parser(); - let root = tree.parse(input, None).unwrap(); - crate::compile(&test_file, input, &root).unwrap() - } - #[test] fn assign() { - let root = full_compile("{ my_value.sub_value = (); }"); + let root = full_compile("test_file.ccm", "{ my_value.sub_value = (); }"); let block = root.node.as_proceduralblock().unwrap(); let statement = &block.node.statements[0]; let assign = statement.node.as_assign().unwrap(); @@ -286,7 +279,7 @@ mod test { #[test] fn assign_let() { - let root = full_compile("{ let my_value = (); }"); + let root = full_compile("test_file.ccm", "{ let my_value = (); }"); let block = root.node.as_proceduralblock().unwrap(); let statement = &block.node.statements[0]; let let_assign = statement.node.as_let().unwrap(); @@ -339,7 +332,7 @@ mod test { #[test] fn for_statement() { - let root = full_compile("{ for i in () {} }"); + let root = full_compile("test_file.ccm", "{ for i in () {} }"); let block = root.node.as_proceduralblock().unwrap(); let statement = &block.node.statements[0]; let for_loop = statement.node.as_for().unwrap(); @@ -390,7 +383,7 @@ mod test { #[test] fn expression() { - let root = full_compile("{ () }"); + let root = full_compile("test_file.ccm", "{ () }"); let block = root.node.as_proceduralblock().unwrap(); let statement = &block.node.statements[0]; let expression = statement.node.as_expression().unwrap(); @@ -420,7 +413,7 @@ mod test { #[test] fn closed_expression() { - let root = full_compile("{ (); }"); + let root = full_compile("test_file.ccm", "{ (); }"); let block = root.node.as_proceduralblock().unwrap(); let statement = &block.node.statements[0]; let closed_expression = statement.node.as_closedexpression().unwrap(); diff --git a/crates/interpreter/src/execution/errors.rs b/crates/interpreter/src/execution/errors.rs index ff23d80..b7055c6 100644 --- a/crates/interpreter/src/execution/errors.rs +++ b/crates/interpreter/src/execution/errors.rs @@ -17,22 +17,16 @@ */ use super::logging::StackPoint; -use std::{any::Any, fmt::Display}; +use std::{any::Any, fmt::Display, iter::once}; -pub type OperatorResult = std::result::Result; +pub type ExpressionResult = std::result::Result; -#[derive(Debug, Eq)] +#[derive(Debug)] pub struct Error { pub ty: Box, pub trace: Vec, } -impl PartialEq for Error { - fn eq(&self, other: &Self) -> bool { - self.ty.as_ref() == other.ty.as_ref() && self.trace == other.trace - } -} - impl Display for Error { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { writeln!(f, "{}", self.ty)?; @@ -48,46 +42,41 @@ impl Display for Error { pub trait ErrorType: std::fmt::Debug + std::fmt::Display + Any {} pub trait Raise { - fn raise(self, stack_trace: &[StackPoint]) -> OperatorResult; + fn raise<'s, R>( + self, + stack_trace: impl IntoIterator, + ) -> ExpressionResult; + + fn raise_with_line<'s, R>( + self, + stack_trace: impl IntoIterator, + current_line: StackPoint, + ) -> ExpressionResult; } impl Raise for E { - fn raise(self, stack_trace: &[StackPoint]) -> OperatorResult { + fn raise<'s, R>( + self, + stack_trace: impl IntoIterator, + ) -> ExpressionResult { Err(Error { ty: Box::new(self), - trace: stack_trace.into(), + trace: stack_trace.into_iter().cloned().collect(), }) } -} - -trait AutoAny { - fn as_any(&self) -> &dyn Any; -} - -impl AutoAny for A { - fn as_any(&self) -> &dyn Any { - self as &dyn Any - } -} - -trait DynEq { - fn dyn_eq(&self, other: &dyn AutoAny) -> bool; -} - -impl DynEq for D { - fn dyn_eq(&self, other: &dyn AutoAny) -> bool { - if let Some(other) = other.as_any().downcast_ref::() { - todo!() - } else { - false - } - } -} -impl PartialEq for dyn ErrorType { - fn eq(&self, other: &Self) -> bool { - todo!() + fn raise_with_line<'s, R>( + self, + stack_trace: impl IntoIterator, + current_line: StackPoint, + ) -> ExpressionResult { + Err(Error { + ty: Box::new(self), + trace: stack_trace + .into_iter() + .cloned() + .chain(once(current_line)) + .collect(), + }) } } - -impl Eq for dyn ErrorType {} diff --git a/crates/interpreter/src/execution/logging.rs b/crates/interpreter/src/execution/logging.rs index 6aa662e..65d3598 100644 --- a/crates/interpreter/src/execution/logging.rs +++ b/crates/interpreter/src/execution/logging.rs @@ -1,4 +1,10 @@ -use std::{borrow::Cow, fmt::Display, path::PathBuf, sync::Arc}; +use std::{ + borrow::Cow, + fmt::Display, + ops::{Deref, DerefMut}, + path::PathBuf, + sync::Arc, +}; use tree_sitter::Point as FilePoint; @@ -25,6 +31,64 @@ impl Display for StackPoint { } } +/// A string that knows what file it came from. +pub struct LocatedString { + pub location: StackPoint, + pub string: String, +} + +impl Deref for LocatedString { + type Target = String; + + fn deref(&self) -> &Self::Target { + &self.string + } +} + +impl DerefMut for LocatedString { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.string + } +} + +impl AsRef for LocatedString { + fn as_ref(&self) -> &str { + self.string.as_ref() + } +} + +/// A str that knows what file it came from. +pub struct LocatedStr<'s> { + pub location: StackPoint, + pub string: &'s str, +} + +impl<'s> Deref for LocatedStr<'s> { + type Target = &'s str; + + fn deref(&self) -> &Self::Target { + &self.string + } +} + +impl<'s> From<&'s LocatedString> for LocatedStr<'s> { + fn from(value: &'s LocatedString) -> Self { + Self { + location: value.location.clone(), + string: &value.string, + } + } +} + +impl<'s> From<&'s LocatedStr<'s>> for LocatedStr<'s> { + fn from(value: &'s LocatedStr<'s>) -> Self { + Self { + location: value.location.clone(), + string: &value.string, + } + } +} + #[derive(Debug)] pub struct LogMessage { pub origin: StackPoint, diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 2bf8c82..7aa0360 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -1,9 +1,12 @@ -use crate::compile::Expression; +use crate::compile; mod errors; mod formatting; mod logging; +mod stack; pub mod values; +use errors::ExpressionResult; +use values::Value; /// Caches the products of expressions. pub struct Cache {} @@ -14,4 +17,45 @@ pub struct CachedExpression {} pub struct RuntimeContext {} -pub fn execute_expression(expression: &Expression) {} +pub fn execute_expression( + expression: &compile::AstNode, +) -> ExpressionResult { + match &expression.node { + compile::Expression::BinaryExpression(ast_node) => todo!(), + compile::Expression::Boolean(ast_node) => todo!(), + compile::Expression::ClosureDefinition(ast_node) => todo!(), + compile::Expression::Default(_ast_node) => Ok(values::DefaultValue.into()), + compile::Expression::DictionaryConstruction(ast_node) => todo!(), + compile::Expression::If(ast_node) => todo!(), + compile::Expression::List(ast_node) => todo!(), + compile::Expression::Parenthesis(ast_node) => todo!(), + compile::Expression::Path(ast_node) => todo!(), + compile::Expression::ProceduralBlock(ast_node) => todo!(), + compile::Expression::Scalar(ast_node) => todo!(), + compile::Expression::SignedInteger(ast_node) => todo!(), + compile::Expression::String(ast_node) => todo!(), + compile::Expression::StructDefinition(ast_node) => todo!(), + compile::Expression::UnaryExpression(ast_node) => todo!(), + compile::Expression::UnsignedInteger(ast_node) => todo!(), + compile::Expression::Void(_ast_node) => Ok(values::Void.into()), + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn none_type() { + let root = compile::full_compile("test_file.ccm", "()"); + let product = execute_expression(&root).unwrap(); + assert_eq!(product, values::Void.into()); + } + + #[test] + fn default_type() { + let root = compile::full_compile("test_file.ccm", "default"); + let product = execute_expression(&root).unwrap(); + assert_eq!(product, values::DefaultValue.into()); + } +} diff --git a/crates/interpreter/src/execution/stack.rs b/crates/interpreter/src/execution/stack.rs new file mode 100644 index 0000000..7dbf75a --- /dev/null +++ b/crates/interpreter/src/execution/stack.rs @@ -0,0 +1,141 @@ +/* + * Copyright 2025 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use super::{ + errors::{ErrorType, ExpressionResult, Raise}, + logging::{LocatedStr, StackPoint}, + values::Value, +}; +use compact_str::CompactString; +use std::{collections::HashMap, fmt::Display}; + +#[derive(Debug, Clone, Copy)] +pub enum ScopeType { + Isolated, + Inherited, +} + +struct Scope { + ty: ScopeType, + variables: HashMap, +} + +pub struct Stack { + scopes: Vec, + trace: Vec, + active_scope: usize, +} + +macro_rules! generate_variable_getter { + ($self:ident, $stack_trace: ident, $name:ident, $iter:ident, $get:ident, $mutable:ident) => {{ + let mut scope_iterator = $self.scopes[..=$self.active_scope].$iter().rev(); + + for scope in &mut scope_iterator { + if let Some(value) = scope.variables.$get($name.string) { + return Ok(value); + } + + match &scope.ty { + // If this scope is isolated, then we should not continue searching up the stack. + ScopeType::Isolated => { + break; + } + _ => {} + } + } + + NotInScopeError { + variable_name: $name.string.to_string(), + } + .raise_with_line($stack_trace, $name.location.clone()) + }}; +} + +#[derive(Debug, Eq, PartialEq)] +struct NotInScopeError { + variable_name: String, +} + +impl ErrorType for NotInScopeError {} + +impl Display for NotInScopeError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "`{}` could not be found in the current scope", + self.variable_name + ) + } +} + +impl Stack { + pub fn push_scope<'s>( + &mut self, + variables_to_copy: impl Iterator>, + point: StackPoint, + mode: ScopeType, + ) -> ExpressionResult<()> { + let next_scope_index = self.active_scope + 1; + if next_scope_index >= self.scopes.len() { + self.scopes.push(Scope { + variables: HashMap::new(), + ty: mode, + }); + } + + self.scopes[next_scope_index].ty = mode; + + for variable in variables_to_copy { + let value = self.get_variable(&self.trace, &variable)?.clone(); + self.scopes[next_scope_index] + .variables + .insert(variable.string.into(), value); + } + + self.active_scope = next_scope_index; + self.trace.push(point); + + Ok(()) + } + + pub(super) fn pop_scope(&mut self) { + self.scopes[self.active_scope].variables.clear(); + self.active_scope -= 1; + self.trace.pop(); + } + + // TODO Recommending similar named variables would help users to notice typos. + // https://crates.io/crates/levenshtein + pub fn get_variable<'s, S: Into>>( + &self, + stack_trace: &[StackPoint], + name: S, + ) -> ExpressionResult<&Value> { + let name = name.into(); + generate_variable_getter!(self, stack_trace, name, iter, get, immutable) + } + + pub fn get_variable_mut<'s, S: Into>>( + &mut self, + stack_trace: &[StackPoint], + name: S, + ) -> ExpressionResult<&mut Value> { + let name = name.into(); + generate_variable_getter!(self, stack_trace, name, iter_mut, get_mut, mutable) + } +} diff --git a/crates/interpreter/src/execution/values/default.rs b/crates/interpreter/src/execution/values/default.rs index 0a9f9cb..5d49a8e 100644 --- a/crates/interpreter/src/execution/values/default.rs +++ b/crates/interpreter/src/execution/values/default.rs @@ -18,7 +18,7 @@ use crate::execution::logging::{RuntimeLog, StackPoint}; -use super::{value_type::VariableType, Object, OperatorResult, StaticTypeName}; +use super::{value_type::VariableType, ExpressionResult, Object, StaticTypeName}; #[derive(Debug, Clone, Eq, PartialEq, Hash)] pub struct DefaultValue; @@ -29,7 +29,7 @@ impl Object for DefaultValue { _ty: &VariableType, _log: &mut dyn RuntimeLog, _stack_trace: &[StackPoint], - ) -> OperatorResult { + ) -> ExpressionResult { Ok(false) } } diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 2709131..24d6115 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -5,15 +5,15 @@ use enum_downcast::{AsVariant, EnumDowncast}; use value_type::VariableType; use super::{ - errors::{ErrorType, OperatorResult, Raise as _}, + errors::{ErrorType, ExpressionResult, Raise as _}, logging::{RuntimeLog, StackPoint}, }; -mod none; -use none::NoneType; +mod void; +pub use void::Void; mod default; -use default::DefaultValue; +pub use default::DefaultValue; mod value_type; @@ -46,7 +46,7 @@ impl UnsupportedOperationError { object: &O, stack_trace: &[StackPoint], operation_name: &'static str, - ) -> OperatorResult { + ) -> ExpressionResult { Self { type_name: object.type_name(), operation_name, @@ -62,7 +62,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { ty: &VariableType, log: &mut dyn RuntimeLog, stack_trace: &[StackPoint], - ) -> OperatorResult; + ) -> ExpressionResult; // fn format( // &self, @@ -84,7 +84,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { _log: &mut dyn RuntimeLog, stack_trace: &[StackPoint], _rhs: &Value, - ) -> OperatorResult { + ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "and") } fn or( @@ -92,7 +92,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { _log: &mut dyn RuntimeLog, stack_trace: &[StackPoint], _rhs: Value, - ) -> OperatorResult { + ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "or") } fn cmp( @@ -100,7 +100,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { _log: &mut dyn RuntimeLog, stack_trace: &[StackPoint], _rhs: &Value, - ) -> OperatorResult { + ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "compare") } fn eq( @@ -108,7 +108,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { log: &mut dyn RuntimeLog, stack_trace: &[StackPoint], rhs: &Value, - ) -> OperatorResult { + ) -> ExpressionResult { Ok(matches!(self.cmp(log, stack_trace, rhs)?, Ordering::Equal)) } fn addition( @@ -116,7 +116,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { _log: &mut dyn RuntimeLog, stack_trace: &[StackPoint], _rhs: &Value, - ) -> OperatorResult { + ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "addition") } fn subtraction( @@ -124,7 +124,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { _log: &mut dyn RuntimeLog, stack_trace: &[StackPoint], _rhs: &Value, - ) -> OperatorResult { + ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "subtraction") } fn multiply( @@ -132,7 +132,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { _log: &mut dyn RuntimeLog, stack_trace: &[StackPoint], _rhs: &Value, - ) -> OperatorResult { + ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "multiply") } fn divide( @@ -140,7 +140,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { _log: &mut dyn RuntimeLog, stack_trace: &[StackPoint], _rhs: &Value, - ) -> OperatorResult { + ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "divide") } // fn attribute( @@ -175,35 +175,35 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { _log: &mut dyn RuntimeLog, stack_trace: &[StackPoint], _index: Value, - ) -> OperatorResult { + ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "index") } fn iterate( &self, _log: &mut dyn RuntimeLog, stack_trace: &[StackPoint], - ) -> OperatorResult>> { + ) -> ExpressionResult>> { UnsupportedOperationError::raise(self, stack_trace, "iterate") } fn unary_plus( &self, _log: &mut dyn RuntimeLog, stack_trace: &[StackPoint], - ) -> OperatorResult { + ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "unary plus") } fn unary_minus( &self, _log: &mut dyn RuntimeLog, stack_trace: &[StackPoint], - ) -> OperatorResult { + ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "unary minus") } fn unary_logical_not( &self, _log: &mut dyn RuntimeLog, stack_trace: &[StackPoint], - ) -> OperatorResult { + ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "unary logical not") } @@ -219,7 +219,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { #[enum_dispatch(Object)] #[derive(Debug, Hash, Eq, PartialEq, EnumDowncast, Clone)] pub enum Value { - NoneType, + Void, Default(DefaultValue), // Boolean, // BuiltinFunction(BuiltinFunctionRef), @@ -270,7 +270,7 @@ impl Display for DowncastError { } impl Value { - pub fn downcast_ref(&self, stack_trace: &[StackPoint]) -> OperatorResult<&T> + pub fn downcast_ref(&self, stack_trace: &[StackPoint]) -> ExpressionResult<&T> where T: StaticTypeName, Self: AsVariant, @@ -286,7 +286,7 @@ impl Value { } } - pub fn downcast(self, stack_trace: &[StackPoint]) -> OperatorResult + pub fn downcast(self, stack_trace: &[StackPoint]) -> ExpressionResult where T: StaticTypeName, Self: TryInto, @@ -301,13 +301,13 @@ impl Value { } } - pub fn downcast_optional(self, stack_trace: &[StackPoint]) -> OperatorResult> + pub fn downcast_optional(self, stack_trace: &[StackPoint]) -> ExpressionResult> where T: StaticTypeName, Self: TryInto, { match self { - Self::NoneType(_) => Ok(None), + Self::Void(_) => Ok(None), this => Ok(Some(this.downcast::(stack_trace)?)), } } diff --git a/crates/interpreter/src/execution/values/none.rs b/crates/interpreter/src/execution/values/void.rs similarity index 83% rename from crates/interpreter/src/execution/values/none.rs rename to crates/interpreter/src/execution/values/void.rs index 71fdb5d..7cd2978 100644 --- a/crates/interpreter/src/execution/values/none.rs +++ b/crates/interpreter/src/execution/values/void.rs @@ -18,24 +18,24 @@ use crate::execution::logging::{RuntimeLog, StackPoint}; -use super::{value_type::VariableType, Object, OperatorResult, StaticTypeName}; +use super::{value_type::VariableType, ExpressionResult, Object, StaticTypeName}; #[derive(Debug, Hash, Clone, Eq, PartialEq)] -pub struct NoneType; +pub struct Void; -impl Object for NoneType { +impl Object for Void { fn matches_type( &self, _ty: &VariableType, _log: &mut dyn RuntimeLog, _stack_trace: &[StackPoint], - ) -> OperatorResult { + ) -> ExpressionResult { Ok(false) } } -impl StaticTypeName for NoneType { +impl StaticTypeName for Void { fn static_type_name() -> &'static str { - "None" + "Void" } } From 827e46b6c6fe1250e8c81a800b2b89c275f56ab6 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 6 Apr 2025 11:27:59 -0400 Subject: [PATCH 008/106] Add integer --- Cargo.lock | 1 + crates/interpreter/Cargo.toml | 1 + crates/interpreter/src/compile/expressions.rs | 152 +- crates/interpreter/src/compile/mod.rs | 9 +- crates/interpreter/src/execution/errors.rs | 39 +- crates/interpreter/src/execution/logging.rs | 47 +- crates/interpreter/src/execution/mod.rs | 130 +- crates/interpreter/src/execution/stack.rs | 15 +- .../src/execution/values/default.rs | 4 +- .../src/execution/values/integer.rs | 386 + .../interpreter/src/execution/values/mod.rs | 132 +- .../src/execution/values/value_type.rs | 23 +- .../interpreter/src/execution/values/void.rs | 4 +- .../tree-sitter-command-cad-model/grammar.js | 6 +- .../src/grammar.json | 71 +- .../src/node-types.json | 44 +- .../src/parser.c | 7983 +++++++++-------- .../test/corpus/assignment.txt | 4 +- .../test/corpus/closure.txt | 2 +- .../test/corpus/code_block.txt | 10 +- .../test/corpus/primitives.txt | 83 +- 21 files changed, 5415 insertions(+), 3731 deletions(-) create mode 100644 crates/interpreter/src/execution/values/integer.rs diff --git a/Cargo.lock b/Cargo.lock index 54a78ba..7d1f917 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -937,6 +937,7 @@ dependencies = [ "enum_dispatch", "enum_downcast", "file-guard", + "num-traits", "tree-sitter", "tree-sitter-command-cad-model", "type-sitter", diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index 7d623db..6d959ba 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -14,6 +14,7 @@ file-guard = "0.2.0" enum_dispatch = "0.3" enum_downcast = { version = "0.1", features = [ "derive" ] } compact_str = "0.9" +num-traits = "0.2" [build-dependencies] type-sitter-gen = "0.6" diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index b4891ea..7974a4d 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -16,6 +16,12 @@ pub struct InvalidUnitError<'t, 'i> { #[derive(Debug, Eq, PartialEq)] pub struct ParseIntError<'t> { + pub error: std::num::ParseIntError, + pub node: nodes::Integer<'t>, +} + +#[derive(Debug, Eq, PartialEq)] +pub struct ParseNumberError<'t> { pub error: std::num::ParseIntError, pub node: nodes::Number<'t>, } @@ -244,9 +250,29 @@ impl<'t> Parse<'t, nodes::SignedInteger<'t>> for Expression { input: &'i str, value: nodes::SignedInteger<'t>, ) -> Result, Error<'t, 'i>> { - let value = value.value()?; - let text = &input[value.byte_range()]; - let integer = text.parse().unwrap(); + let number = value.value()?; + let integer = match number.child()? { + nodes::anon_unions::BaseTen_Binary_Hex_Octal::Hex(value) => { + let text = &input[value.byte_range()][2..]; + i64::from_str_radix(text, 16) + } + nodes::anon_unions::BaseTen_Binary_Hex_Octal::BaseTen(value) => { + let text = &input[value.byte_range()]; + i64::from_str_radix(text, 10) + } + nodes::anon_unions::BaseTen_Binary_Hex_Octal::Octal(value) => { + let text = &input[value.byte_range()][2..]; + i64::from_str_radix(text, 8) + } + nodes::anon_unions::BaseTen_Binary_Hex_Octal::Binary(value) => { + let text = &input[value.byte_range()][2..]; + i64::from_str_radix(text, 2) + } + } + .map_err(|error| ParseIntError { + error, + node: number, + })?; Ok(AstNode::new( file, @@ -319,9 +345,29 @@ impl<'t> Parse<'t, nodes::UnsignedInteger<'t>> for Expression { input: &'i str, value: nodes::UnsignedInteger<'t>, ) -> Result, Error<'t, 'i>> { - let integer = value.value()?; - let text = &input[integer.byte_range()]; - let integer = text.parse().unwrap(); + let number = value.value()?; + let integer = match number.child()? { + nodes::anon_unions::BaseTen_Binary_Hex_Octal::Hex(value) => { + let text = &input[value.byte_range()][2..]; + u64::from_str_radix(text, 16) + } + nodes::anon_unions::BaseTen_Binary_Hex_Octal::BaseTen(value) => { + let text = &input[value.byte_range()]; + u64::from_str_radix(text, 10) + } + nodes::anon_unions::BaseTen_Binary_Hex_Octal::Octal(value) => { + let text = &input[value.byte_range()][2..]; + u64::from_str_radix(text, 8) + } + nodes::anon_unions::BaseTen_Binary_Hex_Octal::Binary(value) => { + let text = &input[value.byte_range()][2..]; + u64::from_str_radix(text, 2) + } + } + .map_err(|error| ParseIntError { + error, + node: number, + })?; Ok(AstNode::new( file, @@ -624,14 +670,14 @@ impl<'t> Parse<'t, nodes::Scalar<'t>> for Scalar { let whole_node = value.whole()?; let whole = &input[whole_node.byte_range()]; - let whole: u64 = whole.parse().map_err(|error| ParseIntError { + let whole: u64 = whole.parse().map_err(|error| ParseNumberError { error, node: whole_node, })?; let (fraction, fraction_len): (u64, _) = if let Some(fractional_node) = value.fractional() { let fraction_str = &input[fractional_node.byte_range()]; - let fraction = fraction_str.parse().map_err(|error| ParseIntError { + let fraction = fraction_str.parse().map_err(|error| ParseNumberError { error, node: whole_node, })?; @@ -1489,6 +1535,51 @@ mod test { ); } + #[test] + fn signed_integer_hex() { + let root = full_compile("test_file.ccm", "0x5i"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::SignedInteger(AstNode { + reference: root.node.as_signedinteger().unwrap().reference.clone(), + node: 0x5 + }) + } + ); + } + + #[test] + fn signed_integer_octal() { + let root = full_compile("test_file.ccm", "0o5i"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::SignedInteger(AstNode { + reference: root.node.as_signedinteger().unwrap().reference.clone(), + node: 0o5 + }) + } + ); + } + + #[test] + fn signed_integer_binary() { + let root = full_compile("test_file.ccm", "0b1010i"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::SignedInteger(AstNode { + reference: root.node.as_signedinteger().unwrap().reference.clone(), + node: 0b1010 + }) + } + ); + } + #[test] fn string() { let root = full_compile("test_file.ccm", "\"Some text\\n\""); @@ -1648,6 +1739,51 @@ mod test { ); } + #[test] + fn unsigned_integer_hex() { + let root = full_compile("test_file.ccm", "0x5u"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::UnsignedInteger(AstNode { + reference: root.node.as_unsignedinteger().unwrap().reference.clone(), + node: 0x5 + }) + } + ); + } + + #[test] + fn unsigned_integer_octal() { + let root = full_compile("test_file.ccm", "0o5u"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::UnsignedInteger(AstNode { + reference: root.node.as_unsignedinteger().unwrap().reference.clone(), + node: 0o5 + }) + } + ); + } + + #[test] + fn unsigned_integer_binary() { + let root = full_compile("test_file.ccm", "0b1010u"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::UnsignedInteger(AstNode { + reference: root.node.as_unsignedinteger().unwrap().reference.clone(), + node: 0b1010 + }) + } + ); + } + #[test] fn void() { let root = full_compile("test_file.ccm", "()"); diff --git a/crates/interpreter/src/compile/mod.rs b/crates/interpreter/src/compile/mod.rs index 5e44ffd..9eb1070 100644 --- a/crates/interpreter/src/compile/mod.rs +++ b/crates/interpreter/src/compile/mod.rs @@ -13,7 +13,7 @@ mod nodes { #[derive(Debug, Hash, Eq, PartialEq)] pub struct AstNode { - reference: SourceReference, + pub reference: SourceReference, pub node: N, } @@ -63,6 +63,7 @@ pub enum Error<'t, 'i> { IncorrectKind(IncorrectKind<'t>), InvalidUnit(InvalidUnitError<'t, 'i>), ParseInt(ParseIntError<'t>), + ParseNumber(ParseNumberError<'t>), } impl<'t> From> for Error<'t, '_> { @@ -77,6 +78,12 @@ impl<'t> From> for Error<'t, '_> { } } +impl<'t> From> for Error<'t, '_> { + fn from(value: ParseNumberError<'t>) -> Self { + Self::ParseNumber(value) + } +} + /// Compiles a full document. Panics if there are any issues. /// This is for testing only. pub(crate) fn full_compile(file: impl Into, input: &str) -> AstNode { diff --git a/crates/interpreter/src/execution/errors.rs b/crates/interpreter/src/execution/errors.rs index b7055c6..96306ed 100644 --- a/crates/interpreter/src/execution/errors.rs +++ b/crates/interpreter/src/execution/errors.rs @@ -16,15 +16,16 @@ * program. If not, see . */ -use super::logging::StackPoint; use std::{any::Any, fmt::Display, iter::once}; +use crate::compile::SourceReference; + pub type ExpressionResult = std::result::Result; #[derive(Debug)] pub struct Error { pub ty: Box, - pub trace: Vec, + pub trace: Vec, } impl Display for Error { @@ -39,36 +40,54 @@ impl Display for Error { } } +/// A generic error that will just display a static message. +#[derive(Debug, Eq, PartialEq)] +pub struct GenericFailure(pub &'static str); + +impl ErrorType for GenericFailure {} + +impl Display for GenericFailure { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.0) + } +} + pub trait ErrorType: std::fmt::Debug + std::fmt::Display + Any {} pub trait Raise { fn raise<'s, R>( self, - stack_trace: impl IntoIterator, + stack_trace: impl IntoIterator, ) -> ExpressionResult; + fn to_error<'s>(self, stack_trace: impl IntoIterator) -> Error; + fn raise_with_line<'s, R>( self, - stack_trace: impl IntoIterator, - current_line: StackPoint, + stack_trace: impl IntoIterator, + current_line: SourceReference, ) -> ExpressionResult; } impl Raise for E { fn raise<'s, R>( self, - stack_trace: impl IntoIterator, + stack_trace: impl IntoIterator, ) -> ExpressionResult { - Err(Error { + Err(self.to_error(stack_trace)) + } + + fn to_error<'s>(self, stack_trace: impl IntoIterator) -> Error { + Error { ty: Box::new(self), trace: stack_trace.into_iter().cloned().collect(), - }) + } } fn raise_with_line<'s, R>( self, - stack_trace: impl IntoIterator, - current_line: StackPoint, + stack_trace: impl IntoIterator, + current_line: SourceReference, ) -> ExpressionResult { Err(Error { ty: Box::new(self), diff --git a/crates/interpreter/src/execution/logging.rs b/crates/interpreter/src/execution/logging.rs index 65d3598..00e044b 100644 --- a/crates/interpreter/src/execution/logging.rs +++ b/crates/interpreter/src/execution/logging.rs @@ -2,38 +2,57 @@ use std::{ borrow::Cow, fmt::Display, ops::{Deref, DerefMut}, - path::PathBuf, - sync::Arc, }; -use tree_sitter::Point as FilePoint; +use crate::compile::SourceReference; pub trait RuntimeLog { - fn push(&mut self, message: LogMessage); + fn push_message(&mut self, message: LogMessage); } -#[derive(Debug, Eq, PartialEq, Clone)] -pub struct StackPoint { - pub file: Arc, - pub file_point: FilePoint, +impl RuntimeLog for Vec { + fn push_message(&mut self, message: LogMessage) { + self.push(message); + } +} + +/// Makes for a stack scope that will not forget to pop if you break out early +/// in some way. +pub trait StackScope { + fn stack_scope(&mut self, point: impl Into, code: F) -> R + where + F: FnOnce(&mut Self) -> R; +} + +impl StackScope for Vec { + fn stack_scope(&mut self, point: impl Into, code: F) -> R + where + F: FnOnce(&mut Self) -> R, + { + self.push(point.into()); + let result = code(self); + self.pop(); + + result + } } -impl Display for StackPoint { +impl Display for SourceReference { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, "{}:{}:{}", self.file.to_string_lossy(), // Most IDEs expect the first line to be 1. - self.file_point.row + 1, - self.file_point.column + 1 + self.range.start_point.row + 1, + self.range.start_point.column + 1 ) } } /// A string that knows what file it came from. pub struct LocatedString { - pub location: StackPoint, + pub location: SourceReference, pub string: String, } @@ -59,7 +78,7 @@ impl AsRef for LocatedString { /// A str that knows what file it came from. pub struct LocatedStr<'s> { - pub location: StackPoint, + pub location: SourceReference, pub string: &'s str, } @@ -91,7 +110,7 @@ impl<'s> From<&'s LocatedStr<'s>> for LocatedStr<'s> { #[derive(Debug)] pub struct LogMessage { - pub origin: StackPoint, + pub origin: SourceReference, pub level: LogLevel, pub message: Cow<'static, str>, } diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 7aa0360..7ff35b8 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -1,4 +1,4 @@ -use crate::compile; +use crate::compile::{self, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation}; mod errors; mod formatting; @@ -6,7 +6,8 @@ mod logging; mod stack; pub mod values; use errors::ExpressionResult; -use values::Value; +use logging::{RuntimeLog, StackScope}; +use values::{Object, Value}; /// Caches the products of expressions. pub struct Cache {} @@ -18,27 +19,96 @@ pub struct CachedExpression {} pub struct RuntimeContext {} pub fn execute_expression( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, expression: &compile::AstNode, ) -> ExpressionResult { - match &expression.node { - compile::Expression::BinaryExpression(ast_node) => todo!(), - compile::Expression::Boolean(ast_node) => todo!(), - compile::Expression::ClosureDefinition(ast_node) => todo!(), - compile::Expression::Default(_ast_node) => Ok(values::DefaultValue.into()), - compile::Expression::DictionaryConstruction(ast_node) => todo!(), - compile::Expression::If(ast_node) => todo!(), - compile::Expression::List(ast_node) => todo!(), - compile::Expression::Parenthesis(ast_node) => todo!(), - compile::Expression::Path(ast_node) => todo!(), - compile::Expression::ProceduralBlock(ast_node) => todo!(), - compile::Expression::Scalar(ast_node) => todo!(), - compile::Expression::SignedInteger(ast_node) => todo!(), - compile::Expression::String(ast_node) => todo!(), - compile::Expression::StructDefinition(ast_node) => todo!(), - compile::Expression::UnaryExpression(ast_node) => todo!(), - compile::Expression::UnsignedInteger(ast_node) => todo!(), - compile::Expression::Void(_ast_node) => Ok(values::Void.into()), - } + stack_trace.stack_scope( + expression.reference.clone(), + |stack_trace| match &expression.node { + compile::Expression::BinaryExpression(ast_node) => { + execute_binary_expression(log, stack_trace, ast_node) + } + compile::Expression::Boolean(ast_node) => todo!(), + compile::Expression::ClosureDefinition(ast_node) => todo!(), + compile::Expression::Default(_ast_node) => Ok(values::DefaultValue.into()), + compile::Expression::DictionaryConstruction(ast_node) => todo!(), + compile::Expression::If(ast_node) => todo!(), + compile::Expression::List(ast_node) => todo!(), + compile::Expression::Parenthesis(ast_node) => todo!(), + compile::Expression::Path(ast_node) => todo!(), + compile::Expression::ProceduralBlock(ast_node) => todo!(), + compile::Expression::Scalar(ast_node) => todo!(), + compile::Expression::SignedInteger(ast_node) => { + Ok(values::SignedInteger::from(ast_node.node).into()) + } + compile::Expression::String(ast_node) => todo!(), + compile::Expression::StructDefinition(ast_node) => todo!(), + compile::Expression::UnaryExpression(ast_node) => { + execute_unary_expression(log, stack_trace, ast_node) + } + compile::Expression::UnsignedInteger(ast_node) => { + Ok(values::UnsignedInteger::from(ast_node.node).into()) + } + compile::Expression::Void(_ast_node) => Ok(values::Void.into()), + }, + ) +} + +fn execute_unary_expression( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + expression: &compile::AstNode>, +) -> ExpressionResult { + stack_trace.stack_scope(expression.reference.clone(), |stack_trace| { + let node = &expression.node; + let value = execute_expression(log, stack_trace, &node.expression)?; + match node.operation.node { + UnaryExpressionOperation::Add => value.unary_plus(log, stack_trace), + UnaryExpressionOperation::Sub => value.unary_minus(log, stack_trace), + UnaryExpressionOperation::Not => value.unary_not(log, stack_trace), + } + }) +} + +fn execute_binary_expression( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + expression: &compile::AstNode>, +) -> ExpressionResult { + stack_trace.stack_scope( + expression.reference.clone(), + |stack_trace: &mut Vec| { + let node = &expression.node; + let value_a = execute_expression(log, stack_trace, &node.a)?; + let value_b = execute_expression(log, stack_trace, &node.b)?; + match node.operation.node { + BinaryExpressionOperation::NotEq => todo!(), + BinaryExpressionOperation::And => value_a.bit_and(log, stack_trace, &value_b), + BinaryExpressionOperation::AndAnd => value_a.and(log, stack_trace, &value_b), + BinaryExpressionOperation::Mul => value_a.multiply(log, stack_trace, &value_b), + BinaryExpressionOperation::MulMul => value_a.exponent(log, stack_trace, &value_b), + BinaryExpressionOperation::Add => value_a.addition(log, stack_trace, &value_b), + BinaryExpressionOperation::Sub => value_a.subtraction(log, stack_trace, &value_b), + BinaryExpressionOperation::DotDot => todo!(), + BinaryExpressionOperation::DotDotEq => todo!(), + BinaryExpressionOperation::Div => value_a.divide(log, stack_trace, &value_b), + BinaryExpressionOperation::DivDiv => { + value_a.floor_divide(log, stack_trace, &value_b) + } + BinaryExpressionOperation::Lt => todo!(), + BinaryExpressionOperation::LtLt => todo!(), + BinaryExpressionOperation::LtEq => todo!(), + BinaryExpressionOperation::EqEq => todo!(), + BinaryExpressionOperation::Gt => todo!(), + BinaryExpressionOperation::GtEq => todo!(), + BinaryExpressionOperation::GtGt => todo!(), + BinaryExpressionOperation::BitXor => value_a.bit_xor(log, stack_trace, &value_b), + BinaryExpressionOperation::Or => value_a.bit_or(log, stack_trace, &value_b), + BinaryExpressionOperation::OrOr => value_a.or(log, stack_trace, &value_b), + } + }, + ) } #[cfg(test)] @@ -48,14 +118,28 @@ mod test { #[test] fn none_type() { let root = compile::full_compile("test_file.ccm", "()"); - let product = execute_expression(&root).unwrap(); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); assert_eq!(product, values::Void.into()); } #[test] fn default_type() { let root = compile::full_compile("test_file.ccm", "default"); - let product = execute_expression(&root).unwrap(); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); assert_eq!(product, values::DefaultValue.into()); } + + #[test] + fn signed_integer_type() { + let root = compile::full_compile("test_file.ccm", "5i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, values::SignedInteger::from(5).into()); + } + + #[test] + fn unsigned_integer_type() { + let root = compile::full_compile("test_file.ccm", "5u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, values::UnsignedInteger::from(5).into()); + } } diff --git a/crates/interpreter/src/execution/stack.rs b/crates/interpreter/src/execution/stack.rs index 7dbf75a..9241744 100644 --- a/crates/interpreter/src/execution/stack.rs +++ b/crates/interpreter/src/execution/stack.rs @@ -16,9 +16,11 @@ * program. If not, see . */ +use crate::compile::SourceReference; + use super::{ errors::{ErrorType, ExpressionResult, Raise}, - logging::{LocatedStr, StackPoint}, + logging::LocatedStr, values::Value, }; use compact_str::CompactString; @@ -37,7 +39,6 @@ struct Scope { pub struct Stack { scopes: Vec, - trace: Vec, active_scope: usize, } @@ -87,7 +88,7 @@ impl Stack { pub fn push_scope<'s>( &mut self, variables_to_copy: impl Iterator>, - point: StackPoint, + stack_trace: &[SourceReference], mode: ScopeType, ) -> ExpressionResult<()> { let next_scope_index = self.active_scope + 1; @@ -101,14 +102,13 @@ impl Stack { self.scopes[next_scope_index].ty = mode; for variable in variables_to_copy { - let value = self.get_variable(&self.trace, &variable)?.clone(); + let value = self.get_variable(stack_trace, &variable)?.clone(); self.scopes[next_scope_index] .variables .insert(variable.string.into(), value); } self.active_scope = next_scope_index; - self.trace.push(point); Ok(()) } @@ -116,14 +116,13 @@ impl Stack { pub(super) fn pop_scope(&mut self) { self.scopes[self.active_scope].variables.clear(); self.active_scope -= 1; - self.trace.pop(); } // TODO Recommending similar named variables would help users to notice typos. // https://crates.io/crates/levenshtein pub fn get_variable<'s, S: Into>>( &self, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], name: S, ) -> ExpressionResult<&Value> { let name = name.into(); @@ -132,7 +131,7 @@ impl Stack { pub fn get_variable_mut<'s, S: Into>>( &mut self, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], name: S, ) -> ExpressionResult<&mut Value> { let name = name.into(); diff --git a/crates/interpreter/src/execution/values/default.rs b/crates/interpreter/src/execution/values/default.rs index 5d49a8e..5123733 100644 --- a/crates/interpreter/src/execution/values/default.rs +++ b/crates/interpreter/src/execution/values/default.rs @@ -16,7 +16,7 @@ * program. If not, see . */ -use crate::execution::logging::{RuntimeLog, StackPoint}; +use crate::{compile::SourceReference, execution::logging::RuntimeLog}; use super::{value_type::VariableType, ExpressionResult, Object, StaticTypeName}; @@ -28,7 +28,7 @@ impl Object for DefaultValue { &self, _ty: &VariableType, _log: &mut dyn RuntimeLog, - _stack_trace: &[StackPoint], + _stack_trace: &[SourceReference], ) -> ExpressionResult { Ok(false) } diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs new file mode 100644 index 0000000..03e149d --- /dev/null +++ b/crates/interpreter/src/execution/values/integer.rs @@ -0,0 +1,386 @@ +/* + * Copyright 2025 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use enum_downcast::AsVariant; +use num_traits::{ + pow::checked_pow, CheckedAdd, CheckedDiv, CheckedMul, CheckedSub, One, ToPrimitive, +}; +use std::{ + cmp::Ordering, + hash::Hash, + ops::{BitAnd, BitOr, BitXor, Not}, +}; + +use crate::{ + compile::SourceReference, + execution::{ + errors::{ExpressionResult, GenericFailure, Raise}, + logging::RuntimeLog, + }, +}; + +use super::{value_type::VariableType, Object, StaticTypeName, Value}; + +#[derive(Debug, Hash, Clone, Eq, PartialEq)] +pub struct Integer(pub I); + +impl From for Integer { + fn from(value: I) -> Self { + Self(value) + } +} + +impl Object for Integer +where + I: CheckedAdd + + CheckedDiv + + CheckedMul + + CheckedSub + + CheckedAdd + + Ord + + GetType + + Hash + + Copy + + Eq + + BitAnd + + BitOr + + BitXor + + Neg + + Not + + One + + ToPrimitive, + Self: StaticTypeName + Into, + Value: AsVariant, +{ + fn matches_type( + &self, + ty: &VariableType, + _log: &mut dyn RuntimeLog, + _stack_trace: &[SourceReference], + ) -> ExpressionResult { + Ok(*ty == I::get_type()) + } + + fn bit_and( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(Self(self.0 & rhs.0).into()) + } + fn bit_or( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(Self(self.0 | rhs.0).into()) + } + fn bit_xor( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(Self(self.0 ^ rhs.0).into()) + } + + fn cmp( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(self.0.cmp(&rhs.0)) + } + fn addition( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(Self(self.0.checked_add(&rhs.0).ok_or_else(|| { + GenericFailure( + "Integer overflow: The computed value is too large to store in the integer", + ) + .to_error(stack_trace) + })?) + .into()) + } + fn subtraction( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(Self(self.0.checked_sub(&rhs.0).ok_or_else(|| { + GenericFailure( + "Integer underflow: The computed value is too small to store in the integer", + ) + .to_error(stack_trace) + })?) + .into()) + } + fn multiply( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(Self(self.0.checked_mul(&rhs.0).ok_or_else(|| { + GenericFailure( + "Integer overflow: The computed value is too large to store in the integer", + ) + .to_error(stack_trace) + })?) + .into()) + } + fn divide( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(Self( + self.0 + .checked_div(&rhs.0) + .ok_or_else(|| GenericFailure("The computed value is either too large to store in the integer or you attempted to divide by zero").to_error(stack_trace))?, + ) + .into()) + } + fn floor_divide( + &self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + self.divide(log, stack_trace, rhs) + } + fn exponent( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + + // This failure can only happen on 32bit (or less) systems. + let rhs = rhs.0.to_usize().ok_or_else(|| { + GenericFailure( + "Integer overflow: The requested exponent is larger than the host machine word size", + ) + .to_error(stack_trace) + })?; + + Ok(Self(checked_pow(self.0, rhs).ok_or_else(|| { + GenericFailure( + "Integer overflow: The computed value is too large to store in the integer", + ) + .to_error(stack_trace) + })?) + .into()) + } + fn unary_plus( + &self, + _log: &mut dyn RuntimeLog, + _stack_trace: &[SourceReference], + ) -> ExpressionResult { + Ok(self.clone().into()) + } + fn unary_minus( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + ) -> ExpressionResult { + self.0.neg(stack_trace).into() + } + fn unary_not( + &self, + _log: &mut dyn RuntimeLog, + _stack_trace: &[SourceReference], + ) -> ExpressionResult { + Ok(Self(!self.0).into()) + } +} + +trait GetType { + fn get_type() -> VariableType; +} + +/// Custom version of the std::ops::Neg trait that can fail. +trait Neg { + fn neg(&self, stack_trace: &[SourceReference]) -> ExpressionResult; +} + +impl GetType for i64 { + fn get_type() -> VariableType { + VariableType::SignedInteger + } +} + +impl Neg for i64 { + fn neg(&self, _stack_trace: &[SourceReference]) -> ExpressionResult { + Ok(SignedInteger::from(-self).into()) + } +} + +impl StaticTypeName for Integer { + fn static_type_name() -> &'static str { + "Signed Integer" + } +} + +impl GetType for u64 { + fn get_type() -> VariableType { + VariableType::UnsignedInteger + } +} + +impl Neg for u64 { + fn neg(&self, stack_trace: &[SourceReference]) -> ExpressionResult { + super::UnsupportedOperationError { + type_name: UnsignedInteger::static_type_name().into(), + operation_name: "negate", + } + .raise(stack_trace) + } +} + +impl StaticTypeName for Integer { + fn static_type_name() -> &'static str { + "Unsigned Integer" + } +} + +pub type SignedInteger = Integer; +pub type UnsignedInteger = Integer; + +#[cfg(test)] +mod test { + use crate::{compile, execution::execute_expression}; + + use super::*; + + #[test] + fn signed_bit_or() { + let root = compile::full_compile("test_file.ccm", "0xAAi | 0x55i"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, SignedInteger::from(0xFF).into()); + } + + #[test] + fn signed_bit_and() { + let root = compile::full_compile("test_file.ccm", "0xFFi & 0x0Fi"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, SignedInteger::from(0x0F).into()); + } + + #[test] + fn signed_bit_xor() { + let root = compile::full_compile("test_file.ccm", "0xF0i ^ 0x0FF"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, SignedInteger::from(0x0F).into()); + } + + #[test] + fn cmp() { + todo!() + } + + #[test] + fn signed_addition() { + let root = compile::full_compile("test_file.ccm", "3i + 2i"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, SignedInteger::from(5).into()); + } + + #[test] + fn signed_subtraction() { + let root = compile::full_compile("test_file.ccm", "3i - 2i"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, SignedInteger::from(1).into()); + } + + #[test] + fn signed_multiply() { + let root = compile::full_compile("test_file.ccm", "3i * 2i"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, SignedInteger::from(6).into()); + } + + #[test] + fn signed_divide() { + let root = compile::full_compile("test_file.ccm", "6i / 2i"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, SignedInteger::from(3).into()); + } + + #[test] + fn signed_floor_divide() { + let root = compile::full_compile("test_file.ccm", "6i // 2i"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, SignedInteger::from(3).into()); + } + + #[test] + fn signed_exponent() { + let root = compile::full_compile("test_file.ccm", "6i ** 3i"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, SignedInteger::from(216).into()); + } + + #[test] + fn signed_unary_plus() { + let root = compile::full_compile("test_file.ccm", "+3i"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, SignedInteger::from(3).into()); + } + + #[test] + fn signed_unary_minus() { + let root = compile::full_compile("test_file.ccm", "-3i"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, SignedInteger::from(-3).into()); + } + + #[test] + fn signed_unary_bit_not() { + let root = compile::full_compile("test_file.ccm", "!0xAAi"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, SignedInteger::from(!0xAA).into()); + } +} diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 24d6115..7669dce 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -4,9 +4,11 @@ use enum_dispatch::enum_dispatch; use enum_downcast::{AsVariant, EnumDowncast}; use value_type::VariableType; +use crate::compile::SourceReference; + use super::{ errors::{ErrorType, ExpressionResult, Raise as _}, - logging::{RuntimeLog, StackPoint}, + logging::RuntimeLog, }; mod void; @@ -15,6 +17,9 @@ pub use void::Void; mod default; pub use default::DefaultValue; +mod integer; +pub use integer::{SignedInteger, UnsignedInteger}; + mod value_type; pub trait StaticTypeName { @@ -25,8 +30,8 @@ pub trait StaticTypeName { #[derive(Debug, Eq, PartialEq)] struct UnsupportedOperationError { - type_name: Cow<'static, str>, - operation_name: &'static str, + pub type_name: Cow<'static, str>, + pub operation_name: &'static str, } impl ErrorType for UnsupportedOperationError {} @@ -44,7 +49,7 @@ impl Display for UnsupportedOperationError { impl UnsupportedOperationError { fn raise( object: &O, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], operation_name: &'static str, ) -> ExpressionResult { Self { @@ -61,13 +66,13 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, ty: &VariableType, log: &mut dyn RuntimeLog, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], ) -> ExpressionResult; // fn format( // &self, // _log: &mut dyn RuntimeLog, - // stack_trace: stack_trace: &S[StackPoint], + // stack_trace: stack_trace: &S[SourceReference], // _f: &mut dyn Write, // _style: Style, // _precision: Option, @@ -82,23 +87,55 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { fn and( &self, _log: &mut dyn RuntimeLog, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], _rhs: &Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "and") + UnsupportedOperationError::raise(self, stack_trace, "logical and") } fn or( &self, _log: &mut dyn RuntimeLog, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], + _rhs: &Value, + ) -> ExpressionResult { + UnsupportedOperationError::raise(self, stack_trace, "logical or") + } + fn xor( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "or") + UnsupportedOperationError::raise(self, stack_trace, "logical xor") + } + fn bit_and( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + _rhs: &Value, + ) -> ExpressionResult { + UnsupportedOperationError::raise(self, stack_trace, "binary and") + } + fn bit_or( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + _rhs: &Value, + ) -> ExpressionResult { + UnsupportedOperationError::raise(self, stack_trace, "binary or") + } + fn bit_xor( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + _rhs: &Value, + ) -> ExpressionResult { + UnsupportedOperationError::raise(self, stack_trace, "binary xor") } fn cmp( &self, _log: &mut dyn RuntimeLog, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "compare") @@ -106,7 +143,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { fn eq( &self, log: &mut dyn RuntimeLog, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], rhs: &Value, ) -> ExpressionResult { Ok(matches!(self.cmp(log, stack_trace, rhs)?, Ordering::Equal)) @@ -114,7 +151,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { fn addition( &self, _log: &mut dyn RuntimeLog, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "addition") @@ -122,7 +159,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { fn subtraction( &self, _log: &mut dyn RuntimeLog, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "subtraction") @@ -130,7 +167,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { fn multiply( &self, _log: &mut dyn RuntimeLog, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "multiply") @@ -138,15 +175,31 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { fn divide( &self, _log: &mut dyn RuntimeLog, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "divide") } + fn floor_divide( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + _rhs: &Value, + ) -> ExpressionResult { + UnsupportedOperationError::raise(self, stack_trace, "floor_divide") + } + fn exponent( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + _rhs: &Value, + ) -> ExpressionResult { + UnsupportedOperationError::raise(self, stack_trace, "exponent") + } // fn attribute( // &self, // _log: &mut dyn RuntimeLog, - // _stack_trace: &[StackPoint], + // _stack_trace: &[SourceReference], // attribute: &S, // ) -> OperatorResult { // Err(Failure::UnknownAttribute(attribute.clone())) @@ -154,7 +207,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { // fn call( // &self, // _context: &mut ExecutionContext, - // stack_trace: &[StackPoint], + // stack_trace: &[SourceReference], // _arguments: Vec, // _stack_traces: &[Expression], // ) -> OperatorResult { @@ -163,7 +216,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { // fn method_call( // &self, // _context: &mut ExecutionContext, - // _stack_trace: &[StackPoint], + // _stack_trace: &[SourceReference], // attribute: &S, // _arguments: Vec, // _stack_traces: &[Expression], @@ -173,7 +226,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { fn index( &self, _log: &mut dyn RuntimeLog, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], _index: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "index") @@ -181,36 +234,36 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { fn iterate( &self, _log: &mut dyn RuntimeLog, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], ) -> ExpressionResult>> { UnsupportedOperationError::raise(self, stack_trace, "iterate") } fn unary_plus( &self, _log: &mut dyn RuntimeLog, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "unary plus") } fn unary_minus( &self, _log: &mut dyn RuntimeLog, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "unary minus") } - fn unary_logical_not( + fn unary_not( &self, _log: &mut dyn RuntimeLog, - stack_trace: &[StackPoint], + stack_trace: &[SourceReference], ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "unary logical not") + UnsupportedOperationError::raise(self, stack_trace, "unary not") } // fn export( // &self, // _log: &mut dyn RuntimeLog, - // stack_trace: &[StackPoint], + // stack_trace: &[SourceReference], // ) -> OperatorResult { // UnsupportedOperationError::raise(self, stack_trace, "export") // } @@ -221,6 +274,8 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { pub enum Value { Void, Default(DefaultValue), + SignedInteger, + UnsignedInteger, // Boolean, // BuiltinFunction(BuiltinFunctionRef), // UserFunction(UserFunction), @@ -270,7 +325,7 @@ impl Display for DowncastError { } impl Value { - pub fn downcast_ref(&self, stack_trace: &[StackPoint]) -> ExpressionResult<&T> + pub fn downcast_ref(&self, stack_trace: &[SourceReference]) -> ExpressionResult<&T> where T: StaticTypeName, Self: AsVariant, @@ -286,7 +341,7 @@ impl Value { } } - pub fn downcast(self, stack_trace: &[StackPoint]) -> ExpressionResult + pub fn downcast(self, stack_trace: &[SourceReference]) -> ExpressionResult where T: StaticTypeName, Self: TryInto, @@ -301,7 +356,10 @@ impl Value { } } - pub fn downcast_optional(self, stack_trace: &[StackPoint]) -> ExpressionResult> + pub fn downcast_optional( + self, + stack_trace: &[SourceReference], + ) -> ExpressionResult> where T: StaticTypeName, Self: TryInto, @@ -311,18 +369,4 @@ impl Value { this => Ok(Some(this.downcast::(stack_trace)?)), } } - - // pub fn from_litteral( - // context: &mut ExecutionContext, - // value: &Litteral, - // ) -> OperatorResult { - // match value { - // Litteral::Scalar(scalar) => Scalar::from_parsed(scalar), - // Litteral::String(string) => SString::from_parsed(string), - // Litteral::List(list) => List::from_parsed(context, list), - // Litteral::Boolean(_span, value) => Ok(Self::Boolean(*value)), - // Litteral::Default(_span) => Ok(DefaultValue.into()), - // Litteral::Closure(closure) => Ok(Closure::from(closure).into()), - // } - // } } diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 4c718b6..850bf2a 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -43,6 +43,8 @@ pub enum VariableType { String, List, Boolean, + SignedInteger, + UnsignedInteger, Range, Struct(String), Scalar(String), @@ -68,6 +70,8 @@ impl VariableType { Self::String => "String".into(), Self::List => "List".into(), Self::Boolean => "Boolean".into(), + Self::SignedInteger => "Signed Integer".into(), + Self::UnsignedInteger => "Unsigned Integer".into(), Self::Range => "Range".into(), Self::Struct(name) => format!("struct {}", name.as_str()).into(), Self::Scalar(name) => name.to_string().into(), @@ -96,30 +100,13 @@ impl VariableType { impl Display for VariableType { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - Self::String => write!(f, "String"), - Self::List => write!(f, "List"), - Self::Boolean => write!(f, "Boolean"), - Self::Range => write!(f, "Range"), Self::Struct(name) => write!(f, "struct {}", name.as_str()), Self::Scalar(name) => write!(f, "{}", name.as_str()), Self::Vector(dimension, name) => { write!(f, "Vector{}<{}>", dimension, name.as_str()) } - Self::Transform(2) => write!(f, "Transform2D"), - Self::Transform(3) => write!(f, "Transform3D"), - Self::Transform(_) => unreachable!(), - Self::Quaternion => write!(f, "Quaternion"), - Self::Cycle => write!(f, "Cycle"), - Self::Region => write!(f, "Region"), - Self::Sketch => write!(f, "Sketch"), - Self::Surface => write!(f, "Surface"), - Self::Solid => write!(f, "Solid"), - Self::Shell => write!(f, "Shell"), - Self::Face => write!(f, "Face"), - Self::Curve => write!(f, "Curve"), - Self::HalfEdge => write!(f, "HalfEdge"), - Self::Vertex => write!(f, "Vertex"), Self::Closure(closure) => write!(f, "{}", closure), + _ => write!(f, "{}", self.name()), } } } diff --git a/crates/interpreter/src/execution/values/void.rs b/crates/interpreter/src/execution/values/void.rs index 7cd2978..3cdfc58 100644 --- a/crates/interpreter/src/execution/values/void.rs +++ b/crates/interpreter/src/execution/values/void.rs @@ -16,7 +16,7 @@ * program. If not, see . */ -use crate::execution::logging::{RuntimeLog, StackPoint}; +use crate::{compile::SourceReference, execution::logging::RuntimeLog}; use super::{value_type::VariableType, ExpressionResult, Object, StaticTypeName}; @@ -28,7 +28,7 @@ impl Object for Void { &self, _ty: &VariableType, _log: &mut dyn RuntimeLog, - _stack_trace: &[StackPoint], + _stack_trace: &[SourceReference], ) -> ExpressionResult { Ok(false) } diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 58d21d9..bf04125 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -41,7 +41,11 @@ module.exports = grammar({ default: _ => 'default', void: _ => seq('(', ')'), - integer: _ => /[0-9]+/, + base_ten: _ => /[0-9]+/, + octal: _ => seq(token.immediate(/0o/), /[0-9]+/), + hex: _ => seq(token.immediate(/0x/), /[0-9a-fA-F]+/), + binary: _ => seq(token.immediate(/0b/), /[01]+/), + integer: $ => choice($.base_ten, $.octal, $.hex, $.binary), signed_integer: $ => seq(field('value', $.integer), token.immediate(/[iI]/)), unsigned_integer: $ => seq(field('value', $.integer), token.immediate(/[uU]/)), diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 297c82c..c25f3a8 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -52,10 +52,79 @@ } ] }, - "integer": { + "base_ten": { "type": "PATTERN", "value": "[0-9]+" }, + "octal": { + "type": "SEQ", + "members": [ + { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "PATTERN", + "value": "0o" + } + }, + { + "type": "PATTERN", + "value": "[0-9]+" + } + ] + }, + "hex": { + "type": "SEQ", + "members": [ + { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "PATTERN", + "value": "0x" + } + }, + { + "type": "PATTERN", + "value": "[0-9a-fA-F]+" + } + ] + }, + "binary": { + "type": "SEQ", + "members": [ + { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "PATTERN", + "value": "0b" + } + }, + { + "type": "PATTERN", + "value": "[01]+" + } + ] + }, + "integer": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "base_ten" + }, + { + "type": "SYMBOL", + "name": "octal" + }, + { + "type": "SYMBOL", + "name": "hex" + }, + { + "type": "SYMBOL", + "name": "binary" + } + ] + }, "signed_integer": { "type": "SEQ", "members": [ diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 4f8f9b1..66efc88 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -122,6 +122,16 @@ } } }, + { + "type": "base_ten", + "named": true, + "fields": {} + }, + { + "type": "binary", + "named": true, + "fields": {} + }, { "type": "binary_expression", "named": true, @@ -510,6 +520,11 @@ } } }, + { + "type": "hex", + "named": true, + "fields": {} + }, { "type": "if", "named": true, @@ -549,7 +564,29 @@ { "type": "integer", "named": true, - "fields": {} + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "base_ten", + "named": true + }, + { + "type": "binary", + "named": true + }, + { + "type": "hex", + "named": true + }, + { + "type": "octal", + "named": true + } + ] + } }, { "type": "let", @@ -622,6 +659,11 @@ "named": true, "fields": {} }, + { + "type": "octal", + "named": true, + "fields": {} + }, { "type": "parenthesis", "named": true, diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 36f8390..87f7f8f 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -5,11 +5,11 @@ #endif #define LANGUAGE_VERSION 14 -#define STATE_COUNT 169 +#define STATE_COUNT 176 #define LARGE_STATE_COUNT 10 -#define SYMBOL_COUNT 108 +#define SYMBOL_COUNT 117 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 67 +#define TOKEN_COUNT 72 #define EXTERNAL_TOKEN_COUNT 0 #define FIELD_COUNT 24 #define MAX_ALIAS_SEQUENCE_LENGTH 5 @@ -23,106 +23,115 @@ enum ts_symbol_identifiers { sym_default = 5, anon_sym_LPAREN = 6, anon_sym_RPAREN = 7, - aux_sym_integer_token1 = 8, - aux_sym_signed_integer_token1 = 9, - aux_sym_unsigned_integer_token1 = 10, - sym_unit_quote = 11, - anon_sym_DOT = 12, - sym_true = 13, - sym_false = 14, - anon_sym_DASH = 15, - anon_sym_PLUS = 16, - anon_sym_BANG = 17, - anon_sym_STAR_STAR = 18, - anon_sym_STAR = 19, - anon_sym_SLASH = 20, - anon_sym_SLASH_SLASH = 21, - anon_sym_LT_LT = 22, - anon_sym_GT_GT = 23, - anon_sym_AMP = 24, - anon_sym_PIPE = 25, - anon_sym_CARET = 26, - anon_sym_GT = 27, - anon_sym_GT_EQ = 28, - anon_sym_EQ_EQ = 29, - anon_sym_LT_EQ = 30, - anon_sym_LT = 31, - anon_sym_BANG_EQ = 32, - anon_sym_AMP_AMP = 33, - anon_sym_PIPE_PIPE = 34, - anon_sym_DOT_DOT = 35, - anon_sym_DOT_DOT_EQ = 36, - anon_sym_if = 37, - anon_sym_else = 38, - anon_sym_AT = 39, - anon_sym_COLON = 40, - anon_sym_LBRACK = 41, - anon_sym_COMMA = 42, - anon_sym_RBRACK = 43, - sym_varadic_dots = 44, - anon_sym_EQ = 45, - anon_sym_LBRACE = 46, - anon_sym_RBRACE = 47, - anon_sym_DASH_GT = 48, - anon_sym_SEMI = 49, - anon_sym_AMP_EQ = 50, - anon_sym_PIPE_EQ = 51, - anon_sym_CARET_EQ = 52, - anon_sym_AMP_AMP_EQ = 53, - anon_sym_PIPE_PIPE_EQ = 54, - anon_sym_CARET_CARET_EQ = 55, - anon_sym_PLUS_EQ = 56, - anon_sym_DASH_EQ = 57, - anon_sym_STAR_STAR_EQ = 58, - anon_sym_STAR_EQ = 59, - anon_sym_SLASH_SLASH_EQ = 60, - anon_sym_SLASH_EQ = 61, - anon_sym_LT_LT_EQ = 62, - anon_sym_GT_GT_EQ = 63, - anon_sym_let = 64, - anon_sym_for = 65, - anon_sym_in = 66, - sym_source_file = 67, - sym_void = 68, - sym_integer = 69, - sym_signed_integer = 70, - sym_unsigned_integer = 71, - sym_number = 72, - sym__float = 73, - sym__unit = 74, - sym_scalar = 75, - sym_boolean = 76, - sym_expression = 77, - sym_unary_expression = 78, - sym_binary_expression = 79, - sym_if = 80, - sym__variable_type = 81, - sym_path = 82, - sym_argument_path = 83, - sym_local_path = 84, - sym__declaration_type = 85, - sym_parenthesis = 86, - sym_list = 87, - sym_struct_member = 88, - sym__struct_final_element = 89, - sym_struct_definition = 90, - sym_dictionary_member_assignment = 91, - sym_dictionary_construction = 92, - sym_procedural_block = 93, - sym_closure_captured_variables = 94, - sym_closure_definition = 95, - sym_closed_expression = 96, - sym_statement = 97, - sym_assignment_operator = 98, - sym_let = 99, - sym_assign = 100, - sym_for = 101, - aux_sym_argument_path_repeat1 = 102, - aux_sym_list_repeat1 = 103, - aux_sym_struct_definition_repeat1 = 104, - aux_sym_dictionary_construction_repeat1 = 105, - aux_sym_procedural_block_repeat1 = 106, - aux_sym_closure_captured_variables_repeat1 = 107, + aux_sym_base_ten_token1 = 8, + aux_sym_octal_token1 = 9, + aux_sym_hex_token1 = 10, + aux_sym_hex_token2 = 11, + aux_sym_binary_token1 = 12, + aux_sym_binary_token2 = 13, + aux_sym_signed_integer_token1 = 14, + aux_sym_unsigned_integer_token1 = 15, + sym_unit_quote = 16, + anon_sym_DOT = 17, + sym_true = 18, + sym_false = 19, + anon_sym_DASH = 20, + anon_sym_PLUS = 21, + anon_sym_BANG = 22, + anon_sym_STAR_STAR = 23, + anon_sym_STAR = 24, + anon_sym_SLASH = 25, + anon_sym_SLASH_SLASH = 26, + anon_sym_LT_LT = 27, + anon_sym_GT_GT = 28, + anon_sym_AMP = 29, + anon_sym_PIPE = 30, + anon_sym_CARET = 31, + anon_sym_GT = 32, + anon_sym_GT_EQ = 33, + anon_sym_EQ_EQ = 34, + anon_sym_LT_EQ = 35, + anon_sym_LT = 36, + anon_sym_BANG_EQ = 37, + anon_sym_AMP_AMP = 38, + anon_sym_PIPE_PIPE = 39, + anon_sym_DOT_DOT = 40, + anon_sym_DOT_DOT_EQ = 41, + anon_sym_if = 42, + anon_sym_else = 43, + anon_sym_AT = 44, + anon_sym_COLON = 45, + anon_sym_LBRACK = 46, + anon_sym_COMMA = 47, + anon_sym_RBRACK = 48, + sym_varadic_dots = 49, + anon_sym_EQ = 50, + anon_sym_LBRACE = 51, + anon_sym_RBRACE = 52, + anon_sym_DASH_GT = 53, + anon_sym_SEMI = 54, + anon_sym_AMP_EQ = 55, + anon_sym_PIPE_EQ = 56, + anon_sym_CARET_EQ = 57, + anon_sym_AMP_AMP_EQ = 58, + anon_sym_PIPE_PIPE_EQ = 59, + anon_sym_CARET_CARET_EQ = 60, + anon_sym_PLUS_EQ = 61, + anon_sym_DASH_EQ = 62, + anon_sym_STAR_STAR_EQ = 63, + anon_sym_STAR_EQ = 64, + anon_sym_SLASH_SLASH_EQ = 65, + anon_sym_SLASH_EQ = 66, + anon_sym_LT_LT_EQ = 67, + anon_sym_GT_GT_EQ = 68, + anon_sym_let = 69, + anon_sym_for = 70, + anon_sym_in = 71, + sym_source_file = 72, + sym_void = 73, + sym_base_ten = 74, + sym_octal = 75, + sym_hex = 76, + sym_binary = 77, + sym_integer = 78, + sym_signed_integer = 79, + sym_unsigned_integer = 80, + sym_number = 81, + sym__float = 82, + sym__unit = 83, + sym_scalar = 84, + sym_boolean = 85, + sym_expression = 86, + sym_unary_expression = 87, + sym_binary_expression = 88, + sym_if = 89, + sym__variable_type = 90, + sym_path = 91, + sym_argument_path = 92, + sym_local_path = 93, + sym__declaration_type = 94, + sym_parenthesis = 95, + sym_list = 96, + sym_struct_member = 97, + sym__struct_final_element = 98, + sym_struct_definition = 99, + sym_dictionary_member_assignment = 100, + sym_dictionary_construction = 101, + sym_procedural_block = 102, + sym_closure_captured_variables = 103, + sym_closure_definition = 104, + sym_closed_expression = 105, + sym_statement = 106, + sym_assignment_operator = 107, + sym_let = 108, + sym_assign = 109, + sym_for = 110, + aux_sym_argument_path_repeat1 = 111, + aux_sym_list_repeat1 = 112, + aux_sym_struct_definition_repeat1 = 113, + aux_sym_dictionary_construction_repeat1 = 114, + aux_sym_procedural_block_repeat1 = 115, + aux_sym_closure_captured_variables_repeat1 = 116, }; static const char * const ts_symbol_names[] = { @@ -134,7 +143,12 @@ static const char * const ts_symbol_names[] = { [sym_default] = "default", [anon_sym_LPAREN] = "(", [anon_sym_RPAREN] = ")", - [aux_sym_integer_token1] = "integer_token1", + [aux_sym_base_ten_token1] = "base_ten_token1", + [aux_sym_octal_token1] = "octal_token1", + [aux_sym_hex_token1] = "hex_token1", + [aux_sym_hex_token2] = "hex_token2", + [aux_sym_binary_token1] = "binary_token1", + [aux_sym_binary_token2] = "binary_token2", [aux_sym_signed_integer_token1] = "signed_integer_token1", [aux_sym_unsigned_integer_token1] = "unsigned_integer_token1", [sym_unit_quote] = "unit_quote", @@ -195,6 +209,10 @@ static const char * const ts_symbol_names[] = { [anon_sym_in] = "in", [sym_source_file] = "source_file", [sym_void] = "void", + [sym_base_ten] = "base_ten", + [sym_octal] = "octal", + [sym_hex] = "hex", + [sym_binary] = "binary", [sym_integer] = "integer", [sym_signed_integer] = "signed_integer", [sym_unsigned_integer] = "unsigned_integer", @@ -245,7 +263,12 @@ static const TSSymbol ts_symbol_map[] = { [sym_default] = sym_default, [anon_sym_LPAREN] = anon_sym_LPAREN, [anon_sym_RPAREN] = anon_sym_RPAREN, - [aux_sym_integer_token1] = aux_sym_integer_token1, + [aux_sym_base_ten_token1] = aux_sym_base_ten_token1, + [aux_sym_octal_token1] = aux_sym_octal_token1, + [aux_sym_hex_token1] = aux_sym_hex_token1, + [aux_sym_hex_token2] = aux_sym_hex_token2, + [aux_sym_binary_token1] = aux_sym_binary_token1, + [aux_sym_binary_token2] = aux_sym_binary_token2, [aux_sym_signed_integer_token1] = aux_sym_signed_integer_token1, [aux_sym_unsigned_integer_token1] = aux_sym_unsigned_integer_token1, [sym_unit_quote] = sym_unit_quote, @@ -306,6 +329,10 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_in] = anon_sym_in, [sym_source_file] = sym_source_file, [sym_void] = sym_void, + [sym_base_ten] = sym_base_ten, + [sym_octal] = sym_octal, + [sym_hex] = sym_hex, + [sym_binary] = sym_binary, [sym_integer] = sym_integer, [sym_signed_integer] = sym_signed_integer, [sym_unsigned_integer] = sym_unsigned_integer, @@ -380,7 +407,27 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, - [aux_sym_integer_token1] = { + [aux_sym_base_ten_token1] = { + .visible = false, + .named = false, + }, + [aux_sym_octal_token1] = { + .visible = false, + .named = false, + }, + [aux_sym_hex_token1] = { + .visible = false, + .named = false, + }, + [aux_sym_hex_token2] = { + .visible = false, + .named = false, + }, + [aux_sym_binary_token1] = { + .visible = false, + .named = false, + }, + [aux_sym_binary_token2] = { .visible = false, .named = false, }, @@ -624,6 +671,22 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym_base_ten] = { + .visible = true, + .named = true, + }, + [sym_octal] = { + .visible = true, + .named = true, + }, + [sym_hex] = { + .visible = true, + .named = true, + }, + [sym_binary] = { + .visible = true, + .named = true, + }, [sym_integer] = { .visible = true, .named = true, @@ -1009,49 +1072,49 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [58] = 58, [59] = 59, [60] = 60, - [61] = 61, + [61] = 58, [62] = 62, - [63] = 63, - [64] = 64, + [63] = 53, + [64] = 43, [65] = 65, [66] = 60, - [67] = 67, - [68] = 68, - [69] = 69, - [70] = 70, - [71] = 71, - [72] = 72, - [73] = 73, - [74] = 74, - [75] = 75, - [76] = 62, + [67] = 59, + [68] = 44, + [69] = 45, + [70] = 46, + [71] = 48, + [72] = 49, + [73] = 50, + [74] = 57, + [75] = 65, + [76] = 76, [77] = 77, - [78] = 67, - [79] = 68, - [80] = 69, - [81] = 70, - [82] = 71, - [83] = 72, - [84] = 73, - [85] = 74, - [86] = 65, - [87] = 75, - [88] = 77, - [89] = 38, - [90] = 40, - [91] = 41, + [78] = 78, + [79] = 79, + [80] = 80, + [81] = 81, + [82] = 82, + [83] = 83, + [84] = 84, + [85] = 85, + [86] = 86, + [87] = 87, + [88] = 88, + [89] = 21, + [90] = 62, + [91] = 76, [92] = 92, - [93] = 56, - [94] = 54, - [95] = 46, - [96] = 47, - [97] = 48, - [98] = 49, - [99] = 50, - [100] = 51, - [101] = 52, - [102] = 53, - [103] = 55, + [93] = 78, + [94] = 80, + [95] = 77, + [96] = 79, + [97] = 81, + [98] = 82, + [99] = 84, + [100] = 85, + [101] = 86, + [102] = 83, + [103] = 87, [104] = 104, [105] = 105, [106] = 106, @@ -1116,7 +1179,14 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [165] = 165, [166] = 166, [167] = 167, - [168] = 154, + [168] = 168, + [169] = 169, + [170] = 170, + [171] = 171, + [172] = 172, + [173] = 173, + [174] = 174, + [175] = 161, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1124,373 +1194,435 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(12); + if (eof) ADVANCE(14); ADVANCE_MAP( - '!', 31, + '!', 41, '"', 2, - '#', 13, - '&', 38, - '\'', 5, - '(', 18, - ')', 19, - '*', 33, - '+', 29, - ',', 55, - '-', 27, - '.', 23, - '/', 34, - ':', 53, - ';', 62, - '<', 45, - '=', 58, - '>', 41, - '@', 52, - '[', 54, - ']', 56, - '^', 40, - '{', 59, - '|', 39, - '}', 60, + '#', 15, + '&', 48, + '\'', 7, + '(', 20, + ')', 21, + '*', 43, + '+', 39, + ',', 65, + '-', 37, + '.', 33, + '/', 44, + '0', 22, + '1', 24, + ':', 63, + ';', 72, + '<', 55, + '=', 68, + '>', 51, + '@', 62, + '[', 64, + ']', 66, + '^', 50, + '{', 69, + '|', 49, + '}', 70, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(14); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(20); + lookahead == ' ') ADVANCE(16); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(25); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(17); END_STATE(); case 1: ADVANCE_MAP( - '!', 30, + '!', 40, '"', 2, - '#', 13, - '(', 18, - ')', 19, - '+', 28, - '-', 25, - '.', 8, - '@', 52, - '[', 54, - '{', 59, + '#', 15, + '(', 20, + ')', 21, + '+', 38, + '-', 35, + '.', 10, + '0', 23, + '@', 62, + '[', 64, + '{', 69, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(14); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(20); + lookahead == ' ') ADVANCE(16); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(25); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(17); END_STATE(); case 2: - if (lookahead == '"') ADVANCE(16); + if (lookahead == '"') ADVANCE(18); if (lookahead == '\\') ADVANCE(3); if (lookahead != 0) ADVANCE(2); END_STATE(); case 3: - if (lookahead == '"') ADVANCE(17); + if (lookahead == '"') ADVANCE(19); if (lookahead == '\\') ADVANCE(3); if (lookahead != 0) ADVANCE(2); END_STATE(); case 4: - if (lookahead == '#') ADVANCE(13); - if (lookahead == '-') ADVANCE(10); + if (lookahead == '#') ADVANCE(15); + if (lookahead == '-') ADVANCE(12); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(14); + lookahead == ' ') ADVANCE(16); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(25); END_STATE(); case 5: - if (lookahead == '\'') ADVANCE(21); - if (lookahead == '\\') ADVANCE(6); - if (lookahead != 0) ADVANCE(5); + if (lookahead == '#') ADVANCE(15); + if (lookahead == '0' || + lookahead == '1') ADVANCE(30); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(16); END_STATE(); case 6: - if (lookahead == '\'') ADVANCE(22); - if (lookahead == '\\') ADVANCE(6); - if (lookahead != 0) ADVANCE(5); + if (lookahead == '#') ADVANCE(15); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(16); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(28); END_STATE(); case 7: - if (lookahead == '.') ADVANCE(57); + if (lookahead == '\'') ADVANCE(31); + if (lookahead == '\\') ADVANCE(8); + if (lookahead != 0) ADVANCE(7); END_STATE(); case 8: - if (lookahead == '.') ADVANCE(7); + if (lookahead == '\'') ADVANCE(32); + if (lookahead == '\\') ADVANCE(8); + if (lookahead != 0) ADVANCE(7); END_STATE(); case 9: - if (lookahead == '=') ADVANCE(68); + if (lookahead == '.') ADVANCE(67); END_STATE(); case 10: - if (lookahead == '>') ADVANCE(61); + if (lookahead == '.') ADVANCE(9); END_STATE(); case 11: - if (eof) ADVANCE(12); + if (lookahead == '=') ADVANCE(78); + END_STATE(); + case 12: + if (lookahead == '>') ADVANCE(71); + END_STATE(); + case 13: + if (eof) ADVANCE(14); ADVANCE_MAP( - '!', 31, + '!', 41, '"', 2, - '#', 13, - '&', 38, - '\'', 5, - '(', 18, - ')', 19, - '*', 33, - '+', 29, - ',', 55, - '-', 26, - '.', 24, - '/', 34, - ':', 53, - ';', 62, - '<', 45, - '=', 58, - '>', 41, - '@', 52, - '[', 54, - ']', 56, - '^', 40, - '{', 59, - '|', 39, - '}', 60, + '#', 15, + '&', 48, + '\'', 7, + '(', 20, + ')', 21, + '*', 43, + '+', 39, + ',', 65, + '-', 36, + '.', 34, + '/', 44, + '0', 23, + ':', 63, + ';', 72, + '<', 55, + '=', 68, + '>', 51, + '@', 62, + '[', 64, + ']', 66, + '^', 50, + '{', 69, + '|', 49, + '}', 70, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(14); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(20); + lookahead == ' ') ADVANCE(16); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(25); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(17); END_STATE(); - case 12: + case 14: ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); - case 13: + case 15: ACCEPT_TOKEN(sym_comment); if (lookahead != 0 && - lookahead != '\n') ADVANCE(13); + lookahead != '\n') ADVANCE(15); END_STATE(); - case 14: + case 16: ACCEPT_TOKEN(sym__whitespace); END_STATE(); - case 15: + case 17: ACCEPT_TOKEN(sym_identifier); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(17); END_STATE(); - case 16: + case 18: ACCEPT_TOKEN(sym_string); END_STATE(); - case 17: + case 19: ACCEPT_TOKEN(sym_string); - if (lookahead == '"') ADVANCE(16); + if (lookahead == '"') ADVANCE(18); if (lookahead == '\\') ADVANCE(3); if (lookahead != 0) ADVANCE(2); END_STATE(); - case 18: + case 20: ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); - case 19: + case 21: ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); - case 20: - ACCEPT_TOKEN(aux_sym_integer_token1); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(20); + case 22: + ACCEPT_TOKEN(aux_sym_base_ten_token1); + if (lookahead == 'b') ADVANCE(29); + if (lookahead == 'o') ADVANCE(26); + if (lookahead == 'x') ADVANCE(27); + if (lookahead == '0' || + lookahead == '1') ADVANCE(24); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(25); END_STATE(); - case 21: + case 23: + ACCEPT_TOKEN(aux_sym_base_ten_token1); + if (lookahead == 'b') ADVANCE(29); + if (lookahead == 'o') ADVANCE(26); + if (lookahead == 'x') ADVANCE(27); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(25); + END_STATE(); + case 24: + ACCEPT_TOKEN(aux_sym_base_ten_token1); + if (lookahead == '0' || + lookahead == '1') ADVANCE(24); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(25); + END_STATE(); + case 25: + ACCEPT_TOKEN(aux_sym_base_ten_token1); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(25); + END_STATE(); + case 26: + ACCEPT_TOKEN(aux_sym_octal_token1); + END_STATE(); + case 27: + ACCEPT_TOKEN(aux_sym_hex_token1); + END_STATE(); + case 28: + ACCEPT_TOKEN(aux_sym_hex_token2); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(28); + END_STATE(); + case 29: + ACCEPT_TOKEN(aux_sym_binary_token1); + END_STATE(); + case 30: + ACCEPT_TOKEN(aux_sym_binary_token2); + if (lookahead == '0' || + lookahead == '1') ADVANCE(30); + END_STATE(); + case 31: ACCEPT_TOKEN(sym_unit_quote); END_STATE(); - case 22: + case 32: ACCEPT_TOKEN(sym_unit_quote); - if (lookahead == '\'') ADVANCE(21); - if (lookahead == '\\') ADVANCE(6); - if (lookahead != 0) ADVANCE(5); + if (lookahead == '\'') ADVANCE(31); + if (lookahead == '\\') ADVANCE(8); + if (lookahead != 0) ADVANCE(7); END_STATE(); - case 23: + case 33: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(49); + if (lookahead == '.') ADVANCE(59); END_STATE(); - case 24: + case 34: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(50); + if (lookahead == '.') ADVANCE(60); END_STATE(); - case 25: + case 35: ACCEPT_TOKEN(anon_sym_DASH); END_STATE(); - case 26: + case 36: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '=') ADVANCE(70); + if (lookahead == '=') ADVANCE(80); END_STATE(); - case 27: + case 37: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '=') ADVANCE(70); - if (lookahead == '>') ADVANCE(61); + if (lookahead == '=') ADVANCE(80); + if (lookahead == '>') ADVANCE(71); END_STATE(); - case 28: + case 38: ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); - case 29: + case 39: ACCEPT_TOKEN(anon_sym_PLUS); - if (lookahead == '=') ADVANCE(69); + if (lookahead == '=') ADVANCE(79); END_STATE(); - case 30: + case 40: ACCEPT_TOKEN(anon_sym_BANG); END_STATE(); - case 31: + case 41: ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(46); + if (lookahead == '=') ADVANCE(56); END_STATE(); - case 32: + case 42: ACCEPT_TOKEN(anon_sym_STAR_STAR); - if (lookahead == '=') ADVANCE(71); + if (lookahead == '=') ADVANCE(81); END_STATE(); - case 33: + case 43: ACCEPT_TOKEN(anon_sym_STAR); - if (lookahead == '*') ADVANCE(32); - if (lookahead == '=') ADVANCE(72); + if (lookahead == '*') ADVANCE(42); + if (lookahead == '=') ADVANCE(82); END_STATE(); - case 34: + case 44: ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '/') ADVANCE(35); - if (lookahead == '=') ADVANCE(74); + if (lookahead == '/') ADVANCE(45); + if (lookahead == '=') ADVANCE(84); END_STATE(); - case 35: + case 45: ACCEPT_TOKEN(anon_sym_SLASH_SLASH); - if (lookahead == '=') ADVANCE(73); + if (lookahead == '=') ADVANCE(83); END_STATE(); - case 36: + case 46: ACCEPT_TOKEN(anon_sym_LT_LT); - if (lookahead == '=') ADVANCE(75); + if (lookahead == '=') ADVANCE(85); END_STATE(); - case 37: + case 47: ACCEPT_TOKEN(anon_sym_GT_GT); - if (lookahead == '=') ADVANCE(76); + if (lookahead == '=') ADVANCE(86); END_STATE(); - case 38: + case 48: ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(47); - if (lookahead == '=') ADVANCE(63); + if (lookahead == '&') ADVANCE(57); + if (lookahead == '=') ADVANCE(73); END_STATE(); - case 39: + case 49: ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '=') ADVANCE(64); - if (lookahead == '|') ADVANCE(48); + if (lookahead == '=') ADVANCE(74); + if (lookahead == '|') ADVANCE(58); END_STATE(); - case 40: + case 50: ACCEPT_TOKEN(anon_sym_CARET); - if (lookahead == '=') ADVANCE(65); - if (lookahead == '^') ADVANCE(9); + if (lookahead == '=') ADVANCE(75); + if (lookahead == '^') ADVANCE(11); END_STATE(); - case 41: + case 51: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(42); - if (lookahead == '>') ADVANCE(37); + if (lookahead == '=') ADVANCE(52); + if (lookahead == '>') ADVANCE(47); END_STATE(); - case 42: + case 52: ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); - case 43: + case 53: ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); - case 44: + case 54: ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); - case 45: + case 55: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(36); - if (lookahead == '=') ADVANCE(44); + if (lookahead == '<') ADVANCE(46); + if (lookahead == '=') ADVANCE(54); END_STATE(); - case 46: + case 56: ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); - case 47: + case 57: ACCEPT_TOKEN(anon_sym_AMP_AMP); - if (lookahead == '=') ADVANCE(66); + if (lookahead == '=') ADVANCE(76); END_STATE(); - case 48: + case 58: ACCEPT_TOKEN(anon_sym_PIPE_PIPE); - if (lookahead == '=') ADVANCE(67); + if (lookahead == '=') ADVANCE(77); END_STATE(); - case 49: + case 59: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '.') ADVANCE(57); - if (lookahead == '=') ADVANCE(51); + if (lookahead == '.') ADVANCE(67); + if (lookahead == '=') ADVANCE(61); END_STATE(); - case 50: + case 60: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '=') ADVANCE(51); + if (lookahead == '=') ADVANCE(61); END_STATE(); - case 51: + case 61: ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); END_STATE(); - case 52: + case 62: ACCEPT_TOKEN(anon_sym_AT); END_STATE(); - case 53: + case 63: ACCEPT_TOKEN(anon_sym_COLON); END_STATE(); - case 54: + case 64: ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); - case 55: + case 65: ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); - case 56: + case 66: ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); - case 57: + case 67: ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); - case 58: + case 68: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(43); + if (lookahead == '=') ADVANCE(53); END_STATE(); - case 59: + case 69: ACCEPT_TOKEN(anon_sym_LBRACE); END_STATE(); - case 60: + case 70: ACCEPT_TOKEN(anon_sym_RBRACE); END_STATE(); - case 61: + case 71: ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); - case 62: + case 72: ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); - case 63: + case 73: ACCEPT_TOKEN(anon_sym_AMP_EQ); END_STATE(); - case 64: + case 74: ACCEPT_TOKEN(anon_sym_PIPE_EQ); END_STATE(); - case 65: + case 75: ACCEPT_TOKEN(anon_sym_CARET_EQ); END_STATE(); - case 66: + case 76: ACCEPT_TOKEN(anon_sym_AMP_AMP_EQ); END_STATE(); - case 67: + case 77: ACCEPT_TOKEN(anon_sym_PIPE_PIPE_EQ); END_STATE(); - case 68: + case 78: ACCEPT_TOKEN(anon_sym_CARET_CARET_EQ); END_STATE(); - case 69: + case 79: ACCEPT_TOKEN(anon_sym_PLUS_EQ); END_STATE(); - case 70: + case 80: ACCEPT_TOKEN(anon_sym_DASH_EQ); END_STATE(); - case 71: + case 81: ACCEPT_TOKEN(anon_sym_STAR_STAR_EQ); END_STATE(); - case 72: + case 82: ACCEPT_TOKEN(anon_sym_STAR_EQ); END_STATE(); - case 73: + case 83: ACCEPT_TOKEN(anon_sym_SLASH_SLASH_EQ); END_STATE(); - case 74: + case 84: ACCEPT_TOKEN(anon_sym_SLASH_EQ); END_STATE(); - case 75: + case 85: ACCEPT_TOKEN(anon_sym_LT_LT_EQ); END_STATE(); - case 76: + case 86: ACCEPT_TOKEN(anon_sym_GT_GT_EQ); END_STATE(); default: @@ -1615,143 +1747,143 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { static const TSLexMode ts_lex_modes[STATE_COUNT] = { [0] = {.lex_state = 0}, - [1] = {.lex_state = 11}, - [2] = {.lex_state = 11}, - [3] = {.lex_state = 11}, - [4] = {.lex_state = 11}, - [5] = {.lex_state = 11}, - [6] = {.lex_state = 11}, - [7] = {.lex_state = 11}, - [8] = {.lex_state = 11}, - [9] = {.lex_state = 11}, - [10] = {.lex_state = 11}, - [11] = {.lex_state = 11}, - [12] = {.lex_state = 11}, - [13] = {.lex_state = 11}, - [14] = {.lex_state = 1}, - [15] = {.lex_state = 11}, - [16] = {.lex_state = 11}, - [17] = {.lex_state = 11}, - [18] = {.lex_state = 11}, - [19] = {.lex_state = 11}, - [20] = {.lex_state = 11}, - [21] = {.lex_state = 11}, - [22] = {.lex_state = 11}, - [23] = {.lex_state = 11}, - [24] = {.lex_state = 11}, - [25] = {.lex_state = 11}, - [26] = {.lex_state = 11}, - [27] = {.lex_state = 11}, - [28] = {.lex_state = 11}, - [29] = {.lex_state = 11}, - [30] = {.lex_state = 11}, - [31] = {.lex_state = 11}, - [32] = {.lex_state = 11}, - [33] = {.lex_state = 11}, - [34] = {.lex_state = 11}, - [35] = {.lex_state = 11}, - [36] = {.lex_state = 11}, - [37] = {.lex_state = 11}, - [38] = {.lex_state = 11}, - [39] = {.lex_state = 11}, - [40] = {.lex_state = 11}, - [41] = {.lex_state = 11}, - [42] = {.lex_state = 11}, - [43] = {.lex_state = 11}, - [44] = {.lex_state = 11}, - [45] = {.lex_state = 11}, - [46] = {.lex_state = 11}, - [47] = {.lex_state = 11}, - [48] = {.lex_state = 11}, - [49] = {.lex_state = 11}, - [50] = {.lex_state = 11}, - [51] = {.lex_state = 11}, - [52] = {.lex_state = 11}, - [53] = {.lex_state = 11}, - [54] = {.lex_state = 11}, - [55] = {.lex_state = 11}, - [56] = {.lex_state = 11}, - [57] = {.lex_state = 11}, - [58] = {.lex_state = 11}, - [59] = {.lex_state = 11}, - [60] = {.lex_state = 11}, - [61] = {.lex_state = 11}, - [62] = {.lex_state = 11}, - [63] = {.lex_state = 11}, - [64] = {.lex_state = 11}, - [65] = {.lex_state = 11}, - [66] = {.lex_state = 11}, - [67] = {.lex_state = 11}, - [68] = {.lex_state = 11}, - [69] = {.lex_state = 11}, - [70] = {.lex_state = 11}, - [71] = {.lex_state = 11}, - [72] = {.lex_state = 11}, - [73] = {.lex_state = 11}, - [74] = {.lex_state = 11}, - [75] = {.lex_state = 11}, - [76] = {.lex_state = 11}, - [77] = {.lex_state = 11}, - [78] = {.lex_state = 11}, - [79] = {.lex_state = 11}, - [80] = {.lex_state = 11}, - [81] = {.lex_state = 11}, - [82] = {.lex_state = 11}, - [83] = {.lex_state = 11}, - [84] = {.lex_state = 11}, - [85] = {.lex_state = 11}, - [86] = {.lex_state = 11}, - [87] = {.lex_state = 11}, - [88] = {.lex_state = 11}, - [89] = {.lex_state = 11}, - [90] = {.lex_state = 11}, - [91] = {.lex_state = 11}, - [92] = {.lex_state = 11}, - [93] = {.lex_state = 11}, - [94] = {.lex_state = 11}, - [95] = {.lex_state = 11}, - [96] = {.lex_state = 11}, - [97] = {.lex_state = 11}, - [98] = {.lex_state = 11}, - [99] = {.lex_state = 11}, - [100] = {.lex_state = 11}, - [101] = {.lex_state = 11}, - [102] = {.lex_state = 11}, - [103] = {.lex_state = 11}, - [104] = {.lex_state = 11}, - [105] = {.lex_state = 11}, - [106] = {.lex_state = 11}, - [107] = {.lex_state = 11}, - [108] = {.lex_state = 11}, - [109] = {.lex_state = 11}, - [110] = {.lex_state = 11}, - [111] = {.lex_state = 11}, - [112] = {.lex_state = 11}, - [113] = {.lex_state = 11}, - [114] = {.lex_state = 11}, - [115] = {.lex_state = 11}, - [116] = {.lex_state = 11}, - [117] = {.lex_state = 11}, - [118] = {.lex_state = 11}, - [119] = {.lex_state = 11}, - [120] = {.lex_state = 0}, - [121] = {.lex_state = 11}, - [122] = {.lex_state = 11}, + [1] = {.lex_state = 13}, + [2] = {.lex_state = 13}, + [3] = {.lex_state = 13}, + [4] = {.lex_state = 13}, + [5] = {.lex_state = 13}, + [6] = {.lex_state = 13}, + [7] = {.lex_state = 13}, + [8] = {.lex_state = 13}, + [9] = {.lex_state = 13}, + [10] = {.lex_state = 13}, + [11] = {.lex_state = 13}, + [12] = {.lex_state = 13}, + [13] = {.lex_state = 1}, + [14] = {.lex_state = 13}, + [15] = {.lex_state = 13}, + [16] = {.lex_state = 13}, + [17] = {.lex_state = 13}, + [18] = {.lex_state = 13}, + [19] = {.lex_state = 13}, + [20] = {.lex_state = 13}, + [21] = {.lex_state = 13}, + [22] = {.lex_state = 13}, + [23] = {.lex_state = 13}, + [24] = {.lex_state = 13}, + [25] = {.lex_state = 13}, + [26] = {.lex_state = 13}, + [27] = {.lex_state = 13}, + [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 = 13}, + [41] = {.lex_state = 13}, + [42] = {.lex_state = 13}, + [43] = {.lex_state = 13}, + [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 = 13}, + [53] = {.lex_state = 13}, + [54] = {.lex_state = 13}, + [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 = 13}, + [68] = {.lex_state = 13}, + [69] = {.lex_state = 13}, + [70] = {.lex_state = 13}, + [71] = {.lex_state = 13}, + [72] = {.lex_state = 13}, + [73] = {.lex_state = 13}, + [74] = {.lex_state = 13}, + [75] = {.lex_state = 13}, + [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 = 0}, [123] = {.lex_state = 0}, [124] = {.lex_state = 0}, [125] = {.lex_state = 1}, - [126] = {.lex_state = 1}, - [127] = {.lex_state = 0}, + [126] = {.lex_state = 0}, + [127] = {.lex_state = 1}, [128] = {.lex_state = 1}, [129] = {.lex_state = 0}, [130] = {.lex_state = 0}, [131] = {.lex_state = 0}, - [132] = {.lex_state = 1}, + [132] = {.lex_state = 0}, [133] = {.lex_state = 0}, [134] = {.lex_state = 0}, [135] = {.lex_state = 0}, [136] = {.lex_state = 0}, - [137] = {.lex_state = 0}, + [137] = {.lex_state = 1}, [138] = {.lex_state = 0}, [139] = {.lex_state = 0}, [140] = {.lex_state = 0}, @@ -1764,25 +1896,32 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [147] = {.lex_state = 0}, [148] = {.lex_state = 0}, [149] = {.lex_state = 0}, - [150] = {.lex_state = 0}, + [150] = {.lex_state = 4}, [151] = {.lex_state = 0}, [152] = {.lex_state = 0}, [153] = {.lex_state = 0}, - [154] = {.lex_state = 4}, + [154] = {.lex_state = 0}, [155] = {.lex_state = 0}, [156] = {.lex_state = 0}, - [157] = {.lex_state = 0}, + [157] = {.lex_state = 4}, [158] = {.lex_state = 0}, - [159] = {.lex_state = 4}, - [160] = {.lex_state = 4}, + [159] = {.lex_state = 5}, + [160] = {.lex_state = 0}, [161] = {.lex_state = 4}, [162] = {.lex_state = 0}, [163] = {.lex_state = 0}, - [164] = {.lex_state = 0}, + [164] = {.lex_state = 4}, [165] = {.lex_state = 0}, [166] = {.lex_state = 0}, - [167] = {.lex_state = 0}, - [168] = {.lex_state = 4}, + [167] = {.lex_state = 6}, + [168] = {.lex_state = 0}, + [169] = {.lex_state = 0}, + [170] = {.lex_state = 4}, + [171] = {.lex_state = 0}, + [172] = {.lex_state = 0}, + [173] = {.lex_state = 4}, + [174] = {.lex_state = 0}, + [175] = {.lex_state = 4}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -1795,7 +1934,11 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_default] = ACTIONS(1), [anon_sym_LPAREN] = ACTIONS(1), [anon_sym_RPAREN] = ACTIONS(1), - [aux_sym_integer_token1] = ACTIONS(1), + [aux_sym_base_ten_token1] = ACTIONS(1), + [aux_sym_octal_token1] = ACTIONS(1), + [aux_sym_hex_token1] = ACTIONS(1), + [aux_sym_binary_token1] = ACTIONS(1), + [aux_sym_binary_token2] = ACTIONS(1), [aux_sym_signed_integer_token1] = ACTIONS(1), [aux_sym_unsigned_integer_token1] = ACTIONS(1), [sym_unit_quote] = ACTIONS(1), @@ -1856,109 +1999,54 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_in] = ACTIONS(1), }, [1] = { - [sym_source_file] = STATE(163), + [sym_source_file] = STATE(168), [sym_void] = STATE(91), - [sym_integer] = STATE(142), - [sym_signed_integer] = STATE(30), - [sym_unsigned_integer] = STATE(30), - [sym_number] = STATE(13), + [sym_base_ten] = STATE(138), + [sym_octal] = STATE(138), + [sym_hex] = STATE(138), + [sym_binary] = STATE(138), + [sym_integer] = STATE(153), + [sym_signed_integer] = STATE(25), + [sym_unsigned_integer] = STATE(25), + [sym_number] = STATE(14), [sym__float] = STATE(90), - [sym_scalar] = STATE(30), - [sym_boolean] = STATE(30), - [sym_expression] = STATE(111), - [sym_unary_expression] = STATE(30), - [sym_binary_expression] = STATE(30), - [sym_if] = STATE(30), + [sym_scalar] = STATE(25), + [sym_boolean] = STATE(25), + [sym_expression] = STATE(112), + [sym_unary_expression] = STATE(25), + [sym_binary_expression] = STATE(25), + [sym_if] = STATE(25), [sym_path] = STATE(91), [sym_argument_path] = STATE(8), [sym_local_path] = STATE(8), - [sym_parenthesis] = STATE(30), - [sym_list] = STATE(30), + [sym_parenthesis] = STATE(25), + [sym_list] = STATE(25), [sym_struct_definition] = STATE(91), - [sym_dictionary_construction] = STATE(30), - [sym_procedural_block] = STATE(30), - [sym_closure_definition] = STATE(30), + [sym_dictionary_construction] = STATE(25), + [sym_procedural_block] = STATE(25), + [sym_closure_definition] = STATE(25), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), [sym_default] = ACTIONS(9), [anon_sym_LPAREN] = ACTIONS(11), - [aux_sym_integer_token1] = ACTIONS(13), - [sym_true] = ACTIONS(15), - [sym_false] = ACTIONS(15), - [anon_sym_DASH] = ACTIONS(17), - [anon_sym_PLUS] = ACTIONS(17), - [anon_sym_BANG] = ACTIONS(17), - [anon_sym_if] = ACTIONS(19), - [anon_sym_AT] = ACTIONS(21), - [anon_sym_LBRACK] = ACTIONS(23), - [anon_sym_LBRACE] = ACTIONS(25), - }, - [2] = { - [aux_sym_argument_path_repeat1] = STATE(6), - [ts_builtin_sym_end] = ACTIONS(27), - [sym_identifier] = ACTIONS(29), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(27), - [sym_default] = ACTIONS(29), - [anon_sym_LPAREN] = ACTIONS(27), - [anon_sym_RPAREN] = ACTIONS(27), - [aux_sym_integer_token1] = ACTIONS(27), - [anon_sym_DOT] = ACTIONS(31), - [sym_true] = ACTIONS(29), - [sym_false] = ACTIONS(29), - [anon_sym_DASH] = ACTIONS(29), - [anon_sym_PLUS] = ACTIONS(29), - [anon_sym_BANG] = ACTIONS(29), - [anon_sym_STAR_STAR] = ACTIONS(29), - [anon_sym_STAR] = ACTIONS(29), - [anon_sym_SLASH] = ACTIONS(29), - [anon_sym_SLASH_SLASH] = ACTIONS(29), - [anon_sym_LT_LT] = ACTIONS(29), - [anon_sym_GT_GT] = ACTIONS(29), - [anon_sym_AMP] = ACTIONS(29), - [anon_sym_PIPE] = ACTIONS(29), - [anon_sym_CARET] = ACTIONS(29), - [anon_sym_GT] = ACTIONS(29), - [anon_sym_GT_EQ] = ACTIONS(27), - [anon_sym_EQ_EQ] = ACTIONS(27), - [anon_sym_LT_EQ] = ACTIONS(27), - [anon_sym_LT] = ACTIONS(29), - [anon_sym_BANG_EQ] = ACTIONS(27), - [anon_sym_AMP_AMP] = ACTIONS(29), - [anon_sym_PIPE_PIPE] = ACTIONS(29), - [anon_sym_DOT_DOT] = ACTIONS(29), - [anon_sym_DOT_DOT_EQ] = ACTIONS(27), - [anon_sym_if] = ACTIONS(29), + [aux_sym_base_ten_token1] = ACTIONS(13), + [aux_sym_octal_token1] = ACTIONS(15), + [aux_sym_hex_token1] = ACTIONS(17), + [aux_sym_binary_token1] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_DASH] = ACTIONS(23), + [anon_sym_PLUS] = ACTIONS(23), + [anon_sym_BANG] = ACTIONS(23), + [anon_sym_if] = ACTIONS(25), [anon_sym_AT] = ACTIONS(27), - [anon_sym_LBRACK] = ACTIONS(27), - [anon_sym_COMMA] = ACTIONS(27), - [anon_sym_RBRACK] = ACTIONS(27), - [anon_sym_EQ] = ACTIONS(29), - [anon_sym_LBRACE] = ACTIONS(27), - [anon_sym_RBRACE] = ACTIONS(27), - [anon_sym_SEMI] = ACTIONS(27), - [anon_sym_AMP_EQ] = ACTIONS(27), - [anon_sym_PIPE_EQ] = ACTIONS(27), - [anon_sym_CARET_EQ] = ACTIONS(27), - [anon_sym_AMP_AMP_EQ] = ACTIONS(27), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(27), - [anon_sym_CARET_CARET_EQ] = ACTIONS(27), - [anon_sym_PLUS_EQ] = ACTIONS(27), - [anon_sym_DASH_EQ] = ACTIONS(27), - [anon_sym_STAR_STAR_EQ] = ACTIONS(27), - [anon_sym_STAR_EQ] = ACTIONS(27), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(27), - [anon_sym_SLASH_EQ] = ACTIONS(27), - [anon_sym_LT_LT_EQ] = ACTIONS(27), - [anon_sym_GT_GT_EQ] = ACTIONS(27), - [anon_sym_let] = ACTIONS(29), - [anon_sym_for] = ACTIONS(29), + [anon_sym_LBRACK] = ACTIONS(29), + [anon_sym_LBRACE] = ACTIONS(31), }, - [3] = { - [aux_sym_argument_path_repeat1] = STATE(2), + [2] = { + [aux_sym_argument_path_repeat1] = STATE(5), [ts_builtin_sym_end] = ACTIONS(33), [sym_identifier] = ACTIONS(35), [sym_comment] = ACTIONS(3), @@ -1967,8 +2055,11 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_default] = ACTIONS(35), [anon_sym_LPAREN] = ACTIONS(33), [anon_sym_RPAREN] = ACTIONS(33), - [aux_sym_integer_token1] = ACTIONS(33), - [anon_sym_DOT] = ACTIONS(31), + [aux_sym_base_ten_token1] = ACTIONS(35), + [aux_sym_octal_token1] = ACTIONS(33), + [aux_sym_hex_token1] = ACTIONS(33), + [aux_sym_binary_token1] = ACTIONS(33), + [anon_sym_DOT] = ACTIONS(37), [sym_true] = ACTIONS(35), [sym_false] = ACTIONS(35), [anon_sym_DASH] = ACTIONS(35), @@ -2019,375 +2110,458 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_let] = ACTIONS(35), [anon_sym_for] = ACTIONS(35), }, + [3] = { + [aux_sym_argument_path_repeat1] = STATE(4), + [ts_builtin_sym_end] = ACTIONS(39), + [sym_identifier] = ACTIONS(41), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(39), + [sym_default] = ACTIONS(41), + [anon_sym_LPAREN] = ACTIONS(39), + [anon_sym_RPAREN] = ACTIONS(39), + [aux_sym_base_ten_token1] = ACTIONS(41), + [aux_sym_octal_token1] = ACTIONS(39), + [aux_sym_hex_token1] = ACTIONS(39), + [aux_sym_binary_token1] = ACTIONS(39), + [anon_sym_DOT] = ACTIONS(37), + [sym_true] = ACTIONS(41), + [sym_false] = ACTIONS(41), + [anon_sym_DASH] = ACTIONS(41), + [anon_sym_PLUS] = ACTIONS(41), + [anon_sym_BANG] = ACTIONS(41), + [anon_sym_STAR_STAR] = ACTIONS(41), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_SLASH] = ACTIONS(41), + [anon_sym_SLASH_SLASH] = ACTIONS(41), + [anon_sym_LT_LT] = ACTIONS(41), + [anon_sym_GT_GT] = ACTIONS(41), + [anon_sym_AMP] = ACTIONS(41), + [anon_sym_PIPE] = ACTIONS(41), + [anon_sym_CARET] = ACTIONS(41), + [anon_sym_GT] = ACTIONS(41), + [anon_sym_GT_EQ] = ACTIONS(39), + [anon_sym_EQ_EQ] = ACTIONS(39), + [anon_sym_LT_EQ] = ACTIONS(39), + [anon_sym_LT] = ACTIONS(41), + [anon_sym_BANG_EQ] = ACTIONS(39), + [anon_sym_AMP_AMP] = ACTIONS(41), + [anon_sym_PIPE_PIPE] = ACTIONS(41), + [anon_sym_DOT_DOT] = ACTIONS(41), + [anon_sym_DOT_DOT_EQ] = ACTIONS(39), + [anon_sym_if] = ACTIONS(41), + [anon_sym_AT] = ACTIONS(39), + [anon_sym_LBRACK] = ACTIONS(39), + [anon_sym_COMMA] = ACTIONS(39), + [anon_sym_RBRACK] = ACTIONS(39), + [anon_sym_EQ] = ACTIONS(41), + [anon_sym_LBRACE] = ACTIONS(39), + [anon_sym_RBRACE] = ACTIONS(39), + [anon_sym_SEMI] = ACTIONS(39), + [anon_sym_AMP_EQ] = ACTIONS(39), + [anon_sym_PIPE_EQ] = ACTIONS(39), + [anon_sym_CARET_EQ] = ACTIONS(39), + [anon_sym_AMP_AMP_EQ] = ACTIONS(39), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(39), + [anon_sym_CARET_CARET_EQ] = ACTIONS(39), + [anon_sym_PLUS_EQ] = ACTIONS(39), + [anon_sym_DASH_EQ] = ACTIONS(39), + [anon_sym_STAR_STAR_EQ] = ACTIONS(39), + [anon_sym_STAR_EQ] = ACTIONS(39), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(39), + [anon_sym_SLASH_EQ] = ACTIONS(39), + [anon_sym_LT_LT_EQ] = ACTIONS(39), + [anon_sym_GT_GT_EQ] = ACTIONS(39), + [anon_sym_let] = ACTIONS(41), + [anon_sym_for] = ACTIONS(41), + }, [4] = { - [aux_sym_argument_path_repeat1] = STATE(5), - [ts_builtin_sym_end] = ACTIONS(37), - [sym_identifier] = ACTIONS(39), + [aux_sym_argument_path_repeat1] = STATE(6), + [ts_builtin_sym_end] = ACTIONS(43), + [sym_identifier] = ACTIONS(45), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(37), - [sym_default] = ACTIONS(39), - [anon_sym_LPAREN] = ACTIONS(37), - [anon_sym_RPAREN] = ACTIONS(37), - [aux_sym_integer_token1] = ACTIONS(37), - [anon_sym_DOT] = ACTIONS(31), - [sym_true] = ACTIONS(39), - [sym_false] = ACTIONS(39), - [anon_sym_DASH] = ACTIONS(39), - [anon_sym_PLUS] = ACTIONS(39), - [anon_sym_BANG] = ACTIONS(39), - [anon_sym_STAR_STAR] = ACTIONS(39), - [anon_sym_STAR] = ACTIONS(39), - [anon_sym_SLASH] = ACTIONS(39), - [anon_sym_SLASH_SLASH] = ACTIONS(39), - [anon_sym_LT_LT] = ACTIONS(39), - [anon_sym_GT_GT] = ACTIONS(39), - [anon_sym_AMP] = ACTIONS(39), - [anon_sym_PIPE] = ACTIONS(39), - [anon_sym_CARET] = ACTIONS(39), - [anon_sym_GT] = ACTIONS(39), - [anon_sym_GT_EQ] = ACTIONS(37), - [anon_sym_EQ_EQ] = ACTIONS(37), - [anon_sym_LT_EQ] = ACTIONS(37), - [anon_sym_LT] = ACTIONS(39), - [anon_sym_BANG_EQ] = ACTIONS(37), - [anon_sym_AMP_AMP] = ACTIONS(39), - [anon_sym_PIPE_PIPE] = ACTIONS(39), - [anon_sym_DOT_DOT] = ACTIONS(39), - [anon_sym_DOT_DOT_EQ] = ACTIONS(37), - [anon_sym_if] = ACTIONS(39), - [anon_sym_AT] = ACTIONS(37), - [anon_sym_LBRACK] = ACTIONS(37), - [anon_sym_COMMA] = ACTIONS(37), - [anon_sym_RBRACK] = ACTIONS(37), - [anon_sym_EQ] = ACTIONS(39), - [anon_sym_LBRACE] = ACTIONS(37), - [anon_sym_RBRACE] = ACTIONS(37), - [anon_sym_SEMI] = ACTIONS(37), - [anon_sym_AMP_EQ] = ACTIONS(37), - [anon_sym_PIPE_EQ] = ACTIONS(37), - [anon_sym_CARET_EQ] = ACTIONS(37), - [anon_sym_AMP_AMP_EQ] = ACTIONS(37), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(37), - [anon_sym_CARET_CARET_EQ] = ACTIONS(37), - [anon_sym_PLUS_EQ] = ACTIONS(37), - [anon_sym_DASH_EQ] = ACTIONS(37), - [anon_sym_STAR_STAR_EQ] = ACTIONS(37), - [anon_sym_STAR_EQ] = ACTIONS(37), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(37), - [anon_sym_SLASH_EQ] = ACTIONS(37), - [anon_sym_LT_LT_EQ] = ACTIONS(37), - [anon_sym_GT_GT_EQ] = ACTIONS(37), - [anon_sym_let] = ACTIONS(39), - [anon_sym_for] = ACTIONS(39), + [sym_string] = ACTIONS(43), + [sym_default] = ACTIONS(45), + [anon_sym_LPAREN] = ACTIONS(43), + [anon_sym_RPAREN] = ACTIONS(43), + [aux_sym_base_ten_token1] = ACTIONS(45), + [aux_sym_octal_token1] = ACTIONS(43), + [aux_sym_hex_token1] = ACTIONS(43), + [aux_sym_binary_token1] = ACTIONS(43), + [anon_sym_DOT] = ACTIONS(37), + [sym_true] = ACTIONS(45), + [sym_false] = ACTIONS(45), + [anon_sym_DASH] = ACTIONS(45), + [anon_sym_PLUS] = ACTIONS(45), + [anon_sym_BANG] = ACTIONS(45), + [anon_sym_STAR_STAR] = ACTIONS(45), + [anon_sym_STAR] = ACTIONS(45), + [anon_sym_SLASH] = ACTIONS(45), + [anon_sym_SLASH_SLASH] = ACTIONS(45), + [anon_sym_LT_LT] = ACTIONS(45), + [anon_sym_GT_GT] = ACTIONS(45), + [anon_sym_AMP] = ACTIONS(45), + [anon_sym_PIPE] = ACTIONS(45), + [anon_sym_CARET] = ACTIONS(45), + [anon_sym_GT] = ACTIONS(45), + [anon_sym_GT_EQ] = ACTIONS(43), + [anon_sym_EQ_EQ] = ACTIONS(43), + [anon_sym_LT_EQ] = ACTIONS(43), + [anon_sym_LT] = ACTIONS(45), + [anon_sym_BANG_EQ] = ACTIONS(43), + [anon_sym_AMP_AMP] = ACTIONS(45), + [anon_sym_PIPE_PIPE] = ACTIONS(45), + [anon_sym_DOT_DOT] = ACTIONS(45), + [anon_sym_DOT_DOT_EQ] = ACTIONS(43), + [anon_sym_if] = ACTIONS(45), + [anon_sym_AT] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(43), + [anon_sym_COMMA] = ACTIONS(43), + [anon_sym_RBRACK] = ACTIONS(43), + [anon_sym_EQ] = ACTIONS(45), + [anon_sym_LBRACE] = ACTIONS(43), + [anon_sym_RBRACE] = ACTIONS(43), + [anon_sym_SEMI] = ACTIONS(43), + [anon_sym_AMP_EQ] = ACTIONS(43), + [anon_sym_PIPE_EQ] = ACTIONS(43), + [anon_sym_CARET_EQ] = ACTIONS(43), + [anon_sym_AMP_AMP_EQ] = ACTIONS(43), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(43), + [anon_sym_CARET_CARET_EQ] = ACTIONS(43), + [anon_sym_PLUS_EQ] = ACTIONS(43), + [anon_sym_DASH_EQ] = ACTIONS(43), + [anon_sym_STAR_STAR_EQ] = ACTIONS(43), + [anon_sym_STAR_EQ] = ACTIONS(43), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(43), + [anon_sym_SLASH_EQ] = ACTIONS(43), + [anon_sym_LT_LT_EQ] = ACTIONS(43), + [anon_sym_GT_GT_EQ] = ACTIONS(43), + [anon_sym_let] = ACTIONS(45), + [anon_sym_for] = ACTIONS(45), }, [5] = { [aux_sym_argument_path_repeat1] = STATE(6), - [ts_builtin_sym_end] = ACTIONS(41), - [sym_identifier] = ACTIONS(43), + [ts_builtin_sym_end] = ACTIONS(47), + [sym_identifier] = ACTIONS(49), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(41), - [sym_default] = ACTIONS(43), - [anon_sym_LPAREN] = ACTIONS(41), - [anon_sym_RPAREN] = ACTIONS(41), - [aux_sym_integer_token1] = ACTIONS(41), - [anon_sym_DOT] = ACTIONS(31), - [sym_true] = ACTIONS(43), - [sym_false] = ACTIONS(43), - [anon_sym_DASH] = ACTIONS(43), - [anon_sym_PLUS] = ACTIONS(43), - [anon_sym_BANG] = ACTIONS(43), - [anon_sym_STAR_STAR] = ACTIONS(43), - [anon_sym_STAR] = ACTIONS(43), - [anon_sym_SLASH] = ACTIONS(43), - [anon_sym_SLASH_SLASH] = ACTIONS(43), - [anon_sym_LT_LT] = ACTIONS(43), - [anon_sym_GT_GT] = ACTIONS(43), - [anon_sym_AMP] = ACTIONS(43), - [anon_sym_PIPE] = ACTIONS(43), - [anon_sym_CARET] = ACTIONS(43), - [anon_sym_GT] = ACTIONS(43), - [anon_sym_GT_EQ] = ACTIONS(41), - [anon_sym_EQ_EQ] = ACTIONS(41), - [anon_sym_LT_EQ] = ACTIONS(41), - [anon_sym_LT] = ACTIONS(43), - [anon_sym_BANG_EQ] = ACTIONS(41), - [anon_sym_AMP_AMP] = ACTIONS(43), - [anon_sym_PIPE_PIPE] = ACTIONS(43), - [anon_sym_DOT_DOT] = ACTIONS(43), - [anon_sym_DOT_DOT_EQ] = ACTIONS(41), - [anon_sym_if] = ACTIONS(43), - [anon_sym_AT] = ACTIONS(41), - [anon_sym_LBRACK] = ACTIONS(41), - [anon_sym_COMMA] = ACTIONS(41), - [anon_sym_RBRACK] = ACTIONS(41), - [anon_sym_EQ] = ACTIONS(43), - [anon_sym_LBRACE] = ACTIONS(41), - [anon_sym_RBRACE] = ACTIONS(41), - [anon_sym_SEMI] = ACTIONS(41), - [anon_sym_AMP_EQ] = ACTIONS(41), - [anon_sym_PIPE_EQ] = ACTIONS(41), - [anon_sym_CARET_EQ] = ACTIONS(41), - [anon_sym_AMP_AMP_EQ] = ACTIONS(41), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(41), - [anon_sym_CARET_CARET_EQ] = ACTIONS(41), - [anon_sym_PLUS_EQ] = ACTIONS(41), - [anon_sym_DASH_EQ] = ACTIONS(41), - [anon_sym_STAR_STAR_EQ] = ACTIONS(41), - [anon_sym_STAR_EQ] = ACTIONS(41), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(41), - [anon_sym_SLASH_EQ] = ACTIONS(41), - [anon_sym_LT_LT_EQ] = ACTIONS(41), - [anon_sym_GT_GT_EQ] = ACTIONS(41), - [anon_sym_let] = ACTIONS(43), - [anon_sym_for] = ACTIONS(43), + [sym_string] = ACTIONS(47), + [sym_default] = ACTIONS(49), + [anon_sym_LPAREN] = ACTIONS(47), + [anon_sym_RPAREN] = ACTIONS(47), + [aux_sym_base_ten_token1] = ACTIONS(49), + [aux_sym_octal_token1] = ACTIONS(47), + [aux_sym_hex_token1] = ACTIONS(47), + [aux_sym_binary_token1] = ACTIONS(47), + [anon_sym_DOT] = ACTIONS(37), + [sym_true] = ACTIONS(49), + [sym_false] = ACTIONS(49), + [anon_sym_DASH] = ACTIONS(49), + [anon_sym_PLUS] = ACTIONS(49), + [anon_sym_BANG] = ACTIONS(49), + [anon_sym_STAR_STAR] = ACTIONS(49), + [anon_sym_STAR] = ACTIONS(49), + [anon_sym_SLASH] = ACTIONS(49), + [anon_sym_SLASH_SLASH] = ACTIONS(49), + [anon_sym_LT_LT] = ACTIONS(49), + [anon_sym_GT_GT] = ACTIONS(49), + [anon_sym_AMP] = ACTIONS(49), + [anon_sym_PIPE] = ACTIONS(49), + [anon_sym_CARET] = ACTIONS(49), + [anon_sym_GT] = ACTIONS(49), + [anon_sym_GT_EQ] = ACTIONS(47), + [anon_sym_EQ_EQ] = ACTIONS(47), + [anon_sym_LT_EQ] = ACTIONS(47), + [anon_sym_LT] = ACTIONS(49), + [anon_sym_BANG_EQ] = ACTIONS(47), + [anon_sym_AMP_AMP] = ACTIONS(49), + [anon_sym_PIPE_PIPE] = ACTIONS(49), + [anon_sym_DOT_DOT] = ACTIONS(49), + [anon_sym_DOT_DOT_EQ] = ACTIONS(47), + [anon_sym_if] = ACTIONS(49), + [anon_sym_AT] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(47), + [anon_sym_COMMA] = ACTIONS(47), + [anon_sym_RBRACK] = ACTIONS(47), + [anon_sym_EQ] = ACTIONS(49), + [anon_sym_LBRACE] = ACTIONS(47), + [anon_sym_RBRACE] = ACTIONS(47), + [anon_sym_SEMI] = ACTIONS(47), + [anon_sym_AMP_EQ] = ACTIONS(47), + [anon_sym_PIPE_EQ] = ACTIONS(47), + [anon_sym_CARET_EQ] = ACTIONS(47), + [anon_sym_AMP_AMP_EQ] = ACTIONS(47), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(47), + [anon_sym_CARET_CARET_EQ] = ACTIONS(47), + [anon_sym_PLUS_EQ] = ACTIONS(47), + [anon_sym_DASH_EQ] = ACTIONS(47), + [anon_sym_STAR_STAR_EQ] = ACTIONS(47), + [anon_sym_STAR_EQ] = ACTIONS(47), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(47), + [anon_sym_SLASH_EQ] = ACTIONS(47), + [anon_sym_LT_LT_EQ] = ACTIONS(47), + [anon_sym_GT_GT_EQ] = ACTIONS(47), + [anon_sym_let] = ACTIONS(49), + [anon_sym_for] = ACTIONS(49), }, [6] = { [aux_sym_argument_path_repeat1] = STATE(6), - [ts_builtin_sym_end] = ACTIONS(45), - [sym_identifier] = ACTIONS(47), + [ts_builtin_sym_end] = ACTIONS(51), + [sym_identifier] = ACTIONS(53), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(45), - [sym_default] = ACTIONS(47), - [anon_sym_LPAREN] = ACTIONS(45), - [anon_sym_RPAREN] = ACTIONS(45), - [aux_sym_integer_token1] = ACTIONS(45), - [anon_sym_DOT] = ACTIONS(49), - [sym_true] = ACTIONS(47), - [sym_false] = ACTIONS(47), - [anon_sym_DASH] = ACTIONS(47), - [anon_sym_PLUS] = ACTIONS(47), - [anon_sym_BANG] = ACTIONS(47), - [anon_sym_STAR_STAR] = ACTIONS(47), - [anon_sym_STAR] = ACTIONS(47), - [anon_sym_SLASH] = ACTIONS(47), - [anon_sym_SLASH_SLASH] = ACTIONS(47), - [anon_sym_LT_LT] = ACTIONS(47), - [anon_sym_GT_GT] = ACTIONS(47), - [anon_sym_AMP] = ACTIONS(47), - [anon_sym_PIPE] = ACTIONS(47), - [anon_sym_CARET] = ACTIONS(47), - [anon_sym_GT] = ACTIONS(47), - [anon_sym_GT_EQ] = ACTIONS(45), - [anon_sym_EQ_EQ] = ACTIONS(45), - [anon_sym_LT_EQ] = ACTIONS(45), - [anon_sym_LT] = ACTIONS(47), - [anon_sym_BANG_EQ] = ACTIONS(45), - [anon_sym_AMP_AMP] = ACTIONS(47), - [anon_sym_PIPE_PIPE] = ACTIONS(47), - [anon_sym_DOT_DOT] = ACTIONS(47), - [anon_sym_DOT_DOT_EQ] = ACTIONS(45), - [anon_sym_if] = ACTIONS(47), - [anon_sym_AT] = ACTIONS(45), - [anon_sym_LBRACK] = ACTIONS(45), - [anon_sym_COMMA] = ACTIONS(45), - [anon_sym_RBRACK] = ACTIONS(45), - [anon_sym_EQ] = ACTIONS(47), - [anon_sym_LBRACE] = ACTIONS(45), - [anon_sym_RBRACE] = ACTIONS(45), - [anon_sym_SEMI] = ACTIONS(45), - [anon_sym_AMP_EQ] = ACTIONS(45), - [anon_sym_PIPE_EQ] = ACTIONS(45), - [anon_sym_CARET_EQ] = ACTIONS(45), - [anon_sym_AMP_AMP_EQ] = ACTIONS(45), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(45), - [anon_sym_CARET_CARET_EQ] = ACTIONS(45), - [anon_sym_PLUS_EQ] = ACTIONS(45), - [anon_sym_DASH_EQ] = ACTIONS(45), - [anon_sym_STAR_STAR_EQ] = ACTIONS(45), - [anon_sym_STAR_EQ] = ACTIONS(45), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(45), - [anon_sym_SLASH_EQ] = ACTIONS(45), - [anon_sym_LT_LT_EQ] = ACTIONS(45), - [anon_sym_GT_GT_EQ] = ACTIONS(45), - [anon_sym_let] = ACTIONS(47), - [anon_sym_for] = ACTIONS(47), + [sym_string] = ACTIONS(51), + [sym_default] = ACTIONS(53), + [anon_sym_LPAREN] = ACTIONS(51), + [anon_sym_RPAREN] = ACTIONS(51), + [aux_sym_base_ten_token1] = ACTIONS(53), + [aux_sym_octal_token1] = ACTIONS(51), + [aux_sym_hex_token1] = ACTIONS(51), + [aux_sym_binary_token1] = ACTIONS(51), + [anon_sym_DOT] = ACTIONS(55), + [sym_true] = ACTIONS(53), + [sym_false] = ACTIONS(53), + [anon_sym_DASH] = ACTIONS(53), + [anon_sym_PLUS] = ACTIONS(53), + [anon_sym_BANG] = ACTIONS(53), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_STAR] = ACTIONS(53), + [anon_sym_SLASH] = ACTIONS(53), + [anon_sym_SLASH_SLASH] = ACTIONS(53), + [anon_sym_LT_LT] = ACTIONS(53), + [anon_sym_GT_GT] = ACTIONS(53), + [anon_sym_AMP] = ACTIONS(53), + [anon_sym_PIPE] = ACTIONS(53), + [anon_sym_CARET] = ACTIONS(53), + [anon_sym_GT] = ACTIONS(53), + [anon_sym_GT_EQ] = ACTIONS(51), + [anon_sym_EQ_EQ] = ACTIONS(51), + [anon_sym_LT_EQ] = ACTIONS(51), + [anon_sym_LT] = ACTIONS(53), + [anon_sym_BANG_EQ] = ACTIONS(51), + [anon_sym_AMP_AMP] = ACTIONS(53), + [anon_sym_PIPE_PIPE] = ACTIONS(53), + [anon_sym_DOT_DOT] = ACTIONS(53), + [anon_sym_DOT_DOT_EQ] = ACTIONS(51), + [anon_sym_if] = ACTIONS(53), + [anon_sym_AT] = ACTIONS(51), + [anon_sym_LBRACK] = ACTIONS(51), + [anon_sym_COMMA] = ACTIONS(51), + [anon_sym_RBRACK] = ACTIONS(51), + [anon_sym_EQ] = ACTIONS(53), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_RBRACE] = ACTIONS(51), + [anon_sym_SEMI] = ACTIONS(51), + [anon_sym_AMP_EQ] = ACTIONS(51), + [anon_sym_PIPE_EQ] = ACTIONS(51), + [anon_sym_CARET_EQ] = ACTIONS(51), + [anon_sym_AMP_AMP_EQ] = ACTIONS(51), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(51), + [anon_sym_CARET_CARET_EQ] = ACTIONS(51), + [anon_sym_PLUS_EQ] = ACTIONS(51), + [anon_sym_DASH_EQ] = ACTIONS(51), + [anon_sym_STAR_STAR_EQ] = ACTIONS(51), + [anon_sym_STAR_EQ] = ACTIONS(51), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(51), + [anon_sym_SLASH_EQ] = ACTIONS(51), + [anon_sym_LT_LT_EQ] = ACTIONS(51), + [anon_sym_GT_GT_EQ] = ACTIONS(51), + [anon_sym_let] = ACTIONS(53), + [anon_sym_for] = ACTIONS(53), }, [7] = { - [ts_builtin_sym_end] = ACTIONS(45), - [sym_identifier] = ACTIONS(47), + [ts_builtin_sym_end] = ACTIONS(51), + [sym_identifier] = ACTIONS(53), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(45), - [sym_default] = ACTIONS(47), - [anon_sym_LPAREN] = ACTIONS(45), - [anon_sym_RPAREN] = ACTIONS(45), - [aux_sym_integer_token1] = ACTIONS(45), - [anon_sym_DOT] = ACTIONS(47), - [sym_true] = ACTIONS(47), - [sym_false] = ACTIONS(47), - [anon_sym_DASH] = ACTIONS(47), - [anon_sym_PLUS] = ACTIONS(47), - [anon_sym_BANG] = ACTIONS(47), - [anon_sym_STAR_STAR] = ACTIONS(47), - [anon_sym_STAR] = ACTIONS(47), - [anon_sym_SLASH] = ACTIONS(47), - [anon_sym_SLASH_SLASH] = ACTIONS(47), - [anon_sym_LT_LT] = ACTIONS(47), - [anon_sym_GT_GT] = ACTIONS(47), - [anon_sym_AMP] = ACTIONS(47), - [anon_sym_PIPE] = ACTIONS(47), - [anon_sym_CARET] = ACTIONS(47), - [anon_sym_GT] = ACTIONS(47), - [anon_sym_GT_EQ] = ACTIONS(45), - [anon_sym_EQ_EQ] = ACTIONS(45), - [anon_sym_LT_EQ] = ACTIONS(45), - [anon_sym_LT] = ACTIONS(47), - [anon_sym_BANG_EQ] = ACTIONS(45), - [anon_sym_AMP_AMP] = ACTIONS(47), - [anon_sym_PIPE_PIPE] = ACTIONS(47), - [anon_sym_DOT_DOT] = ACTIONS(47), - [anon_sym_DOT_DOT_EQ] = ACTIONS(45), - [anon_sym_if] = ACTIONS(47), - [anon_sym_AT] = ACTIONS(45), - [anon_sym_LBRACK] = ACTIONS(45), - [anon_sym_COMMA] = ACTIONS(45), - [anon_sym_RBRACK] = ACTIONS(45), - [anon_sym_EQ] = ACTIONS(47), - [anon_sym_LBRACE] = ACTIONS(45), - [anon_sym_RBRACE] = ACTIONS(45), - [anon_sym_SEMI] = ACTIONS(45), - [anon_sym_AMP_EQ] = ACTIONS(45), - [anon_sym_PIPE_EQ] = ACTIONS(45), - [anon_sym_CARET_EQ] = ACTIONS(45), - [anon_sym_AMP_AMP_EQ] = ACTIONS(45), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(45), - [anon_sym_CARET_CARET_EQ] = ACTIONS(45), - [anon_sym_PLUS_EQ] = ACTIONS(45), - [anon_sym_DASH_EQ] = ACTIONS(45), - [anon_sym_STAR_STAR_EQ] = ACTIONS(45), - [anon_sym_STAR_EQ] = ACTIONS(45), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(45), - [anon_sym_SLASH_EQ] = ACTIONS(45), - [anon_sym_LT_LT_EQ] = ACTIONS(45), - [anon_sym_GT_GT_EQ] = ACTIONS(45), - [anon_sym_let] = ACTIONS(47), - [anon_sym_for] = ACTIONS(47), + [sym_string] = ACTIONS(51), + [sym_default] = ACTIONS(53), + [anon_sym_LPAREN] = ACTIONS(51), + [anon_sym_RPAREN] = ACTIONS(51), + [aux_sym_base_ten_token1] = ACTIONS(53), + [aux_sym_octal_token1] = ACTIONS(51), + [aux_sym_hex_token1] = ACTIONS(51), + [aux_sym_binary_token1] = ACTIONS(51), + [anon_sym_DOT] = ACTIONS(53), + [sym_true] = ACTIONS(53), + [sym_false] = ACTIONS(53), + [anon_sym_DASH] = ACTIONS(53), + [anon_sym_PLUS] = ACTIONS(53), + [anon_sym_BANG] = ACTIONS(53), + [anon_sym_STAR_STAR] = ACTIONS(53), + [anon_sym_STAR] = ACTIONS(53), + [anon_sym_SLASH] = ACTIONS(53), + [anon_sym_SLASH_SLASH] = ACTIONS(53), + [anon_sym_LT_LT] = ACTIONS(53), + [anon_sym_GT_GT] = ACTIONS(53), + [anon_sym_AMP] = ACTIONS(53), + [anon_sym_PIPE] = ACTIONS(53), + [anon_sym_CARET] = ACTIONS(53), + [anon_sym_GT] = ACTIONS(53), + [anon_sym_GT_EQ] = ACTIONS(51), + [anon_sym_EQ_EQ] = ACTIONS(51), + [anon_sym_LT_EQ] = ACTIONS(51), + [anon_sym_LT] = ACTIONS(53), + [anon_sym_BANG_EQ] = ACTIONS(51), + [anon_sym_AMP_AMP] = ACTIONS(53), + [anon_sym_PIPE_PIPE] = ACTIONS(53), + [anon_sym_DOT_DOT] = ACTIONS(53), + [anon_sym_DOT_DOT_EQ] = ACTIONS(51), + [anon_sym_if] = ACTIONS(53), + [anon_sym_AT] = ACTIONS(51), + [anon_sym_LBRACK] = ACTIONS(51), + [anon_sym_COMMA] = ACTIONS(51), + [anon_sym_RBRACK] = ACTIONS(51), + [anon_sym_EQ] = ACTIONS(53), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_RBRACE] = ACTIONS(51), + [anon_sym_SEMI] = ACTIONS(51), + [anon_sym_AMP_EQ] = ACTIONS(51), + [anon_sym_PIPE_EQ] = ACTIONS(51), + [anon_sym_CARET_EQ] = ACTIONS(51), + [anon_sym_AMP_AMP_EQ] = ACTIONS(51), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(51), + [anon_sym_CARET_CARET_EQ] = ACTIONS(51), + [anon_sym_PLUS_EQ] = ACTIONS(51), + [anon_sym_DASH_EQ] = ACTIONS(51), + [anon_sym_STAR_STAR_EQ] = ACTIONS(51), + [anon_sym_STAR_EQ] = ACTIONS(51), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(51), + [anon_sym_SLASH_EQ] = ACTIONS(51), + [anon_sym_LT_LT_EQ] = ACTIONS(51), + [anon_sym_GT_GT_EQ] = ACTIONS(51), + [anon_sym_let] = ACTIONS(53), + [anon_sym_for] = ACTIONS(53), }, [8] = { - [ts_builtin_sym_end] = ACTIONS(52), - [sym_identifier] = ACTIONS(54), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(52), - [sym_default] = ACTIONS(54), - [anon_sym_LPAREN] = ACTIONS(52), - [anon_sym_RPAREN] = ACTIONS(52), - [aux_sym_integer_token1] = ACTIONS(52), - [sym_true] = ACTIONS(54), - [sym_false] = ACTIONS(54), - [anon_sym_DASH] = ACTIONS(54), - [anon_sym_PLUS] = ACTIONS(54), - [anon_sym_BANG] = ACTIONS(54), - [anon_sym_STAR_STAR] = ACTIONS(54), - [anon_sym_STAR] = ACTIONS(54), - [anon_sym_SLASH] = ACTIONS(54), - [anon_sym_SLASH_SLASH] = ACTIONS(54), - [anon_sym_LT_LT] = ACTIONS(54), - [anon_sym_GT_GT] = ACTIONS(54), - [anon_sym_AMP] = ACTIONS(54), - [anon_sym_PIPE] = ACTIONS(54), - [anon_sym_CARET] = ACTIONS(54), - [anon_sym_GT] = ACTIONS(54), - [anon_sym_GT_EQ] = ACTIONS(52), - [anon_sym_EQ_EQ] = ACTIONS(52), - [anon_sym_LT_EQ] = ACTIONS(52), - [anon_sym_LT] = ACTIONS(54), - [anon_sym_BANG_EQ] = ACTIONS(52), - [anon_sym_AMP_AMP] = ACTIONS(54), - [anon_sym_PIPE_PIPE] = ACTIONS(54), - [anon_sym_DOT_DOT] = ACTIONS(54), - [anon_sym_DOT_DOT_EQ] = ACTIONS(52), - [anon_sym_if] = ACTIONS(54), - [anon_sym_AT] = ACTIONS(52), - [anon_sym_LBRACK] = ACTIONS(52), - [anon_sym_COMMA] = ACTIONS(52), - [anon_sym_RBRACK] = ACTIONS(52), - [anon_sym_EQ] = ACTIONS(54), - [anon_sym_LBRACE] = ACTIONS(52), - [anon_sym_RBRACE] = ACTIONS(52), - [anon_sym_SEMI] = ACTIONS(52), - [anon_sym_AMP_EQ] = ACTIONS(52), - [anon_sym_PIPE_EQ] = ACTIONS(52), - [anon_sym_CARET_EQ] = ACTIONS(52), - [anon_sym_AMP_AMP_EQ] = ACTIONS(52), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(52), - [anon_sym_CARET_CARET_EQ] = ACTIONS(52), - [anon_sym_PLUS_EQ] = ACTIONS(52), - [anon_sym_DASH_EQ] = ACTIONS(52), - [anon_sym_STAR_STAR_EQ] = ACTIONS(52), - [anon_sym_STAR_EQ] = ACTIONS(52), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(52), - [anon_sym_SLASH_EQ] = ACTIONS(52), - [anon_sym_LT_LT_EQ] = ACTIONS(52), - [anon_sym_GT_GT_EQ] = ACTIONS(52), - [anon_sym_let] = ACTIONS(54), - [anon_sym_for] = ACTIONS(54), - }, - [9] = { - [sym_closure_captured_variables] = STATE(168), - [sym_assignment_operator] = STATE(59), - [sym_identifier] = ACTIONS(56), + [ts_builtin_sym_end] = ACTIONS(58), + [sym_identifier] = ACTIONS(60), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(58), - [sym_default] = ACTIONS(56), + [sym_default] = ACTIONS(60), [anon_sym_LPAREN] = ACTIONS(58), - [aux_sym_integer_token1] = ACTIONS(58), - [sym_true] = ACTIONS(56), - [sym_false] = ACTIONS(56), - [anon_sym_DASH] = ACTIONS(56), - [anon_sym_PLUS] = ACTIONS(56), - [anon_sym_BANG] = ACTIONS(56), - [anon_sym_STAR_STAR] = ACTIONS(56), - [anon_sym_STAR] = ACTIONS(56), - [anon_sym_SLASH] = ACTIONS(56), - [anon_sym_SLASH_SLASH] = ACTIONS(56), - [anon_sym_LT_LT] = ACTIONS(56), - [anon_sym_GT_GT] = ACTIONS(56), - [anon_sym_AMP] = ACTIONS(56), - [anon_sym_PIPE] = ACTIONS(56), - [anon_sym_CARET] = ACTIONS(56), - [anon_sym_GT] = ACTIONS(56), + [anon_sym_RPAREN] = ACTIONS(58), + [aux_sym_base_ten_token1] = ACTIONS(60), + [aux_sym_octal_token1] = ACTIONS(58), + [aux_sym_hex_token1] = ACTIONS(58), + [aux_sym_binary_token1] = ACTIONS(58), + [sym_true] = ACTIONS(60), + [sym_false] = ACTIONS(60), + [anon_sym_DASH] = ACTIONS(60), + [anon_sym_PLUS] = ACTIONS(60), + [anon_sym_BANG] = ACTIONS(60), + [anon_sym_STAR_STAR] = ACTIONS(60), + [anon_sym_STAR] = ACTIONS(60), + [anon_sym_SLASH] = ACTIONS(60), + [anon_sym_SLASH_SLASH] = ACTIONS(60), + [anon_sym_LT_LT] = ACTIONS(60), + [anon_sym_GT_GT] = ACTIONS(60), + [anon_sym_AMP] = ACTIONS(60), + [anon_sym_PIPE] = ACTIONS(60), + [anon_sym_CARET] = ACTIONS(60), + [anon_sym_GT] = ACTIONS(60), [anon_sym_GT_EQ] = ACTIONS(58), [anon_sym_EQ_EQ] = ACTIONS(58), [anon_sym_LT_EQ] = ACTIONS(58), - [anon_sym_LT] = ACTIONS(56), + [anon_sym_LT] = ACTIONS(60), [anon_sym_BANG_EQ] = ACTIONS(58), - [anon_sym_AMP_AMP] = ACTIONS(56), - [anon_sym_PIPE_PIPE] = ACTIONS(56), - [anon_sym_DOT_DOT] = ACTIONS(56), + [anon_sym_AMP_AMP] = ACTIONS(60), + [anon_sym_PIPE_PIPE] = ACTIONS(60), + [anon_sym_DOT_DOT] = ACTIONS(60), [anon_sym_DOT_DOT_EQ] = ACTIONS(58), - [anon_sym_if] = ACTIONS(56), + [anon_sym_if] = ACTIONS(60), [anon_sym_AT] = ACTIONS(58), [anon_sym_LBRACK] = ACTIONS(58), + [anon_sym_COMMA] = ACTIONS(58), + [anon_sym_RBRACK] = ACTIONS(58), [anon_sym_EQ] = ACTIONS(60), [anon_sym_LBRACE] = ACTIONS(58), [anon_sym_RBRACE] = ACTIONS(58), [anon_sym_SEMI] = ACTIONS(58), - [anon_sym_AMP_EQ] = ACTIONS(62), - [anon_sym_PIPE_EQ] = ACTIONS(62), - [anon_sym_CARET_EQ] = ACTIONS(62), - [anon_sym_AMP_AMP_EQ] = ACTIONS(62), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(62), - [anon_sym_CARET_CARET_EQ] = ACTIONS(62), - [anon_sym_PLUS_EQ] = ACTIONS(62), - [anon_sym_DASH_EQ] = ACTIONS(62), - [anon_sym_STAR_STAR_EQ] = ACTIONS(62), - [anon_sym_STAR_EQ] = ACTIONS(62), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(62), - [anon_sym_SLASH_EQ] = ACTIONS(62), - [anon_sym_LT_LT_EQ] = ACTIONS(62), - [anon_sym_GT_GT_EQ] = ACTIONS(62), - [anon_sym_let] = ACTIONS(56), - [anon_sym_for] = ACTIONS(56), + [anon_sym_AMP_EQ] = ACTIONS(58), + [anon_sym_PIPE_EQ] = ACTIONS(58), + [anon_sym_CARET_EQ] = ACTIONS(58), + [anon_sym_AMP_AMP_EQ] = ACTIONS(58), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(58), + [anon_sym_CARET_CARET_EQ] = ACTIONS(58), + [anon_sym_PLUS_EQ] = ACTIONS(58), + [anon_sym_DASH_EQ] = ACTIONS(58), + [anon_sym_STAR_STAR_EQ] = ACTIONS(58), + [anon_sym_STAR_EQ] = ACTIONS(58), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(58), + [anon_sym_SLASH_EQ] = ACTIONS(58), + [anon_sym_LT_LT_EQ] = ACTIONS(58), + [anon_sym_GT_GT_EQ] = ACTIONS(58), + [anon_sym_let] = ACTIONS(60), + [anon_sym_for] = ACTIONS(60), + }, + [9] = { + [sym_closure_captured_variables] = STATE(175), + [sym_assignment_operator] = STATE(47), + [sym_identifier] = ACTIONS(62), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(64), + [sym_default] = ACTIONS(62), + [anon_sym_LPAREN] = ACTIONS(64), + [aux_sym_base_ten_token1] = ACTIONS(62), + [aux_sym_octal_token1] = ACTIONS(64), + [aux_sym_hex_token1] = ACTIONS(64), + [aux_sym_binary_token1] = ACTIONS(64), + [sym_true] = ACTIONS(62), + [sym_false] = ACTIONS(62), + [anon_sym_DASH] = ACTIONS(62), + [anon_sym_PLUS] = ACTIONS(62), + [anon_sym_BANG] = ACTIONS(62), + [anon_sym_STAR_STAR] = ACTIONS(62), + [anon_sym_STAR] = ACTIONS(62), + [anon_sym_SLASH] = ACTIONS(62), + [anon_sym_SLASH_SLASH] = ACTIONS(62), + [anon_sym_LT_LT] = ACTIONS(62), + [anon_sym_GT_GT] = ACTIONS(62), + [anon_sym_AMP] = ACTIONS(62), + [anon_sym_PIPE] = ACTIONS(62), + [anon_sym_CARET] = ACTIONS(62), + [anon_sym_GT] = ACTIONS(62), + [anon_sym_GT_EQ] = ACTIONS(64), + [anon_sym_EQ_EQ] = ACTIONS(64), + [anon_sym_LT_EQ] = ACTIONS(64), + [anon_sym_LT] = ACTIONS(62), + [anon_sym_BANG_EQ] = ACTIONS(64), + [anon_sym_AMP_AMP] = ACTIONS(62), + [anon_sym_PIPE_PIPE] = ACTIONS(62), + [anon_sym_DOT_DOT] = ACTIONS(62), + [anon_sym_DOT_DOT_EQ] = ACTIONS(64), + [anon_sym_if] = ACTIONS(62), + [anon_sym_AT] = ACTIONS(64), + [anon_sym_LBRACK] = ACTIONS(64), + [anon_sym_EQ] = ACTIONS(66), + [anon_sym_LBRACE] = ACTIONS(64), + [anon_sym_RBRACE] = ACTIONS(64), + [anon_sym_SEMI] = ACTIONS(64), + [anon_sym_AMP_EQ] = ACTIONS(68), + [anon_sym_PIPE_EQ] = ACTIONS(68), + [anon_sym_CARET_EQ] = ACTIONS(68), + [anon_sym_AMP_AMP_EQ] = ACTIONS(68), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(68), + [anon_sym_CARET_CARET_EQ] = ACTIONS(68), + [anon_sym_PLUS_EQ] = ACTIONS(68), + [anon_sym_DASH_EQ] = ACTIONS(68), + [anon_sym_STAR_STAR_EQ] = ACTIONS(68), + [anon_sym_STAR_EQ] = ACTIONS(68), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(68), + [anon_sym_SLASH_EQ] = ACTIONS(68), + [anon_sym_LT_LT_EQ] = ACTIONS(68), + [anon_sym_GT_GT_EQ] = ACTIONS(68), + [anon_sym_let] = ACTIONS(62), + [anon_sym_for] = ACTIONS(62), }, }; static const uint16_t ts_small_parse_table[] = { - [0] = 25, + [0] = 29, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2396,57 +2570,68 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, - ACTIONS(68), 1, - anon_sym_RBRACE, ACTIONS(70), 1, + aux_sym_base_ten_token1, + ACTIONS(74), 1, + anon_sym_RBRACE, + ACTIONS(76), 1, anon_sym_let, - ACTIONS(72), 1, + ACTIONS(78), 1, anon_sym_for, STATE(9), 1, sym_path, - STATE(13), 1, + STATE(14), 1, sym_number, - STATE(40), 1, + STATE(62), 1, sym__float, - STATE(45), 1, + STATE(88), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - STATE(11), 2, + STATE(12), 2, sym_statement, aux_sym_procedural_block_repeat1, - STATE(41), 2, + STATE(76), 2, sym_void, sym_struct_definition, - ACTIONS(66), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(115), 4, + STATE(118), 4, sym_closed_expression, sym_let, sym_assign, sym_for, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2459,7 +2644,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [97] = 25, + [112] = 29, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2468,57 +2653,68 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, ACTIONS(70), 1, + aux_sym_base_ten_token1, + ACTIONS(76), 1, anon_sym_let, - ACTIONS(72), 1, + ACTIONS(78), 1, anon_sym_for, - ACTIONS(74), 1, + ACTIONS(80), 1, anon_sym_RBRACE, STATE(9), 1, sym_path, - STATE(13), 1, + STATE(14), 1, sym_number, - STATE(40), 1, + STATE(62), 1, sym__float, - STATE(45), 1, + STATE(88), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - STATE(12), 2, + STATE(10), 2, sym_statement, aux_sym_procedural_block_repeat1, - STATE(41), 2, + STATE(76), 2, sym_void, sym_struct_definition, - ACTIONS(66), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(115), 4, + STATE(118), 4, sym_closed_expression, sym_let, sym_assign, sym_for, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2531,45 +2727,51 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [194] = 25, - ACTIONS(76), 1, + [224] = 29, + ACTIONS(82), 1, sym_identifier, - ACTIONS(79), 1, + ACTIONS(85), 1, sym_string, - ACTIONS(82), 1, + ACTIONS(88), 1, sym_default, - ACTIONS(85), 1, + ACTIONS(91), 1, anon_sym_LPAREN, - ACTIONS(88), 1, - aux_sym_integer_token1, + ACTIONS(94), 1, + aux_sym_base_ten_token1, ACTIONS(97), 1, - anon_sym_if, + aux_sym_octal_token1, ACTIONS(100), 1, - anon_sym_AT, + aux_sym_hex_token1, ACTIONS(103), 1, + aux_sym_binary_token1, + ACTIONS(112), 1, + anon_sym_if, + ACTIONS(115), 1, + anon_sym_AT, + ACTIONS(118), 1, anon_sym_LBRACK, - ACTIONS(106), 1, + ACTIONS(121), 1, anon_sym_LBRACE, - ACTIONS(109), 1, + ACTIONS(124), 1, anon_sym_RBRACE, - ACTIONS(111), 1, + ACTIONS(126), 1, anon_sym_let, - ACTIONS(114), 1, + ACTIONS(129), 1, anon_sym_for, STATE(9), 1, sym_path, - STATE(13), 1, + STATE(14), 1, sym_number, - STATE(40), 1, + STATE(62), 1, sym__float, - STATE(45), 1, + STATE(88), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(91), 2, + ACTIONS(106), 2, sym_true, sym_false, STATE(8), 2, @@ -2578,19 +2780,24 @@ static const uint16_t ts_small_parse_table[] = { STATE(12), 2, sym_statement, aux_sym_procedural_block_repeat1, - STATE(41), 2, + STATE(76), 2, sym_void, sym_struct_definition, - ACTIONS(94), 3, + ACTIONS(109), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(115), 4, + STATE(118), 4, sym_closed_expression, sym_let, sym_assign, sym_for, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2603,107 +2810,63 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [291] = 4, - ACTIONS(121), 1, - anon_sym_DOT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(119), 15, - sym_identifier, - sym_default, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(117), 27, - ts_builtin_sym_end, + [336] = 30, + ACTIONS(7), 1, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, - aux_sym_integer_token1, - sym_unit_quote, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_AT, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [345] = 26, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_integer_token1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(123), 1, + ACTIONS(132), 1, sym_identifier, - ACTIONS(125), 1, + ACTIONS(134), 1, anon_sym_RPAREN, - ACTIONS(127), 1, + ACTIONS(136), 1, sym_varadic_dots, - STATE(13), 1, + STATE(14), 1, sym_number, STATE(90), 1, sym__float, STATE(110), 1, sym_expression, - STATE(126), 1, + STATE(125), 1, aux_sym_struct_definition_repeat1, STATE(134), 1, aux_sym_dictionary_construction_repeat1, STATE(139), 1, - sym_struct_member, - STATE(141), 1, sym_dictionary_member_assignment, - STATE(142), 1, + STATE(152), 1, + sym_struct_member, + STATE(153), 1, sym_integer, - STATE(158), 1, + STATE(174), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(17), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -2711,7 +2874,12 @@ static const uint16_t ts_small_parse_table[] = { sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2724,13 +2892,16 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [442] = 3, + [448] = 4, + ACTIONS(142), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(131), 16, + ACTIONS(140), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -2742,15 +2913,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - anon_sym_else, anon_sym_let, anon_sym_for, - ACTIONS(129), 26, + ACTIONS(138), 29, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2772,13 +2945,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [493] = 3, + [505] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(135), 16, + ACTIONS(146), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -2790,15 +2964,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - anon_sym_else, anon_sym_let, anon_sym_for, - ACTIONS(133), 26, + ACTIONS(144), 29, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2820,15 +2996,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [544] = 4, - ACTIONS(141), 1, - anon_sym_else, + [559] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(139), 15, + ACTIONS(150), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -2842,12 +3017,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(137), 26, + ACTIONS(148), 29, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2869,13 +3047,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [597] = 3, + [613] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(145), 15, + ACTIONS(154), 17, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -2887,15 +3066,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_else, anon_sym_let, anon_sym_for, - ACTIONS(143), 27, + ACTIONS(152), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, - sym_unit_quote, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2917,13 +3098,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [648] = 3, + [667] = 4, + ACTIONS(160), 1, + anon_sym_else, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(149), 15, + ACTIONS(158), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -2937,13 +3121,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(147), 27, + ACTIONS(156), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, - sym_unit_quote, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2965,13 +3150,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [699] = 3, + [723] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(153), 15, + ACTIONS(164), 17, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -2983,14 +3169,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_else, anon_sym_let, anon_sym_for, - ACTIONS(151), 26, + ACTIONS(162), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3012,13 +3201,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [749] = 3, + [777] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 15, + ACTIONS(168), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3032,12 +3222,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(155), 26, + ACTIONS(166), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3059,13 +3251,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [799] = 3, + [830] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(161), 15, + ACTIONS(170), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(150), 17, sym_identifier, sym_default, + aux_sym_base_ten_token1, + anon_sym_DOT, sym_true, sym_false, anon_sym_BANG, @@ -3079,12 +3276,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(159), 26, - ts_builtin_sym_end, + ACTIONS(148), 25, sym_string, anon_sym_LPAREN, - anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3101,18 +3299,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_AT, anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [849] = 3, + [885] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(165), 15, + ACTIONS(174), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3126,12 +3323,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(163), 26, + ACTIONS(172), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3153,13 +3352,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [899] = 3, + [938] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(169), 15, + ACTIONS(178), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3173,12 +3373,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(167), 26, + ACTIONS(176), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3200,13 +3402,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [949] = 3, + [991] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(173), 15, + ACTIONS(182), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3220,12 +3423,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(171), 26, + ACTIONS(180), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3247,13 +3452,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [999] = 3, + [1044] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(177), 15, + ACTIONS(62), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3267,12 +3473,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(175), 26, + ACTIONS(64), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3294,13 +3502,86 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1049] = 3, + [1097] = 25, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_AT, + ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, + anon_sym_LBRACE, + ACTIONS(184), 1, + anon_sym_RBRACK, + STATE(14), 1, + sym_number, + STATE(34), 1, + aux_sym_list_repeat1, + STATE(90), 1, + sym__float, + STATE(108), 1, + sym_expression, + STATE(153), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(91), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [1194] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(181), 15, + ACTIONS(188), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3314,12 +3595,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(179), 26, + ACTIONS(186), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3341,13 +3624,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1099] = 3, + [1247] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(185), 15, + ACTIONS(192), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3361,12 +3645,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(183), 26, + ACTIONS(190), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3388,13 +3674,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1149] = 3, + [1300] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 15, + ACTIONS(196), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3408,12 +3695,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(187), 26, + ACTIONS(194), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3435,13 +3724,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1199] = 3, + [1353] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(56), 15, + ACTIONS(200), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3455,12 +3745,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(58), 26, + ACTIONS(198), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3482,13 +3774,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1249] = 3, + [1406] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(193), 15, + ACTIONS(204), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3502,12 +3795,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(191), 26, + ACTIONS(202), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3529,13 +3824,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1299] = 3, + [1459] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(197), 15, + ACTIONS(208), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3549,12 +3845,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(195), 26, + ACTIONS(206), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3576,60 +3874,158 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1349] = 3, + [1512] = 25, + ACTIONS(210), 1, + sym_identifier, + ACTIONS(213), 1, + sym_string, + ACTIONS(216), 1, + sym_default, + ACTIONS(219), 1, + anon_sym_LPAREN, + ACTIONS(222), 1, + aux_sym_base_ten_token1, + ACTIONS(225), 1, + aux_sym_octal_token1, + ACTIONS(228), 1, + aux_sym_hex_token1, + ACTIONS(231), 1, + aux_sym_binary_token1, + ACTIONS(240), 1, + anon_sym_if, + ACTIONS(243), 1, + anon_sym_AT, + ACTIONS(246), 1, + anon_sym_LBRACK, + ACTIONS(249), 1, + anon_sym_RBRACK, + ACTIONS(251), 1, + anon_sym_LBRACE, + STATE(14), 1, + sym_number, + STATE(33), 1, + aux_sym_list_repeat1, + STATE(90), 1, + sym__float, + STATE(111), 1, + sym_expression, + STATE(153), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(201), 15, - sym_identifier, - sym_default, + ACTIONS(234), 2, sym_true, sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(237), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(199), 26, - ts_builtin_sym_end, + STATE(91), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [1609] = 25, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - aux_sym_integer_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_AT, + ACTIONS(29), 1, anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, + ACTIONS(31), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1399] = 3, + ACTIONS(254), 1, + anon_sym_RBRACK, + STATE(14), 1, + sym_number, + STATE(33), 1, + aux_sym_list_repeat1, + STATE(90), 1, + sym__float, + STATE(104), 1, + sym_expression, + STATE(153), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(91), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [1706] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(205), 15, + ACTIONS(258), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3643,12 +4039,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(203), 26, + ACTIONS(256), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3670,13 +4068,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1449] = 3, + [1759] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(209), 15, + ACTIONS(262), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3690,12 +4089,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(207), 26, + ACTIONS(260), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3717,13 +4118,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1499] = 3, + [1812] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(213), 15, + ACTIONS(266), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3737,12 +4139,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(211), 26, + ACTIONS(264), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3764,13 +4168,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1549] = 3, + [1865] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(217), 15, + ACTIONS(270), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3784,12 +4189,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(215), 26, + ACTIONS(268), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3811,17 +4218,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1599] = 4, + [1918] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(145), 16, + ACTIONS(274), 16, sym_identifier, sym_default, - anon_sym_DOT, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3835,11 +4239,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(143), 23, + ACTIONS(272), 28, + ts_builtin_sym_end, sym_string, anon_sym_LPAREN, - aux_sym_integer_token1, - sym_unit_quote, + anon_sym_RPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3856,16 +4263,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_AT, anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1651] = 3, + [1971] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(223), 15, + ACTIONS(278), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3879,12 +4289,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(221), 26, + ACTIONS(276), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, anon_sym_RPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3906,17 +4318,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1701] = 5, - ACTIONS(229), 1, - sym_unit_quote, - STATE(22), 1, - sym__unit, + [2024] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(225), 15, + ACTIONS(282), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3930,10 +4339,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(227), 22, + ACTIONS(280), 28, + ts_builtin_sym_end, sym_string, anon_sym_LPAREN, - aux_sym_integer_token1, + anon_sym_RPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3950,18 +4363,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_AT, anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1753] = 4, - STATE(168), 1, - sym_closure_captured_variables, + [2077] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(56), 15, + ACTIONS(286), 16, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, @@ -3975,10 +4389,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(58), 22, + ACTIONS(284), 28, + ts_builtin_sym_end, sym_string, anon_sym_LPAREN, - aux_sym_integer_token1, + anon_sym_RPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3995,10 +4413,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_AT, anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1802] = 21, + [2130] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4008,37 +4428,39 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_integer_token1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(231), 1, - anon_sym_RBRACK, - STATE(13), 1, + STATE(14), 1, sym_number, - STATE(43), 1, - aux_sym_list_repeat1, + STATE(36), 1, + sym_expression, STATE(90), 1, sym__float, - STATE(109), 1, - sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(17), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4046,7 +4468,12 @@ static const uint16_t ts_small_parse_table[] = { sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4059,7 +4486,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [1884] = 21, + [2221] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4069,37 +4496,39 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_integer_token1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(233), 1, - anon_sym_RBRACK, - STATE(13), 1, + STATE(14), 1, sym_number, - STATE(44), 1, - aux_sym_list_repeat1, STATE(90), 1, sym__float, - STATE(107), 1, + STATE(98), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(17), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4107,7 +4536,12 @@ static const uint16_t ts_small_parse_table[] = { sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4120,47 +4554,49 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [1966] = 21, - ACTIONS(235), 1, + [2312] = 23, + ACTIONS(5), 1, sym_identifier, - ACTIONS(238), 1, + ACTIONS(7), 1, sym_string, - ACTIONS(241), 1, + ACTIONS(9), 1, sym_default, - ACTIONS(244), 1, + ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(247), 1, - aux_sym_integer_token1, - ACTIONS(256), 1, - anon_sym_if, - ACTIONS(259), 1, + ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(262), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(265), 1, - anon_sym_RBRACK, - ACTIONS(267), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - STATE(13), 1, + STATE(14), 1, sym_number, - STATE(44), 1, - aux_sym_list_repeat1, STATE(90), 1, sym__float, - STATE(113), 1, + STATE(95), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(250), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(253), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4168,7 +4604,12 @@ static const uint16_t ts_small_parse_table[] = { sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4181,619 +4622,551 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2048] = 18, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(284), 1, - anon_sym_AMP, - ACTIONS(286), 1, - anon_sym_PIPE, - ACTIONS(288), 1, - anon_sym_CARET, - ACTIONS(294), 1, - anon_sym_AMP_AMP, - ACTIONS(296), 1, - anon_sym_PIPE_PIPE, - ACTIONS(298), 1, - anon_sym_DOT_DOT, - ACTIONS(300), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(302), 1, - anon_sym_SEMI, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(274), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(282), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(290), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(292), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(272), 7, + [2403] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, - aux_sym_integer_token1, + ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_AT, + ACTIONS(29), 1, anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - ACTIONS(270), 8, - sym_identifier, - sym_default, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, - anon_sym_let, - anon_sym_for, - [2124] = 6, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, + STATE(14), 1, + sym_number, + STATE(90), 1, + sym__float, + STATE(99), 1, + sym_expression, + STATE(153), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(197), 13, - sym_identifier, - sym_default, + ACTIONS(21), 2, sym_true, sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(195), 20, + STATE(91), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2494] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, - aux_sym_integer_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_AT, + ACTIONS(29), 1, anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2176] = 4, - ACTIONS(276), 1, - anon_sym_STAR_STAR, + STATE(14), 1, + sym_number, + STATE(90), 1, + sym__float, + STATE(113), 1, + sym_expression, + STATE(153), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(197), 15, - sym_identifier, - sym_default, + ACTIONS(21), 2, sym_true, sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(195), 21, + STATE(91), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2585] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, - aux_sym_integer_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_AT, + ACTIONS(29), 1, anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2224] = 7, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, + STATE(14), 1, + sym_number, + STATE(90), 1, + sym__float, + STATE(100), 1, + sym_expression, + STATE(153), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(197), 13, - sym_identifier, - sym_default, + ACTIONS(21), 2, sym_true, sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(195), 18, + STATE(91), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2676] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, - aux_sym_integer_token1, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_AT, + ACTIONS(29), 1, anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2278] = 8, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, + STATE(14), 1, + sym_number, + STATE(90), 1, + sym__float, + STATE(101), 1, + sym_expression, + STATE(153), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(282), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(197), 13, - sym_identifier, - sym_default, + ACTIONS(21), 2, sym_true, sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(195), 16, + STATE(91), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2767] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, - aux_sym_integer_token1, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_AT, + ACTIONS(29), 1, anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2334] = 10, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(284), 1, - anon_sym_AMP, - ACTIONS(288), 1, - anon_sym_CARET, + STATE(14), 1, + sym_number, + STATE(90), 1, + sym__float, + STATE(103), 1, + sym_expression, + STATE(153), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(282), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(197), 12, - sym_identifier, - sym_default, + ACTIONS(21), 2, sym_true, sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(195), 15, + STATE(91), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2858] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, - aux_sym_integer_token1, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_AT, + ACTIONS(29), 1, anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2394] = 9, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(284), 1, - anon_sym_AMP, + STATE(14), 1, + sym_number, + STATE(90), 1, + sym__float, + STATE(106), 1, + sym_expression, + STATE(153), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 2, + ACTIONS(21), 2, + sym_true, + sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(282), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(197), 12, + anon_sym_BANG, + STATE(91), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [2949] = 23, + ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_AT, + ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, + anon_sym_LBRACE, + STATE(14), 1, + sym_number, + STATE(90), 1, + sym__float, + STATE(109), 1, + sym_expression, + STATE(153), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, sym_true, sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(195), 16, + STATE(91), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3040] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, - aux_sym_integer_token1, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_AT, + ACTIONS(29), 1, anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2452] = 11, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(284), 1, - anon_sym_AMP, - ACTIONS(286), 1, - anon_sym_PIPE, - ACTIONS(288), 1, - anon_sym_CARET, + STATE(14), 1, + sym_number, + STATE(90), 1, + sym__float, + STATE(93), 1, + sym_expression, + STATE(153), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 2, + ACTIONS(21), 2, + sym_true, + sym_false, + STATE(8), 2, + sym_argument_path, + sym_local_path, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(282), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(197), 11, - sym_identifier, - sym_default, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(195), 15, - sym_string, - anon_sym_LPAREN, - aux_sym_integer_token1, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_AT, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2514] = 13, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(284), 1, - anon_sym_AMP, - ACTIONS(286), 1, - anon_sym_PIPE, - ACTIONS(288), 1, - anon_sym_CARET, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(274), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(282), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(290), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(292), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(197), 9, - sym_identifier, - sym_default, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(195), 11, - sym_string, - anon_sym_LPAREN, - aux_sym_integer_token1, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_AT, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2580] = 14, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(284), 1, - anon_sym_AMP, - ACTIONS(286), 1, - anon_sym_PIPE, - ACTIONS(288), 1, - anon_sym_CARET, - ACTIONS(294), 1, - anon_sym_AMP_AMP, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(274), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(282), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(290), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(292), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(197), 9, - sym_identifier, - sym_default, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(195), 10, - sym_string, - anon_sym_LPAREN, - aux_sym_integer_token1, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_AT, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2648] = 15, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(284), 1, - anon_sym_AMP, - ACTIONS(286), 1, - anon_sym_PIPE, - ACTIONS(288), 1, - anon_sym_CARET, - ACTIONS(294), 1, - anon_sym_AMP_AMP, - ACTIONS(296), 1, - anon_sym_PIPE_PIPE, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(274), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(282), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(290), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(292), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(195), 9, - sym_string, - anon_sym_LPAREN, - aux_sym_integer_token1, - anon_sym_DOT_DOT_EQ, - anon_sym_AT, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - ACTIONS(197), 9, - sym_identifier, - sym_default, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - [2718] = 17, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(284), 1, - anon_sym_AMP, - ACTIONS(286), 1, - anon_sym_PIPE, - ACTIONS(288), 1, - anon_sym_CARET, - ACTIONS(294), 1, - anon_sym_AMP_AMP, - ACTIONS(296), 1, - anon_sym_PIPE_PIPE, - ACTIONS(298), 1, - anon_sym_DOT_DOT, - ACTIONS(300), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(274), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(282), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(290), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(292), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(304), 8, - sym_identifier, - sym_default, - sym_true, - sym_false, anon_sym_BANG, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(306), 8, - sym_string, - anon_sym_LPAREN, - aux_sym_integer_token1, - anon_sym_AT, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2792] = 19, + STATE(91), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3131] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4803,33 +5176,39 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_integer_token1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - STATE(13), 1, + STATE(14), 1, sym_number, STATE(90), 1, sym__float, - STATE(106), 1, + STATE(105), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(17), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4837,7 +5216,12 @@ static const uint16_t ts_small_parse_table[] = { sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4850,7 +5234,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2868] = 19, + [3222] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4860,33 +5244,39 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_integer_token1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - STATE(13), 1, + STATE(14), 1, sym_number, STATE(90), 1, sym__float, - STATE(105), 1, + STATE(114), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(17), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4894,7 +5284,12 @@ static const uint16_t ts_small_parse_table[] = { sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4907,7 +5302,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2944] = 19, + [3313] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4917,33 +5312,39 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_integer_token1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - STATE(13), 1, + STATE(14), 1, sym_number, STATE(90), 1, sym__float, - STATE(112), 1, + STATE(107), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(17), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4951,7 +5352,12 @@ static const uint16_t ts_small_parse_table[] = { sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4964,7 +5370,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3020] = 19, + [3404] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4974,33 +5380,39 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_integer_token1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - STATE(13), 1, + STATE(14), 1, sym_number, - STATE(23), 1, - sym_expression, STATE(90), 1, sym__float, - STATE(142), 1, + STATE(102), 1, + sym_expression, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(17), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -5008,7 +5420,12 @@ static const uint16_t ts_small_parse_table[] = { sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5021,7 +5438,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3096] = 19, + [3495] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5031,33 +5448,39 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_integer_token1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - STATE(13), 1, + STATE(14), 1, sym_number, + STATE(42), 1, + sym_expression, STATE(90), 1, sym__float, - STATE(108), 1, - sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(17), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -5065,7 +5488,12 @@ static const uint16_t ts_small_parse_table[] = { sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5078,7 +5506,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3172] = 19, + [3586] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5088,33 +5516,39 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_integer_token1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - STATE(13), 1, + STATE(14), 1, sym_number, STATE(90), 1, sym__float, - STATE(94), 1, + STATE(97), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(17), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -5122,7 +5556,12 @@ static const uint16_t ts_small_parse_table[] = { sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5135,7 +5574,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3248] = 19, + [3677] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5145,33 +5584,39 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_integer_token1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - STATE(13), 1, + STATE(14), 1, sym_number, STATE(90), 1, sym__float, - STATE(114), 1, + STATE(94), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(17), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -5179,7 +5624,12 @@ static const uint16_t ts_small_parse_table[] = { sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5192,7 +5642,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3324] = 19, + [3768] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5201,42 +5651,53 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_integer_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - STATE(13), 1, + ACTIONS(70), 1, + aux_sym_base_ten_token1, + STATE(14), 1, sym_number, - STATE(90), 1, - sym__float, - STATE(104), 1, + STATE(42), 1, sym_expression, - STATE(142), 1, + STATE(62), 1, + sym__float, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(17), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(76), 3, sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5249,64 +5710,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3400] = 19, - ACTIONS(5), 1, + [3859] = 5, + ACTIONS(292), 1, + sym_unit_quote, + STATE(24), 1, + sym__unit, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(288), 16, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_integer_token1, - ACTIONS(19), 1, - anon_sym_if, - ACTIONS(21), 1, - anon_sym_AT, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(25), 1, - anon_sym_LBRACE, - STATE(13), 1, - sym_number, - STATE(90), 1, - sym__float, - STATE(93), 1, - sym_expression, - STATE(142), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(15), 2, + aux_sym_base_ten_token1, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(17), 3, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(290), 24, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(91), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(30), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [3476] = 19, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [3914] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5315,42 +5769,53 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, - STATE(13), 1, + ACTIONS(70), 1, + aux_sym_base_ten_token1, + STATE(14), 1, sym_number, - STATE(23), 1, - sym_expression, - STATE(40), 1, + STATE(62), 1, sym__float, - STATE(142), 1, + STATE(78), 1, + sym_expression, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(66), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(76), 3, sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5363,7 +5828,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3552] = 19, + [4005] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5372,42 +5837,53 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, - STATE(13), 1, + ACTIONS(70), 1, + aux_sym_base_ten_token1, + STATE(14), 1, sym_number, - STATE(40), 1, - sym__float, - STATE(46), 1, + STATE(36), 1, sym_expression, - STATE(142), 1, + STATE(62), 1, + sym__float, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(66), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(76), 3, sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5420,7 +5896,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3628] = 19, + [4096] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5429,42 +5905,53 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, - STATE(13), 1, + ACTIONS(70), 1, + aux_sym_base_ten_token1, + STATE(14), 1, sym_number, - STATE(32), 1, - sym_expression, - STATE(40), 1, + STATE(62), 1, sym__float, - STATE(142), 1, + STATE(79), 1, + sym_expression, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(66), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(76), 3, sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5477,7 +5964,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3704] = 19, + [4187] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5486,42 +5973,53 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, - STATE(13), 1, + ACTIONS(70), 1, + aux_sym_base_ten_token1, + STATE(14), 1, sym_number, - STATE(40), 1, + STATE(62), 1, sym__float, - STATE(47), 1, + STATE(80), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(66), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(76), 3, sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5534,7 +6032,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3780] = 19, + [4278] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5543,42 +6041,53 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, - STATE(13), 1, + ACTIONS(70), 1, + aux_sym_base_ten_token1, + STATE(14), 1, sym_number, - STATE(40), 1, + STATE(62), 1, sym__float, - STATE(48), 1, + STATE(81), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(66), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(76), 3, sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5591,7 +6100,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3856] = 19, + [4369] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5600,42 +6109,53 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, - STATE(13), 1, + ACTIONS(70), 1, + aux_sym_base_ten_token1, + STATE(14), 1, sym_number, - STATE(40), 1, + STATE(62), 1, sym__float, - STATE(49), 1, + STATE(82), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(66), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(76), 3, sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5648,7 +6168,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3932] = 19, + [4460] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5657,42 +6177,53 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, - STATE(13), 1, + ACTIONS(70), 1, + aux_sym_base_ten_token1, + STATE(14), 1, sym_number, - STATE(40), 1, + STATE(62), 1, sym__float, - STATE(50), 1, + STATE(77), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(66), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(76), 3, sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5705,7 +6236,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4008] = 19, + [4551] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5714,42 +6245,53 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, - STATE(13), 1, + ACTIONS(70), 1, + aux_sym_base_ten_token1, + STATE(14), 1, sym_number, - STATE(40), 1, + STATE(62), 1, sym__float, - STATE(51), 1, + STATE(84), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(66), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(76), 3, sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5762,7 +6304,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4084] = 19, + [4642] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5771,42 +6313,53 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, - STATE(13), 1, + ACTIONS(70), 1, + aux_sym_base_ten_token1, + STATE(14), 1, sym_number, - STATE(40), 1, + STATE(62), 1, sym__float, - STATE(52), 1, + STATE(85), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(66), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(76), 3, sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5819,7 +6372,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4160] = 19, + [4733] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5828,42 +6381,53 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, - STATE(13), 1, + ACTIONS(70), 1, + aux_sym_base_ten_token1, + STATE(14), 1, sym_number, - STATE(40), 1, + STATE(62), 1, sym__float, - STATE(53), 1, + STATE(86), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(66), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(76), 3, sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5876,7 +6440,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4236] = 19, + [4824] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5885,42 +6449,53 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, - STATE(13), 1, + ACTIONS(70), 1, + aux_sym_base_ten_token1, + STATE(14), 1, sym_number, - STATE(40), 1, + STATE(62), 1, sym__float, - STATE(54), 1, + STATE(87), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(66), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(76), 3, sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5933,7 +6508,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4312] = 19, + [4915] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5942,42 +6517,53 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, - STATE(13), 1, + ACTIONS(70), 1, + aux_sym_base_ten_token1, + STATE(14), 1, sym_number, - STATE(40), 1, + STATE(62), 1, sym__float, - STATE(55), 1, + STATE(83), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(66), 3, + ACTIONS(72), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(76), 3, sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5990,7 +6576,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4388] = 19, + [5006] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6000,33 +6586,39 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(11), 1, anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_integer_token1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(21), 1, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(23), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(25), 1, + ACTIONS(31), 1, anon_sym_LBRACE, - STATE(13), 1, + STATE(14), 1, sym_number, STATE(90), 1, sym__float, - STATE(95), 1, + STATE(96), 1, sym_expression, - STATE(142), 1, + STATE(153), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, sym_argument_path, sym_local_path, - ACTIONS(17), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -6034,7 +6626,12 @@ static const uint16_t ts_small_parse_table[] = { sym_void, sym_path, sym_struct_definition, - STATE(30), 12, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(25), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6047,584 +6644,710 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4464] = 19, - ACTIONS(5), 1, + [5097] = 4, + STATE(175), 1, + sym_closure_captured_variables, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(62), 16, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_integer_token1, - ACTIONS(19), 1, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, anon_sym_if, - ACTIONS(21), 1, + anon_sym_let, + anon_sym_for, + ACTIONS(64), 24, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_AT, - ACTIONS(23), 1, anon_sym_LBRACK, - ACTIONS(25), 1, anon_sym_LBRACE, - STATE(13), 1, - sym_number, - STATE(32), 1, - sym_expression, - STATE(90), 1, - sym__float, - STATE(142), 1, - sym_integer, + anon_sym_RBRACE, + anon_sym_SEMI, + [5149] = 9, + ACTIONS(296), 1, + anon_sym_STAR_STAR, + ACTIONS(300), 1, + anon_sym_SLASH_SLASH, + ACTIONS(304), 1, + anon_sym_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, - sym_true, - sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(17), 3, + ACTIONS(294), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(91), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(30), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [4540] = 19, - ACTIONS(5), 1, + ACTIONS(298), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(302), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(262), 13, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_integer_token1, - ACTIONS(19), 1, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, anon_sym_if, - ACTIONS(21), 1, + anon_sym_let, + anon_sym_for, + ACTIONS(260), 18, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_AT, - ACTIONS(23), 1, anon_sym_LBRACK, - ACTIONS(25), 1, anon_sym_LBRACE, - STATE(13), 1, - sym_number, - STATE(90), 1, - sym__float, - STATE(96), 1, - sym_expression, - STATE(142), 1, - sym_integer, + anon_sym_RBRACE, + anon_sym_SEMI, + [5210] = 6, + ACTIONS(296), 1, + anon_sym_STAR_STAR, + ACTIONS(300), 1, + anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(298), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(262), 14, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(17), 3, - anon_sym_DASH, - anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(30), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [4616] = 19, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(260), 22, sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_integer_token1, - ACTIONS(19), 1, - anon_sym_if, - ACTIONS(21), 1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_AT, - ACTIONS(23), 1, anon_sym_LBRACK, - ACTIONS(25), 1, anon_sym_LBRACE, - STATE(13), 1, - sym_number, - STATE(90), 1, - sym__float, - STATE(97), 1, - sym_expression, - STATE(142), 1, - sym_integer, + anon_sym_RBRACE, + anon_sym_SEMI, + [5265] = 4, + ACTIONS(296), 1, + anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(262), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(17), 3, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(260), 23, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(91), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(30), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [4692] = 19, - ACTIONS(5), 1, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [5316] = 7, + ACTIONS(296), 1, + anon_sym_STAR_STAR, + ACTIONS(300), 1, + anon_sym_SLASH_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(294), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(262), 14, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_integer_token1, - ACTIONS(19), 1, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, anon_sym_if, - ACTIONS(21), 1, + anon_sym_let, + anon_sym_for, + ACTIONS(260), 20, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_AT, - ACTIONS(23), 1, anon_sym_LBRACK, - ACTIONS(25), 1, anon_sym_LBRACE, - STATE(13), 1, - sym_number, - STATE(90), 1, - sym__float, - STATE(98), 1, - sym_expression, - STATE(142), 1, - sym_integer, + anon_sym_RBRACE, + anon_sym_SEMI, + [5373] = 8, + ACTIONS(296), 1, + anon_sym_STAR_STAR, + ACTIONS(300), 1, + anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, + ACTIONS(294), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(302), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(262), 14, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(17), 3, + anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(260), 18, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [5432] = 10, + ACTIONS(296), 1, + anon_sym_STAR_STAR, + ACTIONS(300), 1, + anon_sym_SLASH_SLASH, + ACTIONS(304), 1, + anon_sym_AMP, + ACTIONS(306), 1, + anon_sym_CARET, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(294), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(302), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(262), 13, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, anon_sym_BANG, - STATE(91), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(30), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [4768] = 19, - ACTIONS(5), 1, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(260), 17, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [5495] = 17, + ACTIONS(296), 1, + anon_sym_STAR_STAR, + ACTIONS(300), 1, + anon_sym_SLASH_SLASH, + ACTIONS(304), 1, + anon_sym_AMP, + ACTIONS(306), 1, + anon_sym_CARET, + ACTIONS(312), 1, + anon_sym_PIPE, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(294), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(302), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(308), 9, sym_identifier, - ACTIONS(7), 1, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(310), 10, sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_integer_token1, - ACTIONS(19), 1, - anon_sym_if, - ACTIONS(21), 1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_AT, - ACTIONS(23), 1, anon_sym_LBRACK, - ACTIONS(25), 1, anon_sym_LBRACE, - STATE(13), 1, - sym_number, - STATE(90), 1, - sym__float, - STATE(99), 1, - sym_expression, - STATE(142), 1, - sym_integer, + anon_sym_RBRACE, + anon_sym_SEMI, + [5572] = 11, + ACTIONS(296), 1, + anon_sym_STAR_STAR, + ACTIONS(300), 1, + anon_sym_SLASH_SLASH, + ACTIONS(304), 1, + anon_sym_AMP, + ACTIONS(306), 1, + anon_sym_CARET, + ACTIONS(312), 1, + anon_sym_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, - sym_true, - sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(17), 3, + ACTIONS(294), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(91), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(30), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [4844] = 19, - ACTIONS(5), 1, + ACTIONS(298), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(302), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(262), 12, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_integer_token1, - ACTIONS(19), 1, - anon_sym_if, - ACTIONS(21), 1, - anon_sym_AT, - ACTIONS(23), 1, - anon_sym_LBRACK, - ACTIONS(25), 1, - anon_sym_LBRACE, - STATE(13), 1, - sym_number, - STATE(90), 1, - sym__float, - STATE(100), 1, - sym_expression, - STATE(142), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(15), 2, + aux_sym_base_ten_token1, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(17), 3, - anon_sym_DASH, - anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(30), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [4920] = 19, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(260), 17, sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_integer_token1, - ACTIONS(19), 1, - anon_sym_if, - ACTIONS(21), 1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_AT, - ACTIONS(23), 1, anon_sym_LBRACK, - ACTIONS(25), 1, anon_sym_LBRACE, - STATE(13), 1, - sym_number, - STATE(90), 1, - sym__float, - STATE(101), 1, - sym_expression, - STATE(142), 1, - sym_integer, + anon_sym_RBRACE, + anon_sym_SEMI, + [5637] = 13, + ACTIONS(296), 1, + anon_sym_STAR_STAR, + ACTIONS(300), 1, + anon_sym_SLASH_SLASH, + ACTIONS(304), 1, + anon_sym_AMP, + ACTIONS(306), 1, + anon_sym_CARET, + ACTIONS(312), 1, + anon_sym_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, - sym_true, - sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(17), 3, + ACTIONS(294), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(91), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(30), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [4996] = 19, - ACTIONS(5), 1, + ACTIONS(298), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(302), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(262), 10, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(19), 1, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, anon_sym_if, - ACTIONS(21), 1, + anon_sym_let, + anon_sym_for, + ACTIONS(260), 13, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_AT, - ACTIONS(23), 1, anon_sym_LBRACK, - ACTIONS(25), 1, anon_sym_LBRACE, - ACTIONS(64), 1, - aux_sym_integer_token1, - STATE(13), 1, - sym_number, - STATE(40), 1, - sym__float, - STATE(56), 1, - sym_expression, - STATE(142), 1, - sym_integer, + anon_sym_RBRACE, + anon_sym_SEMI, + [5706] = 14, + ACTIONS(296), 1, + anon_sym_STAR_STAR, + ACTIONS(300), 1, + anon_sym_SLASH_SLASH, + ACTIONS(304), 1, + anon_sym_AMP, + ACTIONS(306), 1, + anon_sym_CARET, + ACTIONS(312), 1, + anon_sym_PIPE, + ACTIONS(318), 1, + anon_sym_AMP_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, - sym_true, - sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(66), 3, + ACTIONS(294), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(41), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(30), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [5072] = 19, - ACTIONS(5), 1, + ACTIONS(298), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(302), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(262), 10, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_integer_token1, - ACTIONS(19), 1, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, anon_sym_if, - ACTIONS(21), 1, + anon_sym_let, + anon_sym_for, + ACTIONS(260), 12, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_AT, - ACTIONS(23), 1, anon_sym_LBRACK, - ACTIONS(25), 1, - anon_sym_LBRACE, - STATE(13), 1, - sym_number, - STATE(90), 1, - sym__float, - STATE(102), 1, - sym_expression, - STATE(142), 1, - sym_integer, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [5777] = 15, + ACTIONS(296), 1, + anon_sym_STAR_STAR, + ACTIONS(300), 1, + anon_sym_SLASH_SLASH, + ACTIONS(304), 1, + anon_sym_AMP, + ACTIONS(306), 1, + anon_sym_CARET, + ACTIONS(312), 1, + anon_sym_PIPE, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, - sym_true, - sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(17), 3, + ACTIONS(294), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(91), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(30), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [5148] = 19, - ACTIONS(5), 1, + ACTIONS(298), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(302), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(262), 10, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_integer_token1, - ACTIONS(19), 1, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, anon_sym_if, - ACTIONS(21), 1, + anon_sym_let, + anon_sym_for, + ACTIONS(260), 11, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DOT_DOT_EQ, anon_sym_AT, - ACTIONS(23), 1, anon_sym_LBRACK, - ACTIONS(25), 1, anon_sym_LBRACE, - STATE(13), 1, - sym_number, - STATE(90), 1, - sym__float, - STATE(103), 1, - sym_expression, - STATE(142), 1, - sym_integer, + anon_sym_RBRACE, + anon_sym_SEMI, + [5850] = 18, + ACTIONS(296), 1, + anon_sym_STAR_STAR, + ACTIONS(300), 1, + anon_sym_SLASH_SLASH, + ACTIONS(304), 1, + anon_sym_AMP, + ACTIONS(306), 1, + anon_sym_CARET, + ACTIONS(312), 1, + anon_sym_PIPE, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(330), 1, + anon_sym_SEMI, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(15), 2, - sym_true, - sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(17), 3, + ACTIONS(294), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(298), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(302), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(326), 9, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, anon_sym_BANG, - STATE(91), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(30), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [5224] = 4, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(328), 9, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_AT, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + [5929] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(170), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(145), 9, + ACTIONS(150), 9, sym_identifier, anon_sym_DOT, anon_sym_STAR, @@ -6634,7 +7357,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(143), 21, + ACTIONS(148), 21, ts_builtin_sym_end, anon_sym_RPAREN, sym_unit_quote, @@ -6656,16 +7379,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5267] = 5, - STATE(22), 1, + [5972] = 5, + STATE(24), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(229), 2, + ACTIONS(292), 2, sym_identifier, sym_unit_quote, - ACTIONS(225), 7, + ACTIONS(288), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -6673,7 +7396,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(227), 20, + ACTIONS(290), 20, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_DASH, @@ -6694,15 +7417,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5310] = 5, - ACTIONS(308), 1, + [6015] = 5, + ACTIONS(332), 1, anon_sym_LBRACK, - STATE(154), 1, + STATE(161), 1, sym_closure_captured_variables, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(56), 7, + ACTIONS(62), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -6710,7 +7433,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(58), 20, + ACTIONS(64), 20, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_DASH, @@ -6731,16 +7454,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5352] = 8, - ACTIONS(31), 1, + [6057] = 8, + ACTIONS(37), 1, anon_sym_DOT, - ACTIONS(310), 1, + ACTIONS(334), 1, anon_sym_COLON, - ACTIONS(312), 1, + ACTIONS(336), 1, anon_sym_EQ, - STATE(2), 1, + STATE(5), 1, aux_sym_argument_path_repeat1, - STATE(130), 1, + STATE(135), 1, sym__declaration_type, ACTIONS(3), 2, sym_comment, @@ -6770,120 +7493,106 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - [5399] = 16, - ACTIONS(316), 1, + [6104] = 6, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, - anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, - anon_sym_CARET, - ACTIONS(334), 1, - anon_sym_AMP_AMP, - ACTIONS(336), 1, - anon_sym_PIPE_PIPE, - ACTIONS(338), 1, - anon_sym_DOT_DOT, - ACTIONS(340), 1, - anon_sym_DOT_DOT_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(262), 5, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 4, + anon_sym_DOT_DOT, + ACTIONS(260), 18, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(306), 6, - ts_builtin_sym_end, - anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5461] = 14, - ACTIONS(197), 1, - anon_sym_DOT_DOT, - ACTIONS(316), 1, + [6146] = 7, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, - anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, - anon_sym_CARET, - ACTIONS(334), 1, - anon_sym_AMP_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(262), 5, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 4, + anon_sym_DOT_DOT, + ACTIONS(260), 16, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(195), 8, - ts_builtin_sym_end, - anon_sym_RPAREN, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5519] = 6, - ACTIONS(316), 1, + [6190] = 9, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, + ACTIONS(348), 1, + anon_sym_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(197), 5, - anon_sym_AMP, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(262), 4, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(195), 18, + ACTIONS(260), 14, ts_builtin_sym_end, anon_sym_RPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -6896,13 +7605,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5561] = 4, - ACTIONS(316), 1, + [6238] = 4, + ACTIONS(338), 1, anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(197), 7, + ACTIONS(262), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -6910,7 +7619,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(195), 19, + ACTIONS(260), 19, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_DASH, @@ -6930,31 +7639,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5599] = 7, - ACTIONS(316), 1, + [6276] = 8, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(197), 5, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(262), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(195), 16, + ACTIONS(260), 14, ts_builtin_sym_end, anon_sym_RPAREN, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -6967,33 +7677,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5643] = 8, - ACTIONS(316), 1, + [6322] = 10, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, + ACTIONS(348), 1, + anon_sym_AMP, + ACTIONS(350), 1, + anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(197), 5, - anon_sym_AMP, + ACTIONS(262), 4, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(195), 14, + ACTIONS(260), 13, ts_builtin_sym_end, anon_sym_RPAREN, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -7005,33 +7717,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5689] = 10, - ACTIONS(316), 1, + [6372] = 11, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(328), 1, + ACTIONS(350), 1, anon_sym_CARET, + ACTIONS(352), 1, + anon_sym_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(197), 4, - anon_sym_PIPE, + ACTIONS(262), 3, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(195), 13, + ACTIONS(260), 13, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_GT_EQ, @@ -7045,38 +7758,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5739] = 9, - ACTIONS(316), 1, + [6424] = 13, + ACTIONS(262), 1, + anon_sym_DOT_DOT, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, + ACTIONS(350), 1, + anon_sym_CARET, + ACTIONS(352), 1, + anon_sym_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(197), 4, - anon_sym_PIPE, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(195), 14, - ts_builtin_sym_end, - anon_sym_RPAREN, - anon_sym_CARET, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(260), 9, + ts_builtin_sym_end, + anon_sym_RPAREN, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, @@ -7084,128 +7801,134 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5787] = 11, - ACTIONS(316), 1, + [6480] = 14, + ACTIONS(262), 1, + anon_sym_DOT_DOT, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, + ACTIONS(350), 1, anon_sym_CARET, + ACTIONS(352), 1, + anon_sym_PIPE, + ACTIONS(358), 1, + anon_sym_AMP_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(197), 3, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(195), 13, - ts_builtin_sym_end, - anon_sym_RPAREN, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(260), 8, + ts_builtin_sym_end, + anon_sym_RPAREN, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5839] = 13, - ACTIONS(197), 1, - anon_sym_DOT_DOT, - ACTIONS(316), 1, + [6538] = 16, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, + ACTIONS(350), 1, anon_sym_CARET, + ACTIONS(352), 1, + anon_sym_PIPE, + ACTIONS(358), 1, + anon_sym_AMP_AMP, + ACTIONS(360), 1, + anon_sym_PIPE_PIPE, + ACTIONS(362), 1, + anon_sym_DOT_DOT, + ACTIONS(364), 1, + anon_sym_DOT_DOT_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 4, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(195), 9, + ACTIONS(310), 6, ts_builtin_sym_end, anon_sym_RPAREN, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5895] = 15, - ACTIONS(197), 1, + [6600] = 15, + ACTIONS(262), 1, anon_sym_DOT_DOT, - ACTIONS(316), 1, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, + ACTIONS(350), 1, anon_sym_CARET, - ACTIONS(334), 1, + ACTIONS(352), 1, + anon_sym_PIPE, + ACTIONS(358), 1, anon_sym_AMP_AMP, - ACTIONS(336), 1, + ACTIONS(360), 1, anon_sym_PIPE_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 4, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(195), 7, + ACTIONS(260), 7, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_DOT_DOT_EQ, @@ -7213,483 +7936,486 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5955] = 17, - ACTIONS(25), 1, - anon_sym_LBRACE, - ACTIONS(316), 1, + [6660] = 17, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, + ACTIONS(350), 1, anon_sym_CARET, - ACTIONS(334), 1, + ACTIONS(352), 1, + anon_sym_PIPE, + ACTIONS(358), 1, anon_sym_AMP_AMP, - ACTIONS(336), 1, + ACTIONS(360), 1, anon_sym_PIPE_PIPE, - ACTIONS(338), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT, - ACTIONS(340), 1, + ACTIONS(364), 1, anon_sym_DOT_DOT_EQ, - STATE(119), 1, - sym_procedural_block, + ACTIONS(366), 1, + anon_sym_COMMA, + ACTIONS(368), 1, + anon_sym_RBRACK, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 4, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6015] = 16, - ACTIONS(316), 1, + [6720] = 16, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, + ACTIONS(350), 1, anon_sym_CARET, - ACTIONS(334), 1, + ACTIONS(352), 1, + anon_sym_PIPE, + ACTIONS(358), 1, anon_sym_AMP_AMP, - ACTIONS(336), 1, + ACTIONS(360), 1, anon_sym_PIPE_PIPE, - ACTIONS(338), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT, - ACTIONS(340), 1, + ACTIONS(364), 1, anon_sym_DOT_DOT_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(342), 2, + ACTIONS(370), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(332), 4, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6073] = 17, - ACTIONS(25), 1, - anon_sym_LBRACE, - ACTIONS(316), 1, + [6778] = 16, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, + ACTIONS(350), 1, anon_sym_CARET, - ACTIONS(334), 1, + ACTIONS(352), 1, + anon_sym_PIPE, + ACTIONS(358), 1, anon_sym_AMP_AMP, - ACTIONS(336), 1, + ACTIONS(360), 1, anon_sym_PIPE_PIPE, - ACTIONS(338), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT, - ACTIONS(340), 1, + ACTIONS(364), 1, anon_sym_DOT_DOT_EQ, - STATE(17), 1, - sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 4, + ACTIONS(372), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6133] = 17, - ACTIONS(316), 1, + [6836] = 17, + ACTIONS(31), 1, + anon_sym_LBRACE, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, + ACTIONS(350), 1, anon_sym_CARET, - ACTIONS(334), 1, + ACTIONS(352), 1, + anon_sym_PIPE, + ACTIONS(358), 1, anon_sym_AMP_AMP, - ACTIONS(336), 1, + ACTIONS(360), 1, anon_sym_PIPE_PIPE, - ACTIONS(338), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT, - ACTIONS(340), 1, + ACTIONS(364), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(344), 1, - anon_sym_COMMA, - ACTIONS(346), 1, - anon_sym_RBRACK, + STATE(116), 1, + sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 4, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6193] = 16, - ACTIONS(316), 1, + [6896] = 17, + ACTIONS(254), 1, + anon_sym_RBRACK, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, + ACTIONS(350), 1, anon_sym_CARET, - ACTIONS(334), 1, + ACTIONS(352), 1, + anon_sym_PIPE, + ACTIONS(358), 1, anon_sym_AMP_AMP, - ACTIONS(336), 1, + ACTIONS(360), 1, anon_sym_PIPE_PIPE, - ACTIONS(338), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT, - ACTIONS(340), 1, + ACTIONS(364), 1, anon_sym_DOT_DOT_EQ, + ACTIONS(366), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(348), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - ACTIONS(332), 4, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6251] = 17, - ACTIONS(233), 1, - anon_sym_RBRACK, - ACTIONS(316), 1, + [6956] = 17, + ACTIONS(31), 1, + anon_sym_LBRACE, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, + ACTIONS(350), 1, anon_sym_CARET, - ACTIONS(334), 1, + ACTIONS(352), 1, + anon_sym_PIPE, + ACTIONS(358), 1, anon_sym_AMP_AMP, - ACTIONS(336), 1, + ACTIONS(360), 1, anon_sym_PIPE_PIPE, - ACTIONS(338), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT, - ACTIONS(340), 1, + ACTIONS(364), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(344), 1, - anon_sym_COMMA, + STATE(18), 1, + sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 4, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6311] = 16, - ACTIONS(316), 1, + [7016] = 16, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, + ACTIONS(350), 1, anon_sym_CARET, - ACTIONS(334), 1, + ACTIONS(352), 1, + anon_sym_PIPE, + ACTIONS(358), 1, anon_sym_AMP_AMP, - ACTIONS(336), 1, + ACTIONS(360), 1, anon_sym_PIPE_PIPE, - ACTIONS(338), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT, - ACTIONS(340), 1, + ACTIONS(364), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(350), 1, + ACTIONS(374), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 4, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6368] = 16, - ACTIONS(316), 1, + [7073] = 16, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, + ACTIONS(350), 1, anon_sym_CARET, - ACTIONS(334), 1, + ACTIONS(352), 1, + anon_sym_PIPE, + ACTIONS(358), 1, anon_sym_AMP_AMP, - ACTIONS(336), 1, + ACTIONS(360), 1, anon_sym_PIPE_PIPE, - ACTIONS(338), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT, - ACTIONS(340), 1, + ACTIONS(364), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(352), 1, - ts_builtin_sym_end, + ACTIONS(366), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 4, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6425] = 16, - ACTIONS(316), 1, + [7130] = 16, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, + ACTIONS(350), 1, anon_sym_CARET, - ACTIONS(334), 1, + ACTIONS(352), 1, + anon_sym_PIPE, + ACTIONS(358), 1, anon_sym_AMP_AMP, - ACTIONS(336), 1, + ACTIONS(360), 1, anon_sym_PIPE_PIPE, - ACTIONS(338), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT, - ACTIONS(340), 1, + ACTIONS(364), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(354), 1, - anon_sym_SEMI, + ACTIONS(376), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 4, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6482] = 16, - ACTIONS(316), 1, + [7187] = 16, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(326), 1, - anon_sym_PIPE, - ACTIONS(328), 1, + ACTIONS(350), 1, anon_sym_CARET, - ACTIONS(334), 1, + ACTIONS(352), 1, + anon_sym_PIPE, + ACTIONS(358), 1, anon_sym_AMP_AMP, - ACTIONS(336), 1, + ACTIONS(360), 1, anon_sym_PIPE_PIPE, - ACTIONS(338), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT, - ACTIONS(340), 1, + ACTIONS(364), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(344), 1, - anon_sym_COMMA, + ACTIONS(378), 1, + anon_sym_SEMI, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 4, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6539] = 16, - ACTIONS(316), 1, + [7244] = 16, + ACTIONS(338), 1, anon_sym_STAR_STAR, - ACTIONS(320), 1, + ACTIONS(342), 1, anon_sym_SLASH_SLASH, - ACTIONS(324), 1, + ACTIONS(348), 1, anon_sym_AMP, - ACTIONS(326), 1, + ACTIONS(350), 1, + anon_sym_CARET, + ACTIONS(352), 1, anon_sym_PIPE, - ACTIONS(328), 1, - anon_sym_CARET, - ACTIONS(334), 1, + ACTIONS(358), 1, anon_sym_AMP_AMP, - ACTIONS(336), 1, + ACTIONS(360), 1, anon_sym_PIPE_PIPE, - ACTIONS(338), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT, - ACTIONS(340), 1, + ACTIONS(364), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(356), 1, + ACTIONS(380), 1, anon_sym_SEMI, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(318), 2, + ACTIONS(340), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(322), 2, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(346), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(330), 2, + ACTIONS(354), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 4, + ACTIONS(356), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6596] = 3, + [7301] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(270), 7, + ACTIONS(382), 8, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(272), 10, + ACTIONS(384), 12, sym_string, anon_sym_LPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -7697,22 +8423,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [6622] = 3, + [7330] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(358), 7, + ACTIONS(386), 8, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(360), 10, + ACTIONS(388), 12, sym_string, anon_sym_LPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -7720,22 +8449,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [6648] = 3, + [7359] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(362), 7, + ACTIONS(390), 8, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(364), 10, + ACTIONS(392), 12, sym_string, anon_sym_LPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -7743,22 +8475,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [6674] = 3, + [7388] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(366), 7, + ACTIONS(326), 8, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(368), 10, + ACTIONS(328), 12, sym_string, anon_sym_LPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -7766,22 +8501,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [6700] = 3, + [7417] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(370), 7, + ACTIONS(394), 8, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(372), 10, + ACTIONS(396), 12, sym_string, anon_sym_LPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -7789,42 +8527,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [6726] = 3, - STATE(63), 1, - sym_assignment_operator, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(62), 15, - anon_sym_EQ, - anon_sym_AMP_EQ, - anon_sym_PIPE_EQ, - anon_sym_CARET_EQ, - anon_sym_AMP_AMP_EQ, - anon_sym_PIPE_PIPE_EQ, - anon_sym_CARET_CARET_EQ, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_SLASH_EQ, - anon_sym_LT_LT_EQ, - anon_sym_GT_GT_EQ, - [6751] = 3, + [7446] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 5, + ACTIONS(398), 6, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, - ACTIONS(265), 10, + ACTIONS(249), 12, sym_string, anon_sym_LPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -7832,32 +8551,57 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LBRACE, - [6775] = 3, + [7473] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(376), 5, + ACTIONS(400), 6, sym_identifier, sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, - ACTIONS(378), 9, + ACTIONS(402), 11, sym_string, anon_sym_LPAREN, - aux_sym_integer_token1, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, - [6798] = 6, - ACTIONS(21), 1, + [7499] = 3, + STATE(55), 1, + sym_assignment_operator, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(68), 15, + anon_sym_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + anon_sym_AMP_AMP_EQ, + anon_sym_PIPE_PIPE_EQ, + anon_sym_CARET_CARET_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_STAR_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_SLASH_EQ, + anon_sym_SLASH_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + [7524] = 6, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(380), 1, + ACTIONS(404), 1, sym_identifier, - ACTIONS(382), 1, + ACTIONS(406), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, @@ -7865,16 +8609,16 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - STATE(86), 3, + STATE(57), 3, sym_void, sym_path, sym_struct_definition, - [6821] = 6, - ACTIONS(21), 1, + [7547] = 6, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(380), 1, + ACTIONS(404), 1, sym_identifier, - ACTIONS(382), 1, + ACTIONS(406), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, @@ -7882,50 +8626,34 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - STATE(65), 3, + STATE(74), 3, sym_void, sym_path, sym_struct_definition, - [6844] = 7, - ACTIONS(125), 1, - anon_sym_RPAREN, - ACTIONS(127), 1, - sym_varadic_dots, - ACTIONS(384), 1, - sym_identifier, - STATE(126), 1, - aux_sym_struct_definition_repeat1, - STATE(139), 1, - sym_struct_member, - STATE(158), 1, - sym__struct_final_element, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [6867] = 7, - ACTIONS(127), 1, + [7570] = 7, + ACTIONS(136), 1, sym_varadic_dots, - ACTIONS(384), 1, + ACTIONS(408), 1, sym_identifier, - ACTIONS(386), 1, + ACTIONS(410), 1, anon_sym_RPAREN, STATE(128), 1, aux_sym_struct_definition_repeat1, - STATE(139), 1, + STATE(152), 1, sym_struct_member, - STATE(156), 1, + STATE(163), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6890] = 6, - ACTIONS(21), 1, + [7593] = 6, + ACTIONS(27), 1, anon_sym_AT, - ACTIONS(380), 1, + ACTIONS(404), 1, sym_identifier, - STATE(136), 1, + STATE(132), 1, sym__variable_type, - STATE(137), 1, + STATE(133), 1, sym_path, ACTIONS(3), 2, sym_comment, @@ -7933,309 +8661,371 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_argument_path, sym_local_path, - [6911] = 5, - ACTIONS(388), 1, + [7614] = 7, + ACTIONS(134), 1, + anon_sym_RPAREN, + ACTIONS(136), 1, + sym_varadic_dots, + ACTIONS(408), 1, + sym_identifier, + STATE(125), 1, + aux_sym_struct_definition_repeat1, + STATE(152), 1, + sym_struct_member, + STATE(174), 1, + sym__struct_final_element, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [7637] = 5, + ACTIONS(412), 1, sym_identifier, STATE(128), 1, aux_sym_struct_definition_repeat1, - STATE(164), 1, + STATE(162), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(391), 2, + ACTIONS(415), 2, anon_sym_RPAREN, sym_varadic_dots, - [6929] = 4, - ACTIONS(393), 1, + [7655] = 4, + ACTIONS(417), 1, sym_identifier, - ACTIONS(396), 1, - anon_sym_RBRACK, STATE(129), 1, - aux_sym_closure_captured_variables_repeat1, + aux_sym_dictionary_construction_repeat1, + STATE(166), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6943] = 3, - ACTIONS(400), 1, - anon_sym_EQ, + [7669] = 4, + ACTIONS(420), 1, + sym_identifier, + ACTIONS(422), 1, + anon_sym_RBRACK, + STATE(131), 1, + aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(398), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [6955] = 4, - ACTIONS(402), 1, + [7683] = 4, + ACTIONS(424), 1, sym_identifier, - ACTIONS(404), 1, + ACTIONS(427), 1, anon_sym_RBRACK, - STATE(133), 1, + STATE(131), 1, aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6969] = 2, + [7697] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(391), 3, - sym_identifier, + ACTIONS(429), 3, anon_sym_RPAREN, - sym_varadic_dots, - [6979] = 4, - ACTIONS(406), 1, - sym_identifier, - ACTIONS(408), 1, - anon_sym_RBRACK, - STATE(129), 1, - aux_sym_closure_captured_variables_repeat1, + anon_sym_COMMA, + anon_sym_EQ, + [7707] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [6993] = 4, - ACTIONS(410), 1, + ACTIONS(431), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_EQ, + [7717] = 4, + ACTIONS(433), 1, sym_identifier, - STATE(135), 1, + STATE(129), 1, aux_sym_dictionary_construction_repeat1, - STATE(147), 1, + STATE(149), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7007] = 4, - ACTIONS(412), 1, + [7731] = 3, + ACTIONS(437), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(435), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [7743] = 4, + ACTIONS(439), 1, sym_identifier, - STATE(135), 1, - aux_sym_dictionary_construction_repeat1, - STATE(166), 1, - sym_dictionary_member_assignment, + ACTIONS(441), 1, + anon_sym_RBRACK, + STATE(130), 1, + aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7021] = 2, + [7757] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(415), 3, + sym_identifier, anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_EQ, - [7031] = 2, + sym_varadic_dots, + [7767] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(417), 3, + ACTIONS(443), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [7776] = 3, + ACTIONS(445), 1, anon_sym_RPAREN, + ACTIONS(447), 1, anon_sym_COMMA, - anon_sym_EQ, - [7041] = 3, - ACTIONS(25), 1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [7787] = 3, + ACTIONS(449), 1, + sym_identifier, + ACTIONS(451), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [7798] = 3, + ACTIONS(31), 1, anon_sym_LBRACE, - STATE(37), 1, + STATE(41), 1, sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7052] = 3, - ACTIONS(419), 1, + [7809] = 3, + ACTIONS(453), 1, anon_sym_RPAREN, - ACTIONS(421), 1, + ACTIONS(455), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7063] = 3, - ACTIONS(310), 1, - anon_sym_COLON, - STATE(130), 1, - sym__declaration_type, + [7820] = 3, + ACTIONS(422), 1, + anon_sym_RBRACK, + ACTIONS(457), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7074] = 3, - ACTIONS(423), 1, - anon_sym_RPAREN, - ACTIONS(425), 1, - anon_sym_COMMA, + [7831] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7085] = 3, - ACTIONS(427), 1, + ACTIONS(459), 2, aux_sym_signed_integer_token1, - ACTIONS(429), 1, aux_sym_unsigned_integer_token1, + [7840] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7096] = 3, - ACTIONS(419), 1, + ACTIONS(427), 2, + sym_identifier, + anon_sym_RBRACK, + [7849] = 3, + ACTIONS(449), 1, + sym_identifier, + ACTIONS(461), 1, anon_sym_RPAREN, - ACTIONS(431), 1, - anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7107] = 3, - ACTIONS(433), 1, + [7860] = 3, + ACTIONS(334), 1, + anon_sym_COLON, + STATE(135), 1, + sym__declaration_type, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [7871] = 3, + ACTIONS(457), 1, anon_sym_COMMA, - ACTIONS(435), 1, + ACTIONS(463), 1, anon_sym_RBRACK, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7118] = 3, - ACTIONS(437), 1, - sym_identifier, - ACTIONS(439), 1, + [7882] = 3, + ACTIONS(461), 1, anon_sym_RPAREN, + ACTIONS(465), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7129] = 3, - ACTIONS(408), 1, - anon_sym_RBRACK, - ACTIONS(433), 1, - anon_sym_COMMA, + [7893] = 3, + ACTIONS(467), 1, + aux_sym_base_ten_token1, + STATE(15), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7140] = 3, - ACTIONS(439), 1, + [7904] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(469), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [7913] = 3, + ACTIONS(453), 1, anon_sym_RPAREN, - ACTIONS(441), 1, + ACTIONS(471), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7151] = 3, - ACTIONS(443), 1, - aux_sym_integer_token1, - STATE(19), 1, - sym_number, + [7924] = 3, + ACTIONS(473), 1, + aux_sym_signed_integer_token1, + ACTIONS(475), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7162] = 2, + [7935] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(396), 2, - sym_identifier, - anon_sym_RBRACK, - [7171] = 3, - ACTIONS(437), 1, - sym_identifier, - ACTIONS(445), 1, + ACTIONS(477), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [7944] = 2, + ACTIONS(479), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7182] = 2, - ACTIONS(447), 1, + [7952] = 2, + ACTIONS(481), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7190] = 2, - ACTIONS(437), 1, + [7960] = 2, + ACTIONS(483), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [7968] = 2, + ACTIONS(485), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7198] = 2, - ACTIONS(449), 1, - anon_sym_in, + [7976] = 2, + ACTIONS(487), 1, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7206] = 2, - ACTIONS(451), 1, + [7984] = 2, + ACTIONS(457), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [7992] = 2, + ACTIONS(489), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7214] = 2, - ACTIONS(453), 1, - sym_identifier, + [8000] = 2, + ACTIONS(471), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7222] = 2, - ACTIONS(455), 1, + [8008] = 2, + ACTIONS(491), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7230] = 2, - ACTIONS(457), 1, - anon_sym_EQ, + [8016] = 2, + ACTIONS(493), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7238] = 2, - ACTIONS(459), 1, - anon_sym_RPAREN, + [8024] = 2, + ACTIONS(495), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7246] = 2, - ACTIONS(461), 1, - anon_sym_DASH_GT, + [8032] = 2, + ACTIONS(497), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7254] = 2, - ACTIONS(463), 1, - anon_sym_DASH_GT, + [8040] = 2, + ACTIONS(499), 1, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7262] = 2, - ACTIONS(465), 1, - anon_sym_DASH_GT, + [8048] = 2, + ACTIONS(501), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7270] = 2, - ACTIONS(467), 1, + [8056] = 2, + ACTIONS(503), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7278] = 2, - ACTIONS(469), 1, - ts_builtin_sym_end, + [8064] = 2, + ACTIONS(505), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7286] = 2, - ACTIONS(421), 1, - anon_sym_COMMA, + [8072] = 2, + ACTIONS(507), 1, + anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7294] = 2, - ACTIONS(433), 1, - anon_sym_COMMA, + [8080] = 2, + ACTIONS(449), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7302] = 2, - ACTIONS(471), 1, - anon_sym_COMMA, + [8088] = 2, + ACTIONS(509), 1, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7310] = 2, - ACTIONS(473), 1, + [8096] = 2, + ACTIONS(511), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7318] = 2, - ACTIONS(475), 1, + [8104] = 2, + ACTIONS(513), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, @@ -8244,392 +9034,415 @@ static const uint16_t ts_small_parse_table[] = { static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(10)] = 0, - [SMALL_STATE(11)] = 97, - [SMALL_STATE(12)] = 194, - [SMALL_STATE(13)] = 291, - [SMALL_STATE(14)] = 345, - [SMALL_STATE(15)] = 442, - [SMALL_STATE(16)] = 493, - [SMALL_STATE(17)] = 544, - [SMALL_STATE(18)] = 597, - [SMALL_STATE(19)] = 648, - [SMALL_STATE(20)] = 699, - [SMALL_STATE(21)] = 749, - [SMALL_STATE(22)] = 799, - [SMALL_STATE(23)] = 849, - [SMALL_STATE(24)] = 899, - [SMALL_STATE(25)] = 949, - [SMALL_STATE(26)] = 999, - [SMALL_STATE(27)] = 1049, - [SMALL_STATE(28)] = 1099, - [SMALL_STATE(29)] = 1149, - [SMALL_STATE(30)] = 1199, - [SMALL_STATE(31)] = 1249, - [SMALL_STATE(32)] = 1299, - [SMALL_STATE(33)] = 1349, - [SMALL_STATE(34)] = 1399, - [SMALL_STATE(35)] = 1449, - [SMALL_STATE(36)] = 1499, - [SMALL_STATE(37)] = 1549, - [SMALL_STATE(38)] = 1599, - [SMALL_STATE(39)] = 1651, - [SMALL_STATE(40)] = 1701, - [SMALL_STATE(41)] = 1753, - [SMALL_STATE(42)] = 1802, - [SMALL_STATE(43)] = 1884, - [SMALL_STATE(44)] = 1966, - [SMALL_STATE(45)] = 2048, - [SMALL_STATE(46)] = 2124, - [SMALL_STATE(47)] = 2176, - [SMALL_STATE(48)] = 2224, - [SMALL_STATE(49)] = 2278, - [SMALL_STATE(50)] = 2334, - [SMALL_STATE(51)] = 2394, - [SMALL_STATE(52)] = 2452, - [SMALL_STATE(53)] = 2514, - [SMALL_STATE(54)] = 2580, - [SMALL_STATE(55)] = 2648, - [SMALL_STATE(56)] = 2718, - [SMALL_STATE(57)] = 2792, - [SMALL_STATE(58)] = 2868, - [SMALL_STATE(59)] = 2944, - [SMALL_STATE(60)] = 3020, - [SMALL_STATE(61)] = 3096, - [SMALL_STATE(62)] = 3172, - [SMALL_STATE(63)] = 3248, - [SMALL_STATE(64)] = 3324, - [SMALL_STATE(65)] = 3400, - [SMALL_STATE(66)] = 3476, - [SMALL_STATE(67)] = 3552, - [SMALL_STATE(68)] = 3628, - [SMALL_STATE(69)] = 3704, - [SMALL_STATE(70)] = 3780, - [SMALL_STATE(71)] = 3856, - [SMALL_STATE(72)] = 3932, - [SMALL_STATE(73)] = 4008, - [SMALL_STATE(74)] = 4084, - [SMALL_STATE(75)] = 4160, - [SMALL_STATE(76)] = 4236, - [SMALL_STATE(77)] = 4312, - [SMALL_STATE(78)] = 4388, - [SMALL_STATE(79)] = 4464, - [SMALL_STATE(80)] = 4540, - [SMALL_STATE(81)] = 4616, - [SMALL_STATE(82)] = 4692, - [SMALL_STATE(83)] = 4768, - [SMALL_STATE(84)] = 4844, - [SMALL_STATE(85)] = 4920, - [SMALL_STATE(86)] = 4996, - [SMALL_STATE(87)] = 5072, - [SMALL_STATE(88)] = 5148, - [SMALL_STATE(89)] = 5224, - [SMALL_STATE(90)] = 5267, - [SMALL_STATE(91)] = 5310, - [SMALL_STATE(92)] = 5352, - [SMALL_STATE(93)] = 5399, - [SMALL_STATE(94)] = 5461, - [SMALL_STATE(95)] = 5519, - [SMALL_STATE(96)] = 5561, - [SMALL_STATE(97)] = 5599, - [SMALL_STATE(98)] = 5643, - [SMALL_STATE(99)] = 5689, - [SMALL_STATE(100)] = 5739, - [SMALL_STATE(101)] = 5787, - [SMALL_STATE(102)] = 5839, - [SMALL_STATE(103)] = 5895, - [SMALL_STATE(104)] = 5955, - [SMALL_STATE(105)] = 6015, - [SMALL_STATE(106)] = 6073, - [SMALL_STATE(107)] = 6133, - [SMALL_STATE(108)] = 6193, - [SMALL_STATE(109)] = 6251, - [SMALL_STATE(110)] = 6311, - [SMALL_STATE(111)] = 6368, - [SMALL_STATE(112)] = 6425, - [SMALL_STATE(113)] = 6482, - [SMALL_STATE(114)] = 6539, - [SMALL_STATE(115)] = 6596, - [SMALL_STATE(116)] = 6622, - [SMALL_STATE(117)] = 6648, - [SMALL_STATE(118)] = 6674, - [SMALL_STATE(119)] = 6700, - [SMALL_STATE(120)] = 6726, - [SMALL_STATE(121)] = 6751, - [SMALL_STATE(122)] = 6775, - [SMALL_STATE(123)] = 6798, - [SMALL_STATE(124)] = 6821, - [SMALL_STATE(125)] = 6844, - [SMALL_STATE(126)] = 6867, - [SMALL_STATE(127)] = 6890, - [SMALL_STATE(128)] = 6911, - [SMALL_STATE(129)] = 6929, - [SMALL_STATE(130)] = 6943, - [SMALL_STATE(131)] = 6955, - [SMALL_STATE(132)] = 6969, - [SMALL_STATE(133)] = 6979, - [SMALL_STATE(134)] = 6993, - [SMALL_STATE(135)] = 7007, - [SMALL_STATE(136)] = 7021, - [SMALL_STATE(137)] = 7031, - [SMALL_STATE(138)] = 7041, - [SMALL_STATE(139)] = 7052, - [SMALL_STATE(140)] = 7063, - [SMALL_STATE(141)] = 7074, - [SMALL_STATE(142)] = 7085, - [SMALL_STATE(143)] = 7096, - [SMALL_STATE(144)] = 7107, - [SMALL_STATE(145)] = 7118, - [SMALL_STATE(146)] = 7129, - [SMALL_STATE(147)] = 7140, - [SMALL_STATE(148)] = 7151, - [SMALL_STATE(149)] = 7162, - [SMALL_STATE(150)] = 7171, - [SMALL_STATE(151)] = 7182, - [SMALL_STATE(152)] = 7190, - [SMALL_STATE(153)] = 7198, - [SMALL_STATE(154)] = 7206, - [SMALL_STATE(155)] = 7214, - [SMALL_STATE(156)] = 7222, - [SMALL_STATE(157)] = 7230, - [SMALL_STATE(158)] = 7238, - [SMALL_STATE(159)] = 7246, - [SMALL_STATE(160)] = 7254, - [SMALL_STATE(161)] = 7262, - [SMALL_STATE(162)] = 7270, - [SMALL_STATE(163)] = 7278, - [SMALL_STATE(164)] = 7286, - [SMALL_STATE(165)] = 7294, - [SMALL_STATE(166)] = 7302, - [SMALL_STATE(167)] = 7310, - [SMALL_STATE(168)] = 7318, + [SMALL_STATE(11)] = 112, + [SMALL_STATE(12)] = 224, + [SMALL_STATE(13)] = 336, + [SMALL_STATE(14)] = 448, + [SMALL_STATE(15)] = 505, + [SMALL_STATE(16)] = 559, + [SMALL_STATE(17)] = 613, + [SMALL_STATE(18)] = 667, + [SMALL_STATE(19)] = 723, + [SMALL_STATE(20)] = 777, + [SMALL_STATE(21)] = 830, + [SMALL_STATE(22)] = 885, + [SMALL_STATE(23)] = 938, + [SMALL_STATE(24)] = 991, + [SMALL_STATE(25)] = 1044, + [SMALL_STATE(26)] = 1097, + [SMALL_STATE(27)] = 1194, + [SMALL_STATE(28)] = 1247, + [SMALL_STATE(29)] = 1300, + [SMALL_STATE(30)] = 1353, + [SMALL_STATE(31)] = 1406, + [SMALL_STATE(32)] = 1459, + [SMALL_STATE(33)] = 1512, + [SMALL_STATE(34)] = 1609, + [SMALL_STATE(35)] = 1706, + [SMALL_STATE(36)] = 1759, + [SMALL_STATE(37)] = 1812, + [SMALL_STATE(38)] = 1865, + [SMALL_STATE(39)] = 1918, + [SMALL_STATE(40)] = 1971, + [SMALL_STATE(41)] = 2024, + [SMALL_STATE(42)] = 2077, + [SMALL_STATE(43)] = 2130, + [SMALL_STATE(44)] = 2221, + [SMALL_STATE(45)] = 2312, + [SMALL_STATE(46)] = 2403, + [SMALL_STATE(47)] = 2494, + [SMALL_STATE(48)] = 2585, + [SMALL_STATE(49)] = 2676, + [SMALL_STATE(50)] = 2767, + [SMALL_STATE(51)] = 2858, + [SMALL_STATE(52)] = 2949, + [SMALL_STATE(53)] = 3040, + [SMALL_STATE(54)] = 3131, + [SMALL_STATE(55)] = 3222, + [SMALL_STATE(56)] = 3313, + [SMALL_STATE(57)] = 3404, + [SMALL_STATE(58)] = 3495, + [SMALL_STATE(59)] = 3586, + [SMALL_STATE(60)] = 3677, + [SMALL_STATE(61)] = 3768, + [SMALL_STATE(62)] = 3859, + [SMALL_STATE(63)] = 3914, + [SMALL_STATE(64)] = 4005, + [SMALL_STATE(65)] = 4096, + [SMALL_STATE(66)] = 4187, + [SMALL_STATE(67)] = 4278, + [SMALL_STATE(68)] = 4369, + [SMALL_STATE(69)] = 4460, + [SMALL_STATE(70)] = 4551, + [SMALL_STATE(71)] = 4642, + [SMALL_STATE(72)] = 4733, + [SMALL_STATE(73)] = 4824, + [SMALL_STATE(74)] = 4915, + [SMALL_STATE(75)] = 5006, + [SMALL_STATE(76)] = 5097, + [SMALL_STATE(77)] = 5149, + [SMALL_STATE(78)] = 5210, + [SMALL_STATE(79)] = 5265, + [SMALL_STATE(80)] = 5316, + [SMALL_STATE(81)] = 5373, + [SMALL_STATE(82)] = 5432, + [SMALL_STATE(83)] = 5495, + [SMALL_STATE(84)] = 5572, + [SMALL_STATE(85)] = 5637, + [SMALL_STATE(86)] = 5706, + [SMALL_STATE(87)] = 5777, + [SMALL_STATE(88)] = 5850, + [SMALL_STATE(89)] = 5929, + [SMALL_STATE(90)] = 5972, + [SMALL_STATE(91)] = 6015, + [SMALL_STATE(92)] = 6057, + [SMALL_STATE(93)] = 6104, + [SMALL_STATE(94)] = 6146, + [SMALL_STATE(95)] = 6190, + [SMALL_STATE(96)] = 6238, + [SMALL_STATE(97)] = 6276, + [SMALL_STATE(98)] = 6322, + [SMALL_STATE(99)] = 6372, + [SMALL_STATE(100)] = 6424, + [SMALL_STATE(101)] = 6480, + [SMALL_STATE(102)] = 6538, + [SMALL_STATE(103)] = 6600, + [SMALL_STATE(104)] = 6660, + [SMALL_STATE(105)] = 6720, + [SMALL_STATE(106)] = 6778, + [SMALL_STATE(107)] = 6836, + [SMALL_STATE(108)] = 6896, + [SMALL_STATE(109)] = 6956, + [SMALL_STATE(110)] = 7016, + [SMALL_STATE(111)] = 7073, + [SMALL_STATE(112)] = 7130, + [SMALL_STATE(113)] = 7187, + [SMALL_STATE(114)] = 7244, + [SMALL_STATE(115)] = 7301, + [SMALL_STATE(116)] = 7330, + [SMALL_STATE(117)] = 7359, + [SMALL_STATE(118)] = 7388, + [SMALL_STATE(119)] = 7417, + [SMALL_STATE(120)] = 7446, + [SMALL_STATE(121)] = 7473, + [SMALL_STATE(122)] = 7499, + [SMALL_STATE(123)] = 7524, + [SMALL_STATE(124)] = 7547, + [SMALL_STATE(125)] = 7570, + [SMALL_STATE(126)] = 7593, + [SMALL_STATE(127)] = 7614, + [SMALL_STATE(128)] = 7637, + [SMALL_STATE(129)] = 7655, + [SMALL_STATE(130)] = 7669, + [SMALL_STATE(131)] = 7683, + [SMALL_STATE(132)] = 7697, + [SMALL_STATE(133)] = 7707, + [SMALL_STATE(134)] = 7717, + [SMALL_STATE(135)] = 7731, + [SMALL_STATE(136)] = 7743, + [SMALL_STATE(137)] = 7757, + [SMALL_STATE(138)] = 7767, + [SMALL_STATE(139)] = 7776, + [SMALL_STATE(140)] = 7787, + [SMALL_STATE(141)] = 7798, + [SMALL_STATE(142)] = 7809, + [SMALL_STATE(143)] = 7820, + [SMALL_STATE(144)] = 7831, + [SMALL_STATE(145)] = 7840, + [SMALL_STATE(146)] = 7849, + [SMALL_STATE(147)] = 7860, + [SMALL_STATE(148)] = 7871, + [SMALL_STATE(149)] = 7882, + [SMALL_STATE(150)] = 7893, + [SMALL_STATE(151)] = 7904, + [SMALL_STATE(152)] = 7913, + [SMALL_STATE(153)] = 7924, + [SMALL_STATE(154)] = 7935, + [SMALL_STATE(155)] = 7944, + [SMALL_STATE(156)] = 7952, + [SMALL_STATE(157)] = 7960, + [SMALL_STATE(158)] = 7968, + [SMALL_STATE(159)] = 7976, + [SMALL_STATE(160)] = 7984, + [SMALL_STATE(161)] = 7992, + [SMALL_STATE(162)] = 8000, + [SMALL_STATE(163)] = 8008, + [SMALL_STATE(164)] = 8016, + [SMALL_STATE(165)] = 8024, + [SMALL_STATE(166)] = 8032, + [SMALL_STATE(167)] = 8040, + [SMALL_STATE(168)] = 8048, + [SMALL_STATE(169)] = 8056, + [SMALL_STATE(170)] = 8064, + [SMALL_STATE(171)] = 8072, + [SMALL_STATE(172)] = 8080, + [SMALL_STATE(173)] = 8088, + [SMALL_STATE(174)] = 8096, + [SMALL_STATE(175)] = 8104, }; 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 = false}}, SHIFT(3), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), - [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(24), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), - [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), - [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), - [27] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_local_path, 2, 0, 0), - [29] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_local_path, 2, 0, 0), - [31] = {.entry = {.count = 1, .reusable = false}}, SHIFT(162), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), + [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(89), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), + [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(52), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), [33] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_local_path, 1, 0, 0), [35] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_local_path, 1, 0, 0), - [37] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_path, 1, 0, 0), - [39] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_path, 1, 0, 0), - [41] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_path, 2, 0, 0), - [43] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_path, 2, 0, 0), - [45] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), - [47] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), - [49] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), SHIFT_REPEAT(162), - [52] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), - [54] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), - [56] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [58] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [60] = {.entry = {.count = 1, .reusable = false}}, SHIFT(122), - [62] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [64] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [66] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [68] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [70] = {.entry = {.count = 1, .reusable = false}}, SHIFT(151), - [72] = {.entry = {.count = 1, .reusable = false}}, SHIFT(155), - [74] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [76] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(3), - [79] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(30), - [82] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(30), - [85] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(14), - [88] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(38), - [91] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(24), - [94] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(66), - [97] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(57), - [100] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(4), - [103] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(42), - [106] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [109] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), - [111] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(151), - [114] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(155), - [117] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [119] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [121] = {.entry = {.count = 1, .reusable = false}}, SHIFT(148), - [123] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), - [125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), - [129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 2, 0, 0), - [131] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 2, 0, 0), - [133] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 3, 0, 0), - [135] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 3, 0, 0), - [137] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 10), - [139] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 10), - [141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(138), - [143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), - [145] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), - [147] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 11), - [149] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 11), - [151] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 8), - [153] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 8), - [155] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [157] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), - [161] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), - [163] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), - [165] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), - [167] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [169] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [173] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [175] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 7), - [177] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 7), - [179] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [181] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [183] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), - [185] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), - [187] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [189] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [191] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_void, 2, 0, 0), - [193] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_void, 2, 0, 0), - [195] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 12), - [197] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 12), - [199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 16), - [201] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 16), - [203] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 17), - [205] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 17), - [207] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [209] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [211] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 19), - [213] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 19), - [215] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 20), - [217] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 20), - [219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_integer, 1, 0, 0), - [221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), - [223] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), - [225] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [227] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), - [233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [235] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), - [238] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(30), - [241] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(30), - [244] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(14), - [247] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(89), - [250] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(24), - [253] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(60), - [256] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(57), - [259] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(4), - [262] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(42), - [265] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [267] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), - [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), - [274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [278] = {.entry = {.count = 1, .reusable = false}}, SHIFT(69), - [280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [282] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [284] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), - [286] = {.entry = {.count = 1, .reusable = false}}, SHIFT(72), - [288] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [290] = {.entry = {.count = 1, .reusable = false}}, SHIFT(74), - [292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), - [294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), - [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), - [298] = {.entry = {.count = 1, .reusable = false}}, SHIFT(77), - [300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), - [302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), - [304] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 22), - [306] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 22), - [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), - [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), - [312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), - [314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), - [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), - [318] = {.entry = {.count = 1, .reusable = false}}, SHIFT(80), - [320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), - [322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), - [324] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82), - [326] = {.entry = {.count = 1, .reusable = false}}, SHIFT(83), - [328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), - [330] = {.entry = {.count = 1, .reusable = false}}, SHIFT(85), - [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [338] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88), - [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [342] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 15), - [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [348] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 18), - [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), - [358] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closed_expression, 2, 0, 0), - [360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closed_expression, 2, 0, 0), - [362] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assign, 4, 0, 21), - [364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assign, 4, 0, 21), - [366] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let, 5, 0, 23), - [368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let, 5, 0, 23), - [370] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for, 5, 0, 24), - [372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for, 5, 0, 24), - [374] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [376] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_operator, 1, 0, 3), - [378] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_operator, 1, 0, 3), - [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), - [382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), - [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [388] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(140), - [391] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [393] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(165), - [396] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), - [398] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 6), - [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), - [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), - [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), - [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), - [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), - [412] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(157), - [415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__declaration_type, 2, 0, 13), - [417] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_type, 1, 0, 14), - [419] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), - [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), - [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), - [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), - [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), - [437] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), - [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), - [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), - [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [461] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), - [463] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), - [465] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), - [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [469] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), - [473] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(169), + [39] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_path, 1, 0, 0), + [41] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_path, 1, 0, 0), + [43] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_path, 2, 0, 0), + [45] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_path, 2, 0, 0), + [47] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_local_path, 2, 0, 0), + [49] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_local_path, 2, 0, 0), + [51] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), + [53] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), + [55] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), SHIFT_REPEAT(169), + [58] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), + [60] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), + [62] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [64] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [66] = {.entry = {.count = 1, .reusable = false}}, SHIFT(121), + [68] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [70] = {.entry = {.count = 1, .reusable = false}}, SHIFT(21), + [72] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), + [74] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [76] = {.entry = {.count = 1, .reusable = false}}, SHIFT(156), + [78] = {.entry = {.count = 1, .reusable = false}}, SHIFT(158), + [80] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [82] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(2), + [85] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(25), + [88] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(25), + [91] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(13), + [94] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(21), + [97] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(173), + [100] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(167), + [103] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(159), + [106] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(35), + [109] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(61), + [112] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(52), + [115] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(3), + [118] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(26), + [121] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(11), + [124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), + [126] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(156), + [129] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(158), + [132] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), + [134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [138] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [140] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [142] = {.entry = {.count = 1, .reusable = false}}, SHIFT(150), + [144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 11), + [146] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 11), + [148] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [150] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [152] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 2, 0, 0), + [154] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 2, 0, 0), + [156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 10), + [158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 10), + [160] = {.entry = {.count = 1, .reusable = false}}, SHIFT(141), + [162] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 3, 0, 0), + [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 3, 0, 0), + [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_void, 2, 0, 0), + [168] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_void, 2, 0, 0), + [170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), + [172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), + [174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), + [176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [178] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [180] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), + [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), + [184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [188] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [190] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 7), + [192] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 7), + [194] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 8), + [196] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 8), + [198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), + [200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), + [202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [210] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(2), + [213] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(25), + [216] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(25), + [219] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(13), + [222] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(89), + [225] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(173), + [228] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(167), + [231] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(159), + [234] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(35), + [237] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(58), + [240] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(52), + [243] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), + [246] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(26), + [249] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [251] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(11), + [254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [256] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [258] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 12), + [262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 12), + [264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 16), + [266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 16), + [268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 17), + [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 17), + [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 19), + [278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 19), + [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 20), + [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 20), + [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), + [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), + [288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [298] = {.entry = {.count = 1, .reusable = false}}, SHIFT(65), + [300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [304] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), + [306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 22), + [310] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 22), + [312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(68), + [314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70), + [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [322] = {.entry = {.count = 1, .reusable = false}}, SHIFT(73), + [324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [326] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), + [328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), + [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), + [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), + [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [340] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), + [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), + [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [352] = {.entry = {.count = 1, .reusable = false}}, SHIFT(44), + [354] = {.entry = {.count = 1, .reusable = false}}, SHIFT(46), + [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [362] = {.entry = {.count = 1, .reusable = false}}, SHIFT(50), + [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 15), + [372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 18), + [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [382] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closed_expression, 2, 0, 0), + [384] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closed_expression, 2, 0, 0), + [386] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for, 5, 0, 24), + [388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for, 5, 0, 24), + [390] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let, 5, 0, 23), + [392] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let, 5, 0, 23), + [394] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assign, 4, 0, 21), + [396] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assign, 4, 0, 21), + [398] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [400] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_operator, 1, 0, 3), + [402] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_operator, 1, 0, 3), + [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [412] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(147), + [415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [417] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(165), + [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [424] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(160), + [427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), + [429] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__declaration_type, 2, 0, 13), + [431] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_type, 1, 0, 14), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), + [435] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 6), + [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), + [443] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [449] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [453] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [469] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), + [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [477] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [479] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [483] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), + [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [493] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [501] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [505] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), + [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt b/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt index 536243c..7a6ddc9 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt @@ -18,7 +18,7 @@ Assign (identifier))) (assignment_operator) (expression - (signed_integer (integer)))))))) + (signed_integer (integer (base_ten))))))))) ================== Let @@ -38,4 +38,4 @@ Let (identifier) (assignment_operator) (expression - (signed_integer (integer)))))))) + (signed_integer (integer (base_ten))))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index 793cf67..1b28b35 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -92,4 +92,4 @@ With a statement (identifier))) (assignment_operator) (expression - (signed_integer (integer)))))))))) \ No newline at end of file + (signed_integer (integer (base_ten))))))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt b/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt index 638372f..787e580 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt @@ -26,7 +26,7 @@ Closed statement (statement (closed_expression (expression - (signed_integer (integer)))))))) + (signed_integer (integer (base_ten))))))))) ================== Open statement @@ -43,7 +43,7 @@ Open statement (procedural_block (statement (expression - (signed_integer (integer))))))) + (signed_integer (integer (base_ten)))))))) ================== Two open statements @@ -60,10 +60,10 @@ Two open statements (procedural_block (statement (expression - (signed_integer (integer)))) + (signed_integer (integer (base_ten))))) (statement (expression - (signed_integer (integer))))))) + (signed_integer (integer (base_ten)))))))) ================== If statement @@ -92,4 +92,4 @@ If statement (procedural_block)))) (statement (expression - (signed_integer (integer))))))) \ No newline at end of file + (signed_integer (integer (base_ten)))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt b/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt index cbc1f70..204f74b 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt @@ -44,7 +44,7 @@ Unsigned Integer (source_file (expression - (unsigned_integer (integer)))) + (unsigned_integer (integer (base_ten))))) ================== Signed Integer Positive @@ -56,7 +56,80 @@ Signed Integer Positive (source_file (expression - (signed_integer (integer)))) + (signed_integer (integer (base_ten))))) + + +================== +Unsigned Integer Octal +================== + +0o123u + +--- + +(source_file + (expression + (unsigned_integer (integer (octal))))) + +================== +Signed Integer Positive Octal +================== + +0o123i + +--- + +(source_file + (expression + (signed_integer (integer (octal))))) + +================== +Unsigned Integer hex +================== + +0xABCu + +--- + +(source_file + (expression + (unsigned_integer (integer (hex))))) + +================== +Signed Integer Positive Hex +================== + +0xABCi + +--- + +(source_file + (expression + (signed_integer (integer (hex))))) + +================== +Unsigned Integer Binary +================== + +0b1010u + +--- + +(source_file + (expression + (unsigned_integer (integer (binary))))) + +================== +Signed Integer Positive Binary +================== + +0b1010i + +--- + +(source_file + (expression + (signed_integer (integer (binary))))) ================== Signed Integer Positive with plus @@ -70,7 +143,7 @@ Signed Integer Positive with plus (expression (unary_expression (expression - (signed_integer (integer)))))) + (signed_integer (integer (base_ten))))))) ================== Signed Integer Positive with minus @@ -84,7 +157,7 @@ Signed Integer Positive with minus (expression (unary_expression (expression - (signed_integer (integer)))))) + (signed_integer (integer (base_ten))))))) ================== Scalar no decimal no unit @@ -139,4 +212,4 @@ Scalar with quoted unit (expression (scalar (number) - (unit_quote)))) \ No newline at end of file + (unit_quote)))) From 34b772adbc853b54303adb08c791a0370b756a31 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 6 Apr 2025 13:40:13 -0400 Subject: [PATCH 009/106] Add boolean type --- crates/interpreter/src/execution/mod.rs | 9 +- .../src/execution/values/boolean.rs | 88 +++++++++++++++++++ .../interpreter/src/execution/values/mod.rs | 5 +- 3 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 crates/interpreter/src/execution/values/boolean.rs diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 7ff35b8..39229f4 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -29,7 +29,7 @@ pub fn execute_expression( compile::Expression::BinaryExpression(ast_node) => { execute_binary_expression(log, stack_trace, ast_node) } - compile::Expression::Boolean(ast_node) => todo!(), + compile::Expression::Boolean(ast_node) => Ok(values::Boolean(ast_node.node).into()), compile::Expression::ClosureDefinition(ast_node) => todo!(), compile::Expression::Default(_ast_node) => Ok(values::DefaultValue.into()), compile::Expression::DictionaryConstruction(ast_node) => todo!(), @@ -129,6 +129,13 @@ mod test { assert_eq!(product, values::DefaultValue.into()); } + #[test] + fn boolean_type() { + let root = compile::full_compile("test_file.ccm", "true"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, values::Boolean(true).into()); + } + #[test] fn signed_integer_type() { let root = compile::full_compile("test_file.ccm", "5i"); diff --git a/crates/interpreter/src/execution/values/boolean.rs b/crates/interpreter/src/execution/values/boolean.rs new file mode 100644 index 0000000..4e06a63 --- /dev/null +++ b/crates/interpreter/src/execution/values/boolean.rs @@ -0,0 +1,88 @@ +/* + * Copyright 2024 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use crate::{compile::SourceReference, execution::logging::RuntimeLog}; + +use super::{value_type::VariableType, ExpressionResult, Object, StaticTypeName, Value}; + +#[derive(Debug, Hash, Clone, Eq, PartialEq)] +pub struct Boolean(pub bool); + +impl Object for Boolean { + fn matches_type( + &self, + _ty: &VariableType, + _log: &mut dyn RuntimeLog, + _stack_trace: &[SourceReference], + ) -> ExpressionResult { + Ok(false) + } + + fn eq( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(self.0 == rhs.0) + } + fn and( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(Self(self.0 && rhs.0).into()) + } + + fn or( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(Self(self.0 || rhs.0).into()) + } + + fn xor( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(Self((self.0 && rhs.0) || (!self.0 && !rhs.0)).into()) + } + + fn unary_not( + &self, + _log: &mut dyn RuntimeLog, + _stack_trace: &[SourceReference], + ) -> ExpressionResult { + Ok(Self(!self.0).into()) + } +} + +impl StaticTypeName for Boolean { + fn static_type_name() -> &'static str { + "Boolean" + } +} diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 7669dce..c2b0b8f 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -17,6 +17,9 @@ pub use void::Void; mod default; pub use default::DefaultValue; +mod boolean; +pub use boolean::Boolean; + mod integer; pub use integer::{SignedInteger, UnsignedInteger}; @@ -276,7 +279,7 @@ pub enum Value { Default(DefaultValue), SignedInteger, UnsignedInteger, - // Boolean, + Boolean, // BuiltinFunction(BuiltinFunctionRef), // UserFunction(UserFunction), // Structure(Structure), From 28a1d393bfaed33d3f0f82d3079f3874dd6bbc1b Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 6 Apr 2025 16:32:37 -0400 Subject: [PATCH 010/106] Implement comparisons --- crates/interpreter/src/execution/mod.rs | 38 ++- .../src/execution/values/integer.rs | 227 +++++++++++++++++- crates/interpreter/src/lib.rs | 2 +- 3 files changed, 256 insertions(+), 11 deletions(-) diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 39229f4..d4cc6d1 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -1,3 +1,5 @@ +use std::cmp::Ordering; + use crate::compile::{self, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation}; mod errors; @@ -83,7 +85,11 @@ fn execute_binary_expression( let value_a = execute_expression(log, stack_trace, &node.a)?; let value_b = execute_expression(log, stack_trace, &node.b)?; match node.operation.node { - BinaryExpressionOperation::NotEq => todo!(), + BinaryExpressionOperation::NotEq => Ok(values::Boolean(!matches!( + value_a.cmp(log, stack_trace, &value_b)?, + Ordering::Equal + )) + .into()), BinaryExpressionOperation::And => value_a.bit_and(log, stack_trace, &value_b), BinaryExpressionOperation::AndAnd => value_a.and(log, stack_trace, &value_b), BinaryExpressionOperation::Mul => value_a.multiply(log, stack_trace, &value_b), @@ -96,12 +102,32 @@ fn execute_binary_expression( BinaryExpressionOperation::DivDiv => { value_a.floor_divide(log, stack_trace, &value_b) } - BinaryExpressionOperation::Lt => todo!(), + BinaryExpressionOperation::Lt => Ok(values::Boolean(matches!( + value_a.cmp(log, stack_trace, &value_b)?, + Ordering::Less + )) + .into()), BinaryExpressionOperation::LtLt => todo!(), - BinaryExpressionOperation::LtEq => todo!(), - BinaryExpressionOperation::EqEq => todo!(), - BinaryExpressionOperation::Gt => todo!(), - BinaryExpressionOperation::GtEq => todo!(), + BinaryExpressionOperation::LtEq => Ok(values::Boolean(matches!( + value_a.cmp(log, stack_trace, &value_b)?, + Ordering::Less | Ordering::Equal + )) + .into()), + BinaryExpressionOperation::EqEq => Ok(values::Boolean(matches!( + value_a.cmp(log, stack_trace, &value_b)?, + Ordering::Equal + )) + .into()), + BinaryExpressionOperation::Gt => Ok(values::Boolean(matches!( + value_a.cmp(log, stack_trace, &value_b)?, + Ordering::Greater + )) + .into()), + BinaryExpressionOperation::GtEq => Ok(values::Boolean(matches!( + value_a.cmp(log, stack_trace, &value_b)?, + Ordering::Equal | Ordering::Greater + )) + .into()), BinaryExpressionOperation::GtGt => todo!(), BinaryExpressionOperation::BitXor => value_a.bit_xor(log, stack_trace, &value_b), BinaryExpressionOperation::Or => value_a.bit_or(log, stack_trace, &value_b), diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index 03e149d..628f91d 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -281,7 +281,10 @@ pub type UnsignedInteger = Integer; #[cfg(test)] mod test { - use crate::{compile, execution::execute_expression}; + use crate::{ + compile, + execution::{execute_expression, values::Boolean}, + }; use super::*; @@ -302,14 +305,72 @@ mod test { #[test] fn signed_bit_xor() { - let root = compile::full_compile("test_file.ccm", "0xF0i ^ 0x0FF"); + let root = compile::full_compile("test_file.ccm", "0xF0i ^ 0xFFi"); let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); assert_eq!(product, SignedInteger::from(0x0F).into()); } #[test] - fn cmp() { - todo!() + fn signed_cmp_greater_than() { + let root = compile::full_compile("test_file.ccm", "3i > 2i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + let root = compile::full_compile("test_file.ccm", "2i > 3i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + } + + #[test] + fn signed_cmp_greater_than_eq() { + let root = compile::full_compile("test_file.ccm", "3i >= 2i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + let root = compile::full_compile("test_file.ccm", "3i >= 3i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + let root = compile::full_compile("test_file.ccm", "2i >= 3i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + } + + #[test] + fn signed_cmp_eq() { + let root = compile::full_compile("test_file.ccm", "3i == 3i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + let root = compile::full_compile("test_file.ccm", "3i == 2i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + + let root = compile::full_compile("test_file.ccm", "3i != 3i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + let root = compile::full_compile("test_file.ccm", "3i != 2i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_cmp_less_than_eq() { + let root = compile::full_compile("test_file.ccm", "3i <= 2i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + let root = compile::full_compile("test_file.ccm", "3i <= 3i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + let root = compile::full_compile("test_file.ccm", "2i <= 3i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_cmp_less_than() { + let root = compile::full_compile("test_file.ccm", "3i < 2i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + let root = compile::full_compile("test_file.ccm", "2i < 3i"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); } #[test] @@ -383,4 +444,162 @@ mod test { let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); assert_eq!(product, SignedInteger::from(!0xAA).into()); } + + //////////////////// + + #[test] + fn unsigned_bit_or() { + let root = compile::full_compile("test_file.ccm", "0xAAu | 0x55u"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, UnsignedInteger::from(0xFF).into()); + } + + #[test] + fn unsigned_bit_and() { + let root = compile::full_compile("test_file.ccm", "0xFFu & 0x0Fu"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, UnsignedInteger::from(0x0F).into()); + } + + #[test] + fn unsigned_bit_xor() { + let root = compile::full_compile("test_file.ccm", "0xF0u ^ 0xFFu"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, UnsignedInteger::from(0x0F).into()); + } + + #[test] + fn unsigned_cmp_greater_than() { + let root = compile::full_compile("test_file.ccm", "3u > 2u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + let root = compile::full_compile("test_file.ccm", "2u > 3u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + } + + #[test] + fn unsigned_cmp_greater_than_eq() { + let root = compile::full_compile("test_file.ccm", "3u >= 2u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + let root = compile::full_compile("test_file.ccm", "3u >= 3u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + let root = compile::full_compile("test_file.ccm", "2u >= 3u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + } + + #[test] + fn unsigned_cmp_eq() { + let root = compile::full_compile("test_file.ccm", "3u == 3u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + let root = compile::full_compile("test_file.ccm", "3u == 2u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + + let root = compile::full_compile("test_file.ccm", "3u != 3u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + let root = compile::full_compile("test_file.ccm", "3u != 2u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_cmp_less_than_eq() { + let root = compile::full_compile("test_file.ccm", "3u <= 2u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + let root = compile::full_compile("test_file.ccm", "3u <= 3u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + let root = compile::full_compile("test_file.ccm", "2u <= 3u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_cmp_less_than() { + let root = compile::full_compile("test_file.ccm", "3u < 2u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + let root = compile::full_compile("test_file.ccm", "2u < 3u"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_addition() { + let root = compile::full_compile("test_file.ccm", "3u + 2u"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, UnsignedInteger::from(5).into()); + } + + #[test] + fn unsigned_subtraction() { + let root = compile::full_compile("test_file.ccm", "3u - 2u"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, UnsignedInteger::from(1).into()); + } + + #[test] + fn unsigned_multiply() { + let root = compile::full_compile("test_file.ccm", "3u * 2u"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, UnsignedInteger::from(6).into()); + } + + #[test] + fn unsigned_divide() { + let root = compile::full_compile("test_file.ccm", "6u / 2u"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, UnsignedInteger::from(3).into()); + } + + #[test] + fn unsigned_floor_divide() { + let root = compile::full_compile("test_file.ccm", "6u // 2u"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, UnsignedInteger::from(3).into()); + } + + #[test] + fn unsigned_exponent() { + let root = compile::full_compile("test_file.ccm", "6u ** 3u"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, UnsignedInteger::from(216).into()); + } + + #[test] + fn unsigned_unary_plus() { + let root = compile::full_compile("test_file.ccm", "+3u"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, UnsignedInteger::from(3).into()); + } + + #[test] + fn unsigned_unary_minus() { + let root = compile::full_compile("test_file.ccm", "-3u"); + + execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap_err(); + } + + #[test] + fn unsigned_unary_bit_not() { + let root = compile::full_compile("test_file.ccm", "!0xAAu"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, UnsignedInteger::from(!0xAA).into()); + } } diff --git a/crates/interpreter/src/lib.rs b/crates/interpreter/src/lib.rs index 2b2752a..08de6c0 100644 --- a/crates/interpreter/src/lib.rs +++ b/crates/interpreter/src/lib.rs @@ -1,5 +1,5 @@ mod compile; mod execution; -// mod types; pub use compile::{compile, new_parser}; +pub use execution::execute_expression; From a2679acc7229dacdd35778f530a6c1a7db6d8cae Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 6 Apr 2025 19:40:40 -0400 Subject: [PATCH 011/106] Implement scalar --- crates/common_data_types/src/lib.rs | 51 +- crates/interpreter/src/compile/expressions.rs | 32 +- .../interpreter/src/execution/formatting.rs | 18 + crates/interpreter/src/execution/logging.rs | 18 + crates/interpreter/src/execution/mod.rs | 24 +- .../interpreter/src/execution/values/mod.rs | 29 +- .../src/execution/values/scalar.rs | 912 ++++++++++++++++++ .../src/execution/values/value_type.rs | 113 +-- crates/interpreter/src/lib.rs | 18 + .../test/corpus/primitives.txt | 14 + crates/units/src/lib.rs | 29 +- 11 files changed, 1138 insertions(+), 120 deletions(-) create mode 100644 crates/interpreter/src/execution/values/scalar.rs diff --git a/crates/common_data_types/src/lib.rs b/crates/common_data_types/src/lib.rs index 9c458a2..57079a9 100644 --- a/crates/common_data_types/src/lib.rs +++ b/crates/common_data_types/src/lib.rs @@ -1,4 +1,4 @@ -use std::{borrow::Cow, collections::HashMap}; +use std::collections::HashMap; use ordered_float::NotNan; use paste::paste; @@ -9,10 +9,10 @@ pub type Float = NotNan; pub use ordered_float::{FloatIsNan, ParseNotNanError}; pub use std::f64::consts; -pub type ConversionFactorDatabase = HashMap, ConversionFactor>; -pub type DimensionNameDatabase = HashMap>; +pub type ConversionFactorDatabase = HashMap; +pub type DimensionNameDatabase = HashMap; pub type UnitList = Vec<(String, Vec)>; -pub type BaseUnits = HashMap>; +pub type BaseUnits = HashMap; #[derive(Debug, Serialize)] pub struct UnitDescription { @@ -62,6 +62,36 @@ impl RatioTypeHint { bit_getter_setter!(Self::PIXEL_MASK, pixel); } +impl std::fmt::Display for RatioTypeHint { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + if self.is_angle() { + write!(f, "-ANGLE")?; + } + + if self.is_constituent_concentration() { + write!(f, "-CONSTITUENT_CONCENTRATION")?; + } + + if self.is_information() { + write!(f, "-INFORMATION")?; + } + + if self.is_solid_angle() { + write!(f, "-SOLID_ANGLE")?; + } + + if self.is_temperature() { + write!(f, "-TEMPRATURE")?; + } + + if self.is_pixel() { + write!(f, "-PIXEL")?; + } + + Ok(()) + } +} + impl std::ops::BitOr for RatioTypeHint { type Output = Self; @@ -238,6 +268,19 @@ impl Dimension { } } + pub const fn area() -> Self { + Self { + length: 2, + mass: 0, + time: 0, + electric_current: 0, + thermodynamic_temprature: 0, + amount_of_substance: 0, + luminous_intensity: 0, + ratio_type_hint: RatioTypeHint(0), + } + } + pub fn is_zero_dimension(&self) -> bool { self.length == 0 && self.mass == 0 diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 7974a4d..cdf00bd 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -653,10 +653,21 @@ impl<'t> Parse<'t, nodes::Scalar<'t>> for Scalar { // Get the conversion factor using the unit name. let conversion_factor = if let Some(unit_name) = value.unit() { let unit_name = unit_name?; - let unit_name_str = &input[unit_name.byte_range()]; + + let unit_name_str = match unit_name { + nodes::anon_unions::Identifier_UnitQuote::Identifier(identifier) => { + &input[unit_name.byte_range()] + } + nodes::anon_unions::Identifier_UnitQuote::UnitQuote(unit_quote) => { + let original = &input[unit_name.byte_range()]; + &original[1..original.len() - 1] + } + }; + if let Some(conversion_factor) = units::get_conversion_factor(unit_name_str) { conversion_factor } else { + // TODO try and list similar names to what they user may have meant. // We don't know what this is. return Err(Error::InvalidUnit(InvalidUnitError { name: unit_name_str, @@ -1520,6 +1531,25 @@ mod test { ); } + #[test] + fn scalar_quoted_unit() { + // Test conversion factor + let root = full_compile("test_file.ccm", "1'm^2'"); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Scalar(AstNode { + reference: root.node.as_scalar().unwrap().reference.clone(), + node: Scalar { + dimension: Dimension::area(), + value: Float::new(1.0).unwrap() + } + }) + } + ); + } + #[test] fn signed_integer() { let root = full_compile("test_file.ccm", "5i"); diff --git a/crates/interpreter/src/execution/formatting.rs b/crates/interpreter/src/execution/formatting.rs index b65a2de..0991cd4 100644 --- a/crates/interpreter/src/execution/formatting.rs +++ b/crates/interpreter/src/execution/formatting.rs @@ -1,3 +1,21 @@ +/* + * Copyright 2025 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + use std::fmt::Display; /// Presents iterators in a comma separated format. diff --git a/crates/interpreter/src/execution/logging.rs b/crates/interpreter/src/execution/logging.rs index 00e044b..ebc8a6b 100644 --- a/crates/interpreter/src/execution/logging.rs +++ b/crates/interpreter/src/execution/logging.rs @@ -1,3 +1,21 @@ +/* + * Copyright 2025 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + use std::{ borrow::Cow, fmt::Display, diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index d4cc6d1..11e4423 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -1,3 +1,21 @@ +/* + * Copyright 2025 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + use std::cmp::Ordering; use crate::compile::{self, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation}; @@ -40,7 +58,11 @@ pub fn execute_expression( compile::Expression::Parenthesis(ast_node) => todo!(), compile::Expression::Path(ast_node) => todo!(), compile::Expression::ProceduralBlock(ast_node) => todo!(), - compile::Expression::Scalar(ast_node) => todo!(), + compile::Expression::Scalar(ast_node) => Ok(values::Scalar { + dimension: ast_node.node.dimension, + value: ast_node.node.value, + } + .into()), compile::Expression::SignedInteger(ast_node) => { Ok(values::SignedInteger::from(ast_node.node).into()) } diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index c2b0b8f..aa47451 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -1,3 +1,21 @@ +/* + * Copyright 2025 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + use std::{borrow::Cow, cmp::Ordering, fmt::Display}; use enum_dispatch::enum_dispatch; @@ -23,6 +41,9 @@ pub use boolean::Boolean; mod integer; pub use integer::{SignedInteger, UnsignedInteger}; +mod scalar; +pub use scalar::Scalar; + mod value_type; pub trait StaticTypeName { @@ -280,6 +301,7 @@ pub enum Value { SignedInteger, UnsignedInteger, Boolean, + Scalar, // BuiltinFunction(BuiltinFunctionRef), // UserFunction(UserFunction), // Structure(Structure), @@ -288,7 +310,6 @@ pub enum Value { // String(SString), // Range(Range), // Closure(Closure), - // Scalar, // Vector2(Vector2), // Vector3(Vector3), // Vector4(Vector4), @@ -314,9 +335,9 @@ impl StaticTypeName for Value { } #[derive(Debug, Eq, PartialEq)] -struct DowncastError { - expected: Cow<'static, str>, - got: Cow<'static, str>, +pub struct DowncastError { + pub expected: Cow<'static, str>, + pub got: Cow<'static, str>, } impl ErrorType for DowncastError {} diff --git a/crates/interpreter/src/execution/values/scalar.rs b/crates/interpreter/src/execution/values/scalar.rs new file mode 100644 index 0000000..be98807 --- /dev/null +++ b/crates/interpreter/src/execution/values/scalar.rs @@ -0,0 +1,912 @@ +/* + * Copyright 2025 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ +use std::{borrow::Cow, cmp::Ordering}; + +use common_data_types::{Dimension, Float, FloatIsNan}; + +use crate::{ + compile::SourceReference, + execution::{ + errors::{ExpressionResult, GenericFailure, Raise}, + logging::RuntimeLog, + }, +}; + +use super::{value_type::VariableType, DowncastError, Object, StaticTypeName, Value}; + +pub trait UnwrapNotNan: Sized { + fn unwrap_not_nan(self, stack_trace: &[SourceReference]) -> ExpressionResult; +} + +impl UnwrapNotNan for std::result::Result { + fn unwrap_not_nan(self, stack_trace: &[SourceReference]) -> ExpressionResult { + match self { + Ok(number) => Ok(number), + Err(_float_is_nan) => { + Err(GenericFailure("Result of arithmetic operation is NaN").to_error(stack_trace)) + } + } + } +} + +#[derive(Debug, Hash, Clone, Eq, PartialEq)] +pub struct Scalar { + pub dimension: Dimension, + pub value: Float, +} + +impl Object for Scalar { + fn matches_type( + &self, + ty: &VariableType, + _log: &mut dyn RuntimeLog, + _stack_trace: &[SourceReference], + ) -> ExpressionResult { + Ok(if let VariableType::Scalar(dimension) = ty { + *dimension == self.dimension + } else { + false + }) + } + + fn type_name(&self) -> Cow<'static, str> { + units::get_dimension_name(&self.dimension) + } + + // fn format( + // &self, + // log: &mut dyn RuntimeLog, + // stack_trace: [SourceReference], + // f: &mut dyn fmt::Write, + // style: Style, + // precision: Option, + // ) -> ExpressionResult { + // // This just takes a reference to the unit name, so it's pretty cheap. I don't mind if it's not always used. + // // In the rare case that a unit name is generated and memory is allocated on the heap, well we're clearly + // // not about to format a number, so it's clear that we're going to use this. + // let unit_name = BASE_UNITS + // .get(&self.dimension) + // .cloned() + // .unwrap_or_else(|| format_dimension(&self.dimension)); + + // match (style, precision, self.is_number()) { + // (Style::Default, None, true) => { + // write!(f, "{}", self.value).unwrap_formatting_result(span) + // } + // (Style::Default, None, false) => { + // write!(f, "{} {unit_name}", self.value).unwrap_formatting_result(span) + // } + // (Style::Default, Some(precision), true) => { + // write!(f, "{:.1$}", self.value, precision as usize).unwrap_formatting_result(span) + // } + // (Style::Default, Some(precision), false) => { + // write!(f, "{:.1$} {unit_name}", self.value, precision as usize) + // .unwrap_formatting_result(span) + // } + // (Style::Debug, None, true) => { + // write!(f, "{}", self.value).unwrap_formatting_result(span) + // } + // (Style::Debug, None, false) => { + // write!(f, "{} {unit_name}", self.value).unwrap_formatting_result(span) + // } + // (Style::Debug, Some(precision), true) => { + // write!(f, "{:.1$}", self.value, precision as usize).unwrap_formatting_result(span) + // } + // (Style::Debug, Some(precision), false) => { + // write!(f, "{:.1$} {unit_name}", self.value, precision as usize) + // .unwrap_formatting_result(span) + // } + // (Style::Octal, _, true) => { + // if precision.is_some() { + // log.push(LogMessage::FormatIntegerPrecision(span.clone())); + // } + // write!(f, "{:o}", self.value.into_inner() as usize).unwrap_formatting_result(span) + // } + // (Style::Octal, _, false) => { + // if precision.is_some() { + // log.push(LogMessage::FormatIntegerPrecision(span.clone())); + // } + // write!(f, "{:o} {unit_name}", self.value.into_inner() as usize) + // .unwrap_formatting_result(span) + // } + // (Style::Hex, _, true) => { + // if precision.is_some() { + // log.push(LogMessage::FormatIntegerPrecision(span.clone())); + // } + // write!(f, "{:x}", self.value.into_inner() as usize).unwrap_formatting_result(span) + // } + // (Style::Hex, _, false) => { + // if precision.is_some() { + // log.push(LogMessage::FormatIntegerPrecision(span.clone())); + // } + // write!(f, "{:x} {unit_name}", self.value.into_inner() as usize) + // .unwrap_formatting_result(span) + // } + // (Style::CapitalizedHex, _, true) => { + // if precision.is_some() { + // log.push(LogMessage::FormatIntegerPrecision(span.clone())); + // } + // write!(f, "{:X}", self.value.into_inner() as usize).unwrap_formatting_result(span) + // } + // (Style::CapitalizedHex, _, false) => { + // if precision.is_some() { + // log.push(LogMessage::FormatIntegerPrecision(span.clone())); + // } + // write!(f, "{:X} {unit_name}", self.value.into_inner() as usize) + // .unwrap_formatting_result(span) + // } + // (Style::Exponent, None, true) => { + // write!(f, "{:e}", self.value.into_inner() as usize).unwrap_formatting_result(span) + // } + // (Style::Exponent, None, false) => { + // write!(f, "{:e} {unit_name}", self.value.into_inner() as usize) + // .unwrap_formatting_result(span) + // } + // (Style::Exponent, Some(precision), true) => { + // write!(f, "{:.1$e}", self.value.into_inner(), precision as usize) + // .unwrap_formatting_result(span) + // } + // (Style::Exponent, Some(precision), false) => write!( + // f, + // "{:.1$e} {unit_name}", + // self.value.into_inner(), + // precision as usize + // ) + // .unwrap_formatting_result(span), + // (Style::CapitalizedExponent, None, true) => { + // write!(f, "{:E}", self.value.into_inner()).unwrap_formatting_result(span) + // } + // (Style::CapitalizedExponent, None, false) => { + // write!(f, "{:E} {unit_name}", self.value.into_inner()) + // .unwrap_formatting_result(span) + // } + // (Style::CapitalizedExponent, Some(precision), true) => { + // write!(f, "{:.1$E}", self.value.into_inner(), precision as usize) + // .unwrap_formatting_result(span) + // } + // (Style::CapitalizedExponent, Some(precision), false) => write!( + // f, + // "{:.1$E} {unit_name}", + // self.value.into_inner(), + // precision as usize + // ) + // .unwrap_formatting_result(span), + // } + // } + + fn addition( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs = self.unpack_for_addition_or_subtraction(stack_trace, rhs)?; + + let value = Float::new(*self.value + *rhs.value).unwrap_not_nan(stack_trace)?; + + Ok(Self { + value, + ..self.clone() + } + .into()) + } + fn subtraction( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs = self.unpack_for_addition_or_subtraction(stack_trace, rhs)?; + + let value = Float::new(*self.value - *rhs.value).unwrap_not_nan(stack_trace)?; + + Ok(Self { + value, + ..self.clone() + } + .into()) + } + fn multiply( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs = rhs.downcast_ref::(stack_trace)?; + self.multiply_by_scalar(stack_trace, rhs) + .map(|rhs| rhs.into()) + } + fn divide( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs = rhs.downcast_ref::(stack_trace)?; + self.divide_by_measurement(stack_trace, rhs) + .map(|rhs| rhs.into()) + } + fn unary_plus( + &self, + _log: &mut dyn RuntimeLog, + _stack_trace: &[SourceReference], + ) -> ExpressionResult { + Ok(self.clone().into()) + } + fn unary_minus( + &self, + _log: &mut dyn RuntimeLog, + _stack_trace: &[SourceReference], + ) -> ExpressionResult { + Ok(Self { + value: -self.value, + ..self.clone() + } + .into()) + } + fn cmp( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs = rhs.downcast_ref::(stack_trace)?; + if self.dimension == rhs.dimension { + Ok(std::cmp::Ord::cmp(&self.value, &rhs.value)) + } else { + DowncastError { + expected: self.type_name(), + got: rhs.type_name(), + } + .raise(stack_trace) + } + } + // fn method_call( + // &self, + // context: &mut ExecutionContext, + // stack_trace: &[SourceReference], + // attribute: &S, + // arguments: Vec, + // expressions: &[Expression], + // ) -> ExpressionResult { + // match attribute.as_str() { + // "to_number" => |_context: &mut ExecutionContext, + // stack_trace: &[SourceReference], + // ty: SString| + // -> ExpressionResult { + // self.convert_to_number(span, &ty.as_str(span)?) + // } + // .auto_call(context, span, arguments, expressions), + // "abs" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // Ok(Self { + // value: Float::new(self.value.abs()).unwrap_not_nan(span)?, + // ..self.clone() + // } + // .into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "clamp" => |_context: &mut ExecutionContext, + // stack_trace: &[SourceReference], + // min: Value, + // max: Value| + // -> ExpressionResult { + // let min = self.unpack_for_addition_or_subtraction(span, &min)?; + // let max = self.unpack_for_addition_or_subtraction(span, &max)?; + + // Ok(Self { + // value: self.value.clamp(min.value, max.value), + // ..self.clone() + // } + // .into()) + // } + // .auto_call(context, span, arguments, expressions), + // "copysign" => |_context: &mut ExecutionContext, + // stack_trace: &[SourceReference], + // sign: Number| + // -> ExpressionResult { + // let sign = sign.to_index(); + + // Ok(Self { + // value: Float::new(self.value.copysign(sign as RawFloat)) + // .unwrap_not_nan(span)?, + // ..self.clone() + // } + // .into()) + // } + // .auto_call(context, span, arguments, expressions), + // "hypot" => |_context: &mut ExecutionContext, + // stack_trace: &[SourceReference], + // other: Value| + // -> ExpressionResult { + // let other = self.unpack_for_addition_or_subtraction(span, &other)?; + + // Ok(Self { + // value: Float::new(self.value.hypot(*other.value)).unwrap_not_nan(span)?, + // ..self.clone() + // } + // .into()) + // } + // .auto_call(context, span, arguments, expressions), + // "is_finite" => { + // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { + // Ok(self.value.is_finite().into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "is_infinite" => { + // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { + // Ok(self.value.is_infinite().into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "is_normal" => { + // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { + // Ok(self.value.is_normal().into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "cbrt" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // Ok(Self { + // dimension: self.dimension / 3, + // value: Float::new(self.value.cbrt()).unwrap_not_nan(span)?, + // } + // .into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "pow" => |_context: &mut ExecutionContext, + // _stack_trace: &[SourceReference], + // exponent: Scalar| + // -> ExpressionResult { + // let exponent = exponent.to_number(span)?; + + // self.check_is_zero_dimension(span)?; + + // Ok(Self { + // dimension: self.dimension, + // value: Float::new(self.value.powf(exponent.into_inner())) + // .unwrap_not_nan(span)?, + // } + // .into()) + // } + // .auto_call(context, span, arguments, expressions), + // "powi" => |_context: &mut ExecutionContext, + // _stack_trace: &[SourceReference], + // exponent: Number| + // -> ExpressionResult { + // let exponent = exponent.to_index() as i8; + + // Ok(Self { + // dimension: self.dimension * exponent, + // value: Float::new(self.value.powi(exponent as i32)).unwrap_not_nan(span)?, + // } + // .into()) + // } + // .auto_call(context, span, arguments, expressions), + // "sqrt" => { + // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { + // Ok(Self { + // dimension: self.dimension / 2, + // value: Float::new(self.value.sqrt()).unwrap_not_nan(span)?, + // } + // .into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "is_sign_negative" => { + // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { + // Ok(self.value.is_sign_negative().into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "is_sign_positive" => { + // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { + // Ok(self.value.is_sign_positive().into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "recip" => { + // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { + // Ok(Self { + // dimension: -self.dimension, + // value: Float::new(1.0 / self.value.into_inner()).unwrap_not_nan(span)?, + // } + // .into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "round" => |_context: &mut ExecutionContext, + // stack_trace: &[SourceReference], + // unit: Value| + // -> ExpressionResult { + // let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; + + // let value = conversion_factor.convert_from_measurement_to_number(span, self)?; + // let value = Float::new(value.round()).unwrap_not_nan(span)?; + + // Ok(Self { + // dimension: self.dimension, + // value: conversion_factor.convert_to_base_unit(value), + // } + // .into()) + // } + // .auto_call_optional(context, span, arguments, expressions), + // "trunc" => |_context: &mut ExecutionContext, + // stack_trace: &[SourceReference], + // unit: Value| + // -> ExpressionResult { + // let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; + + // let value = conversion_factor.convert_from_measurement_to_number(span, self)?; + // let value = Float::new(value.trunc()).unwrap_not_nan(span)?; + + // Ok(Self { + // dimension: self.dimension, + // value: conversion_factor.convert_to_base_unit(value), + // } + // .into()) + // } + // .auto_call_optional(context, span, arguments, expressions), + // "fract" => |_context: &mut ExecutionContext, + // stack_trace: &[SourceReference], + // unit: Value| + // -> ExpressionResult { + // let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; + + // let value = conversion_factor.convert_from_measurement_to_number(span, self)?; + // let value = Float::new(value.fract()).unwrap_not_nan(span)?; + + // Ok(Self { + // dimension: self.dimension, + // value: conversion_factor.convert_to_base_unit(value), + // } + // .into()) + // } + // .auto_call_optional(context, span, arguments, expressions), + // "floor" => |_context: &mut ExecutionContext, + // stack_trace: &[SourceReference], + // unit: Value| + // -> ExpressionResult { + // let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; + + // let value = conversion_factor.convert_from_measurement_to_number(span, self)?; + // let value = Float::new(value.floor()).unwrap_not_nan(span)?; + + // Ok(Self { + // dimension: self.dimension, + // value: conversion_factor.convert_to_base_unit(value), + // } + // .into()) + // } + // .auto_call_optional(context, span, arguments, expressions), + // "ceil" => |_context: &mut ExecutionContext, + // stack_trace: &[SourceReference], + // unit: Value| + // -> ExpressionResult { + // let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; + + // let value = conversion_factor.convert_from_measurement_to_number(span, self)?; + // let value = Float::new(value.ceil()).unwrap_not_nan(span)?; + + // Ok(Self { + // dimension: self.dimension, + // value: conversion_factor.convert_to_base_unit(value), + // } + // .into()) + // } + // .auto_call_optional(context, span, arguments, expressions), + // "max" => |_context: &mut ExecutionContext, + // _stack_trace: &[SourceReference], + // other: Value| + // -> ExpressionResult { + // let other = self.unpack_for_addition_or_subtraction(span, &other)?; + // Ok(Float::new(*self.value.max(other.value)) + // .unwrap_not_nan(span)? + // .into()) + // } + // .auto_call(context, span, arguments, expressions), + // "min" => |_context: &mut ExecutionContext, + // _stack_trace: &[SourceReference], + // other: Value| + // -> ExpressionResult { + // let other = self.unpack_for_addition_or_subtraction(span, &other)?; + // Ok(Float::new(*self.value.min(other.value)) + // .unwrap_not_nan(span)? + // .into()) + // } + // .auto_call(context, span, arguments, expressions), + // "mul_add" => |context: &mut ExecutionContext, + // stack_trace: &[SourceReference], + // a: Value, + // b: Value| + // -> ExpressionResult { + // let multiply_result = self.multiply(context.log, span, &b)?; + // let add_result = multiply_result.addition(context.log, span, &a)?; + + // Ok(add_result) + // } + // .auto_call(context, span, arguments, expressions), + // "signum" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // Float::new(self.value.signum()) + // .unwrap_not_nan(span) + // .map(|n| n.into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "acos" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // self.check_inverse_trig_compatible(span)?; + // Float::new((self.value * consts::PI).acos()) + // .unwrap_not_nan(span) + // .map(|n| n.into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "acosh" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // self.check_inverse_trig_compatible(span)?; + // Float::new((self.value * consts::PI).acosh()) + // .unwrap_not_nan(span) + // .map(|n| n.into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "asin" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // self.check_inverse_trig_compatible(span)?; + // Float::new((self.value * consts::PI).asin()) + // .unwrap_not_nan(span) + // .map(|n| n.into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "asinh" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // self.check_inverse_trig_compatible(span)?; + // Float::new((self.value * consts::PI).asinh()) + // .unwrap_not_nan(span) + // .map(|n| n.into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "atan" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // self.check_inverse_trig_compatible(span)?; + // Float::new((self.value * consts::PI).atan()) + // .unwrap_not_nan(span) + // .map(|n| n.into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "atanh" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // self.check_inverse_trig_compatible(span)?; + // Float::new((self.value * consts::PI).atanh()) + // .unwrap_not_nan(span) + // .map(|n| n.into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "cos" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // self.check_trig_compatible(span)?; + // Float::new((self.value * consts::PI).cos()) + // .unwrap_not_nan(span) + // .map(|n| n.into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "cosh" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // self.check_trig_compatible(span)?; + // Float::new((self.value * consts::PI).cosh()) + // .unwrap_not_nan(span) + // .map(|n| n.into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "sin" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // self.check_trig_compatible(span)?; + // Float::new((self.value * consts::PI).sin()) + // .unwrap_not_nan(span) + // .map(|n| n.into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "sin_cos" => { + // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { + // self.check_trig_compatible(span)?; + // let (sin, cos) = (self.value * consts::PI).sin_cos(); + + // Ok(Vector2 { + // dimension: Dimension::zero(), + // value: NVector::>::new(cos, sin), + // } + // .into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "sinh" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // self.check_trig_compatible(span)?; + // Float::new((self.value * consts::PI).sinh()) + // .unwrap_not_nan(span) + // .map(|n| n.into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "tan" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // self.check_trig_compatible(span)?; + // Float::new((self.value * consts::PI).tan()) + // .unwrap_not_nan(span) + // .map(|n| n.into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // "tanh" => { + // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { + // self.check_trig_compatible(span)?; + // Float::new((self.value * consts::PI).tanh()) + // .unwrap_not_nan(span) + // .map(|n| n.into()) + // } + // .auto_call(context, span, arguments, expressions) + // } + // // TODO we need functions to convert zero dimensional types to: Angles, Constitute Concentration, Information, Solid Angle, and Temperature. + // _ => Err(Failure::UnknownAttribute(attribute.clone())), + // } + // } + + // fn export( + // &self, + // _log: &mut dyn RuntimeLog, + // _stack_trace: &[SourceReference], + // ) -> ExpressionResult { + // Ok(SerializableValue::Scalar(self.clone())) + // } +} + +impl StaticTypeName for Scalar { + fn static_type_name() -> &'static str { + "Scalar" + } +} + +impl Scalar { + fn multiply_by_scalar( + &self, + stack_trace: &[SourceReference], + rhs: &Self, + ) -> ExpressionResult { + let value = Float::new(*self.value * *rhs.value).unwrap_not_nan(stack_trace)?; + let dimension = self.dimension + rhs.dimension; + + Ok(Self { dimension, value }) + } + + fn divide_by_measurement( + &self, + stack_trace: &[SourceReference], + rhs: &Self, + ) -> ExpressionResult { + let value = Float::new(*self.value / *rhs.value).unwrap_not_nan(stack_trace)?; + let dimension = self.dimension - rhs.dimension; + + Ok(Self { dimension, value }) + } + + fn check_is_zero_dimension(&self, stack_trace: &[SourceReference]) -> ExpressionResult<()> { + if self.dimension.is_zero_dimension() { + Ok(()) + } else { + GenericFailure("Expected zero dimensional type").raise(stack_trace) + } + } + + fn check_inverse_trig_compatible( + &self, + stack_trace: &[SourceReference], + ) -> ExpressionResult<()> { + if self.dimension.is_zero_dimension() { + Ok(()) + } else { + GenericFailure("Inverse trigonometric functions can only be used with zero dimensional types (Angles, Ratios)").raise(stack_trace) + } + } + + fn check_trig_compatible(&self, stack_trace: &[SourceReference]) -> ExpressionResult<()> { + if self.dimension.is_zero_dimension() && self.dimension.ratio_type_hint.is_angle() { + Ok(()) + } else { + GenericFailure("Trigonometric functions can only be used with angles") + .raise(stack_trace) + } + } + + fn is_number(&self) -> bool { + self.dimension.is_zero_dimension() && self.dimension.ratio_type_hint.0 == 0 + } + + fn unpack_for_addition_or_subtraction<'b>( + &'b self, + stack_trace: &[SourceReference], + rhs: &'b Value, + ) -> ExpressionResult<&'b Self> { + if let Value::Scalar(rhs) = rhs { + if self.dimension == rhs.dimension { + Ok(rhs) + } else { + DowncastError { + expected: self.type_name(), + got: rhs.type_name(), + } + .raise(stack_trace) + } + } else { + DowncastError { + expected: self.type_name(), + got: rhs.type_name(), + } + .raise(stack_trace) + } + } +} + +#[cfg(test)] +mod test { + + use crate::{compile, execute_expression, execution::values::Boolean}; + + use super::*; + + #[test] + fn addition() { + let root = compile::full_compile("test_file.ccm", "3m + 2m"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: Float::new(5.0).unwrap(), + } + .into() + ); + } + + #[test] + fn subtraction() { + let root = compile::full_compile("test_file.ccm", "3m - 2m"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: Float::new(1.0).unwrap(), + } + .into() + ); + } + + #[test] + fn multiplication() { + let root = compile::full_compile("test_file.ccm", "3m * 2m"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!( + product, + Scalar { + dimension: Dimension::area(), + value: Float::new(6.0).unwrap(), + } + .into() + ); + } + + #[test] + fn division() { + let root = compile::full_compile("test_file.ccm", "6'm^2' / 2m"); + + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: Float::new(3.0).unwrap(), + } + .into() + ); + } + + #[test] + fn comparisions() { + let root = compile::full_compile("test_file.ccm", "6m > 2m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + + let root = compile::full_compile("test_file.ccm", "2m > 6m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + + let root = compile::full_compile("test_file.ccm", "6m >= 2m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + + let root = compile::full_compile("test_file.ccm", "6m >= 6m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + + let root = compile::full_compile("test_file.ccm", "2m >= 6m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + + let root = compile::full_compile("test_file.ccm", "6m == 6m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + + let root = compile::full_compile("test_file.ccm", "6m == 5m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + + let root = compile::full_compile("test_file.ccm", "6m <= 5m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + + let root = compile::full_compile("test_file.ccm", "5m <= 5m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + + let root = compile::full_compile("test_file.ccm", "5m <= 6m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + + let root = compile::full_compile("test_file.ccm", "5m < 6m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + + let root = compile::full_compile("test_file.ccm", "6m < 6m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + + let root = compile::full_compile("test_file.ccm", "6m != 6m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(false).into()); + + let root = compile::full_compile("test_file.ccm", "6m != 5m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn conversions() { + let root = compile::full_compile("test_file.ccm", "1m + 100cm == 2m"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + + let root = compile::full_compile("test_file.ccm", "2m * 2m == 4'm^2'"); + let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + assert_eq!(product, Boolean(true).into()); + } +} diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 850bf2a..29f19e4 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -17,128 +17,31 @@ */ use std::{borrow::Cow, fmt::Display}; -use crate::execution::formatting::IteratorFormatter; +use common_data_types::Dimension; -use super::Value; - -#[derive(Debug, Hash, Eq, PartialEq, Clone)] -pub struct ClosureSignature { - return_type: Box, - arguments: Vec, -} - -impl Display for ClosureSignature { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!( - f, - "({})[...] -> {}", - IteratorFormatter(self.arguments.iter()), - self.return_type - ) - } -} +use super::{Boolean, SignedInteger, StaticTypeName, UnsignedInteger}; #[derive(Debug, Hash, Eq, PartialEq, Clone)] pub enum VariableType { - String, - List, Boolean, SignedInteger, UnsignedInteger, - Range, - Struct(String), - Scalar(String), - Vector(u8, String), - Transform(u8), - Quaternion, - Cycle, - Region, - Sketch, - Surface, - Solid, - Shell, - Face, - Curve, - HalfEdge, - Vertex, - Closure(ClosureSignature), + Scalar(Dimension), } impl VariableType { pub fn name(&self) -> Cow<'static, str> { match self { - Self::String => "String".into(), - Self::List => "List".into(), - Self::Boolean => "Boolean".into(), - Self::SignedInteger => "Signed Integer".into(), - Self::UnsignedInteger => "Unsigned Integer".into(), - Self::Range => "Range".into(), - Self::Struct(name) => format!("struct {}", name.as_str()).into(), - Self::Scalar(name) => name.to_string().into(), - Self::Vector(dimension, name) => { - format!("Vector{}<{}>", dimension, name.as_str()).into() - } - Self::Transform(2) => "Transform2D".into(), - Self::Transform(3) => "Transform3D".into(), - Self::Transform(_) => unreachable!(), - Self::Quaternion => "Quaternion".into(), - Self::Cycle => "Cycle".into(), - Self::Region => "Region".into(), - Self::Sketch => "Sketch".into(), - Self::Surface => "Surface".into(), - Self::Solid => "Solid".into(), - Self::Shell => "Shell".into(), - Self::Face => "Face".into(), - Self::Curve => "Curve".into(), - Self::HalfEdge => "HalfEdge".into(), - Self::Vertex => "Vertex".into(), - Self::Closure(closure) => format!("{}", closure).into(), + Self::Boolean => Boolean::static_type_name().into(), + Self::SignedInteger => SignedInteger::static_type_name().into(), + Self::UnsignedInteger => UnsignedInteger::static_type_name().into(), + Self::Scalar(dimension) => units::get_dimension_name(dimension).into(), } } } impl Display for VariableType { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Self::Struct(name) => write!(f, "struct {}", name.as_str()), - Self::Scalar(name) => write!(f, "{}", name.as_str()), - Self::Vector(dimension, name) => { - write!(f, "Vector{}<{}>", dimension, name.as_str()) - } - Self::Closure(closure) => write!(f, "{}", closure), - _ => write!(f, "{}", self.name()), - } - } -} - -#[derive(Debug, Hash, Eq, PartialEq, Clone)] -pub struct MemberVariableType { - pub ty: VariableType, - pub default_value: Option, -} - -impl Display for MemberVariableType { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - if self.default_value.is_some() { - write!(f, "{} = default", self.ty) - } else { - write!(f, "{}", self.ty) - } - } -} - -#[derive(Debug, Hash, Eq, PartialEq, Clone)] -pub struct MemberVariable { - pub name: String, - pub ty: MemberVariableType, -} - -impl Display for MemberVariable { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - if self.ty.default_value.is_some() { - write!(f, "{}: {} = default", self.name.as_str(), self.ty.ty) - } else { - write!(f, "{}: {}", self.name.as_str(), self.ty.ty) - } + write!(f, "{}", self.name()) } } diff --git a/crates/interpreter/src/lib.rs b/crates/interpreter/src/lib.rs index 08de6c0..7d14400 100644 --- a/crates/interpreter/src/lib.rs +++ b/crates/interpreter/src/lib.rs @@ -1,3 +1,21 @@ +/* + * Copyright 2025 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + mod compile; mod execution; diff --git a/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt b/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt index 204f74b..6727336 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt @@ -213,3 +213,17 @@ Scalar with quoted unit (scalar (number) (unit_quote)))) + +================== +Scalar with quoted unit that would not work as an identifier +================== + +123 'm^2' + +--- + +(source_file + (expression + (scalar + (number) + (unit_quote)))) diff --git a/crates/units/src/lib.rs b/crates/units/src/lib.rs index ed4bacf..2e87b61 100644 --- a/crates/units/src/lib.rs +++ b/crates/units/src/lib.rs @@ -1,8 +1,11 @@ use common_data_types::{ - ConversionFactor, ConversionFactorDatabase, Dimension, DimensionNameDatabase, RatioTypeHint, - UnitDescription, UnitList, BaseUnits + BaseUnits, ConversionFactor, ConversionFactorDatabase, Dimension, DimensionNameDatabase, + RatioTypeHint, UnitDescription, UnitList, +}; +use std::{ + borrow::{Borrow, Cow}, + sync::OnceLock, }; -use std::{borrow::Borrow, sync::OnceLock}; pub fn get_conversion_factor(name: &str) -> Option<&'static ConversionFactor> { static CONVERSION_FACTORS: OnceLock = OnceLock::new(); @@ -12,12 +15,28 @@ pub fn get_conversion_factor(name: &str) -> Option<&'static ConversionFactor> { database.get(name) } -pub fn get_dimension_name(dimension: impl AsRef) -> Option<&'static str> { +pub fn get_dimension_name(dimension: &Dimension) -> Cow<'static, str> { static DIMENSIONS: OnceLock = OnceLock::new(); let database = DIMENSIONS.get_or_init(|| include!(concat!(env!("OUT_DIR"), "/dimension_names.rs"))); - database.get(dimension.as_ref()).map(|cow| cow.borrow()) + if let Some(name) = database.get(dimension) { + Cow::Borrowed(name) + } else { + // This is a custom unit. We will need to generate a name to represent it. + format!( + "", + dimension.length, + dimension.mass, + dimension.time, + dimension.electric_current, + dimension.thermodynamic_temprature, + dimension.amount_of_substance, + dimension.luminous_intensity, + dimension.ratio_type_hint + ) + .into() + } } pub fn get_unit_list() -> &'static Vec<(String, Vec)> { From 4c2e51cede62011962aeb06de5dcccb41dc5ccf3 Mon Sep 17 00:00:00 2001 From: James Carl Date: Mon, 7 Apr 2025 01:11:48 -0400 Subject: [PATCH 012/106] Rename VariableType to ValueType --- crates/interpreter/src/execution/values/boolean.rs | 4 ++-- crates/interpreter/src/execution/values/default.rs | 4 ++-- crates/interpreter/src/execution/values/integer.rs | 14 +++++++------- crates/interpreter/src/execution/values/mod.rs | 4 ++-- crates/interpreter/src/execution/values/scalar.rs | 6 +++--- .../interpreter/src/execution/values/value_type.rs | 6 +++--- crates/interpreter/src/execution/values/void.rs | 4 ++-- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/crates/interpreter/src/execution/values/boolean.rs b/crates/interpreter/src/execution/values/boolean.rs index 4e06a63..da1d25c 100644 --- a/crates/interpreter/src/execution/values/boolean.rs +++ b/crates/interpreter/src/execution/values/boolean.rs @@ -18,7 +18,7 @@ use crate::{compile::SourceReference, execution::logging::RuntimeLog}; -use super::{value_type::VariableType, ExpressionResult, Object, StaticTypeName, Value}; +use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; #[derive(Debug, Hash, Clone, Eq, PartialEq)] pub struct Boolean(pub bool); @@ -26,7 +26,7 @@ pub struct Boolean(pub bool); impl Object for Boolean { fn matches_type( &self, - _ty: &VariableType, + _ty: &ValueType, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], ) -> ExpressionResult { diff --git a/crates/interpreter/src/execution/values/default.rs b/crates/interpreter/src/execution/values/default.rs index 5123733..6cab626 100644 --- a/crates/interpreter/src/execution/values/default.rs +++ b/crates/interpreter/src/execution/values/default.rs @@ -18,7 +18,7 @@ use crate::{compile::SourceReference, execution::logging::RuntimeLog}; -use super::{value_type::VariableType, ExpressionResult, Object, StaticTypeName}; +use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName}; #[derive(Debug, Clone, Eq, PartialEq, Hash)] pub struct DefaultValue; @@ -26,7 +26,7 @@ pub struct DefaultValue; impl Object for DefaultValue { fn matches_type( &self, - _ty: &VariableType, + _ty: &ValueType, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], ) -> ExpressionResult { diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index 628f91d..347ce51 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -34,7 +34,7 @@ use crate::{ }, }; -use super::{value_type::VariableType, Object, StaticTypeName, Value}; +use super::{value_type::ValueType, Object, StaticTypeName, Value}; #[derive(Debug, Hash, Clone, Eq, PartialEq)] pub struct Integer(pub I); @@ -69,7 +69,7 @@ where { fn matches_type( &self, - ty: &VariableType, + ty: &ValueType, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], ) -> ExpressionResult { @@ -228,7 +228,7 @@ where } trait GetType { - fn get_type() -> VariableType; + fn get_type() -> ValueType; } /// Custom version of the std::ops::Neg trait that can fail. @@ -237,8 +237,8 @@ trait Neg { } impl GetType for i64 { - fn get_type() -> VariableType { - VariableType::SignedInteger + fn get_type() -> ValueType { + ValueType::SignedInteger } } @@ -255,8 +255,8 @@ impl StaticTypeName for Integer { } impl GetType for u64 { - fn get_type() -> VariableType { - VariableType::UnsignedInteger + fn get_type() -> ValueType { + ValueType::UnsignedInteger } } diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index aa47451..cb7eadf 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -20,7 +20,7 @@ use std::{borrow::Cow, cmp::Ordering, fmt::Display}; use enum_dispatch::enum_dispatch; use enum_downcast::{AsVariant, EnumDowncast}; -use value_type::VariableType; +use value_type::ValueType; use crate::compile::SourceReference; @@ -88,7 +88,7 @@ impl UnsupportedOperationError { pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { fn matches_type( &self, - ty: &VariableType, + ty: &ValueType, log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], ) -> ExpressionResult; diff --git a/crates/interpreter/src/execution/values/scalar.rs b/crates/interpreter/src/execution/values/scalar.rs index be98807..d89399e 100644 --- a/crates/interpreter/src/execution/values/scalar.rs +++ b/crates/interpreter/src/execution/values/scalar.rs @@ -27,7 +27,7 @@ use crate::{ }, }; -use super::{value_type::VariableType, DowncastError, Object, StaticTypeName, Value}; +use super::{value_type::ValueType, DowncastError, Object, StaticTypeName, Value}; pub trait UnwrapNotNan: Sized { fn unwrap_not_nan(self, stack_trace: &[SourceReference]) -> ExpressionResult; @@ -53,11 +53,11 @@ pub struct Scalar { impl Object for Scalar { fn matches_type( &self, - ty: &VariableType, + ty: &ValueType, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], ) -> ExpressionResult { - Ok(if let VariableType::Scalar(dimension) = ty { + Ok(if let ValueType::Scalar(dimension) = ty { *dimension == self.dimension } else { false diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 29f19e4..30eb2d0 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -22,14 +22,14 @@ use common_data_types::Dimension; use super::{Boolean, SignedInteger, StaticTypeName, UnsignedInteger}; #[derive(Debug, Hash, Eq, PartialEq, Clone)] -pub enum VariableType { +pub enum ValueType { Boolean, SignedInteger, UnsignedInteger, Scalar(Dimension), } -impl VariableType { +impl ValueType { pub fn name(&self) -> Cow<'static, str> { match self { Self::Boolean => Boolean::static_type_name().into(), @@ -40,7 +40,7 @@ impl VariableType { } } -impl Display for VariableType { +impl Display for ValueType { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.name()) } diff --git a/crates/interpreter/src/execution/values/void.rs b/crates/interpreter/src/execution/values/void.rs index 3cdfc58..b1642d6 100644 --- a/crates/interpreter/src/execution/values/void.rs +++ b/crates/interpreter/src/execution/values/void.rs @@ -18,7 +18,7 @@ use crate::{compile::SourceReference, execution::logging::RuntimeLog}; -use super::{value_type::VariableType, ExpressionResult, Object, StaticTypeName}; +use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName}; #[derive(Debug, Hash, Clone, Eq, PartialEq)] pub struct Void; @@ -26,7 +26,7 @@ pub struct Void; impl Object for Void { fn matches_type( &self, - _ty: &VariableType, + _ty: &ValueType, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], ) -> ExpressionResult { From 32b758273758217d16e4c2e75a7b35bbb16117c8 Mon Sep 17 00:00:00 2001 From: James Carl Date: Mon, 7 Apr 2025 18:05:47 -0400 Subject: [PATCH 013/106] Implement procedural blocks --- crates/interpreter/src/compile/expressions.rs | 4 +- crates/interpreter/src/execution/mod.rs | 158 ++++++- crates/interpreter/src/execution/stack.rs | 37 +- .../src/execution/values/boolean.rs | 9 +- .../src/execution/values/closure.rs | 322 +++++++++++++ .../src/execution/values/default.rs | 13 +- .../src/execution/values/integer.rs | 427 +++++++++++++++--- .../interpreter/src/execution/values/mod.rs | 9 +- .../src/execution/values/scalar.rs | 178 ++++++-- .../src/execution/values/value_type.rs | 6 +- .../interpreter/src/execution/values/void.rs | 13 +- 11 files changed, 1031 insertions(+), 145 deletions(-) create mode 100644 crates/interpreter/src/execution/values/closure.rs diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index cdf00bd..cf9878e 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -655,10 +655,10 @@ impl<'t> Parse<'t, nodes::Scalar<'t>> for Scalar { let unit_name = unit_name?; let unit_name_str = match unit_name { - nodes::anon_unions::Identifier_UnitQuote::Identifier(identifier) => { + nodes::anon_unions::Identifier_UnitQuote::Identifier(_identifier) => { &input[unit_name.byte_range()] } - nodes::anon_unions::Identifier_UnitQuote::UnitQuote(unit_quote) => { + nodes::anon_unions::Identifier_UnitQuote::UnitQuote(_unit_quote) => { let original = &input[unit_name.byte_range()]; &original[1..original.len() - 1] } diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 11e4423..dc2cac7 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -16,7 +16,7 @@ * program. If not, see . */ -use std::cmp::Ordering; +use std::{cmp::Ordering, fmt::Display}; use crate::compile::{self, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation}; @@ -25,9 +25,10 @@ mod formatting; mod logging; mod stack; pub mod values; -use errors::ExpressionResult; +use errors::{ErrorType, ExpressionResult, Raise}; use logging::{RuntimeLog, StackScope}; -use values::{Object, Value}; +use stack::{ScopeType, Stack}; +use values::{Object, Value, ValueType}; /// Caches the products of expressions. pub struct Cache {} @@ -41,13 +42,14 @@ pub struct RuntimeContext {} pub fn execute_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, + stack: &mut Stack, expression: &compile::AstNode, ) -> ExpressionResult { stack_trace.stack_scope( expression.reference.clone(), |stack_trace| match &expression.node { compile::Expression::BinaryExpression(ast_node) => { - execute_binary_expression(log, stack_trace, ast_node) + execute_binary_expression(log, stack_trace, stack, ast_node) } compile::Expression::Boolean(ast_node) => Ok(values::Boolean(ast_node.node).into()), compile::Expression::ClosureDefinition(ast_node) => todo!(), @@ -57,7 +59,9 @@ pub fn execute_expression( compile::Expression::List(ast_node) => todo!(), compile::Expression::Parenthesis(ast_node) => todo!(), compile::Expression::Path(ast_node) => todo!(), - compile::Expression::ProceduralBlock(ast_node) => todo!(), + compile::Expression::ProceduralBlock(ast_node) => { + execute_procedural_block(log, stack, stack_trace, ast_node) + } compile::Expression::Scalar(ast_node) => Ok(values::Scalar { dimension: ast_node.node.dimension, value: ast_node.node.value, @@ -69,7 +73,7 @@ pub fn execute_expression( compile::Expression::String(ast_node) => todo!(), compile::Expression::StructDefinition(ast_node) => todo!(), compile::Expression::UnaryExpression(ast_node) => { - execute_unary_expression(log, stack_trace, ast_node) + execute_unary_expression(log, stack_trace, stack, ast_node) } compile::Expression::UnsignedInteger(ast_node) => { Ok(values::UnsignedInteger::from(ast_node.node).into()) @@ -82,11 +86,12 @@ pub fn execute_expression( fn execute_unary_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, + stack: &mut Stack, expression: &compile::AstNode>, ) -> ExpressionResult { stack_trace.stack_scope(expression.reference.clone(), |stack_trace| { let node = &expression.node; - let value = execute_expression(log, stack_trace, &node.expression)?; + let value = execute_expression(log, stack_trace, stack, &node.expression)?; match node.operation.node { UnaryExpressionOperation::Add => value.unary_plus(log, stack_trace), UnaryExpressionOperation::Sub => value.unary_minus(log, stack_trace), @@ -98,14 +103,15 @@ fn execute_unary_expression( fn execute_binary_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, + stack: &mut Stack, expression: &compile::AstNode>, ) -> ExpressionResult { stack_trace.stack_scope( expression.reference.clone(), |stack_trace: &mut Vec| { let node = &expression.node; - let value_a = execute_expression(log, stack_trace, &node.a)?; - let value_b = execute_expression(log, stack_trace, &node.b)?; + let value_a = execute_expression(log, stack_trace, stack, &node.a)?; + let value_b = execute_expression(log, stack_trace, stack, &node.b)?; match node.operation.node { BinaryExpressionOperation::NotEq => Ok(values::Boolean(!matches!( value_a.cmp(log, stack_trace, &value_b)?, @@ -159,6 +165,87 @@ fn execute_binary_expression( ) } +fn execute_procedural_block( + log: &mut dyn RuntimeLog, + stack: &mut Stack, + stack_trace: &mut Vec, + block: &compile::AstNode, +) -> ExpressionResult { + stack_trace.stack_scope(block.reference.clone(), |stack_trace| { + stack.scope( + [], + stack_trace, + ScopeType::Inherited, + |stack, stack_trace| { + let mut last_value = Value::Void(values::Void); + + let mut statements = block.node.statements.iter().peekable(); + + while let Some(statement) = statements.next() { + last_value = execute_statement(log, stack, stack_trace, statement)?; + + if statements.peek().is_some() { + // This was not the last statement, which means it needs to produce a void + // value. + + match last_value { + Value::Void(_) => { + // Not a problem. + continue; + } + _ => { + return Err(stack_trace.stack_scope( + statement.reference.clone(), + |stack_trace| { + MissingSemicolon { + actual_value_type: last_value.get_type(), + } + .to_error(stack_trace.iter()) + }, + )); + } + } + } + } + + Ok(last_value) + }, + )? + }) +} + +#[derive(Debug, Eq, PartialEq)] +struct MissingSemicolon { + actual_value_type: ValueType, +} + +impl ErrorType for MissingSemicolon {} + +impl Display for MissingSemicolon { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "Expected void type, found `{}`. Are you missing a semicolon?", + self.actual_value_type + ) + } +} + +fn execute_statement( + log: &mut dyn RuntimeLog, + stack: &mut Stack, + stack_trace: &mut Vec, + statement: &compile::AstNode, +) -> ExpressionResult { + match &statement.node { + compile::Statement::Assign(ast_node) => todo!(), + compile::Statement::Let(ast_node) => todo!(), + compile::Statement::For(ast_node) => todo!(), + compile::Statement::Expression(ast_node) => todo!(), + compile::Statement::ClosedExpression(ast_node) => todo!(), + } +} + #[cfg(test)] mod test { use super::*; @@ -166,35 +253,78 @@ mod test { #[test] fn none_type() { let root = compile::full_compile("test_file.ccm", "()"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, values::Void.into()); } #[test] fn default_type() { let root = compile::full_compile("test_file.ccm", "default"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, values::DefaultValue.into()); } #[test] fn boolean_type() { let root = compile::full_compile("test_file.ccm", "true"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, values::Boolean(true).into()); } #[test] fn signed_integer_type() { let root = compile::full_compile("test_file.ccm", "5i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, values::SignedInteger::from(5).into()); } #[test] fn unsigned_integer_type() { let root = compile::full_compile("test_file.ccm", "5u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, values::UnsignedInteger::from(5).into()); } + + #[test] + fn empty_block() { + let root = compile::full_compile("test_file.ccm", "{}"); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); + assert_eq!(product, values::Void.into()); + } } diff --git a/crates/interpreter/src/execution/stack.rs b/crates/interpreter/src/execution/stack.rs index 9241744..8adba32 100644 --- a/crates/interpreter/src/execution/stack.rs +++ b/crates/interpreter/src/execution/stack.rs @@ -32,16 +32,32 @@ pub enum ScopeType { Inherited, } +#[derive(Debug)] struct Scope { ty: ScopeType, variables: HashMap, } +#[derive(Debug)] pub struct Stack { scopes: Vec, active_scope: usize, } +impl Default for Stack { + fn default() -> Self { + Self { + scopes: vec![Scope { + ty: ScopeType::Isolated, + + // TODO we should load the standard environment. + variables: HashMap::new(), + }], + active_scope: 0, + } + } +} + macro_rules! generate_variable_getter { ($self:ident, $stack_trace: ident, $name:ident, $iter:ident, $get:ident, $mutable:ident) => {{ let mut scope_iterator = $self.scopes[..=$self.active_scope].$iter().rev(); @@ -85,7 +101,24 @@ impl Display for NotInScopeError { } impl Stack { - pub fn push_scope<'s>( + pub fn scope<'s, B, R>( + &mut self, + variables_to_copy: impl IntoIterator>, + stack_trace: &mut Vec, + mode: ScopeType, + block: B, + ) -> ExpressionResult + where + B: FnOnce(&mut Self, &mut Vec) -> R, + { + self.push_scope(variables_to_copy.into_iter(), stack_trace, mode)?; + let result = block(self, stack_trace); + self.pop_scope(); + + Ok(result) + } + + fn push_scope<'s>( &mut self, variables_to_copy: impl Iterator>, stack_trace: &[SourceReference], @@ -113,7 +146,7 @@ impl Stack { Ok(()) } - pub(super) fn pop_scope(&mut self) { + fn pop_scope(&mut self) { self.scopes[self.active_scope].variables.clear(); self.active_scope -= 1; } diff --git a/crates/interpreter/src/execution/values/boolean.rs b/crates/interpreter/src/execution/values/boolean.rs index da1d25c..67e475e 100644 --- a/crates/interpreter/src/execution/values/boolean.rs +++ b/crates/interpreter/src/execution/values/boolean.rs @@ -24,13 +24,8 @@ use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Val pub struct Boolean(pub bool); impl Object for Boolean { - fn matches_type( - &self, - _ty: &ValueType, - _log: &mut dyn RuntimeLog, - _stack_trace: &[SourceReference], - ) -> ExpressionResult { - Ok(false) + fn get_type(&self) -> ValueType { + ValueType::Boolean } fn eq( diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs new file mode 100644 index 0000000..c708b5c --- /dev/null +++ b/crates/interpreter/src/execution/values/closure.rs @@ -0,0 +1,322 @@ +/* + * Copyright 2024 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use fortuples::fortuples; + +#[derive(Clone)] +pub struct UserFunction { + pub source: Rc>, +} + +impl std::fmt::Debug for UserFunction { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("UserFunction") + .field("address", &Rc::as_ptr(&self.source)) + .finish() + } +} + +impl From<&'_ Rc>> for UserFunction { + fn from(value: &'_ Rc>) -> Self { + Self { + source: Rc::clone(value), + } + } +} + +impl UserFunction { + pub fn new(source: Function) -> Self { + Self { + source: Rc::new(source), + } + } +} + +impl Object for UserFunction { + fn matches_type( + &self, + _ty: &VariableType, + _log: &mut dyn RuntimeLog, + _variable_name_span: &S, + ) -> OperatorResult { + Ok(false) + } + + fn call( + &self, + context: &mut ExecutionContext, + span: &S, + arguments: Vec>, + spans: &[Expression], + ) -> OperatorResult> { + context.new_isolated_scope(|context| { + run_callable_block( + context, + &self.source.named_block.callable, + arguments, + spans, + span, + ) + }) + } +} + +impl PartialEq for UserFunction { + fn eq(&self, _other: &Self) -> bool { + false + } +} + +impl NamedObject for UserFunction { + fn static_type_name() -> &'static str { + "Function" + } +} + +pub type BuiltinFunction = dyn Fn( + &mut ExecutionContext, + &S, + Vec>, + &[Expression], +) -> OperatorResult>; + +pub struct BuiltinFunctionRef(Rc>); + +impl std::ops::Deref for BuiltinFunctionRef { + type Target = BuiltinFunction; + + fn deref(&self) -> &Self::Target { + &*self.0 + } +} + +impl std::cmp::Eq for BuiltinFunctionRef {} +impl std::cmp::PartialEq for BuiltinFunctionRef { + fn eq(&self, other: &Self) -> bool { + std::ptr::addr_eq(Rc::as_ptr(&self.0), Rc::as_ptr(&other.0)) + } +} + +impl Clone for BuiltinFunctionRef { + fn clone(&self) -> Self { + Self(Rc::clone(&self.0)) + } +} + +impl std::fmt::Debug for BuiltinFunctionRef { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut debug_struct = f.debug_struct("BuiltinFunction"); + debug_struct.field("address", &Rc::as_ptr(&self.0)); + debug_struct.finish() + } +} + +impl From>> for BuiltinFunctionRef { + fn from(value: Box>) -> Self { + Self(value.into()) + } +} + +impl Object for BuiltinFunctionRef { + fn matches_type( + &self, + _ty: &VariableType, + _log: &mut dyn RuntimeLog, + _variable_name_span: &S, + ) -> OperatorResult { + Ok(false) + } + + fn call( + &self, + context: &mut ExecutionContext, + span: &S, + arguments: Vec>, + expressions: &[Expression], + ) -> OperatorResult> { + (*self)(context, span, arguments, expressions) + } +} + +impl NamedObject for BuiltinFunctionRef { + fn static_type_name() -> &'static str { + "BuiltinFunction" + } +} + +pub trait UnpackArguments { + fn unpack_arguments( + span: &S, + arguments: Vec>, + expressions: &[Expression], + ) -> OperatorResult; + + fn unpack_arguments_optional( + _span: &S, + arguments: Vec>, + expressions: &[Expression], + ) -> OperatorResult; +} + +#[rustfmt::skip] +fortuples! { + impl UnpackArguments for #Tuple + where + S: Span, + #(#Member: NamedObject),* + #(Value: TryInto<#Member>),* + { + fn unpack_arguments( + _span: &S, + mut arguments: Vec>, + expressions: &[Expression], + ) -> OperatorResult { + arguments.reverse(); + let mut expression_iter = expressions.iter(); + + #(let casey::lower!(#Member) = { + if let Some(value) = arguments.pop() { + value.downcast(expression_iter.next().unwrap().get_span()).map_err(|f| f.make_from_function_call())? + } else { + return Err(Failure::MissingArguments(_span.clone()).make_from_function_call()); + } + };)* + + if let Some(extra_expression) = expression_iter.next() { + Err(Failure::TooManyArguments(extra_expression.get_span().clone()).make_from_function_call()) + } else { + Ok((#(casey::lower!(#Member)),*)) + } + } + + fn unpack_arguments_optional( + _span: &S, + mut arguments: Vec>, + expressions: &[Expression], + ) -> OperatorResult { + arguments.reverse(); + let mut expression_iter = expressions.iter(); + + #(let casey::lower!(#Member) = { + if let Some(value) = arguments.pop() { + value.downcast(expression_iter.next().unwrap().get_span()).map_err(|f| f.make_from_function_call())? + } else { + Value::::from(NoneType).downcast(_span)? + } + };)* + + if let Some(extra_expression) = expression_iter.next() { + Err(Failure::TooManyArguments(extra_expression.get_span().clone()).make_from_function_call()) + } else { + Ok((#(casey::lower!(#Member)),*)) + } + } + } +} + +pub trait AutoCall +where + S: Span, +{ + type Unpacker: UnpackArguments; + + fn auto_call( + self, + context: &mut ExecutionContext, + span: &S, + arguments: Vec>, + expressions: &[Expression], + ) -> OperatorResult>; + + fn auto_call_optional( + self, + context: &mut ExecutionContext, + span: &S, + arguments: Vec>, + expressions: &[Expression], + ) -> OperatorResult>; +} + +#[rustfmt::skip] +fortuples! { + impl AutoCall for F + where + S: Span, + #(#Member: NamedObject),* + #(Value: TryInto<#Member>),* + F: FnOnce(&mut ExecutionContext, &S, #(#Member),*) -> OperatorResult>, + { + type Unpacker = #Tuple; + + fn auto_call( + self, + context: &mut ExecutionContext, + span: &S, + arguments: Vec>, + expressions: &[Expression], + ) -> OperatorResult> { + let (#(casey::lower!(#Member)),*) = Self::Unpacker::unpack_arguments(span, arguments, expressions)?; + + (self)(context, span, #(casey::lower!(#Member)),*) + } + + fn auto_call_optional( + self, + context: &mut ExecutionContext, + span: &S, + arguments: Vec>, + expressions: &[Expression], + ) -> OperatorResult> { + let (#(casey::lower!(#Member)),*) = Self::Unpacker::unpack_arguments_optional(span, arguments, expressions)?; + + (self)(context, span, #(casey::lower!(#Member)),*) + } + } +} + +pub trait IntoBuiltinFunction: AutoCall { + fn into_builtin_function(self) -> BuiltinFunctionRef; + fn into_builtin_function_optional(self) -> BuiltinFunctionRef; +} + +#[rustfmt::skip] + fortuples! { + impl IntoBuiltinFunction for F + where + S: Span, + F: Fn(&mut ExecutionContext, &S, #(#Member),*) -> OperatorResult> + Clone + 'static, + #(#Member: NamedObject),* + #(Value: TryInto<#Member>),* + { + fn into_builtin_function(self) -> BuiltinFunctionRef { + let function: Box> = Box::new(move |context: &mut ExecutionContext, span: &S, arguments: Vec>, expressions: &[Expression]| -> OperatorResult> { + self.clone().auto_call(context, span, arguments, expressions) + }); + + BuiltinFunctionRef::from(function) + } + + fn into_builtin_function_optional(self) -> BuiltinFunctionRef { + let function: Box> = Box::new(move |context: &mut ExecutionContext, span: &S, arguments: Vec>, expressions: &[Expression]| -> OperatorResult> { + self.clone().auto_call_optional(context, span, arguments, expressions) + }); + + BuiltinFunctionRef::from(function) + } + } + } diff --git a/crates/interpreter/src/execution/values/default.rs b/crates/interpreter/src/execution/values/default.rs index 6cab626..cf401b0 100644 --- a/crates/interpreter/src/execution/values/default.rs +++ b/crates/interpreter/src/execution/values/default.rs @@ -16,21 +16,14 @@ * program. If not, see . */ -use crate::{compile::SourceReference, execution::logging::RuntimeLog}; - -use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName}; +use super::{value_type::ValueType, Object, StaticTypeName}; #[derive(Debug, Clone, Eq, PartialEq, Hash)] pub struct DefaultValue; impl Object for DefaultValue { - fn matches_type( - &self, - _ty: &ValueType, - _log: &mut dyn RuntimeLog, - _stack_trace: &[SourceReference], - ) -> ExpressionResult { - Ok(false) + fn get_type(&self) -> ValueType { + ValueType::Default } } diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index 347ce51..0ddf18f 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -67,13 +67,8 @@ where Self: StaticTypeName + Into, Value: AsVariant, { - fn matches_type( - &self, - ty: &ValueType, - _log: &mut dyn RuntimeLog, - _stack_trace: &[SourceReference], - ) -> ExpressionResult { - Ok(*ty == I::get_type()) + fn get_type(&self) -> ValueType { + I::get_type() } fn bit_and( @@ -283,7 +278,7 @@ pub type UnsignedInteger = Integer; mod test { use crate::{ compile, - execution::{execute_expression, values::Boolean}, + execution::{execute_expression, stack::Stack, values::Boolean}, }; use super::*; @@ -292,84 +287,186 @@ mod test { fn signed_bit_or() { let root = compile::full_compile("test_file.ccm", "0xAAi | 0x55i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, SignedInteger::from(0xFF).into()); } #[test] fn signed_bit_and() { let root = compile::full_compile("test_file.ccm", "0xFFi & 0x0Fi"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, SignedInteger::from(0x0F).into()); } #[test] fn signed_bit_xor() { let root = compile::full_compile("test_file.ccm", "0xF0i ^ 0xFFi"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, SignedInteger::from(0x0F).into()); } #[test] fn signed_cmp_greater_than() { let root = compile::full_compile("test_file.ccm", "3i > 2i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "2i > 3i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); } #[test] fn signed_cmp_greater_than_eq() { let root = compile::full_compile("test_file.ccm", "3i >= 2i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "3i >= 3i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "2i >= 3i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); } #[test] fn signed_cmp_eq() { let root = compile::full_compile("test_file.ccm", "3i == 3i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "3i == 2i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); let root = compile::full_compile("test_file.ccm", "3i != 3i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); let root = compile::full_compile("test_file.ccm", "3i != 2i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn signed_cmp_less_than_eq() { let root = compile::full_compile("test_file.ccm", "3i <= 2i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); let root = compile::full_compile("test_file.ccm", "3i <= 3i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "2i <= 3i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn signed_cmp_less_than() { let root = compile::full_compile("test_file.ccm", "3i < 2i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); let root = compile::full_compile("test_file.ccm", "2i < 3i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); } @@ -377,7 +474,13 @@ mod test { fn signed_addition() { let root = compile::full_compile("test_file.ccm", "3i + 2i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, SignedInteger::from(5).into()); } @@ -385,7 +488,13 @@ mod test { fn signed_subtraction() { let root = compile::full_compile("test_file.ccm", "3i - 2i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, SignedInteger::from(1).into()); } @@ -393,7 +502,13 @@ mod test { fn signed_multiply() { let root = compile::full_compile("test_file.ccm", "3i * 2i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, SignedInteger::from(6).into()); } @@ -401,7 +516,13 @@ mod test { fn signed_divide() { let root = compile::full_compile("test_file.ccm", "6i / 2i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, SignedInteger::from(3).into()); } @@ -409,7 +530,13 @@ mod test { fn signed_floor_divide() { let root = compile::full_compile("test_file.ccm", "6i // 2i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, SignedInteger::from(3).into()); } @@ -417,7 +544,13 @@ mod test { fn signed_exponent() { let root = compile::full_compile("test_file.ccm", "6i ** 3i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, SignedInteger::from(216).into()); } @@ -425,7 +558,13 @@ mod test { fn signed_unary_plus() { let root = compile::full_compile("test_file.ccm", "+3i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, SignedInteger::from(3).into()); } @@ -433,7 +572,13 @@ mod test { fn signed_unary_minus() { let root = compile::full_compile("test_file.ccm", "-3i"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, SignedInteger::from(-3).into()); } @@ -441,7 +586,13 @@ mod test { fn signed_unary_bit_not() { let root = compile::full_compile("test_file.ccm", "!0xAAi"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, SignedInteger::from(!0xAA).into()); } @@ -451,84 +602,186 @@ mod test { fn unsigned_bit_or() { let root = compile::full_compile("test_file.ccm", "0xAAu | 0x55u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, UnsignedInteger::from(0xFF).into()); } #[test] fn unsigned_bit_and() { let root = compile::full_compile("test_file.ccm", "0xFFu & 0x0Fu"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, UnsignedInteger::from(0x0F).into()); } #[test] fn unsigned_bit_xor() { let root = compile::full_compile("test_file.ccm", "0xF0u ^ 0xFFu"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, UnsignedInteger::from(0x0F).into()); } #[test] fn unsigned_cmp_greater_than() { let root = compile::full_compile("test_file.ccm", "3u > 2u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "2u > 3u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); } #[test] fn unsigned_cmp_greater_than_eq() { let root = compile::full_compile("test_file.ccm", "3u >= 2u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "3u >= 3u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "2u >= 3u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); } #[test] fn unsigned_cmp_eq() { let root = compile::full_compile("test_file.ccm", "3u == 3u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "3u == 2u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); let root = compile::full_compile("test_file.ccm", "3u != 3u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); let root = compile::full_compile("test_file.ccm", "3u != 2u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn unsigned_cmp_less_than_eq() { let root = compile::full_compile("test_file.ccm", "3u <= 2u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); let root = compile::full_compile("test_file.ccm", "3u <= 3u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "2u <= 3u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn unsigned_cmp_less_than() { let root = compile::full_compile("test_file.ccm", "3u < 2u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); let root = compile::full_compile("test_file.ccm", "2u < 3u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); } @@ -536,7 +789,13 @@ mod test { fn unsigned_addition() { let root = compile::full_compile("test_file.ccm", "3u + 2u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, UnsignedInteger::from(5).into()); } @@ -544,7 +803,13 @@ mod test { fn unsigned_subtraction() { let root = compile::full_compile("test_file.ccm", "3u - 2u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, UnsignedInteger::from(1).into()); } @@ -552,7 +817,13 @@ mod test { fn unsigned_multiply() { let root = compile::full_compile("test_file.ccm", "3u * 2u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, UnsignedInteger::from(6).into()); } @@ -560,7 +831,13 @@ mod test { fn unsigned_divide() { let root = compile::full_compile("test_file.ccm", "6u / 2u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, UnsignedInteger::from(3).into()); } @@ -568,7 +845,13 @@ mod test { fn unsigned_floor_divide() { let root = compile::full_compile("test_file.ccm", "6u // 2u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, UnsignedInteger::from(3).into()); } @@ -576,7 +859,13 @@ mod test { fn unsigned_exponent() { let root = compile::full_compile("test_file.ccm", "6u ** 3u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, UnsignedInteger::from(216).into()); } @@ -584,7 +873,13 @@ mod test { fn unsigned_unary_plus() { let root = compile::full_compile("test_file.ccm", "+3u"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, UnsignedInteger::from(3).into()); } @@ -592,14 +887,26 @@ mod test { fn unsigned_unary_minus() { let root = compile::full_compile("test_file.ccm", "-3u"); - execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap_err(); + execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap_err(); } #[test] fn unsigned_unary_bit_not() { let root = compile::full_compile("test_file.ccm", "!0xAAu"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, UnsignedInteger::from(!0xAA).into()); } } diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index cb7eadf..71013d1 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -20,7 +20,6 @@ use std::{borrow::Cow, cmp::Ordering, fmt::Display}; use enum_dispatch::enum_dispatch; use enum_downcast::{AsVariant, EnumDowncast}; -use value_type::ValueType; use crate::compile::SourceReference; @@ -45,6 +44,7 @@ mod scalar; pub use scalar::Scalar; mod value_type; +pub use value_type::ValueType; pub trait StaticTypeName { /// Provides the type name without having an instance of the object. @@ -86,12 +86,7 @@ impl UnsupportedOperationError { #[enum_dispatch] pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { - fn matches_type( - &self, - ty: &ValueType, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - ) -> ExpressionResult; + fn get_type(&self) -> ValueType; // fn format( // &self, diff --git a/crates/interpreter/src/execution/values/scalar.rs b/crates/interpreter/src/execution/values/scalar.rs index d89399e..c4202b2 100644 --- a/crates/interpreter/src/execution/values/scalar.rs +++ b/crates/interpreter/src/execution/values/scalar.rs @@ -51,17 +51,8 @@ pub struct Scalar { } impl Object for Scalar { - fn matches_type( - &self, - ty: &ValueType, - _log: &mut dyn RuntimeLog, - _stack_trace: &[SourceReference], - ) -> ExpressionResult { - Ok(if let ValueType::Scalar(dimension) = ty { - *dimension == self.dimension - } else { - false - }) + fn get_type(&self) -> ValueType { + ValueType::Scalar(self.dimension) } fn type_name(&self) -> Cow<'static, str> { @@ -776,7 +767,10 @@ impl Scalar { #[cfg(test)] mod test { - use crate::{compile, execute_expression, execution::values::Boolean}; + use crate::{ + compile, execute_expression, + execution::{stack::Stack, values::Boolean}, + }; use super::*; @@ -784,7 +778,13 @@ mod test { fn addition() { let root = compile::full_compile("test_file.ccm", "3m + 2m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!( product, Scalar { @@ -799,7 +799,13 @@ mod test { fn subtraction() { let root = compile::full_compile("test_file.ccm", "3m - 2m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!( product, Scalar { @@ -814,7 +820,13 @@ mod test { fn multiplication() { let root = compile::full_compile("test_file.ccm", "3m * 2m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!( product, Scalar { @@ -829,7 +841,13 @@ mod test { fn division() { let root = compile::full_compile("test_file.ccm", "6'm^2' / 2m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!( product, Scalar { @@ -843,70 +861,166 @@ mod test { #[test] fn comparisions() { let root = compile::full_compile("test_file.ccm", "6m > 2m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "2m > 6m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); let root = compile::full_compile("test_file.ccm", "6m >= 2m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "6m >= 6m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "2m >= 6m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); let root = compile::full_compile("test_file.ccm", "6m == 6m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "6m == 5m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); let root = compile::full_compile("test_file.ccm", "6m <= 5m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); let root = compile::full_compile("test_file.ccm", "5m <= 5m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "5m <= 6m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "5m < 6m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "6m < 6m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); let root = compile::full_compile("test_file.ccm", "6m != 6m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(false).into()); let root = compile::full_compile("test_file.ccm", "6m != 5m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn conversions() { let root = compile::full_compile("test_file.ccm", "1m + 100cm == 2m"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); let root = compile::full_compile("test_file.ccm", "2m * 2m == 4'm^2'"); - let product = execute_expression(&mut Vec::new(), &mut Vec::new(), &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); assert_eq!(product, Boolean(true).into()); } } diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 30eb2d0..6ad2a37 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -19,10 +19,12 @@ use std::{borrow::Cow, fmt::Display}; use common_data_types::Dimension; -use super::{Boolean, SignedInteger, StaticTypeName, UnsignedInteger}; +use super::{Boolean, DefaultValue, SignedInteger, StaticTypeName, UnsignedInteger, Void}; #[derive(Debug, Hash, Eq, PartialEq, Clone)] pub enum ValueType { + Void, + Default, Boolean, SignedInteger, UnsignedInteger, @@ -32,6 +34,8 @@ pub enum ValueType { impl ValueType { pub fn name(&self) -> Cow<'static, str> { match self { + Self::Void => Void::static_type_name().into(), + Self::Default => DefaultValue::static_type_name().into(), Self::Boolean => Boolean::static_type_name().into(), Self::SignedInteger => SignedInteger::static_type_name().into(), Self::UnsignedInteger => UnsignedInteger::static_type_name().into(), diff --git a/crates/interpreter/src/execution/values/void.rs b/crates/interpreter/src/execution/values/void.rs index b1642d6..e71a74c 100644 --- a/crates/interpreter/src/execution/values/void.rs +++ b/crates/interpreter/src/execution/values/void.rs @@ -16,21 +16,14 @@ * program. If not, see . */ -use crate::{compile::SourceReference, execution::logging::RuntimeLog}; - -use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName}; +use super::{value_type::ValueType, Object, StaticTypeName}; #[derive(Debug, Hash, Clone, Eq, PartialEq)] pub struct Void; impl Object for Void { - fn matches_type( - &self, - _ty: &ValueType, - _log: &mut dyn RuntimeLog, - _stack_trace: &[SourceReference], - ) -> ExpressionResult { - Ok(false) + fn get_type(&self) -> ValueType { + ValueType::Void } } From 400354f62eec871be425e862eed479c049eb9481 Mon Sep 17 00:00:00 2001 From: James Carl Date: Mon, 7 Apr 2025 18:17:14 -0400 Subject: [PATCH 014/106] Implement expression statements --- crates/interpreter/src/execution/mod.rs | 63 ++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 7 deletions(-) diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index dc2cac7..8d19e9b 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -237,13 +237,23 @@ fn execute_statement( stack_trace: &mut Vec, statement: &compile::AstNode, ) -> ExpressionResult { - match &statement.node { - compile::Statement::Assign(ast_node) => todo!(), - compile::Statement::Let(ast_node) => todo!(), - compile::Statement::For(ast_node) => todo!(), - compile::Statement::Expression(ast_node) => todo!(), - compile::Statement::ClosedExpression(ast_node) => todo!(), - } + stack_trace.stack_scope( + statement.reference.clone(), + |stack_trace| match &statement.node { + compile::Statement::Assign(ast_node) => todo!(), + compile::Statement::Let(ast_node) => todo!(), + compile::Statement::For(ast_node) => todo!(), + compile::Statement::Expression(ast_node) => { + execute_expression(log, stack_trace, stack, ast_node) + } + compile::Statement::ClosedExpression(ast_node) => { + // It's the same as a normal statement, but we eat the result instead of returning + // it. + execute_expression(log, stack_trace, stack, &ast_node.node.expression) + .map(|_value| values::Void.into()) + } + }, + ) } #[cfg(test)] @@ -327,4 +337,43 @@ mod test { .unwrap(); assert_eq!(product, values::Void.into()); } + + #[test] + fn block_open_expression_statement() { + let root = compile::full_compile("test_file.ccm", "{ 5u }"); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); + assert_eq!(product, values::UnsignedInteger::from(5).into()); + } + + #[test] + fn block_closed_expression_statement() { + let root = compile::full_compile("test_file.ccm", "{ 5u; }"); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); + assert_eq!(product, values::Void.into()); + } + + #[test] + fn block_recursive_blocks() { + let root = compile::full_compile("test_file.ccm", "{ { 5u } }"); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); + assert_eq!(product, values::UnsignedInteger::from(5).into()); + } } From 86628ea53643d5b0b9671a9feadd274ea85f8725 Mon Sep 17 00:00:00 2001 From: James Carl Date: Tue, 8 Apr 2025 00:31:00 -0400 Subject: [PATCH 015/106] Add let statement --- crates/interpreter/src/compile/expressions.rs | 63 +- crates/interpreter/src/compile/statements.rs | 14 +- crates/interpreter/src/execution/mod.rs | 44 +- crates/interpreter/src/execution/stack.rs | 6 + .../tree-sitter-command-cad-model/grammar.js | 6 +- .../src/grammar.json | 42 +- .../src/node-types.json | 52 +- .../src/parser.c | 5738 ++++++++--------- .../test/corpus/assignment.txt | 4 +- .../test/corpus/closure.txt | 23 +- .../test/corpus/code_block.txt | 3 +- .../test/corpus/comments.txt | 9 +- .../test/corpus/dictionary_construction.txt | 18 +- .../test/corpus/for_loop.txt | 7 +- .../test/corpus/list.txt | 27 +- .../test/corpus/precedence.txt | 18 +- .../test/corpus/struct_definition.txt | 76 +- .../test/corpus/variable_paths.txt | 41 +- 18 files changed, 2747 insertions(+), 3444 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index cf9878e..69cc606 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -3,7 +3,7 @@ use std::{path::PathBuf, sync::Arc}; use common_data_types::{ConversionFactor, Dimension, Float, RawFloat}; use nodes::SourceFile; use tree_sitter::Range; -use type_sitter::{HasChild, IncorrectKind, Node}; +use type_sitter::{HasChild, Node}; use unwrap_enum::EnumAs; use super::{nodes, AstNode, Error, Parse, Statement}; @@ -565,15 +565,8 @@ impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for BinaryExpression { } } -#[derive(Debug, Hash, Eq, PartialEq)] -pub enum PathType { - Argument, - Local, -} - #[derive(Debug, Hash, Eq, PartialEq)] pub struct IdentityPath { - pub ty: PathType, pub path: Vec>, } @@ -583,52 +576,17 @@ impl<'t> Parse<'t, nodes::Path<'t>> for IdentityPath { input: &'i str, value: nodes::Path<'t>, ) -> Result, Error<'t, 'i>> { - let path_type = value.child()?; - - fn collect_identifiers<'t, 'i>( - file: &Arc, - input: &'i str, - identifiers: impl Iterator, IncorrectKind<'t>>>, - ) -> Result>, Error<'t, 'i>> { - let mut path = Vec::new(); + let mut cursor = value.walk(); + let mut path = Vec::new(); - for ident in identifiers { - let ident = ident?; - let text = String::parse(file, input, ident)?; + for ident in value.identifiers(&mut cursor) { + let ident = ident?; + let text = String::parse(file, input, ident)?; - path.push(text); - } - - Ok(path) + path.push(text); } - let (path_type, identifiers) = match path_type { - nodes::anon_unions::ArgumentPath_LocalPath::ArgumentPath(argument_path) => { - let mut cursor = argument_path.walk(); - - ( - PathType::Argument, - collect_identifiers(file, input, argument_path.identifiers(&mut cursor))?, - ) - } - nodes::anon_unions::ArgumentPath_LocalPath::LocalPath(local_path) => { - let mut cursor = local_path.walk(); - - ( - PathType::Local, - collect_identifiers(file, input, local_path.identifiers(&mut cursor))?, - ) - } - }; - - Ok(AstNode::new( - file, - &value, - Self { - ty: path_type, - path: identifiers, - }, - )) + Ok(AstNode::new(file, &value, Self { path })) } } @@ -1393,7 +1351,6 @@ mod test { node: Expression::Path(AstNode { reference: path.reference.clone(), node: IdentityPath { - ty: PathType::Local, path: vec![ AstNode { reference: this.reference.clone(), @@ -1424,7 +1381,6 @@ mod test { node: Expression::Path(AstNode { reference: path.reference.clone(), node: IdentityPath { - ty: PathType::Argument, path: vec![ AstNode { reference: this.reference.clone(), @@ -1654,7 +1610,6 @@ mod test { ty: AstNode { reference: one.node.ty.reference.clone(), node: IdentityPath { - ty: PathType::Local, path: vec![ AstNode { reference: one.node.ty.node.path[0].reference.clone(), @@ -1683,7 +1638,6 @@ mod test { ty: AstNode { reference: two.node.ty.reference.clone(), node: IdentityPath { - ty: PathType::Local, path: vec![ AstNode { reference: two.node.ty.node.path[0].reference.clone(), @@ -1701,7 +1655,6 @@ mod test { node: Expression::Path(AstNode { reference: two_default_path.reference.clone(), node: IdentityPath { - ty: PathType::Local, path: vec![AstNode { reference: two_default_path.node.path[0].reference.clone(), node: "a".into() diff --git a/crates/interpreter/src/compile/statements.rs b/crates/interpreter/src/compile/statements.rs index 36bc2e7..0e06361 100644 --- a/crates/interpreter/src/compile/statements.rs +++ b/crates/interpreter/src/compile/statements.rs @@ -69,7 +69,6 @@ impl<'t> Parse<'t, nodes::Assign<'t>> for Assign { #[derive(Debug, Hash, Eq, PartialEq)] pub struct Let { pub to_assign: AstNode, - pub assignment_type: AstNode, pub value: AstNode, } @@ -80,7 +79,6 @@ impl<'t> Parse<'t, nodes::Let<'t>> for Let { value: nodes::Let<'t>, ) -> Result, super::Error<'t, 'i>> { let to_assign = String::parse(file, input, value.to_assign()?)?; - let assignment_type = AssignmentType::parse(file, input, value.assignment_operator()?)?; let assigned_value = Expression::parse(file, input, value.value()?)?; Ok(AstNode::new( @@ -88,7 +86,6 @@ impl<'t> Parse<'t, nodes::Let<'t>> for Let { &value, Self { to_assign, - assignment_type, value: assigned_value, }, )) @@ -208,7 +205,7 @@ impl<'t> Parse<'t, nodes::ClosedExpression<'t>> for ClosedExpression { #[cfg(test)] mod test { - use crate::compile::{full_compile, PathType}; + use crate::compile::full_compile; use super::*; @@ -233,7 +230,6 @@ mod test { to_assign: AstNode { reference: assign.node.to_assign.reference.clone(), node: IdentityPath { - ty: PathType::Local, path: vec![ AstNode { reference: assign.node.to_assign.node.path[0] @@ -299,14 +295,6 @@ mod test { reference: let_assign.node.to_assign.reference.clone(), node: "my_value".to_string() }, - assignment_type: AstNode { - reference: let_assign - .node - .assignment_type - .reference - .clone(), - node: AssignmentType::Direct - }, value: AstNode { reference: let_assign.node.value.reference.clone(), node: Expression::Void(AstNode { diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 8d19e9b..946dfc4 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -26,7 +26,7 @@ mod logging; mod stack; pub mod values; use errors::{ErrorType, ExpressionResult, Raise}; -use logging::{RuntimeLog, StackScope}; +use logging::{LocatedStr, RuntimeLog, StackScope}; use stack::{ScopeType, Stack}; use values::{Object, Value, ValueType}; @@ -58,7 +58,27 @@ pub fn execute_expression( compile::Expression::If(ast_node) => todo!(), compile::Expression::List(ast_node) => todo!(), compile::Expression::Parenthesis(ast_node) => todo!(), - compile::Expression::Path(ast_node) => todo!(), + compile::Expression::Path(ast_node) => { + let mut path_iter = ast_node.node.path.iter(); + + // An empty path should be impossible. + let root = path_iter.next().expect("Path is empty"); + + let mut value = stack.get_variable( + stack_trace, + LocatedStr { + location: root.reference.clone(), + string: &root.node, + }, + )?; + + // Follow the chain of elements to evaluate the whole path. + for sub_path in path_iter { + todo!(); + } + + Ok(value.clone()) + } compile::Expression::ProceduralBlock(ast_node) => { execute_procedural_block(log, stack, stack_trace, ast_node) } @@ -241,7 +261,12 @@ fn execute_statement( statement.reference.clone(), |stack_trace| match &statement.node { compile::Statement::Assign(ast_node) => todo!(), - compile::Statement::Let(ast_node) => todo!(), + compile::Statement::Let(ast_node) => { + let value = execute_expression(log, stack_trace, stack, &ast_node.node.value)?; + + stack.insert_value(&ast_node.node.to_assign.node, value); + Ok(values::Void.into()) + } compile::Statement::For(ast_node) => todo!(), compile::Statement::Expression(ast_node) => { execute_expression(log, stack_trace, stack, ast_node) @@ -376,4 +401,17 @@ mod test { .unwrap(); assert_eq!(product, values::UnsignedInteger::from(5).into()); } + + #[test] + fn let_statement() { + let root = compile::full_compile("test_file.ccm", "{ let value = 5u; value }"); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); + assert_eq!(product, values::UnsignedInteger::from(5).into()); + } } diff --git a/crates/interpreter/src/execution/stack.rs b/crates/interpreter/src/execution/stack.rs index 8adba32..79c0ecd 100644 --- a/crates/interpreter/src/execution/stack.rs +++ b/crates/interpreter/src/execution/stack.rs @@ -151,6 +151,12 @@ impl Stack { self.active_scope -= 1; } + pub fn insert_value(&mut self, name: impl Into, value: Value) { + self.scopes[self.active_scope] + .variables + .insert(name.into(), value); + } + // TODO Recommending similar named variables would help users to notice typos. // https://crates.io/crates/levenshtein pub fn get_variable<'s, S: Into>>( diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index bf04125..d69e8f5 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -132,9 +132,7 @@ module.exports = grammar({ if: $ => seq('if', field('condition', $.expression), field('on_true', $.procedural_block), optional(seq('else', field('on_false', $.procedural_block)))), _variable_type: $ => field('type_path', $.path), - path: $ => choice($.local_path, $.argument_path), - argument_path: $ => seq('@', repeat(seq('.', $.identifier))), - local_path: $ => seq($.identifier, repeat(seq('.', $.identifier))), + path: $ => seq($.identifier, repeat(seq('.', $.identifier))), _declaration_type: $ => seq(':', $._variable_type), @@ -226,7 +224,7 @@ module.exports = grammar({ return choice(...operators.map((operator) => field('op', operator))); }, - let: $ => seq('let', field('to_assign', $.identifier), $.assignment_operator, field('value', $.expression), ';'), + let: $ => seq('let', field('to_assign', $.identifier), '=', field('value', $.expression), ';'), assign: $ => seq(field('to_assign', $.path), $.assignment_operator, field('value', $.expression), ';'), for: $ => seq('for', field('to_assign', $.identifier), 'in', field('to_iterate', $.expression), field('to_run', $.procedural_block)), } diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index c25f3a8..03b21d2 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -1169,44 +1169,6 @@ } }, "path": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "local_path" - }, - { - "type": "SYMBOL", - "name": "argument_path" - } - ] - }, - "argument_path": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "@" - }, - { - "type": "REPEAT", - "content": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "." - }, - { - "type": "SYMBOL", - "name": "identifier" - } - ] - } - } - ] - }, - "local_path": { "type": "SEQ", "members": [ { @@ -1850,8 +1812,8 @@ } }, { - "type": "SYMBOL", - "name": "assignment_operator" + "type": "STRING", + "value": "=" }, { "type": "FIELD", diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 66efc88..1470f4a 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -1,19 +1,4 @@ [ - { - "type": "argument_path", - "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": false, - "types": [ - { - "type": "identifier", - "named": true - } - ] - } - }, { "type": "assign", "named": true, @@ -612,16 +597,6 @@ } ] } - }, - "children": { - "multiple": false, - "required": true, - "types": [ - { - "type": "assignment_operator", - "named": true - } - ] } }, { @@ -639,21 +614,6 @@ ] } }, - { - "type": "local_path", - "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": true, - "types": [ - { - "type": "identifier", - "named": true - } - ] - } - }, { "type": "number", "named": true, @@ -684,15 +644,11 @@ "named": true, "fields": {}, "children": { - "multiple": false, + "multiple": true, "required": true, "types": [ { - "type": "argument_path", - "named": true - }, - { - "type": "local_path", + "type": "identifier", "named": true } ] @@ -1093,10 +1049,6 @@ "type": ">>=", "named": false }, - { - "type": "@", - "named": false - }, { "type": "[", "named": false diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 87f7f8f..0305612 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -5,11 +5,11 @@ #endif #define LANGUAGE_VERSION 14 -#define STATE_COUNT 176 -#define LARGE_STATE_COUNT 10 -#define SYMBOL_COUNT 117 +#define STATE_COUNT 173 +#define LARGE_STATE_COUNT 7 +#define SYMBOL_COUNT 114 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 72 +#define TOKEN_COUNT 71 #define EXTERNAL_TOKEN_COUNT 0 #define FIELD_COUNT 24 #define MAX_ALIAS_SEQUENCE_LENGTH 5 @@ -59,79 +59,76 @@ enum ts_symbol_identifiers { anon_sym_DOT_DOT_EQ = 41, anon_sym_if = 42, anon_sym_else = 43, - anon_sym_AT = 44, - anon_sym_COLON = 45, - anon_sym_LBRACK = 46, - anon_sym_COMMA = 47, - anon_sym_RBRACK = 48, - sym_varadic_dots = 49, - anon_sym_EQ = 50, - anon_sym_LBRACE = 51, - anon_sym_RBRACE = 52, - anon_sym_DASH_GT = 53, - anon_sym_SEMI = 54, - anon_sym_AMP_EQ = 55, - anon_sym_PIPE_EQ = 56, - anon_sym_CARET_EQ = 57, - anon_sym_AMP_AMP_EQ = 58, - anon_sym_PIPE_PIPE_EQ = 59, - anon_sym_CARET_CARET_EQ = 60, - anon_sym_PLUS_EQ = 61, - anon_sym_DASH_EQ = 62, - anon_sym_STAR_STAR_EQ = 63, - anon_sym_STAR_EQ = 64, - anon_sym_SLASH_SLASH_EQ = 65, - anon_sym_SLASH_EQ = 66, - anon_sym_LT_LT_EQ = 67, - anon_sym_GT_GT_EQ = 68, - anon_sym_let = 69, - anon_sym_for = 70, - anon_sym_in = 71, - sym_source_file = 72, - sym_void = 73, - sym_base_ten = 74, - sym_octal = 75, - sym_hex = 76, - sym_binary = 77, - sym_integer = 78, - sym_signed_integer = 79, - sym_unsigned_integer = 80, - sym_number = 81, - sym__float = 82, - sym__unit = 83, - sym_scalar = 84, - sym_boolean = 85, - sym_expression = 86, - sym_unary_expression = 87, - sym_binary_expression = 88, - sym_if = 89, - sym__variable_type = 90, - sym_path = 91, - sym_argument_path = 92, - sym_local_path = 93, - sym__declaration_type = 94, - sym_parenthesis = 95, - sym_list = 96, - sym_struct_member = 97, - sym__struct_final_element = 98, - sym_struct_definition = 99, - sym_dictionary_member_assignment = 100, - sym_dictionary_construction = 101, - sym_procedural_block = 102, - sym_closure_captured_variables = 103, - sym_closure_definition = 104, - sym_closed_expression = 105, - sym_statement = 106, - sym_assignment_operator = 107, - sym_let = 108, - sym_assign = 109, - sym_for = 110, - aux_sym_argument_path_repeat1 = 111, - aux_sym_list_repeat1 = 112, - aux_sym_struct_definition_repeat1 = 113, - aux_sym_dictionary_construction_repeat1 = 114, - aux_sym_procedural_block_repeat1 = 115, - aux_sym_closure_captured_variables_repeat1 = 116, + anon_sym_COLON = 44, + anon_sym_LBRACK = 45, + anon_sym_COMMA = 46, + anon_sym_RBRACK = 47, + sym_varadic_dots = 48, + anon_sym_EQ = 49, + anon_sym_LBRACE = 50, + anon_sym_RBRACE = 51, + anon_sym_DASH_GT = 52, + anon_sym_SEMI = 53, + anon_sym_AMP_EQ = 54, + anon_sym_PIPE_EQ = 55, + anon_sym_CARET_EQ = 56, + anon_sym_AMP_AMP_EQ = 57, + anon_sym_PIPE_PIPE_EQ = 58, + anon_sym_CARET_CARET_EQ = 59, + anon_sym_PLUS_EQ = 60, + anon_sym_DASH_EQ = 61, + anon_sym_STAR_STAR_EQ = 62, + anon_sym_STAR_EQ = 63, + anon_sym_SLASH_SLASH_EQ = 64, + anon_sym_SLASH_EQ = 65, + anon_sym_LT_LT_EQ = 66, + anon_sym_GT_GT_EQ = 67, + anon_sym_let = 68, + anon_sym_for = 69, + anon_sym_in = 70, + sym_source_file = 71, + sym_void = 72, + sym_base_ten = 73, + sym_octal = 74, + sym_hex = 75, + sym_binary = 76, + sym_integer = 77, + sym_signed_integer = 78, + sym_unsigned_integer = 79, + sym_number = 80, + sym__float = 81, + sym__unit = 82, + sym_scalar = 83, + sym_boolean = 84, + sym_expression = 85, + sym_unary_expression = 86, + sym_binary_expression = 87, + sym_if = 88, + sym__variable_type = 89, + sym_path = 90, + sym__declaration_type = 91, + sym_parenthesis = 92, + sym_list = 93, + sym_struct_member = 94, + sym__struct_final_element = 95, + sym_struct_definition = 96, + sym_dictionary_member_assignment = 97, + sym_dictionary_construction = 98, + sym_procedural_block = 99, + sym_closure_captured_variables = 100, + sym_closure_definition = 101, + sym_closed_expression = 102, + sym_statement = 103, + sym_assignment_operator = 104, + sym_let = 105, + sym_assign = 106, + sym_for = 107, + aux_sym_path_repeat1 = 108, + aux_sym_list_repeat1 = 109, + aux_sym_struct_definition_repeat1 = 110, + aux_sym_dictionary_construction_repeat1 = 111, + aux_sym_procedural_block_repeat1 = 112, + aux_sym_closure_captured_variables_repeat1 = 113, }; static const char * const ts_symbol_names[] = { @@ -179,7 +176,6 @@ static const char * const ts_symbol_names[] = { [anon_sym_DOT_DOT_EQ] = "..=", [anon_sym_if] = "if", [anon_sym_else] = "else", - [anon_sym_AT] = "@", [anon_sym_COLON] = ":", [anon_sym_LBRACK] = "[", [anon_sym_COMMA] = ",", @@ -227,8 +223,6 @@ static const char * const ts_symbol_names[] = { [sym_if] = "if", [sym__variable_type] = "_variable_type", [sym_path] = "path", - [sym_argument_path] = "argument_path", - [sym_local_path] = "local_path", [sym__declaration_type] = "_declaration_type", [sym_parenthesis] = "parenthesis", [sym_list] = "list", @@ -246,7 +240,7 @@ static const char * const ts_symbol_names[] = { [sym_let] = "let", [sym_assign] = "assign", [sym_for] = "for", - [aux_sym_argument_path_repeat1] = "argument_path_repeat1", + [aux_sym_path_repeat1] = "path_repeat1", [aux_sym_list_repeat1] = "list_repeat1", [aux_sym_struct_definition_repeat1] = "struct_definition_repeat1", [aux_sym_dictionary_construction_repeat1] = "dictionary_construction_repeat1", @@ -299,7 +293,6 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_DOT_DOT_EQ] = anon_sym_DOT_DOT_EQ, [anon_sym_if] = anon_sym_if, [anon_sym_else] = anon_sym_else, - [anon_sym_AT] = anon_sym_AT, [anon_sym_COLON] = anon_sym_COLON, [anon_sym_LBRACK] = anon_sym_LBRACK, [anon_sym_COMMA] = anon_sym_COMMA, @@ -347,8 +340,6 @@ static const TSSymbol ts_symbol_map[] = { [sym_if] = sym_if, [sym__variable_type] = sym__variable_type, [sym_path] = sym_path, - [sym_argument_path] = sym_argument_path, - [sym_local_path] = sym_local_path, [sym__declaration_type] = sym__declaration_type, [sym_parenthesis] = sym_parenthesis, [sym_list] = sym_list, @@ -366,7 +357,7 @@ static const TSSymbol ts_symbol_map[] = { [sym_let] = sym_let, [sym_assign] = sym_assign, [sym_for] = sym_for, - [aux_sym_argument_path_repeat1] = aux_sym_argument_path_repeat1, + [aux_sym_path_repeat1] = aux_sym_path_repeat1, [aux_sym_list_repeat1] = aux_sym_list_repeat1, [aux_sym_struct_definition_repeat1] = aux_sym_struct_definition_repeat1, [aux_sym_dictionary_construction_repeat1] = aux_sym_dictionary_construction_repeat1, @@ -551,10 +542,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, - [anon_sym_AT] = { - .visible = true, - .named = false, - }, [anon_sym_COLON] = { .visible = true, .named = false, @@ -743,14 +730,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [sym_argument_path] = { - .visible = true, - .named = true, - }, - [sym_local_path] = { - .visible = true, - .named = true, - }, [sym__declaration_type] = { .visible = false, .named = true, @@ -819,7 +798,7 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [aux_sym_argument_path_repeat1] = { + [aux_sym_path_repeat1] = { .visible = false, .named = false, }, @@ -1072,21 +1051,21 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [58] = 58, [59] = 59, [60] = 60, - [61] = 58, + [61] = 61, [62] = 62, - [63] = 53, - [64] = 43, - [65] = 65, - [66] = 60, - [67] = 59, - [68] = 44, - [69] = 45, - [70] = 46, - [71] = 48, - [72] = 49, - [73] = 50, - [74] = 57, - [75] = 65, + [63] = 56, + [64] = 44, + [65] = 45, + [66] = 46, + [67] = 47, + [68] = 48, + [69] = 49, + [70] = 50, + [71] = 51, + [72] = 52, + [73] = 53, + [74] = 54, + [75] = 75, [76] = 76, [77] = 77, [78] = 78, @@ -1095,26 +1074,26 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [81] = 81, [82] = 82, [83] = 83, - [84] = 84, + [84] = 62, [85] = 85, - [86] = 86, - [87] = 87, - [88] = 88, - [89] = 21, - [90] = 62, - [91] = 76, - [92] = 92, - [93] = 78, - [94] = 80, - [95] = 77, + [86] = 35, + [87] = 40, + [88] = 41, + [89] = 89, + [90] = 42, + [91] = 75, + [92] = 76, + [93] = 81, + [94] = 77, + [95] = 78, [96] = 79, - [97] = 81, + [97] = 80, [98] = 82, - [99] = 84, - [100] = 85, - [101] = 86, - [102] = 83, - [103] = 87, + [99] = 83, + [100] = 43, + [101] = 101, + [102] = 102, + [103] = 103, [104] = 104, [105] = 105, [106] = 106, @@ -1133,9 +1112,9 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [119] = 119, [120] = 120, [121] = 121, - [122] = 122, + [122] = 121, [123] = 123, - [124] = 123, + [124] = 124, [125] = 125, [126] = 126, [127] = 127, @@ -1183,10 +1162,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [169] = 169, [170] = 170, [171] = 171, - [172] = 172, - [173] = 173, - [174] = 174, - [175] = 161, + [172] = 166, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1205,24 +1181,23 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ')', 21, '*', 43, '+', 39, - ',', 65, + ',', 64, '-', 37, '.', 33, '/', 44, '0', 22, '1', 24, - ':', 63, - ';', 72, + ':', 62, + ';', 71, '<', 55, - '=', 68, + '=', 67, '>', 51, - '@', 62, - '[', 64, - ']', 66, + '[', 63, + ']', 65, '^', 50, - '{', 69, + '{', 68, '|', 49, - '}', 70, + '}', 69, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(16); @@ -1242,9 +1217,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '-', 35, '.', 10, '0', 23, - '@', 62, - '[', 64, - '{', 69, + '[', 63, + '{', 68, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(16); @@ -1296,16 +1270,16 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead != 0) ADVANCE(7); END_STATE(); case 9: - if (lookahead == '.') ADVANCE(67); + if (lookahead == '.') ADVANCE(66); END_STATE(); case 10: if (lookahead == '.') ADVANCE(9); END_STATE(); case 11: - if (lookahead == '=') ADVANCE(78); + if (lookahead == '=') ADVANCE(77); END_STATE(); case 12: - if (lookahead == '>') ADVANCE(71); + if (lookahead == '>') ADVANCE(70); END_STATE(); case 13: if (eof) ADVANCE(14); @@ -1319,23 +1293,22 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ')', 21, '*', 43, '+', 39, - ',', 65, + ',', 64, '-', 36, '.', 34, '/', 44, '0', 23, - ':', 63, - ';', 72, + ':', 62, + ';', 71, '<', 55, - '=', 68, + '=', 67, '>', 51, - '@', 62, - '[', 64, - ']', 66, + '[', 63, + ']', 65, '^', 50, - '{', 69, + '{', 68, '|', 49, - '}', 70, + '}', 69, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(16); @@ -1445,19 +1418,19 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 36: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '=') ADVANCE(80); + if (lookahead == '=') ADVANCE(79); END_STATE(); case 37: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '=') ADVANCE(80); - if (lookahead == '>') ADVANCE(71); + if (lookahead == '=') ADVANCE(79); + if (lookahead == '>') ADVANCE(70); END_STATE(); case 38: ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); case 39: ACCEPT_TOKEN(anon_sym_PLUS); - if (lookahead == '=') ADVANCE(79); + if (lookahead == '=') ADVANCE(78); END_STATE(); case 40: ACCEPT_TOKEN(anon_sym_BANG); @@ -1468,43 +1441,43 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 42: ACCEPT_TOKEN(anon_sym_STAR_STAR); - if (lookahead == '=') ADVANCE(81); + if (lookahead == '=') ADVANCE(80); END_STATE(); case 43: ACCEPT_TOKEN(anon_sym_STAR); if (lookahead == '*') ADVANCE(42); - if (lookahead == '=') ADVANCE(82); + if (lookahead == '=') ADVANCE(81); END_STATE(); case 44: ACCEPT_TOKEN(anon_sym_SLASH); if (lookahead == '/') ADVANCE(45); - if (lookahead == '=') ADVANCE(84); + if (lookahead == '=') ADVANCE(83); END_STATE(); case 45: ACCEPT_TOKEN(anon_sym_SLASH_SLASH); - if (lookahead == '=') ADVANCE(83); + if (lookahead == '=') ADVANCE(82); END_STATE(); case 46: ACCEPT_TOKEN(anon_sym_LT_LT); - if (lookahead == '=') ADVANCE(85); + if (lookahead == '=') ADVANCE(84); END_STATE(); case 47: ACCEPT_TOKEN(anon_sym_GT_GT); - if (lookahead == '=') ADVANCE(86); + if (lookahead == '=') ADVANCE(85); END_STATE(); case 48: ACCEPT_TOKEN(anon_sym_AMP); if (lookahead == '&') ADVANCE(57); - if (lookahead == '=') ADVANCE(73); + if (lookahead == '=') ADVANCE(72); END_STATE(); case 49: ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '=') ADVANCE(74); + if (lookahead == '=') ADVANCE(73); if (lookahead == '|') ADVANCE(58); END_STATE(); case 50: ACCEPT_TOKEN(anon_sym_CARET); - if (lookahead == '=') ADVANCE(75); + if (lookahead == '=') ADVANCE(74); if (lookahead == '^') ADVANCE(11); END_STATE(); case 51: @@ -1531,15 +1504,15 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 57: ACCEPT_TOKEN(anon_sym_AMP_AMP); - if (lookahead == '=') ADVANCE(76); + if (lookahead == '=') ADVANCE(75); END_STATE(); case 58: ACCEPT_TOKEN(anon_sym_PIPE_PIPE); - if (lookahead == '=') ADVANCE(77); + if (lookahead == '=') ADVANCE(76); END_STATE(); case 59: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '.') ADVANCE(67); + if (lookahead == '.') ADVANCE(66); if (lookahead == '=') ADVANCE(61); END_STATE(); case 60: @@ -1550,79 +1523,76 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); END_STATE(); case 62: - ACCEPT_TOKEN(anon_sym_AT); - END_STATE(); - case 63: ACCEPT_TOKEN(anon_sym_COLON); END_STATE(); - case 64: + case 63: ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); - case 65: + case 64: ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); - case 66: + case 65: ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); - case 67: + case 66: ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); - case 68: + case 67: ACCEPT_TOKEN(anon_sym_EQ); if (lookahead == '=') ADVANCE(53); END_STATE(); - case 69: + case 68: ACCEPT_TOKEN(anon_sym_LBRACE); END_STATE(); - case 70: + case 69: ACCEPT_TOKEN(anon_sym_RBRACE); END_STATE(); - case 71: + case 70: ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); - case 72: + case 71: ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); - case 73: + case 72: ACCEPT_TOKEN(anon_sym_AMP_EQ); END_STATE(); - case 74: + case 73: ACCEPT_TOKEN(anon_sym_PIPE_EQ); END_STATE(); - case 75: + case 74: ACCEPT_TOKEN(anon_sym_CARET_EQ); END_STATE(); - case 76: + case 75: ACCEPT_TOKEN(anon_sym_AMP_AMP_EQ); END_STATE(); - case 77: + case 76: ACCEPT_TOKEN(anon_sym_PIPE_PIPE_EQ); END_STATE(); - case 78: + case 77: ACCEPT_TOKEN(anon_sym_CARET_CARET_EQ); END_STATE(); - case 79: + case 78: ACCEPT_TOKEN(anon_sym_PLUS_EQ); END_STATE(); - case 80: + case 79: ACCEPT_TOKEN(anon_sym_DASH_EQ); END_STATE(); - case 81: + case 80: ACCEPT_TOKEN(anon_sym_STAR_STAR_EQ); END_STATE(); - case 82: + case 81: ACCEPT_TOKEN(anon_sym_STAR_EQ); END_STATE(); - case 83: + case 82: ACCEPT_TOKEN(anon_sym_SLASH_SLASH_EQ); END_STATE(); - case 84: + case 83: ACCEPT_TOKEN(anon_sym_SLASH_EQ); END_STATE(); - case 85: + case 84: ACCEPT_TOKEN(anon_sym_LT_LT_EQ); END_STATE(); - case 86: + case 85: ACCEPT_TOKEN(anon_sym_GT_GT_EQ); END_STATE(); default: @@ -1756,10 +1726,10 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [7] = {.lex_state = 13}, [8] = {.lex_state = 13}, [9] = {.lex_state = 13}, - [10] = {.lex_state = 13}, + [10] = {.lex_state = 1}, [11] = {.lex_state = 13}, [12] = {.lex_state = 13}, - [13] = {.lex_state = 1}, + [13] = {.lex_state = 13}, [14] = {.lex_state = 13}, [15] = {.lex_state = 13}, [16] = {.lex_state = 13}, @@ -1865,25 +1835,25 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [116] = {.lex_state = 13}, [117] = {.lex_state = 13}, [118] = {.lex_state = 13}, - [119] = {.lex_state = 13}, - [120] = {.lex_state = 13}, - [121] = {.lex_state = 13}, + [119] = {.lex_state = 1}, + [120] = {.lex_state = 1}, + [121] = {.lex_state = 0}, [122] = {.lex_state = 0}, - [123] = {.lex_state = 0}, + [123] = {.lex_state = 1}, [124] = {.lex_state = 0}, - [125] = {.lex_state = 1}, + [125] = {.lex_state = 0}, [126] = {.lex_state = 0}, - [127] = {.lex_state = 1}, - [128] = {.lex_state = 1}, + [127] = {.lex_state = 0}, + [128] = {.lex_state = 0}, [129] = {.lex_state = 0}, [130] = {.lex_state = 0}, - [131] = {.lex_state = 0}, + [131] = {.lex_state = 1}, [132] = {.lex_state = 0}, [133] = {.lex_state = 0}, [134] = {.lex_state = 0}, [135] = {.lex_state = 0}, [136] = {.lex_state = 0}, - [137] = {.lex_state = 1}, + [137] = {.lex_state = 0}, [138] = {.lex_state = 0}, [139] = {.lex_state = 0}, [140] = {.lex_state = 0}, @@ -1892,36 +1862,33 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [143] = {.lex_state = 0}, [144] = {.lex_state = 0}, [145] = {.lex_state = 0}, - [146] = {.lex_state = 0}, + [146] = {.lex_state = 4}, [147] = {.lex_state = 0}, [148] = {.lex_state = 0}, [149] = {.lex_state = 0}, - [150] = {.lex_state = 4}, + [150] = {.lex_state = 0}, [151] = {.lex_state = 0}, [152] = {.lex_state = 0}, - [153] = {.lex_state = 0}, + [153] = {.lex_state = 4}, [154] = {.lex_state = 0}, - [155] = {.lex_state = 0}, - [156] = {.lex_state = 0}, - [157] = {.lex_state = 4}, - [158] = {.lex_state = 0}, - [159] = {.lex_state = 5}, + [155] = {.lex_state = 4}, + [156] = {.lex_state = 5}, + [157] = {.lex_state = 6}, + [158] = {.lex_state = 4}, + [159] = {.lex_state = 0}, [160] = {.lex_state = 0}, - [161] = {.lex_state = 4}, + [161] = {.lex_state = 0}, [162] = {.lex_state = 0}, [163] = {.lex_state = 0}, - [164] = {.lex_state = 4}, + [164] = {.lex_state = 0}, [165] = {.lex_state = 0}, - [166] = {.lex_state = 0}, - [167] = {.lex_state = 6}, + [166] = {.lex_state = 4}, + [167] = {.lex_state = 4}, [168] = {.lex_state = 0}, [169] = {.lex_state = 0}, - [170] = {.lex_state = 4}, + [170] = {.lex_state = 0}, [171] = {.lex_state = 0}, - [172] = {.lex_state = 0}, - [173] = {.lex_state = 4}, - [174] = {.lex_state = 0}, - [175] = {.lex_state = 4}, + [172] = {.lex_state = 4}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -1969,7 +1936,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_DOT_DOT_EQ] = ACTIONS(1), [anon_sym_if] = ACTIONS(1), [anon_sym_else] = ACTIONS(1), - [anon_sym_AT] = ACTIONS(1), [anon_sym_COLON] = ACTIONS(1), [anon_sym_LBRACK] = ACTIONS(1), [anon_sym_COMMA] = ACTIONS(1), @@ -1999,32 +1965,30 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_in] = ACTIONS(1), }, [1] = { - [sym_source_file] = STATE(168), - [sym_void] = STATE(91), + [sym_source_file] = STATE(159), + [sym_void] = STATE(88), [sym_base_ten] = STATE(138), [sym_octal] = STATE(138), [sym_hex] = STATE(138), [sym_binary] = STATE(138), - [sym_integer] = STATE(153), - [sym_signed_integer] = STATE(25), - [sym_unsigned_integer] = STATE(25), - [sym_number] = STATE(14), - [sym__float] = STATE(90), - [sym_scalar] = STATE(25), - [sym_boolean] = STATE(25), - [sym_expression] = STATE(112), - [sym_unary_expression] = STATE(25), - [sym_binary_expression] = STATE(25), - [sym_if] = STATE(25), - [sym_path] = STATE(91), - [sym_argument_path] = STATE(8), - [sym_local_path] = STATE(8), - [sym_parenthesis] = STATE(25), - [sym_list] = STATE(25), - [sym_struct_definition] = STATE(91), - [sym_dictionary_construction] = STATE(25), - [sym_procedural_block] = STATE(25), - [sym_closure_definition] = STATE(25), + [sym_integer] = STATE(142), + [sym_signed_integer] = STATE(20), + [sym_unsigned_integer] = STATE(20), + [sym_number] = STATE(11), + [sym__float] = STATE(87), + [sym_scalar] = STATE(20), + [sym_boolean] = STATE(20), + [sym_expression] = STATE(111), + [sym_unary_expression] = STATE(20), + [sym_binary_expression] = STATE(20), + [sym_if] = STATE(20), + [sym_path] = STATE(88), + [sym_parenthesis] = STATE(20), + [sym_list] = STATE(20), + [sym_struct_definition] = STATE(88), + [sym_dictionary_construction] = STATE(20), + [sym_procedural_block] = STATE(20), + [sym_closure_definition] = STATE(20), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2041,587 +2005,383 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_PLUS] = ACTIONS(23), [anon_sym_BANG] = ACTIONS(23), [anon_sym_if] = ACTIONS(25), - [anon_sym_AT] = ACTIONS(27), - [anon_sym_LBRACK] = ACTIONS(29), - [anon_sym_LBRACE] = ACTIONS(31), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_LBRACE] = ACTIONS(29), }, [2] = { - [aux_sym_argument_path_repeat1] = STATE(5), - [ts_builtin_sym_end] = ACTIONS(33), - [sym_identifier] = ACTIONS(35), + [aux_sym_path_repeat1] = STATE(2), + [ts_builtin_sym_end] = ACTIONS(31), + [sym_identifier] = ACTIONS(33), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(33), - [sym_default] = ACTIONS(35), - [anon_sym_LPAREN] = ACTIONS(33), - [anon_sym_RPAREN] = ACTIONS(33), - [aux_sym_base_ten_token1] = ACTIONS(35), - [aux_sym_octal_token1] = ACTIONS(33), - [aux_sym_hex_token1] = ACTIONS(33), - [aux_sym_binary_token1] = ACTIONS(33), - [anon_sym_DOT] = ACTIONS(37), - [sym_true] = ACTIONS(35), - [sym_false] = ACTIONS(35), - [anon_sym_DASH] = ACTIONS(35), - [anon_sym_PLUS] = ACTIONS(35), - [anon_sym_BANG] = ACTIONS(35), - [anon_sym_STAR_STAR] = ACTIONS(35), - [anon_sym_STAR] = ACTIONS(35), - [anon_sym_SLASH] = ACTIONS(35), - [anon_sym_SLASH_SLASH] = ACTIONS(35), - [anon_sym_LT_LT] = ACTIONS(35), - [anon_sym_GT_GT] = ACTIONS(35), - [anon_sym_AMP] = ACTIONS(35), - [anon_sym_PIPE] = ACTIONS(35), - [anon_sym_CARET] = ACTIONS(35), - [anon_sym_GT] = ACTIONS(35), - [anon_sym_GT_EQ] = ACTIONS(33), - [anon_sym_EQ_EQ] = ACTIONS(33), - [anon_sym_LT_EQ] = ACTIONS(33), - [anon_sym_LT] = ACTIONS(35), - [anon_sym_BANG_EQ] = ACTIONS(33), - [anon_sym_AMP_AMP] = ACTIONS(35), - [anon_sym_PIPE_PIPE] = ACTIONS(35), - [anon_sym_DOT_DOT] = ACTIONS(35), - [anon_sym_DOT_DOT_EQ] = ACTIONS(33), - [anon_sym_if] = ACTIONS(35), - [anon_sym_AT] = ACTIONS(33), - [anon_sym_LBRACK] = ACTIONS(33), - [anon_sym_COMMA] = ACTIONS(33), - [anon_sym_RBRACK] = ACTIONS(33), - [anon_sym_EQ] = ACTIONS(35), - [anon_sym_LBRACE] = ACTIONS(33), - [anon_sym_RBRACE] = ACTIONS(33), - [anon_sym_SEMI] = ACTIONS(33), - [anon_sym_AMP_EQ] = ACTIONS(33), - [anon_sym_PIPE_EQ] = ACTIONS(33), - [anon_sym_CARET_EQ] = ACTIONS(33), - [anon_sym_AMP_AMP_EQ] = ACTIONS(33), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(33), - [anon_sym_CARET_CARET_EQ] = ACTIONS(33), - [anon_sym_PLUS_EQ] = ACTIONS(33), - [anon_sym_DASH_EQ] = ACTIONS(33), - [anon_sym_STAR_STAR_EQ] = ACTIONS(33), - [anon_sym_STAR_EQ] = ACTIONS(33), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(33), - [anon_sym_SLASH_EQ] = ACTIONS(33), - [anon_sym_LT_LT_EQ] = ACTIONS(33), - [anon_sym_GT_GT_EQ] = ACTIONS(33), - [anon_sym_let] = ACTIONS(35), - [anon_sym_for] = ACTIONS(35), + [sym_string] = ACTIONS(31), + [sym_default] = ACTIONS(33), + [anon_sym_LPAREN] = ACTIONS(31), + [anon_sym_RPAREN] = ACTIONS(31), + [aux_sym_base_ten_token1] = ACTIONS(33), + [aux_sym_octal_token1] = ACTIONS(31), + [aux_sym_hex_token1] = ACTIONS(31), + [aux_sym_binary_token1] = ACTIONS(31), + [anon_sym_DOT] = ACTIONS(35), + [sym_true] = ACTIONS(33), + [sym_false] = ACTIONS(33), + [anon_sym_DASH] = ACTIONS(33), + [anon_sym_PLUS] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(33), + [anon_sym_STAR_STAR] = ACTIONS(33), + [anon_sym_STAR] = ACTIONS(33), + [anon_sym_SLASH] = ACTIONS(33), + [anon_sym_SLASH_SLASH] = ACTIONS(33), + [anon_sym_LT_LT] = ACTIONS(33), + [anon_sym_GT_GT] = ACTIONS(33), + [anon_sym_AMP] = ACTIONS(33), + [anon_sym_PIPE] = ACTIONS(33), + [anon_sym_CARET] = ACTIONS(33), + [anon_sym_GT] = ACTIONS(33), + [anon_sym_GT_EQ] = ACTIONS(31), + [anon_sym_EQ_EQ] = ACTIONS(31), + [anon_sym_LT_EQ] = ACTIONS(31), + [anon_sym_LT] = ACTIONS(33), + [anon_sym_BANG_EQ] = ACTIONS(31), + [anon_sym_AMP_AMP] = ACTIONS(33), + [anon_sym_PIPE_PIPE] = ACTIONS(33), + [anon_sym_DOT_DOT] = ACTIONS(33), + [anon_sym_DOT_DOT_EQ] = ACTIONS(31), + [anon_sym_if] = ACTIONS(33), + [anon_sym_LBRACK] = ACTIONS(31), + [anon_sym_COMMA] = ACTIONS(31), + [anon_sym_RBRACK] = ACTIONS(31), + [anon_sym_EQ] = ACTIONS(33), + [anon_sym_LBRACE] = ACTIONS(31), + [anon_sym_RBRACE] = ACTIONS(31), + [anon_sym_SEMI] = ACTIONS(31), + [anon_sym_AMP_EQ] = ACTIONS(31), + [anon_sym_PIPE_EQ] = ACTIONS(31), + [anon_sym_CARET_EQ] = ACTIONS(31), + [anon_sym_AMP_AMP_EQ] = ACTIONS(31), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(31), + [anon_sym_CARET_CARET_EQ] = ACTIONS(31), + [anon_sym_PLUS_EQ] = ACTIONS(31), + [anon_sym_DASH_EQ] = ACTIONS(31), + [anon_sym_STAR_STAR_EQ] = ACTIONS(31), + [anon_sym_STAR_EQ] = ACTIONS(31), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(31), + [anon_sym_SLASH_EQ] = ACTIONS(31), + [anon_sym_LT_LT_EQ] = ACTIONS(31), + [anon_sym_GT_GT_EQ] = ACTIONS(31), + [anon_sym_let] = ACTIONS(33), + [anon_sym_for] = ACTIONS(33), }, [3] = { - [aux_sym_argument_path_repeat1] = STATE(4), - [ts_builtin_sym_end] = ACTIONS(39), - [sym_identifier] = ACTIONS(41), + [aux_sym_path_repeat1] = STATE(4), + [ts_builtin_sym_end] = ACTIONS(38), + [sym_identifier] = ACTIONS(40), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(39), - [sym_default] = ACTIONS(41), - [anon_sym_LPAREN] = ACTIONS(39), - [anon_sym_RPAREN] = ACTIONS(39), - [aux_sym_base_ten_token1] = ACTIONS(41), - [aux_sym_octal_token1] = ACTIONS(39), - [aux_sym_hex_token1] = ACTIONS(39), - [aux_sym_binary_token1] = ACTIONS(39), - [anon_sym_DOT] = ACTIONS(37), - [sym_true] = ACTIONS(41), - [sym_false] = ACTIONS(41), - [anon_sym_DASH] = ACTIONS(41), - [anon_sym_PLUS] = ACTIONS(41), - [anon_sym_BANG] = ACTIONS(41), - [anon_sym_STAR_STAR] = ACTIONS(41), - [anon_sym_STAR] = ACTIONS(41), - [anon_sym_SLASH] = ACTIONS(41), - [anon_sym_SLASH_SLASH] = ACTIONS(41), - [anon_sym_LT_LT] = ACTIONS(41), - [anon_sym_GT_GT] = ACTIONS(41), - [anon_sym_AMP] = ACTIONS(41), - [anon_sym_PIPE] = ACTIONS(41), - [anon_sym_CARET] = ACTIONS(41), - [anon_sym_GT] = ACTIONS(41), - [anon_sym_GT_EQ] = ACTIONS(39), - [anon_sym_EQ_EQ] = ACTIONS(39), - [anon_sym_LT_EQ] = ACTIONS(39), - [anon_sym_LT] = ACTIONS(41), - [anon_sym_BANG_EQ] = ACTIONS(39), - [anon_sym_AMP_AMP] = ACTIONS(41), - [anon_sym_PIPE_PIPE] = ACTIONS(41), - [anon_sym_DOT_DOT] = ACTIONS(41), - [anon_sym_DOT_DOT_EQ] = ACTIONS(39), - [anon_sym_if] = ACTIONS(41), - [anon_sym_AT] = ACTIONS(39), - [anon_sym_LBRACK] = ACTIONS(39), - [anon_sym_COMMA] = ACTIONS(39), - [anon_sym_RBRACK] = ACTIONS(39), - [anon_sym_EQ] = ACTIONS(41), - [anon_sym_LBRACE] = ACTIONS(39), - [anon_sym_RBRACE] = ACTIONS(39), - [anon_sym_SEMI] = ACTIONS(39), - [anon_sym_AMP_EQ] = ACTIONS(39), - [anon_sym_PIPE_EQ] = ACTIONS(39), - [anon_sym_CARET_EQ] = ACTIONS(39), - [anon_sym_AMP_AMP_EQ] = ACTIONS(39), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(39), - [anon_sym_CARET_CARET_EQ] = ACTIONS(39), - [anon_sym_PLUS_EQ] = ACTIONS(39), - [anon_sym_DASH_EQ] = ACTIONS(39), - [anon_sym_STAR_STAR_EQ] = ACTIONS(39), - [anon_sym_STAR_EQ] = ACTIONS(39), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(39), - [anon_sym_SLASH_EQ] = ACTIONS(39), - [anon_sym_LT_LT_EQ] = ACTIONS(39), - [anon_sym_GT_GT_EQ] = ACTIONS(39), - [anon_sym_let] = ACTIONS(41), - [anon_sym_for] = ACTIONS(41), + [sym_string] = ACTIONS(38), + [sym_default] = ACTIONS(40), + [anon_sym_LPAREN] = ACTIONS(38), + [anon_sym_RPAREN] = ACTIONS(38), + [aux_sym_base_ten_token1] = ACTIONS(40), + [aux_sym_octal_token1] = ACTIONS(38), + [aux_sym_hex_token1] = ACTIONS(38), + [aux_sym_binary_token1] = ACTIONS(38), + [anon_sym_DOT] = ACTIONS(42), + [sym_true] = ACTIONS(40), + [sym_false] = ACTIONS(40), + [anon_sym_DASH] = ACTIONS(40), + [anon_sym_PLUS] = ACTIONS(40), + [anon_sym_BANG] = ACTIONS(40), + [anon_sym_STAR_STAR] = ACTIONS(40), + [anon_sym_STAR] = ACTIONS(40), + [anon_sym_SLASH] = ACTIONS(40), + [anon_sym_SLASH_SLASH] = ACTIONS(40), + [anon_sym_LT_LT] = ACTIONS(40), + [anon_sym_GT_GT] = ACTIONS(40), + [anon_sym_AMP] = ACTIONS(40), + [anon_sym_PIPE] = ACTIONS(40), + [anon_sym_CARET] = ACTIONS(40), + [anon_sym_GT] = ACTIONS(40), + [anon_sym_GT_EQ] = ACTIONS(38), + [anon_sym_EQ_EQ] = ACTIONS(38), + [anon_sym_LT_EQ] = ACTIONS(38), + [anon_sym_LT] = ACTIONS(40), + [anon_sym_BANG_EQ] = ACTIONS(38), + [anon_sym_AMP_AMP] = ACTIONS(40), + [anon_sym_PIPE_PIPE] = ACTIONS(40), + [anon_sym_DOT_DOT] = ACTIONS(40), + [anon_sym_DOT_DOT_EQ] = ACTIONS(38), + [anon_sym_if] = ACTIONS(40), + [anon_sym_LBRACK] = ACTIONS(38), + [anon_sym_COMMA] = ACTIONS(38), + [anon_sym_RBRACK] = ACTIONS(38), + [anon_sym_EQ] = ACTIONS(40), + [anon_sym_LBRACE] = ACTIONS(38), + [anon_sym_RBRACE] = ACTIONS(38), + [anon_sym_SEMI] = ACTIONS(38), + [anon_sym_AMP_EQ] = ACTIONS(38), + [anon_sym_PIPE_EQ] = ACTIONS(38), + [anon_sym_CARET_EQ] = ACTIONS(38), + [anon_sym_AMP_AMP_EQ] = ACTIONS(38), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(38), + [anon_sym_CARET_CARET_EQ] = ACTIONS(38), + [anon_sym_PLUS_EQ] = ACTIONS(38), + [anon_sym_DASH_EQ] = ACTIONS(38), + [anon_sym_STAR_STAR_EQ] = ACTIONS(38), + [anon_sym_STAR_EQ] = ACTIONS(38), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(38), + [anon_sym_SLASH_EQ] = ACTIONS(38), + [anon_sym_LT_LT_EQ] = ACTIONS(38), + [anon_sym_GT_GT_EQ] = ACTIONS(38), + [anon_sym_let] = ACTIONS(40), + [anon_sym_for] = ACTIONS(40), }, [4] = { - [aux_sym_argument_path_repeat1] = STATE(6), - [ts_builtin_sym_end] = ACTIONS(43), - [sym_identifier] = ACTIONS(45), + [aux_sym_path_repeat1] = STATE(2), + [ts_builtin_sym_end] = ACTIONS(44), + [sym_identifier] = ACTIONS(46), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(43), - [sym_default] = ACTIONS(45), - [anon_sym_LPAREN] = ACTIONS(43), - [anon_sym_RPAREN] = ACTIONS(43), - [aux_sym_base_ten_token1] = ACTIONS(45), - [aux_sym_octal_token1] = ACTIONS(43), - [aux_sym_hex_token1] = ACTIONS(43), - [aux_sym_binary_token1] = ACTIONS(43), - [anon_sym_DOT] = ACTIONS(37), - [sym_true] = ACTIONS(45), - [sym_false] = ACTIONS(45), - [anon_sym_DASH] = ACTIONS(45), - [anon_sym_PLUS] = ACTIONS(45), - [anon_sym_BANG] = ACTIONS(45), - [anon_sym_STAR_STAR] = ACTIONS(45), - [anon_sym_STAR] = ACTIONS(45), - [anon_sym_SLASH] = ACTIONS(45), - [anon_sym_SLASH_SLASH] = ACTIONS(45), - [anon_sym_LT_LT] = ACTIONS(45), - [anon_sym_GT_GT] = ACTIONS(45), - [anon_sym_AMP] = ACTIONS(45), - [anon_sym_PIPE] = ACTIONS(45), - [anon_sym_CARET] = ACTIONS(45), - [anon_sym_GT] = ACTIONS(45), - [anon_sym_GT_EQ] = ACTIONS(43), - [anon_sym_EQ_EQ] = ACTIONS(43), - [anon_sym_LT_EQ] = ACTIONS(43), - [anon_sym_LT] = ACTIONS(45), - [anon_sym_BANG_EQ] = ACTIONS(43), - [anon_sym_AMP_AMP] = ACTIONS(45), - [anon_sym_PIPE_PIPE] = ACTIONS(45), - [anon_sym_DOT_DOT] = ACTIONS(45), - [anon_sym_DOT_DOT_EQ] = ACTIONS(43), - [anon_sym_if] = ACTIONS(45), - [anon_sym_AT] = ACTIONS(43), - [anon_sym_LBRACK] = ACTIONS(43), - [anon_sym_COMMA] = ACTIONS(43), - [anon_sym_RBRACK] = ACTIONS(43), - [anon_sym_EQ] = ACTIONS(45), - [anon_sym_LBRACE] = ACTIONS(43), - [anon_sym_RBRACE] = ACTIONS(43), - [anon_sym_SEMI] = ACTIONS(43), - [anon_sym_AMP_EQ] = ACTIONS(43), - [anon_sym_PIPE_EQ] = ACTIONS(43), - [anon_sym_CARET_EQ] = ACTIONS(43), - [anon_sym_AMP_AMP_EQ] = ACTIONS(43), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(43), - [anon_sym_CARET_CARET_EQ] = ACTIONS(43), - [anon_sym_PLUS_EQ] = ACTIONS(43), - [anon_sym_DASH_EQ] = ACTIONS(43), - [anon_sym_STAR_STAR_EQ] = ACTIONS(43), - [anon_sym_STAR_EQ] = ACTIONS(43), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(43), - [anon_sym_SLASH_EQ] = ACTIONS(43), - [anon_sym_LT_LT_EQ] = ACTIONS(43), - [anon_sym_GT_GT_EQ] = ACTIONS(43), - [anon_sym_let] = ACTIONS(45), - [anon_sym_for] = ACTIONS(45), + [sym_string] = ACTIONS(44), + [sym_default] = ACTIONS(46), + [anon_sym_LPAREN] = ACTIONS(44), + [anon_sym_RPAREN] = ACTIONS(44), + [aux_sym_base_ten_token1] = ACTIONS(46), + [aux_sym_octal_token1] = ACTIONS(44), + [aux_sym_hex_token1] = ACTIONS(44), + [aux_sym_binary_token1] = ACTIONS(44), + [anon_sym_DOT] = ACTIONS(42), + [sym_true] = ACTIONS(46), + [sym_false] = ACTIONS(46), + [anon_sym_DASH] = ACTIONS(46), + [anon_sym_PLUS] = ACTIONS(46), + [anon_sym_BANG] = ACTIONS(46), + [anon_sym_STAR_STAR] = ACTIONS(46), + [anon_sym_STAR] = ACTIONS(46), + [anon_sym_SLASH] = ACTIONS(46), + [anon_sym_SLASH_SLASH] = ACTIONS(46), + [anon_sym_LT_LT] = ACTIONS(46), + [anon_sym_GT_GT] = ACTIONS(46), + [anon_sym_AMP] = ACTIONS(46), + [anon_sym_PIPE] = ACTIONS(46), + [anon_sym_CARET] = ACTIONS(46), + [anon_sym_GT] = ACTIONS(46), + [anon_sym_GT_EQ] = ACTIONS(44), + [anon_sym_EQ_EQ] = ACTIONS(44), + [anon_sym_LT_EQ] = ACTIONS(44), + [anon_sym_LT] = ACTIONS(46), + [anon_sym_BANG_EQ] = ACTIONS(44), + [anon_sym_AMP_AMP] = ACTIONS(46), + [anon_sym_PIPE_PIPE] = ACTIONS(46), + [anon_sym_DOT_DOT] = ACTIONS(46), + [anon_sym_DOT_DOT_EQ] = ACTIONS(44), + [anon_sym_if] = ACTIONS(46), + [anon_sym_LBRACK] = ACTIONS(44), + [anon_sym_COMMA] = ACTIONS(44), + [anon_sym_RBRACK] = ACTIONS(44), + [anon_sym_EQ] = ACTIONS(46), + [anon_sym_LBRACE] = ACTIONS(44), + [anon_sym_RBRACE] = ACTIONS(44), + [anon_sym_SEMI] = ACTIONS(44), + [anon_sym_AMP_EQ] = ACTIONS(44), + [anon_sym_PIPE_EQ] = ACTIONS(44), + [anon_sym_CARET_EQ] = ACTIONS(44), + [anon_sym_AMP_AMP_EQ] = ACTIONS(44), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(44), + [anon_sym_CARET_CARET_EQ] = ACTIONS(44), + [anon_sym_PLUS_EQ] = ACTIONS(44), + [anon_sym_DASH_EQ] = ACTIONS(44), + [anon_sym_STAR_STAR_EQ] = ACTIONS(44), + [anon_sym_STAR_EQ] = ACTIONS(44), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(44), + [anon_sym_SLASH_EQ] = ACTIONS(44), + [anon_sym_LT_LT_EQ] = ACTIONS(44), + [anon_sym_GT_GT_EQ] = ACTIONS(44), + [anon_sym_let] = ACTIONS(46), + [anon_sym_for] = ACTIONS(46), }, [5] = { - [aux_sym_argument_path_repeat1] = STATE(6), - [ts_builtin_sym_end] = ACTIONS(47), - [sym_identifier] = ACTIONS(49), + [ts_builtin_sym_end] = ACTIONS(31), + [sym_identifier] = ACTIONS(33), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(47), - [sym_default] = ACTIONS(49), - [anon_sym_LPAREN] = ACTIONS(47), - [anon_sym_RPAREN] = ACTIONS(47), - [aux_sym_base_ten_token1] = ACTIONS(49), - [aux_sym_octal_token1] = ACTIONS(47), - [aux_sym_hex_token1] = ACTIONS(47), - [aux_sym_binary_token1] = ACTIONS(47), - [anon_sym_DOT] = ACTIONS(37), - [sym_true] = ACTIONS(49), - [sym_false] = ACTIONS(49), - [anon_sym_DASH] = ACTIONS(49), - [anon_sym_PLUS] = ACTIONS(49), - [anon_sym_BANG] = ACTIONS(49), - [anon_sym_STAR_STAR] = ACTIONS(49), - [anon_sym_STAR] = ACTIONS(49), - [anon_sym_SLASH] = ACTIONS(49), - [anon_sym_SLASH_SLASH] = ACTIONS(49), - [anon_sym_LT_LT] = ACTIONS(49), - [anon_sym_GT_GT] = ACTIONS(49), - [anon_sym_AMP] = ACTIONS(49), - [anon_sym_PIPE] = ACTIONS(49), - [anon_sym_CARET] = ACTIONS(49), - [anon_sym_GT] = ACTIONS(49), - [anon_sym_GT_EQ] = ACTIONS(47), - [anon_sym_EQ_EQ] = ACTIONS(47), - [anon_sym_LT_EQ] = ACTIONS(47), - [anon_sym_LT] = ACTIONS(49), - [anon_sym_BANG_EQ] = ACTIONS(47), - [anon_sym_AMP_AMP] = ACTIONS(49), - [anon_sym_PIPE_PIPE] = ACTIONS(49), - [anon_sym_DOT_DOT] = ACTIONS(49), - [anon_sym_DOT_DOT_EQ] = ACTIONS(47), - [anon_sym_if] = ACTIONS(49), - [anon_sym_AT] = ACTIONS(47), - [anon_sym_LBRACK] = ACTIONS(47), - [anon_sym_COMMA] = ACTIONS(47), - [anon_sym_RBRACK] = ACTIONS(47), - [anon_sym_EQ] = ACTIONS(49), - [anon_sym_LBRACE] = ACTIONS(47), - [anon_sym_RBRACE] = ACTIONS(47), - [anon_sym_SEMI] = ACTIONS(47), - [anon_sym_AMP_EQ] = ACTIONS(47), - [anon_sym_PIPE_EQ] = ACTIONS(47), - [anon_sym_CARET_EQ] = ACTIONS(47), - [anon_sym_AMP_AMP_EQ] = ACTIONS(47), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(47), - [anon_sym_CARET_CARET_EQ] = ACTIONS(47), - [anon_sym_PLUS_EQ] = ACTIONS(47), - [anon_sym_DASH_EQ] = ACTIONS(47), - [anon_sym_STAR_STAR_EQ] = ACTIONS(47), - [anon_sym_STAR_EQ] = ACTIONS(47), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(47), - [anon_sym_SLASH_EQ] = ACTIONS(47), - [anon_sym_LT_LT_EQ] = ACTIONS(47), - [anon_sym_GT_GT_EQ] = ACTIONS(47), - [anon_sym_let] = ACTIONS(49), - [anon_sym_for] = ACTIONS(49), + [sym_string] = ACTIONS(31), + [sym_default] = ACTIONS(33), + [anon_sym_LPAREN] = ACTIONS(31), + [anon_sym_RPAREN] = ACTIONS(31), + [aux_sym_base_ten_token1] = ACTIONS(33), + [aux_sym_octal_token1] = ACTIONS(31), + [aux_sym_hex_token1] = ACTIONS(31), + [aux_sym_binary_token1] = ACTIONS(31), + [anon_sym_DOT] = ACTIONS(33), + [sym_true] = ACTIONS(33), + [sym_false] = ACTIONS(33), + [anon_sym_DASH] = ACTIONS(33), + [anon_sym_PLUS] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(33), + [anon_sym_STAR_STAR] = ACTIONS(33), + [anon_sym_STAR] = ACTIONS(33), + [anon_sym_SLASH] = ACTIONS(33), + [anon_sym_SLASH_SLASH] = ACTIONS(33), + [anon_sym_LT_LT] = ACTIONS(33), + [anon_sym_GT_GT] = ACTIONS(33), + [anon_sym_AMP] = ACTIONS(33), + [anon_sym_PIPE] = ACTIONS(33), + [anon_sym_CARET] = ACTIONS(33), + [anon_sym_GT] = ACTIONS(33), + [anon_sym_GT_EQ] = ACTIONS(31), + [anon_sym_EQ_EQ] = ACTIONS(31), + [anon_sym_LT_EQ] = ACTIONS(31), + [anon_sym_LT] = ACTIONS(33), + [anon_sym_BANG_EQ] = ACTIONS(31), + [anon_sym_AMP_AMP] = ACTIONS(33), + [anon_sym_PIPE_PIPE] = ACTIONS(33), + [anon_sym_DOT_DOT] = ACTIONS(33), + [anon_sym_DOT_DOT_EQ] = ACTIONS(31), + [anon_sym_if] = ACTIONS(33), + [anon_sym_LBRACK] = ACTIONS(31), + [anon_sym_COMMA] = ACTIONS(31), + [anon_sym_RBRACK] = ACTIONS(31), + [anon_sym_EQ] = ACTIONS(33), + [anon_sym_LBRACE] = ACTIONS(31), + [anon_sym_RBRACE] = ACTIONS(31), + [anon_sym_SEMI] = ACTIONS(31), + [anon_sym_AMP_EQ] = ACTIONS(31), + [anon_sym_PIPE_EQ] = ACTIONS(31), + [anon_sym_CARET_EQ] = ACTIONS(31), + [anon_sym_AMP_AMP_EQ] = ACTIONS(31), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(31), + [anon_sym_CARET_CARET_EQ] = ACTIONS(31), + [anon_sym_PLUS_EQ] = ACTIONS(31), + [anon_sym_DASH_EQ] = ACTIONS(31), + [anon_sym_STAR_STAR_EQ] = ACTIONS(31), + [anon_sym_STAR_EQ] = ACTIONS(31), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(31), + [anon_sym_SLASH_EQ] = ACTIONS(31), + [anon_sym_LT_LT_EQ] = ACTIONS(31), + [anon_sym_GT_GT_EQ] = ACTIONS(31), + [anon_sym_let] = ACTIONS(33), + [anon_sym_for] = ACTIONS(33), }, [6] = { - [aux_sym_argument_path_repeat1] = STATE(6), - [ts_builtin_sym_end] = ACTIONS(51), - [sym_identifier] = ACTIONS(53), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(51), - [sym_default] = ACTIONS(53), - [anon_sym_LPAREN] = ACTIONS(51), - [anon_sym_RPAREN] = ACTIONS(51), - [aux_sym_base_ten_token1] = ACTIONS(53), - [aux_sym_octal_token1] = ACTIONS(51), - [aux_sym_hex_token1] = ACTIONS(51), - [aux_sym_binary_token1] = ACTIONS(51), - [anon_sym_DOT] = ACTIONS(55), - [sym_true] = ACTIONS(53), - [sym_false] = ACTIONS(53), - [anon_sym_DASH] = ACTIONS(53), - [anon_sym_PLUS] = ACTIONS(53), - [anon_sym_BANG] = ACTIONS(53), - [anon_sym_STAR_STAR] = ACTIONS(53), - [anon_sym_STAR] = ACTIONS(53), - [anon_sym_SLASH] = ACTIONS(53), - [anon_sym_SLASH_SLASH] = ACTIONS(53), - [anon_sym_LT_LT] = ACTIONS(53), - [anon_sym_GT_GT] = ACTIONS(53), - [anon_sym_AMP] = ACTIONS(53), - [anon_sym_PIPE] = ACTIONS(53), - [anon_sym_CARET] = ACTIONS(53), - [anon_sym_GT] = ACTIONS(53), - [anon_sym_GT_EQ] = ACTIONS(51), - [anon_sym_EQ_EQ] = ACTIONS(51), - [anon_sym_LT_EQ] = ACTIONS(51), - [anon_sym_LT] = ACTIONS(53), - [anon_sym_BANG_EQ] = ACTIONS(51), - [anon_sym_AMP_AMP] = ACTIONS(53), - [anon_sym_PIPE_PIPE] = ACTIONS(53), - [anon_sym_DOT_DOT] = ACTIONS(53), - [anon_sym_DOT_DOT_EQ] = ACTIONS(51), - [anon_sym_if] = ACTIONS(53), - [anon_sym_AT] = ACTIONS(51), - [anon_sym_LBRACK] = ACTIONS(51), - [anon_sym_COMMA] = ACTIONS(51), - [anon_sym_RBRACK] = ACTIONS(51), - [anon_sym_EQ] = ACTIONS(53), - [anon_sym_LBRACE] = ACTIONS(51), - [anon_sym_RBRACE] = ACTIONS(51), - [anon_sym_SEMI] = ACTIONS(51), - [anon_sym_AMP_EQ] = ACTIONS(51), - [anon_sym_PIPE_EQ] = ACTIONS(51), - [anon_sym_CARET_EQ] = ACTIONS(51), - [anon_sym_AMP_AMP_EQ] = ACTIONS(51), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(51), - [anon_sym_CARET_CARET_EQ] = ACTIONS(51), - [anon_sym_PLUS_EQ] = ACTIONS(51), - [anon_sym_DASH_EQ] = ACTIONS(51), - [anon_sym_STAR_STAR_EQ] = ACTIONS(51), - [anon_sym_STAR_EQ] = ACTIONS(51), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(51), - [anon_sym_SLASH_EQ] = ACTIONS(51), - [anon_sym_LT_LT_EQ] = ACTIONS(51), - [anon_sym_GT_GT_EQ] = ACTIONS(51), - [anon_sym_let] = ACTIONS(53), - [anon_sym_for] = ACTIONS(53), - }, - [7] = { - [ts_builtin_sym_end] = ACTIONS(51), - [sym_identifier] = ACTIONS(53), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(51), - [sym_default] = ACTIONS(53), - [anon_sym_LPAREN] = ACTIONS(51), - [anon_sym_RPAREN] = ACTIONS(51), - [aux_sym_base_ten_token1] = ACTIONS(53), - [aux_sym_octal_token1] = ACTIONS(51), - [aux_sym_hex_token1] = ACTIONS(51), - [aux_sym_binary_token1] = ACTIONS(51), - [anon_sym_DOT] = ACTIONS(53), - [sym_true] = ACTIONS(53), - [sym_false] = ACTIONS(53), - [anon_sym_DASH] = ACTIONS(53), - [anon_sym_PLUS] = ACTIONS(53), - [anon_sym_BANG] = ACTIONS(53), - [anon_sym_STAR_STAR] = ACTIONS(53), - [anon_sym_STAR] = ACTIONS(53), - [anon_sym_SLASH] = ACTIONS(53), - [anon_sym_SLASH_SLASH] = ACTIONS(53), - [anon_sym_LT_LT] = ACTIONS(53), - [anon_sym_GT_GT] = ACTIONS(53), - [anon_sym_AMP] = ACTIONS(53), - [anon_sym_PIPE] = ACTIONS(53), - [anon_sym_CARET] = ACTIONS(53), - [anon_sym_GT] = ACTIONS(53), - [anon_sym_GT_EQ] = ACTIONS(51), - [anon_sym_EQ_EQ] = ACTIONS(51), - [anon_sym_LT_EQ] = ACTIONS(51), - [anon_sym_LT] = ACTIONS(53), - [anon_sym_BANG_EQ] = ACTIONS(51), - [anon_sym_AMP_AMP] = ACTIONS(53), - [anon_sym_PIPE_PIPE] = ACTIONS(53), - [anon_sym_DOT_DOT] = ACTIONS(53), - [anon_sym_DOT_DOT_EQ] = ACTIONS(51), - [anon_sym_if] = ACTIONS(53), - [anon_sym_AT] = ACTIONS(51), - [anon_sym_LBRACK] = ACTIONS(51), - [anon_sym_COMMA] = ACTIONS(51), - [anon_sym_RBRACK] = ACTIONS(51), - [anon_sym_EQ] = ACTIONS(53), - [anon_sym_LBRACE] = ACTIONS(51), - [anon_sym_RBRACE] = ACTIONS(51), - [anon_sym_SEMI] = ACTIONS(51), - [anon_sym_AMP_EQ] = ACTIONS(51), - [anon_sym_PIPE_EQ] = ACTIONS(51), - [anon_sym_CARET_EQ] = ACTIONS(51), - [anon_sym_AMP_AMP_EQ] = ACTIONS(51), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(51), - [anon_sym_CARET_CARET_EQ] = ACTIONS(51), - [anon_sym_PLUS_EQ] = ACTIONS(51), - [anon_sym_DASH_EQ] = ACTIONS(51), - [anon_sym_STAR_STAR_EQ] = ACTIONS(51), - [anon_sym_STAR_EQ] = ACTIONS(51), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(51), - [anon_sym_SLASH_EQ] = ACTIONS(51), - [anon_sym_LT_LT_EQ] = ACTIONS(51), - [anon_sym_GT_GT_EQ] = ACTIONS(51), - [anon_sym_let] = ACTIONS(53), - [anon_sym_for] = ACTIONS(53), - }, - [8] = { - [ts_builtin_sym_end] = ACTIONS(58), - [sym_identifier] = ACTIONS(60), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(58), - [sym_default] = ACTIONS(60), - [anon_sym_LPAREN] = ACTIONS(58), - [anon_sym_RPAREN] = ACTIONS(58), - [aux_sym_base_ten_token1] = ACTIONS(60), - [aux_sym_octal_token1] = ACTIONS(58), - [aux_sym_hex_token1] = ACTIONS(58), - [aux_sym_binary_token1] = ACTIONS(58), - [sym_true] = ACTIONS(60), - [sym_false] = ACTIONS(60), - [anon_sym_DASH] = ACTIONS(60), - [anon_sym_PLUS] = ACTIONS(60), - [anon_sym_BANG] = ACTIONS(60), - [anon_sym_STAR_STAR] = ACTIONS(60), - [anon_sym_STAR] = ACTIONS(60), - [anon_sym_SLASH] = ACTIONS(60), - [anon_sym_SLASH_SLASH] = ACTIONS(60), - [anon_sym_LT_LT] = ACTIONS(60), - [anon_sym_GT_GT] = ACTIONS(60), - [anon_sym_AMP] = ACTIONS(60), - [anon_sym_PIPE] = ACTIONS(60), - [anon_sym_CARET] = ACTIONS(60), - [anon_sym_GT] = ACTIONS(60), - [anon_sym_GT_EQ] = ACTIONS(58), - [anon_sym_EQ_EQ] = ACTIONS(58), - [anon_sym_LT_EQ] = ACTIONS(58), - [anon_sym_LT] = ACTIONS(60), - [anon_sym_BANG_EQ] = ACTIONS(58), - [anon_sym_AMP_AMP] = ACTIONS(60), - [anon_sym_PIPE_PIPE] = ACTIONS(60), - [anon_sym_DOT_DOT] = ACTIONS(60), - [anon_sym_DOT_DOT_EQ] = ACTIONS(58), - [anon_sym_if] = ACTIONS(60), - [anon_sym_AT] = ACTIONS(58), - [anon_sym_LBRACK] = ACTIONS(58), - [anon_sym_COMMA] = ACTIONS(58), - [anon_sym_RBRACK] = ACTIONS(58), - [anon_sym_EQ] = ACTIONS(60), - [anon_sym_LBRACE] = ACTIONS(58), - [anon_sym_RBRACE] = ACTIONS(58), - [anon_sym_SEMI] = ACTIONS(58), - [anon_sym_AMP_EQ] = ACTIONS(58), - [anon_sym_PIPE_EQ] = ACTIONS(58), - [anon_sym_CARET_EQ] = ACTIONS(58), - [anon_sym_AMP_AMP_EQ] = ACTIONS(58), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(58), - [anon_sym_CARET_CARET_EQ] = ACTIONS(58), - [anon_sym_PLUS_EQ] = ACTIONS(58), - [anon_sym_DASH_EQ] = ACTIONS(58), - [anon_sym_STAR_STAR_EQ] = ACTIONS(58), - [anon_sym_STAR_EQ] = ACTIONS(58), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(58), - [anon_sym_SLASH_EQ] = ACTIONS(58), - [anon_sym_LT_LT_EQ] = ACTIONS(58), - [anon_sym_GT_GT_EQ] = ACTIONS(58), - [anon_sym_let] = ACTIONS(60), - [anon_sym_for] = ACTIONS(60), - }, - [9] = { - [sym_closure_captured_variables] = STATE(175), - [sym_assignment_operator] = STATE(47), - [sym_identifier] = ACTIONS(62), + [sym_closure_captured_variables] = STATE(172), + [sym_assignment_operator] = STATE(57), + [sym_identifier] = ACTIONS(48), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(64), - [sym_default] = ACTIONS(62), - [anon_sym_LPAREN] = ACTIONS(64), - [aux_sym_base_ten_token1] = ACTIONS(62), - [aux_sym_octal_token1] = ACTIONS(64), - [aux_sym_hex_token1] = ACTIONS(64), - [aux_sym_binary_token1] = ACTIONS(64), - [sym_true] = ACTIONS(62), - [sym_false] = ACTIONS(62), - [anon_sym_DASH] = ACTIONS(62), - [anon_sym_PLUS] = ACTIONS(62), - [anon_sym_BANG] = ACTIONS(62), - [anon_sym_STAR_STAR] = ACTIONS(62), - [anon_sym_STAR] = ACTIONS(62), - [anon_sym_SLASH] = ACTIONS(62), - [anon_sym_SLASH_SLASH] = ACTIONS(62), - [anon_sym_LT_LT] = ACTIONS(62), - [anon_sym_GT_GT] = ACTIONS(62), - [anon_sym_AMP] = ACTIONS(62), - [anon_sym_PIPE] = ACTIONS(62), - [anon_sym_CARET] = ACTIONS(62), - [anon_sym_GT] = ACTIONS(62), - [anon_sym_GT_EQ] = ACTIONS(64), - [anon_sym_EQ_EQ] = ACTIONS(64), - [anon_sym_LT_EQ] = ACTIONS(64), - [anon_sym_LT] = ACTIONS(62), - [anon_sym_BANG_EQ] = ACTIONS(64), - [anon_sym_AMP_AMP] = ACTIONS(62), - [anon_sym_PIPE_PIPE] = ACTIONS(62), - [anon_sym_DOT_DOT] = ACTIONS(62), - [anon_sym_DOT_DOT_EQ] = ACTIONS(64), - [anon_sym_if] = ACTIONS(62), - [anon_sym_AT] = ACTIONS(64), - [anon_sym_LBRACK] = ACTIONS(64), - [anon_sym_EQ] = ACTIONS(66), - [anon_sym_LBRACE] = ACTIONS(64), - [anon_sym_RBRACE] = ACTIONS(64), - [anon_sym_SEMI] = ACTIONS(64), - [anon_sym_AMP_EQ] = ACTIONS(68), - [anon_sym_PIPE_EQ] = ACTIONS(68), - [anon_sym_CARET_EQ] = ACTIONS(68), - [anon_sym_AMP_AMP_EQ] = ACTIONS(68), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(68), - [anon_sym_CARET_CARET_EQ] = ACTIONS(68), - [anon_sym_PLUS_EQ] = ACTIONS(68), - [anon_sym_DASH_EQ] = ACTIONS(68), - [anon_sym_STAR_STAR_EQ] = ACTIONS(68), - [anon_sym_STAR_EQ] = ACTIONS(68), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(68), - [anon_sym_SLASH_EQ] = ACTIONS(68), - [anon_sym_LT_LT_EQ] = ACTIONS(68), - [anon_sym_GT_GT_EQ] = ACTIONS(68), - [anon_sym_let] = ACTIONS(62), - [anon_sym_for] = ACTIONS(62), + [sym_string] = ACTIONS(50), + [sym_default] = ACTIONS(48), + [anon_sym_LPAREN] = ACTIONS(50), + [aux_sym_base_ten_token1] = ACTIONS(48), + [aux_sym_octal_token1] = ACTIONS(50), + [aux_sym_hex_token1] = ACTIONS(50), + [aux_sym_binary_token1] = ACTIONS(50), + [sym_true] = ACTIONS(48), + [sym_false] = ACTIONS(48), + [anon_sym_DASH] = ACTIONS(48), + [anon_sym_PLUS] = ACTIONS(48), + [anon_sym_BANG] = ACTIONS(48), + [anon_sym_STAR_STAR] = ACTIONS(48), + [anon_sym_STAR] = ACTIONS(48), + [anon_sym_SLASH] = ACTIONS(48), + [anon_sym_SLASH_SLASH] = ACTIONS(48), + [anon_sym_LT_LT] = ACTIONS(48), + [anon_sym_GT_GT] = ACTIONS(48), + [anon_sym_AMP] = ACTIONS(48), + [anon_sym_PIPE] = ACTIONS(48), + [anon_sym_CARET] = ACTIONS(48), + [anon_sym_GT] = ACTIONS(48), + [anon_sym_GT_EQ] = ACTIONS(50), + [anon_sym_EQ_EQ] = ACTIONS(50), + [anon_sym_LT_EQ] = ACTIONS(50), + [anon_sym_LT] = ACTIONS(48), + [anon_sym_BANG_EQ] = ACTIONS(50), + [anon_sym_AMP_AMP] = ACTIONS(48), + [anon_sym_PIPE_PIPE] = ACTIONS(48), + [anon_sym_DOT_DOT] = ACTIONS(48), + [anon_sym_DOT_DOT_EQ] = ACTIONS(50), + [anon_sym_if] = ACTIONS(48), + [anon_sym_LBRACK] = ACTIONS(50), + [anon_sym_EQ] = ACTIONS(52), + [anon_sym_LBRACE] = ACTIONS(50), + [anon_sym_RBRACE] = ACTIONS(50), + [anon_sym_SEMI] = ACTIONS(50), + [anon_sym_AMP_EQ] = ACTIONS(54), + [anon_sym_PIPE_EQ] = ACTIONS(54), + [anon_sym_CARET_EQ] = ACTIONS(54), + [anon_sym_AMP_AMP_EQ] = ACTIONS(54), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(54), + [anon_sym_CARET_CARET_EQ] = ACTIONS(54), + [anon_sym_PLUS_EQ] = ACTIONS(54), + [anon_sym_DASH_EQ] = ACTIONS(54), + [anon_sym_STAR_STAR_EQ] = ACTIONS(54), + [anon_sym_STAR_EQ] = ACTIONS(54), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(54), + [anon_sym_SLASH_EQ] = ACTIONS(54), + [anon_sym_LT_LT_EQ] = ACTIONS(54), + [anon_sym_GT_GT_EQ] = ACTIONS(54), + [anon_sym_let] = ACTIONS(48), + [anon_sym_for] = ACTIONS(48), }, }; static const uint16_t ts_small_parse_table[] = { - [0] = 29, - ACTIONS(5), 1, + [0] = 27, + ACTIONS(56), 1, sym_identifier, - ACTIONS(7), 1, + ACTIONS(59), 1, sym_string, - ACTIONS(9), 1, + ACTIONS(62), 1, sym_default, - ACTIONS(11), 1, + ACTIONS(65), 1, anon_sym_LPAREN, - ACTIONS(15), 1, + ACTIONS(68), 1, + aux_sym_base_ten_token1, + ACTIONS(71), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(74), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(77), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(86), 1, anon_sym_if, - ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, + ACTIONS(89), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(92), 1, anon_sym_LBRACE, - ACTIONS(70), 1, - aux_sym_base_ten_token1, - ACTIONS(74), 1, + ACTIONS(95), 1, anon_sym_RBRACE, - ACTIONS(76), 1, + ACTIONS(97), 1, anon_sym_let, - ACTIONS(78), 1, + ACTIONS(100), 1, anon_sym_for, - STATE(9), 1, + STATE(6), 1, sym_path, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(62), 1, + STATE(40), 1, sym__float, - STATE(88), 1, + STATE(85), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(80), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - STATE(12), 2, + STATE(7), 2, sym_statement, aux_sym_procedural_block_repeat1, - STATE(76), 2, + STATE(41), 2, sym_void, sym_struct_definition, - ACTIONS(72), 3, + ACTIONS(83), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(118), 4, + STATE(113), 4, sym_closed_expression, sym_let, sym_assign, @@ -2631,7 +2391,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2644,7 +2404,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [112] = 29, + [105] = 27, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2662,28 +2422,26 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(70), 1, + ACTIONS(103), 1, aux_sym_base_ten_token1, - ACTIONS(76), 1, + ACTIONS(107), 1, + anon_sym_RBRACE, + ACTIONS(109), 1, anon_sym_let, - ACTIONS(78), 1, + ACTIONS(111), 1, anon_sym_for, - ACTIONS(80), 1, - anon_sym_RBRACE, - STATE(9), 1, + STATE(6), 1, sym_path, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(62), 1, + STATE(40), 1, sym__float, - STATE(88), 1, + STATE(85), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2691,20 +2449,17 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - STATE(10), 2, + STATE(7), 2, sym_statement, aux_sym_procedural_block_repeat1, - STATE(76), 2, + STATE(41), 2, sym_void, sym_struct_definition, - ACTIONS(72), 3, + ACTIONS(105), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(118), 4, + STATE(113), 4, sym_closed_expression, sym_let, sym_assign, @@ -2714,7 +2469,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2727,67 +2482,62 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [224] = 29, - ACTIONS(82), 1, + [210] = 27, + ACTIONS(5), 1, sym_identifier, - ACTIONS(85), 1, + ACTIONS(7), 1, sym_string, - ACTIONS(88), 1, + ACTIONS(9), 1, sym_default, - ACTIONS(91), 1, + ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(94), 1, - aux_sym_base_ten_token1, - ACTIONS(97), 1, + ACTIONS(15), 1, aux_sym_octal_token1, - ACTIONS(100), 1, + ACTIONS(17), 1, aux_sym_hex_token1, - ACTIONS(103), 1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(112), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(115), 1, - anon_sym_AT, - ACTIONS(118), 1, + ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(121), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(124), 1, - anon_sym_RBRACE, - ACTIONS(126), 1, + ACTIONS(103), 1, + aux_sym_base_ten_token1, + ACTIONS(109), 1, anon_sym_let, - ACTIONS(129), 1, + ACTIONS(111), 1, anon_sym_for, - STATE(9), 1, + ACTIONS(113), 1, + anon_sym_RBRACE, + STATE(6), 1, sym_path, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(62), 1, + STATE(40), 1, sym__float, - STATE(88), 1, + STATE(85), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(106), 2, + ACTIONS(21), 2, sym_true, sym_false, STATE(8), 2, - sym_argument_path, - sym_local_path, - STATE(12), 2, sym_statement, aux_sym_procedural_block_repeat1, - STATE(76), 2, + STATE(41), 2, sym_void, sym_struct_definition, - ACTIONS(109), 3, + ACTIONS(105), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(118), 4, + STATE(113), 4, sym_closed_expression, sym_let, sym_assign, @@ -2797,7 +2547,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2810,7 +2560,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [336] = 30, + [315] = 28, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -2828,34 +2578,32 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(132), 1, + ACTIONS(115), 1, sym_identifier, - ACTIONS(134), 1, + ACTIONS(117), 1, anon_sym_RPAREN, - ACTIONS(136), 1, + ACTIONS(119), 1, sym_varadic_dots, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(87), 1, sym__float, STATE(110), 1, sym_expression, - STATE(125), 1, + STATE(120), 1, aux_sym_struct_definition_repeat1, - STATE(134), 1, + STATE(125), 1, aux_sym_dictionary_construction_repeat1, STATE(139), 1, sym_dictionary_member_assignment, - STATE(152), 1, - sym_struct_member, - STATE(153), 1, + STATE(142), 1, sym_integer, - STATE(174), 1, + STATE(150), 1, + sym_struct_member, + STATE(170), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, @@ -2863,14 +2611,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -2879,7 +2624,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2892,13 +2637,13 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [448] = 4, - ACTIONS(142), 1, + [420] = 4, + ACTIONS(125), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(140), 16, + ACTIONS(123), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2915,7 +2660,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(138), 29, + ACTIONS(121), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -2938,18 +2683,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [505] = 3, + [476] = 4, + ACTIONS(131), 1, + anon_sym_else, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(146), 16, + ACTIONS(129), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2966,7 +2712,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(144), 29, + ACTIONS(127), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -2974,7 +2720,6 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2989,18 +2734,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [559] = 3, + [531] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 16, + ACTIONS(135), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3015,9 +2759,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_else, anon_sym_let, anon_sym_for, - ACTIONS(148), 29, + ACTIONS(133), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3025,7 +2770,6 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3040,18 +2784,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [613] = 3, + [584] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(154), 17, + ACTIONS(139), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3069,7 +2812,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_else, anon_sym_let, anon_sym_for, - ACTIONS(152), 28, + ACTIONS(137), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3091,20 +2834,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [667] = 4, - ACTIONS(160), 1, - anon_sym_else, + [637] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 16, + ACTIONS(143), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3121,7 +2861,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(156), 28, + ACTIONS(141), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3129,6 +2869,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3143,18 +2884,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [723] = 3, + [690] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 17, + ACTIONS(147), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3169,10 +2909,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - anon_sym_else, anon_sym_let, anon_sym_for, - ACTIONS(162), 28, + ACTIONS(145), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3180,6 +2919,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3194,18 +2934,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [777] = 3, + [743] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(168), 16, + ACTIONS(151), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3222,7 +2961,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(166), 28, + ACTIONS(149), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3244,25 +2983,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [830] = 4, + [795] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(170), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(150), 17, + ACTIONS(155), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, - anon_sym_DOT, sym_true, sym_false, anon_sym_BANG, @@ -3276,13 +3010,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(148), 25, + ACTIONS(153), 27, + ts_builtin_sym_end, sym_string, anon_sym_LPAREN, + anon_sym_RPAREN, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3297,16 +3032,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [885] = 3, + [847] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 16, + ACTIONS(159), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3323,7 +3059,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(172), 28, + ACTIONS(157), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3345,18 +3081,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [938] = 3, + [899] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(178), 16, + ACTIONS(48), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3373,7 +3108,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(176), 28, + ACTIONS(50), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3395,18 +3130,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [991] = 3, + [951] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(182), 16, + ACTIONS(163), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3423,7 +3157,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(180), 28, + ACTIONS(161), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3445,18 +3179,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1044] = 3, + [1003] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(62), 16, + ACTIONS(167), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3473,7 +3206,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(64), 28, + ACTIONS(165), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3495,90 +3228,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1097] = 25, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_base_ten_token1, - ACTIONS(15), 1, - aux_sym_octal_token1, - ACTIONS(17), 1, - aux_sym_hex_token1, - ACTIONS(19), 1, - aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - anon_sym_LBRACE, - ACTIONS(184), 1, - anon_sym_RBRACK, - STATE(14), 1, - sym_number, - STATE(34), 1, - aux_sym_list_repeat1, - STATE(90), 1, - sym__float, - STATE(108), 1, - sym_expression, - STATE(153), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(21), 2, - sym_true, - sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(23), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(91), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(138), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(25), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [1194] = 3, + [1055] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(188), 16, + ACTIONS(171), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3595,7 +3255,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(186), 28, + ACTIONS(169), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3617,18 +3277,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1247] = 3, + [1107] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(192), 16, + ACTIONS(175), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3645,7 +3304,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(190), 28, + ACTIONS(173), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3667,18 +3326,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1300] = 3, + [1159] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(196), 16, + ACTIONS(179), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3695,7 +3353,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(194), 28, + ACTIONS(177), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3717,18 +3375,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1353] = 3, + [1211] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(200), 16, + ACTIONS(183), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3745,7 +3402,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(198), 28, + ACTIONS(181), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3767,18 +3424,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1406] = 3, + [1263] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 16, + ACTIONS(187), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3795,7 +3451,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(202), 28, + ACTIONS(185), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3817,18 +3473,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1459] = 3, + [1315] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(208), 16, + ACTIONS(191), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3845,7 +3500,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(206), 28, + ACTIONS(189), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3867,183 +3522,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1512] = 25, - ACTIONS(210), 1, + [1367] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(195), 16, sym_identifier, - ACTIONS(213), 1, - sym_string, - ACTIONS(216), 1, sym_default, - ACTIONS(219), 1, - anon_sym_LPAREN, - ACTIONS(222), 1, aux_sym_base_ten_token1, - ACTIONS(225), 1, - aux_sym_octal_token1, - ACTIONS(228), 1, - aux_sym_hex_token1, - ACTIONS(231), 1, - aux_sym_binary_token1, - ACTIONS(240), 1, - anon_sym_if, - ACTIONS(243), 1, - anon_sym_AT, - ACTIONS(246), 1, - anon_sym_LBRACK, - ACTIONS(249), 1, - anon_sym_RBRACK, - ACTIONS(251), 1, - anon_sym_LBRACE, - STATE(14), 1, - sym_number, - STATE(33), 1, - aux_sym_list_repeat1, - STATE(90), 1, - sym__float, - STATE(111), 1, - sym_expression, - STATE(153), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(234), 2, - sym_true, - sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(237), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(91), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(138), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(25), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [1609] = 25, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_base_ten_token1, - ACTIONS(15), 1, - aux_sym_octal_token1, - ACTIONS(17), 1, - aux_sym_hex_token1, - ACTIONS(19), 1, - aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - anon_sym_LBRACE, - ACTIONS(254), 1, - anon_sym_RBRACK, - STATE(14), 1, - sym_number, - STATE(33), 1, - aux_sym_list_repeat1, - STATE(90), 1, - sym__float, - STATE(104), 1, - sym_expression, - STATE(153), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(21), 2, - sym_true, - sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(23), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(91), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(138), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(25), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [1706] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(258), 16, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(256), 28, - ts_builtin_sym_end, - sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(193), 27, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -4061,18 +3571,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1759] = 3, + [1419] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(262), 16, + ACTIONS(199), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4089,7 +3598,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(260), 28, + ACTIONS(197), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -4111,18 +3620,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1812] = 3, + [1471] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(266), 16, + ACTIONS(203), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4139,7 +3647,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(264), 28, + ACTIONS(201), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -4161,18 +3669,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1865] = 3, + [1523] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(270), 16, + ACTIONS(207), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4189,7 +3696,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(268), 28, + ACTIONS(205), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -4211,18 +3718,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1918] = 3, + [1575] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 16, + ACTIONS(211), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4239,7 +3745,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(272), 28, + ACTIONS(209), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -4261,18 +3767,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1971] = 3, + [1627] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(278), 16, + ACTIONS(215), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4289,7 +3794,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(276), 28, + ACTIONS(213), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -4311,21 +3816,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2024] = 3, + [1679] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(282), 16, + ACTIONS(217), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(143), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, + anon_sym_DOT, sym_true, sym_false, anon_sym_BANG, @@ -4339,14 +3847,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(280), 28, - ts_builtin_sym_end, + ACTIONS(141), 24, sym_string, anon_sym_LPAREN, - anon_sym_RPAREN, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -4361,18 +3868,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2077] = 3, + [1733] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(286), 16, + ACTIONS(221), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4389,7 +3893,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(284), 28, + ACTIONS(219), 27, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -4411,14 +3915,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2130] = 23, + [1785] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4438,18 +3941,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + ACTIONS(223), 1, + anon_sym_RBRACK, + STATE(11), 1, sym_number, - STATE(36), 1, - sym_expression, - STATE(90), 1, + STATE(38), 1, + aux_sym_list_repeat1, + STATE(87), 1, sym__float, - STATE(153), 1, + STATE(101), 1, + sym_expression, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4457,14 +3962,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -4473,7 +3975,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4486,53 +3988,52 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2221] = 23, - ACTIONS(5), 1, + [1875] = 23, + ACTIONS(225), 1, sym_identifier, - ACTIONS(7), 1, + ACTIONS(228), 1, sym_string, - ACTIONS(9), 1, + ACTIONS(231), 1, sym_default, - ACTIONS(11), 1, + ACTIONS(234), 1, anon_sym_LPAREN, - ACTIONS(13), 1, + ACTIONS(237), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(240), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(243), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(246), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(255), 1, anon_sym_if, - ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, + ACTIONS(258), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(261), 1, + anon_sym_RBRACK, + ACTIONS(263), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(38), 1, + aux_sym_list_repeat1, + STATE(87), 1, sym__float, - STATE(98), 1, + STATE(109), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(249), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(23), 3, + ACTIONS(252), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -4541,7 +4042,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4554,7 +4055,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2312] = 23, + [1965] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4574,18 +4075,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + ACTIONS(266), 1, + anon_sym_RBRACK, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(37), 1, + aux_sym_list_repeat1, + STATE(87), 1, sym__float, - STATE(95), 1, + STATE(104), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4593,14 +4096,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -4609,7 +4109,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4622,75 +4122,211 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2403] = 23, - ACTIONS(5), 1, + [2055] = 5, + ACTIONS(272), 1, + sym_unit_quote, + STATE(18), 1, + sym__unit, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(268), 16, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(270), 23, + sym_string, + anon_sym_LPAREN, aux_sym_octal_token1, - ACTIONS(17), 1, aux_sym_hex_token1, - ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - ACTIONS(31), 1, anon_sym_LBRACE, - STATE(14), 1, - sym_number, - STATE(90), 1, - sym__float, - STATE(99), 1, - sym_expression, - STATE(153), 1, - sym_integer, + anon_sym_RBRACE, + anon_sym_SEMI, + [2109] = 4, + STATE(172), 1, + sym_closure_captured_variables, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(48), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(23), 3, - anon_sym_DASH, - anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(138), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(25), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [2494] = 23, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(50), 23, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [2160] = 7, + ACTIONS(276), 1, + anon_sym_STAR_STAR, + ACTIONS(280), 1, + anon_sym_SLASH_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(274), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(278), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(195), 14, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(193), 19, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [2216] = 17, + ACTIONS(276), 1, + anon_sym_STAR_STAR, + ACTIONS(280), 1, + anon_sym_SLASH_SLASH, + ACTIONS(288), 1, + anon_sym_AMP, + ACTIONS(290), 1, + anon_sym_PIPE, + ACTIONS(292), 1, + anon_sym_CARET, + ACTIONS(298), 1, + anon_sym_AMP_AMP, + ACTIONS(300), 1, + anon_sym_PIPE_PIPE, + ACTIONS(302), 1, + anon_sym_DOT_DOT, + ACTIONS(304), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(274), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(278), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(286), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(294), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(296), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(282), 9, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(284), 9, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [2292] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4710,18 +4346,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(87), 1, sym__float, - STATE(113), 1, + STATE(91), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4729,14 +4363,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -4745,7 +4376,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4758,7 +4389,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2585] = 23, + [2376] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4778,18 +4409,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, - sym__float, - STATE(100), 1, + STATE(29), 1, sym_expression, - STATE(153), 1, + STATE(87), 1, + sym__float, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4797,14 +4426,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -4813,7 +4439,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4826,7 +4452,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2676] = 23, + [2460] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4846,18 +4472,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(87), 1, sym__float, - STATE(101), 1, + STATE(92), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4865,14 +4489,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -4881,7 +4502,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4894,7 +4515,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2767] = 23, + [2544] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4914,18 +4535,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(87), 1, sym__float, - STATE(103), 1, + STATE(90), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4933,14 +4552,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -4949,7 +4565,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4962,7 +4578,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2858] = 23, + [2628] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4982,18 +4598,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(87), 1, sym__float, - STATE(106), 1, + STATE(94), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5001,14 +4615,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -5017,7 +4628,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5030,7 +4641,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2949] = 23, + [2712] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5050,18 +4661,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(87), 1, sym__float, - STATE(109), 1, + STATE(95), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5069,14 +4678,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -5085,7 +4691,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5098,7 +4704,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3040] = 23, + [2796] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5118,18 +4724,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(87), 1, sym__float, - STATE(93), 1, + STATE(96), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5137,14 +4741,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -5153,7 +4754,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5166,7 +4767,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3131] = 23, + [2880] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5186,18 +4787,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(87), 1, sym__float, - STATE(105), 1, + STATE(97), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5205,14 +4804,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -5221,7 +4817,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5234,7 +4830,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3222] = 23, + [2964] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5254,18 +4850,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(87), 1, sym__float, - STATE(114), 1, + STATE(93), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5273,14 +4867,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -5289,7 +4880,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5302,7 +4893,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3313] = 23, + [3048] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5322,18 +4913,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(87), 1, sym__float, - STATE(107), 1, + STATE(98), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5341,14 +4930,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -5357,7 +4943,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5370,7 +4956,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3404] = 23, + [3132] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5390,18 +4976,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(87), 1, sym__float, - STATE(102), 1, + STATE(99), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5409,14 +4993,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -5425,7 +5006,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5438,7 +5019,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3495] = 23, + [3216] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5458,18 +5039,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(42), 1, - sym_expression, - STATE(90), 1, + STATE(87), 1, sym__float, - STATE(153), 1, + STATE(102), 1, + sym_expression, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5477,14 +5056,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -5493,7 +5069,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5506,7 +5082,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3586] = 23, + [3300] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5526,18 +5102,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, - sym__float, - STATE(97), 1, + STATE(27), 1, sym_expression, - STATE(153), 1, + STATE(87), 1, + sym__float, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5545,14 +5119,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -5561,7 +5132,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5574,7 +5145,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3677] = 23, + [3384] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5594,18 +5165,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(87), 1, sym__float, - STATE(94), 1, + STATE(107), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5613,14 +5182,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -5629,7 +5195,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5642,7 +5208,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3768] = 23, + [3468] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5651,6 +5217,8 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(13), 1, + aux_sym_base_ten_token1, ACTIONS(15), 1, aux_sym_octal_token1, ACTIONS(17), 1, @@ -5660,20 +5228,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(70), 1, - aux_sym_base_ten_token1, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(42), 1, - sym_expression, - STATE(62), 1, + STATE(87), 1, sym__float, - STATE(153), 1, + STATE(103), 1, + sym_expression, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5681,14 +5245,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(72), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(76), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -5697,7 +5258,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5710,57 +5271,70 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3859] = 5, - ACTIONS(292), 1, - sym_unit_quote, - STATE(24), 1, - sym__unit, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(288), 16, + [3552] = 21, + ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(13), 1, aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(290), 24, - sym_string, - anon_sym_LPAREN, + ACTIONS(15), 1, aux_sym_octal_token1, + ACTIONS(17), 1, aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_AT, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_LBRACK, + ACTIONS(29), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [3914] = 23, + STATE(11), 1, + sym_number, + STATE(87), 1, + sym__float, + STATE(106), 1, + sym_expression, + STATE(142), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(88), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [3636] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5769,6 +5343,8 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(13), 1, + aux_sym_base_ten_token1, ACTIONS(15), 1, aux_sym_octal_token1, ACTIONS(17), 1, @@ -5778,20 +5354,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(70), 1, - aux_sym_base_ten_token1, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(62), 1, + STATE(87), 1, sym__float, - STATE(78), 1, + STATE(108), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5799,14 +5371,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(72), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(76), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -5815,7 +5384,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5828,7 +5397,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4005] = 23, + [3720] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5837,6 +5406,8 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(13), 1, + aux_sym_base_ten_token1, ACTIONS(15), 1, aux_sym_octal_token1, ACTIONS(17), 1, @@ -5846,20 +5417,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(70), 1, - aux_sym_base_ten_token1, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(36), 1, - sym_expression, - STATE(62), 1, + STATE(87), 1, sym__float, - STATE(153), 1, + STATE(105), 1, + sym_expression, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5867,14 +5434,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(72), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(76), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -5883,7 +5447,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5896,7 +5460,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4096] = 23, + [3804] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5905,6 +5469,8 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(13), 1, + aux_sym_base_ten_token1, ACTIONS(15), 1, aux_sym_octal_token1, ACTIONS(17), 1, @@ -5914,20 +5480,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(70), 1, - aux_sym_base_ten_token1, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(62), 1, + STATE(87), 1, sym__float, - STATE(79), 1, + STATE(100), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5935,14 +5497,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(72), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(76), 3, + STATE(88), 3, sym_void, sym_path, sym_struct_definition, @@ -5951,7 +5510,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5964,7 +5523,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4187] = 23, + [3888] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5982,20 +5541,18 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(70), 1, + ACTIONS(103), 1, aux_sym_base_ten_token1, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(62), 1, - sym__float, - STATE(80), 1, + STATE(27), 1, sym_expression, - STATE(153), 1, + STATE(40), 1, + sym__float, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6003,14 +5560,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(72), 3, + ACTIONS(105), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(76), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, @@ -6019,7 +5573,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6032,7 +5586,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4278] = 23, + [3972] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6050,20 +5604,18 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(70), 1, + ACTIONS(103), 1, aux_sym_base_ten_token1, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(62), 1, + STATE(40), 1, sym__float, - STATE(81), 1, + STATE(75), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6071,14 +5623,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(72), 3, + ACTIONS(105), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(76), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, @@ -6087,7 +5636,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6100,7 +5649,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4369] = 23, + [4056] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6118,20 +5667,18 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(70), 1, + ACTIONS(103), 1, aux_sym_base_ten_token1, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(62), 1, - sym__float, - STATE(82), 1, + STATE(29), 1, sym_expression, - STATE(153), 1, + STATE(40), 1, + sym__float, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6139,14 +5686,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(72), 3, + ACTIONS(105), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(76), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, @@ -6155,7 +5699,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6168,7 +5712,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4460] = 23, + [4140] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6186,20 +5730,18 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(70), 1, + ACTIONS(103), 1, aux_sym_base_ten_token1, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(62), 1, + STATE(40), 1, sym__float, - STATE(77), 1, + STATE(76), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6207,14 +5749,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(72), 3, + ACTIONS(105), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(76), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, @@ -6223,7 +5762,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6236,7 +5775,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4551] = 23, + [4224] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6254,20 +5793,18 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(70), 1, + ACTIONS(103), 1, aux_sym_base_ten_token1, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(62), 1, + STATE(40), 1, sym__float, - STATE(84), 1, + STATE(42), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6275,14 +5812,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(72), 3, + ACTIONS(105), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(76), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, @@ -6291,7 +5825,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6304,7 +5838,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4642] = 23, + [4308] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6322,20 +5856,18 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(70), 1, + ACTIONS(103), 1, aux_sym_base_ten_token1, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(62), 1, + STATE(40), 1, sym__float, - STATE(85), 1, + STATE(77), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6343,14 +5875,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(72), 3, + ACTIONS(105), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(76), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, @@ -6359,7 +5888,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6372,7 +5901,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4733] = 23, + [4392] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6390,20 +5919,18 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(70), 1, + ACTIONS(103), 1, aux_sym_base_ten_token1, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(62), 1, + STATE(40), 1, sym__float, - STATE(86), 1, + STATE(78), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6411,14 +5938,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(72), 3, + ACTIONS(105), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(76), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, @@ -6427,7 +5951,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6440,7 +5964,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4824] = 23, + [4476] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6458,20 +5982,18 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(70), 1, + ACTIONS(103), 1, aux_sym_base_ten_token1, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(62), 1, + STATE(40), 1, sym__float, - STATE(87), 1, + STATE(79), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6479,14 +6001,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(72), 3, + ACTIONS(105), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(76), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, @@ -6495,7 +6014,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6508,7 +6027,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4915] = 23, + [4560] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6526,20 +6045,18 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(70), 1, + ACTIONS(103), 1, aux_sym_base_ten_token1, - STATE(14), 1, + STATE(11), 1, sym_number, - STATE(62), 1, + STATE(40), 1, sym__float, - STATE(83), 1, + STATE(80), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6547,14 +6064,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(72), 3, + ACTIONS(105), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(76), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, @@ -6563,7 +6077,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6576,7 +6090,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5006] = 23, + [4644] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6585,8 +6099,6 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_base_ten_token1, ACTIONS(15), 1, aux_sym_octal_token1, ACTIONS(17), 1, @@ -6596,18 +6108,18 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(25), 1, anon_sym_if, ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(14), 1, + ACTIONS(103), 1, + aux_sym_base_ten_token1, + STATE(11), 1, sym_number, - STATE(90), 1, + STATE(40), 1, sym__float, - STATE(96), 1, + STATE(81), 1, sym_expression, - STATE(153), 1, + STATE(142), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6615,14 +6127,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - STATE(8), 2, - sym_argument_path, - sym_local_path, - ACTIONS(23), 3, + ACTIONS(105), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(91), 3, + STATE(41), 3, sym_void, sym_path, sym_struct_definition, @@ -6631,7 +6140,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(25), 12, + STATE(20), 12, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6644,118 +6153,144 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5097] = 4, - STATE(175), 1, - sym_closure_captured_variables, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(62), 16, + [4728] = 21, + ACTIONS(5), 1, sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(64), 24, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, aux_sym_octal_token1, + ACTIONS(17), 1, aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_AT, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_LBRACK, + ACTIONS(29), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [5149] = 9, - ACTIONS(296), 1, - anon_sym_STAR_STAR, - ACTIONS(300), 1, - anon_sym_SLASH_SLASH, - ACTIONS(304), 1, - anon_sym_AMP, + ACTIONS(103), 1, + aux_sym_base_ten_token1, + STATE(11), 1, + sym_number, + STATE(40), 1, + sym__float, + STATE(82), 1, + sym_expression, + STATE(142), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(298), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(302), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(262), 13, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, + ACTIONS(21), 2, sym_true, sym_false, + ACTIONS(105), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(260), 18, - sym_string, - anon_sym_LPAREN, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_AT, + STATE(41), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [4812] = 21, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_LBRACK, + ACTIONS(29), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [5210] = 6, - ACTIONS(296), 1, + ACTIONS(103), 1, + aux_sym_base_ten_token1, + STATE(11), 1, + sym_number, + STATE(40), 1, + sym__float, + STATE(83), 1, + sym_expression, + STATE(142), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(105), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(41), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [4896] = 6, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(300), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(298), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(262), 14, + ACTIONS(195), 14, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6770,7 +6305,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(260), 22, + ACTIONS(193), 21, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -6788,18 +6323,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [5265] = 4, - ACTIONS(296), 1, + [4950] = 4, + ACTIONS(276), 1, anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(262), 16, + ACTIONS(195), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6816,7 +6350,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(260), 23, + ACTIONS(193), 22, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -6835,26 +6369,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [5316] = 7, - ACTIONS(296), 1, + [5000] = 8, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(300), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(262), 14, + ACTIONS(286), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(195), 14, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6869,14 +6405,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(260), 20, + ACTIONS(193), 17, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -6885,36 +6419,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [5373] = 8, - ACTIONS(296), 1, + [5058] = 10, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(300), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, + ACTIONS(288), 1, + anon_sym_AMP, + ACTIONS(292), 1, + anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(302), 2, + ACTIONS(286), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(262), 14, + ACTIONS(195), 13, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, - anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, @@ -6922,13 +6458,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(260), 18, + ACTIONS(193), 16, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -6936,33 +6471,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [5432] = 10, - ACTIONS(296), 1, + [5120] = 9, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(300), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, - ACTIONS(304), 1, + ACTIONS(288), 1, anon_sym_AMP, - ACTIONS(306), 1, - anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(302), 2, + ACTIONS(286), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(262), 13, + ACTIONS(195), 13, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6976,12 +6508,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(260), 17, + ACTIONS(193), 17, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -6989,95 +6522,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [5495] = 17, - ACTIONS(296), 1, + [5180] = 11, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(300), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, - ACTIONS(304), 1, + ACTIONS(288), 1, anon_sym_AMP, - ACTIONS(306), 1, - anon_sym_CARET, - ACTIONS(312), 1, + ACTIONS(290), 1, anon_sym_PIPE, - ACTIONS(318), 1, - anon_sym_AMP_AMP, - ACTIONS(320), 1, - anon_sym_PIPE_PIPE, - ACTIONS(322), 1, - anon_sym_DOT_DOT, - ACTIONS(324), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(294), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(298), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(302), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(314), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(316), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(308), 9, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(310), 10, - sym_string, - anon_sym_LPAREN, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_AT, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [5572] = 11, - ACTIONS(296), 1, - anon_sym_STAR_STAR, - ACTIONS(300), 1, - anon_sym_SLASH_SLASH, - ACTIONS(304), 1, - anon_sym_AMP, - ACTIONS(306), 1, + ACTIONS(292), 1, anon_sym_CARET, - ACTIONS(312), 1, - anon_sym_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(302), 2, + ACTIONS(286), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(262), 12, + ACTIONS(195), 12, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7090,7 +6562,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(260), 17, + ACTIONS(193), 16, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -7103,43 +6575,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [5637] = 13, - ACTIONS(296), 1, + [5244] = 13, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(300), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, - ACTIONS(304), 1, + ACTIONS(288), 1, anon_sym_AMP, - ACTIONS(306), 1, - anon_sym_CARET, - ACTIONS(312), 1, + ACTIONS(290), 1, anon_sym_PIPE, + ACTIONS(292), 1, + anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(302), 2, + ACTIONS(286), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(294), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(296), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(262), 10, + ACTIONS(195), 10, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7150,7 +6621,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(260), 13, + ACTIONS(193), 12, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -7159,45 +6630,44 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [5706] = 14, - ACTIONS(296), 1, + [5312] = 14, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(300), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, - ACTIONS(304), 1, + ACTIONS(288), 1, anon_sym_AMP, - ACTIONS(306), 1, - anon_sym_CARET, - ACTIONS(312), 1, + ACTIONS(290), 1, anon_sym_PIPE, - ACTIONS(318), 1, + ACTIONS(292), 1, + anon_sym_CARET, + ACTIONS(298), 1, anon_sym_AMP_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(302), 2, + ACTIONS(286), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(294), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(296), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(262), 10, + ACTIONS(195), 10, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7208,7 +6678,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(260), 12, + ACTIONS(193), 11, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -7216,47 +6686,57 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [5777] = 15, - ACTIONS(296), 1, + [5382] = 15, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(300), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, - ACTIONS(304), 1, + ACTIONS(288), 1, anon_sym_AMP, - ACTIONS(306), 1, - anon_sym_CARET, - ACTIONS(312), 1, + ACTIONS(290), 1, anon_sym_PIPE, - ACTIONS(318), 1, + ACTIONS(292), 1, + anon_sym_CARET, + ACTIONS(298), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(300), 1, anon_sym_PIPE_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(302), 2, + ACTIONS(286), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(294), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(296), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(262), 10, + ACTIONS(193), 10, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + ACTIONS(195), 10, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7267,87 +6747,137 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(260), 11, + [5454] = 21, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, aux_sym_octal_token1, + ACTIONS(17), 1, aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - anon_sym_DOT_DOT_EQ, - anon_sym_AT, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_LBRACK, + ACTIONS(29), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [5850] = 18, - ACTIONS(296), 1, + ACTIONS(103), 1, + aux_sym_base_ten_token1, + STATE(11), 1, + sym_number, + STATE(40), 1, + sym__float, + STATE(43), 1, + sym_expression, + STATE(142), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(105), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(41), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(138), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [5538] = 18, + ACTIONS(276), 1, anon_sym_STAR_STAR, - ACTIONS(300), 1, + ACTIONS(280), 1, anon_sym_SLASH_SLASH, - ACTIONS(304), 1, + ACTIONS(288), 1, anon_sym_AMP, - ACTIONS(306), 1, - anon_sym_CARET, - ACTIONS(312), 1, + ACTIONS(290), 1, anon_sym_PIPE, - ACTIONS(318), 1, + ACTIONS(292), 1, + anon_sym_CARET, + ACTIONS(298), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(300), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(302), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(304), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(330), 1, + ACTIONS(310), 1, anon_sym_SEMI, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 2, + ACTIONS(274), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(298), 2, + ACTIONS(278), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(302), 2, + ACTIONS(286), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(294), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(296), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(326), 9, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(328), 9, + ACTIONS(308), 8, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [5929] = 4, + ACTIONS(306), 9, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_let, + anon_sym_for, + [5616] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(170), 2, + ACTIONS(217), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(150), 9, + ACTIONS(143), 9, sym_identifier, anon_sym_DOT, anon_sym_STAR, @@ -7357,7 +6887,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(148), 21, + ACTIONS(141), 21, ts_builtin_sym_end, anon_sym_RPAREN, sym_unit_quote, @@ -7379,16 +6909,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5972] = 5, - STATE(24), 1, + [5659] = 5, + STATE(18), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, + ACTIONS(272), 2, sym_identifier, sym_unit_quote, - ACTIONS(288), 7, + ACTIONS(268), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -7396,7 +6926,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(290), 20, + ACTIONS(270), 20, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_DASH, @@ -7417,15 +6947,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6015] = 5, - ACTIONS(332), 1, + [5702] = 5, + ACTIONS(312), 1, anon_sym_LBRACK, - STATE(161), 1, + STATE(166), 1, sym_closure_captured_variables, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(62), 7, + ACTIONS(48), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -7433,7 +6963,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(64), 20, + ACTIONS(50), 20, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_DASH, @@ -7454,21 +6984,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6057] = 8, - ACTIONS(37), 1, + [5744] = 8, + ACTIONS(42), 1, anon_sym_DOT, - ACTIONS(334), 1, + ACTIONS(314), 1, anon_sym_COLON, - ACTIONS(336), 1, + ACTIONS(316), 1, anon_sym_EQ, - STATE(5), 1, - aux_sym_argument_path_repeat1, - STATE(135), 1, + STATE(4), 1, + aux_sym_path_repeat1, + STATE(133), 1, sym__declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(35), 7, + ACTIONS(40), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -7476,7 +7006,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(33), 16, + ACTIONS(38), 16, anon_sym_RPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -7493,28 +7023,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - [6104] = 6, - ACTIONS(338), 1, + [5791] = 7, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, + ACTIONS(318), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(322), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(262), 5, + ACTIONS(195), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(260), 18, + ACTIONS(193), 16, ts_builtin_sym_end, anon_sym_RPAREN, - anon_sym_DASH, - anon_sym_PLUS, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -7529,29 +7060,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6146] = 7, - ACTIONS(338), 1, + [5835] = 6, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, + ACTIONS(322), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(344), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(262), 5, + ACTIONS(195), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(260), 16, + ACTIONS(193), 18, ts_builtin_sym_end, anon_sym_RPAREN, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -7566,33 +7096,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6190] = 9, - ACTIONS(338), 1, + [5877] = 4, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, - anon_sym_SLASH_SLASH, - ACTIONS(348), 1, - anon_sym_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, + ACTIONS(195), 7, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(344), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(346), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(262), 4, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(260), 14, + ACTIONS(193), 19, ts_builtin_sym_end, anon_sym_RPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -7605,33 +7130,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6238] = 4, - ACTIONS(338), 1, + [5915] = 13, + ACTIONS(195), 1, + anon_sym_DOT_DOT, + ACTIONS(320), 1, anon_sym_STAR_STAR, + ACTIONS(324), 1, + anon_sym_SLASH_SLASH, + ACTIONS(328), 1, + anon_sym_AMP, + ACTIONS(330), 1, + anon_sym_PIPE, + ACTIONS(332), 1, + anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(262), 7, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(260), 19, - ts_builtin_sym_end, - anon_sym_RPAREN, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH_SLASH, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(334), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(193), 9, + ts_builtin_sym_end, + anon_sym_RPAREN, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, @@ -7639,30 +7173,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6276] = 8, - ACTIONS(338), 1, + [5971] = 8, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(262), 5, + ACTIONS(195), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(260), 14, + ACTIONS(193), 14, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_CARET, @@ -7677,33 +7211,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6322] = 10, - ACTIONS(338), 1, + [6017] = 10, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, + ACTIONS(332), 1, anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(262), 4, + ACTIONS(195), 4, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(260), 13, + ACTIONS(193), 13, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_GT_EQ, @@ -7717,36 +7251,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6372] = 11, - ACTIONS(338), 1, + [6067] = 9, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, - anon_sym_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(262), 3, + ACTIONS(195), 4, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(260), 13, + ACTIONS(193), 14, ts_builtin_sym_end, anon_sym_RPAREN, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -7758,42 +7290,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6424] = 13, - ACTIONS(262), 1, - anon_sym_DOT_DOT, - ACTIONS(338), 1, + [6115] = 11, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, + ACTIONS(332), 1, + anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(195), 3, anon_sym_GT, anon_sym_LT, - ACTIONS(356), 4, + anon_sym_DOT_DOT, + ACTIONS(193), 13, + ts_builtin_sym_end, + anon_sym_RPAREN, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(260), 9, - ts_builtin_sym_end, - anon_sym_RPAREN, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, @@ -7801,42 +7331,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6480] = 14, - ACTIONS(262), 1, + [6167] = 14, + ACTIONS(195), 1, anon_sym_DOT_DOT, - ACTIONS(338), 1, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, - ACTIONS(358), 1, + ACTIONS(332), 1, + anon_sym_CARET, + ACTIONS(338), 1, anon_sym_AMP_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(334), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(356), 4, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(260), 8, + ACTIONS(193), 8, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_PIPE_PIPE, @@ -7845,563 +7375,563 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6538] = 16, - ACTIONS(338), 1, + [6225] = 15, + ACTIONS(195), 1, + anon_sym_DOT_DOT, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, - ACTIONS(358), 1, + ACTIONS(332), 1, + anon_sym_CARET, + ACTIONS(338), 1, anon_sym_AMP_AMP, - ACTIONS(360), 1, + ACTIONS(340), 1, anon_sym_PIPE_PIPE, - ACTIONS(362), 1, - anon_sym_DOT_DOT, - ACTIONS(364), 1, - anon_sym_DOT_DOT_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(334), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(356), 4, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(310), 6, + ACTIONS(193), 7, ts_builtin_sym_end, anon_sym_RPAREN, + anon_sym_DOT_DOT_EQ, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6600] = 15, - ACTIONS(262), 1, - anon_sym_DOT_DOT, - ACTIONS(338), 1, + [6285] = 16, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, - ACTIONS(358), 1, + ACTIONS(332), 1, + anon_sym_CARET, + ACTIONS(338), 1, anon_sym_AMP_AMP, - ACTIONS(360), 1, + ACTIONS(340), 1, anon_sym_PIPE_PIPE, + ACTIONS(342), 1, + anon_sym_DOT_DOT, + ACTIONS(344), 1, + anon_sym_DOT_DOT_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(334), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(356), 4, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(260), 7, + ACTIONS(284), 6, ts_builtin_sym_end, anon_sym_RPAREN, - anon_sym_DOT_DOT_EQ, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6660] = 17, - ACTIONS(338), 1, + [6347] = 17, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, - ACTIONS(358), 1, + ACTIONS(332), 1, + anon_sym_CARET, + ACTIONS(338), 1, anon_sym_AMP_AMP, - ACTIONS(360), 1, + ACTIONS(340), 1, anon_sym_PIPE_PIPE, - ACTIONS(362), 1, + ACTIONS(342), 1, anon_sym_DOT_DOT, - ACTIONS(364), 1, + ACTIONS(344), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(366), 1, + ACTIONS(346), 1, anon_sym_COMMA, - ACTIONS(368), 1, + ACTIONS(348), 1, anon_sym_RBRACK, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(334), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(356), 4, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6720] = 16, - ACTIONS(338), 1, + [6407] = 16, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, - ACTIONS(358), 1, + ACTIONS(332), 1, + anon_sym_CARET, + ACTIONS(338), 1, anon_sym_AMP_AMP, - ACTIONS(360), 1, + ACTIONS(340), 1, anon_sym_PIPE_PIPE, - ACTIONS(362), 1, + ACTIONS(342), 1, anon_sym_DOT_DOT, - ACTIONS(364), 1, + ACTIONS(344), 1, anon_sym_DOT_DOT_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(334), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(370), 2, + ACTIONS(350), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(356), 4, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6778] = 16, - ACTIONS(338), 1, + [6465] = 16, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, - ACTIONS(358), 1, + ACTIONS(332), 1, + anon_sym_CARET, + ACTIONS(338), 1, anon_sym_AMP_AMP, - ACTIONS(360), 1, + ACTIONS(340), 1, anon_sym_PIPE_PIPE, - ACTIONS(362), 1, + ACTIONS(342), 1, anon_sym_DOT_DOT, - ACTIONS(364), 1, + ACTIONS(344), 1, anon_sym_DOT_DOT_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(334), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(372), 2, + ACTIONS(352), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(356), 4, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6836] = 17, - ACTIONS(31), 1, - anon_sym_LBRACE, - ACTIONS(338), 1, + [6523] = 17, + ACTIONS(223), 1, + anon_sym_RBRACK, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, - ACTIONS(358), 1, + ACTIONS(332), 1, + anon_sym_CARET, + ACTIONS(338), 1, anon_sym_AMP_AMP, - ACTIONS(360), 1, + ACTIONS(340), 1, anon_sym_PIPE_PIPE, - ACTIONS(362), 1, + ACTIONS(342), 1, anon_sym_DOT_DOT, - ACTIONS(364), 1, + ACTIONS(344), 1, anon_sym_DOT_DOT_EQ, - STATE(116), 1, - sym_procedural_block, + ACTIONS(346), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(334), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(356), 4, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6896] = 17, - ACTIONS(254), 1, - anon_sym_RBRACK, - ACTIONS(338), 1, + [6583] = 17, + ACTIONS(29), 1, + anon_sym_LBRACE, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, - ACTIONS(358), 1, + ACTIONS(332), 1, + anon_sym_CARET, + ACTIONS(338), 1, anon_sym_AMP_AMP, - ACTIONS(360), 1, + ACTIONS(340), 1, anon_sym_PIPE_PIPE, - ACTIONS(362), 1, + ACTIONS(342), 1, anon_sym_DOT_DOT, - ACTIONS(364), 1, + ACTIONS(344), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(366), 1, - anon_sym_COMMA, + STATE(116), 1, + sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(334), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(356), 4, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6956] = 17, - ACTIONS(31), 1, + [6643] = 17, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(338), 1, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, - ACTIONS(358), 1, + ACTIONS(332), 1, + anon_sym_CARET, + ACTIONS(338), 1, anon_sym_AMP_AMP, - ACTIONS(360), 1, + ACTIONS(340), 1, anon_sym_PIPE_PIPE, - ACTIONS(362), 1, + ACTIONS(342), 1, anon_sym_DOT_DOT, - ACTIONS(364), 1, + ACTIONS(344), 1, anon_sym_DOT_DOT_EQ, - STATE(18), 1, + STATE(12), 1, sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(334), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(356), 4, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7016] = 16, - ACTIONS(338), 1, + [6703] = 16, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, - ACTIONS(358), 1, + ACTIONS(332), 1, + anon_sym_CARET, + ACTIONS(338), 1, anon_sym_AMP_AMP, - ACTIONS(360), 1, + ACTIONS(340), 1, anon_sym_PIPE_PIPE, - ACTIONS(362), 1, + ACTIONS(342), 1, anon_sym_DOT_DOT, - ACTIONS(364), 1, + ACTIONS(344), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(374), 1, - anon_sym_RPAREN, + ACTIONS(354), 1, + anon_sym_SEMI, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(334), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(356), 4, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7073] = 16, - ACTIONS(338), 1, + [6760] = 16, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, - ACTIONS(358), 1, + ACTIONS(332), 1, + anon_sym_CARET, + ACTIONS(338), 1, anon_sym_AMP_AMP, - ACTIONS(360), 1, + ACTIONS(340), 1, anon_sym_PIPE_PIPE, - ACTIONS(362), 1, + ACTIONS(342), 1, anon_sym_DOT_DOT, - ACTIONS(364), 1, + ACTIONS(344), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(366), 1, - anon_sym_COMMA, + ACTIONS(356), 1, + anon_sym_SEMI, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(334), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(356), 4, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7130] = 16, - ACTIONS(338), 1, + [6817] = 16, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, - ACTIONS(358), 1, + ACTIONS(332), 1, + anon_sym_CARET, + ACTIONS(338), 1, anon_sym_AMP_AMP, - ACTIONS(360), 1, + ACTIONS(340), 1, anon_sym_PIPE_PIPE, - ACTIONS(362), 1, + ACTIONS(342), 1, anon_sym_DOT_DOT, - ACTIONS(364), 1, + ACTIONS(344), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(376), 1, - ts_builtin_sym_end, + ACTIONS(346), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(334), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(356), 4, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7187] = 16, - ACTIONS(338), 1, + [6874] = 16, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, - ACTIONS(358), 1, + ACTIONS(332), 1, + anon_sym_CARET, + ACTIONS(338), 1, anon_sym_AMP_AMP, - ACTIONS(360), 1, + ACTIONS(340), 1, anon_sym_PIPE_PIPE, - ACTIONS(362), 1, + ACTIONS(342), 1, anon_sym_DOT_DOT, - ACTIONS(364), 1, + ACTIONS(344), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(378), 1, - anon_sym_SEMI, + ACTIONS(358), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(334), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(356), 4, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7244] = 16, - ACTIONS(338), 1, + [6931] = 16, + ACTIONS(320), 1, anon_sym_STAR_STAR, - ACTIONS(342), 1, + ACTIONS(324), 1, anon_sym_SLASH_SLASH, - ACTIONS(348), 1, + ACTIONS(328), 1, anon_sym_AMP, - ACTIONS(350), 1, - anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(330), 1, anon_sym_PIPE, - ACTIONS(358), 1, + ACTIONS(332), 1, + anon_sym_CARET, + ACTIONS(338), 1, anon_sym_AMP_AMP, - ACTIONS(360), 1, + ACTIONS(340), 1, anon_sym_PIPE_PIPE, - ACTIONS(362), 1, + ACTIONS(342), 1, anon_sym_DOT_DOT, - ACTIONS(364), 1, + ACTIONS(344), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(380), 1, - anon_sym_SEMI, + ACTIONS(360), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(344), 2, + ACTIONS(318), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(346), 2, + ACTIONS(322), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(326), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(354), 2, + ACTIONS(334), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(356), 4, + ACTIONS(336), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7301] = 3, + [6988] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(382), 8, + ACTIONS(362), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8410,7 +7940,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(384), 12, + ACTIONS(364), 11, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -8419,15 +7949,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7330] = 3, + [7016] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(386), 8, + ACTIONS(306), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8436,7 +7965,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(388), 12, + ACTIONS(308), 11, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -8445,15 +7974,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7359] = 3, + [7044] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 8, + ACTIONS(366), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8462,7 +7990,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(392), 12, + ACTIONS(368), 11, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -8471,15 +7999,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7388] = 3, + [7072] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(326), 8, + ACTIONS(370), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8488,7 +8015,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(328), 12, + ACTIONS(372), 11, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -8497,15 +8024,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7417] = 3, + [7100] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(394), 8, + ACTIONS(374), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8514,7 +8040,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(396), 12, + ACTIONS(376), 11, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -8523,22 +8049,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7446] = 3, + [7128] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(398), 6, + ACTIONS(378), 6, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, - ACTIONS(249), 12, + ACTIONS(261), 11, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -8547,22 +8072,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - anon_sym_AT, anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LBRACE, - [7473] = 3, + [7154] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(400), 6, + ACTIONS(380), 6, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, - ACTIONS(402), 11, + ACTIONS(382), 10, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -8571,461 +8095,429 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - anon_sym_AT, anon_sym_LBRACK, anon_sym_LBRACE, - [7499] = 3, - STATE(55), 1, - sym_assignment_operator, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(68), 15, - anon_sym_EQ, - anon_sym_AMP_EQ, - anon_sym_PIPE_EQ, - anon_sym_CARET_EQ, - anon_sym_AMP_AMP_EQ, - anon_sym_PIPE_PIPE_EQ, - anon_sym_CARET_CARET_EQ, - anon_sym_PLUS_EQ, - anon_sym_DASH_EQ, - anon_sym_STAR_STAR_EQ, - anon_sym_STAR_EQ, - anon_sym_SLASH_SLASH_EQ, - anon_sym_SLASH_EQ, - anon_sym_LT_LT_EQ, - anon_sym_GT_GT_EQ, - [7524] = 6, - ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(404), 1, - sym_identifier, - ACTIONS(406), 1, - anon_sym_LPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - STATE(8), 2, - sym_argument_path, - sym_local_path, - STATE(57), 3, - sym_void, - sym_path, - sym_struct_definition, - [7547] = 6, - ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(404), 1, + [7179] = 7, + ACTIONS(117), 1, + anon_sym_RPAREN, + ACTIONS(119), 1, + sym_varadic_dots, + ACTIONS(384), 1, sym_identifier, - ACTIONS(406), 1, - anon_sym_LPAREN, + STATE(120), 1, + aux_sym_struct_definition_repeat1, + STATE(150), 1, + sym_struct_member, + STATE(170), 1, + sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(8), 2, - sym_argument_path, - sym_local_path, - STATE(74), 3, - sym_void, - sym_path, - sym_struct_definition, - [7570] = 7, - ACTIONS(136), 1, + [7202] = 7, + ACTIONS(119), 1, sym_varadic_dots, - ACTIONS(408), 1, + ACTIONS(384), 1, sym_identifier, - ACTIONS(410), 1, + ACTIONS(386), 1, anon_sym_RPAREN, - STATE(128), 1, + STATE(123), 1, aux_sym_struct_definition_repeat1, - STATE(152), 1, + STATE(150), 1, sym_struct_member, - STATE(163), 1, + STATE(160), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7593] = 6, - ACTIONS(27), 1, - anon_sym_AT, - ACTIONS(404), 1, + [7225] = 4, + ACTIONS(388), 1, sym_identifier, - STATE(132), 1, - sym__variable_type, - STATE(133), 1, - sym_path, + ACTIONS(390), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(8), 2, - sym_argument_path, - sym_local_path, - [7614] = 7, - ACTIONS(134), 1, - anon_sym_RPAREN, - ACTIONS(136), 1, - sym_varadic_dots, - ACTIONS(408), 1, + STATE(62), 3, + sym_void, + sym_path, + sym_struct_definition, + [7241] = 4, + ACTIONS(388), 1, sym_identifier, - STATE(125), 1, - aux_sym_struct_definition_repeat1, - STATE(152), 1, - sym_struct_member, - STATE(174), 1, - sym__struct_final_element, + ACTIONS(390), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7637] = 5, - ACTIONS(412), 1, + STATE(84), 3, + sym_void, + sym_path, + sym_struct_definition, + [7257] = 5, + ACTIONS(392), 1, sym_identifier, - STATE(128), 1, + STATE(123), 1, aux_sym_struct_definition_repeat1, - STATE(162), 1, + STATE(171), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(415), 2, + ACTIONS(395), 2, anon_sym_RPAREN, sym_varadic_dots, - [7655] = 4, - ACTIONS(417), 1, + [7275] = 4, + ACTIONS(397), 1, sym_identifier, - STATE(129), 1, - aux_sym_dictionary_construction_repeat1, - STATE(166), 1, - sym_dictionary_member_assignment, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [7669] = 4, - ACTIONS(420), 1, - sym_identifier, - ACTIONS(422), 1, + ACTIONS(399), 1, anon_sym_RBRACK, - STATE(131), 1, + STATE(132), 1, aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7683] = 4, - ACTIONS(424), 1, + [7289] = 4, + ACTIONS(401), 1, sym_identifier, - ACTIONS(427), 1, - anon_sym_RBRACK, - STATE(131), 1, - aux_sym_closure_captured_variables_repeat1, + STATE(130), 1, + aux_sym_dictionary_construction_repeat1, + STATE(147), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7697] = 2, + [7303] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(429), 3, + ACTIONS(403), 3, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_EQ, - [7707] = 2, + [7313] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(431), 3, + ACTIONS(405), 3, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_EQ, - [7717] = 4, - ACTIONS(433), 1, + [7323] = 4, + ACTIONS(407), 1, sym_identifier, - STATE(129), 1, - aux_sym_dictionary_construction_repeat1, - STATE(149), 1, - sym_dictionary_member_assignment, + ACTIONS(410), 1, + anon_sym_RBRACK, + STATE(128), 1, + aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7731] = 3, - ACTIONS(437), 1, - anon_sym_EQ, + [7337] = 4, + ACTIONS(388), 1, + sym_identifier, + STATE(126), 1, + sym_path, + STATE(127), 1, + sym__variable_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(435), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [7743] = 4, - ACTIONS(439), 1, + [7351] = 4, + ACTIONS(412), 1, sym_identifier, - ACTIONS(441), 1, - anon_sym_RBRACK, STATE(130), 1, - aux_sym_closure_captured_variables_repeat1, + aux_sym_dictionary_construction_repeat1, + STATE(154), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7757] = 2, + [7365] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(415), 3, + ACTIONS(395), 3, sym_identifier, anon_sym_RPAREN, sym_varadic_dots, - [7767] = 2, + [7375] = 4, + ACTIONS(415), 1, + sym_identifier, + ACTIONS(417), 1, + anon_sym_RBRACK, + STATE(128), 1, + aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(443), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [7776] = 3, - ACTIONS(445), 1, + [7389] = 3, + ACTIONS(421), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(419), 2, anon_sym_RPAREN, - ACTIONS(447), 1, anon_sym_COMMA, + [7401] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7787] = 3, - ACTIONS(449), 1, + ACTIONS(410), 2, sym_identifier, - ACTIONS(451), 1, + anon_sym_RBRACK, + [7410] = 3, + ACTIONS(423), 1, + sym_identifier, + ACTIONS(425), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7798] = 3, - ACTIONS(31), 1, + [7421] = 3, + ACTIONS(29), 1, anon_sym_LBRACE, - STATE(41), 1, + STATE(34), 1, sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7809] = 3, - ACTIONS(453), 1, + [7432] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(427), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [7441] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(429), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [7450] = 3, + ACTIONS(431), 1, anon_sym_RPAREN, - ACTIONS(455), 1, + ACTIONS(433), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7820] = 3, - ACTIONS(422), 1, - anon_sym_RBRACK, - ACTIONS(457), 1, + [7461] = 3, + ACTIONS(435), 1, anon_sym_COMMA, + ACTIONS(437), 1, + anon_sym_RBRACK, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7831] = 2, + [7472] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(459), 2, + ACTIONS(439), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [7481] = 3, + ACTIONS(441), 1, aux_sym_signed_integer_token1, + ACTIONS(443), 1, aux_sym_unsigned_integer_token1, - [7840] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(427), 2, - sym_identifier, - anon_sym_RBRACK, - [7849] = 3, - ACTIONS(449), 1, + [7492] = 3, + ACTIONS(423), 1, sym_identifier, - ACTIONS(461), 1, + ACTIONS(445), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7860] = 3, - ACTIONS(334), 1, + [7503] = 3, + ACTIONS(314), 1, anon_sym_COLON, - STATE(135), 1, + STATE(133), 1, sym__declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7871] = 3, - ACTIONS(457), 1, - anon_sym_COMMA, - ACTIONS(463), 1, - anon_sym_RBRACK, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [7882] = 3, - ACTIONS(461), 1, + [7514] = 3, + ACTIONS(447), 1, anon_sym_RPAREN, - ACTIONS(465), 1, + ACTIONS(449), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7893] = 3, - ACTIONS(467), 1, + [7525] = 3, + ACTIONS(451), 1, aux_sym_base_ten_token1, - STATE(15), 1, + STATE(16), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7904] = 2, + [7536] = 3, + ACTIONS(445), 1, + anon_sym_RPAREN, + ACTIONS(453), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [7547] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(469), 2, + ACTIONS(455), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [7913] = 3, - ACTIONS(453), 1, - anon_sym_RPAREN, - ACTIONS(471), 1, + [7556] = 3, + ACTIONS(417), 1, + anon_sym_RBRACK, + ACTIONS(435), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7924] = 3, - ACTIONS(473), 1, - aux_sym_signed_integer_token1, - ACTIONS(475), 1, - aux_sym_unsigned_integer_token1, + [7567] = 3, + ACTIONS(447), 1, + anon_sym_RPAREN, + ACTIONS(457), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7935] = 2, + [7578] = 2, + ACTIONS(459), 1, + anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(477), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [7944] = 2, - ACTIONS(479), 1, + [7586] = 2, + ACTIONS(461), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7952] = 2, - ACTIONS(481), 1, - sym_identifier, + [7594] = 2, + ACTIONS(463), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7960] = 2, - ACTIONS(483), 1, - anon_sym_DASH_GT, + [7602] = 2, + ACTIONS(465), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7968] = 2, - ACTIONS(485), 1, - sym_identifier, + [7610] = 2, + ACTIONS(467), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7976] = 2, - ACTIONS(487), 1, + [7618] = 2, + ACTIONS(469), 1, aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7984] = 2, - ACTIONS(457), 1, - anon_sym_COMMA, + [7626] = 2, + ACTIONS(471), 1, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7992] = 2, - ACTIONS(489), 1, + [7634] = 2, + ACTIONS(473), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8000] = 2, - ACTIONS(471), 1, - anon_sym_COMMA, + [7642] = 2, + ACTIONS(475), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8008] = 2, - ACTIONS(491), 1, + [7650] = 2, + ACTIONS(477), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8016] = 2, - ACTIONS(493), 1, - anon_sym_DASH_GT, + [7658] = 2, + ACTIONS(479), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8024] = 2, - ACTIONS(495), 1, - anon_sym_EQ, + [7666] = 2, + ACTIONS(481), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8032] = 2, - ACTIONS(497), 1, - anon_sym_COMMA, + [7674] = 2, + ACTIONS(483), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8040] = 2, - ACTIONS(499), 1, - aux_sym_hex_token2, + [7682] = 2, + ACTIONS(485), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8048] = 2, - ACTIONS(501), 1, - ts_builtin_sym_end, + [7690] = 2, + ACTIONS(435), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8056] = 2, - ACTIONS(503), 1, - sym_identifier, + [7698] = 2, + ACTIONS(487), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8064] = 2, - ACTIONS(505), 1, - anon_sym_DASH_GT, + [7706] = 2, + ACTIONS(489), 1, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8072] = 2, - ACTIONS(507), 1, - anon_sym_in, + [7714] = 2, + ACTIONS(491), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8080] = 2, - ACTIONS(449), 1, + [7722] = 2, + ACTIONS(423), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8088] = 2, - ACTIONS(509), 1, - aux_sym_base_ten_token1, + [7730] = 2, + ACTIONS(493), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8096] = 2, - ACTIONS(511), 1, - anon_sym_RPAREN, + [7738] = 2, + ACTIONS(457), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8104] = 2, - ACTIONS(513), 1, + [7746] = 2, + ACTIONS(495), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, @@ -9033,416 +8525,408 @@ static const uint16_t ts_small_parse_table[] = { }; static const uint32_t ts_small_parse_table_map[] = { - [SMALL_STATE(10)] = 0, - [SMALL_STATE(11)] = 112, - [SMALL_STATE(12)] = 224, - [SMALL_STATE(13)] = 336, - [SMALL_STATE(14)] = 448, - [SMALL_STATE(15)] = 505, - [SMALL_STATE(16)] = 559, - [SMALL_STATE(17)] = 613, - [SMALL_STATE(18)] = 667, - [SMALL_STATE(19)] = 723, - [SMALL_STATE(20)] = 777, - [SMALL_STATE(21)] = 830, - [SMALL_STATE(22)] = 885, - [SMALL_STATE(23)] = 938, - [SMALL_STATE(24)] = 991, - [SMALL_STATE(25)] = 1044, - [SMALL_STATE(26)] = 1097, - [SMALL_STATE(27)] = 1194, - [SMALL_STATE(28)] = 1247, - [SMALL_STATE(29)] = 1300, - [SMALL_STATE(30)] = 1353, - [SMALL_STATE(31)] = 1406, - [SMALL_STATE(32)] = 1459, - [SMALL_STATE(33)] = 1512, - [SMALL_STATE(34)] = 1609, - [SMALL_STATE(35)] = 1706, - [SMALL_STATE(36)] = 1759, - [SMALL_STATE(37)] = 1812, - [SMALL_STATE(38)] = 1865, - [SMALL_STATE(39)] = 1918, - [SMALL_STATE(40)] = 1971, - [SMALL_STATE(41)] = 2024, - [SMALL_STATE(42)] = 2077, - [SMALL_STATE(43)] = 2130, - [SMALL_STATE(44)] = 2221, - [SMALL_STATE(45)] = 2312, - [SMALL_STATE(46)] = 2403, - [SMALL_STATE(47)] = 2494, - [SMALL_STATE(48)] = 2585, - [SMALL_STATE(49)] = 2676, - [SMALL_STATE(50)] = 2767, - [SMALL_STATE(51)] = 2858, - [SMALL_STATE(52)] = 2949, - [SMALL_STATE(53)] = 3040, - [SMALL_STATE(54)] = 3131, - [SMALL_STATE(55)] = 3222, - [SMALL_STATE(56)] = 3313, - [SMALL_STATE(57)] = 3404, - [SMALL_STATE(58)] = 3495, - [SMALL_STATE(59)] = 3586, - [SMALL_STATE(60)] = 3677, - [SMALL_STATE(61)] = 3768, - [SMALL_STATE(62)] = 3859, - [SMALL_STATE(63)] = 3914, - [SMALL_STATE(64)] = 4005, - [SMALL_STATE(65)] = 4096, - [SMALL_STATE(66)] = 4187, - [SMALL_STATE(67)] = 4278, - [SMALL_STATE(68)] = 4369, - [SMALL_STATE(69)] = 4460, - [SMALL_STATE(70)] = 4551, - [SMALL_STATE(71)] = 4642, - [SMALL_STATE(72)] = 4733, - [SMALL_STATE(73)] = 4824, - [SMALL_STATE(74)] = 4915, - [SMALL_STATE(75)] = 5006, - [SMALL_STATE(76)] = 5097, - [SMALL_STATE(77)] = 5149, - [SMALL_STATE(78)] = 5210, - [SMALL_STATE(79)] = 5265, - [SMALL_STATE(80)] = 5316, - [SMALL_STATE(81)] = 5373, - [SMALL_STATE(82)] = 5432, - [SMALL_STATE(83)] = 5495, - [SMALL_STATE(84)] = 5572, - [SMALL_STATE(85)] = 5637, - [SMALL_STATE(86)] = 5706, - [SMALL_STATE(87)] = 5777, - [SMALL_STATE(88)] = 5850, - [SMALL_STATE(89)] = 5929, - [SMALL_STATE(90)] = 5972, - [SMALL_STATE(91)] = 6015, - [SMALL_STATE(92)] = 6057, - [SMALL_STATE(93)] = 6104, - [SMALL_STATE(94)] = 6146, - [SMALL_STATE(95)] = 6190, - [SMALL_STATE(96)] = 6238, - [SMALL_STATE(97)] = 6276, - [SMALL_STATE(98)] = 6322, - [SMALL_STATE(99)] = 6372, - [SMALL_STATE(100)] = 6424, - [SMALL_STATE(101)] = 6480, - [SMALL_STATE(102)] = 6538, - [SMALL_STATE(103)] = 6600, - [SMALL_STATE(104)] = 6660, - [SMALL_STATE(105)] = 6720, - [SMALL_STATE(106)] = 6778, - [SMALL_STATE(107)] = 6836, - [SMALL_STATE(108)] = 6896, - [SMALL_STATE(109)] = 6956, - [SMALL_STATE(110)] = 7016, - [SMALL_STATE(111)] = 7073, - [SMALL_STATE(112)] = 7130, - [SMALL_STATE(113)] = 7187, - [SMALL_STATE(114)] = 7244, - [SMALL_STATE(115)] = 7301, - [SMALL_STATE(116)] = 7330, - [SMALL_STATE(117)] = 7359, - [SMALL_STATE(118)] = 7388, - [SMALL_STATE(119)] = 7417, - [SMALL_STATE(120)] = 7446, - [SMALL_STATE(121)] = 7473, - [SMALL_STATE(122)] = 7499, - [SMALL_STATE(123)] = 7524, - [SMALL_STATE(124)] = 7547, - [SMALL_STATE(125)] = 7570, - [SMALL_STATE(126)] = 7593, - [SMALL_STATE(127)] = 7614, - [SMALL_STATE(128)] = 7637, - [SMALL_STATE(129)] = 7655, - [SMALL_STATE(130)] = 7669, - [SMALL_STATE(131)] = 7683, - [SMALL_STATE(132)] = 7697, - [SMALL_STATE(133)] = 7707, - [SMALL_STATE(134)] = 7717, - [SMALL_STATE(135)] = 7731, - [SMALL_STATE(136)] = 7743, - [SMALL_STATE(137)] = 7757, - [SMALL_STATE(138)] = 7767, - [SMALL_STATE(139)] = 7776, - [SMALL_STATE(140)] = 7787, - [SMALL_STATE(141)] = 7798, - [SMALL_STATE(142)] = 7809, - [SMALL_STATE(143)] = 7820, - [SMALL_STATE(144)] = 7831, - [SMALL_STATE(145)] = 7840, - [SMALL_STATE(146)] = 7849, - [SMALL_STATE(147)] = 7860, - [SMALL_STATE(148)] = 7871, - [SMALL_STATE(149)] = 7882, - [SMALL_STATE(150)] = 7893, - [SMALL_STATE(151)] = 7904, - [SMALL_STATE(152)] = 7913, - [SMALL_STATE(153)] = 7924, - [SMALL_STATE(154)] = 7935, - [SMALL_STATE(155)] = 7944, - [SMALL_STATE(156)] = 7952, - [SMALL_STATE(157)] = 7960, - [SMALL_STATE(158)] = 7968, - [SMALL_STATE(159)] = 7976, - [SMALL_STATE(160)] = 7984, - [SMALL_STATE(161)] = 7992, - [SMALL_STATE(162)] = 8000, - [SMALL_STATE(163)] = 8008, - [SMALL_STATE(164)] = 8016, - [SMALL_STATE(165)] = 8024, - [SMALL_STATE(166)] = 8032, - [SMALL_STATE(167)] = 8040, - [SMALL_STATE(168)] = 8048, - [SMALL_STATE(169)] = 8056, - [SMALL_STATE(170)] = 8064, - [SMALL_STATE(171)] = 8072, - [SMALL_STATE(172)] = 8080, - [SMALL_STATE(173)] = 8088, - [SMALL_STATE(174)] = 8096, - [SMALL_STATE(175)] = 8104, + [SMALL_STATE(7)] = 0, + [SMALL_STATE(8)] = 105, + [SMALL_STATE(9)] = 210, + [SMALL_STATE(10)] = 315, + [SMALL_STATE(11)] = 420, + [SMALL_STATE(12)] = 476, + [SMALL_STATE(13)] = 531, + [SMALL_STATE(14)] = 584, + [SMALL_STATE(15)] = 637, + [SMALL_STATE(16)] = 690, + [SMALL_STATE(17)] = 743, + [SMALL_STATE(18)] = 795, + [SMALL_STATE(19)] = 847, + [SMALL_STATE(20)] = 899, + [SMALL_STATE(21)] = 951, + [SMALL_STATE(22)] = 1003, + [SMALL_STATE(23)] = 1055, + [SMALL_STATE(24)] = 1107, + [SMALL_STATE(25)] = 1159, + [SMALL_STATE(26)] = 1211, + [SMALL_STATE(27)] = 1263, + [SMALL_STATE(28)] = 1315, + [SMALL_STATE(29)] = 1367, + [SMALL_STATE(30)] = 1419, + [SMALL_STATE(31)] = 1471, + [SMALL_STATE(32)] = 1523, + [SMALL_STATE(33)] = 1575, + [SMALL_STATE(34)] = 1627, + [SMALL_STATE(35)] = 1679, + [SMALL_STATE(36)] = 1733, + [SMALL_STATE(37)] = 1785, + [SMALL_STATE(38)] = 1875, + [SMALL_STATE(39)] = 1965, + [SMALL_STATE(40)] = 2055, + [SMALL_STATE(41)] = 2109, + [SMALL_STATE(42)] = 2160, + [SMALL_STATE(43)] = 2216, + [SMALL_STATE(44)] = 2292, + [SMALL_STATE(45)] = 2376, + [SMALL_STATE(46)] = 2460, + [SMALL_STATE(47)] = 2544, + [SMALL_STATE(48)] = 2628, + [SMALL_STATE(49)] = 2712, + [SMALL_STATE(50)] = 2796, + [SMALL_STATE(51)] = 2880, + [SMALL_STATE(52)] = 2964, + [SMALL_STATE(53)] = 3048, + [SMALL_STATE(54)] = 3132, + [SMALL_STATE(55)] = 3216, + [SMALL_STATE(56)] = 3300, + [SMALL_STATE(57)] = 3384, + [SMALL_STATE(58)] = 3468, + [SMALL_STATE(59)] = 3552, + [SMALL_STATE(60)] = 3636, + [SMALL_STATE(61)] = 3720, + [SMALL_STATE(62)] = 3804, + [SMALL_STATE(63)] = 3888, + [SMALL_STATE(64)] = 3972, + [SMALL_STATE(65)] = 4056, + [SMALL_STATE(66)] = 4140, + [SMALL_STATE(67)] = 4224, + [SMALL_STATE(68)] = 4308, + [SMALL_STATE(69)] = 4392, + [SMALL_STATE(70)] = 4476, + [SMALL_STATE(71)] = 4560, + [SMALL_STATE(72)] = 4644, + [SMALL_STATE(73)] = 4728, + [SMALL_STATE(74)] = 4812, + [SMALL_STATE(75)] = 4896, + [SMALL_STATE(76)] = 4950, + [SMALL_STATE(77)] = 5000, + [SMALL_STATE(78)] = 5058, + [SMALL_STATE(79)] = 5120, + [SMALL_STATE(80)] = 5180, + [SMALL_STATE(81)] = 5244, + [SMALL_STATE(82)] = 5312, + [SMALL_STATE(83)] = 5382, + [SMALL_STATE(84)] = 5454, + [SMALL_STATE(85)] = 5538, + [SMALL_STATE(86)] = 5616, + [SMALL_STATE(87)] = 5659, + [SMALL_STATE(88)] = 5702, + [SMALL_STATE(89)] = 5744, + [SMALL_STATE(90)] = 5791, + [SMALL_STATE(91)] = 5835, + [SMALL_STATE(92)] = 5877, + [SMALL_STATE(93)] = 5915, + [SMALL_STATE(94)] = 5971, + [SMALL_STATE(95)] = 6017, + [SMALL_STATE(96)] = 6067, + [SMALL_STATE(97)] = 6115, + [SMALL_STATE(98)] = 6167, + [SMALL_STATE(99)] = 6225, + [SMALL_STATE(100)] = 6285, + [SMALL_STATE(101)] = 6347, + [SMALL_STATE(102)] = 6407, + [SMALL_STATE(103)] = 6465, + [SMALL_STATE(104)] = 6523, + [SMALL_STATE(105)] = 6583, + [SMALL_STATE(106)] = 6643, + [SMALL_STATE(107)] = 6703, + [SMALL_STATE(108)] = 6760, + [SMALL_STATE(109)] = 6817, + [SMALL_STATE(110)] = 6874, + [SMALL_STATE(111)] = 6931, + [SMALL_STATE(112)] = 6988, + [SMALL_STATE(113)] = 7016, + [SMALL_STATE(114)] = 7044, + [SMALL_STATE(115)] = 7072, + [SMALL_STATE(116)] = 7100, + [SMALL_STATE(117)] = 7128, + [SMALL_STATE(118)] = 7154, + [SMALL_STATE(119)] = 7179, + [SMALL_STATE(120)] = 7202, + [SMALL_STATE(121)] = 7225, + [SMALL_STATE(122)] = 7241, + [SMALL_STATE(123)] = 7257, + [SMALL_STATE(124)] = 7275, + [SMALL_STATE(125)] = 7289, + [SMALL_STATE(126)] = 7303, + [SMALL_STATE(127)] = 7313, + [SMALL_STATE(128)] = 7323, + [SMALL_STATE(129)] = 7337, + [SMALL_STATE(130)] = 7351, + [SMALL_STATE(131)] = 7365, + [SMALL_STATE(132)] = 7375, + [SMALL_STATE(133)] = 7389, + [SMALL_STATE(134)] = 7401, + [SMALL_STATE(135)] = 7410, + [SMALL_STATE(136)] = 7421, + [SMALL_STATE(137)] = 7432, + [SMALL_STATE(138)] = 7441, + [SMALL_STATE(139)] = 7450, + [SMALL_STATE(140)] = 7461, + [SMALL_STATE(141)] = 7472, + [SMALL_STATE(142)] = 7481, + [SMALL_STATE(143)] = 7492, + [SMALL_STATE(144)] = 7503, + [SMALL_STATE(145)] = 7514, + [SMALL_STATE(146)] = 7525, + [SMALL_STATE(147)] = 7536, + [SMALL_STATE(148)] = 7547, + [SMALL_STATE(149)] = 7556, + [SMALL_STATE(150)] = 7567, + [SMALL_STATE(151)] = 7578, + [SMALL_STATE(152)] = 7586, + [SMALL_STATE(153)] = 7594, + [SMALL_STATE(154)] = 7602, + [SMALL_STATE(155)] = 7610, + [SMALL_STATE(156)] = 7618, + [SMALL_STATE(157)] = 7626, + [SMALL_STATE(158)] = 7634, + [SMALL_STATE(159)] = 7642, + [SMALL_STATE(160)] = 7650, + [SMALL_STATE(161)] = 7658, + [SMALL_STATE(162)] = 7666, + [SMALL_STATE(163)] = 7674, + [SMALL_STATE(164)] = 7682, + [SMALL_STATE(165)] = 7690, + [SMALL_STATE(166)] = 7698, + [SMALL_STATE(167)] = 7706, + [SMALL_STATE(168)] = 7714, + [SMALL_STATE(169)] = 7722, + [SMALL_STATE(170)] = 7730, + [SMALL_STATE(171)] = 7738, + [SMALL_STATE(172)] = 7746, }; 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 = false}}, SHIFT(2), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), - [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(89), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), - [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), - [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), - [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(52), - [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [33] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_local_path, 1, 0, 0), - [35] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_local_path, 1, 0, 0), - [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(169), - [39] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_path, 1, 0, 0), - [41] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_path, 1, 0, 0), - [43] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_path, 2, 0, 0), - [45] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_path, 2, 0, 0), - [47] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_local_path, 2, 0, 0), - [49] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_local_path, 2, 0, 0), - [51] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), - [53] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), - [55] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_argument_path_repeat1, 2, 0, 0), SHIFT_REPEAT(169), - [58] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), - [60] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), - [62] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [64] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [66] = {.entry = {.count = 1, .reusable = false}}, SHIFT(121), - [68] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [70] = {.entry = {.count = 1, .reusable = false}}, SHIFT(21), - [72] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [74] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [76] = {.entry = {.count = 1, .reusable = false}}, SHIFT(156), - [78] = {.entry = {.count = 1, .reusable = false}}, SHIFT(158), - [80] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [82] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(2), - [85] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(25), - [88] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(25), - [91] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(13), - [94] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(21), - [97] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(173), - [100] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(167), - [103] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(159), - [106] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(35), - [109] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(61), - [112] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(52), - [115] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(3), - [118] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(26), - [121] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(11), - [124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), - [126] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(156), - [129] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(158), - [132] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), - [134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), - [138] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [140] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [142] = {.entry = {.count = 1, .reusable = false}}, SHIFT(150), - [144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 11), - [146] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 11), - [148] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), - [150] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), - [152] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 2, 0, 0), - [154] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 2, 0, 0), - [156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 10), - [158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 10), - [160] = {.entry = {.count = 1, .reusable = false}}, SHIFT(141), - [162] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 3, 0, 0), - [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 3, 0, 0), - [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_void, 2, 0, 0), - [168] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_void, 2, 0, 0), - [170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), - [172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), - [174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), - [176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [178] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [180] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), - [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), - [184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [188] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [190] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 7), - [192] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 7), - [194] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 8), - [196] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 8), - [198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), - [200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), - [202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [210] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(2), - [213] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(25), - [216] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(25), - [219] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(13), - [222] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(89), - [225] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(173), - [228] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(167), - [231] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(159), - [234] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(35), - [237] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(58), - [240] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(52), - [243] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), - [246] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(26), - [249] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [251] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(11), - [254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [256] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [258] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 12), - [262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 12), - [264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 16), - [266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 16), - [268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 17), - [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 17), - [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 19), - [278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 19), - [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 20), - [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 20), - [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), - [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), - [288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [298] = {.entry = {.count = 1, .reusable = false}}, SHIFT(65), - [300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [304] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), - [306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 22), - [310] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 22), - [312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(68), - [314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70), - [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), - [320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [322] = {.entry = {.count = 1, .reusable = false}}, SHIFT(73), - [324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [326] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), - [328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), - [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), - [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), - [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), - [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [340] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), - [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), - [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), - [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [352] = {.entry = {.count = 1, .reusable = false}}, SHIFT(44), - [354] = {.entry = {.count = 1, .reusable = false}}, SHIFT(46), - [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), - [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), - [362] = {.entry = {.count = 1, .reusable = false}}, SHIFT(50), - [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), - [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 15), - [372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 18), - [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), - [376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), - [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [382] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closed_expression, 2, 0, 0), - [384] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closed_expression, 2, 0, 0), - [386] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for, 5, 0, 24), - [388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for, 5, 0, 24), - [390] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let, 5, 0, 23), - [392] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let, 5, 0, 23), - [394] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assign, 4, 0, 21), - [396] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assign, 4, 0, 21), - [398] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [400] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_operator, 1, 0, 3), - [402] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_operator, 1, 0, 3), - [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), - [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), - [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [412] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(147), - [415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [417] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(165), - [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), - [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), - [424] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(160), - [427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), - [429] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__declaration_type, 2, 0, 13), - [431] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_type, 1, 0, 14), - [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), - [435] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 6), - [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), - [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), - [443] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), - [449] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), - [453] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), - [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), - [459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), - [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [469] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), + [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(86), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [31] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), + [33] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), + [35] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(164), + [38] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), + [40] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), + [42] = {.entry = {.count = 1, .reusable = false}}, SHIFT(164), + [44] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), + [46] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), + [48] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [50] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [52] = {.entry = {.count = 1, .reusable = false}}, SHIFT(118), + [54] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [56] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(3), + [59] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [62] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [65] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(10), + [68] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(35), + [71] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(167), + [74] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(157), + [77] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(156), + [80] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(22), + [83] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(63), + [86] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(59), + [89] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(39), + [92] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(9), + [95] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), + [97] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(162), + [100] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(161), + [103] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), + [105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [109] = {.entry = {.count = 1, .reusable = false}}, SHIFT(162), + [111] = {.entry = {.count = 1, .reusable = false}}, SHIFT(161), + [113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(89), + [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [121] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [123] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [125] = {.entry = {.count = 1, .reusable = false}}, SHIFT(146), + [127] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 10), + [129] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 10), + [131] = {.entry = {.count = 1, .reusable = false}}, SHIFT(136), + [133] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 3, 0, 0), + [135] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 3, 0, 0), + [137] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 2, 0, 0), + [139] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 2, 0, 0), + [141] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [143] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 11), + [147] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 11), + [149] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 7), + [151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 7), + [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), + [155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), + [157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [159] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [163] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [167] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [169] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 8), + [171] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 8), + [173] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), + [175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), + [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [179] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [181] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_void, 2, 0, 0), + [183] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_void, 2, 0, 0), + [185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), + [187] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), + [189] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), + [191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), + [193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 12), + [195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 12), + [197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 16), + [199] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 16), + [201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 17), + [203] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 17), + [205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [207] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [209] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 19), + [211] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 19), + [213] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 20), + [215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 20), + [217] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), + [219] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [221] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [223] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [225] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), + [228] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [231] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [234] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), + [237] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(86), + [240] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(167), + [243] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(157), + [246] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(156), + [249] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(22), + [252] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(56), + [255] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(59), + [258] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(39), + [261] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [263] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(9), + [266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [268] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [270] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [278] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), + [280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 22), + [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 22), + [286] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [288] = {.entry = {.count = 1, .reusable = false}}, SHIFT(68), + [290] = {.entry = {.count = 1, .reusable = false}}, SHIFT(69), + [292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [294] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), + [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(74), + [304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), + [308] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), + [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [316] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [322] = {.entry = {.count = 1, .reusable = false}}, SHIFT(46), + [324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [328] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), + [330] = {.entry = {.count = 1, .reusable = false}}, SHIFT(49), + [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [334] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), + [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [342] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [350] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 15), + [352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 18), + [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), + [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [362] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closed_expression, 2, 0, 0), + [364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closed_expression, 2, 0, 0), + [366] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assign, 4, 0, 21), + [368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assign, 4, 0, 21), + [370] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let, 5, 0, 23), + [372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let, 5, 0, 23), + [374] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for, 5, 0, 24), + [376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for, 5, 0, 24), + [378] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [380] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_operator, 1, 0, 3), + [382] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_operator, 1, 0, 3), + [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [392] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(144), + [395] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), + [403] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_type, 1, 0, 14), + [405] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__declaration_type, 2, 0, 13), + [407] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(165), + [410] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), + [412] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(163), + [415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [419] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 6), + [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [423] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [429] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [439] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [447] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), + [455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), + [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), + [461] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [463] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), + [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), + [467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), + [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), - [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [477] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [479] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [483] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), - [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), - [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), - [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [493] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), - [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), - [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), - [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [501] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [505] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), - [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), - [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), - [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [473] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), + [475] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), + [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), + [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt b/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt index 7a6ddc9..11eaddd 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt @@ -14,8 +14,7 @@ Assign (statement (assign (path - (local_path - (identifier))) + (identifier)) (assignment_operator) (expression (signed_integer (integer (base_ten))))))))) @@ -36,6 +35,5 @@ Let (statement (let (identifier) - (assignment_operator) (expression (signed_integer (integer (base_ten))))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index 1b28b35..cabf4a1 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -12,9 +12,8 @@ Empty (void) (closure_captured_variables) (path - (local_path - (identifier) - (identifier))) + (identifier) + (identifier)) (expression (procedural_block))))) @@ -35,9 +34,8 @@ Capture (identifier) (identifier)) (path - (local_path - (identifier) - (identifier))) + (identifier) + (identifier)) (expression (procedural_block))))) @@ -58,9 +56,8 @@ Capture, (identifier) (identifier)) (path - (local_path - (identifier) - (identifier))) + (identifier) + (identifier)) (expression (procedural_block))))) @@ -80,16 +77,14 @@ With a statement (void) (closure_captured_variables) (path - (local_path - (identifier) - (identifier))) + (identifier) + (identifier)) (expression (procedural_block (statement (assign (path - (local_path - (identifier))) + (identifier)) (assignment_operator) (expression (signed_integer (integer (base_ten))))))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt b/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt index 787e580..cd23be5 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt @@ -87,8 +87,7 @@ If statement (if (expression (path - (local_path - (identifier)))) + (identifier))) (procedural_block)))) (statement (expression diff --git a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt index 01f507b..eb0dd11 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt @@ -13,7 +13,7 @@ Comment (void))) ================== -Comment +Comment before closure ================== # There's a comment before the code. @@ -28,8 +28,7 @@ Comment (void) (closure_captured_variables) (path - (local_path - (identifier) - (identifier))) + (identifier) + (identifier)) (expression - (procedural_block))))) \ No newline at end of file + (procedural_block))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt b/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt index 14e0bb6..b6b06d0 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt @@ -13,8 +13,7 @@ One (identifier) (expression (path - (local_path - (identifier)))))))) + (identifier))))))) ================== One, @@ -31,8 +30,7 @@ One, (identifier) (expression (path - (local_path - (identifier)))))))) + (identifier))))))) ================== One, two @@ -49,14 +47,12 @@ One, two (identifier) (expression (path - (local_path - (identifier))))) + (identifier)))) (dictionary_member_assignment (identifier) (expression (path - (local_path - (identifier)))))))) + (identifier))))))) ================== One, two, @@ -73,11 +69,9 @@ One, two, (identifier) (expression (path - (local_path - (identifier))))) + (identifier)))) (dictionary_member_assignment (identifier) (expression (path - (local_path - (identifier)))))))) \ No newline at end of file + (identifier))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt b/crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt index 934b673..55ee92f 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt @@ -1,5 +1,5 @@ ================== -Assign +For loop ================== { @@ -16,6 +16,5 @@ Assign (identifier) (expression (path - (local_path - (identifier)))) - (procedural_block)))))) \ No newline at end of file + (identifier))) + (procedural_block)))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/list.txt b/crates/tree-sitter-command-cad-model/test/corpus/list.txt index 63f5847..8ba21a4 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/list.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/list.txt @@ -23,8 +23,7 @@ Single (list (expression (path - (local_path - (identifier))))))) + (identifier)))))) ================== Multi @@ -39,20 +38,16 @@ Multi (list (expression (path - (local_path - (identifier)))) + (identifier))) (expression (path - (local_path - (identifier)))) + (identifier))) (expression (path - (local_path - (identifier)))) + (identifier))) (expression (path - (local_path - (identifier))))))) + (identifier)))))) ================== Multi with comma at the end @@ -67,17 +62,13 @@ Multi with comma at the end (list (expression (path - (local_path - (identifier)))) + (identifier))) (expression (path - (local_path - (identifier)))) + (identifier))) (expression (path - (local_path - (identifier)))) + (identifier))) (expression (path - (local_path - (identifier))))))) \ No newline at end of file + (identifier)))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt b/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt index dc560b5..3266481 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt @@ -17,29 +17,23 @@ Precedence (binary_expression (expression (path - (local_path - (identifier)))) + (identifier))) (expression (binary_expression (expression (path - (local_path - (identifier)))) + (identifier))) (expression (binary_expression (expression (path - (local_path - (identifier)))) + (identifier))) (expression (path - (local_path - (identifier)))))))))) + (identifier))))))))) (expression (path - (local_path - (identifier)))))))) + (identifier))))))) (expression (path - (local_path - (identifier))))))) \ No newline at end of file + (identifier)))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt b/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt index fa978ed..6d7181a 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt @@ -12,9 +12,8 @@ One (struct_member (identifier) (path - (local_path - (identifier) - (identifier))))))) + (identifier) + (identifier)))))) ================== One, @@ -30,9 +29,8 @@ One, (struct_member (identifier) (path - (local_path - (identifier) - (identifier))))))) + (identifier) + (identifier)))))) ================== ... @@ -74,9 +72,8 @@ One, ... (struct_member (identifier) (path - (local_path - (identifier) - (identifier)))) + (identifier) + (identifier))) (varadic_dots)))) ================== @@ -93,9 +90,8 @@ One, ..., (struct_member (identifier) (path - (local_path - (identifier) - (identifier)))) + (identifier) + (identifier))) (varadic_dots)))) ================== @@ -112,15 +108,13 @@ One, two (struct_member (identifier) (path - (local_path - (identifier) - (identifier)))) + (identifier) + (identifier))) (struct_member (identifier) (path - (local_path - (identifier) - (identifier))))))) + (identifier) + (identifier)))))) ================== One, two, @@ -136,15 +130,13 @@ One, two, (struct_member (identifier) (path - (local_path - (identifier) - (identifier)))) + (identifier) + (identifier))) (struct_member (identifier) (path - (local_path - (identifier) - (identifier))))))) + (identifier) + (identifier)))))) ================== One, two, ... @@ -160,15 +152,13 @@ One, two, ... (struct_member (identifier) (path - (local_path - (identifier) - (identifier)))) + (identifier) + (identifier))) (struct_member (identifier) (path - (local_path - (identifier) - (identifier)))) + (identifier) + (identifier))) (varadic_dots)))) ================== @@ -185,15 +175,13 @@ One, two, ..., (struct_member (identifier) (path - (local_path - (identifier) - (identifier)))) + (identifier) + (identifier))) (struct_member (identifier) (path - (local_path - (identifier) - (identifier)))) + (identifier) + (identifier))) (varadic_dots)))) ================== @@ -210,13 +198,11 @@ Default (struct_member (identifier) (path - (local_path - (identifier) - (identifier))) + (identifier) + (identifier)) (expression (path - (local_path - (identifier)))))))) + (identifier))))))) ================== Default, @@ -232,10 +218,8 @@ Default, (struct_member (identifier) (path - (local_path - (identifier) - (identifier))) + (identifier) + (identifier)) (expression (path - (local_path - (identifier)))))))) + (identifier))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt b/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt index bb16d59..9bcd327 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt @@ -1,5 +1,5 @@ ================== -Local Variable Path +Variable Path ================== this.is.a.test @@ -9,38 +9,7 @@ this.is.a.test (source_file (expression (path - (local_path - (identifier) - (identifier) - (identifier) - (identifier))))) - -================== -Argument -================== - -@ - ---- - -(source_file -(expression - (path - (argument_path)))) - -================== -Argument Variable Path -================== - -@.this.is.a.test - ---- - -(source_file -(expression - (path - (argument_path - (identifier) - (identifier) - (identifier) - (identifier))))) \ No newline at end of file + (identifier) + (identifier) + (identifier) + (identifier)))) From ea2156118f1499025def41e0d62aafc77a1e6d3b Mon Sep 17 00:00:00 2001 From: James Carl Date: Tue, 8 Apr 2025 18:18:50 -0400 Subject: [PATCH 016/106] Implement assignment statements --- crates/interpreter/src/execution/mod.rs | 155 +++++++++++++++--- .../src/execution/values/boolean.rs | 2 +- .../src/execution/values/integer.rs | 80 ++++++++- .../interpreter/src/execution/values/mod.rs | 18 +- 4 files changed, 227 insertions(+), 28 deletions(-) diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 946dfc4..d7f4c7a 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -18,7 +18,9 @@ use std::{cmp::Ordering, fmt::Display}; -use crate::compile::{self, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation}; +use crate::compile::{ + self, AssignmentType, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation, +}; mod errors; mod formatting; @@ -39,6 +41,29 @@ pub struct CachedExpression {} pub struct RuntimeContext {} +macro_rules! find_value { + ($path_iter:expr, $stack_trace:ident, $stack:ident.$stack_method:ident) => {{ + // An empty path should be impossible. + let mut path_iter = $path_iter; + let root = path_iter.next().expect("Path is empty"); + + let mut value = $stack.$stack_method( + $stack_trace, + LocatedStr { + location: root.reference.clone(), + string: &root.node, + }, + )?; + + // Follow the chain of elements to evaluate the whole path. + for sub_path in path_iter { + todo!(); + } + + Ok(value) + }}; +} + pub fn execute_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, @@ -59,25 +84,7 @@ pub fn execute_expression( compile::Expression::List(ast_node) => todo!(), compile::Expression::Parenthesis(ast_node) => todo!(), compile::Expression::Path(ast_node) => { - let mut path_iter = ast_node.node.path.iter(); - - // An empty path should be impossible. - let root = path_iter.next().expect("Path is empty"); - - let mut value = stack.get_variable( - stack_trace, - LocatedStr { - location: root.reference.clone(), - string: &root.node, - }, - )?; - - // Follow the chain of elements to evaluate the whole path. - for sub_path in path_iter { - todo!(); - } - - Ok(value.clone()) + find_value!(ast_node.node.path.iter(), stack_trace, stack.get_variable).cloned() } compile::Expression::ProceduralBlock(ast_node) => { execute_procedural_block(log, stack, stack_trace, ast_node) @@ -155,7 +162,7 @@ fn execute_binary_expression( Ordering::Less )) .into()), - BinaryExpressionOperation::LtLt => todo!(), + BinaryExpressionOperation::LtLt => value_a.left_shift(log, stack_trace, &value_b), BinaryExpressionOperation::LtEq => Ok(values::Boolean(matches!( value_a.cmp(log, stack_trace, &value_b)?, Ordering::Less | Ordering::Equal @@ -176,7 +183,7 @@ fn execute_binary_expression( Ordering::Equal | Ordering::Greater )) .into()), - BinaryExpressionOperation::GtGt => todo!(), + BinaryExpressionOperation::GtGt => value_a.right_shift(log, stack_trace, &value_b), BinaryExpressionOperation::BitXor => value_a.bit_xor(log, stack_trace, &value_b), BinaryExpressionOperation::Or => value_a.bit_or(log, stack_trace, &value_b), BinaryExpressionOperation::OrOr => value_a.or(log, stack_trace, &value_b), @@ -260,7 +267,66 @@ fn execute_statement( stack_trace.stack_scope( statement.reference.clone(), |stack_trace| match &statement.node { - compile::Statement::Assign(ast_node) => todo!(), + compile::Statement::Assign(ast_node) => { + let value = execute_expression(log, stack_trace, stack, &ast_node.node.value)?; + + let original_value = find_value!( + ast_node.node.to_assign.node.path.iter(), + stack_trace, + stack.get_variable_mut + )?; + + // Start with a type check. + if value.get_type() == original_value.get_type() { + // Okay, we're good to assign the value. + + let new_value = match ast_node.node.assignment_type.node { + AssignmentType::Direct => value, + AssignmentType::BitAnd => { + original_value.bit_and(log, stack_trace, &value)? + } + AssignmentType::BitOr => original_value.bit_or(log, stack_trace, &value)?, + AssignmentType::BitXor => { + original_value.bit_xor(log, stack_trace, &value)? + } + AssignmentType::LogicAnd => original_value.and(log, stack_trace, &value)?, + AssignmentType::LogicOr => original_value.or(log, stack_trace, &value)?, + AssignmentType::LogicXor => original_value.xor(log, stack_trace, &value)?, + AssignmentType::Add => original_value.addition(log, stack_trace, &value)?, + AssignmentType::Sub => { + original_value.subtraction(log, stack_trace, &value)? + } + AssignmentType::Exponent => { + original_value.exponent(log, stack_trace, &value)? + } + AssignmentType::Multiply => { + original_value.multiply(log, stack_trace, &value)? + } + AssignmentType::IntegerDivision => { + original_value.floor_divide(log, stack_trace, &value)? + } + AssignmentType::Division => { + original_value.divide(log, stack_trace, &value)? + } + AssignmentType::LeftShift => { + original_value.left_shift(log, stack_trace, &value)? + } + AssignmentType::RightShift => { + original_value.right_shift(log, stack_trace, &value)? + } + }; + + *original_value = new_value; + + Ok(values::Void.into()) + } else { + Err(AssignmentTypeMissmatch { + expected: original_value.get_type(), + got: value.get_type(), + } + .to_error(stack_trace.iter())) + } + } compile::Statement::Let(ast_node) => { let value = execute_expression(log, stack_trace, stack, &ast_node.node.value)?; @@ -281,6 +347,23 @@ fn execute_statement( ) } +#[derive(Debug, Eq, PartialEq)] +struct AssignmentTypeMissmatch { + expected: ValueType, + got: ValueType, +} + +impl ErrorType for AssignmentTypeMissmatch {} + +impl Display for AssignmentTypeMissmatch { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "When assigning a new value to an already defined variable, you cannot change the variable's type. This variable's type was `{}`, but you tried to assign it a value with a `{}` typing.", self.expected, self.got + ) + } +} + #[cfg(test)] mod test { use super::*; @@ -414,4 +497,30 @@ mod test { .unwrap(); assert_eq!(product, values::UnsignedInteger::from(5).into()); } + + #[test] + fn assign_statement() { + let root = compile::full_compile("test_file.ccm", "{ let value = 5u; value = 4u; value }"); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); + assert_eq!(product, values::UnsignedInteger::from(4).into()); + } + + #[test] + fn assign_statement_with_wrong_type() { + // Fails because of a type mismatch. + let root = compile::full_compile("test_file.ccm", "{ let value = 5u; value = 4i; value }"); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap_err(); + } } diff --git a/crates/interpreter/src/execution/values/boolean.rs b/crates/interpreter/src/execution/values/boolean.rs index 67e475e..22bdb6f 100644 --- a/crates/interpreter/src/execution/values/boolean.rs +++ b/crates/interpreter/src/execution/values/boolean.rs @@ -61,7 +61,7 @@ impl Object for Boolean { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - rhs: Value, + rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self((self.0 && rhs.0) || (!self.0 && !rhs.0)).into()) diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index 0ddf18f..1af52a0 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -23,7 +23,7 @@ use num_traits::{ use std::{ cmp::Ordering, hash::Hash, - ops::{BitAnd, BitOr, BitXor, Not}, + ops::{BitAnd, BitOr, BitXor, Not, Shl, Shr}, }; use crate::{ @@ -60,6 +60,8 @@ where + BitAnd + BitOr + BitXor + + Shl + + Shr + Neg + Not + One @@ -199,6 +201,24 @@ where })?) .into()) } + fn left_shift( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(Self(self.0 << rhs.0).into()) + } + fn right_shift( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: &Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(Self(self.0 >> rhs.0).into()) + } fn unary_plus( &self, _log: &mut dyn RuntimeLog, @@ -554,6 +574,34 @@ mod test { assert_eq!(product, SignedInteger::from(216).into()); } + #[test] + fn signed_shift_left() { + let root = compile::full_compile("test_file.ccm", "0x0Fi << 4i"); + + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); + assert_eq!(product, SignedInteger::from(0xF0).into()); + } + + #[test] + fn signed_shift_right() { + let root = compile::full_compile("test_file.ccm", "0xF0i >> 4i"); + + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); + assert_eq!(product, SignedInteger::from(0x0F).into()); + } + #[test] fn signed_unary_plus() { let root = compile::full_compile("test_file.ccm", "+3i"); @@ -596,8 +644,6 @@ mod test { assert_eq!(product, SignedInteger::from(!0xAA).into()); } - //////////////////// - #[test] fn unsigned_bit_or() { let root = compile::full_compile("test_file.ccm", "0xAAu | 0x55u"); @@ -869,6 +915,34 @@ mod test { assert_eq!(product, UnsignedInteger::from(216).into()); } + #[test] + fn unsigned_shift_left() { + let root = compile::full_compile("test_file.ccm", "0x0Fu << 4u"); + + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); + assert_eq!(product, UnsignedInteger::from(0xF0).into()); + } + + #[test] + fn unsigned_shift_right() { + let root = compile::full_compile("test_file.ccm", "0xF0u >> 4u"); + + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); + assert_eq!(product, UnsignedInteger::from(0x0F).into()); + } + #[test] fn unsigned_unary_plus() { let root = compile::full_compile("test_file.ccm", "+3u"); diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 71013d1..6361ac7 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -123,7 +123,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _rhs: Value, + _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "logical xor") } @@ -215,6 +215,22 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "exponent") } + fn left_shift( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + _rhs: &Value, + ) -> ExpressionResult { + UnsupportedOperationError::raise(self, stack_trace, "left shift") + } + fn right_shift( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + _rhs: &Value, + ) -> ExpressionResult { + UnsupportedOperationError::raise(self, stack_trace, "right shift") + } // fn attribute( // &self, // _log: &mut dyn RuntimeLog, From 04b6e226387535fadb08d333423976872c75f304 Mon Sep 17 00:00:00 2001 From: James Carl Date: Tue, 8 Apr 2025 23:47:27 -0400 Subject: [PATCH 017/106] Implement parenthesis --- crates/interpreter/src/compile/expressions.rs | 21 ++++++++----------- crates/interpreter/src/execution/mod.rs | 20 ++++++++++++++++-- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 69cc606..75c103c 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -41,7 +41,7 @@ pub enum Expression { DictionaryConstruction(AstNode), If(AstNode), List(AstNode>>), - Parenthesis(AstNode>), + Parenthesis(Box>), Path(AstNode), ProceduralBlock(AstNode), Scalar(AstNode), @@ -197,7 +197,7 @@ impl<'t> Parse<'t, nodes::Parenthesis<'t>> for Expression { Ok(AstNode::new( file, &value, - Self::Parenthesis(Self::parse(file, input, expression).map(|e| e.into_box())?), + Self::Parenthesis(Box::new(Self::parse(file, input, expression)?)), )) } } @@ -1323,16 +1323,13 @@ mod test { root, AstNode { reference: root.reference.clone(), - node: Expression::Parenthesis( - AstNode { - reference: parenthesis_reference, - node: Expression::SignedInteger(AstNode { - reference: integer.reference.clone(), - node: 5 - }) - } - .into_box() - ) + node: Expression::Parenthesis(Box::new(AstNode { + reference: parenthesis_reference, + node: Expression::SignedInteger(AstNode { + reference: integer.reference.clone(), + node: 5 + }) + })) } ); } diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index d7f4c7a..18a73fd 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -82,7 +82,9 @@ pub fn execute_expression( compile::Expression::DictionaryConstruction(ast_node) => todo!(), compile::Expression::If(ast_node) => todo!(), compile::Expression::List(ast_node) => todo!(), - compile::Expression::Parenthesis(ast_node) => todo!(), + compile::Expression::Parenthesis(ast_node) => { + execute_expression(log, stack_trace, stack, &ast_node) + } compile::Expression::Path(ast_node) => { find_value!(ast_node.node.path.iter(), stack_trace, stack.get_variable).cloned() } @@ -515,7 +517,7 @@ mod test { fn assign_statement_with_wrong_type() { // Fails because of a type mismatch. let root = compile::full_compile("test_file.ccm", "{ let value = 5u; value = 4i; value }"); - let product = execute_expression( + execute_expression( &mut Vec::new(), &mut Vec::new(), &mut Stack::default(), @@ -523,4 +525,18 @@ mod test { ) .unwrap_err(); } + + #[test] + fn parenthesis() { + // Fails because of a type mismatch. + let root = compile::full_compile("test_file.ccm", "(1i + 2i) * 3i"); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut Stack::default(), + &root, + ) + .unwrap(); + assert_eq!(product, values::SignedInteger::from(9).into()); + } } From 5cffc985458ab85133434fd60edcb2bb7456ec83 Mon Sep 17 00:00:00 2001 From: James Carl Date: Wed, 9 Apr 2025 18:12:15 -0400 Subject: [PATCH 018/106] Rework of parsing for closures --- Cargo.lock | 1 + crates/interpreter/Cargo.toml | 1 + crates/interpreter/src/compile/expressions.rs | 368 +- crates/interpreter/src/execution/mod.rs | 6 +- .../src/execution/values/closure.rs | 612 +- .../src/execution/values/dictionary.rs | 17 + .../interpreter/src/execution/values/mod.rs | 33 +- .../src/execution/values/value_type.rs | 15 +- .../tree-sitter-command-cad-model/grammar.js | 24 +- .../src/grammar.json | 180 +- .../src/node-types.json | 78 + .../src/parser.c | 5954 +++++++++-------- .../test/corpus/closure.txt | 121 + 13 files changed, 4351 insertions(+), 3059 deletions(-) create mode 100644 crates/interpreter/src/execution/values/dictionary.rs diff --git a/Cargo.lock b/Cargo.lock index 7d1f917..c1d9426 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -937,6 +937,7 @@ dependencies = [ "enum_dispatch", "enum_downcast", "file-guard", + "fortuples", "num-traits", "tree-sitter", "tree-sitter-command-cad-model", diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index 6d959ba..3027739 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -15,6 +15,7 @@ enum_dispatch = "0.3" enum_downcast = { version = "0.1", features = [ "derive" ] } compact_str = "0.9" num-traits = "0.2" +fortuples = "0.9" [build-dependencies] type-sitter-gen = "0.6" diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 75c103c..899e2d7 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -51,6 +51,8 @@ pub enum Expression { UnaryExpression(AstNode>), UnsignedInteger(AstNode), Void(AstNode<()>), + FunctionCall(AstNode), + MethodCall(AstNode), } impl<'t> Parse<'t, nodes::anon_unions::Path_StructDefinition_Void<'t>> for Expression { @@ -377,6 +379,34 @@ impl<'t> Parse<'t, nodes::UnsignedInteger<'t>> for Expression { } } +impl<'t> Parse<'t, nodes::FunctionCall<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FunctionCall<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::FunctionCall(FunctionCall::parse(file, input, value)?), + )) + } +} + +impl<'t> Parse<'t, nodes::MethodCall<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::MethodCall<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::MethodCall(MethodCall::parse(file, input, value)?), + )) + } +} + impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { fn parse<'i>( file: &Arc, @@ -425,6 +455,8 @@ impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { &value, Self::Void(AstNode::new(file, &void, ())), )), + ChildType::FunctionCall(function_call) => Self::parse(file, input, function_call), + ChildType::MethodCall(method_call) => Self::parse(file, input, method_call), } } } @@ -795,7 +827,7 @@ pub struct ClosureDefinition { pub argument: AstNode, pub captures: Vec>, pub returns: AstNode, - pub expression: AstNode, + pub expression: AstNode>, } impl<'t> Parse<'t, nodes::ClosureDefinition<'t>> for ClosureDefinition { @@ -824,6 +856,10 @@ impl<'t> Parse<'t, nodes::ClosureDefinition<'t>> for ClosureDefinition { let expression = value.expression()?; let expression = Expression::parse(file, input, expression)?; + let expression = AstNode { + reference: expression.reference, + node: Arc::new(expression.node), + }; Ok(AstNode::new( file, @@ -916,6 +952,78 @@ impl<'t> Parse<'t, nodes::StructDefinition<'t>> for StructDefinition { } } +#[derive(Debug, Hash, Eq, PartialEq, EnumAs)] +pub enum Argument { + Void(AstNode<()>), + DictionaryConstruction(AstNode), +} + +impl<'t> Parse<'t, nodes::anon_unions::DictionaryConstruction_Void<'t>> for Argument { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::anon_unions::DictionaryConstruction_Void<'t>, + ) -> Result, Error<'t, 'i>> { + use nodes::anon_unions::DictionaryConstruction_Void as ChildType; + let argument = match value { + ChildType::Void(void) => Argument::Void(AstNode::new(file, &void, ())), + ChildType::DictionaryConstruction(dictionary) => Argument::DictionaryConstruction( + DictionaryConstruction::parse(file, input, dictionary)?, + ), + }; + + Ok(AstNode::new(file, &value, argument)) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct FunctionCall { + pub to_call: AstNode>, + pub argument: AstNode, +} + +impl<'t> Parse<'t, nodes::FunctionCall<'t>> for FunctionCall { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FunctionCall<'t>, + ) -> Result, Error<'t, 'i>> { + let to_call = Expression::parse(file, input, value.to_call()?)?.into_box(); + let argument = Argument::parse(file, input, value.argument()?)?; + + Ok(AstNode::new(file, &value, Self { to_call, argument })) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct MethodCall { + pub self_dictionary: AstNode>, + pub to_call: AstNode, + pub argument: AstNode, +} + +impl<'t> Parse<'t, nodes::MethodCall<'t>> for MethodCall { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::MethodCall<'t>, + ) -> Result, Error<'t, 'i>> { + let self_dictionary = Expression::parse(file, input, value.self_dictionary()?)?.into_box(); + let to_call = String::parse(file, input, value.to_call()?)?; + let argument = Argument::parse(file, input, value.argument()?)?; + + Ok(AstNode::new( + file, + &value, + Self { + self_dictionary, + to_call, + argument, + }, + )) + } +} + pub fn new_parser() -> type_sitter::Parser> { type_sitter::Parser::new(&tree_sitter_command_cad_model::language()) .expect("Error loading CommandCadModel grammar") @@ -1070,10 +1178,10 @@ mod test { }, expression: AstNode { reference: expression_reference, - node: Expression::ProceduralBlock(AstNode { + node: Arc::new(Expression::ProceduralBlock(AstNode { reference: block_reference, node: ProceduralBlock { statements: vec![] } - }) + })) } }) }) @@ -1778,4 +1886,258 @@ mod test { } ); } + + #[test] + fn function_call_no_arguments() { + let root = full_compile("test_file.ccm", "a.b()"); + let call = root.node.as_functioncall().unwrap(); + let to_call = call.node.to_call.node.as_path().unwrap(); + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::FunctionCall(AstNode { + reference: call.reference.clone(), + node: FunctionCall { + to_call: AstNode { + reference: call.node.to_call.reference.clone(), + node: Box::new(Expression::Path(AstNode { + reference: to_call.reference.clone(), + node: IdentityPath { + path: vec![ + AstNode { + reference: to_call.node.path[0].reference.clone(), + node: "a".into() + }, + AstNode { + reference: to_call.node.path[1].reference.clone(), + node: "b".into() + } + ] + } + })) + }, + argument: AstNode { + reference: call.node.argument.reference.clone(), + node: Argument::Void(AstNode { + reference: call + .node + .argument + .node + .as_void() + .unwrap() + .reference + .clone(), + node: () + }) + } + } + }) + } + ); + } + + #[test] + fn function_call_with_arguments() { + let root = full_compile("test_file.ccm", "a.b(value = ())"); + let call = root.node.as_functioncall().unwrap(); + let to_call = call.node.to_call.node.as_path().unwrap(); + let dict = &call.node.argument.node.as_dictionaryconstruction().unwrap(); + let dict_assignment = &dict.node.assignments[0]; + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::FunctionCall(AstNode { + reference: call.reference.clone(), + node: FunctionCall { + to_call: AstNode { + reference: call.node.to_call.reference.clone(), + node: Box::new(Expression::Path(AstNode { + reference: to_call.reference.clone(), + node: IdentityPath { + path: vec![ + AstNode { + reference: to_call.node.path[0].reference.clone(), + node: "a".into() + }, + AstNode { + reference: to_call.node.path[1].reference.clone(), + node: "b".into() + } + ] + } + })) + }, + argument: AstNode { + reference: call.node.argument.reference.clone(), + node: Argument::DictionaryConstruction(AstNode { + reference: dict.reference.clone(), + node: DictionaryConstruction { + assignments: vec![AstNode { + reference: dict_assignment.reference.clone(), + node: DictionaryMemberAssignment { + name: AstNode { + reference: dict_assignment + .node + .name + .reference + .clone(), + node: "value".into() + }, + assignment: AstNode { + reference: dict_assignment + .node + .assignment + .reference + .clone(), + node: Expression::Void(AstNode { + reference: dict_assignment + .node + .assignment + .node + .as_void() + .unwrap() + .reference + .clone(), + node: () + }) + } + } + }] + } + }) + } + } + }) + } + ); + } + + #[test] + fn method_call_no_arguments() { + let root = full_compile("test_file.ccm", "():c()"); + let call = root.node.as_methodcall().unwrap(); + let to_call = &call.node.to_call; + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::MethodCall(AstNode { + reference: call.reference.clone(), + node: MethodCall { + self_dictionary: AstNode { + reference: call.node.self_dictionary.reference.clone(), + node: Box::new(Expression::Void(AstNode { + reference: call + .node + .self_dictionary + .node + .as_void() + .unwrap() + .reference + .clone(), + node: () + })) + }, + to_call: AstNode { + reference: to_call.reference.clone(), + node: "c".into() + }, + argument: AstNode { + reference: call.node.argument.reference.clone(), + node: Argument::Void(AstNode { + reference: call + .node + .argument + .node + .as_void() + .unwrap() + .reference + .clone(), + node: () + }) + } + } + }) + } + ); + } + + #[test] + fn method_call_with_arguments() { + let root = full_compile("test_file.ccm", "():c(value = ())"); + let call = root.node.as_methodcall().unwrap(); + let to_call = &call.node.to_call; + let dict = &call.node.argument.node.as_dictionaryconstruction().unwrap(); + let dict_assignment = &dict.node.assignments[0]; + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::MethodCall(AstNode { + reference: call.reference.clone(), + node: MethodCall { + self_dictionary: AstNode { + reference: call.node.self_dictionary.reference.clone(), + node: Box::new(Expression::Void(AstNode { + reference: call + .node + .self_dictionary + .node + .as_void() + .unwrap() + .reference + .clone(), + node: () + })) + }, + to_call: AstNode { + reference: to_call.reference.clone(), + node: "c".into() + }, + argument: AstNode { + reference: call.node.argument.reference.clone(), + node: Argument::DictionaryConstruction(AstNode { + reference: dict.reference.clone(), + node: DictionaryConstruction { + assignments: vec![AstNode { + reference: dict_assignment.reference.clone(), + node: DictionaryMemberAssignment { + name: AstNode { + reference: dict_assignment + .node + .name + .reference + .clone(), + node: "value".into() + }, + assignment: AstNode { + reference: dict_assignment + .node + .assignment + .reference + .clone(), + node: Expression::Void(AstNode { + reference: dict_assignment + .node + .assignment + .node + .as_void() + .unwrap() + .reference + .clone(), + node: () + }) + } + } + }] + } + }) + } + } + }) + } + ); + } } diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 18a73fd..e130a12 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -77,7 +77,9 @@ pub fn execute_expression( execute_binary_expression(log, stack_trace, stack, ast_node) } compile::Expression::Boolean(ast_node) => Ok(values::Boolean(ast_node.node).into()), - compile::Expression::ClosureDefinition(ast_node) => todo!(), + compile::Expression::ClosureDefinition(ast_node) => { + Ok(values::UserClosure::from_ast(ast_node).into()) + } compile::Expression::Default(_ast_node) => Ok(values::DefaultValue.into()), compile::Expression::DictionaryConstruction(ast_node) => todo!(), compile::Expression::If(ast_node) => todo!(), @@ -108,6 +110,8 @@ pub fn execute_expression( Ok(values::UnsignedInteger::from(ast_node.node).into()) } compile::Expression::Void(_ast_node) => Ok(values::Void.into()), + compile::Expression::FunctionCall(ast_node) => todo!(), + compile::Expression::MethodCall(ast_node) => todo!(), }, ) } diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index c708b5c..5ce5819 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -16,307 +16,365 @@ * program. If not, see . */ -use fortuples::fortuples; - -#[derive(Clone)] -pub struct UserFunction { - pub source: Rc>, -} - -impl std::fmt::Debug for UserFunction { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("UserFunction") - .field("address", &Rc::as_ptr(&self.source)) - .finish() - } -} - -impl From<&'_ Rc>> for UserFunction { - fn from(value: &'_ Rc>) -> Self { - Self { - source: Rc::clone(value), - } - } -} - -impl UserFunction { - pub fn new(source: Function) -> Self { - Self { - source: Rc::new(source), - } - } -} - -impl Object for UserFunction { - fn matches_type( - &self, - _ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(false) - } - - fn call( - &self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - spans: &[Expression], - ) -> OperatorResult> { - context.new_isolated_scope(|context| { - run_callable_block( - context, - &self.source.named_block.callable, - arguments, - spans, - span, - ) - }) - } -} - -impl PartialEq for UserFunction { - fn eq(&self, _other: &Self) -> bool { - false - } -} - -impl NamedObject for UserFunction { - fn static_type_name() -> &'static str { - "Function" - } -} +use std::{fmt::Display, sync::Arc}; -pub type BuiltinFunction = dyn Fn( - &mut ExecutionContext, - &S, - Vec>, - &[Expression], -) -> OperatorResult>; +use fortuples::fortuples; -pub struct BuiltinFunctionRef(Rc>); +use crate::compile::{AstNode, ClosureDefinition, Expression, SourceReference}; -impl std::ops::Deref for BuiltinFunctionRef { - type Target = BuiltinFunction; +use super::{Object, StaticTypeName, Value, ValueType}; - fn deref(&self) -> &Self::Target { - &*self.0 - } +#[derive(Debug, Clone, Hash, Eq, PartialEq)] +pub struct Argument { + pub source: SourceReference, + pub value: Value, } -impl std::cmp::Eq for BuiltinFunctionRef {} -impl std::cmp::PartialEq for BuiltinFunctionRef { - fn eq(&self, other: &Self) -> bool { - std::ptr::addr_eq(Rc::as_ptr(&self.0), Rc::as_ptr(&other.0)) - } +#[derive(Debug, Clone, Hash, Eq, PartialEq)] +pub struct CapturedValue { + pub name: String, + pub value: Value, } -impl Clone for BuiltinFunctionRef { - fn clone(&self) -> Self { - Self(Rc::clone(&self.0)) - } +/// Signature of a closure, used for type comparison. +#[derive(Debug, Clone, Hash, Eq, PartialEq)] +pub struct Signature { + argument_type: ValueType, + return_type: ValueType, } -impl std::fmt::Debug for BuiltinFunctionRef { +impl Display for Signature { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let mut debug_struct = f.debug_struct("BuiltinFunction"); - debug_struct.field("address", &Rc::as_ptr(&self.0)); - debug_struct.finish() + write!(f, "{}[...] -> {}", self.argument_type, self.return_type) } } -impl From>> for BuiltinFunctionRef { - fn from(value: Box>) -> Self { - Self(value.into()) - } +/// Closures are immutable, meaning that all copies can reference the same data. +/// This is that common data. +#[derive(Debug, Clone, Hash, Eq, PartialEq)] +struct UserClosureInternals { + signature: Arc, + captured_values: Vec, + expression: Arc, } -impl Object for BuiltinFunctionRef { - fn matches_type( - &self, - _ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(false) - } - - fn call( - &self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult> { - (*self)(context, span, arguments, expressions) - } +#[derive(Debug, Clone, Hash, Eq, PartialEq)] +pub struct UserClosure { + data: Arc, } -impl NamedObject for BuiltinFunctionRef { - fn static_type_name() -> &'static str { - "BuiltinFunction" +impl UserClosure { + pub fn from_ast(source: &AstNode>) -> Self { + todo!() } } -pub trait UnpackArguments { - fn unpack_arguments( - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult; - - fn unpack_arguments_optional( - _span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult; -} - -#[rustfmt::skip] -fortuples! { - impl UnpackArguments for #Tuple - where - S: Span, - #(#Member: NamedObject),* - #(Value: TryInto<#Member>),* - { - fn unpack_arguments( - _span: &S, - mut arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult { - arguments.reverse(); - let mut expression_iter = expressions.iter(); - - #(let casey::lower!(#Member) = { - if let Some(value) = arguments.pop() { - value.downcast(expression_iter.next().unwrap().get_span()).map_err(|f| f.make_from_function_call())? - } else { - return Err(Failure::MissingArguments(_span.clone()).make_from_function_call()); - } - };)* - - if let Some(extra_expression) = expression_iter.next() { - Err(Failure::TooManyArguments(extra_expression.get_span().clone()).make_from_function_call()) - } else { - Ok((#(casey::lower!(#Member)),*)) - } - } - - fn unpack_arguments_optional( - _span: &S, - mut arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult { - arguments.reverse(); - let mut expression_iter = expressions.iter(); - - #(let casey::lower!(#Member) = { - if let Some(value) = arguments.pop() { - value.downcast(expression_iter.next().unwrap().get_span()).map_err(|f| f.make_from_function_call())? - } else { - Value::::from(NoneType).downcast(_span)? - } - };)* - - if let Some(extra_expression) = expression_iter.next() { - Err(Failure::TooManyArguments(extra_expression.get_span().clone()).make_from_function_call()) - } else { - Ok((#(casey::lower!(#Member)),*)) - } - } +impl Object for UserClosure { + fn get_type(&self) -> ValueType { + ValueType::Closure(self.data.signature.clone()) } } -pub trait AutoCall -where - S: Span, -{ - type Unpacker: UnpackArguments; - - fn auto_call( - self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult>; - - fn auto_call_optional( - self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult>; -} - -#[rustfmt::skip] -fortuples! { - impl AutoCall for F - where - S: Span, - #(#Member: NamedObject),* - #(Value: TryInto<#Member>),* - F: FnOnce(&mut ExecutionContext, &S, #(#Member),*) -> OperatorResult>, - { - type Unpacker = #Tuple; - - fn auto_call( - self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult> { - let (#(casey::lower!(#Member)),*) = Self::Unpacker::unpack_arguments(span, arguments, expressions)?; - - (self)(context, span, #(casey::lower!(#Member)),*) - } - - fn auto_call_optional( - self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult> { - let (#(casey::lower!(#Member)),*) = Self::Unpacker::unpack_arguments_optional(span, arguments, expressions)?; - - (self)(context, span, #(casey::lower!(#Member)),*) - } +impl StaticTypeName for UserClosure { + fn static_type_name() -> &'static str { + "Closure" } } -pub trait IntoBuiltinFunction: AutoCall { - fn into_builtin_function(self) -> BuiltinFunctionRef; - fn into_builtin_function_optional(self) -> BuiltinFunctionRef; -} - -#[rustfmt::skip] - fortuples! { - impl IntoBuiltinFunction for F - where - S: Span, - F: Fn(&mut ExecutionContext, &S, #(#Member),*) -> OperatorResult> + Clone + 'static, - #(#Member: NamedObject),* - #(Value: TryInto<#Member>),* - { - fn into_builtin_function(self) -> BuiltinFunctionRef { - let function: Box> = Box::new(move |context: &mut ExecutionContext, span: &S, arguments: Vec>, expressions: &[Expression]| -> OperatorResult> { - self.clone().auto_call(context, span, arguments, expressions) - }); - - BuiltinFunctionRef::from(function) - } - - fn into_builtin_function_optional(self) -> BuiltinFunctionRef { - let function: Box> = Box::new(move |context: &mut ExecutionContext, span: &S, arguments: Vec>, expressions: &[Expression]| -> OperatorResult> { - self.clone().auto_call_optional(context, span, arguments, expressions) - }); - - BuiltinFunctionRef::from(function) - } - } - } +// impl std::fmt::Debug for UserClosure { +// fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { +// f.debug_struct("UserClosure") +// .field("address", &Rc::as_ptr(&self.source)) +// .finish() +// } +// } +// +// impl From<&'_ Rc>> for UserFunction { +// fn from(value: &'_ Rc>) -> Self { +// Self { +// source: Rc::clone(value), +// } +// } +// } +// +// impl UserFunction { +// pub fn new(source: Function) -> Self { +// Self { +// source: Rc::new(source), +// } +// } +// } +// +// impl Object for UserFunction { +// fn matches_type( +// &self, +// _ty: &VariableType, +// _log: &mut dyn RuntimeLog, +// _variable_name_span: &S, +// ) -> OperatorResult { +// Ok(false) +// } +// +// fn call( +// &self, +// context: &mut ExecutionContext, +// span: &S, +// arguments: Vec>, +// spans: &[Expression], +// ) -> OperatorResult> { +// context.new_isolated_scope(|context| { +// run_callable_block( +// context, +// &self.source.named_block.callable, +// arguments, +// spans, +// span, +// ) +// }) +// } +// } +// +// impl PartialEq for UserFunction { +// fn eq(&self, _other: &Self) -> bool { +// false +// } +// } +// +// impl NamedObject for UserFunction { +// fn static_type_name() -> &'static str { +// "Function" +// } +// } +// +// pub type BuiltinFunction = dyn Fn( +// &mut ExecutionContext, +// &S, +// Vec>, +// &[Expression], +// ) -> OperatorResult>; +// +// pub struct BuiltinFunctionRef(Rc>); +// +// impl std::ops::Deref for BuiltinFunctionRef { +// type Target = BuiltinFunction; +// +// fn deref(&self) -> &Self::Target { +// &*self.0 +// } +// } +// +// impl std::cmp::Eq for BuiltinFunctionRef {} +// impl std::cmp::PartialEq for BuiltinFunctionRef { +// fn eq(&self, other: &Self) -> bool { +// std::ptr::addr_eq(Rc::as_ptr(&self.0), Rc::as_ptr(&other.0)) +// } +// } +// +// impl Clone for BuiltinFunctionRef { +// fn clone(&self) -> Self { +// Self(Rc::clone(&self.0)) +// } +// } +// +// impl std::fmt::Debug for BuiltinFunctionRef { +// fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { +// let mut debug_struct = f.debug_struct("BuiltinFunction"); +// debug_struct.field("address", &Rc::as_ptr(&self.0)); +// debug_struct.finish() +// } +// } +// +// impl From>> for BuiltinFunctionRef { +// fn from(value: Box>) -> Self { +// Self(value.into()) +// } +// } +// +// impl Object for BuiltinFunctionRef { +// fn matches_type( +// &self, +// _ty: &VariableType, +// _log: &mut dyn RuntimeLog, +// _variable_name_span: &S, +// ) -> OperatorResult { +// Ok(false) +// } +// +// fn call( +// &self, +// context: &mut ExecutionContext, +// span: &S, +// arguments: Vec>, +// expressions: &[Expression], +// ) -> OperatorResult> { +// (*self)(context, span, arguments, expressions) +// } +// } +// +// impl NamedObject for BuiltinFunctionRef { +// fn static_type_name() -> &'static str { +// "BuiltinFunction" +// } +// } +// +// pub trait UnpackArguments { +// fn unpack_arguments( +// span: &S, +// arguments: Vec>, +// expressions: &[Expression], +// ) -> OperatorResult; +// +// fn unpack_arguments_optional( +// _span: &S, +// arguments: Vec>, +// expressions: &[Expression], +// ) -> OperatorResult; +// } +// +// #[rustfmt::skip] +// fortuples! { +// impl UnpackArguments for #Tuple +// where +// S: Span, +// #(#Member: NamedObject),* +// #(Value: TryInto<#Member>),* +// { +// fn unpack_arguments( +// _span: &S, +// mut arguments: Vec>, +// expressions: &[Expression], +// ) -> OperatorResult { +// arguments.reverse(); +// let mut expression_iter = expressions.iter(); +// +// #(let casey::lower!(#Member) = { +// if let Some(value) = arguments.pop() { +// value.downcast(expression_iter.next().unwrap().get_span()).map_err(|f| f.make_from_function_call())? +// } else { +// return Err(Failure::MissingArguments(_span.clone()).make_from_function_call()); +// } +// };)* +// +// if let Some(extra_expression) = expression_iter.next() { +// Err(Failure::TooManyArguments(extra_expression.get_span().clone()).make_from_function_call()) +// } else { +// Ok((#(casey::lower!(#Member)),*)) +// } +// } +// +// fn unpack_arguments_optional( +// _span: &S, +// mut arguments: Vec>, +// expressions: &[Expression], +// ) -> OperatorResult { +// arguments.reverse(); +// let mut expression_iter = expressions.iter(); +// +// #(let casey::lower!(#Member) = { +// if let Some(value) = arguments.pop() { +// value.downcast(expression_iter.next().unwrap().get_span()).map_err(|f| f.make_from_function_call())? +// } else { +// Value::::from(NoneType).downcast(_span)? +// } +// };)* +// +// if let Some(extra_expression) = expression_iter.next() { +// Err(Failure::TooManyArguments(extra_expression.get_span().clone()).make_from_function_call()) +// } else { +// Ok((#(casey::lower!(#Member)),*)) +// } +// } +// } +// } +// +// pub trait AutoCall +// where +// S: Span, +// { +// type Unpacker: UnpackArguments; +// +// fn auto_call( +// self, +// context: &mut ExecutionContext, +// span: &S, +// arguments: Vec>, +// expressions: &[Expression], +// ) -> OperatorResult>; +// +// fn auto_call_optional( +// self, +// context: &mut ExecutionContext, +// span: &S, +// arguments: Vec>, +// expressions: &[Expression], +// ) -> OperatorResult>; +// } +// +// #[rustfmt::skip] +// fortuples! { +// impl AutoCall for F +// where +// S: Span, +// #(#Member: NamedObject),* +// #(Value: TryInto<#Member>),* +// F: FnOnce(&mut ExecutionContext, &S, #(#Member),*) -> OperatorResult>, +// { +// type Unpacker = #Tuple; +// +// fn auto_call( +// self, +// context: &mut ExecutionContext, +// span: &S, +// arguments: Vec>, +// expressions: &[Expression], +// ) -> OperatorResult> { +// let (#(casey::lower!(#Member)),*) = Self::Unpacker::unpack_arguments(span, arguments, expressions)?; +// +// (self)(context, span, #(casey::lower!(#Member)),*) +// } +// +// fn auto_call_optional( +// self, +// context: &mut ExecutionContext, +// span: &S, +// arguments: Vec>, +// expressions: &[Expression], +// ) -> OperatorResult> { +// let (#(casey::lower!(#Member)),*) = Self::Unpacker::unpack_arguments_optional(span, arguments, expressions)?; +// +// (self)(context, span, #(casey::lower!(#Member)),*) +// } +// } +// } +// +// pub trait IntoBuiltinFunction: AutoCall { +// fn into_builtin_function(self) -> BuiltinFunctionRef; +// fn into_builtin_function_optional(self) -> BuiltinFunctionRef; +// } +// +// #[rustfmt::skip] +// fortuples! { +// impl IntoBuiltinFunction for F +// where +// S: Span, +// F: Fn(&mut ExecutionContext, &S, #(#Member),*) -> OperatorResult> + Clone + 'static, +// #(#Member: NamedObject),* +// #(Value: TryInto<#Member>),* +// { +// fn into_builtin_function(self) -> BuiltinFunctionRef { +// let function: Box> = Box::new(move |context: &mut ExecutionContext, span: &S, arguments: Vec>, expressions: &[Expression]| -> OperatorResult> { +// self.clone().auto_call(context, span, arguments, expressions) +// }); +// +// BuiltinFunctionRef::from(function) +// } +// +// fn into_builtin_function_optional(self) -> BuiltinFunctionRef { +// let function: Box> = Box::new(move |context: &mut ExecutionContext, span: &S, arguments: Vec>, expressions: &[Expression]| -> OperatorResult> { +// self.clone().auto_call_optional(context, span, arguments, expressions) +// }); +// +// BuiltinFunctionRef::from(function) +// } +// } +// } diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs new file mode 100644 index 0000000..fff68fd --- /dev/null +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -0,0 +1,17 @@ +/* + * Copyright 2024 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 6361ac7..7c5afe9 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -43,6 +43,9 @@ pub use integer::{SignedInteger, UnsignedInteger}; mod scalar; pub use scalar::Scalar; +mod closure; +pub use closure::{Argument, UserClosure}; + mod value_type; pub use value_type::ValueType; @@ -239,25 +242,14 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { // ) -> OperatorResult { // Err(Failure::UnknownAttribute(attribute.clone())) // } - // fn call( - // &self, - // _context: &mut ExecutionContext, - // stack_trace: &[SourceReference], - // _arguments: Vec, - // _stack_traces: &[Expression], - // ) -> OperatorResult { - // UnsupportedOperationError::raise(self, stack_trace, "call") - // } - // fn method_call( - // &self, - // _context: &mut ExecutionContext, - // _stack_trace: &[SourceReference], - // attribute: &S, - // _arguments: Vec, - // _stack_traces: &[Expression], - // ) -> OperatorResult { - // Err(Failure::UnknownAttribute(attribute.clone())) - // } + fn call( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + argument: Value, + ) -> ExpressionResult { + UnsupportedOperationError::raise(self, stack_trace, "call") + } fn index( &self, _log: &mut dyn RuntimeLog, @@ -313,8 +305,7 @@ pub enum Value { UnsignedInteger, Boolean, Scalar, - // BuiltinFunction(BuiltinFunctionRef), - // UserFunction(UserFunction), + UserClosure, // Structure(Structure), // StructDefinition(StructDefinition), // List(List), diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 6ad2a37..de57c6c 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -15,11 +15,14 @@ * You should have received a copy of the GNU Affero General Public License along with this * program. If not, see . */ -use std::{borrow::Cow, fmt::Display}; +use std::{borrow::Cow, fmt::Display, sync::Arc}; use common_data_types::Dimension; -use super::{Boolean, DefaultValue, SignedInteger, StaticTypeName, UnsignedInteger, Void}; +use super::{ + closure::Signature as ClosureSignature, Boolean, DefaultValue, SignedInteger, StaticTypeName, + UnsignedInteger, Void, +}; #[derive(Debug, Hash, Eq, PartialEq, Clone)] pub enum ValueType { @@ -29,6 +32,7 @@ pub enum ValueType { SignedInteger, UnsignedInteger, Scalar(Dimension), + Closure(Arc), } impl ValueType { @@ -40,12 +44,17 @@ impl ValueType { Self::SignedInteger => SignedInteger::static_type_name().into(), Self::UnsignedInteger => UnsignedInteger::static_type_name().into(), Self::Scalar(dimension) => units::get_dimension_name(dimension).into(), + Self::Closure(signature) => format!("{}", signature).into(), } } } impl Display for ValueType { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.name()) + match self { + // We can avoid a copy operation if we write directly into the formatter. + Self::Closure(signature) => write!(f, "{}", signature), + _ => write!(f, "{}", self.name()), + } } } diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index d69e8f5..12fecdf 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -8,8 +8,10 @@ // @ts-check const PREC = { - unit: 16, - call: 15, + struct_member: 18, + unit: 17, + method_call: 16, + function_call: 15, field: 14, unary: 12, exponential: 11, @@ -65,6 +67,18 @@ module.exports = grammar({ false: $ => 'false', boolean: $ => choice($.true, $.false), + function_call: $ => seq( + prec.left(PREC.function_call, seq( + field('to_call', $.expression), field("argument", choice($.dictionary_construction, $.void)), + )) + ), + + method_call: $ => seq( + prec.left(PREC.method_call, seq( + field('self_dictionary', $.expression), ':', field('to_call', $.identifier), field("argument", choice($.dictionary_construction, $.void)) + )) + ), + expression: $ => choice( $.void, $.parenthesis, @@ -83,6 +97,8 @@ module.exports = grammar({ $.closure_definition, $.unary_expression, $.binary_expression, + $.function_call, + $.method_call, ), unary_expression: $ => prec(PREC.unary, choice( seq(field('op', '-'), $.expression), @@ -119,7 +135,7 @@ module.exports = grammar({ [PREC.range, '..'], [PREC.range, '..='], - + ]; return choice(...table.map(([precedence, operator]) => prec.left(precedence, seq( @@ -146,7 +162,7 @@ module.exports = grammar({ varadic_dots: $ => '...', - struct_member: $ => seq(field('name', $.identifier), $._declaration_type, optional(seq('=', field('default', $.expression)))), + struct_member: $ => prec.left(PREC.struct_member, seq(field('name', $.identifier), $._declaration_type, optional(seq('=', field('default', $.expression))))), _struct_final_element: $ => choice( seq($.struct_member), seq($.varadic_dots, optional(',')) diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 03b21d2..0690a05 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -231,7 +231,7 @@ }, "scalar": { "type": "PREC_LEFT", - "value": 16, + "value": 17, "content": { "type": "SEQ", "members": [ @@ -279,6 +279,96 @@ } ] }, + "function_call": { + "type": "SEQ", + "members": [ + { + "type": "PREC_LEFT", + "value": 15, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "to_call", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "dictionary_construction" + }, + { + "type": "SYMBOL", + "name": "void" + } + ] + } + } + ] + } + } + ] + }, + "method_call": { + "type": "SEQ", + "members": [ + { + "type": "PREC_LEFT", + "value": 16, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "self_dictionary", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "to_call", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "dictionary_construction" + }, + { + "type": "SYMBOL", + "name": "void" + } + ] + } + } + ] + } + } + ] + }, "expression": { "type": "CHOICE", "members": [ @@ -349,6 +439,14 @@ { "type": "SYMBOL", "name": "binary_expression" + }, + { + "type": "SYMBOL", + "name": "function_call" + }, + { + "type": "SYMBOL", + "name": "method_call" } ] }, @@ -1274,46 +1372,50 @@ "value": "..." }, "struct_member": { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "name", - "content": { + "type": "PREC_LEFT", + "value": 18, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { "type": "SYMBOL", - "name": "identifier" - } - }, - { - "type": "SYMBOL", - "name": "_declaration_type" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "=" - }, - { - "type": "FIELD", - "name": "default", - "content": { - "type": "SYMBOL", - "name": "expression" + "name": "_declaration_type" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "default", + "content": { + "type": "SYMBOL", + "name": "expression" + } } - } - ] - }, - { - "type": "BLANK" - } - ] - } - ] + ] + }, + { + "type": "BLANK" + } + ] + } + ] + } }, "_struct_final_element": { "type": "CHOICE", diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 1470f4a..7613818 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -418,6 +418,10 @@ "type": "dictionary_construction", "named": true }, + { + "type": "function_call", + "named": true + }, { "type": "if", "named": true @@ -426,6 +430,10 @@ "type": "list", "named": true }, + { + "type": "method_call", + "named": true + }, { "type": "parenthesis", "named": true @@ -505,6 +513,36 @@ } } }, + { + "type": "function_call", + "named": true, + "fields": { + "argument": { + "multiple": false, + "required": true, + "types": [ + { + "type": "dictionary_construction", + "named": true + }, + { + "type": "void", + "named": true + } + ] + }, + "to_call": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, { "type": "hex", "named": true, @@ -614,6 +652,46 @@ ] } }, + { + "type": "method_call", + "named": true, + "fields": { + "argument": { + "multiple": false, + "required": true, + "types": [ + { + "type": "dictionary_construction", + "named": true + }, + { + "type": "void", + "named": true + } + ] + }, + "self_dictionary": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "to_call": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + } + }, { "type": "number", "named": true, diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 0305612..cbced21 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -5,15 +5,15 @@ #endif #define LANGUAGE_VERSION 14 -#define STATE_COUNT 173 +#define STATE_COUNT 178 #define LARGE_STATE_COUNT 7 -#define SYMBOL_COUNT 114 +#define SYMBOL_COUNT 116 #define ALIAS_COUNT 0 #define TOKEN_COUNT 71 #define EXTERNAL_TOKEN_COUNT 0 -#define FIELD_COUNT 24 +#define FIELD_COUNT 26 #define MAX_ALIAS_SEQUENCE_LENGTH 5 -#define PRODUCTION_ID_COUNT 25 +#define PRODUCTION_ID_COUNT 27 enum ts_symbol_identifiers { sym_identifier = 1, @@ -35,31 +35,31 @@ enum ts_symbol_identifiers { anon_sym_DOT = 17, sym_true = 18, sym_false = 19, - anon_sym_DASH = 20, - anon_sym_PLUS = 21, - anon_sym_BANG = 22, - anon_sym_STAR_STAR = 23, - anon_sym_STAR = 24, - anon_sym_SLASH = 25, - anon_sym_SLASH_SLASH = 26, - anon_sym_LT_LT = 27, - anon_sym_GT_GT = 28, - anon_sym_AMP = 29, - anon_sym_PIPE = 30, - anon_sym_CARET = 31, - anon_sym_GT = 32, - anon_sym_GT_EQ = 33, - anon_sym_EQ_EQ = 34, - anon_sym_LT_EQ = 35, - anon_sym_LT = 36, - anon_sym_BANG_EQ = 37, - anon_sym_AMP_AMP = 38, - anon_sym_PIPE_PIPE = 39, - anon_sym_DOT_DOT = 40, - anon_sym_DOT_DOT_EQ = 41, - anon_sym_if = 42, - anon_sym_else = 43, - anon_sym_COLON = 44, + anon_sym_COLON = 20, + anon_sym_DASH = 21, + anon_sym_PLUS = 22, + anon_sym_BANG = 23, + anon_sym_STAR_STAR = 24, + anon_sym_STAR = 25, + anon_sym_SLASH = 26, + anon_sym_SLASH_SLASH = 27, + anon_sym_LT_LT = 28, + anon_sym_GT_GT = 29, + anon_sym_AMP = 30, + anon_sym_PIPE = 31, + anon_sym_CARET = 32, + anon_sym_GT = 33, + anon_sym_GT_EQ = 34, + anon_sym_EQ_EQ = 35, + anon_sym_LT_EQ = 36, + anon_sym_LT = 37, + anon_sym_BANG_EQ = 38, + anon_sym_AMP_AMP = 39, + anon_sym_PIPE_PIPE = 40, + anon_sym_DOT_DOT = 41, + anon_sym_DOT_DOT_EQ = 42, + anon_sym_if = 43, + anon_sym_else = 44, anon_sym_LBRACK = 45, anon_sym_COMMA = 46, anon_sym_RBRACK = 47, @@ -100,35 +100,37 @@ enum ts_symbol_identifiers { sym__unit = 82, sym_scalar = 83, sym_boolean = 84, - sym_expression = 85, - sym_unary_expression = 86, - sym_binary_expression = 87, - sym_if = 88, - sym__variable_type = 89, - sym_path = 90, - sym__declaration_type = 91, - sym_parenthesis = 92, - sym_list = 93, - sym_struct_member = 94, - sym__struct_final_element = 95, - sym_struct_definition = 96, - sym_dictionary_member_assignment = 97, - sym_dictionary_construction = 98, - sym_procedural_block = 99, - sym_closure_captured_variables = 100, - sym_closure_definition = 101, - sym_closed_expression = 102, - sym_statement = 103, - sym_assignment_operator = 104, - sym_let = 105, - sym_assign = 106, - sym_for = 107, - aux_sym_path_repeat1 = 108, - aux_sym_list_repeat1 = 109, - aux_sym_struct_definition_repeat1 = 110, - aux_sym_dictionary_construction_repeat1 = 111, - aux_sym_procedural_block_repeat1 = 112, - aux_sym_closure_captured_variables_repeat1 = 113, + sym_function_call = 85, + sym_method_call = 86, + sym_expression = 87, + sym_unary_expression = 88, + sym_binary_expression = 89, + sym_if = 90, + sym__variable_type = 91, + sym_path = 92, + sym__declaration_type = 93, + sym_parenthesis = 94, + sym_list = 95, + sym_struct_member = 96, + sym__struct_final_element = 97, + sym_struct_definition = 98, + sym_dictionary_member_assignment = 99, + sym_dictionary_construction = 100, + sym_procedural_block = 101, + sym_closure_captured_variables = 102, + sym_closure_definition = 103, + sym_closed_expression = 104, + sym_statement = 105, + sym_assignment_operator = 106, + sym_let = 107, + sym_assign = 108, + sym_for = 109, + aux_sym_path_repeat1 = 110, + aux_sym_list_repeat1 = 111, + aux_sym_struct_definition_repeat1 = 112, + aux_sym_dictionary_construction_repeat1 = 113, + aux_sym_procedural_block_repeat1 = 114, + aux_sym_closure_captured_variables_repeat1 = 115, }; static const char * const ts_symbol_names[] = { @@ -152,6 +154,7 @@ static const char * const ts_symbol_names[] = { [anon_sym_DOT] = ".", [sym_true] = "true", [sym_false] = "false", + [anon_sym_COLON] = ":", [anon_sym_DASH] = "-", [anon_sym_PLUS] = "+", [anon_sym_BANG] = "!", @@ -176,7 +179,6 @@ static const char * const ts_symbol_names[] = { [anon_sym_DOT_DOT_EQ] = "..=", [anon_sym_if] = "if", [anon_sym_else] = "else", - [anon_sym_COLON] = ":", [anon_sym_LBRACK] = "[", [anon_sym_COMMA] = ",", [anon_sym_RBRACK] = "]", @@ -217,6 +219,8 @@ static const char * const ts_symbol_names[] = { [sym__unit] = "_unit", [sym_scalar] = "scalar", [sym_boolean] = "boolean", + [sym_function_call] = "function_call", + [sym_method_call] = "method_call", [sym_expression] = "expression", [sym_unary_expression] = "unary_expression", [sym_binary_expression] = "binary_expression", @@ -269,6 +273,7 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_DOT] = anon_sym_DOT, [sym_true] = sym_true, [sym_false] = sym_false, + [anon_sym_COLON] = anon_sym_COLON, [anon_sym_DASH] = anon_sym_DASH, [anon_sym_PLUS] = anon_sym_PLUS, [anon_sym_BANG] = anon_sym_BANG, @@ -293,7 +298,6 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_DOT_DOT_EQ] = anon_sym_DOT_DOT_EQ, [anon_sym_if] = anon_sym_if, [anon_sym_else] = anon_sym_else, - [anon_sym_COLON] = anon_sym_COLON, [anon_sym_LBRACK] = anon_sym_LBRACK, [anon_sym_COMMA] = anon_sym_COMMA, [anon_sym_RBRACK] = anon_sym_RBRACK, @@ -334,6 +338,8 @@ static const TSSymbol ts_symbol_map[] = { [sym__unit] = sym__unit, [sym_scalar] = sym_scalar, [sym_boolean] = sym_boolean, + [sym_function_call] = sym_function_call, + [sym_method_call] = sym_method_call, [sym_expression] = sym_expression, [sym_unary_expression] = sym_unary_expression, [sym_binary_expression] = sym_binary_expression, @@ -446,6 +452,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [anon_sym_COLON] = { + .visible = true, + .named = false, + }, [anon_sym_DASH] = { .visible = true, .named = false, @@ -542,10 +552,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, - [anon_sym_COLON] = { - .visible = true, - .named = false, - }, [anon_sym_LBRACK] = { .visible = true, .named = false, @@ -706,6 +712,14 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym_function_call] = { + .visible = true, + .named = true, + }, + [sym_method_call] = { + .visible = true, + .named = true, + }, [sym_expression] = { .visible = true, .named = true, @@ -842,13 +856,15 @@ enum ts_field_identifiers { field_on_true = 15, field_op = 16, field_result = 17, - field_to_assign = 18, - field_to_iterate = 19, - field_to_run = 20, - field_type_path = 21, - field_unit = 22, - field_value = 23, - field_whole = 24, + field_self_dictionary = 18, + field_to_assign = 19, + field_to_call = 20, + field_to_iterate = 21, + field_to_run = 22, + field_type_path = 23, + field_unit = 24, + field_value = 25, + field_whole = 26, }; static const char * const ts_field_names[] = { @@ -870,7 +886,9 @@ static const char * const ts_field_names[] = { [field_on_true] = "on_true", [field_op] = "op", [field_result] = "result", + [field_self_dictionary] = "self_dictionary", [field_to_assign] = "to_assign", + [field_to_call] = "to_call", [field_to_iterate] = "to_iterate", [field_to_run] = "to_run", [field_type_path] = "type_path", @@ -886,24 +904,26 @@ static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [4] = {.index = 4, .length = 1}, [5] = {.index = 5, .length = 3}, [6] = {.index = 8, .length = 2}, - [7] = {.index = 10, .length = 1}, - [8] = {.index = 11, .length = 1}, - [9] = {.index = 12, .length = 1}, - [10] = {.index = 13, .length = 2}, + [7] = {.index = 10, .length = 2}, + [8] = {.index = 12, .length = 1}, + [9] = {.index = 13, .length = 1}, + [10] = {.index = 14, .length = 1}, [11] = {.index = 15, .length = 2}, - [12] = {.index = 17, .length = 3}, - [13] = {.index = 20, .length = 1}, - [14] = {.index = 21, .length = 1}, - [15] = {.index = 22, .length = 2}, + [12] = {.index = 17, .length = 2}, + [13] = {.index = 19, .length = 3}, + [14] = {.index = 22, .length = 1}, + [15] = {.index = 23, .length = 1}, [16] = {.index = 24, .length = 2}, [17] = {.index = 26, .length = 2}, - [18] = {.index = 28, .length = 3}, - [19] = {.index = 31, .length = 3}, - [20] = {.index = 34, .length = 3}, - [21] = {.index = 37, .length = 2}, - [22] = {.index = 39, .length = 4}, - [23] = {.index = 43, .length = 2}, - [24] = {.index = 45, .length = 3}, + [18] = {.index = 28, .length = 2}, + [19] = {.index = 30, .length = 3}, + [20] = {.index = 33, .length = 3}, + [21] = {.index = 36, .length = 3}, + [22] = {.index = 39, .length = 3}, + [23] = {.index = 42, .length = 2}, + [24] = {.index = 44, .length = 4}, + [25] = {.index = 48, .length = 2}, + [26] = {.index = 50, .length = 3}, }; static const TSFieldMapEntry ts_field_map_entries[] = { @@ -921,61 +941,68 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_unit, 1}, {field_whole, 0, .inherited = true}, [8] = + {field_argument, 1}, + {field_to_call, 0}, + [10] = {field_name, 0}, {field_type_path, 1, .inherited = true}, - [10] = + [12] = {field_final_element, 1}, - [11] = + [13] = {field_assignments, 1}, - [12] = + [14] = {field_members, 1}, - [13] = + [15] = {field_condition, 1}, {field_on_true, 2}, - [15] = + [17] = {field_fractional, 2}, {field_whole, 0}, - [17] = + [19] = {field_a, 0}, {field_b, 2}, {field_op, 1}, - [20] = + [22] = {field_type_path, 1, .inherited = true}, - [21] = + [23] = {field_type_path, 0}, - [22] = + [24] = {field_assignment, 2}, {field_name, 0}, - [24] = + [26] = {field_assignments, 1}, {field_assignments, 2}, - [26] = + [28] = {field_final_element, 2}, {field_members, 1}, - [28] = + [30] = + {field_argument, 3}, + {field_self_dictionary, 0}, + {field_to_call, 2}, + [33] = {field_default, 3}, {field_name, 0}, {field_type_path, 1, .inherited = true}, - [31] = + [36] = {field_assignments, 1}, {field_assignments, 2}, {field_assignments, 3}, - [34] = + [39] = {field_condition, 1}, {field_on_false, 4}, {field_on_true, 2}, - [37] = + [42] = {field_to_assign, 0}, {field_value, 2}, - [39] = + [44] = {field_argument, 0}, {field_captured_variables, 1}, {field_expression, 4}, {field_result, 3}, - [43] = + [48] = {field_to_assign, 1}, {field_value, 3}, - [45] = + [50] = {field_to_assign, 1}, {field_to_iterate, 3}, {field_to_run, 4}, @@ -1052,46 +1079,46 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [59] = 59, [60] = 60, [61] = 61, - [62] = 62, - [63] = 56, - [64] = 44, - [65] = 45, - [66] = 46, - [67] = 47, - [68] = 48, - [69] = 49, - [70] = 50, - [71] = 51, - [72] = 52, - [73] = 53, - [74] = 54, + [62] = 55, + [63] = 63, + [64] = 64, + [65] = 65, + [66] = 66, + [67] = 67, + [68] = 68, + [69] = 69, + [70] = 70, + [71] = 71, + [72] = 65, + [73] = 73, + [74] = 74, [75] = 75, - [76] = 76, - [77] = 77, - [78] = 78, - [79] = 79, + [76] = 59, + [77] = 56, + [78] = 57, + [79] = 58, [80] = 80, - [81] = 81, - [82] = 82, - [83] = 83, - [84] = 62, - [85] = 85, - [86] = 35, - [87] = 40, - [88] = 41, - [89] = 89, - [90] = 42, - [91] = 75, - [92] = 76, - [93] = 81, - [94] = 77, - [95] = 78, - [96] = 79, - [97] = 80, - [98] = 82, - [99] = 83, - [100] = 43, - [101] = 101, + [81] = 60, + [82] = 61, + [83] = 63, + [84] = 75, + [85] = 71, + [86] = 74, + [87] = 80, + [88] = 36, + [89] = 42, + [90] = 46, + [91] = 50, + [92] = 51, + [93] = 52, + [94] = 53, + [95] = 44, + [96] = 47, + [97] = 54, + [98] = 73, + [99] = 48, + [100] = 49, + [101] = 45, [102] = 102, [103] = 103, [104] = 104, @@ -1112,10 +1139,10 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [119] = 119, [120] = 120, [121] = 121, - [122] = 121, + [122] = 122, [123] = 123, [124] = 124, - [125] = 125, + [125] = 124, [126] = 126, [127] = 127, [128] = 128, @@ -1162,7 +1189,12 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [169] = 169, [170] = 170, [171] = 171, - [172] = 166, + [172] = 172, + [173] = 173, + [174] = 174, + [175] = 175, + [176] = 176, + [177] = 155, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1172,31 +1204,31 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { case 0: if (eof) ADVANCE(14); ADVANCE_MAP( - '!', 41, + '!', 42, '"', 2, '#', 15, - '&', 48, + '&', 49, '\'', 7, '(', 20, ')', 21, - '*', 43, - '+', 39, + '*', 44, + '+', 40, ',', 64, - '-', 37, + '-', 38, '.', 33, - '/', 44, + '/', 45, '0', 22, '1', 24, - ':', 62, + ':', 35, ';', 71, - '<', 55, + '<', 56, '=', 67, - '>', 51, + '>', 52, '[', 63, ']', 65, - '^', 50, + '^', 51, '{', 68, - '|', 49, + '|', 50, '}', 69, ); if (('\t' <= lookahead && lookahead <= '\r') || @@ -1208,13 +1240,13 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 1: ADVANCE_MAP( - '!', 40, + '!', 41, '"', 2, '#', 15, '(', 20, ')', 21, - '+', 38, - '-', 35, + '+', 39, + '-', 36, '.', 10, '0', 23, '[', 63, @@ -1284,30 +1316,30 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { case 13: if (eof) ADVANCE(14); ADVANCE_MAP( - '!', 41, + '!', 42, '"', 2, '#', 15, - '&', 48, + '&', 49, '\'', 7, '(', 20, ')', 21, - '*', 43, - '+', 39, + '*', 44, + '+', 40, ',', 64, - '-', 36, + '-', 37, '.', 34, - '/', 44, + '/', 45, '0', 23, - ':', 62, + ':', 35, ';', 71, - '<', 55, + '<', 56, '=', 67, - '>', 51, + '>', 52, '[', 63, ']', 65, - '^', 50, + '^', 51, '{', 68, - '|', 49, + '|', 50, '}', 69, ); if (('\t' <= lookahead && lookahead <= '\r') || @@ -1407,123 +1439,123 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 33: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(59); + if (lookahead == '.') ADVANCE(60); END_STATE(); case 34: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(60); + if (lookahead == '.') ADVANCE(61); END_STATE(); case 35: - ACCEPT_TOKEN(anon_sym_DASH); + ACCEPT_TOKEN(anon_sym_COLON); END_STATE(); case 36: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '=') ADVANCE(79); END_STATE(); case 37: ACCEPT_TOKEN(anon_sym_DASH); if (lookahead == '=') ADVANCE(79); - if (lookahead == '>') ADVANCE(70); END_STATE(); case 38: - ACCEPT_TOKEN(anon_sym_PLUS); + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '=') ADVANCE(79); + if (lookahead == '>') ADVANCE(70); END_STATE(); case 39: ACCEPT_TOKEN(anon_sym_PLUS); - if (lookahead == '=') ADVANCE(78); END_STATE(); case 40: - ACCEPT_TOKEN(anon_sym_BANG); + ACCEPT_TOKEN(anon_sym_PLUS); + if (lookahead == '=') ADVANCE(78); END_STATE(); case 41: ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(56); END_STATE(); case 42: + ACCEPT_TOKEN(anon_sym_BANG); + if (lookahead == '=') ADVANCE(57); + END_STATE(); + case 43: ACCEPT_TOKEN(anon_sym_STAR_STAR); if (lookahead == '=') ADVANCE(80); END_STATE(); - case 43: + case 44: ACCEPT_TOKEN(anon_sym_STAR); - if (lookahead == '*') ADVANCE(42); + if (lookahead == '*') ADVANCE(43); if (lookahead == '=') ADVANCE(81); END_STATE(); - case 44: + case 45: ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '/') ADVANCE(45); + if (lookahead == '/') ADVANCE(46); if (lookahead == '=') ADVANCE(83); END_STATE(); - case 45: + case 46: ACCEPT_TOKEN(anon_sym_SLASH_SLASH); if (lookahead == '=') ADVANCE(82); END_STATE(); - case 46: + case 47: ACCEPT_TOKEN(anon_sym_LT_LT); if (lookahead == '=') ADVANCE(84); END_STATE(); - case 47: + case 48: ACCEPT_TOKEN(anon_sym_GT_GT); if (lookahead == '=') ADVANCE(85); END_STATE(); - case 48: + case 49: ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(57); + if (lookahead == '&') ADVANCE(58); if (lookahead == '=') ADVANCE(72); END_STATE(); - case 49: + case 50: ACCEPT_TOKEN(anon_sym_PIPE); if (lookahead == '=') ADVANCE(73); - if (lookahead == '|') ADVANCE(58); + if (lookahead == '|') ADVANCE(59); END_STATE(); - case 50: + case 51: ACCEPT_TOKEN(anon_sym_CARET); if (lookahead == '=') ADVANCE(74); if (lookahead == '^') ADVANCE(11); END_STATE(); - case 51: + case 52: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(52); - if (lookahead == '>') ADVANCE(47); + if (lookahead == '=') ADVANCE(53); + if (lookahead == '>') ADVANCE(48); END_STATE(); - case 52: + case 53: ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); - case 53: + case 54: ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); - case 54: + case 55: ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); - case 55: + case 56: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(46); - if (lookahead == '=') ADVANCE(54); + if (lookahead == '<') ADVANCE(47); + if (lookahead == '=') ADVANCE(55); END_STATE(); - case 56: + case 57: ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); - case 57: + case 58: ACCEPT_TOKEN(anon_sym_AMP_AMP); if (lookahead == '=') ADVANCE(75); END_STATE(); - case 58: + case 59: ACCEPT_TOKEN(anon_sym_PIPE_PIPE); if (lookahead == '=') ADVANCE(76); END_STATE(); - case 59: - ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '.') ADVANCE(66); - if (lookahead == '=') ADVANCE(61); - END_STATE(); case 60: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '=') ADVANCE(61); + if (lookahead == '.') ADVANCE(66); + if (lookahead == '=') ADVANCE(62); END_STATE(); case 61: - ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); + ACCEPT_TOKEN(anon_sym_DOT_DOT); + if (lookahead == '=') ADVANCE(62); END_STATE(); case 62: - ACCEPT_TOKEN(anon_sym_COLON); + ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); END_STATE(); case 63: ACCEPT_TOKEN(anon_sym_LBRACK); @@ -1539,7 +1571,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 67: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(53); + if (lookahead == '=') ADVANCE(54); END_STATE(); case 68: ACCEPT_TOKEN(anon_sym_LBRACE); @@ -1835,10 +1867,10 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [116] = {.lex_state = 13}, [117] = {.lex_state = 13}, [118] = {.lex_state = 13}, - [119] = {.lex_state = 1}, - [120] = {.lex_state = 1}, - [121] = {.lex_state = 0}, - [122] = {.lex_state = 0}, + [119] = {.lex_state = 13}, + [120] = {.lex_state = 13}, + [121] = {.lex_state = 1}, + [122] = {.lex_state = 1}, [123] = {.lex_state = 1}, [124] = {.lex_state = 0}, [125] = {.lex_state = 0}, @@ -1846,8 +1878,8 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [127] = {.lex_state = 0}, [128] = {.lex_state = 0}, [129] = {.lex_state = 0}, - [130] = {.lex_state = 0}, - [131] = {.lex_state = 1}, + [130] = {.lex_state = 1}, + [131] = {.lex_state = 0}, [132] = {.lex_state = 0}, [133] = {.lex_state = 0}, [134] = {.lex_state = 0}, @@ -1862,33 +1894,38 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [143] = {.lex_state = 0}, [144] = {.lex_state = 0}, [145] = {.lex_state = 0}, - [146] = {.lex_state = 4}, + [146] = {.lex_state = 0}, [147] = {.lex_state = 0}, [148] = {.lex_state = 0}, [149] = {.lex_state = 0}, [150] = {.lex_state = 0}, [151] = {.lex_state = 0}, [152] = {.lex_state = 0}, - [153] = {.lex_state = 4}, - [154] = {.lex_state = 0}, + [153] = {.lex_state = 0}, + [154] = {.lex_state = 4}, [155] = {.lex_state = 4}, - [156] = {.lex_state = 5}, - [157] = {.lex_state = 6}, + [156] = {.lex_state = 0}, + [157] = {.lex_state = 0}, [158] = {.lex_state = 4}, [159] = {.lex_state = 0}, [160] = {.lex_state = 0}, [161] = {.lex_state = 0}, [162] = {.lex_state = 0}, - [163] = {.lex_state = 0}, + [163] = {.lex_state = 4}, [164] = {.lex_state = 0}, - [165] = {.lex_state = 0}, + [165] = {.lex_state = 4}, [166] = {.lex_state = 4}, - [167] = {.lex_state = 4}, - [168] = {.lex_state = 0}, + [167] = {.lex_state = 0}, + [168] = {.lex_state = 5}, [169] = {.lex_state = 0}, [170] = {.lex_state = 0}, [171] = {.lex_state = 0}, - [172] = {.lex_state = 4}, + [172] = {.lex_state = 0}, + [173] = {.lex_state = 0}, + [174] = {.lex_state = 6}, + [175] = {.lex_state = 0}, + [176] = {.lex_state = 0}, + [177] = {.lex_state = 4}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -1912,6 +1949,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_DOT] = ACTIONS(1), [sym_true] = ACTIONS(1), [sym_false] = ACTIONS(1), + [anon_sym_COLON] = ACTIONS(1), [anon_sym_DASH] = ACTIONS(1), [anon_sym_PLUS] = ACTIONS(1), [anon_sym_BANG] = ACTIONS(1), @@ -1936,7 +1974,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_DOT_DOT_EQ] = ACTIONS(1), [anon_sym_if] = ACTIONS(1), [anon_sym_else] = ACTIONS(1), - [anon_sym_COLON] = ACTIONS(1), [anon_sym_LBRACK] = ACTIONS(1), [anon_sym_COMMA] = ACTIONS(1), [anon_sym_RBRACK] = ACTIONS(1), @@ -1965,27 +2002,29 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_in] = ACTIONS(1), }, [1] = { - [sym_source_file] = STATE(159), - [sym_void] = STATE(88), - [sym_base_ten] = STATE(138), - [sym_octal] = STATE(138), - [sym_hex] = STATE(138), - [sym_binary] = STATE(138), - [sym_integer] = STATE(142), + [sym_source_file] = STATE(176), + [sym_void] = STATE(98), + [sym_base_ten] = STATE(149), + [sym_octal] = STATE(149), + [sym_hex] = STATE(149), + [sym_binary] = STATE(149), + [sym_integer] = STATE(138), [sym_signed_integer] = STATE(20), [sym_unsigned_integer] = STATE(20), [sym_number] = STATE(11), - [sym__float] = STATE(87), + [sym__float] = STATE(89), [sym_scalar] = STATE(20), [sym_boolean] = STATE(20), - [sym_expression] = STATE(111), + [sym_function_call] = STATE(20), + [sym_method_call] = STATE(20), + [sym_expression] = STATE(112), [sym_unary_expression] = STATE(20), [sym_binary_expression] = STATE(20), [sym_if] = STATE(20), - [sym_path] = STATE(88), + [sym_path] = STATE(98), [sym_parenthesis] = STATE(20), [sym_list] = STATE(20), - [sym_struct_definition] = STATE(88), + [sym_struct_definition] = STATE(98), [sym_dictionary_construction] = STATE(20), [sym_procedural_block] = STATE(20), [sym_closure_definition] = STATE(20), @@ -2009,7 +2048,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LBRACE] = ACTIONS(29), }, [2] = { - [aux_sym_path_repeat1] = STATE(2), + [aux_sym_path_repeat1] = STATE(3), [ts_builtin_sym_end] = ACTIONS(31), [sym_identifier] = ACTIONS(33), [sym_comment] = ACTIONS(3), @@ -2025,6 +2064,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_DOT] = ACTIONS(35), [sym_true] = ACTIONS(33), [sym_false] = ACTIONS(33), + [anon_sym_COLON] = ACTIONS(31), [anon_sym_DASH] = ACTIONS(33), [anon_sym_PLUS] = ACTIONS(33), [anon_sym_BANG] = ACTIONS(33), @@ -2074,198 +2114,201 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { }, [3] = { [aux_sym_path_repeat1] = STATE(4), - [ts_builtin_sym_end] = ACTIONS(38), - [sym_identifier] = ACTIONS(40), + [ts_builtin_sym_end] = ACTIONS(37), + [sym_identifier] = ACTIONS(39), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(38), - [sym_default] = ACTIONS(40), - [anon_sym_LPAREN] = ACTIONS(38), - [anon_sym_RPAREN] = ACTIONS(38), - [aux_sym_base_ten_token1] = ACTIONS(40), - [aux_sym_octal_token1] = ACTIONS(38), - [aux_sym_hex_token1] = ACTIONS(38), - [aux_sym_binary_token1] = ACTIONS(38), - [anon_sym_DOT] = ACTIONS(42), - [sym_true] = ACTIONS(40), - [sym_false] = ACTIONS(40), - [anon_sym_DASH] = ACTIONS(40), - [anon_sym_PLUS] = ACTIONS(40), - [anon_sym_BANG] = ACTIONS(40), - [anon_sym_STAR_STAR] = ACTIONS(40), - [anon_sym_STAR] = ACTIONS(40), - [anon_sym_SLASH] = ACTIONS(40), - [anon_sym_SLASH_SLASH] = ACTIONS(40), - [anon_sym_LT_LT] = ACTIONS(40), - [anon_sym_GT_GT] = ACTIONS(40), - [anon_sym_AMP] = ACTIONS(40), - [anon_sym_PIPE] = ACTIONS(40), - [anon_sym_CARET] = ACTIONS(40), - [anon_sym_GT] = ACTIONS(40), - [anon_sym_GT_EQ] = ACTIONS(38), - [anon_sym_EQ_EQ] = ACTIONS(38), - [anon_sym_LT_EQ] = ACTIONS(38), - [anon_sym_LT] = ACTIONS(40), - [anon_sym_BANG_EQ] = ACTIONS(38), - [anon_sym_AMP_AMP] = ACTIONS(40), - [anon_sym_PIPE_PIPE] = ACTIONS(40), - [anon_sym_DOT_DOT] = ACTIONS(40), - [anon_sym_DOT_DOT_EQ] = ACTIONS(38), - [anon_sym_if] = ACTIONS(40), - [anon_sym_LBRACK] = ACTIONS(38), - [anon_sym_COMMA] = ACTIONS(38), - [anon_sym_RBRACK] = ACTIONS(38), - [anon_sym_EQ] = ACTIONS(40), - [anon_sym_LBRACE] = ACTIONS(38), - [anon_sym_RBRACE] = ACTIONS(38), - [anon_sym_SEMI] = ACTIONS(38), - [anon_sym_AMP_EQ] = ACTIONS(38), - [anon_sym_PIPE_EQ] = ACTIONS(38), - [anon_sym_CARET_EQ] = ACTIONS(38), - [anon_sym_AMP_AMP_EQ] = ACTIONS(38), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(38), - [anon_sym_CARET_CARET_EQ] = ACTIONS(38), - [anon_sym_PLUS_EQ] = ACTIONS(38), - [anon_sym_DASH_EQ] = ACTIONS(38), - [anon_sym_STAR_STAR_EQ] = ACTIONS(38), - [anon_sym_STAR_EQ] = ACTIONS(38), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(38), - [anon_sym_SLASH_EQ] = ACTIONS(38), - [anon_sym_LT_LT_EQ] = ACTIONS(38), - [anon_sym_GT_GT_EQ] = ACTIONS(38), - [anon_sym_let] = ACTIONS(40), - [anon_sym_for] = ACTIONS(40), + [sym_string] = ACTIONS(37), + [sym_default] = ACTIONS(39), + [anon_sym_LPAREN] = ACTIONS(37), + [anon_sym_RPAREN] = ACTIONS(37), + [aux_sym_base_ten_token1] = ACTIONS(39), + [aux_sym_octal_token1] = ACTIONS(37), + [aux_sym_hex_token1] = ACTIONS(37), + [aux_sym_binary_token1] = ACTIONS(37), + [anon_sym_DOT] = ACTIONS(35), + [sym_true] = ACTIONS(39), + [sym_false] = ACTIONS(39), + [anon_sym_COLON] = ACTIONS(37), + [anon_sym_DASH] = ACTIONS(39), + [anon_sym_PLUS] = ACTIONS(39), + [anon_sym_BANG] = ACTIONS(39), + [anon_sym_STAR_STAR] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(39), + [anon_sym_SLASH] = ACTIONS(39), + [anon_sym_SLASH_SLASH] = ACTIONS(39), + [anon_sym_LT_LT] = ACTIONS(39), + [anon_sym_GT_GT] = ACTIONS(39), + [anon_sym_AMP] = ACTIONS(39), + [anon_sym_PIPE] = ACTIONS(39), + [anon_sym_CARET] = ACTIONS(39), + [anon_sym_GT] = ACTIONS(39), + [anon_sym_GT_EQ] = ACTIONS(37), + [anon_sym_EQ_EQ] = ACTIONS(37), + [anon_sym_LT_EQ] = ACTIONS(37), + [anon_sym_LT] = ACTIONS(39), + [anon_sym_BANG_EQ] = ACTIONS(37), + [anon_sym_AMP_AMP] = ACTIONS(39), + [anon_sym_PIPE_PIPE] = ACTIONS(39), + [anon_sym_DOT_DOT] = ACTIONS(39), + [anon_sym_DOT_DOT_EQ] = ACTIONS(37), + [anon_sym_if] = ACTIONS(39), + [anon_sym_LBRACK] = ACTIONS(37), + [anon_sym_COMMA] = ACTIONS(37), + [anon_sym_RBRACK] = ACTIONS(37), + [anon_sym_EQ] = ACTIONS(39), + [anon_sym_LBRACE] = ACTIONS(37), + [anon_sym_RBRACE] = ACTIONS(37), + [anon_sym_SEMI] = ACTIONS(37), + [anon_sym_AMP_EQ] = ACTIONS(37), + [anon_sym_PIPE_EQ] = ACTIONS(37), + [anon_sym_CARET_EQ] = ACTIONS(37), + [anon_sym_AMP_AMP_EQ] = ACTIONS(37), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(37), + [anon_sym_CARET_CARET_EQ] = ACTIONS(37), + [anon_sym_PLUS_EQ] = ACTIONS(37), + [anon_sym_DASH_EQ] = ACTIONS(37), + [anon_sym_STAR_STAR_EQ] = ACTIONS(37), + [anon_sym_STAR_EQ] = ACTIONS(37), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(37), + [anon_sym_SLASH_EQ] = ACTIONS(37), + [anon_sym_LT_LT_EQ] = ACTIONS(37), + [anon_sym_GT_GT_EQ] = ACTIONS(37), + [anon_sym_let] = ACTIONS(39), + [anon_sym_for] = ACTIONS(39), }, [4] = { - [aux_sym_path_repeat1] = STATE(2), - [ts_builtin_sym_end] = ACTIONS(44), - [sym_identifier] = ACTIONS(46), + [aux_sym_path_repeat1] = STATE(4), + [ts_builtin_sym_end] = ACTIONS(41), + [sym_identifier] = ACTIONS(43), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(44), - [sym_default] = ACTIONS(46), - [anon_sym_LPAREN] = ACTIONS(44), - [anon_sym_RPAREN] = ACTIONS(44), - [aux_sym_base_ten_token1] = ACTIONS(46), - [aux_sym_octal_token1] = ACTIONS(44), - [aux_sym_hex_token1] = ACTIONS(44), - [aux_sym_binary_token1] = ACTIONS(44), - [anon_sym_DOT] = ACTIONS(42), - [sym_true] = ACTIONS(46), - [sym_false] = ACTIONS(46), - [anon_sym_DASH] = ACTIONS(46), - [anon_sym_PLUS] = ACTIONS(46), - [anon_sym_BANG] = ACTIONS(46), - [anon_sym_STAR_STAR] = ACTIONS(46), - [anon_sym_STAR] = ACTIONS(46), - [anon_sym_SLASH] = ACTIONS(46), - [anon_sym_SLASH_SLASH] = ACTIONS(46), - [anon_sym_LT_LT] = ACTIONS(46), - [anon_sym_GT_GT] = ACTIONS(46), - [anon_sym_AMP] = ACTIONS(46), - [anon_sym_PIPE] = ACTIONS(46), - [anon_sym_CARET] = ACTIONS(46), - [anon_sym_GT] = ACTIONS(46), - [anon_sym_GT_EQ] = ACTIONS(44), - [anon_sym_EQ_EQ] = ACTIONS(44), - [anon_sym_LT_EQ] = ACTIONS(44), - [anon_sym_LT] = ACTIONS(46), - [anon_sym_BANG_EQ] = ACTIONS(44), - [anon_sym_AMP_AMP] = ACTIONS(46), - [anon_sym_PIPE_PIPE] = ACTIONS(46), - [anon_sym_DOT_DOT] = ACTIONS(46), - [anon_sym_DOT_DOT_EQ] = ACTIONS(44), - [anon_sym_if] = ACTIONS(46), - [anon_sym_LBRACK] = ACTIONS(44), - [anon_sym_COMMA] = ACTIONS(44), - [anon_sym_RBRACK] = ACTIONS(44), - [anon_sym_EQ] = ACTIONS(46), - [anon_sym_LBRACE] = ACTIONS(44), - [anon_sym_RBRACE] = ACTIONS(44), - [anon_sym_SEMI] = ACTIONS(44), - [anon_sym_AMP_EQ] = ACTIONS(44), - [anon_sym_PIPE_EQ] = ACTIONS(44), - [anon_sym_CARET_EQ] = ACTIONS(44), - [anon_sym_AMP_AMP_EQ] = ACTIONS(44), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(44), - [anon_sym_CARET_CARET_EQ] = ACTIONS(44), - [anon_sym_PLUS_EQ] = ACTIONS(44), - [anon_sym_DASH_EQ] = ACTIONS(44), - [anon_sym_STAR_STAR_EQ] = ACTIONS(44), - [anon_sym_STAR_EQ] = ACTIONS(44), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(44), - [anon_sym_SLASH_EQ] = ACTIONS(44), - [anon_sym_LT_LT_EQ] = ACTIONS(44), - [anon_sym_GT_GT_EQ] = ACTIONS(44), - [anon_sym_let] = ACTIONS(46), - [anon_sym_for] = ACTIONS(46), + [sym_string] = ACTIONS(41), + [sym_default] = ACTIONS(43), + [anon_sym_LPAREN] = ACTIONS(41), + [anon_sym_RPAREN] = ACTIONS(41), + [aux_sym_base_ten_token1] = ACTIONS(43), + [aux_sym_octal_token1] = ACTIONS(41), + [aux_sym_hex_token1] = ACTIONS(41), + [aux_sym_binary_token1] = ACTIONS(41), + [anon_sym_DOT] = ACTIONS(45), + [sym_true] = ACTIONS(43), + [sym_false] = ACTIONS(43), + [anon_sym_COLON] = ACTIONS(41), + [anon_sym_DASH] = ACTIONS(43), + [anon_sym_PLUS] = ACTIONS(43), + [anon_sym_BANG] = ACTIONS(43), + [anon_sym_STAR_STAR] = ACTIONS(43), + [anon_sym_STAR] = ACTIONS(43), + [anon_sym_SLASH] = ACTIONS(43), + [anon_sym_SLASH_SLASH] = ACTIONS(43), + [anon_sym_LT_LT] = ACTIONS(43), + [anon_sym_GT_GT] = ACTIONS(43), + [anon_sym_AMP] = ACTIONS(43), + [anon_sym_PIPE] = ACTIONS(43), + [anon_sym_CARET] = ACTIONS(43), + [anon_sym_GT] = ACTIONS(43), + [anon_sym_GT_EQ] = ACTIONS(41), + [anon_sym_EQ_EQ] = ACTIONS(41), + [anon_sym_LT_EQ] = ACTIONS(41), + [anon_sym_LT] = ACTIONS(43), + [anon_sym_BANG_EQ] = ACTIONS(41), + [anon_sym_AMP_AMP] = ACTIONS(43), + [anon_sym_PIPE_PIPE] = ACTIONS(43), + [anon_sym_DOT_DOT] = ACTIONS(43), + [anon_sym_DOT_DOT_EQ] = ACTIONS(41), + [anon_sym_if] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(41), + [anon_sym_COMMA] = ACTIONS(41), + [anon_sym_RBRACK] = ACTIONS(41), + [anon_sym_EQ] = ACTIONS(43), + [anon_sym_LBRACE] = ACTIONS(41), + [anon_sym_RBRACE] = ACTIONS(41), + [anon_sym_SEMI] = ACTIONS(41), + [anon_sym_AMP_EQ] = ACTIONS(41), + [anon_sym_PIPE_EQ] = ACTIONS(41), + [anon_sym_CARET_EQ] = ACTIONS(41), + [anon_sym_AMP_AMP_EQ] = ACTIONS(41), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(41), + [anon_sym_CARET_CARET_EQ] = ACTIONS(41), + [anon_sym_PLUS_EQ] = ACTIONS(41), + [anon_sym_DASH_EQ] = ACTIONS(41), + [anon_sym_STAR_STAR_EQ] = ACTIONS(41), + [anon_sym_STAR_EQ] = ACTIONS(41), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(41), + [anon_sym_SLASH_EQ] = ACTIONS(41), + [anon_sym_LT_LT_EQ] = ACTIONS(41), + [anon_sym_GT_GT_EQ] = ACTIONS(41), + [anon_sym_let] = ACTIONS(43), + [anon_sym_for] = ACTIONS(43), }, [5] = { - [ts_builtin_sym_end] = ACTIONS(31), - [sym_identifier] = ACTIONS(33), + [ts_builtin_sym_end] = ACTIONS(41), + [sym_identifier] = ACTIONS(43), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(31), - [sym_default] = ACTIONS(33), - [anon_sym_LPAREN] = ACTIONS(31), - [anon_sym_RPAREN] = ACTIONS(31), - [aux_sym_base_ten_token1] = ACTIONS(33), - [aux_sym_octal_token1] = ACTIONS(31), - [aux_sym_hex_token1] = ACTIONS(31), - [aux_sym_binary_token1] = ACTIONS(31), - [anon_sym_DOT] = ACTIONS(33), - [sym_true] = ACTIONS(33), - [sym_false] = ACTIONS(33), - [anon_sym_DASH] = ACTIONS(33), - [anon_sym_PLUS] = ACTIONS(33), - [anon_sym_BANG] = ACTIONS(33), - [anon_sym_STAR_STAR] = ACTIONS(33), - [anon_sym_STAR] = ACTIONS(33), - [anon_sym_SLASH] = ACTIONS(33), - [anon_sym_SLASH_SLASH] = ACTIONS(33), - [anon_sym_LT_LT] = ACTIONS(33), - [anon_sym_GT_GT] = ACTIONS(33), - [anon_sym_AMP] = ACTIONS(33), - [anon_sym_PIPE] = ACTIONS(33), - [anon_sym_CARET] = ACTIONS(33), - [anon_sym_GT] = ACTIONS(33), - [anon_sym_GT_EQ] = ACTIONS(31), - [anon_sym_EQ_EQ] = ACTIONS(31), - [anon_sym_LT_EQ] = ACTIONS(31), - [anon_sym_LT] = ACTIONS(33), - [anon_sym_BANG_EQ] = ACTIONS(31), - [anon_sym_AMP_AMP] = ACTIONS(33), - [anon_sym_PIPE_PIPE] = ACTIONS(33), - [anon_sym_DOT_DOT] = ACTIONS(33), - [anon_sym_DOT_DOT_EQ] = ACTIONS(31), - [anon_sym_if] = ACTIONS(33), - [anon_sym_LBRACK] = ACTIONS(31), - [anon_sym_COMMA] = ACTIONS(31), - [anon_sym_RBRACK] = ACTIONS(31), - [anon_sym_EQ] = ACTIONS(33), - [anon_sym_LBRACE] = ACTIONS(31), - [anon_sym_RBRACE] = ACTIONS(31), - [anon_sym_SEMI] = ACTIONS(31), - [anon_sym_AMP_EQ] = ACTIONS(31), - [anon_sym_PIPE_EQ] = ACTIONS(31), - [anon_sym_CARET_EQ] = ACTIONS(31), - [anon_sym_AMP_AMP_EQ] = ACTIONS(31), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(31), - [anon_sym_CARET_CARET_EQ] = ACTIONS(31), - [anon_sym_PLUS_EQ] = ACTIONS(31), - [anon_sym_DASH_EQ] = ACTIONS(31), - [anon_sym_STAR_STAR_EQ] = ACTIONS(31), - [anon_sym_STAR_EQ] = ACTIONS(31), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(31), - [anon_sym_SLASH_EQ] = ACTIONS(31), - [anon_sym_LT_LT_EQ] = ACTIONS(31), - [anon_sym_GT_GT_EQ] = ACTIONS(31), - [anon_sym_let] = ACTIONS(33), - [anon_sym_for] = ACTIONS(33), + [sym_string] = ACTIONS(41), + [sym_default] = ACTIONS(43), + [anon_sym_LPAREN] = ACTIONS(41), + [anon_sym_RPAREN] = ACTIONS(41), + [aux_sym_base_ten_token1] = ACTIONS(43), + [aux_sym_octal_token1] = ACTIONS(41), + [aux_sym_hex_token1] = ACTIONS(41), + [aux_sym_binary_token1] = ACTIONS(41), + [anon_sym_DOT] = ACTIONS(43), + [sym_true] = ACTIONS(43), + [sym_false] = ACTIONS(43), + [anon_sym_COLON] = ACTIONS(41), + [anon_sym_DASH] = ACTIONS(43), + [anon_sym_PLUS] = ACTIONS(43), + [anon_sym_BANG] = ACTIONS(43), + [anon_sym_STAR_STAR] = ACTIONS(43), + [anon_sym_STAR] = ACTIONS(43), + [anon_sym_SLASH] = ACTIONS(43), + [anon_sym_SLASH_SLASH] = ACTIONS(43), + [anon_sym_LT_LT] = ACTIONS(43), + [anon_sym_GT_GT] = ACTIONS(43), + [anon_sym_AMP] = ACTIONS(43), + [anon_sym_PIPE] = ACTIONS(43), + [anon_sym_CARET] = ACTIONS(43), + [anon_sym_GT] = ACTIONS(43), + [anon_sym_GT_EQ] = ACTIONS(41), + [anon_sym_EQ_EQ] = ACTIONS(41), + [anon_sym_LT_EQ] = ACTIONS(41), + [anon_sym_LT] = ACTIONS(43), + [anon_sym_BANG_EQ] = ACTIONS(41), + [anon_sym_AMP_AMP] = ACTIONS(43), + [anon_sym_PIPE_PIPE] = ACTIONS(43), + [anon_sym_DOT_DOT] = ACTIONS(43), + [anon_sym_DOT_DOT_EQ] = ACTIONS(41), + [anon_sym_if] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(41), + [anon_sym_COMMA] = ACTIONS(41), + [anon_sym_RBRACK] = ACTIONS(41), + [anon_sym_EQ] = ACTIONS(43), + [anon_sym_LBRACE] = ACTIONS(41), + [anon_sym_RBRACE] = ACTIONS(41), + [anon_sym_SEMI] = ACTIONS(41), + [anon_sym_AMP_EQ] = ACTIONS(41), + [anon_sym_PIPE_EQ] = ACTIONS(41), + [anon_sym_CARET_EQ] = ACTIONS(41), + [anon_sym_AMP_AMP_EQ] = ACTIONS(41), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(41), + [anon_sym_CARET_CARET_EQ] = ACTIONS(41), + [anon_sym_PLUS_EQ] = ACTIONS(41), + [anon_sym_DASH_EQ] = ACTIONS(41), + [anon_sym_STAR_STAR_EQ] = ACTIONS(41), + [anon_sym_STAR_EQ] = ACTIONS(41), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(41), + [anon_sym_SLASH_EQ] = ACTIONS(41), + [anon_sym_LT_LT_EQ] = ACTIONS(41), + [anon_sym_GT_GT_EQ] = ACTIONS(41), + [anon_sym_let] = ACTIONS(43), + [anon_sym_for] = ACTIONS(43), }, [6] = { - [sym_closure_captured_variables] = STATE(172), - [sym_assignment_operator] = STATE(57), + [sym_closure_captured_variables] = STATE(177), + [sym_assignment_operator] = STATE(66), [sym_identifier] = ACTIONS(48), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2278,6 +2321,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [aux_sym_binary_token1] = ACTIONS(50), [sym_true] = ACTIONS(48), [sym_false] = ACTIONS(48), + [anon_sym_COLON] = ACTIONS(50), [anon_sym_DASH] = ACTIONS(48), [anon_sym_PLUS] = ACTIONS(48), [anon_sym_BANG] = ACTIONS(48), @@ -2327,75 +2371,77 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { static const uint16_t ts_small_parse_table[] = { [0] = 27, - ACTIONS(56), 1, + ACTIONS(5), 1, sym_identifier, - ACTIONS(59), 1, + ACTIONS(7), 1, sym_string, - ACTIONS(62), 1, + ACTIONS(9), 1, sym_default, - ACTIONS(65), 1, + ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(68), 1, - aux_sym_base_ten_token1, - ACTIONS(71), 1, + ACTIONS(15), 1, aux_sym_octal_token1, - ACTIONS(74), 1, + ACTIONS(17), 1, aux_sym_hex_token1, - ACTIONS(77), 1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(86), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(89), 1, + ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(92), 1, + ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(95), 1, + ACTIONS(56), 1, + aux_sym_base_ten_token1, + ACTIONS(60), 1, anon_sym_RBRACE, - ACTIONS(97), 1, + ACTIONS(62), 1, anon_sym_let, - ACTIONS(100), 1, + ACTIONS(64), 1, anon_sym_for, STATE(6), 1, sym_path, STATE(11), 1, sym_number, - STATE(40), 1, + STATE(42), 1, sym__float, - STATE(85), 1, + STATE(43), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(80), 2, + ACTIONS(21), 2, sym_true, sym_false, - STATE(7), 2, + STATE(9), 2, sym_statement, aux_sym_procedural_block_repeat1, - STATE(41), 2, + STATE(73), 2, sym_void, sym_struct_definition, - ACTIONS(83), 3, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(113), 4, + STATE(118), 4, sym_closed_expression, sym_let, sym_assign, sym_for, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -2404,7 +2450,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [105] = 27, + [107] = 27, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2425,23 +2471,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(103), 1, + ACTIONS(56), 1, aux_sym_base_ten_token1, - ACTIONS(107), 1, - anon_sym_RBRACE, - ACTIONS(109), 1, + ACTIONS(62), 1, anon_sym_let, - ACTIONS(111), 1, + ACTIONS(64), 1, anon_sym_for, + ACTIONS(66), 1, + anon_sym_RBRACE, STATE(6), 1, sym_path, STATE(11), 1, sym_number, - STATE(40), 1, + STATE(42), 1, sym__float, - STATE(85), 1, + STATE(43), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2452,28 +2498,30 @@ static const uint16_t ts_small_parse_table[] = { STATE(7), 2, sym_statement, aux_sym_procedural_block_repeat1, - STATE(41), 2, + STATE(73), 2, sym_void, sym_struct_definition, - ACTIONS(105), 3, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(113), 4, + STATE(118), 4, sym_closed_expression, sym_let, sym_assign, sym_for, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -2482,76 +2530,78 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [210] = 27, - ACTIONS(5), 1, + [214] = 27, + ACTIONS(68), 1, sym_identifier, - ACTIONS(7), 1, + ACTIONS(71), 1, sym_string, - ACTIONS(9), 1, + ACTIONS(74), 1, sym_default, - ACTIONS(11), 1, + ACTIONS(77), 1, anon_sym_LPAREN, - ACTIONS(15), 1, + ACTIONS(80), 1, + aux_sym_base_ten_token1, + ACTIONS(83), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(86), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(89), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(98), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(101), 1, anon_sym_LBRACK, - ACTIONS(29), 1, + ACTIONS(104), 1, anon_sym_LBRACE, - ACTIONS(103), 1, - aux_sym_base_ten_token1, + ACTIONS(107), 1, + anon_sym_RBRACE, ACTIONS(109), 1, anon_sym_let, - ACTIONS(111), 1, + ACTIONS(112), 1, anon_sym_for, - ACTIONS(113), 1, - anon_sym_RBRACE, STATE(6), 1, sym_path, STATE(11), 1, sym_number, - STATE(40), 1, + STATE(42), 1, sym__float, - STATE(85), 1, + STATE(43), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(92), 2, sym_true, sym_false, - STATE(8), 2, + STATE(9), 2, sym_statement, aux_sym_procedural_block_repeat1, - STATE(41), 2, + STATE(73), 2, sym_void, sym_struct_definition, - ACTIONS(105), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(113), 4, + STATE(118), 4, sym_closed_expression, sym_let, sym_assign, sym_for, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -2560,7 +2610,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [315] = 28, + [321] = 28, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -2589,21 +2639,21 @@ static const uint16_t ts_small_parse_table[] = { sym_varadic_dots, STATE(11), 1, sym_number, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(110), 1, + STATE(113), 1, sym_expression, - STATE(120), 1, + STATE(121), 1, aux_sym_struct_definition_repeat1, - STATE(125), 1, + STATE(131), 1, aux_sym_dictionary_construction_repeat1, - STATE(139), 1, - sym_dictionary_member_assignment, - STATE(142), 1, + STATE(138), 1, sym_integer, - STATE(150), 1, + STATE(139), 1, sym_struct_member, - STATE(170), 1, + STATE(148), 1, + sym_dictionary_member_assignment, + STATE(159), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, @@ -2615,20 +2665,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -2637,7 +2689,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [420] = 4, + [428] = 4, ACTIONS(125), 1, anon_sym_DOT, ACTIONS(3), 2, @@ -2660,7 +2712,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(121), 28, + ACTIONS(121), 29, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -2669,6 +2721,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, aux_sym_binary_token1, sym_unit_quote, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2689,12 +2742,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [476] = 4, + [485] = 6, ACTIONS(131), 1, - anon_sym_else, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, ACTIONS(3), 2, sym_comment, sym__whitespace, + STATE(38), 2, + sym_void, + sym_dictionary_construction, ACTIONS(129), 16, sym_identifier, sym_default, @@ -2712,10 +2770,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(127), 27, + ACTIONS(127), 26, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, anon_sym_RPAREN, aux_sym_octal_token1, aux_sym_hex_token1, @@ -2740,11 +2797,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [531] = 3, + [546] = 6, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(135), 17, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(137), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2759,13 +2823,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - anon_sym_else, anon_sym_let, anon_sym_for, - ACTIONS(133), 27, + ACTIONS(135), 26, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, anon_sym_RPAREN, aux_sym_octal_token1, aux_sym_hex_token1, @@ -2790,11 +2852,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [584] = 3, + [607] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(139), 17, + ACTIONS(141), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2812,7 +2874,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_else, anon_sym_let, anon_sym_for, - ACTIONS(137), 27, + ACTIONS(139), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -2820,6 +2882,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2840,11 +2903,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [637] = 3, + [661] = 4, + ACTIONS(147), 1, + anon_sym_else, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(143), 16, + ACTIONS(145), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2861,7 +2926,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(141), 28, + ACTIONS(143), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -2869,7 +2934,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - sym_unit_quote, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2890,11 +2955,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [690] = 3, + [717] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(147), 16, + ACTIONS(151), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2911,7 +2976,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(145), 28, + ACTIONS(149), 29, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -2920,6 +2985,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, aux_sym_binary_token1, sym_unit_quote, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2940,11 +3006,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [743] = 3, + [771] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(151), 16, + ACTIONS(155), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2961,7 +3027,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(149), 27, + ACTIONS(153), 29, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -2969,6 +3035,8 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + sym_unit_quote, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2989,11 +3057,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [795] = 3, + [825] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(155), 16, + ACTIONS(159), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3008,9 +3076,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_else, anon_sym_let, anon_sym_for, - ACTIONS(153), 27, + ACTIONS(157), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3018,6 +3087,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3038,11 +3108,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [847] = 3, + [879] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(159), 16, + ACTIONS(163), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3059,7 +3129,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(157), 27, + ACTIONS(161), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3067,6 +3137,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3087,7 +3158,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [899] = 3, + [932] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -3108,7 +3179,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(50), 27, + ACTIONS(50), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3116,6 +3187,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3136,11 +3208,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [951] = 3, + [985] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(163), 16, + ACTIONS(167), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3157,7 +3229,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(161), 27, + ACTIONS(165), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3165,6 +3237,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3185,11 +3258,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1003] = 3, + [1038] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 16, + ACTIONS(171), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3206,7 +3279,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(165), 27, + ACTIONS(169), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3214,6 +3287,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3234,11 +3308,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1055] = 3, + [1091] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(171), 16, + ACTIONS(175), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3255,7 +3329,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(169), 27, + ACTIONS(173), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3263,6 +3337,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3283,11 +3358,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1107] = 3, + [1144] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(175), 16, + ACTIONS(179), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3304,7 +3379,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(173), 27, + ACTIONS(177), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3312,6 +3387,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3332,11 +3408,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1159] = 3, + [1197] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(179), 16, + ACTIONS(183), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3353,7 +3429,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(177), 27, + ACTIONS(181), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3361,6 +3437,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3381,11 +3458,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1211] = 3, + [1250] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(183), 16, + ACTIONS(187), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3402,7 +3479,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(181), 27, + ACTIONS(185), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3410,6 +3487,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3430,11 +3508,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1263] = 3, + [1303] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(187), 16, + ACTIONS(191), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3451,7 +3529,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(185), 27, + ACTIONS(189), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3459,6 +3537,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3479,11 +3558,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1315] = 3, + [1356] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 16, + ACTIONS(195), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3500,7 +3579,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(189), 27, + ACTIONS(193), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3508,6 +3587,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3528,11 +3608,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1367] = 3, + [1409] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(195), 16, + ACTIONS(199), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3549,7 +3629,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(193), 27, + ACTIONS(197), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3557,6 +3637,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3577,11 +3658,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1419] = 3, + [1462] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(199), 16, + ACTIONS(203), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3598,7 +3679,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(197), 27, + ACTIONS(201), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3606,6 +3687,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3626,11 +3708,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1471] = 3, + [1515] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(203), 16, + ACTIONS(207), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3647,7 +3729,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(201), 27, + ACTIONS(205), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3655,6 +3737,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3675,11 +3758,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1523] = 3, + [1568] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(207), 16, + ACTIONS(211), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3696,7 +3779,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(205), 27, + ACTIONS(209), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3704,6 +3787,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3724,11 +3808,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1575] = 3, + [1621] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(211), 16, + ACTIONS(215), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3745,7 +3829,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(209), 27, + ACTIONS(213), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3753,6 +3837,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3773,11 +3858,61 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1627] = 3, + [1674] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(215), 16, + ACTIONS(219), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(217), 28, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1727] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(223), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3794,7 +3929,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(213), 27, + ACTIONS(221), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3802,6 +3937,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3822,14 +3958,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1679] = 4, + [1780] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(217), 2, + ACTIONS(225), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(143), 17, + ACTIONS(151), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3847,13 +3983,62 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(141), 24, + ACTIONS(149), 25, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, sym_unit_quote, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [1835] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(229), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(227), 28, + ts_builtin_sym_end, + sym_string, + anon_sym_LPAREN, + anon_sym_RPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3869,14 +4054,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1733] = 3, + [1888] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(221), 16, + ACTIONS(233), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3893,7 +4080,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(219), 27, + ACTIONS(231), 28, ts_builtin_sym_end, sym_string, anon_sym_LPAREN, @@ -3901,6 +4088,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3921,7 +4109,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1785] = 23, + [1941] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3944,17 +4132,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(223), 1, + ACTIONS(235), 1, anon_sym_RBRACK, STATE(11), 1, sym_number, - STATE(38), 1, + STATE(40), 1, aux_sym_list_repeat1, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(101), 1, + STATE(104), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3966,20 +4154,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -3988,65 +4178,67 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [1875] = 23, - ACTIONS(225), 1, + [2033] = 23, + ACTIONS(5), 1, sym_identifier, - ACTIONS(228), 1, + ACTIONS(7), 1, sym_string, - ACTIONS(231), 1, + ACTIONS(9), 1, sym_default, - ACTIONS(234), 1, + ACTIONS(11), 1, anon_sym_LPAREN, - ACTIONS(237), 1, + ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(240), 1, + ACTIONS(15), 1, aux_sym_octal_token1, - ACTIONS(243), 1, + ACTIONS(17), 1, aux_sym_hex_token1, - ACTIONS(246), 1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(255), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(258), 1, + ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(261), 1, - anon_sym_RBRACK, - ACTIONS(263), 1, + ACTIONS(29), 1, anon_sym_LBRACE, + ACTIONS(237), 1, + anon_sym_RBRACK, STATE(11), 1, sym_number, - STATE(38), 1, + STATE(41), 1, aux_sym_list_repeat1, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(109), 1, + STATE(108), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(249), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(252), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -4055,65 +4247,67 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [1965] = 23, - ACTIONS(5), 1, + [2125] = 23, + ACTIONS(239), 1, sym_identifier, - ACTIONS(7), 1, + ACTIONS(242), 1, sym_string, - ACTIONS(9), 1, + ACTIONS(245), 1, sym_default, - ACTIONS(11), 1, + ACTIONS(248), 1, anon_sym_LPAREN, - ACTIONS(13), 1, + ACTIONS(251), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(254), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(257), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(260), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(269), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(272), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(266), 1, + ACTIONS(275), 1, anon_sym_RBRACK, + ACTIONS(277), 1, + anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(37), 1, + STATE(41), 1, aux_sym_list_repeat1, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(104), 1, + STATE(111), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(263), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(266), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -4122,15 +4316,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2055] = 5, - ACTIONS(272), 1, + [2217] = 5, + ACTIONS(284), 1, sym_unit_quote, - STATE(18), 1, + STATE(37), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(268), 16, + ACTIONS(280), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4147,12 +4341,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(270), 23, + ACTIONS(282), 24, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -4171,72 +4366,95 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2109] = 4, - STATE(172), 1, - sym_closure_captured_variables, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(48), 16, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(50), 23, - sym_string, + [2272] = 21, + ACTIONS(131), 1, anon_sym_LPAREN, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(292), 1, anon_sym_STAR_STAR, + ACTIONS(296), 1, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(310), 1, anon_sym_AMP_AMP, + ACTIONS(312), 1, anon_sym_PIPE_PIPE, + ACTIONS(314), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, + ACTIONS(318), 1, anon_sym_SEMI, - [2160] = 7, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 2, + ACTIONS(290), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(278), 2, + ACTIONS(294), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(195), 14, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(288), 7, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + ACTIONS(286), 9, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_let, + anon_sym_for, + [2359] = 9, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(292), 1, + anon_sym_STAR_STAR, + ACTIONS(296), 1, + anon_sym_SLASH_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(294), 2, + anon_sym_STAR, + anon_sym_SLASH, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(137), 14, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, sym_false, anon_sym_BANG, anon_sym_AMP, @@ -4247,12 +4465,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(193), 19, + ACTIONS(135), 20, sym_string, - anon_sym_LPAREN, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -4267,391 +4486,603 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2216] = 17, - ACTIONS(276), 1, + [2422] = 7, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(292), 1, anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(288), 1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(137), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_AMP, - ACTIONS(290), 1, anon_sym_PIPE, - ACTIONS(292), 1, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(135), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(298), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(300), 1, anon_sym_PIPE_PIPE, - ACTIONS(302), 1, - anon_sym_DOT_DOT, - ACTIONS(304), 1, anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [2481] = 10, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(292), 1, + anon_sym_STAR_STAR, + ACTIONS(296), 1, + anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 2, + ACTIONS(290), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(278), 2, + ACTIONS(294), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(286), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(294), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(296), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(282), 9, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(137), 14, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(284), 9, + ACTIONS(135), 18, sym_string, - anon_sym_LPAREN, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2292] = 21, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, + [2546] = 11, + ACTIONS(131), 1, anon_sym_LPAREN, - ACTIONS(13), 1, - aux_sym_base_ten_token1, - ACTIONS(15), 1, - aux_sym_octal_token1, - ACTIONS(17), 1, - aux_sym_hex_token1, - ACTIONS(19), 1, - aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, - sym_number, - STATE(87), 1, - sym__float, - STATE(91), 1, - sym_expression, - STATE(142), 1, - sym_integer, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(292), 1, + anon_sym_STAR_STAR, + ACTIONS(296), 1, + anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, - sym_true, - sym_false, - ACTIONS(23), 3, + ACTIONS(290), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(88), 3, + ACTIONS(294), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + STATE(38), 2, sym_void, - sym_path, - sym_struct_definition, - STATE(138), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(20), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [2376] = 21, - ACTIONS(5), 1, + ACTIONS(137), 14, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(135), 16, + sym_string, aux_sym_octal_token1, - ACTIONS(17), 1, aux_sym_hex_token1, - ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - ACTIONS(29), 1, anon_sym_LBRACE, - STATE(11), 1, - sym_number, - STATE(29), 1, - sym_expression, - STATE(87), 1, - sym__float, - STATE(142), 1, - sym_integer, + anon_sym_RBRACE, + anon_sym_SEMI, + [2613] = 13, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(292), 1, + anon_sym_STAR_STAR, + ACTIONS(296), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(304), 1, + anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, - sym_true, - sym_false, - ACTIONS(23), 3, + ACTIONS(290), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(88), 3, + ACTIONS(294), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + STATE(38), 2, sym_void, - sym_path, - sym_struct_definition, - STATE(138), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(20), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [2460] = 21, - ACTIONS(5), 1, + ACTIONS(137), 13, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(135), 15, + sym_string, aux_sym_octal_token1, - ACTIONS(17), 1, aux_sym_hex_token1, - ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - ACTIONS(29), 1, anon_sym_LBRACE, - STATE(11), 1, - sym_number, - STATE(87), 1, - sym__float, - STATE(92), 1, - sym_expression, - STATE(142), 1, - sym_integer, + anon_sym_RBRACE, + anon_sym_SEMI, + [2684] = 12, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(292), 1, + anon_sym_STAR_STAR, + ACTIONS(296), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, - sym_true, - sym_false, - ACTIONS(23), 3, + ACTIONS(290), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(88), 3, + ACTIONS(294), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + STATE(38), 2, sym_void, - sym_path, - sym_struct_definition, - STATE(138), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(20), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [2544] = 21, - ACTIONS(5), 1, + ACTIONS(137), 13, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(135), 16, + sym_string, aux_sym_octal_token1, - ACTIONS(17), 1, aux_sym_hex_token1, - ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - ACTIONS(29), 1, anon_sym_LBRACE, - STATE(11), 1, - sym_number, - STATE(87), 1, - sym__float, - STATE(90), 1, - sym_expression, - STATE(142), 1, - sym_integer, + anon_sym_RBRACE, + anon_sym_SEMI, + [2753] = 14, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(292), 1, + anon_sym_STAR_STAR, + ACTIONS(296), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, - sym_true, - sym_false, - ACTIONS(23), 3, + ACTIONS(290), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(88), 3, + ACTIONS(294), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + STATE(38), 2, sym_void, - sym_path, - sym_struct_definition, - STATE(138), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(20), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [2628] = 21, - ACTIONS(5), 1, + ACTIONS(137), 12, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(135), 15, + sym_string, aux_sym_octal_token1, - ACTIONS(17), 1, aux_sym_hex_token1, - ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - ACTIONS(29), 1, anon_sym_LBRACE, - STATE(11), 1, - sym_number, - STATE(87), 1, - sym__float, - STATE(94), 1, - sym_expression, - STATE(142), 1, - sym_integer, + anon_sym_RBRACE, + anon_sym_SEMI, + [2826] = 16, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(292), 1, + anon_sym_STAR_STAR, + ACTIONS(296), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, - sym_true, - sym_false, - ACTIONS(23), 3, + ACTIONS(290), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(88), 3, + ACTIONS(294), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + STATE(38), 2, sym_void, - sym_path, - sym_struct_definition, - STATE(138), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(20), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [2712] = 21, - ACTIONS(5), 1, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(137), 10, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(135), 11, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [2903] = 17, + ACTIONS(131), 1, anon_sym_LPAREN, - ACTIONS(13), 1, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(292), 1, + anon_sym_STAR_STAR, + ACTIONS(296), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(290), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(294), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(135), 10, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + ACTIONS(137), 10, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + [2982] = 18, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(292), 1, + anon_sym_STAR_STAR, + ACTIONS(296), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(290), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(294), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(135), 9, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + ACTIONS(137), 10, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + [3063] = 20, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(292), 1, + anon_sym_STAR_STAR, + ACTIONS(296), 1, + anon_sym_SLASH_SLASH, + ACTIONS(300), 1, + anon_sym_AMP, + ACTIONS(302), 1, + anon_sym_PIPE, + ACTIONS(304), 1, + anon_sym_CARET, + ACTIONS(310), 1, + anon_sym_AMP_AMP, + ACTIONS(312), 1, + anon_sym_PIPE_PIPE, + ACTIONS(314), 1, + anon_sym_DOT_DOT, + ACTIONS(316), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(290), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(294), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(298), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(306), 2, + anon_sym_GT, + anon_sym_LT, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(308), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(322), 8, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + ACTIONS(320), 9, + sym_identifier, + sym_default, aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_let, + anon_sym_for, + [3148] = 21, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + anon_sym_LPAREN, ACTIONS(15), 1, aux_sym_octal_token1, ACTIONS(17), 1, @@ -4664,13 +5095,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, + ACTIONS(56), 1, + aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(87), 1, + STATE(42), 1, sym__float, - STATE(95), 1, + STATE(52), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4678,24 +5111,26 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(73), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -4704,7 +5139,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2796] = 21, + [3234] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4729,11 +5164,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(96), 1, + STATE(90), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4745,20 +5180,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -4767,7 +5204,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2880] = 21, + [3320] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4792,11 +5229,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(97), 1, + STATE(96), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4808,20 +5245,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -4830,7 +5269,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2964] = 21, + [3406] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4855,11 +5294,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(93), 1, + STATE(99), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4871,20 +5310,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -4893,7 +5334,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3048] = 21, + [3492] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4918,11 +5359,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(98), 1, + STATE(101), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4934,20 +5375,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -4956,7 +5399,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3132] = 21, + [3578] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4981,11 +5424,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(99), 1, + STATE(91), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4997,20 +5440,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5019,7 +5464,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3216] = 21, + [3664] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5044,11 +5489,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(102), 1, + STATE(92), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5060,20 +5505,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5082,7 +5529,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3300] = 21, + [3750] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5107,11 +5554,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(27), 1, - sym_expression, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(142), 1, + STATE(93), 1, + sym_expression, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5123,20 +5570,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5145,7 +5594,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3384] = 21, + [3836] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5170,11 +5619,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(107), 1, + STATE(94), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5186,20 +5635,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5208,7 +5659,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3468] = 21, + [3922] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5233,11 +5684,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(103), 1, + STATE(106), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5249,20 +5700,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5271,7 +5724,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3552] = 21, + [4008] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5296,11 +5749,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(87), 1, - sym__float, - STATE(106), 1, + STATE(12), 1, sym_expression, - STATE(142), 1, + STATE(89), 1, + sym__float, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5312,20 +5765,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5334,7 +5789,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3636] = 21, + [4094] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5359,11 +5814,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(108), 1, + STATE(109), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5375,20 +5830,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5397,7 +5854,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3720] = 21, + [4180] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5422,11 +5879,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(105), 1, + STATE(107), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5438,20 +5895,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5460,7 +5919,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3804] = 21, + [4266] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5485,11 +5944,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(87), 1, + STATE(89), 1, sym__float, - STATE(100), 1, + STATE(105), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5501,20 +5960,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(88), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5523,7 +5984,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3888] = 21, + [4352] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5532,6 +5993,8 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(13), 1, + aux_sym_base_ten_token1, ACTIONS(15), 1, aux_sym_octal_token1, ACTIONS(17), 1, @@ -5544,15 +6007,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(103), 1, - aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(27), 1, - sym_expression, - STATE(40), 1, + STATE(89), 1, sym__float, - STATE(142), 1, + STATE(110), 1, + sym_expression, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5560,24 +6021,26 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(105), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5586,7 +6049,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3972] = 21, + [4438] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5595,6 +6058,8 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(13), 1, + aux_sym_base_ten_token1, ACTIONS(15), 1, aux_sym_octal_token1, ACTIONS(17), 1, @@ -5607,15 +6072,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(103), 1, - aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(40), 1, + STATE(89), 1, sym__float, - STATE(75), 1, + STATE(103), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5623,24 +6086,26 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(105), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5649,7 +6114,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4056] = 21, + [4524] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5658,6 +6123,8 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(13), 1, + aux_sym_base_ten_token1, ACTIONS(15), 1, aux_sym_octal_token1, ACTIONS(17), 1, @@ -5670,40 +6137,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(103), 1, - aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(29), 1, - sym_expression, - STATE(40), 1, + STATE(89), 1, sym__float, - STATE(142), 1, - sym_integer, + STATE(97), 1, + sym_expression, + STATE(138), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(105), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5712,7 +6179,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4140] = 21, + [4610] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5733,15 +6200,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(103), 1, + ACTIONS(56), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(40), 1, - sym__float, - STATE(76), 1, + STATE(12), 1, sym_expression, - STATE(142), 1, + STATE(42), 1, + sym__float, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5749,24 +6216,26 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(105), 3, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(73), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5775,7 +6244,55 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4224] = 21, + [4696] = 4, + STATE(177), 1, + sym_closure_captured_variables, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(48), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(50), 24, + sym_string, + anon_sym_LPAREN, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [4748] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5796,15 +6313,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(103), 1, + ACTIONS(56), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(40), 1, - sym__float, STATE(42), 1, + sym__float, + STATE(44), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5812,24 +6329,26 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(105), 3, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(73), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5838,7 +6357,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4308] = 21, + [4834] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5859,15 +6378,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(103), 1, + ACTIONS(56), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(40), 1, - sym__float, - STATE(77), 1, + STATE(13), 1, sym_expression, - STATE(142), 1, + STATE(42), 1, + sym__float, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5875,24 +6394,26 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(105), 3, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(73), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5901,7 +6422,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4392] = 21, + [4920] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5922,15 +6443,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(103), 1, + ACTIONS(56), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(40), 1, + STATE(42), 1, sym__float, - STATE(78), 1, + STATE(45), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5938,24 +6459,26 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(105), 3, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(73), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -5964,7 +6487,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4476] = 21, + [5006] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5985,15 +6508,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(103), 1, + ACTIONS(56), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(40), 1, + STATE(42), 1, sym__float, - STATE(79), 1, + STATE(46), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6001,24 +6524,26 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(105), 3, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(73), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -6027,7 +6552,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4560] = 21, + [5092] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6048,15 +6573,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(103), 1, + ACTIONS(56), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(40), 1, + STATE(42), 1, sym__float, - STATE(80), 1, + STATE(47), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6064,24 +6589,26 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(105), 3, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(73), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -6090,7 +6617,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4644] = 21, + [5178] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6111,15 +6638,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(103), 1, + ACTIONS(56), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(40), 1, + STATE(42), 1, sym__float, - STATE(81), 1, + STATE(48), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6127,24 +6654,26 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(105), 3, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(73), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -6153,7 +6682,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4728] = 21, + [5264] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6174,15 +6703,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(103), 1, + ACTIONS(56), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(40), 1, + STATE(42), 1, sym__float, - STATE(82), 1, + STATE(49), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6190,24 +6719,26 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(105), 3, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(73), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -6216,7 +6747,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4812] = 21, + [5350] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6237,15 +6768,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(103), 1, + ACTIONS(56), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(40), 1, + STATE(42), 1, sym__float, - STATE(83), 1, + STATE(50), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6253,24 +6784,26 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(105), 3, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(73), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -6279,475 +6812,267 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4896] = 6, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(195), 14, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(193), 21, - sym_string, - anon_sym_LPAREN, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [4950] = 4, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(195), 16, + [5436] = 21, + ACTIONS(5), 1, sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(193), 22, + ACTIONS(7), 1, sym_string, - anon_sym_LPAREN, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [5000] = 8, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(274), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(286), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(195), 14, - sym_identifier, + ACTIONS(9), 1, sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(193), 17, - sym_string, + ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, aux_sym_octal_token1, + ACTIONS(17), 1, aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [5058] = 10, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(288), 1, - anon_sym_AMP, - ACTIONS(292), 1, - anon_sym_CARET, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(274), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(286), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(195), 13, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, + ACTIONS(25), 1, anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(193), 16, - sym_string, - anon_sym_LPAREN, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(27), 1, anon_sym_LBRACK, + ACTIONS(29), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [5120] = 9, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(288), 1, - anon_sym_AMP, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(274), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(286), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(195), 13, - sym_identifier, - sym_default, + ACTIONS(56), 1, aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(193), 17, - sym_string, - anon_sym_LPAREN, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [5180] = 11, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(288), 1, - anon_sym_AMP, - ACTIONS(290), 1, - anon_sym_PIPE, - ACTIONS(292), 1, - anon_sym_CARET, + STATE(11), 1, + sym_number, + STATE(42), 1, + sym__float, + STATE(51), 1, + sym_expression, + STATE(138), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(286), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(195), 12, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, + ACTIONS(21), 2, sym_true, sym_false, - anon_sym_BANG, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(193), 16, - sym_string, - anon_sym_LPAREN, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [5244] = 13, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(288), 1, - anon_sym_AMP, - ACTIONS(290), 1, - anon_sym_PIPE, - ACTIONS(292), 1, - anon_sym_CARET, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(274), 2, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(286), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(294), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(296), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(195), 10, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, anon_sym_BANG, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(193), 12, + STATE(73), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(149), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 14, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [5522] = 21, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, aux_sym_octal_token1, + ACTIONS(17), 1, aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_LBRACK, + ACTIONS(29), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [5312] = 14, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(288), 1, - anon_sym_AMP, - ACTIONS(290), 1, - anon_sym_PIPE, - ACTIONS(292), 1, - anon_sym_CARET, - ACTIONS(298), 1, - anon_sym_AMP_AMP, + ACTIONS(56), 1, + aux_sym_base_ten_token1, + STATE(11), 1, + sym_number, + STATE(42), 1, + sym__float, + STATE(53), 1, + sym_expression, + STATE(138), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(286), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(294), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(296), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(195), 10, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, + ACTIONS(21), 2, sym_true, sym_false, + ACTIONS(58), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(193), 11, + STATE(73), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(149), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 14, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [5608] = 21, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, aux_sym_octal_token1, + ACTIONS(17), 1, aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_LBRACK, + ACTIONS(29), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [5382] = 15, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(288), 1, - anon_sym_AMP, - ACTIONS(290), 1, - anon_sym_PIPE, - ACTIONS(292), 1, - anon_sym_CARET, - ACTIONS(298), 1, - anon_sym_AMP_AMP, - ACTIONS(300), 1, - anon_sym_PIPE_PIPE, + STATE(11), 1, + sym_number, + STATE(13), 1, + sym_expression, + STATE(89), 1, + sym__float, + STATE(138), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 2, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(286), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(294), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(296), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(193), 10, + anon_sym_BANG, + STATE(98), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(149), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 14, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [5694] = 21, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(15), 1, aux_sym_octal_token1, + ACTIONS(17), 1, aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - anon_sym_DOT_DOT_EQ, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_LBRACK, + ACTIONS(29), 1, anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - ACTIONS(195), 10, - sym_identifier, - sym_default, + ACTIONS(56), 1, aux_sym_base_ten_token1, + STATE(11), 1, + sym_number, + STATE(42), 1, + sym__float, + STATE(54), 1, + sym_expression, + STATE(138), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, sym_true, sym_false, + ACTIONS(58), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - [5454] = 21, + STATE(73), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(149), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 14, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [5780] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -6756,6 +7081,8 @@ static const uint16_t ts_small_parse_table[] = { sym_default, ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(13), 1, + aux_sym_base_ten_token1, ACTIONS(15), 1, aux_sym_octal_token1, ACTIONS(17), 1, @@ -6768,15 +7095,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(103), 1, - aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(40), 1, + STATE(89), 1, sym__float, - STATE(43), 1, + STATE(95), 1, sym_expression, - STATE(142), 1, + STATE(138), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6784,24 +7109,26 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(105), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(41), 3, + STATE(98), 3, sym_void, sym_path, sym_struct_definition, - STATE(138), 4, + STATE(149), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 12, + STATE(20), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_boolean, + sym_function_call, + sym_method_call, sym_unary_expression, sym_binary_expression, sym_if, @@ -6810,74 +7137,79 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5538] = 18, - ACTIONS(276), 1, - anon_sym_STAR_STAR, - ACTIONS(280), 1, - anon_sym_SLASH_SLASH, - ACTIONS(288), 1, - anon_sym_AMP, - ACTIONS(290), 1, - anon_sym_PIPE, - ACTIONS(292), 1, - anon_sym_CARET, - ACTIONS(298), 1, - anon_sym_AMP_AMP, - ACTIONS(300), 1, - anon_sym_PIPE_PIPE, - ACTIONS(302), 1, - anon_sym_DOT_DOT, - ACTIONS(304), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(310), 1, - anon_sym_SEMI, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(274), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(278), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(286), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(294), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(296), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(308), 8, + [5866] = 21, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, anon_sym_LPAREN, + ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(15), 1, aux_sym_octal_token1, + ACTIONS(17), 1, aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - ACTIONS(306), 9, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, + ACTIONS(29), 1, + anon_sym_LBRACE, + STATE(11), 1, + sym_number, + STATE(89), 1, + sym__float, + STATE(100), 1, + sym_expression, + STATE(138), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, sym_true, sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_if, - anon_sym_let, - anon_sym_for, - [5616] = 4, + STATE(98), 3, + sym_void, + sym_path, + sym_struct_definition, + STATE(149), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 14, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [5952] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(217), 2, + ACTIONS(225), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(143), 9, + ACTIONS(151), 9, sym_identifier, anon_sym_DOT, anon_sym_STAR, @@ -6887,10 +7219,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(141), 21, + ACTIONS(149), 23, ts_builtin_sym_end, + anon_sym_LPAREN, anon_sym_RPAREN, sym_unit_quote, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -6909,16 +7243,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5659] = 5, - STATE(18), 1, + [5997] = 5, + STATE(37), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(272), 2, + ACTIONS(284), 2, sym_identifier, sym_unit_quote, - ACTIONS(268), 7, + ACTIONS(280), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -6926,9 +7260,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(270), 20, + ACTIONS(282), 22, ts_builtin_sym_end, + anon_sym_LPAREN, anon_sym_RPAREN, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -6947,29 +7283,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5702] = 5, - ACTIONS(312), 1, - anon_sym_LBRACK, - STATE(166), 1, - sym_closure_captured_variables, + [6042] = 10, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, + anon_sym_STAR_STAR, + ACTIONS(330), 1, + anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(48), 7, + ACTIONS(324), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(137), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(50), 20, + ACTIONS(135), 16, ts_builtin_sym_end, anon_sym_RPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -6984,71 +7327,43 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5744] = 8, - ACTIONS(42), 1, - anon_sym_DOT, - ACTIONS(314), 1, + [6096] = 14, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, anon_sym_COLON, - ACTIONS(316), 1, - anon_sym_EQ, - STATE(4), 1, - aux_sym_path_repeat1, - STATE(133), 1, - sym__declaration_type, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(40), 7, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(38), 16, - anon_sym_RPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(326), 1, anon_sym_STAR_STAR, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(334), 1, + anon_sym_AMP, + ACTIONS(336), 1, + anon_sym_PIPE, + ACTIONS(338), 1, anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - [5791] = 7, - ACTIONS(320), 1, - anon_sym_STAR_STAR, - ACTIONS(324), 1, - anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(195), 5, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(332), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(137), 3, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(193), 16, + ACTIONS(135), 13, ts_builtin_sym_end, anon_sym_RPAREN, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -7060,35 +7375,49 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5835] = 6, - ACTIONS(320), 1, + [6158] = 16, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(137), 1, + anon_sym_DOT_DOT, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, + ACTIONS(334), 1, + anon_sym_AMP, + ACTIONS(336), 1, + anon_sym_PIPE, + ACTIONS(338), 1, + anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(322), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(195), 5, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(193), 18, - ts_builtin_sym_end, - anon_sym_RPAREN, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(328), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(340), 2, + anon_sym_GT, + anon_sym_LT, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(135), 9, + ts_builtin_sym_end, + anon_sym_RPAREN, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, @@ -7096,109 +7425,140 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5877] = 4, - ACTIONS(320), 1, + [6224] = 17, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(137), 1, + anon_sym_DOT_DOT, + ACTIONS(326), 1, anon_sym_STAR_STAR, + ACTIONS(330), 1, + anon_sym_SLASH_SLASH, + ACTIONS(334), 1, + anon_sym_AMP, + ACTIONS(336), 1, + anon_sym_PIPE, + ACTIONS(338), 1, + anon_sym_CARET, + ACTIONS(344), 1, + anon_sym_AMP_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(195), 7, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(193), 19, - ts_builtin_sym_end, - anon_sym_RPAREN, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH_SLASH, + ACTIONS(328), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(340), 2, + anon_sym_GT, + anon_sym_LT, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(135), 8, + ts_builtin_sym_end, + anon_sym_RPAREN, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5915] = 13, - ACTIONS(195), 1, + [6292] = 18, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(137), 1, anon_sym_DOT_DOT, - ACTIONS(320), 1, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, - ACTIONS(330), 1, + ACTIONS(336), 1, anon_sym_PIPE, - ACTIONS(332), 1, + ACTIONS(338), 1, anon_sym_CARET, + ACTIONS(344), 1, + anon_sym_AMP_AMP, + ACTIONS(346), 1, + anon_sym_PIPE_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(334), 2, + ACTIONS(340), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(336), 4, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(193), 9, + ACTIONS(135), 7, ts_builtin_sym_end, anon_sym_RPAREN, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5971] = 8, - ACTIONS(320), 1, + [6362] = 9, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(195), 5, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(137), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(193), 14, + ACTIONS(135), 18, ts_builtin_sym_end, anon_sym_RPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -7211,35 +7571,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6017] = 10, - ACTIONS(320), 1, + [6414] = 11, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, - anon_sym_AMP, - ACTIONS(332), 1, - anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(195), 4, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(137), 5, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(193), 13, + ACTIONS(135), 14, ts_builtin_sym_end, anon_sym_RPAREN, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -7251,33 +7616,86 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6067] = 9, - ACTIONS(320), 1, + [6470] = 19, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, + ACTIONS(336), 1, + anon_sym_PIPE, + ACTIONS(338), 1, + anon_sym_CARET, + ACTIONS(344), 1, + anon_sym_AMP_AMP, + ACTIONS(346), 1, + anon_sym_PIPE_PIPE, + ACTIONS(348), 1, + anon_sym_DOT_DOT, + ACTIONS(350), 1, + anon_sym_DOT_DOT_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(195), 4, + ACTIONS(340), 2, + anon_sym_GT, + anon_sym_LT, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(322), 6, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_SEMI, + [6542] = 5, + ACTIONS(352), 1, + anon_sym_LBRACK, + STATE(155), 1, + sym_closure_captured_variables, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(48), 7, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(193), 14, + ACTIONS(50), 22, ts_builtin_sym_end, + anon_sym_LPAREN, anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -7290,34 +7708,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6115] = 11, - ACTIONS(320), 1, + [6586] = 13, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, - ACTIONS(330), 1, - anon_sym_PIPE, - ACTIONS(332), 1, + ACTIONS(338), 1, anon_sym_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(195), 3, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(137), 4, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(193), 13, + ACTIONS(135), 13, ts_builtin_sym_end, anon_sym_RPAREN, anon_sym_GT_EQ, @@ -7331,607 +7755,676 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6167] = 14, - ACTIONS(195), 1, - anon_sym_DOT_DOT, - ACTIONS(320), 1, + [6646] = 12, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, - ACTIONS(330), 1, - anon_sym_PIPE, - ACTIONS(332), 1, - anon_sym_CARET, - ACTIONS(338), 1, - anon_sym_AMP_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(334), 2, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(137), 4, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(336), 4, + anon_sym_DOT_DOT, + ACTIONS(135), 14, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(193), 8, - ts_builtin_sym_end, - anon_sym_RPAREN, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6225] = 15, - ACTIONS(195), 1, - anon_sym_DOT_DOT, - ACTIONS(320), 1, + [6704] = 7, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, - anon_sym_SLASH_SLASH, - ACTIONS(328), 1, - anon_sym_AMP, - ACTIONS(330), 1, - anon_sym_PIPE, - ACTIONS(332), 1, - anon_sym_CARET, - ACTIONS(338), 1, - anon_sym_AMP_AMP, - ACTIONS(340), 1, - anon_sym_PIPE_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(322), 2, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(137), 7, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(334), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(336), 4, + anon_sym_DOT_DOT, + ACTIONS(135), 19, + ts_builtin_sym_end, + anon_sym_RPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(193), 7, - ts_builtin_sym_end, - anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6285] = 16, - ACTIONS(320), 1, - anon_sym_STAR_STAR, - ACTIONS(324), 1, - anon_sym_SLASH_SLASH, - ACTIONS(328), 1, - anon_sym_AMP, - ACTIONS(330), 1, - anon_sym_PIPE, - ACTIONS(332), 1, - anon_sym_CARET, - ACTIONS(338), 1, - anon_sym_AMP_AMP, - ACTIONS(340), 1, - anon_sym_PIPE_PIPE, - ACTIONS(342), 1, - anon_sym_DOT_DOT, - ACTIONS(344), 1, - anon_sym_DOT_DOT_EQ, + [6752] = 8, + ACTIONS(35), 1, + anon_sym_DOT, + ACTIONS(354), 1, + anon_sym_COLON, + ACTIONS(356), 1, + anon_sym_EQ, + STATE(3), 1, + aux_sym_path_repeat1, + STATE(127), 1, + sym__declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(33), 7, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(334), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(336), 4, + anon_sym_DOT_DOT, + ACTIONS(31), 17, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(284), 6, - ts_builtin_sym_end, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + [6800] = 20, + ACTIONS(29), 1, anon_sym_LBRACE, - anon_sym_SEMI, - [6347] = 17, - ACTIONS(320), 1, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, - ACTIONS(330), 1, + ACTIONS(336), 1, anon_sym_PIPE, - ACTIONS(332), 1, - anon_sym_CARET, ACTIONS(338), 1, + anon_sym_CARET, + ACTIONS(344), 1, anon_sym_AMP_AMP, - ACTIONS(340), 1, + ACTIONS(346), 1, anon_sym_PIPE_PIPE, - ACTIONS(342), 1, + ACTIONS(348), 1, anon_sym_DOT_DOT, - ACTIONS(344), 1, + ACTIONS(350), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(346), 1, - anon_sym_COMMA, - ACTIONS(348), 1, - anon_sym_RBRACK, + STATE(115), 1, + sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(334), 2, + ACTIONS(340), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(336), 4, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6407] = 16, - ACTIONS(320), 1, + [6870] = 20, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(237), 1, + anon_sym_RBRACK, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, - ACTIONS(330), 1, + ACTIONS(336), 1, anon_sym_PIPE, - ACTIONS(332), 1, - anon_sym_CARET, ACTIONS(338), 1, + anon_sym_CARET, + ACTIONS(344), 1, anon_sym_AMP_AMP, - ACTIONS(340), 1, + ACTIONS(346), 1, anon_sym_PIPE_PIPE, - ACTIONS(342), 1, + ACTIONS(348), 1, anon_sym_DOT_DOT, - ACTIONS(344), 1, + ACTIONS(350), 1, anon_sym_DOT_DOT_EQ, + ACTIONS(358), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(334), 2, + ACTIONS(340), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(350), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - ACTIONS(336), 4, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6465] = 16, - ACTIONS(320), 1, + [6940] = 19, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, - ACTIONS(330), 1, + ACTIONS(336), 1, anon_sym_PIPE, - ACTIONS(332), 1, - anon_sym_CARET, ACTIONS(338), 1, + anon_sym_CARET, + ACTIONS(344), 1, anon_sym_AMP_AMP, - ACTIONS(340), 1, + ACTIONS(346), 1, anon_sym_PIPE_PIPE, - ACTIONS(342), 1, + ACTIONS(348), 1, anon_sym_DOT_DOT, - ACTIONS(344), 1, + ACTIONS(350), 1, anon_sym_DOT_DOT_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(334), 2, + ACTIONS(340), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(352), 2, + ACTIONS(360), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(336), 4, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6523] = 17, - ACTIONS(223), 1, - anon_sym_RBRACK, - ACTIONS(320), 1, + [7008] = 19, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, - ACTIONS(330), 1, + ACTIONS(336), 1, anon_sym_PIPE, - ACTIONS(332), 1, - anon_sym_CARET, ACTIONS(338), 1, + anon_sym_CARET, + ACTIONS(344), 1, anon_sym_AMP_AMP, - ACTIONS(340), 1, + ACTIONS(346), 1, anon_sym_PIPE_PIPE, - ACTIONS(342), 1, + ACTIONS(348), 1, anon_sym_DOT_DOT, - ACTIONS(344), 1, + ACTIONS(350), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(346), 1, - anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(334), 2, + ACTIONS(340), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(336), 4, + ACTIONS(362), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6583] = 17, + [7076] = 20, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(320), 1, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, - ACTIONS(330), 1, + ACTIONS(336), 1, anon_sym_PIPE, - ACTIONS(332), 1, - anon_sym_CARET, ACTIONS(338), 1, + anon_sym_CARET, + ACTIONS(344), 1, anon_sym_AMP_AMP, - ACTIONS(340), 1, + ACTIONS(346), 1, anon_sym_PIPE_PIPE, - ACTIONS(342), 1, + ACTIONS(348), 1, anon_sym_DOT_DOT, - ACTIONS(344), 1, + ACTIONS(350), 1, anon_sym_DOT_DOT_EQ, - STATE(116), 1, + STATE(15), 1, sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(334), 2, + ACTIONS(340), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(336), 4, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6643] = 17, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(320), 1, + [7146] = 20, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, - ACTIONS(330), 1, + ACTIONS(336), 1, anon_sym_PIPE, - ACTIONS(332), 1, - anon_sym_CARET, ACTIONS(338), 1, + anon_sym_CARET, + ACTIONS(344), 1, anon_sym_AMP_AMP, - ACTIONS(340), 1, + ACTIONS(346), 1, anon_sym_PIPE_PIPE, - ACTIONS(342), 1, + ACTIONS(348), 1, anon_sym_DOT_DOT, - ACTIONS(344), 1, + ACTIONS(350), 1, anon_sym_DOT_DOT_EQ, - STATE(12), 1, - sym_procedural_block, + ACTIONS(358), 1, + anon_sym_COMMA, + ACTIONS(364), 1, + anon_sym_RBRACK, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(334), 2, + ACTIONS(340), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(336), 4, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6703] = 16, - ACTIONS(320), 1, + [7216] = 19, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, - ACTIONS(330), 1, + ACTIONS(336), 1, anon_sym_PIPE, - ACTIONS(332), 1, - anon_sym_CARET, ACTIONS(338), 1, + anon_sym_CARET, + ACTIONS(344), 1, anon_sym_AMP_AMP, - ACTIONS(340), 1, + ACTIONS(346), 1, anon_sym_PIPE_PIPE, - ACTIONS(342), 1, + ACTIONS(348), 1, anon_sym_DOT_DOT, - ACTIONS(344), 1, + ACTIONS(350), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(354), 1, + ACTIONS(366), 1, anon_sym_SEMI, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(334), 2, + ACTIONS(340), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(336), 4, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6760] = 16, - ACTIONS(320), 1, + [7283] = 19, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, - ACTIONS(330), 1, + ACTIONS(336), 1, anon_sym_PIPE, - ACTIONS(332), 1, - anon_sym_CARET, ACTIONS(338), 1, + anon_sym_CARET, + ACTIONS(344), 1, anon_sym_AMP_AMP, - ACTIONS(340), 1, + ACTIONS(346), 1, anon_sym_PIPE_PIPE, - ACTIONS(342), 1, + ACTIONS(348), 1, anon_sym_DOT_DOT, - ACTIONS(344), 1, + ACTIONS(350), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(356), 1, + ACTIONS(368), 1, anon_sym_SEMI, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(334), 2, + ACTIONS(340), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(336), 4, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6817] = 16, - ACTIONS(320), 1, + [7350] = 19, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, - ACTIONS(330), 1, + ACTIONS(336), 1, anon_sym_PIPE, - ACTIONS(332), 1, - anon_sym_CARET, ACTIONS(338), 1, + anon_sym_CARET, + ACTIONS(344), 1, anon_sym_AMP_AMP, - ACTIONS(340), 1, + ACTIONS(346), 1, anon_sym_PIPE_PIPE, - ACTIONS(342), 1, + ACTIONS(348), 1, anon_sym_DOT_DOT, - ACTIONS(344), 1, + ACTIONS(350), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(346), 1, + ACTIONS(358), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(334), 2, + ACTIONS(340), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(336), 4, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6874] = 16, - ACTIONS(320), 1, + [7417] = 19, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, - ACTIONS(330), 1, + ACTIONS(336), 1, anon_sym_PIPE, - ACTIONS(332), 1, - anon_sym_CARET, ACTIONS(338), 1, + anon_sym_CARET, + ACTIONS(344), 1, anon_sym_AMP_AMP, - ACTIONS(340), 1, + ACTIONS(346), 1, anon_sym_PIPE_PIPE, - ACTIONS(342), 1, + ACTIONS(348), 1, anon_sym_DOT_DOT, - ACTIONS(344), 1, + ACTIONS(350), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(358), 1, - anon_sym_RPAREN, + ACTIONS(370), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(334), 2, + ACTIONS(340), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(336), 4, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6931] = 16, - ACTIONS(320), 1, + [7484] = 19, + ACTIONS(131), 1, + anon_sym_LPAREN, + ACTIONS(133), 1, + anon_sym_COLON, + ACTIONS(326), 1, anon_sym_STAR_STAR, - ACTIONS(324), 1, + ACTIONS(330), 1, anon_sym_SLASH_SLASH, - ACTIONS(328), 1, + ACTIONS(334), 1, anon_sym_AMP, - ACTIONS(330), 1, + ACTIONS(336), 1, anon_sym_PIPE, - ACTIONS(332), 1, - anon_sym_CARET, ACTIONS(338), 1, + anon_sym_CARET, + ACTIONS(344), 1, anon_sym_AMP_AMP, - ACTIONS(340), 1, + ACTIONS(346), 1, anon_sym_PIPE_PIPE, - ACTIONS(342), 1, + ACTIONS(348), 1, anon_sym_DOT_DOT, - ACTIONS(344), 1, + ACTIONS(350), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(360), 1, - ts_builtin_sym_end, + ACTIONS(372), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(324), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(322), 2, + ACTIONS(328), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(326), 2, + ACTIONS(332), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(334), 2, + ACTIONS(340), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(336), 4, + STATE(38), 2, + sym_void, + sym_dictionary_construction, + ACTIONS(342), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6988] = 3, + [7551] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(362), 8, + ACTIONS(374), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7940,7 +8433,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(364), 11, + ACTIONS(376), 11, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -7952,11 +8445,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7016] = 3, + [7579] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(306), 8, + ACTIONS(378), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7965,7 +8458,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(308), 11, + ACTIONS(380), 11, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -7977,11 +8470,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7044] = 3, + [7607] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(366), 8, + ACTIONS(382), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7990,7 +8483,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(368), 11, + ACTIONS(384), 11, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -8002,11 +8495,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7072] = 3, + [7635] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(370), 8, + ACTIONS(386), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8015,7 +8508,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(372), 11, + ACTIONS(388), 11, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -8027,11 +8520,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7100] = 3, + [7663] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 8, + ACTIONS(286), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8040,7 +8533,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(376), 11, + ACTIONS(288), 11, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -8052,18 +8545,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7128] = 3, + [7691] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(378), 6, + ACTIONS(390), 6, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, - ACTIONS(261), 11, + ACTIONS(275), 11, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -8075,18 +8568,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LBRACE, - [7154] = 3, + [7717] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(380), 6, + ACTIONS(392), 6, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, - ACTIONS(382), 10, + ACTIONS(394), 10, sym_string, anon_sym_LPAREN, aux_sym_octal_token1, @@ -8097,427 +8590,454 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG, anon_sym_LBRACK, anon_sym_LBRACE, - [7179] = 7, - ACTIONS(117), 1, - anon_sym_RPAREN, + [7742] = 7, ACTIONS(119), 1, sym_varadic_dots, - ACTIONS(384), 1, + ACTIONS(396), 1, sym_identifier, - STATE(120), 1, + ACTIONS(398), 1, + anon_sym_RPAREN, + STATE(123), 1, aux_sym_struct_definition_repeat1, - STATE(150), 1, + STATE(139), 1, sym_struct_member, STATE(170), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7202] = 7, + [7765] = 7, + ACTIONS(117), 1, + anon_sym_RPAREN, ACTIONS(119), 1, sym_varadic_dots, - ACTIONS(384), 1, + ACTIONS(396), 1, sym_identifier, - ACTIONS(386), 1, - anon_sym_RPAREN, - STATE(123), 1, + STATE(121), 1, aux_sym_struct_definition_repeat1, - STATE(150), 1, + STATE(139), 1, sym_struct_member, - STATE(160), 1, + STATE(159), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7225] = 4, - ACTIONS(388), 1, + [7788] = 5, + ACTIONS(400), 1, + sym_identifier, + STATE(123), 1, + aux_sym_struct_definition_repeat1, + STATE(169), 1, + sym_struct_member, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(403), 2, + anon_sym_RPAREN, + sym_varadic_dots, + [7806] = 4, + ACTIONS(405), 1, sym_identifier, - ACTIONS(390), 1, + ACTIONS(407), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(62), 3, + STATE(71), 3, sym_void, sym_path, sym_struct_definition, - [7241] = 4, - ACTIONS(388), 1, + [7822] = 4, + ACTIONS(405), 1, sym_identifier, - ACTIONS(390), 1, + ACTIONS(407), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(84), 3, + STATE(85), 3, sym_void, sym_path, sym_struct_definition, - [7257] = 5, - ACTIONS(392), 1, + [7838] = 5, + ACTIONS(117), 1, + anon_sym_RPAREN, + ACTIONS(409), 1, sym_identifier, - STATE(123), 1, - aux_sym_struct_definition_repeat1, - STATE(171), 1, - sym_struct_member, + STATE(131), 1, + aux_sym_dictionary_construction_repeat1, + STATE(148), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(395), 2, - anon_sym_RPAREN, - sym_varadic_dots, - [7275] = 4, - ACTIONS(397), 1, - sym_identifier, - ACTIONS(399), 1, - anon_sym_RBRACK, - STATE(132), 1, - aux_sym_closure_captured_variables_repeat1, + [7855] = 3, + ACTIONS(413), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7289] = 4, - ACTIONS(401), 1, + ACTIONS(411), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [7867] = 4, + ACTIONS(415), 1, sym_identifier, - STATE(130), 1, + STATE(128), 1, aux_sym_dictionary_construction_repeat1, - STATE(147), 1, + STATE(175), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7303] = 2, + [7881] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(403), 3, + ACTIONS(418), 3, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_EQ, - [7313] = 2, + [7891] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(405), 3, + ACTIONS(403), 3, + sym_identifier, anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_EQ, - [7323] = 4, - ACTIONS(407), 1, + sym_varadic_dots, + [7901] = 4, + ACTIONS(409), 1, sym_identifier, - ACTIONS(410), 1, - anon_sym_RBRACK, STATE(128), 1, - aux_sym_closure_captured_variables_repeat1, + aux_sym_dictionary_construction_repeat1, + STATE(142), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7337] = 4, - ACTIONS(388), 1, + [7915] = 4, + ACTIONS(420), 1, sym_identifier, - STATE(126), 1, - sym_path, - STATE(127), 1, - sym__variable_type, + ACTIONS(422), 1, + anon_sym_RBRACK, + STATE(133), 1, + aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7351] = 4, - ACTIONS(412), 1, + [7929] = 4, + ACTIONS(424), 1, sym_identifier, - STATE(130), 1, - aux_sym_dictionary_construction_repeat1, - STATE(154), 1, - sym_dictionary_member_assignment, + ACTIONS(427), 1, + anon_sym_RBRACK, + STATE(133), 1, + aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7365] = 2, + [7943] = 4, + ACTIONS(405), 1, + sym_identifier, + STATE(129), 1, + sym_path, + STATE(137), 1, + sym__variable_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(395), 3, - sym_identifier, - anon_sym_RPAREN, - sym_varadic_dots, - [7375] = 4, - ACTIONS(415), 1, + [7957] = 4, + ACTIONS(429), 1, sym_identifier, - ACTIONS(417), 1, + ACTIONS(431), 1, anon_sym_RBRACK, - STATE(128), 1, + STATE(132), 1, aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7389] = 3, - ACTIONS(421), 1, - anon_sym_EQ, + [7971] = 3, + ACTIONS(131), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(419), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [7401] = 2, + STATE(33), 2, + sym_void, + sym_dictionary_construction, + [7983] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(410), 2, - sym_identifier, - anon_sym_RBRACK, - [7410] = 3, - ACTIONS(423), 1, - sym_identifier, - ACTIONS(425), 1, + ACTIONS(433), 3, anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_EQ, + [7993] = 3, + ACTIONS(435), 1, + aux_sym_signed_integer_token1, + ACTIONS(437), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7421] = 3, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(34), 1, - sym_procedural_block, + [8004] = 3, + ACTIONS(439), 1, + anon_sym_RPAREN, + ACTIONS(441), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7432] = 2, + [8015] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(427), 2, + ACTIONS(443), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [7441] = 2, + [8024] = 3, + ACTIONS(422), 1, + anon_sym_RBRACK, + ACTIONS(445), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(429), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [7450] = 3, - ACTIONS(431), 1, + [8035] = 3, + ACTIONS(447), 1, anon_sym_RPAREN, - ACTIONS(433), 1, + ACTIONS(449), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7461] = 3, - ACTIONS(435), 1, + [8046] = 3, + ACTIONS(439), 1, + anon_sym_RPAREN, + ACTIONS(451), 1, anon_sym_COMMA, - ACTIONS(437), 1, - anon_sym_RBRACK, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7472] = 2, + [8057] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(439), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [7481] = 3, - ACTIONS(441), 1, + ACTIONS(453), 2, aux_sym_signed_integer_token1, - ACTIONS(443), 1, aux_sym_unsigned_integer_token1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [7492] = 3, - ACTIONS(423), 1, + [8066] = 3, + ACTIONS(455), 1, sym_identifier, - ACTIONS(445), 1, + ACTIONS(457), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7503] = 3, - ACTIONS(314), 1, - anon_sym_COLON, - STATE(133), 1, - sym__declaration_type, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [7514] = 3, - ACTIONS(447), 1, - anon_sym_RPAREN, - ACTIONS(449), 1, - anon_sym_COMMA, + [8077] = 3, + ACTIONS(29), 1, + anon_sym_LBRACE, + STATE(35), 1, + sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7525] = 3, - ACTIONS(451), 1, - aux_sym_base_ten_token1, - STATE(16), 1, - sym_number, + [8088] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7536] = 3, - ACTIONS(445), 1, + ACTIONS(459), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [8097] = 3, + ACTIONS(461), 1, anon_sym_RPAREN, - ACTIONS(453), 1, + ACTIONS(463), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7547] = 2, + [8108] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(455), 2, + ACTIONS(465), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [7556] = 3, - ACTIONS(417), 1, - anon_sym_RBRACK, - ACTIONS(435), 1, - anon_sym_COMMA, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [7567] = 3, + [8117] = 3, ACTIONS(447), 1, anon_sym_RPAREN, - ACTIONS(457), 1, - anon_sym_COMMA, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [7578] = 2, - ACTIONS(459), 1, - anon_sym_in, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [7586] = 2, - ACTIONS(461), 1, - anon_sym_RPAREN, + ACTIONS(455), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7594] = 2, - ACTIONS(463), 1, - anon_sym_DASH_GT, + [8128] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7602] = 2, - ACTIONS(465), 1, + ACTIONS(427), 2, + sym_identifier, + anon_sym_RBRACK, + [8137] = 3, + ACTIONS(445), 1, anon_sym_COMMA, + ACTIONS(467), 1, + anon_sym_RBRACK, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7610] = 2, - ACTIONS(467), 1, - anon_sym_DASH_GT, + [8148] = 3, + ACTIONS(354), 1, + anon_sym_COLON, + STATE(127), 1, + sym__declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7618] = 2, + [8159] = 3, ACTIONS(469), 1, - aux_sym_binary_token2, + aux_sym_base_ten_token1, + STATE(17), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7626] = 2, + [8170] = 2, ACTIONS(471), 1, - aux_sym_hex_token2, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7634] = 2, + [8178] = 2, ACTIONS(473), 1, - anon_sym_DASH_GT, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7642] = 2, + [8186] = 2, ACTIONS(475), 1, - ts_builtin_sym_end, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7650] = 2, + [8194] = 2, ACTIONS(477), 1, - anon_sym_RPAREN, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7658] = 2, + [8202] = 2, ACTIONS(479), 1, - sym_identifier, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7666] = 2, + [8210] = 2, ACTIONS(481), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7674] = 2, + [8218] = 2, ACTIONS(483), 1, - anon_sym_EQ, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7682] = 2, + [8226] = 2, ACTIONS(485), 1, - sym_identifier, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7690] = 2, - ACTIONS(435), 1, - anon_sym_COMMA, + [8234] = 2, + ACTIONS(487), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7698] = 2, - ACTIONS(487), 1, - anon_sym_DASH_GT, + [8242] = 2, + ACTIONS(445), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7706] = 2, + [8250] = 2, ACTIONS(489), 1, - aux_sym_base_ten_token1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7714] = 2, + [8258] = 2, ACTIONS(491), 1, - anon_sym_EQ, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7722] = 2, - ACTIONS(423), 1, + [8266] = 2, + ACTIONS(455), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7730] = 2, + [8274] = 2, ACTIONS(493), 1, - anon_sym_RPAREN, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7738] = 2, - ACTIONS(457), 1, + [8282] = 2, + ACTIONS(441), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7746] = 2, + [8290] = 2, ACTIONS(495), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [8298] = 2, + ACTIONS(497), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [8306] = 2, + ACTIONS(499), 1, + anon_sym_in, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [8314] = 2, + ACTIONS(501), 1, + sym_identifier, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [8322] = 2, + ACTIONS(503), 1, + aux_sym_hex_token2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [8330] = 2, + ACTIONS(505), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [8338] = 2, + ACTIONS(507), 1, + ts_builtin_sym_end, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [8346] = 2, + ACTIONS(509), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, @@ -8526,407 +9046,419 @@ static const uint16_t ts_small_parse_table[] = { static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(7)] = 0, - [SMALL_STATE(8)] = 105, - [SMALL_STATE(9)] = 210, - [SMALL_STATE(10)] = 315, - [SMALL_STATE(11)] = 420, - [SMALL_STATE(12)] = 476, - [SMALL_STATE(13)] = 531, - [SMALL_STATE(14)] = 584, - [SMALL_STATE(15)] = 637, - [SMALL_STATE(16)] = 690, - [SMALL_STATE(17)] = 743, - [SMALL_STATE(18)] = 795, - [SMALL_STATE(19)] = 847, - [SMALL_STATE(20)] = 899, - [SMALL_STATE(21)] = 951, - [SMALL_STATE(22)] = 1003, - [SMALL_STATE(23)] = 1055, - [SMALL_STATE(24)] = 1107, - [SMALL_STATE(25)] = 1159, - [SMALL_STATE(26)] = 1211, - [SMALL_STATE(27)] = 1263, - [SMALL_STATE(28)] = 1315, - [SMALL_STATE(29)] = 1367, - [SMALL_STATE(30)] = 1419, - [SMALL_STATE(31)] = 1471, - [SMALL_STATE(32)] = 1523, - [SMALL_STATE(33)] = 1575, - [SMALL_STATE(34)] = 1627, - [SMALL_STATE(35)] = 1679, - [SMALL_STATE(36)] = 1733, - [SMALL_STATE(37)] = 1785, - [SMALL_STATE(38)] = 1875, - [SMALL_STATE(39)] = 1965, - [SMALL_STATE(40)] = 2055, - [SMALL_STATE(41)] = 2109, - [SMALL_STATE(42)] = 2160, - [SMALL_STATE(43)] = 2216, - [SMALL_STATE(44)] = 2292, - [SMALL_STATE(45)] = 2376, - [SMALL_STATE(46)] = 2460, - [SMALL_STATE(47)] = 2544, - [SMALL_STATE(48)] = 2628, - [SMALL_STATE(49)] = 2712, - [SMALL_STATE(50)] = 2796, - [SMALL_STATE(51)] = 2880, - [SMALL_STATE(52)] = 2964, - [SMALL_STATE(53)] = 3048, - [SMALL_STATE(54)] = 3132, - [SMALL_STATE(55)] = 3216, - [SMALL_STATE(56)] = 3300, - [SMALL_STATE(57)] = 3384, - [SMALL_STATE(58)] = 3468, - [SMALL_STATE(59)] = 3552, - [SMALL_STATE(60)] = 3636, - [SMALL_STATE(61)] = 3720, - [SMALL_STATE(62)] = 3804, - [SMALL_STATE(63)] = 3888, - [SMALL_STATE(64)] = 3972, - [SMALL_STATE(65)] = 4056, - [SMALL_STATE(66)] = 4140, - [SMALL_STATE(67)] = 4224, - [SMALL_STATE(68)] = 4308, - [SMALL_STATE(69)] = 4392, - [SMALL_STATE(70)] = 4476, - [SMALL_STATE(71)] = 4560, - [SMALL_STATE(72)] = 4644, - [SMALL_STATE(73)] = 4728, - [SMALL_STATE(74)] = 4812, - [SMALL_STATE(75)] = 4896, - [SMALL_STATE(76)] = 4950, - [SMALL_STATE(77)] = 5000, - [SMALL_STATE(78)] = 5058, - [SMALL_STATE(79)] = 5120, - [SMALL_STATE(80)] = 5180, - [SMALL_STATE(81)] = 5244, - [SMALL_STATE(82)] = 5312, - [SMALL_STATE(83)] = 5382, - [SMALL_STATE(84)] = 5454, - [SMALL_STATE(85)] = 5538, - [SMALL_STATE(86)] = 5616, - [SMALL_STATE(87)] = 5659, - [SMALL_STATE(88)] = 5702, - [SMALL_STATE(89)] = 5744, - [SMALL_STATE(90)] = 5791, - [SMALL_STATE(91)] = 5835, - [SMALL_STATE(92)] = 5877, - [SMALL_STATE(93)] = 5915, - [SMALL_STATE(94)] = 5971, - [SMALL_STATE(95)] = 6017, - [SMALL_STATE(96)] = 6067, - [SMALL_STATE(97)] = 6115, - [SMALL_STATE(98)] = 6167, - [SMALL_STATE(99)] = 6225, - [SMALL_STATE(100)] = 6285, - [SMALL_STATE(101)] = 6347, - [SMALL_STATE(102)] = 6407, - [SMALL_STATE(103)] = 6465, - [SMALL_STATE(104)] = 6523, - [SMALL_STATE(105)] = 6583, - [SMALL_STATE(106)] = 6643, - [SMALL_STATE(107)] = 6703, - [SMALL_STATE(108)] = 6760, - [SMALL_STATE(109)] = 6817, - [SMALL_STATE(110)] = 6874, - [SMALL_STATE(111)] = 6931, - [SMALL_STATE(112)] = 6988, - [SMALL_STATE(113)] = 7016, - [SMALL_STATE(114)] = 7044, - [SMALL_STATE(115)] = 7072, - [SMALL_STATE(116)] = 7100, - [SMALL_STATE(117)] = 7128, - [SMALL_STATE(118)] = 7154, - [SMALL_STATE(119)] = 7179, - [SMALL_STATE(120)] = 7202, - [SMALL_STATE(121)] = 7225, - [SMALL_STATE(122)] = 7241, - [SMALL_STATE(123)] = 7257, - [SMALL_STATE(124)] = 7275, - [SMALL_STATE(125)] = 7289, - [SMALL_STATE(126)] = 7303, - [SMALL_STATE(127)] = 7313, - [SMALL_STATE(128)] = 7323, - [SMALL_STATE(129)] = 7337, - [SMALL_STATE(130)] = 7351, - [SMALL_STATE(131)] = 7365, - [SMALL_STATE(132)] = 7375, - [SMALL_STATE(133)] = 7389, - [SMALL_STATE(134)] = 7401, - [SMALL_STATE(135)] = 7410, - [SMALL_STATE(136)] = 7421, - [SMALL_STATE(137)] = 7432, - [SMALL_STATE(138)] = 7441, - [SMALL_STATE(139)] = 7450, - [SMALL_STATE(140)] = 7461, - [SMALL_STATE(141)] = 7472, - [SMALL_STATE(142)] = 7481, - [SMALL_STATE(143)] = 7492, - [SMALL_STATE(144)] = 7503, - [SMALL_STATE(145)] = 7514, - [SMALL_STATE(146)] = 7525, - [SMALL_STATE(147)] = 7536, - [SMALL_STATE(148)] = 7547, - [SMALL_STATE(149)] = 7556, - [SMALL_STATE(150)] = 7567, - [SMALL_STATE(151)] = 7578, - [SMALL_STATE(152)] = 7586, - [SMALL_STATE(153)] = 7594, - [SMALL_STATE(154)] = 7602, - [SMALL_STATE(155)] = 7610, - [SMALL_STATE(156)] = 7618, - [SMALL_STATE(157)] = 7626, - [SMALL_STATE(158)] = 7634, - [SMALL_STATE(159)] = 7642, - [SMALL_STATE(160)] = 7650, - [SMALL_STATE(161)] = 7658, - [SMALL_STATE(162)] = 7666, - [SMALL_STATE(163)] = 7674, - [SMALL_STATE(164)] = 7682, - [SMALL_STATE(165)] = 7690, - [SMALL_STATE(166)] = 7698, - [SMALL_STATE(167)] = 7706, - [SMALL_STATE(168)] = 7714, - [SMALL_STATE(169)] = 7722, - [SMALL_STATE(170)] = 7730, - [SMALL_STATE(171)] = 7738, - [SMALL_STATE(172)] = 7746, + [SMALL_STATE(8)] = 107, + [SMALL_STATE(9)] = 214, + [SMALL_STATE(10)] = 321, + [SMALL_STATE(11)] = 428, + [SMALL_STATE(12)] = 485, + [SMALL_STATE(13)] = 546, + [SMALL_STATE(14)] = 607, + [SMALL_STATE(15)] = 661, + [SMALL_STATE(16)] = 717, + [SMALL_STATE(17)] = 771, + [SMALL_STATE(18)] = 825, + [SMALL_STATE(19)] = 879, + [SMALL_STATE(20)] = 932, + [SMALL_STATE(21)] = 985, + [SMALL_STATE(22)] = 1038, + [SMALL_STATE(23)] = 1091, + [SMALL_STATE(24)] = 1144, + [SMALL_STATE(25)] = 1197, + [SMALL_STATE(26)] = 1250, + [SMALL_STATE(27)] = 1303, + [SMALL_STATE(28)] = 1356, + [SMALL_STATE(29)] = 1409, + [SMALL_STATE(30)] = 1462, + [SMALL_STATE(31)] = 1515, + [SMALL_STATE(32)] = 1568, + [SMALL_STATE(33)] = 1621, + [SMALL_STATE(34)] = 1674, + [SMALL_STATE(35)] = 1727, + [SMALL_STATE(36)] = 1780, + [SMALL_STATE(37)] = 1835, + [SMALL_STATE(38)] = 1888, + [SMALL_STATE(39)] = 1941, + [SMALL_STATE(40)] = 2033, + [SMALL_STATE(41)] = 2125, + [SMALL_STATE(42)] = 2217, + [SMALL_STATE(43)] = 2272, + [SMALL_STATE(44)] = 2359, + [SMALL_STATE(45)] = 2422, + [SMALL_STATE(46)] = 2481, + [SMALL_STATE(47)] = 2546, + [SMALL_STATE(48)] = 2613, + [SMALL_STATE(49)] = 2684, + [SMALL_STATE(50)] = 2753, + [SMALL_STATE(51)] = 2826, + [SMALL_STATE(52)] = 2903, + [SMALL_STATE(53)] = 2982, + [SMALL_STATE(54)] = 3063, + [SMALL_STATE(55)] = 3148, + [SMALL_STATE(56)] = 3234, + [SMALL_STATE(57)] = 3320, + [SMALL_STATE(58)] = 3406, + [SMALL_STATE(59)] = 3492, + [SMALL_STATE(60)] = 3578, + [SMALL_STATE(61)] = 3664, + [SMALL_STATE(62)] = 3750, + [SMALL_STATE(63)] = 3836, + [SMALL_STATE(64)] = 3922, + [SMALL_STATE(65)] = 4008, + [SMALL_STATE(66)] = 4094, + [SMALL_STATE(67)] = 4180, + [SMALL_STATE(68)] = 4266, + [SMALL_STATE(69)] = 4352, + [SMALL_STATE(70)] = 4438, + [SMALL_STATE(71)] = 4524, + [SMALL_STATE(72)] = 4610, + [SMALL_STATE(73)] = 4696, + [SMALL_STATE(74)] = 4748, + [SMALL_STATE(75)] = 4834, + [SMALL_STATE(76)] = 4920, + [SMALL_STATE(77)] = 5006, + [SMALL_STATE(78)] = 5092, + [SMALL_STATE(79)] = 5178, + [SMALL_STATE(80)] = 5264, + [SMALL_STATE(81)] = 5350, + [SMALL_STATE(82)] = 5436, + [SMALL_STATE(83)] = 5522, + [SMALL_STATE(84)] = 5608, + [SMALL_STATE(85)] = 5694, + [SMALL_STATE(86)] = 5780, + [SMALL_STATE(87)] = 5866, + [SMALL_STATE(88)] = 5952, + [SMALL_STATE(89)] = 5997, + [SMALL_STATE(90)] = 6042, + [SMALL_STATE(91)] = 6096, + [SMALL_STATE(92)] = 6158, + [SMALL_STATE(93)] = 6224, + [SMALL_STATE(94)] = 6292, + [SMALL_STATE(95)] = 6362, + [SMALL_STATE(96)] = 6414, + [SMALL_STATE(97)] = 6470, + [SMALL_STATE(98)] = 6542, + [SMALL_STATE(99)] = 6586, + [SMALL_STATE(100)] = 6646, + [SMALL_STATE(101)] = 6704, + [SMALL_STATE(102)] = 6752, + [SMALL_STATE(103)] = 6800, + [SMALL_STATE(104)] = 6870, + [SMALL_STATE(105)] = 6940, + [SMALL_STATE(106)] = 7008, + [SMALL_STATE(107)] = 7076, + [SMALL_STATE(108)] = 7146, + [SMALL_STATE(109)] = 7216, + [SMALL_STATE(110)] = 7283, + [SMALL_STATE(111)] = 7350, + [SMALL_STATE(112)] = 7417, + [SMALL_STATE(113)] = 7484, + [SMALL_STATE(114)] = 7551, + [SMALL_STATE(115)] = 7579, + [SMALL_STATE(116)] = 7607, + [SMALL_STATE(117)] = 7635, + [SMALL_STATE(118)] = 7663, + [SMALL_STATE(119)] = 7691, + [SMALL_STATE(120)] = 7717, + [SMALL_STATE(121)] = 7742, + [SMALL_STATE(122)] = 7765, + [SMALL_STATE(123)] = 7788, + [SMALL_STATE(124)] = 7806, + [SMALL_STATE(125)] = 7822, + [SMALL_STATE(126)] = 7838, + [SMALL_STATE(127)] = 7855, + [SMALL_STATE(128)] = 7867, + [SMALL_STATE(129)] = 7881, + [SMALL_STATE(130)] = 7891, + [SMALL_STATE(131)] = 7901, + [SMALL_STATE(132)] = 7915, + [SMALL_STATE(133)] = 7929, + [SMALL_STATE(134)] = 7943, + [SMALL_STATE(135)] = 7957, + [SMALL_STATE(136)] = 7971, + [SMALL_STATE(137)] = 7983, + [SMALL_STATE(138)] = 7993, + [SMALL_STATE(139)] = 8004, + [SMALL_STATE(140)] = 8015, + [SMALL_STATE(141)] = 8024, + [SMALL_STATE(142)] = 8035, + [SMALL_STATE(143)] = 8046, + [SMALL_STATE(144)] = 8057, + [SMALL_STATE(145)] = 8066, + [SMALL_STATE(146)] = 8077, + [SMALL_STATE(147)] = 8088, + [SMALL_STATE(148)] = 8097, + [SMALL_STATE(149)] = 8108, + [SMALL_STATE(150)] = 8117, + [SMALL_STATE(151)] = 8128, + [SMALL_STATE(152)] = 8137, + [SMALL_STATE(153)] = 8148, + [SMALL_STATE(154)] = 8159, + [SMALL_STATE(155)] = 8170, + [SMALL_STATE(156)] = 8178, + [SMALL_STATE(157)] = 8186, + [SMALL_STATE(158)] = 8194, + [SMALL_STATE(159)] = 8202, + [SMALL_STATE(160)] = 8210, + [SMALL_STATE(161)] = 8218, + [SMALL_STATE(162)] = 8226, + [SMALL_STATE(163)] = 8234, + [SMALL_STATE(164)] = 8242, + [SMALL_STATE(165)] = 8250, + [SMALL_STATE(166)] = 8258, + [SMALL_STATE(167)] = 8266, + [SMALL_STATE(168)] = 8274, + [SMALL_STATE(169)] = 8282, + [SMALL_STATE(170)] = 8290, + [SMALL_STATE(171)] = 8298, + [SMALL_STATE(172)] = 8306, + [SMALL_STATE(173)] = 8314, + [SMALL_STATE(174)] = 8322, + [SMALL_STATE(175)] = 8330, + [SMALL_STATE(176)] = 8338, + [SMALL_STATE(177)] = 8346, }; 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 = false}}, SHIFT(3), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2), [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), - [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(86), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), - [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), - [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), - [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), + [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), + [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), - [31] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), - [33] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), - [35] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(164), - [38] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), - [40] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), - [42] = {.entry = {.count = 1, .reusable = false}}, SHIFT(164), - [44] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), - [46] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [31] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), + [33] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(160), + [37] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), + [39] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), + [41] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), + [43] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), + [45] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(160), [48] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), [50] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [52] = {.entry = {.count = 1, .reusable = false}}, SHIFT(118), - [54] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), - [56] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(3), - [59] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [62] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [65] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [68] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(35), - [71] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(167), - [74] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(157), - [77] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(156), - [80] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(22), - [83] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(63), - [86] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(59), - [89] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(39), - [92] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(9), - [95] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), - [97] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(162), - [100] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(161), - [103] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), - [105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [109] = {.entry = {.count = 1, .reusable = false}}, SHIFT(162), - [111] = {.entry = {.count = 1, .reusable = false}}, SHIFT(161), - [113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(89), - [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [52] = {.entry = {.count = 1, .reusable = false}}, SHIFT(120), + [54] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [56] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36), + [58] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [60] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [62] = {.entry = {.count = 1, .reusable = false}}, SHIFT(156), + [64] = {.entry = {.count = 1, .reusable = false}}, SHIFT(161), + [66] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [68] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(2), + [71] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [74] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [77] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(10), + [80] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(36), + [83] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(166), + [86] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(174), + [89] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(168), + [92] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(25), + [95] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(72), + [98] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(67), + [101] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(39), + [104] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(8), + [107] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), + [109] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(156), + [112] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(161), + [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(102), + [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), [121] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), [123] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [125] = {.entry = {.count = 1, .reusable = false}}, SHIFT(146), - [127] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 10), - [129] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 10), - [131] = {.entry = {.count = 1, .reusable = false}}, SHIFT(136), - [133] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 3, 0, 0), - [135] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 3, 0, 0), - [137] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 2, 0, 0), - [139] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 2, 0, 0), - [141] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), - [143] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), - [145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 11), - [147] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 11), - [149] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 7), - [151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 7), - [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), - [155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), - [157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [159] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [163] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [167] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [169] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 8), - [171] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 8), - [173] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), - [175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), - [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [179] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [181] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_void, 2, 0, 0), - [183] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_void, 2, 0, 0), - [185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), - [187] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), - [189] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), - [191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), - [193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 12), - [195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 12), - [197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 16), - [199] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 16), - [201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 17), - [203] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 17), - [205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [207] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [209] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 19), - [211] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 19), - [213] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 20), - [215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 20), - [217] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), - [219] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [221] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [223] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [225] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), - [228] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [231] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [234] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [237] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(86), - [240] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(167), - [243] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(157), - [246] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(156), - [249] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(22), - [252] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(56), - [255] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(59), - [258] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(39), - [261] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [263] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(9), - [266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [268] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [270] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [278] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), - [280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 22), - [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 22), - [286] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [288] = {.entry = {.count = 1, .reusable = false}}, SHIFT(68), - [290] = {.entry = {.count = 1, .reusable = false}}, SHIFT(69), - [292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [294] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), - [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), - [298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(74), - [304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), - [306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), - [308] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), - [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), - [312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), - [314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), - [316] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), - [318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [322] = {.entry = {.count = 1, .reusable = false}}, SHIFT(46), - [324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), - [328] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), - [330] = {.entry = {.count = 1, .reusable = false}}, SHIFT(49), - [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [334] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), - [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), - [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [342] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), - [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), - [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [350] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 15), - [352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 18), - [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), - [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), - [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [362] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closed_expression, 2, 0, 0), - [364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closed_expression, 2, 0, 0), - [366] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assign, 4, 0, 21), - [368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assign, 4, 0, 21), - [370] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let, 5, 0, 23), - [372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let, 5, 0, 23), - [374] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for, 5, 0, 24), - [376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for, 5, 0, 24), - [378] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [380] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_operator, 1, 0, 3), - [382] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_operator, 1, 0, 3), - [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), - [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), - [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), - [392] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(144), - [395] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), - [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), - [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), - [403] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_type, 1, 0, 14), - [405] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__declaration_type, 2, 0, 13), - [407] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(165), - [410] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), - [412] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(163), - [415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), - [419] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 6), - [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [423] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [429] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), - [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), - [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), - [439] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [447] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), - [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), - [455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), - [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [461] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [463] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), - [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), - [467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), - [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), - [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), - [473] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), - [475] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), - [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), - [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), - [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [125] = {.entry = {.count = 1, .reusable = false}}, SHIFT(154), + [127] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), + [129] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), + [131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), + [135] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 13), + [137] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 13), + [139] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 2, 0, 0), + [141] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 2, 0, 0), + [143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 11), + [145] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 11), + [147] = {.entry = {.count = 1, .reusable = false}}, SHIFT(146), + [149] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), + [155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), + [157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 3, 0, 0), + [159] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 3, 0, 0), + [161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 8), + [163] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 8), + [165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [167] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [169] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [171] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [173] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 9), + [175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 9), + [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 10), + [179] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 10), + [181] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [183] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [187] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [189] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_void, 2, 0, 0), + [191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_void, 2, 0, 0), + [193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), + [195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), + [197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [199] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 17), + [203] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 17), + [205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 18), + [207] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 18), + [209] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [211] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [213] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 19), + [215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 19), + [217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 21), + [219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 21), + [221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 22), + [223] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 22), + [225] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), + [227] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), + [229] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), + [231] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), + [233] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), + [235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [239] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(2), + [242] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [245] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [248] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), + [251] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(88), + [254] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(166), + [257] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(174), + [260] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(168), + [263] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(25), + [266] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(65), + [269] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(67), + [272] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(39), + [275] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [277] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(8), + [280] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [284] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), + [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), + [290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [294] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), + [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [300] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), + [302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(79), + [304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(81), + [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), + [314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(83), + [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [320] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 24), + [322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 24), + [324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [328] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), + [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [334] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), + [336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), + [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [340] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), + [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), + [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), + [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), + [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [356] = {.entry = {.count = 1, .reusable = false}}, SHIFT(64), + [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 20), + [362] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 16), + [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [374] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assign, 4, 0, 23), + [376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assign, 4, 0, 23), + [378] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for, 5, 0, 26), + [380] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for, 5, 0, 26), + [382] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let, 5, 0, 25), + [384] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let, 5, 0, 25), + [386] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closed_expression, 2, 0, 0), + [388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closed_expression, 2, 0, 0), + [390] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [392] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_operator, 1, 0, 3), + [394] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_operator, 1, 0, 3), + [396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [400] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(153), + [403] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), + [411] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 7), + [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [415] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(162), + [418] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_type, 1, 0, 15), + [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), + [424] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(164), + [427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), + [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [433] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__declaration_type, 2, 0, 14), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [439] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), + [443] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [453] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [465] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), + [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [475] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [477] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), + [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [487] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), + [489] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), + [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), + [507] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index cabf4a1..9edcbf8 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -88,3 +88,124 @@ With a statement (assignment_operator) (expression (signed_integer (integer (base_ten))))))))))) + +================== +Call function +================== + +value(value=value) + +--- + +(source_file + (expression + (function_call + (expression + (path + (identifier))) + (dictionary_construction + (dictionary_member_assignment + (identifier) + (expression + (path + (identifier)))))))) + +================== +Call no arguments +================== + +value() + +--- + +(source_file + (expression + (function_call + (expression + (path + (identifier))) + (void)))) + +================== +Call function deep in tree +================== + +value.value(value=value) + +--- + +(source_file + (expression + (function_call + (expression + (path + (identifier) + (identifier))) + (dictionary_construction + (dictionary_member_assignment + (identifier) + (expression + (path + (identifier)))))))) + +================== +Call method +================== + +value:value(value=value) + +--- + +(source_file + (expression + (method_call + (expression + (path + (identifier))) + (identifier) + (dictionary_construction + (dictionary_member_assignment + (identifier) + (expression + (path + (identifier)))))))) + +================== +Call method no arguments +================== + +value:value() + +--- + +(source_file + (expression + (method_call + (expression + (path + (identifier))) + (identifier) + (void)))) + +================== +Call method deep in tree +================== + +value.value:value(value=value) + +--- + +(source_file + (expression + (method_call + (expression + (path + (identifier) + (identifier))) + (identifier) + (dictionary_construction + (dictionary_member_assignment + (identifier) + (expression + (path + (identifier)))))))) From 89613dc2d0b8f2acff505b5dfb6b73502a1261eb Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 11 Apr 2025 19:38:36 -0400 Subject: [PATCH 019/106] Implement dictionaries --- Cargo.lock | 7 + crates/interpreter/Cargo.toml | 1 + crates/interpreter/src/compile/expressions.rs | 355 +- crates/interpreter/src/compile/mod.rs | 5 +- crates/interpreter/src/compile/statements.rs | 10 +- crates/interpreter/src/execution/errors.rs | 35 +- crates/interpreter/src/execution/heap.rs | 168 + crates/interpreter/src/execution/mod.rs | 491 +- crates/interpreter/src/execution/stack.rs | 73 +- .../src/execution/standard_environment.rs | 45 + .../src/execution/values/boolean.rs | 10 +- .../src/execution/values/closure.rs | 29 +- .../src/execution/values/default.rs | 2 +- .../src/execution/values/dictionary.rs | 187 + .../src/execution/values/integer.rs | 555 +- .../interpreter/src/execution/values/mod.rs | 126 +- .../src/execution/values/scalar.rs | 219 +- .../src/execution/values/value_type.rs | 130 +- .../tree-sitter-command-cad-model/grammar.js | 29 +- .../src/grammar.json | 231 +- .../src/node-types.json | 58 +- .../src/parser.c | 6355 +++++++++-------- .../test/corpus/closure.txt | 69 +- .../test/corpus/comments.txt | 6 +- .../test/corpus/dictionary_construction.txt | 12 + .../test/corpus/for_loop.txt | 20 + .../test/corpus/primitives.txt | 4 +- .../test/corpus/struct_definition.txt | 119 +- crates/units/src/lib.rs | 17 +- 29 files changed, 4905 insertions(+), 4463 deletions(-) create mode 100644 crates/interpreter/src/execution/heap.rs create mode 100644 crates/interpreter/src/execution/standard_environment.rs diff --git a/Cargo.lock b/Cargo.lock index c1d9426..06c9b4b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -708,6 +708,12 @@ dependencies = [ "byteorder 1.5.0", ] +[[package]] +name = "hashable-map" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46ab77e35afc7a5a3087e72e8e93a90a226a78f62c5f4dceaeb3d7ef5decdccb" + [[package]] name = "hashbrown" version = "0.15.2" @@ -938,6 +944,7 @@ dependencies = [ "enum_downcast", "file-guard", "fortuples", + "hashable-map", "num-traits", "tree-sitter", "tree-sitter-command-cad-model", diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index 3027739..d7e742f 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -16,6 +16,7 @@ enum_downcast = { version = "0.1", features = [ "derive" ] } compact_str = "0.9" num-traits = "0.2" fortuples = "0.9" +hashable-map = "0.4.0" [build-dependencies] type-sitter-gen = "0.6" diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 899e2d7..b42ffc5 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -55,6 +55,33 @@ pub enum Expression { MethodCall(AstNode), } +impl<'t> Parse<'t, nodes::anon_unions::Path_StructDefinition<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::anon_unions::Path_StructDefinition<'t>, + ) -> Result, Error<'t, 'i>> { + match value { + nodes::anon_unions::Path_StructDefinition::Path(path) => Ok(AstNode::new( + file, + &path, + Self::Path(IdentityPath::parse(file, input, path)?), + )), + nodes::anon_unions::Path_StructDefinition::StructDefinition(struct_definition) => { + Ok(AstNode::new( + file, + &struct_definition, + Self::StructDefinition(StructDefinition::parse( + file, + input, + struct_definition, + )?), + )) + } + } + } +} + impl<'t> Parse<'t, nodes::anon_unions::Path_StructDefinition_Void<'t>> for Expression { fn parse<'i>( file: &Arc, @@ -81,7 +108,7 @@ impl<'t> Parse<'t, nodes::anon_unions::Path_StructDefinition_Void<'t>> for Expre nodes::anon_unions::Path_StructDefinition_Void::Void(void) => Ok(AstNode::new( file, &value, - Self::Void(AstNode::new(file, &void, ())), + Expression::Void(AstNode::new(file, &void, ())), )), } } @@ -801,13 +828,11 @@ impl<'t> Parse<'t, nodes::DictionaryConstruction<'t>> for DictionaryConstruction input: &'i str, value: nodes::DictionaryConstruction<'t>, ) -> Result, Error<'t, 'i>> { - dbg!(&value); let mut assignments = Vec::new(); let mut cursor = value.walk(); let assignments_iter = value.assignmentss(&mut cursor); for assignment in assignments_iter { - dbg!(&assignment); let assignment = assignment?; // Skip the commas. @@ -851,7 +876,7 @@ impl<'t> Parse<'t, nodes::ClosureDefinition<'t>> for ClosureDefinition { identities.push(text); } - let returns = value.argument()?; + let returns = value.result()?; let returns = Expression::parse(file, input, returns)?; let expression = value.expression()?; @@ -877,7 +902,7 @@ impl<'t> Parse<'t, nodes::ClosureDefinition<'t>> for ClosureDefinition { #[derive(Debug, Hash, Eq, PartialEq)] pub struct StructMember { pub name: AstNode, - pub ty: AstNode, + pub ty: AstNode, pub default: Option>, } @@ -890,8 +915,8 @@ impl<'t> Parse<'t, nodes::StructMember<'t>> for StructMember { let name = value.name()?; let name = String::parse(file, input, name)?; - let ty = value.type_path()?; - let ty = IdentityPath::parse(file, input, ty)?; + let ty = value.declaration_type()?.expression()?; + let ty = Expression::parse(file, input, ty)?; let default = if let Some(default) = value.default() { let default = default?; @@ -952,34 +977,10 @@ impl<'t> Parse<'t, nodes::StructDefinition<'t>> for StructDefinition { } } -#[derive(Debug, Hash, Eq, PartialEq, EnumAs)] -pub enum Argument { - Void(AstNode<()>), - DictionaryConstruction(AstNode), -} - -impl<'t> Parse<'t, nodes::anon_unions::DictionaryConstruction_Void<'t>> for Argument { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::anon_unions::DictionaryConstruction_Void<'t>, - ) -> Result, Error<'t, 'i>> { - use nodes::anon_unions::DictionaryConstruction_Void as ChildType; - let argument = match value { - ChildType::Void(void) => Argument::Void(AstNode::new(file, &void, ())), - ChildType::DictionaryConstruction(dictionary) => Argument::DictionaryConstruction( - DictionaryConstruction::parse(file, input, dictionary)?, - ), - }; - - Ok(AstNode::new(file, &value, argument)) - } -} - #[derive(Debug, Hash, Eq, PartialEq)] pub struct FunctionCall { pub to_call: AstNode>, - pub argument: AstNode, + pub argument: AstNode, } impl<'t> Parse<'t, nodes::FunctionCall<'t>> for FunctionCall { @@ -989,7 +990,7 @@ impl<'t> Parse<'t, nodes::FunctionCall<'t>> for FunctionCall { value: nodes::FunctionCall<'t>, ) -> Result, Error<'t, 'i>> { let to_call = Expression::parse(file, input, value.to_call()?)?.into_box(); - let argument = Argument::parse(file, input, value.argument()?)?; + let argument = DictionaryConstruction::parse(file, input, value.argument()?)?; Ok(AstNode::new(file, &value, Self { to_call, argument })) } @@ -999,7 +1000,7 @@ impl<'t> Parse<'t, nodes::FunctionCall<'t>> for FunctionCall { pub struct MethodCall { pub self_dictionary: AstNode>, pub to_call: AstNode, - pub argument: AstNode, + pub argument: AstNode, } impl<'t> Parse<'t, nodes::MethodCall<'t>> for MethodCall { @@ -1010,7 +1011,7 @@ impl<'t> Parse<'t, nodes::MethodCall<'t>> for MethodCall { ) -> Result, Error<'t, 'i>> { let self_dictionary = Expression::parse(file, input, value.self_dictionary()?)?.into_box(); let to_call = String::parse(file, input, value.to_call()?)?; - let argument = Argument::parse(file, input, value.argument()?)?; + let argument = DictionaryConstruction::parse(file, input, value.argument()?)?; Ok(AstNode::new( file, @@ -1047,7 +1048,7 @@ mod test { #[test] fn binary_expression() { - let root = full_compile("test_file.ccm", "2i + 3i"); + let root = full_compile("2i + 3i"); let binary_expression = root.node.as_binaryexpression().unwrap(); let operation_reference = binary_expression.node.operation.reference.clone(); @@ -1091,7 +1092,7 @@ mod test { #[test] fn boolean_true() { - let root = full_compile("test_file.ccm", "true"); + let root = full_compile("true"); assert_eq!( root, AstNode { @@ -1106,7 +1107,7 @@ mod test { #[test] fn boolean_false() { - let root = full_compile("test_file.ccm", "false"); + let root = full_compile("false"); assert_eq!( root, AstNode { @@ -1121,12 +1122,11 @@ mod test { #[test] fn closure_definition() { - let root = full_compile("test_file.ccm", "()[this, that] -> () {}"); + let root = full_compile("(,)[this, that] -> ~ {}"); let closure = root.node.as_closuredefinition().unwrap(); let closure_reference = closure.reference.clone(); let argument = &closure.node.argument; let argument_reference = argument.reference.clone(); - let argument_void_reference = argument.node.as_void().unwrap().reference.clone(); let captures = &closure.node.captures; let this_reference = captures[0].reference.clone(); @@ -1154,9 +1154,17 @@ mod test { node: Box::new(ClosureDefinition { argument: AstNode { reference: argument_reference, - node: Expression::Void(AstNode { - reference: argument_void_reference, - node: () + node: Expression::StructDefinition(AstNode { + reference: argument + .node + .as_structdefinition() + .unwrap() + .reference + .clone(), + node: StructDefinition { + members: vec![], + variadic: false + } }) }, captures: vec![ @@ -1191,7 +1199,7 @@ mod test { #[test] fn default() { - let root = full_compile("test_file.ccm", "default"); + let root = full_compile("default"); assert_eq!( root, AstNode { @@ -1206,7 +1214,7 @@ mod test { #[test] fn dictionary_construction() { - let root = full_compile("test_file.ccm", "(a = true, b = false)"); + let root = full_compile("(a = true, b = false)"); let construction_expression = root.node.as_dictionaryconstruction().unwrap(); assert_eq!(construction_expression.node.assignments.len(), 2); let a = &construction_expression.node.assignments[0]; @@ -1251,7 +1259,7 @@ mod test { #[test] fn if_expression() { - let root = full_compile("test_file.ccm", "if true {}"); + let root = full_compile("if true {}"); let if_expression = root.node.as_if().unwrap(); let if_reference = if_expression.reference.clone(); let condition = &if_expression.node.condition; @@ -1287,7 +1295,7 @@ mod test { #[test] fn if_else_expression() { - let root = full_compile("test_file.ccm", "if true {} else {}"); + let root = full_compile("if true {} else {}"); let if_expression = root.node.as_if().unwrap(); let if_reference = if_expression.reference.clone(); let condition = &if_expression.node.condition; @@ -1333,7 +1341,7 @@ mod test { #[test] fn list() { - let root = full_compile("test_file.ccm", "[1i, 2i, 3i, 4i, 5i]"); + let root = full_compile("[1i, 2i, 3i, 4i, 5i]"); let list = root.node.as_list().unwrap(); let list_reference = list.reference.clone(); @@ -1423,7 +1431,7 @@ mod test { #[test] fn parenthesis() { - let root = full_compile("test_file.ccm", "(5i)"); + let root = full_compile("(5i)"); let parenthesis = root.node.as_parenthesis().unwrap(); let parenthesis_reference = parenthesis.reference.clone(); let integer = parenthesis.node.as_signedinteger().unwrap(); @@ -1444,7 +1452,7 @@ mod test { #[test] fn local_path() { - let root = full_compile("test_file.ccm", "this.thang"); + let root = full_compile("this.thang"); let path = root.node.as_path().unwrap(); let this = &path.node.path[0]; let thang = &path.node.path[1]; @@ -1474,7 +1482,7 @@ mod test { #[test] fn argument_path() { - let root = full_compile("test_file.ccm", "@.this.thang"); + let root = full_compile("@.this.thang"); let path = root.node.as_path().unwrap(); let this = &path.node.path[0]; let thang = &path.node.path[1]; @@ -1505,7 +1513,7 @@ mod test { #[test] fn procedural_block() { // An unimpressive test. The more in-depth testing gets done in statements.rs - let root = full_compile("test_file.ccm", "{}"); + let root = full_compile("{}"); assert_eq!( root, AstNode { @@ -1520,7 +1528,7 @@ mod test { #[test] fn scalar_no_decimal() { - let root = full_compile("test_file.ccm", "0"); + let root = full_compile("0"); assert_eq!( root, @@ -1539,7 +1547,7 @@ mod test { #[test] fn scalar_no_unit() { - let root = full_compile("test_file.ccm", "0.0"); + let root = full_compile("0.0"); assert_eq!( root, AstNode { @@ -1557,7 +1565,7 @@ mod test { #[test] fn scalar_with_unit() { - let root = full_compile("test_file.ccm", "0.0mm"); + let root = full_compile("0.0mm"); assert_eq!( root, AstNode { @@ -1576,7 +1584,7 @@ mod test { #[test] fn scalar_unit_conversion() { // Test conversion factor - let root = full_compile("test_file.ccm", "1cm"); + let root = full_compile("1cm"); assert_eq!( root, AstNode { @@ -1595,7 +1603,7 @@ mod test { #[test] fn scalar_quoted_unit() { // Test conversion factor - let root = full_compile("test_file.ccm", "1'm^2'"); + let root = full_compile("1'm^2'"); assert_eq!( root, AstNode { @@ -1613,7 +1621,7 @@ mod test { #[test] fn signed_integer() { - let root = full_compile("test_file.ccm", "5i"); + let root = full_compile("5i"); assert_eq!( root, AstNode { @@ -1628,7 +1636,7 @@ mod test { #[test] fn signed_integer_hex() { - let root = full_compile("test_file.ccm", "0x5i"); + let root = full_compile("0x5i"); assert_eq!( root, AstNode { @@ -1643,7 +1651,7 @@ mod test { #[test] fn signed_integer_octal() { - let root = full_compile("test_file.ccm", "0o5i"); + let root = full_compile("0o5i"); assert_eq!( root, AstNode { @@ -1658,7 +1666,7 @@ mod test { #[test] fn signed_integer_binary() { - let root = full_compile("test_file.ccm", "0b1010i"); + let root = full_compile("0b1010i"); assert_eq!( root, AstNode { @@ -1673,7 +1681,7 @@ mod test { #[test] fn string() { - let root = full_compile("test_file.ccm", "\"Some text\\n\""); + let root = full_compile("\"Some text\\n\""); assert_eq!( root, AstNode { @@ -1688,14 +1696,13 @@ mod test { #[test] fn struct_definition() { - let root = full_compile( - "test_file.ccm", - "( one: std.Constraint, two: std.Constraint = a, ... )", - ); + let root = full_compile("( one: std.Constraint, two: std.Constraint = a, ... )"); let struct_definition = root.node.as_structdefinition().unwrap(); let members = &struct_definition.node.members; let one = &members[0]; + let one_ty = one.node.ty.node.as_path().unwrap(); let two = &members[1]; + let two_ty = two.node.ty.node.as_path().unwrap(); let two_default = two.node.default.as_ref().unwrap(); let two_default_path = two_default.node.as_path().unwrap(); @@ -1714,18 +1721,21 @@ mod test { }, ty: AstNode { reference: one.node.ty.reference.clone(), - node: IdentityPath { - path: vec![ - AstNode { - reference: one.node.ty.node.path[0].reference.clone(), - node: "std".into(), - }, - AstNode { - reference: one.node.ty.node.path[1].reference.clone(), - node: "Constraint".into(), - } - ] - } + node: Expression::Path(AstNode { + reference: one_ty.reference.clone(), + node: IdentityPath { + path: vec![ + AstNode { + reference: one_ty.node.path[0].reference.clone(), + node: "std".into(), + }, + AstNode { + reference: one_ty.node.path[1].reference.clone(), + node: "Constraint".into(), + } + ] + } + }) }, default: None } @@ -1742,18 +1752,21 @@ mod test { }, ty: AstNode { reference: two.node.ty.reference.clone(), - node: IdentityPath { - path: vec![ - AstNode { - reference: two.node.ty.node.path[0].reference.clone(), - node: "std".into(), - }, - AstNode { - reference: two.node.ty.node.path[1].reference.clone(), - node: "Constraint".into(), - } - ] - } + node: Expression::Path(AstNode { + reference: two_ty.reference.clone(), + node: IdentityPath { + path: vec![ + AstNode { + reference: two_ty.node.path[0].reference.clone(), + node: "std".into(), + }, + AstNode { + reference: two_ty.node.path[1].reference.clone(), + node: "Constraint".into(), + } + ] + } + }) }, default: Some(AstNode { reference: two_default.reference.clone(), @@ -1774,7 +1787,7 @@ mod test { #[test] fn unary_expression() { - let root = full_compile("test_file.ccm", "-5i"); + let root = full_compile("-5i"); let unary_expression = root.node.as_unaryexpression().unwrap(); let unary_expression_reference = unary_expression.reference.clone(); let expression_reference = unary_expression.node.expression.reference.clone(); @@ -1814,7 +1827,7 @@ mod test { #[test] fn unsigned_integer() { - let root = full_compile("test_file.ccm", "5u"); + let root = full_compile("5u"); assert_eq!( root, AstNode { @@ -1829,7 +1842,7 @@ mod test { #[test] fn unsigned_integer_hex() { - let root = full_compile("test_file.ccm", "0x5u"); + let root = full_compile("0x5u"); assert_eq!( root, AstNode { @@ -1844,7 +1857,7 @@ mod test { #[test] fn unsigned_integer_octal() { - let root = full_compile("test_file.ccm", "0o5u"); + let root = full_compile("0o5u"); assert_eq!( root, AstNode { @@ -1859,7 +1872,7 @@ mod test { #[test] fn unsigned_integer_binary() { - let root = full_compile("test_file.ccm", "0b1010u"); + let root = full_compile("0b1010u"); assert_eq!( root, AstNode { @@ -1874,7 +1887,7 @@ mod test { #[test] fn void() { - let root = full_compile("test_file.ccm", "()"); + let root = full_compile("~"); assert_eq!( root, AstNode { @@ -1889,7 +1902,7 @@ mod test { #[test] fn function_call_no_arguments() { - let root = full_compile("test_file.ccm", "a.b()"); + let root = full_compile("a.b()"); let call = root.node.as_functioncall().unwrap(); let to_call = call.node.to_call.node.as_path().unwrap(); assert_eq!( @@ -1919,17 +1932,9 @@ mod test { }, argument: AstNode { reference: call.node.argument.reference.clone(), - node: Argument::Void(AstNode { - reference: call - .node - .argument - .node - .as_void() - .unwrap() - .reference - .clone(), - node: () - }) + node: DictionaryConstruction { + assignments: vec![] + } } } }) @@ -1939,11 +1944,11 @@ mod test { #[test] fn function_call_with_arguments() { - let root = full_compile("test_file.ccm", "a.b(value = ())"); + let root = full_compile("a.b(value = ~)"); let call = root.node.as_functioncall().unwrap(); let to_call = call.node.to_call.node.as_path().unwrap(); - let dict = &call.node.argument.node.as_dictionaryconstruction().unwrap(); - let dict_assignment = &dict.node.assignments[0]; + let dict = &call.node.argument.node; + let dict_assignment = &dict.assignments[0]; assert_eq!( root, AstNode { @@ -1971,42 +1976,35 @@ mod test { }, argument: AstNode { reference: call.node.argument.reference.clone(), - node: Argument::DictionaryConstruction(AstNode { - reference: dict.reference.clone(), - node: DictionaryConstruction { - assignments: vec![AstNode { - reference: dict_assignment.reference.clone(), - node: DictionaryMemberAssignment { - name: AstNode { - reference: dict_assignment - .node - .name - .reference - .clone(), - node: "value".into() - }, - assignment: AstNode { + node: DictionaryConstruction { + assignments: vec![AstNode { + reference: dict_assignment.reference.clone(), + node: DictionaryMemberAssignment { + name: AstNode { + reference: dict_assignment.node.name.reference.clone(), + node: "value".into() + }, + assignment: AstNode { + reference: dict_assignment + .node + .assignment + .reference + .clone(), + node: Expression::Void(AstNode { reference: dict_assignment .node .assignment + .node + .as_void() + .unwrap() .reference .clone(), - node: Expression::Void(AstNode { - reference: dict_assignment - .node - .assignment - .node - .as_void() - .unwrap() - .reference - .clone(), - node: () - }) - } + node: () + }) } - }] - } - }) + } + }] + } } } }) @@ -2016,7 +2014,7 @@ mod test { #[test] fn method_call_no_arguments() { - let root = full_compile("test_file.ccm", "():c()"); + let root = full_compile("~:c()"); let call = root.node.as_methodcall().unwrap(); let to_call = &call.node.to_call; assert_eq!( @@ -2046,17 +2044,9 @@ mod test { }, argument: AstNode { reference: call.node.argument.reference.clone(), - node: Argument::Void(AstNode { - reference: call - .node - .argument - .node - .as_void() - .unwrap() - .reference - .clone(), - node: () - }) + node: DictionaryConstruction { + assignments: vec![] + } } } }) @@ -2066,11 +2056,11 @@ mod test { #[test] fn method_call_with_arguments() { - let root = full_compile("test_file.ccm", "():c(value = ())"); + let root = full_compile("~:c(value = ~)"); let call = root.node.as_methodcall().unwrap(); let to_call = &call.node.to_call; - let dict = &call.node.argument.node.as_dictionaryconstruction().unwrap(); - let dict_assignment = &dict.node.assignments[0]; + let dict = &call.node.argument.node; + let dict_assignment = &dict.assignments[0]; assert_eq!( root, AstNode { @@ -2098,42 +2088,35 @@ mod test { }, argument: AstNode { reference: call.node.argument.reference.clone(), - node: Argument::DictionaryConstruction(AstNode { - reference: dict.reference.clone(), - node: DictionaryConstruction { - assignments: vec![AstNode { - reference: dict_assignment.reference.clone(), - node: DictionaryMemberAssignment { - name: AstNode { - reference: dict_assignment - .node - .name - .reference - .clone(), - node: "value".into() - }, - assignment: AstNode { + node: DictionaryConstruction { + assignments: vec![AstNode { + reference: dict_assignment.reference.clone(), + node: DictionaryMemberAssignment { + name: AstNode { + reference: dict_assignment.node.name.reference.clone(), + node: "value".into() + }, + assignment: AstNode { + reference: dict_assignment + .node + .assignment + .reference + .clone(), + node: Expression::Void(AstNode { reference: dict_assignment .node .assignment + .node + .as_void() + .unwrap() .reference .clone(), - node: Expression::Void(AstNode { - reference: dict_assignment - .node - .assignment - .node - .as_void() - .unwrap() - .reference - .clone(), - node: () - }) - } + node: () + }) } - }] - } - }) + } + }] + } } } }) diff --git a/crates/interpreter/src/compile/mod.rs b/crates/interpreter/src/compile/mod.rs index 9eb1070..be42b94 100644 --- a/crates/interpreter/src/compile/mod.rs +++ b/crates/interpreter/src/compile/mod.rs @@ -86,8 +86,9 @@ impl<'t> From> for Error<'t, '_> { /// Compiles a full document. Panics if there are any issues. /// This is for testing only. -pub(crate) fn full_compile(file: impl Into, input: &str) -> AstNode { - let test_file = Arc::new(file.into()); +#[cfg(test)] +pub(crate) fn full_compile(input: &str) -> AstNode { + let test_file = Arc::new(PathBuf::from("test.ccm")); let mut tree = new_parser(); let root = tree.parse(input, None).unwrap(); crate::compile(&test_file, input, &root).unwrap() diff --git a/crates/interpreter/src/compile/statements.rs b/crates/interpreter/src/compile/statements.rs index 0e06361..8e3b64a 100644 --- a/crates/interpreter/src/compile/statements.rs +++ b/crates/interpreter/src/compile/statements.rs @@ -211,7 +211,7 @@ mod test { #[test] fn assign() { - let root = full_compile("test_file.ccm", "{ my_value.sub_value = (); }"); + let root = full_compile("{ my_value.sub_value = ~; }"); let block = root.node.as_proceduralblock().unwrap(); let statement = &block.node.statements[0]; let assign = statement.node.as_assign().unwrap(); @@ -275,7 +275,7 @@ mod test { #[test] fn assign_let() { - let root = full_compile("test_file.ccm", "{ let my_value = (); }"); + let root = full_compile("{ let my_value = ~; }"); let block = root.node.as_proceduralblock().unwrap(); let statement = &block.node.statements[0]; let let_assign = statement.node.as_let().unwrap(); @@ -320,7 +320,7 @@ mod test { #[test] fn for_statement() { - let root = full_compile("test_file.ccm", "{ for i in () {} }"); + let root = full_compile("{ for i in ~ {} }"); let block = root.node.as_proceduralblock().unwrap(); let statement = &block.node.statements[0]; let for_loop = statement.node.as_for().unwrap(); @@ -371,7 +371,7 @@ mod test { #[test] fn expression() { - let root = full_compile("test_file.ccm", "{ () }"); + let root = full_compile("{ ~ }"); let block = root.node.as_proceduralblock().unwrap(); let statement = &block.node.statements[0]; let expression = statement.node.as_expression().unwrap(); @@ -401,7 +401,7 @@ mod test { #[test] fn closed_expression() { - let root = full_compile("test_file.ccm", "{ (); }"); + let root = full_compile("{ ~; }"); let block = root.node.as_proceduralblock().unwrap(); let statement = &block.node.statements[0]; let closed_expression = statement.node.as_closedexpression().unwrap(); diff --git a/crates/interpreter/src/execution/errors.rs b/crates/interpreter/src/execution/errors.rs index 96306ed..0ed2660 100644 --- a/crates/interpreter/src/execution/errors.rs +++ b/crates/interpreter/src/execution/errors.rs @@ -16,7 +16,7 @@ * program. If not, see . */ -use std::{any::Any, fmt::Display, iter::once}; +use std::{any::Any, fmt::Display}; use crate::compile::SourceReference; @@ -55,47 +55,14 @@ impl Display for GenericFailure { pub trait ErrorType: std::fmt::Debug + std::fmt::Display + Any {} pub trait Raise { - fn raise<'s, R>( - self, - stack_trace: impl IntoIterator, - ) -> ExpressionResult; - fn to_error<'s>(self, stack_trace: impl IntoIterator) -> Error; - - fn raise_with_line<'s, R>( - self, - stack_trace: impl IntoIterator, - current_line: SourceReference, - ) -> ExpressionResult; } impl Raise for E { - fn raise<'s, R>( - self, - stack_trace: impl IntoIterator, - ) -> ExpressionResult { - Err(self.to_error(stack_trace)) - } - fn to_error<'s>(self, stack_trace: impl IntoIterator) -> Error { Error { ty: Box::new(self), trace: stack_trace.into_iter().cloned().collect(), } } - - fn raise_with_line<'s, R>( - self, - stack_trace: impl IntoIterator, - current_line: SourceReference, - ) -> ExpressionResult { - Err(Error { - ty: Box::new(self), - trace: stack_trace - .into_iter() - .cloned() - .chain(once(current_line)) - .collect(), - }) - } } diff --git a/crates/interpreter/src/execution/heap.rs b/crates/interpreter/src/execution/heap.rs new file mode 100644 index 0000000..4b62474 --- /dev/null +++ b/crates/interpreter/src/execution/heap.rs @@ -0,0 +1,168 @@ +/* + * Copyright 2025 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use std::{ + collections::HashMap, + num::NonZeroUsize, + sync::atomic::{AtomicUsize, Ordering}, +}; + +use super::values::DictionaryStorage; + +#[derive(Debug, Default)] +/// A collection of objects that are stored on the heap. +pub struct Heap { + pub dictionaries: DictionaryStorage, +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct HeapKey(NonZeroUsize); + +#[derive(Debug)] +struct HeapData { + reference_count: AtomicUsize, + data: D, +} + +#[derive(Debug)] +pub struct HeapStorage { + allocations: HashMap>, + unused_keys: Vec, + next_key: usize, +} + +impl HeapStorage { + fn next_free_key(&mut self) -> HeapKey { + if let Some(key) = self.unused_keys.pop() { + HeapKey(key) + } else { + let key = self.next_key; + self.next_key += 1; + HeapKey(NonZeroUsize::new(key).expect("Key was zero")) + } + } + + pub fn get(&self, key: &HeapKey) -> &D { + &self + .allocations + .get(&key.0) + .expect("Zombie key used for reference") + .data + } + + pub fn get_mut(&mut self, key: &HeapKey) -> &mut D { + &mut self + .allocations + .get_mut(&key.0) + .expect("Zombie key used for reference") + .data + } + + /// Creates a new allocation from the given data and returns a key + /// for the first reference. + #[must_use] + pub fn new_allocation(&mut self, data: D) -> HeapKey { + let key = self.next_free_key(); + + let data = HeapData { + // Reference count starts as one since a key already exists. + reference_count: AtomicUsize::new(1), + data, + }; + self.allocations.insert(key.0, data); + + key + } + + /// Increments the reference count of a dictionary by one. + #[must_use] + pub fn reference_allocation(&self, key: &HeapKey) -> HeapKey { + let data = self.allocations.get(&key.0).expect("Zombie key referenced"); + + data.reference_count.fetch_add(1, Ordering::AcqRel); + + // The user can't clone keys themselves, so we'll do that for them. + HeapKey(key.0) + } + + /// Decrements the reference count of a dictionary by one. + /// Returns the allocation if the reference count reaches zero. + pub fn dereference_allocation(&mut self, key: HeapKey) -> Option { + let data = self + .allocations + .get_mut(&key.0) + .expect("Zombie key dropped"); + + let previous_count = data.reference_count.fetch_sub(1, Ordering::AcqRel); + let raw_key = key.0; + + // Make sure the key doesn't run its drop method, otherwise it'll panic. + std::mem::forget(key); + + if previous_count - 1 == 0 { + // No more references. Drop the data. + let data = self + .allocations + .remove(&raw_key) + .expect("Data to delete vanished"); + self.unused_keys.push(raw_key); + + Some(data.data) + } else { + None + } + } +} + +impl Default for HeapStorage { + fn default() -> Self { + Self { + allocations: HashMap::new(), + unused_keys: Vec::new(), + next_key: 1, + } + } +} + +#[cfg(debug_assertions)] +impl Drop for HeapStorage { + fn drop(&mut self) { + assert!( + self.allocations.is_empty(), + "Heap storage was not empty: {self:?}", + ); + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn free_key() { + let mut heap = HeapStorage::default(); + let key = heap.new_allocation(24); + let key2 = heap.reference_allocation(&key); + + let freed_data = heap.dereference_allocation(key); + assert!(freed_data.is_none()); + + let freed_data = heap.dereference_allocation(key2); + assert_eq!(freed_data, Some(24)); + } +} diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index e130a12..89f3ac6 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -19,79 +19,183 @@ use std::{cmp::Ordering, fmt::Display}; use crate::compile::{ - self, AssignmentType, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation, + self, AssignmentType, BinaryExpressionOperation, SourceReference, StructDefinition, + UnaryExpressionOperation, }; mod errors; mod formatting; +mod heap; mod logging; mod stack; +mod standard_environment; +use standard_environment::build_prelude; pub mod values; use errors::{ErrorType, ExpressionResult, Raise}; +use heap::Heap; use logging::{LocatedStr, RuntimeLog, StackScope}; use stack::{ScopeType, Stack}; -use values::{Object, Value, ValueType}; +use values::{Object, ObjectClone as _, Value, ValueType}; -/// Caches the products of expressions. -pub struct Cache {} +fn find_value<'a>( + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + stack: &Stack, + heap: &Heap, + path_iter: impl IntoIterator>, +) -> ExpressionResult { + let mut path_iter = path_iter.into_iter(); + let root = path_iter.next().expect("Path is empty"); + + let stack_value = stack.get_variable( + stack_trace, + LocatedStr { + location: root.reference.clone(), + string: &root.node, + }, + )?; -pub type CacheSignature = [u8; 32]; + // Ok(value.object_clone(heap)) + if let Some(sub_path) = path_iter.next() { + // We need the value off the heap. + + let mut value = stack_value.get_attribute_ref( + log, + stack_trace, + heap, + &LocatedStr { + location: sub_path.reference.clone(), + string: &sub_path.node, + }, + )?; + + // Follow the chain of elements to evaluate the whole path. + for sub_path in path_iter { + value = value.get_attribute_ref( + log, + stack_trace, + heap, + &LocatedStr { + location: sub_path.reference.clone(), + string: &sub_path.node, + }, + )?; + } -pub struct CachedExpression {} + Ok(value.object_clone(heap)) + } else { + // We just needed the value off the stack. + Ok(stack_value.object_clone(heap)) + } +} -pub struct RuntimeContext {} +fn find_value_mut<'a>( + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + stack: &mut Stack, + heap: &mut Heap, + path_iter: impl IntoIterator>, + access: impl FnOnce(&mut Value), +) -> ExpressionResult<()> { + let mut path_iter = path_iter.into_iter().peekable(); + let root = path_iter.next().expect("Path is empty"); + + let stack_value = stack.get_variable_mut( + stack_trace, + LocatedStr { + location: root.reference.clone(), + string: &root.node, + }, + )?; -macro_rules! find_value { - ($path_iter:expr, $stack_trace:ident, $stack:ident.$stack_method:ident) => {{ - // An empty path should be impossible. - let mut path_iter = $path_iter; - let root = path_iter.next().expect("Path is empty"); + if let Some(sub_path) = path_iter.next() { + // We need the value off the heap. - let mut value = $stack.$stack_method( - $stack_trace, - LocatedStr { - location: root.reference.clone(), - string: &root.node, + let mut value = stack_value.get_attribute_ref( + log, + stack_trace, + heap, + &LocatedStr { + location: sub_path.reference.clone(), + string: &sub_path.node, }, )?; - // Follow the chain of elements to evaluate the whole path. - for sub_path in path_iter { - todo!(); + // Follow the chain of elements to evaluate the whole path, up to the last element. + while let Some(sub_path) = path_iter.next() { + if path_iter.peek().is_none() { + // That's the last element of the path. We break out early because the + // last one needs to be a mutable borrow. + + let mut value = value.object_clone(heap); + let final_value = value.get_attribute_mut( + log, + stack_trace, + heap, + &LocatedStr { + location: sub_path.reference.clone(), + string: &sub_path.node, + }, + )?; + + access(final_value); + value.drop(heap); + + break; + } else { + value = value.get_attribute_ref( + log, + stack_trace, + heap, + &LocatedStr { + location: sub_path.reference.clone(), + string: &sub_path.node, + }, + )?; + } } - Ok(value) - }}; + Ok(()) + } else { + // We just needed the value off the stack. + access(stack_value); + Ok(()) + } } pub fn execute_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + heap: &mut Heap, expression: &compile::AstNode, ) -> ExpressionResult { stack_trace.stack_scope( expression.reference.clone(), |stack_trace| match &expression.node { compile::Expression::BinaryExpression(ast_node) => { - execute_binary_expression(log, stack_trace, stack, ast_node) + execute_binary_expression(log, stack_trace, stack, heap, ast_node) } compile::Expression::Boolean(ast_node) => Ok(values::Boolean(ast_node.node).into()), compile::Expression::ClosureDefinition(ast_node) => { Ok(values::UserClosure::from_ast(ast_node).into()) } compile::Expression::Default(_ast_node) => Ok(values::DefaultValue.into()), - compile::Expression::DictionaryConstruction(ast_node) => todo!(), + compile::Expression::DictionaryConstruction(ast_node) => { + Ok(values::Dictionary::from_ast(log, stack_trace, stack, heap, ast_node)?.into()) + } compile::Expression::If(ast_node) => todo!(), compile::Expression::List(ast_node) => todo!(), compile::Expression::Parenthesis(ast_node) => { - execute_expression(log, stack_trace, stack, &ast_node) + execute_expression(log, stack_trace, stack, heap, &ast_node) } compile::Expression::Path(ast_node) => { - find_value!(ast_node.node.path.iter(), stack_trace, stack.get_variable).cloned() + let path_iter = ast_node.node.path.iter(); + Ok(find_value(log, stack_trace, stack, heap, path_iter)?.into()) } + compile::Expression::ProceduralBlock(ast_node) => { - execute_procedural_block(log, stack, stack_trace, ast_node) + execute_procedural_block(log, stack, heap, stack_trace, ast_node) } compile::Expression::Scalar(ast_node) => Ok(values::Scalar { dimension: ast_node.node.dimension, @@ -102,9 +206,12 @@ pub fn execute_expression( Ok(values::SignedInteger::from(ast_node.node).into()) } compile::Expression::String(ast_node) => todo!(), - compile::Expression::StructDefinition(ast_node) => todo!(), + compile::Expression::StructDefinition(ast_node) => Ok(ValueType::from( + values::StructDefinition::new(log, stack_trace, stack, heap, ast_node)?, + ) + .into()), compile::Expression::UnaryExpression(ast_node) => { - execute_unary_expression(log, stack_trace, stack, ast_node) + execute_unary_expression(log, stack_trace, stack, heap, ast_node) } compile::Expression::UnsignedInteger(ast_node) => { Ok(values::UnsignedInteger::from(ast_node.node).into()) @@ -120,15 +227,16 @@ fn execute_unary_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + heap: &mut Heap, expression: &compile::AstNode>, ) -> ExpressionResult { stack_trace.stack_scope(expression.reference.clone(), |stack_trace| { let node = &expression.node; - let value = execute_expression(log, stack_trace, stack, &node.expression)?; + let value = execute_expression(log, stack_trace, stack, heap, &node.expression)?; match node.operation.node { - UnaryExpressionOperation::Add => value.unary_plus(log, stack_trace), - UnaryExpressionOperation::Sub => value.unary_minus(log, stack_trace), - UnaryExpressionOperation::Not => value.unary_not(log, stack_trace), + UnaryExpressionOperation::Add => value.unary_plus(log, stack_trace, heap), + UnaryExpressionOperation::Sub => value.unary_minus(log, stack_trace, heap), + UnaryExpressionOperation::Not => value.unary_not(log, stack_trace, heap), } }) } @@ -137,62 +245,77 @@ fn execute_binary_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + heap: &mut Heap, expression: &compile::AstNode>, ) -> ExpressionResult { stack_trace.stack_scope( expression.reference.clone(), |stack_trace: &mut Vec| { let node = &expression.node; - let value_a = execute_expression(log, stack_trace, stack, &node.a)?; - let value_b = execute_expression(log, stack_trace, stack, &node.b)?; + let value_a = execute_expression(log, stack_trace, stack, heap, &node.a)?; + let value_b = execute_expression(log, stack_trace, stack, heap, &node.b)?; match node.operation.node { BinaryExpressionOperation::NotEq => Ok(values::Boolean(!matches!( - value_a.cmp(log, stack_trace, &value_b)?, + value_a.cmp(log, stack_trace, heap, &value_b)?, Ordering::Equal )) .into()), - BinaryExpressionOperation::And => value_a.bit_and(log, stack_trace, &value_b), - BinaryExpressionOperation::AndAnd => value_a.and(log, stack_trace, &value_b), - BinaryExpressionOperation::Mul => value_a.multiply(log, stack_trace, &value_b), - BinaryExpressionOperation::MulMul => value_a.exponent(log, stack_trace, &value_b), - BinaryExpressionOperation::Add => value_a.addition(log, stack_trace, &value_b), - BinaryExpressionOperation::Sub => value_a.subtraction(log, stack_trace, &value_b), + BinaryExpressionOperation::And => value_a.bit_and(log, stack_trace, heap, &value_b), + BinaryExpressionOperation::AndAnd => value_a.and(log, stack_trace, heap, &value_b), + BinaryExpressionOperation::Mul => { + value_a.multiply(log, stack_trace, heap, &value_b) + } + BinaryExpressionOperation::MulMul => { + value_a.exponent(log, stack_trace, heap, &value_b) + } + BinaryExpressionOperation::Add => { + value_a.addition(log, stack_trace, heap, &value_b) + } + BinaryExpressionOperation::Sub => { + value_a.subtraction(log, stack_trace, heap, &value_b) + } BinaryExpressionOperation::DotDot => todo!(), BinaryExpressionOperation::DotDotEq => todo!(), - BinaryExpressionOperation::Div => value_a.divide(log, stack_trace, &value_b), + BinaryExpressionOperation::Div => value_a.divide(log, stack_trace, heap, &value_b), BinaryExpressionOperation::DivDiv => { - value_a.floor_divide(log, stack_trace, &value_b) + value_a.floor_divide(log, stack_trace, heap, &value_b) } BinaryExpressionOperation::Lt => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, &value_b)?, + value_a.cmp(log, stack_trace, heap, &value_b)?, Ordering::Less )) .into()), - BinaryExpressionOperation::LtLt => value_a.left_shift(log, stack_trace, &value_b), + BinaryExpressionOperation::LtLt => { + value_a.left_shift(log, stack_trace, heap, &value_b) + } BinaryExpressionOperation::LtEq => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, &value_b)?, + value_a.cmp(log, stack_trace, heap, &value_b)?, Ordering::Less | Ordering::Equal )) .into()), BinaryExpressionOperation::EqEq => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, &value_b)?, + value_a.cmp(log, stack_trace, heap, &value_b)?, Ordering::Equal )) .into()), BinaryExpressionOperation::Gt => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, &value_b)?, + value_a.cmp(log, stack_trace, heap, &value_b)?, Ordering::Greater )) .into()), BinaryExpressionOperation::GtEq => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, &value_b)?, + value_a.cmp(log, stack_trace, heap, &value_b)?, Ordering::Equal | Ordering::Greater )) .into()), - BinaryExpressionOperation::GtGt => value_a.right_shift(log, stack_trace, &value_b), - BinaryExpressionOperation::BitXor => value_a.bit_xor(log, stack_trace, &value_b), - BinaryExpressionOperation::Or => value_a.bit_or(log, stack_trace, &value_b), - BinaryExpressionOperation::OrOr => value_a.or(log, stack_trace, &value_b), + BinaryExpressionOperation::GtGt => { + value_a.right_shift(log, stack_trace, heap, &value_b) + } + BinaryExpressionOperation::BitXor => { + value_a.bit_xor(log, stack_trace, heap, &value_b) + } + BinaryExpressionOperation::Or => value_a.bit_or(log, stack_trace, heap, &value_b), + BinaryExpressionOperation::OrOr => value_a.or(log, stack_trace, heap, &value_b), } }, ) @@ -201,21 +324,23 @@ fn execute_binary_expression( fn execute_procedural_block( log: &mut dyn RuntimeLog, stack: &mut Stack, + heap: &mut Heap, stack_trace: &mut Vec, block: &compile::AstNode, ) -> ExpressionResult { stack_trace.stack_scope(block.reference.clone(), |stack_trace| { stack.scope( + heap, [], stack_trace, ScopeType::Inherited, - |stack, stack_trace| { + |stack, stack_trace, heap| { let mut last_value = Value::Void(values::Void); let mut statements = block.node.statements.iter().peekable(); while let Some(statement) = statements.next() { - last_value = execute_statement(log, stack, stack_trace, statement)?; + last_value = execute_statement(log, stack, heap, stack_trace, statement)?; if statements.peek().is_some() { // This was not the last statement, which means it needs to produce a void @@ -267,6 +392,7 @@ impl Display for MissingSemicolon { fn execute_statement( log: &mut dyn RuntimeLog, stack: &mut Stack, + heap: &mut Heap, stack_trace: &mut Vec, statement: &compile::AstNode, ) -> ExpressionResult { @@ -274,55 +400,75 @@ fn execute_statement( statement.reference.clone(), |stack_trace| match &statement.node { compile::Statement::Assign(ast_node) => { - let value = execute_expression(log, stack_trace, stack, &ast_node.node.value)?; + let value = + execute_expression(log, stack_trace, stack, heap, &ast_node.node.value)?; - let original_value = find_value!( - ast_node.node.to_assign.node.path.iter(), - stack_trace, - stack.get_variable_mut - )?; + let path = &ast_node.node.to_assign.node.path; + let original_value = find_value(log, stack_trace, stack, heap, path)?; // Start with a type check. if value.get_type() == original_value.get_type() { // Okay, we're good to assign the value. - let new_value = match ast_node.node.assignment_type.node { + // TODO we should use a builtin function for assignment operators. + let mut new_value = match ast_node.node.assignment_type.node { AssignmentType::Direct => value, AssignmentType::BitAnd => { - original_value.bit_and(log, stack_trace, &value)? + original_value.bit_and(log, stack_trace, heap, &value)? + } + AssignmentType::BitOr => { + original_value.bit_or(log, stack_trace, heap, &value)? } - AssignmentType::BitOr => original_value.bit_or(log, stack_trace, &value)?, AssignmentType::BitXor => { - original_value.bit_xor(log, stack_trace, &value)? + original_value.bit_xor(log, stack_trace, heap, &value)? + } + AssignmentType::LogicAnd => { + original_value.and(log, stack_trace, heap, &value)? + } + AssignmentType::LogicOr => { + original_value.or(log, stack_trace, heap, &value)? + } + AssignmentType::LogicXor => { + original_value.xor(log, stack_trace, heap, &value)? + } + AssignmentType::Add => { + original_value.addition(log, stack_trace, heap, &value)? } - AssignmentType::LogicAnd => original_value.and(log, stack_trace, &value)?, - AssignmentType::LogicOr => original_value.or(log, stack_trace, &value)?, - AssignmentType::LogicXor => original_value.xor(log, stack_trace, &value)?, - AssignmentType::Add => original_value.addition(log, stack_trace, &value)?, AssignmentType::Sub => { - original_value.subtraction(log, stack_trace, &value)? + original_value.subtraction(log, stack_trace, heap, &value)? } AssignmentType::Exponent => { - original_value.exponent(log, stack_trace, &value)? + original_value.exponent(log, stack_trace, heap, &value)? } AssignmentType::Multiply => { - original_value.multiply(log, stack_trace, &value)? + original_value.multiply(log, stack_trace, heap, &value)? } AssignmentType::IntegerDivision => { - original_value.floor_divide(log, stack_trace, &value)? + original_value.floor_divide(log, stack_trace, heap, &value)? } AssignmentType::Division => { - original_value.divide(log, stack_trace, &value)? + original_value.divide(log, stack_trace, heap, &value)? } AssignmentType::LeftShift => { - original_value.left_shift(log, stack_trace, &value)? + original_value.left_shift(log, stack_trace, heap, &value)? } AssignmentType::RightShift => { - original_value.right_shift(log, stack_trace, &value)? + original_value.right_shift(log, stack_trace, heap, &value)? } }; - *original_value = new_value; + original_value.drop(heap); + find_value_mut( + log, + stack_trace, + stack, + heap, + path.iter(), + |original_value| { + std::mem::swap(original_value, &mut new_value); + }, + )?; + new_value.drop(heap); Ok(values::Void.into()) } else { @@ -334,19 +480,20 @@ fn execute_statement( } } compile::Statement::Let(ast_node) => { - let value = execute_expression(log, stack_trace, stack, &ast_node.node.value)?; + let value = + execute_expression(log, stack_trace, stack, heap, &ast_node.node.value)?; stack.insert_value(&ast_node.node.to_assign.node, value); Ok(values::Void.into()) } compile::Statement::For(ast_node) => todo!(), compile::Statement::Expression(ast_node) => { - execute_expression(log, stack_trace, stack, ast_node) + execute_expression(log, stack_trace, stack, heap, ast_node) } compile::Statement::ClosedExpression(ast_node) => { // It's the same as a normal statement, but we eat the result instead of returning // it. - execute_expression(log, stack_trace, stack, &ast_node.node.expression) + execute_expression(log, stack_trace, stack, heap, &ast_node.node.expression) .map(|_value| values::Void.into()) } }, @@ -370,177 +517,151 @@ impl Display for AssignmentTypeMissmatch { } } +#[cfg(test)] +pub(crate) fn test_run(input: &str) -> ExpressionResult<(Value, Heap)> { + let root = compile::full_compile(input); + let mut heap = Heap::default(); + let prelude = build_prelude(&mut heap); + let mut stack = Stack::new(prelude); + + let result = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut stack, + &mut heap, + &root, + ); + stack.drop_prelude(&mut heap); + let result = result?; + + Ok((result, heap)) +} + #[cfg(test)] mod test { + use std::sync::Arc; + use super::*; #[test] fn none_type() { - let root = compile::full_compile("test_file.ccm", "()"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("~").unwrap().0; assert_eq!(product, values::Void.into()); } #[test] fn default_type() { - let root = compile::full_compile("test_file.ccm", "default"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("default").unwrap().0; assert_eq!(product, values::DefaultValue.into()); } #[test] fn boolean_type() { - let root = compile::full_compile("test_file.ccm", "true"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("true").unwrap().0; assert_eq!(product, values::Boolean(true).into()); } #[test] fn signed_integer_type() { - let root = compile::full_compile("test_file.ccm", "5i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("5i").unwrap().0; assert_eq!(product, values::SignedInteger::from(5).into()); } #[test] fn unsigned_integer_type() { - let root = compile::full_compile("test_file.ccm", "5u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("5u").unwrap().0; assert_eq!(product, values::UnsignedInteger::from(5).into()); } #[test] fn empty_block() { - let root = compile::full_compile("test_file.ccm", "{}"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("{}").unwrap().0; assert_eq!(product, values::Void.into()); } #[test] fn block_open_expression_statement() { - let root = compile::full_compile("test_file.ccm", "{ 5u }"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("{ 5u }").unwrap().0; assert_eq!(product, values::UnsignedInteger::from(5).into()); } #[test] fn block_closed_expression_statement() { - let root = compile::full_compile("test_file.ccm", "{ 5u; }"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("{ 5u; }").unwrap().0; assert_eq!(product, values::Void.into()); } #[test] fn block_recursive_blocks() { - let root = compile::full_compile("test_file.ccm", "{ { 5u } }"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("{ { 5u } }").unwrap().0; assert_eq!(product, values::UnsignedInteger::from(5).into()); } #[test] fn let_statement() { - let root = compile::full_compile("test_file.ccm", "{ let value = 5u; value }"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("{ let value = 5u; value }").unwrap().0; assert_eq!(product, values::UnsignedInteger::from(5).into()); } #[test] fn assign_statement() { - let root = compile::full_compile("test_file.ccm", "{ let value = 5u; value = 4u; value }"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("{ let value = 5u; value = 4u; value }").unwrap().0; assert_eq!(product, values::UnsignedInteger::from(4).into()); } #[test] fn assign_statement_with_wrong_type() { // Fails because of a type mismatch. - let root = compile::full_compile("test_file.ccm", "{ let value = 5u; value = 4i; value }"); - execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap_err(); + test_run("{ let value = 5u; value = 4i; value }").unwrap_err(); } #[test] fn parenthesis() { // Fails because of a type mismatch. - let root = compile::full_compile("test_file.ccm", "(1i + 2i) * 3i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("(1i + 2i) * 3i").unwrap().0; assert_eq!(product, values::SignedInteger::from(9).into()); } + + #[test] + fn struct_definition() { + let product = test_run("(name: std.types.Void = ~, ...)").unwrap().0; + assert_eq!( + product, + values::ValueType::Dictionary(values::StructDefinition { + members: Arc::new(vec![values::StructMember { + name: "name".into(), + ty: ValueType::Void, + default: Some(Value::Void(values::Void)) + }]), + variadic: true + }) + .into() + ); + } + + #[test] + fn nested_value_access() { + let product = test_run("{ let dictionary = (a = (b = 23u)); dictionary.a.b }") + .unwrap() + .0; + assert_eq!(product, values::UnsignedInteger::from(23).into()); + } + + #[test] + fn nested_value_assignment() { + let product = + test_run("{ let dictionary = (a = (b = 23u)); dictionary.a.b = 32u; dictionary.a.b }") + .unwrap() + .0; + assert_eq!(product, values::UnsignedInteger::from(32).into()); + } + + // #[test] + // fn nested_value_creation() { + // let product = + // test_run("{ let dictionary = (a = ()); dictionary.a.b = 32u; dictionary.a.b }") + // .unwrap() + // .0; + // assert_eq!(product, values::UnsignedInteger::from(32).into()); + // } } diff --git a/crates/interpreter/src/execution/stack.rs b/crates/interpreter/src/execution/stack.rs index 79c0ecd..30146f2 100644 --- a/crates/interpreter/src/execution/stack.rs +++ b/crates/interpreter/src/execution/stack.rs @@ -21,7 +21,8 @@ use crate::compile::SourceReference; use super::{ errors::{ErrorType, ExpressionResult, Raise}, logging::LocatedStr, - values::Value, + values::{Object, ObjectClone, Value}, + Heap, }; use compact_str::CompactString; use std::{collections::HashMap, fmt::Display}; @@ -41,27 +42,15 @@ struct Scope { #[derive(Debug)] pub struct Stack { scopes: Vec, + prelude: HashMap, active_scope: usize, } -impl Default for Stack { - fn default() -> Self { - Self { - scopes: vec![Scope { - ty: ScopeType::Isolated, - - // TODO we should load the standard environment. - variables: HashMap::new(), - }], - active_scope: 0, - } - } -} - macro_rules! generate_variable_getter { - ($self:ident, $stack_trace: ident, $name:ident, $iter:ident, $get:ident, $mutable:ident) => {{ + ($self:ident, $stack_trace: ident, $name:ident, $iter:ident, $get:ident) => {{ let mut scope_iterator = $self.scopes[..=$self.active_scope].$iter().rev(); + // Search the stack for the thing. for scope in &mut scope_iterator { if let Some(value) = scope.variables.$get($name.string) { return Ok(value); @@ -69,6 +58,7 @@ macro_rules! generate_variable_getter { match &scope.ty { // If this scope is isolated, then we should not continue searching up the stack. + // Skip to the prelude. ScopeType::Isolated => { break; } @@ -76,10 +66,16 @@ macro_rules! generate_variable_getter { } } - NotInScopeError { + // See if we can find it in the prelude. + if let Some(value) = $self.prelude.$get($name.string) { + return Ok(value); + } + + // We couldn't find it. + Err(NotInScopeError { variable_name: $name.string.to_string(), } - .raise_with_line($stack_trace, $name.location.clone()) + .to_error($stack_trace.iter().chain([&$name.location]))) }}; } @@ -101,25 +97,44 @@ impl Display for NotInScopeError { } impl Stack { + pub fn new(prelude: HashMap) -> Self { + Self { + scopes: vec![Scope { + ty: ScopeType::Isolated, + variables: HashMap::new(), + }], + prelude, + active_scope: 0, + } + } + + pub fn drop_prelude(&mut self, heap: &mut Heap) { + for (_name, object) in self.prelude.drain() { + object.drop(heap); + } + } + pub fn scope<'s, B, R>( &mut self, + heap: &mut Heap, variables_to_copy: impl IntoIterator>, stack_trace: &mut Vec, mode: ScopeType, block: B, ) -> ExpressionResult where - B: FnOnce(&mut Self, &mut Vec) -> R, + B: FnOnce(&mut Self, &mut Vec, &mut Heap) -> R, { - self.push_scope(variables_to_copy.into_iter(), stack_trace, mode)?; - let result = block(self, stack_trace); - self.pop_scope(); + self.push_scope(heap, variables_to_copy.into_iter(), stack_trace, mode)?; + let result = block(self, stack_trace, heap); + self.pop_scope(heap); Ok(result) } fn push_scope<'s>( &mut self, + heap: &mut Heap, variables_to_copy: impl Iterator>, stack_trace: &[SourceReference], mode: ScopeType, @@ -135,7 +150,9 @@ impl Stack { self.scopes[next_scope_index].ty = mode; for variable in variables_to_copy { - let value = self.get_variable(stack_trace, &variable)?.clone(); + let value = self + .get_variable(stack_trace, &variable)? + .object_clone(heap); self.scopes[next_scope_index] .variables .insert(variable.string.into(), value); @@ -146,8 +163,10 @@ impl Stack { Ok(()) } - fn pop_scope(&mut self) { - self.scopes[self.active_scope].variables.clear(); + fn pop_scope(&mut self, heap: &mut Heap) { + for (_name, value) in self.scopes[self.active_scope].variables.drain() { + value.drop(heap); + } self.active_scope -= 1; } @@ -165,7 +184,7 @@ impl Stack { name: S, ) -> ExpressionResult<&Value> { let name = name.into(); - generate_variable_getter!(self, stack_trace, name, iter, get, immutable) + generate_variable_getter!(self, stack_trace, name, iter, get) } pub fn get_variable_mut<'s, S: Into>>( @@ -174,6 +193,6 @@ impl Stack { name: S, ) -> ExpressionResult<&mut Value> { let name = name.into(); - generate_variable_getter!(self, stack_trace, name, iter_mut, get_mut, mutable) + generate_variable_getter!(self, stack_trace, name, iter_mut, get_mut) } } diff --git a/crates/interpreter/src/execution/standard_environment.rs b/crates/interpreter/src/execution/standard_environment.rs new file mode 100644 index 0000000..252cdf3 --- /dev/null +++ b/crates/interpreter/src/execution/standard_environment.rs @@ -0,0 +1,45 @@ +use std::collections::HashMap; + +use common_data_types::Dimension; + +use super::{ + heap::Heap, + values::{Dictionary, Value, ValueType}, +}; + +/// Builds standard library. +pub fn build_prelude(heap: &mut Heap) -> HashMap { + let global = HashMap::from([("std".into(), build_std(heap).into())]); + + global +} + +fn build_std(heap: &mut Heap) -> Dictionary { + let std = HashMap::from([("types".into(), build_types(heap).into())]); + Dictionary::from_hashmap(heap, std) +} + +/// Adds library for type safety. +fn build_types(heap: &mut Heap) -> Dictionary { + let types = HashMap::from_iter( + [ + ("Void".into(), ValueType::Void.into()), + ("Bool".into(), ValueType::Boolean.into()), + ("SInt".into(), ValueType::SignedInteger.into()), + ("UInt".into(), ValueType::UnsignedInteger.into()), + ("ValueType".into(), ValueType::ValueType.into()), + // TODO we'll need a function to build custom function signature types. + // ("Function".into(), ValueType::Closure(Arc)), + + // TODO add a function to build custom unit types. + ] + .into_iter() + .chain(build_dimension_types()), + ); + Dictionary::from_hashmap(heap, types) +} + +fn build_dimension_types() -> impl Iterator { + units::list_named_dimensions() + .map(|(name, dimension)| (name.into(), ValueType::Scalar(dimension).into())) +} diff --git a/crates/interpreter/src/execution/values/boolean.rs b/crates/interpreter/src/execution/values/boolean.rs index 22bdb6f..656b73d 100644 --- a/crates/interpreter/src/execution/values/boolean.rs +++ b/crates/interpreter/src/execution/values/boolean.rs @@ -16,7 +16,10 @@ * program. If not, see . */ -use crate::{compile::SourceReference, execution::logging::RuntimeLog}; +use crate::{ + compile::SourceReference, + execution::{heap::Heap, logging::RuntimeLog}, +}; use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; @@ -32,6 +35,7 @@ impl Object for Boolean { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -41,6 +45,7 @@ impl Object for Boolean { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -51,6 +56,7 @@ impl Object for Boolean { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -61,6 +67,7 @@ impl Object for Boolean { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -71,6 +78,7 @@ impl Object for Boolean { &self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], + _heap: &Heap, ) -> ExpressionResult { Ok(Self(!self.0).into()) } diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 5ce5819..49d6a2d 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -20,26 +20,23 @@ use std::{fmt::Display, sync::Arc}; use fortuples::fortuples; -use crate::compile::{AstNode, ClosureDefinition, Expression, SourceReference}; +use crate::{ + compile::{AstNode, ClosureDefinition, Expression}, + execution::Heap, +}; -use super::{Object, StaticTypeName, Value, ValueType}; +use super::{Object, ObjectClone, StaticTypeName, StructDefinition, Value, ValueType}; -#[derive(Debug, Clone, Hash, Eq, PartialEq)] -pub struct Argument { - pub source: SourceReference, - pub value: Value, -} - -#[derive(Debug, Clone, Hash, Eq, PartialEq)] +#[derive(Debug, Eq, PartialEq)] pub struct CapturedValue { pub name: String, pub value: Value, } /// Signature of a closure, used for type comparison. -#[derive(Debug, Clone, Hash, Eq, PartialEq)] +#[derive(Debug, Eq, PartialEq)] pub struct Signature { - argument_type: ValueType, + argument_type: StructDefinition, return_type: ValueType, } @@ -51,14 +48,14 @@ impl Display for Signature { /// Closures are immutable, meaning that all copies can reference the same data. /// This is that common data. -#[derive(Debug, Clone, Hash, Eq, PartialEq)] +#[derive(Debug, Eq, PartialEq)] struct UserClosureInternals { signature: Arc, captured_values: Vec, expression: Arc, } -#[derive(Debug, Clone, Hash, Eq, PartialEq)] +#[derive(Debug, Eq, PartialEq)] pub struct UserClosure { data: Arc, } @@ -81,6 +78,12 @@ impl StaticTypeName for UserClosure { } } +impl ObjectClone for UserClosure { + fn object_clone(&self, _heap: &Heap) -> Value { + todo!() + } +} + // impl std::fmt::Debug for UserClosure { // fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { // f.debug_struct("UserClosure") diff --git a/crates/interpreter/src/execution/values/default.rs b/crates/interpreter/src/execution/values/default.rs index cf401b0..d70fac1 100644 --- a/crates/interpreter/src/execution/values/default.rs +++ b/crates/interpreter/src/execution/values/default.rs @@ -18,7 +18,7 @@ use super::{value_type::ValueType, Object, StaticTypeName}; -#[derive(Debug, Clone, Eq, PartialEq, Hash)] +#[derive(Debug, Eq, Clone, PartialEq, Hash)] pub struct DefaultValue; impl Object for DefaultValue { diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index fff68fd..019b36a 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -15,3 +15,190 @@ * You should have received a copy of the GNU Affero General Public License along with this * program. If not, see . */ + +use std::{collections::HashMap, fmt::Display, sync::Arc}; + +use hashable_map::HashableMap; + +use crate::{ + compile::{AstNode, DictionaryConstruction, SourceReference}, + execute_expression, + execution::{ + errors::{ErrorType, ExpressionResult, Raise as _}, + heap::{HeapKey, HeapStorage}, + logging::RuntimeLog, + stack::Stack, + Heap, + }, +}; + +use super::{ + MissingAttributeError, Object, ObjectClone, StaticTypeName, StructDefinition, StructMember, + Value, ValueType, +}; + +pub type DictionaryStorage = HeapStorage>; + +#[derive(Debug, Eq, PartialEq)] +pub struct Dictionary { + /// The actual storage to the dictionary lives in the heap, and we store a reference to it. + key: HeapKey, +} + +impl Object for Dictionary { + fn get_type(&self) -> ValueType { + static MEMBERS: std::sync::OnceLock>> = std::sync::OnceLock::new(); + + ValueType::Dictionary(StructDefinition { + members: MEMBERS.get_or_init(|| Arc::new(vec![])).clone(), + variadic: true, + }) + } + + fn get_attribute_ref<'h>( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + heap: &'h Heap, + attribute: &str, + ) -> ExpressionResult<&'h Value> { + let members = heap.dictionaries.get(&self.key); + if let Some(member) = members.get(attribute) { + Ok(member) + } else { + Err(MissingAttributeError { + name: attribute.into(), + } + .to_error(stack_trace)) + } + } + fn get_attribute_mut<'h>( + &mut self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + heap: &'h mut Heap, + attribute: &str, + ) -> ExpressionResult<&'h mut Value> { + let members = heap.dictionaries.get_mut(&self.key); + if let Some(member) = members.get_mut(attribute) { + Ok(member) + } else { + Err(MissingAttributeError { + name: attribute.into(), + } + .to_error(stack_trace)) + } + } + + fn drop(self, heap: &mut Heap) { + if let Some(mut internal_storage) = heap.dictionaries.dereference_allocation(self.key) { + // That was the last reference to this dictionary. + // We need to drop all the content. + for (_name, value) in internal_storage.drain() { + value.drop(heap); + } + } + } +} + +impl ObjectClone for Dictionary { + fn object_clone(&self, heap: &Heap) -> Value { + // Get another reference to the allocation and return that. + let key = heap.dictionaries.reference_allocation(&self.key); + Self { key }.into() + } +} + +impl StaticTypeName for Dictionary { + fn static_type_name() -> &'static str { + "Dictionary" + } +} + +impl Dictionary { + pub fn from_hashmap(heap: &mut Heap, map: HashMap) -> Self { + // HashableMap is just a wrapper around HashMap, so this has no additional cost. + let content = HashableMap::from(map); + + let key = heap.dictionaries.new_allocation(content); + + Self { key } + } + + pub fn from_ast( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + heap: &mut Heap, + ast_node: &AstNode, + ) -> ExpressionResult { + let mut members = HashMap::with_capacity(ast_node.node.assignments.len()); + + for assignment in ast_node.node.assignments.iter() { + let name = assignment.node.name.node.clone(); + let value = + execute_expression(log, stack_trace, stack, heap, &assignment.node.assignment)?; + + if let Some(already_occupied) = members.insert(name, value) { + // That's an error. We need to drop all that data and then report an error. + already_occupied.drop(heap); + + for (_name, value) in members { + value.drop(heap); + } + + return Err(DuplicateMemberError { + name: assignment.node.name.node.clone(), + } + .to_error(stack_trace.iter().chain([&assignment.reference]))); + } + } + + Ok(Self::from_hashmap(heap, members)) + } +} + +#[derive(Debug, Eq, PartialEq)] +pub struct DuplicateMemberError { + pub name: String, +} + +impl ErrorType for DuplicateMemberError {} + +impl Display for DuplicateMemberError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "Dictionary was created with duplicate member: {}", + self.name + ) + } +} + +#[cfg(test)] +mod test { + use super::*; + use crate::execution::{test_run, values::Void}; + + #[test] + fn build_dictionary() { + let (product, mut heap) = test_run("(void = ~)").unwrap(); + let product_heap = heap.dictionaries.get(&product.as_dictionary().unwrap().key); + let expected = HashableMap::from(HashMap::from_iter([("void".to_string(), Void.into())])); + + assert_eq!(product_heap, &expected); + + product.drop(&mut heap); + } + + #[test] + fn duplicate_entries() { + // Two values of the same name is not allowed. + test_run("(void = (), void = ())").unwrap_err(); + } + + #[test] + fn non_existant_member() { + test_run("(void = ()).does_not_exist").unwrap_err(); + } +} diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index 1af52a0..279509a 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -30,6 +30,7 @@ use crate::{ compile::SourceReference, execution::{ errors::{ExpressionResult, GenericFailure, Raise}, + heap::Heap, logging::RuntimeLog, }, }; @@ -77,6 +78,7 @@ where &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -86,6 +88,7 @@ where &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -95,6 +98,7 @@ where &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -105,6 +109,7 @@ where &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -114,6 +119,7 @@ where &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -129,6 +135,7 @@ where &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -144,6 +151,7 @@ where &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -159,6 +167,7 @@ where &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -173,14 +182,16 @@ where &self, log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + heap: &Heap, rhs: &Value, ) -> ExpressionResult { - self.divide(log, stack_trace, rhs) + self.divide(log, stack_trace, heap, rhs) } fn exponent( &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -205,6 +216,7 @@ where &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -214,6 +226,7 @@ where &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -223,6 +236,7 @@ where &self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], + _heap: &Heap, ) -> ExpressionResult { Ok(self.clone().into()) } @@ -230,6 +244,7 @@ where &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, ) -> ExpressionResult { self.0.neg(stack_trace).into() } @@ -237,6 +252,7 @@ where &self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], + _heap: &Heap, ) -> ExpressionResult { Ok(Self(!self.0).into()) } @@ -277,11 +293,11 @@ impl GetType for u64 { impl Neg for u64 { fn neg(&self, stack_trace: &[SourceReference]) -> ExpressionResult { - super::UnsupportedOperationError { + Err(super::UnsupportedOperationError { type_name: UnsignedInteger::static_type_name().into(), operation_name: "negate", } - .raise(stack_trace) + .to_error(stack_trace)) } } @@ -296,691 +312,272 @@ pub type UnsignedInteger = Integer; #[cfg(test)] mod test { - use crate::{ - compile, - execution::{execute_expression, stack::Stack, values::Boolean}, - }; + use crate::execution::{test_run, values::Boolean}; use super::*; #[test] fn signed_bit_or() { - let root = compile::full_compile("test_file.ccm", "0xAAi | 0x55i"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("0xAAi | 0x55i").unwrap().0; assert_eq!(product, SignedInteger::from(0xFF).into()); } #[test] fn signed_bit_and() { - let root = compile::full_compile("test_file.ccm", "0xFFi & 0x0Fi"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("0xFFi & 0x0Fi").unwrap().0; assert_eq!(product, SignedInteger::from(0x0F).into()); } #[test] fn signed_bit_xor() { - let root = compile::full_compile("test_file.ccm", "0xF0i ^ 0xFFi"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("0xF0i ^ 0xFFi").unwrap().0; assert_eq!(product, SignedInteger::from(0x0F).into()); } #[test] fn signed_cmp_greater_than() { - let root = compile::full_compile("test_file.ccm", "3i > 2i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3i > 2i").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "2i > 3i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("2i > 3i").unwrap().0; assert_eq!(product, Boolean(false).into()); } #[test] fn signed_cmp_greater_than_eq() { - let root = compile::full_compile("test_file.ccm", "3i >= 2i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3i >= 2i").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "3i >= 3i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3i >= 3i").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "2i >= 3i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("2i >= 3i").unwrap().0; assert_eq!(product, Boolean(false).into()); } #[test] fn signed_cmp_eq() { - let root = compile::full_compile("test_file.ccm", "3i == 3i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3i == 3i").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "3i == 2i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3i == 2i").unwrap().0; assert_eq!(product, Boolean(false).into()); - let root = compile::full_compile("test_file.ccm", "3i != 3i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3i != 3i").unwrap().0; assert_eq!(product, Boolean(false).into()); - let root = compile::full_compile("test_file.ccm", "3i != 2i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3i != 2i").unwrap().0; assert_eq!(product, Boolean(true).into()); } #[test] fn signed_cmp_less_than_eq() { - let root = compile::full_compile("test_file.ccm", "3i <= 2i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3i <= 2i").unwrap().0; assert_eq!(product, Boolean(false).into()); - let root = compile::full_compile("test_file.ccm", "3i <= 3i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3i <= 3i").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "2i <= 3i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("2i <= 3i").unwrap().0; assert_eq!(product, Boolean(true).into()); } #[test] fn signed_cmp_less_than() { - let root = compile::full_compile("test_file.ccm", "3i < 2i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3i < 2i").unwrap().0; assert_eq!(product, Boolean(false).into()); - let root = compile::full_compile("test_file.ccm", "2i < 3i"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("2i < 3i").unwrap().0; assert_eq!(product, Boolean(true).into()); } #[test] fn signed_addition() { - let root = compile::full_compile("test_file.ccm", "3i + 2i"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3i + 2i").unwrap().0; assert_eq!(product, SignedInteger::from(5).into()); } #[test] fn signed_subtraction() { - let root = compile::full_compile("test_file.ccm", "3i - 2i"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3i - 2i").unwrap().0; assert_eq!(product, SignedInteger::from(1).into()); } #[test] fn signed_multiply() { - let root = compile::full_compile("test_file.ccm", "3i * 2i"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3i * 2i").unwrap().0; assert_eq!(product, SignedInteger::from(6).into()); } #[test] fn signed_divide() { - let root = compile::full_compile("test_file.ccm", "6i / 2i"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6i / 2i").unwrap().0; assert_eq!(product, SignedInteger::from(3).into()); } #[test] fn signed_floor_divide() { - let root = compile::full_compile("test_file.ccm", "6i // 2i"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6i // 2i").unwrap().0; assert_eq!(product, SignedInteger::from(3).into()); } #[test] fn signed_exponent() { - let root = compile::full_compile("test_file.ccm", "6i ** 3i"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6i ** 3i").unwrap().0; assert_eq!(product, SignedInteger::from(216).into()); } #[test] fn signed_shift_left() { - let root = compile::full_compile("test_file.ccm", "0x0Fi << 4i"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("0x0Fi << 4i").unwrap().0; assert_eq!(product, SignedInteger::from(0xF0).into()); } #[test] fn signed_shift_right() { - let root = compile::full_compile("test_file.ccm", "0xF0i >> 4i"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("0xF0i >> 4i").unwrap().0; assert_eq!(product, SignedInteger::from(0x0F).into()); } #[test] fn signed_unary_plus() { - let root = compile::full_compile("test_file.ccm", "+3i"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("+3i").unwrap().0; assert_eq!(product, SignedInteger::from(3).into()); } #[test] fn signed_unary_minus() { - let root = compile::full_compile("test_file.ccm", "-3i"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("-3i").unwrap().0; assert_eq!(product, SignedInteger::from(-3).into()); } #[test] fn signed_unary_bit_not() { - let root = compile::full_compile("test_file.ccm", "!0xAAi"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("!0xAAi").unwrap().0; assert_eq!(product, SignedInteger::from(!0xAA).into()); } #[test] fn unsigned_bit_or() { - let root = compile::full_compile("test_file.ccm", "0xAAu | 0x55u"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("0xAAu | 0x55u").unwrap().0; assert_eq!(product, UnsignedInteger::from(0xFF).into()); } #[test] fn unsigned_bit_and() { - let root = compile::full_compile("test_file.ccm", "0xFFu & 0x0Fu"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("0xFFu & 0x0Fu").unwrap().0; assert_eq!(product, UnsignedInteger::from(0x0F).into()); } #[test] fn unsigned_bit_xor() { - let root = compile::full_compile("test_file.ccm", "0xF0u ^ 0xFFu"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("0xF0u ^ 0xFFu").unwrap().0; assert_eq!(product, UnsignedInteger::from(0x0F).into()); } #[test] fn unsigned_cmp_greater_than() { - let root = compile::full_compile("test_file.ccm", "3u > 2u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3u > 2u").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "2u > 3u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("2u > 3u").unwrap().0; assert_eq!(product, Boolean(false).into()); } #[test] fn unsigned_cmp_greater_than_eq() { - let root = compile::full_compile("test_file.ccm", "3u >= 2u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3u >= 2u").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "3u >= 3u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3u >= 3u").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "2u >= 3u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("2u >= 3u").unwrap().0; assert_eq!(product, Boolean(false).into()); } #[test] fn unsigned_cmp_eq() { - let root = compile::full_compile("test_file.ccm", "3u == 3u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3u == 3u").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "3u == 2u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3u == 2u").unwrap().0; assert_eq!(product, Boolean(false).into()); - let root = compile::full_compile("test_file.ccm", "3u != 3u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3u != 3u").unwrap().0; assert_eq!(product, Boolean(false).into()); - let root = compile::full_compile("test_file.ccm", "3u != 2u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3u != 2u").unwrap().0; assert_eq!(product, Boolean(true).into()); } #[test] fn unsigned_cmp_less_than_eq() { - let root = compile::full_compile("test_file.ccm", "3u <= 2u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3u <= 2u").unwrap().0; assert_eq!(product, Boolean(false).into()); - let root = compile::full_compile("test_file.ccm", "3u <= 3u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3u <= 3u").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "2u <= 3u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("2u <= 3u").unwrap().0; assert_eq!(product, Boolean(true).into()); } #[test] fn unsigned_cmp_less_than() { - let root = compile::full_compile("test_file.ccm", "3u < 2u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3u < 2u").unwrap().0; assert_eq!(product, Boolean(false).into()); - let root = compile::full_compile("test_file.ccm", "2u < 3u"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("2u < 3u").unwrap().0; assert_eq!(product, Boolean(true).into()); } #[test] fn unsigned_addition() { - let root = compile::full_compile("test_file.ccm", "3u + 2u"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3u + 2u").unwrap().0; assert_eq!(product, UnsignedInteger::from(5).into()); } #[test] fn unsigned_subtraction() { - let root = compile::full_compile("test_file.ccm", "3u - 2u"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3u - 2u").unwrap().0; assert_eq!(product, UnsignedInteger::from(1).into()); } #[test] fn unsigned_multiply() { - let root = compile::full_compile("test_file.ccm", "3u * 2u"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3u * 2u").unwrap().0; assert_eq!(product, UnsignedInteger::from(6).into()); } #[test] fn unsigned_divide() { - let root = compile::full_compile("test_file.ccm", "6u / 2u"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6u / 2u").unwrap().0; assert_eq!(product, UnsignedInteger::from(3).into()); } #[test] fn unsigned_floor_divide() { - let root = compile::full_compile("test_file.ccm", "6u // 2u"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6u // 2u").unwrap().0; assert_eq!(product, UnsignedInteger::from(3).into()); } #[test] fn unsigned_exponent() { - let root = compile::full_compile("test_file.ccm", "6u ** 3u"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6u ** 3u").unwrap().0; assert_eq!(product, UnsignedInteger::from(216).into()); } #[test] fn unsigned_shift_left() { - let root = compile::full_compile("test_file.ccm", "0x0Fu << 4u"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("0x0Fu << 4u").unwrap().0; assert_eq!(product, UnsignedInteger::from(0xF0).into()); } #[test] fn unsigned_shift_right() { - let root = compile::full_compile("test_file.ccm", "0xF0u >> 4u"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("0xF0u >> 4u").unwrap().0; assert_eq!(product, UnsignedInteger::from(0x0F).into()); } #[test] fn unsigned_unary_plus() { - let root = compile::full_compile("test_file.ccm", "+3u"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("+3u").unwrap().0; assert_eq!(product, UnsignedInteger::from(3).into()); } #[test] fn unsigned_unary_minus() { - let root = compile::full_compile("test_file.ccm", "-3u"); - - execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap_err(); + test_run("-3u").unwrap_err(); } #[test] fn unsigned_unary_bit_not() { - let root = compile::full_compile("test_file.ccm", "!0xAAu"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("!0xAAu").unwrap().0; assert_eq!(product, UnsignedInteger::from(!0xAA).into()); } } diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 7c5afe9..7e8c434 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -19,13 +19,15 @@ use std::{borrow::Cow, cmp::Ordering, fmt::Display}; use enum_dispatch::enum_dispatch; -use enum_downcast::{AsVariant, EnumDowncast}; +use enum_downcast::{AsVariant, EnumDowncast, IntoVariant}; +use unwrap_enum::EnumAs; use crate::compile::SourceReference; use super::{ errors::{ErrorType, ExpressionResult, Raise as _}, logging::RuntimeLog, + Heap, }; mod void; @@ -44,10 +46,13 @@ mod scalar; pub use scalar::Scalar; mod closure; -pub use closure::{Argument, UserClosure}; +pub use closure::UserClosure; + +mod dictionary; +pub use dictionary::{Dictionary, DictionaryStorage}; mod value_type; -pub use value_type::ValueType; +pub use value_type::{StructDefinition, StructMember, ValueType}; pub trait StaticTypeName { /// Provides the type name without having an instance of the object. @@ -79,16 +84,29 @@ impl UnsupportedOperationError { stack_trace: &[SourceReference], operation_name: &'static str, ) -> ExpressionResult { - Self { + Err(Self { type_name: object.type_name(), operation_name, } - .raise(stack_trace) + .to_error(stack_trace)) + } +} + +#[derive(Debug, Eq, PartialEq)] +struct MissingAttributeError { + pub name: String, +} + +impl ErrorType for MissingAttributeError {} + +impl Display for MissingAttributeError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "Object does not contain the attribute `{}`", self.name) } } #[enum_dispatch] -pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { +pub trait Object: StaticTypeName + Sized + Eq + PartialEq + ObjectClone { fn get_type(&self) -> ValueType; // fn format( @@ -110,6 +128,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "logical and") @@ -118,6 +137,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "logical or") @@ -126,6 +146,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "logical xor") @@ -134,6 +155,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "binary and") @@ -142,6 +164,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "binary or") @@ -150,6 +173,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "binary xor") @@ -158,6 +182,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "compare") @@ -166,14 +191,19 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + heap: &Heap, rhs: &Value, ) -> ExpressionResult { - Ok(matches!(self.cmp(log, stack_trace, rhs)?, Ordering::Equal)) + Ok(matches!( + self.cmp(log, stack_trace, heap, rhs)?, + Ordering::Equal + )) } fn addition( &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "addition") @@ -182,6 +212,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "subtraction") @@ -190,6 +221,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "multiply") @@ -198,6 +230,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "divide") @@ -206,6 +239,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "floor_divide") @@ -214,6 +248,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "exponent") @@ -222,6 +257,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "left shift") @@ -230,23 +266,38 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _rhs: &Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "right shift") } - // fn attribute( - // &self, - // _log: &mut dyn RuntimeLog, - // _stack_trace: &[SourceReference], - // attribute: &S, - // ) -> OperatorResult { - // Err(Failure::UnknownAttribute(attribute.clone())) - // } + fn get_attribute_ref<'h>( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + _heap: &'h Heap, + attribute: &str, + ) -> ExpressionResult<&'h Value> { + Err(MissingAttributeError { + name: attribute.into(), + } + .to_error(stack_trace)) + } + fn get_attribute_mut<'h>( + &mut self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + _heap: &'h mut Heap, + _attribute: &str, + ) -> ExpressionResult<&'h mut Value> { + UnsupportedOperationError::raise(self, stack_trace, "set attribute") + } fn call( &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - argument: Value, + _heap: &Heap, + _argument: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "call") } @@ -254,6 +305,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, _index: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "index") @@ -262,6 +314,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, ) -> ExpressionResult>> { UnsupportedOperationError::raise(self, stack_trace, "iterate") } @@ -269,6 +322,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "unary plus") } @@ -276,6 +330,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "unary minus") } @@ -283,6 +338,7 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "unary not") } @@ -294,10 +350,26 @@ pub trait Object: StaticTypeName + Sized + std::hash::Hash + Eq + PartialEq { // ) -> OperatorResult { // UnsupportedOperationError::raise(self, stack_trace, "export") // } + + fn drop(self, _heap: &mut Heap) {} +} + +#[enum_dispatch] +pub trait ObjectClone { + fn object_clone(&self, heap: &Heap) -> Value; +} + +impl ObjectClone for O +where + O: Object + Clone + Into, +{ + fn object_clone(&self, _heap: &Heap) -> Value { + self.clone().into() + } } -#[enum_dispatch(Object)] -#[derive(Debug, Hash, Eq, PartialEq, EnumDowncast, Clone)] +#[enum_dispatch(Object, ObjectClone)] +#[derive(Debug, Eq, PartialEq, EnumDowncast, EnumAs)] pub enum Value { Void, Default(DefaultValue), @@ -306,8 +378,8 @@ pub enum Value { Boolean, Scalar, UserClosure, - // Structure(Structure), - // StructDefinition(StructDefinition), + ValueType, + Dictionary(Dictionary), // List(List), // String(SString), // Range(Range), @@ -359,26 +431,26 @@ impl Value { if let Some(value) = self.enum_downcast_ref() { Ok(value) } else { - DowncastError { + Err(DowncastError { expected: T::static_type_name().into(), got: self.type_name(), } - .raise(stack_trace) + .to_error(stack_trace)) } } pub fn downcast(self, stack_trace: &[SourceReference]) -> ExpressionResult where T: StaticTypeName, - Self: TryInto, + Self: IntoVariant, { - match self.try_into() { + match self.into_variant() { Ok(value) => Ok(value), - Err(original) => DowncastError { + Err(original) => Err(DowncastError { expected: T::static_type_name().into(), got: original.type_name(), } - .raise(stack_trace)?, + .to_error(stack_trace)), } } @@ -388,7 +460,7 @@ impl Value { ) -> ExpressionResult> where T: StaticTypeName, - Self: TryInto, + Self: IntoVariant, { match self { Self::Void(_) => Ok(None), diff --git a/crates/interpreter/src/execution/values/scalar.rs b/crates/interpreter/src/execution/values/scalar.rs index c4202b2..9f2140e 100644 --- a/crates/interpreter/src/execution/values/scalar.rs +++ b/crates/interpreter/src/execution/values/scalar.rs @@ -23,6 +23,7 @@ use crate::{ compile::SourceReference, execution::{ errors::{ExpressionResult, GenericFailure, Raise}, + heap::Heap, logging::RuntimeLog, }, }; @@ -184,6 +185,7 @@ impl Object for Scalar { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs = self.unpack_for_addition_or_subtraction(stack_trace, rhs)?; @@ -200,6 +202,7 @@ impl Object for Scalar { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs = self.unpack_for_addition_or_subtraction(stack_trace, rhs)?; @@ -216,6 +219,7 @@ impl Object for Scalar { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs = rhs.downcast_ref::(stack_trace)?; @@ -226,6 +230,7 @@ impl Object for Scalar { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs = rhs.downcast_ref::(stack_trace)?; @@ -236,6 +241,7 @@ impl Object for Scalar { &self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], + _heap: &Heap, ) -> ExpressionResult { Ok(self.clone().into()) } @@ -243,6 +249,7 @@ impl Object for Scalar { &self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], + _heap: &Heap, ) -> ExpressionResult { Ok(Self { value: -self.value, @@ -254,17 +261,18 @@ impl Object for Scalar { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _heap: &Heap, rhs: &Value, ) -> ExpressionResult { let rhs = rhs.downcast_ref::(stack_trace)?; if self.dimension == rhs.dimension { Ok(std::cmp::Ord::cmp(&self.value, &rhs.value)) } else { - DowncastError { + Err(DowncastError { expected: self.type_name(), got: rhs.type_name(), } - .raise(stack_trace) + .to_error(stack_trace)) } } // fn method_call( @@ -711,7 +719,7 @@ impl Scalar { if self.dimension.is_zero_dimension() { Ok(()) } else { - GenericFailure("Expected zero dimensional type").raise(stack_trace) + Err(GenericFailure("Expected zero dimensional type").to_error(stack_trace)) } } @@ -722,7 +730,7 @@ impl Scalar { if self.dimension.is_zero_dimension() { Ok(()) } else { - GenericFailure("Inverse trigonometric functions can only be used with zero dimensional types (Angles, Ratios)").raise(stack_trace) + Err(GenericFailure("Inverse trigonometric functions can only be used with zero dimensional types (Angles, Ratios)").to_error(stack_trace)) } } @@ -730,8 +738,10 @@ impl Scalar { if self.dimension.is_zero_dimension() && self.dimension.ratio_type_hint.is_angle() { Ok(()) } else { - GenericFailure("Trigonometric functions can only be used with angles") - .raise(stack_trace) + Err( + GenericFailure("Trigonometric functions can only be used with angles") + .to_error(stack_trace), + ) } } @@ -748,18 +758,18 @@ impl Scalar { if self.dimension == rhs.dimension { Ok(rhs) } else { - DowncastError { + Err(DowncastError { expected: self.type_name(), got: rhs.type_name(), } - .raise(stack_trace) + .to_error(stack_trace)) } } else { - DowncastError { + Err(DowncastError { expected: self.type_name(), got: rhs.type_name(), } - .raise(stack_trace) + .to_error(stack_trace)) } } } @@ -767,24 +777,13 @@ impl Scalar { #[cfg(test)] mod test { - use crate::{ - compile, execute_expression, - execution::{stack::Stack, values::Boolean}, - }; + use crate::execution::{test_run, values::Boolean}; use super::*; #[test] fn addition() { - let root = compile::full_compile("test_file.ccm", "3m + 2m"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3m + 2m").unwrap().0; assert_eq!( product, Scalar { @@ -797,15 +796,7 @@ mod test { #[test] fn subtraction() { - let root = compile::full_compile("test_file.ccm", "3m - 2m"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3m - 2m").unwrap().0; assert_eq!( product, Scalar { @@ -818,15 +809,7 @@ mod test { #[test] fn multiplication() { - let root = compile::full_compile("test_file.ccm", "3m * 2m"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("3m * 2m").unwrap().0; assert_eq!( product, Scalar { @@ -839,15 +822,7 @@ mod test { #[test] fn division() { - let root = compile::full_compile("test_file.ccm", "6'm^2' / 2m"); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6'm^2' / 2m").unwrap().0; assert_eq!( product, Scalar { @@ -860,167 +835,55 @@ mod test { #[test] fn comparisions() { - let root = compile::full_compile("test_file.ccm", "6m > 2m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6m > 2m").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "2m > 6m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("2m > 6m").unwrap().0; assert_eq!(product, Boolean(false).into()); - let root = compile::full_compile("test_file.ccm", "6m >= 2m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6m >= 2m").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "6m >= 6m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6m >= 6m").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "2m >= 6m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("2m >= 6m").unwrap().0; assert_eq!(product, Boolean(false).into()); - let root = compile::full_compile("test_file.ccm", "6m == 6m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6m == 6m").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "6m == 5m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6m == 5m").unwrap().0; assert_eq!(product, Boolean(false).into()); - let root = compile::full_compile("test_file.ccm", "6m <= 5m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6m <= 5m").unwrap().0; assert_eq!(product, Boolean(false).into()); - let root = compile::full_compile("test_file.ccm", "5m <= 5m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("5m <= 5m").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "5m <= 6m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("5m <= 6m").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "5m < 6m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("5m < 6m").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "6m < 6m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6m < 6m").unwrap().0; assert_eq!(product, Boolean(false).into()); - let root = compile::full_compile("test_file.ccm", "6m != 6m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6m != 6m").unwrap().0; assert_eq!(product, Boolean(false).into()); - let root = compile::full_compile("test_file.ccm", "6m != 5m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("6m != 5m").unwrap().0; assert_eq!(product, Boolean(true).into()); } #[test] fn conversions() { - let root = compile::full_compile("test_file.ccm", "1m + 100cm == 2m"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("1m + 100cm == 2m").unwrap().0; assert_eq!(product, Boolean(true).into()); - let root = compile::full_compile("test_file.ccm", "2m * 2m == 4'm^2'"); - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut Stack::default(), - &root, - ) - .unwrap(); + let product = test_run("2m * 2m == 4'm^2'").unwrap().0; assert_eq!(product, Boolean(true).into()); } } diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index de57c6c..c7afe6a 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -20,11 +20,17 @@ use std::{borrow::Cow, fmt::Display, sync::Arc}; use common_data_types::Dimension; use super::{ - closure::Signature as ClosureSignature, Boolean, DefaultValue, SignedInteger, StaticTypeName, - UnsignedInteger, Void, + closure::Signature as ClosureSignature, Boolean, DefaultValue, Object, SignedInteger, + StaticTypeName, UnsignedInteger, Value, Void, }; -#[derive(Debug, Hash, Eq, PartialEq, Clone)] +use crate::{ + compile::{self, AstNode, SourceReference}, + execute_expression, + execution::{errors::ExpressionResult, logging::RuntimeLog, stack::Stack, Heap}, +}; + +#[derive(Debug, Eq, PartialEq, Clone)] pub enum ValueType { Void, Default, @@ -33,6 +39,14 @@ pub enum ValueType { UnsignedInteger, Scalar(Dimension), Closure(Arc), + Dictionary(StructDefinition), + ValueType, +} + +impl From for ValueType { + fn from(value: StructDefinition) -> Self { + Self::Dictionary(value) + } } impl ValueType { @@ -45,8 +59,12 @@ impl ValueType { Self::UnsignedInteger => UnsignedInteger::static_type_name().into(), Self::Scalar(dimension) => units::get_dimension_name(dimension).into(), Self::Closure(signature) => format!("{}", signature).into(), + Self::Dictionary(definition) => format!("{}", definition).into(), + Self::ValueType => "ValueType".into(), } } + + // TODO we need a method to validate types, and then provide that to the user as a method. } impl Display for ValueType { @@ -54,7 +72,113 @@ impl Display for ValueType { match self { // We can avoid a copy operation if we write directly into the formatter. Self::Closure(signature) => write!(f, "{}", signature), + Self::Dictionary(definition) => write!(f, "{}", definition), _ => write!(f, "{}", self.name()), } } } + +impl Object for ValueType { + fn get_type(&self) -> ValueType { + ValueType::ValueType + } +} + +impl StaticTypeName for ValueType { + fn static_type_name() -> &'static str { + "ValueType" + } +} + +#[derive(Debug, Eq, PartialEq)] +pub struct StructMember { + pub name: String, + pub ty: ValueType, + pub default: Option, +} + +impl StructMember { + fn new( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + heap: &mut Heap, + source: &AstNode, + ) -> ExpressionResult { + let name = source.node.name.node.clone(); + let ty = execute_expression(log, stack_trace, stack, heap, &source.node.ty)? + .downcast::(stack_trace)?; + let default = if let Some(default) = source.node.default.as_ref() { + Some(execute_expression(log, stack_trace, stack, heap, default)?) + } else { + None + }; + + Ok(Self { name, ty, default }) + } +} + +impl Display for StructMember { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + if let Some(_default) = self.default.as_ref() { + write!(f, "{}: {} (optional)", self.name, self.ty) + } else { + write!(f, "{}: {}", self.name, self.ty) + } + } +} + +#[derive(Debug, Eq, PartialEq, Clone)] +pub struct StructDefinition { + pub members: Arc>, + pub variadic: bool, +} + +impl StructDefinition { + pub fn new( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + heap: &mut Heap, + source: &AstNode, + ) -> ExpressionResult { + let mut members = Vec::new(); + for member in source.node.members.iter() { + members.push(StructMember::new(log, stack_trace, stack, heap, member)?); + } + + let members = Arc::new(members); + let variadic = source.node.variadic; + Ok(Self { members, variadic }) + } +} + +impl Display for StructDefinition { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "(")?; + + let mut member_iter = self.members.iter(); + + // The first member should not have a comma before it. + if let Some(first_member) = member_iter.next() { + write!(f, "{}", first_member)?; + } + + // All other members get a comma before them. + for member in member_iter { + write!(f, ", {}", member)?; + } + + // This struct is variadic. + if self.variadic { + // Only put a comma before the dots if there were any members before it. + if self.members.is_empty() { + write!(f, "...")?; + } else { + write!(f, ", ...")?; + } + } + + write!(f, ")") + } +} diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 12fecdf..0d865b3 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -26,7 +26,8 @@ const PREC = { or: 2, range: 1, assign: 0, - closure: -1, + struct_def: -1, + closure: -2, }; module.exports = grammar({ @@ -41,7 +42,7 @@ module.exports = grammar({ identifier: _ => /[a-zA-Z_][a-zA-Z0-9_]*/, string: _ => /\"(\\\"|[^\"])*\"/, default: _ => 'default', - void: _ => seq('(', ')'), + void: _ => '~', base_ten: _ => /[0-9]+/, octal: _ => seq(token.immediate(/0o/), /[0-9]+/), @@ -69,13 +70,13 @@ module.exports = grammar({ function_call: $ => seq( prec.left(PREC.function_call, seq( - field('to_call', $.expression), field("argument", choice($.dictionary_construction, $.void)), + field('to_call', $.expression), field("argument", $.dictionary_construction), )) ), method_call: $ => seq( prec.left(PREC.method_call, seq( - field('self_dictionary', $.expression), ':', field('to_call', $.identifier), field("argument", choice($.dictionary_construction, $.void)) + field('self_dictionary', $.expression), ':', field('to_call', $.identifier), field("argument", $.dictionary_construction) )) ), @@ -147,10 +148,9 @@ module.exports = grammar({ if: $ => seq('if', field('condition', $.expression), field('on_true', $.procedural_block), optional(seq('else', field('on_false', $.procedural_block)))), - _variable_type: $ => field('type_path', $.path), path: $ => seq($.identifier, repeat(seq('.', $.identifier))), - _declaration_type: $ => seq(':', $._variable_type), + declaration_type: $ => seq(':', $.expression), parenthesis: $ => seq('(', $.expression, ')'), list: $ => seq( @@ -162,29 +162,30 @@ module.exports = grammar({ varadic_dots: $ => '...', - struct_member: $ => prec.left(PREC.struct_member, seq(field('name', $.identifier), $._declaration_type, optional(seq('=', field('default', $.expression))))), + struct_member: $ => prec.left(PREC.struct_member, seq(field('name', $.identifier), $.declaration_type, optional(seq('=', field('default', $.expression))))), _struct_final_element: $ => choice( seq($.struct_member), seq($.varadic_dots, optional(',')) ), - struct_definition: $ => seq('(', + struct_definition: $ => prec.left(PREC.struct_def, seq('(', choice( seq( field('members', repeat1(seq($.struct_member, ','))), field('final_element', optional($._struct_final_element)), ), - field('final_element', $._struct_final_element) + field('final_element', $._struct_final_element), + ',', // Empty struct. ), - ')'), + ')')), dictionary_member_assignment: $ => seq(field('name', $.identifier), '=', field('assignment', $.expression)), dictionary_construction: $ => seq('(', field('assignments', - seq( - repeat(seq($.dictionary_member_assignment, ',')), + optional(seq( $.dictionary_member_assignment, + repeat(seq(',', $.dictionary_member_assignment)), optional(',') - ), + )), ), ')' ), @@ -201,7 +202,7 @@ module.exports = grammar({ ']' ), closure_definition: $ => prec.left(PREC.closure, seq( - field('argument', choice($.struct_definition, $.path, $.void)), + field('argument', choice($.struct_definition, $.path)), field('captured_variables', $.closure_captured_variables), '->', field('result', choice($.struct_definition, $.path, $.void)), diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 0690a05..58110ea 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -40,17 +40,8 @@ "value": "default" }, "void": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "(" - }, - { - "type": "STRING", - "value": ")" - } - ] + "type": "STRING", + "value": "~" }, "base_ten": { "type": "PATTERN", @@ -300,17 +291,8 @@ "type": "FIELD", "name": "argument", "content": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "dictionary_construction" - }, - { - "type": "SYMBOL", - "name": "void" - } - ] + "type": "SYMBOL", + "name": "dictionary_construction" } } ] @@ -351,17 +333,8 @@ "type": "FIELD", "name": "argument", "content": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "dictionary_construction" - }, - { - "type": "SYMBOL", - "name": "void" - } - ] + "type": "SYMBOL", + "name": "dictionary_construction" } } ] @@ -1258,14 +1231,6 @@ } ] }, - "_variable_type": { - "type": "FIELD", - "name": "type_path", - "content": { - "type": "SYMBOL", - "name": "path" - } - }, "path": { "type": "SEQ", "members": [ @@ -1291,7 +1256,7 @@ } ] }, - "_declaration_type": { + "declaration_type": { "type": "SEQ", "members": [ { @@ -1300,7 +1265,7 @@ }, { "type": "SYMBOL", - "name": "_variable_type" + "name": "expression" } ] }, @@ -1387,7 +1352,7 @@ }, { "type": "SYMBOL", - "name": "_declaration_type" + "name": "declaration_type" }, { "type": "CHOICE", @@ -1453,71 +1418,79 @@ ] }, "struct_definition": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "(" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "members", - "content": { - "type": "REPEAT1", + "type": "PREC_LEFT", + "value": -1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "members", "content": { - "type": "SEQ", + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "struct_member" + }, + { + "type": "STRING", + "value": "," + } + ] + } + } + }, + { + "type": "FIELD", + "name": "final_element", + "content": { + "type": "CHOICE", "members": [ { "type": "SYMBOL", - "name": "struct_member" + "name": "_struct_final_element" }, { - "type": "STRING", - "value": "," + "type": "BLANK" } ] } } - }, - { - "type": "FIELD", - "name": "final_element", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_struct_final_element" - }, - { - "type": "BLANK" - } - ] - } + ] + }, + { + "type": "FIELD", + "name": "final_element", + "content": { + "type": "SYMBOL", + "name": "_struct_final_element" } - ] - }, - { - "type": "FIELD", - "name": "final_element", - "content": { - "type": "SYMBOL", - "name": "_struct_final_element" + }, + { + "type": "STRING", + "value": "," } - } - ] - }, - { - "type": "STRING", - "value": ")" - } - ] + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + } }, "dictionary_member_assignment": { "type": "SEQ", @@ -1555,39 +1528,47 @@ "type": "FIELD", "name": "assignments", "content": { - "type": "SEQ", + "type": "CHOICE", "members": [ { - "type": "REPEAT", - "content": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "dictionary_member_assignment" - }, - { - "type": "STRING", - "value": "," - } - ] - } - }, - { - "type": "SYMBOL", - "name": "dictionary_member_assignment" - }, - { - "type": "CHOICE", + "type": "SEQ", "members": [ { - "type": "STRING", - "value": "," + "type": "SYMBOL", + "name": "dictionary_member_assignment" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "dictionary_member_assignment" + } + ] + } }, { - "type": "BLANK" + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] } ] + }, + { + "type": "BLANK" } ] } @@ -1666,7 +1647,7 @@ }, "closure_definition": { "type": "PREC_LEFT", - "value": -1, + "value": -2, "content": { "type": "SEQ", "members": [ @@ -1683,10 +1664,6 @@ { "type": "SYMBOL", "name": "path" - }, - { - "type": "SYMBOL", - "name": "void" } ] } diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 7613818..52613b1 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -297,10 +297,6 @@ { "type": "struct_definition", "named": true - }, - { - "type": "void", - "named": true } ] }, @@ -344,13 +340,28 @@ } } }, + { + "type": "declaration_type", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, { "type": "dictionary_construction", "named": true, "fields": { "assignments": { "multiple": true, - "required": true, + "required": false, "types": [ { "type": ",", @@ -524,10 +535,6 @@ { "type": "dictionary_construction", "named": true - }, - { - "type": "void", - "named": true } ] }, @@ -663,10 +670,6 @@ { "type": "dictionary_construction", "named": true - }, - { - "type": "void", - "named": true } ] }, @@ -911,17 +914,17 @@ "named": true } ] - }, - "type_path": { - "multiple": false, - "required": true, - "types": [ - { - "type": "path", - "named": true - } - ] } + }, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "declaration_type", + "named": true + } + ] } }, { @@ -974,11 +977,6 @@ } } }, - { - "type": "void", - "named": true, - "fields": {} - }, { "type": "!", "named": false @@ -1199,6 +1197,10 @@ "type": "varadic_dots", "named": true }, + { + "type": "void", + "named": true + }, { "type": "{", "named": false diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index cbced21..22d9d79 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -7,13 +7,13 @@ #define LANGUAGE_VERSION 14 #define STATE_COUNT 178 #define LARGE_STATE_COUNT 7 -#define SYMBOL_COUNT 116 +#define SYMBOL_COUNT 115 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 71 +#define TOKEN_COUNT 72 #define EXTERNAL_TOKEN_COUNT 0 -#define FIELD_COUNT 26 +#define FIELD_COUNT 25 #define MAX_ALIAS_SEQUENCE_LENGTH 5 -#define PRODUCTION_ID_COUNT 27 +#define PRODUCTION_ID_COUNT 25 enum ts_symbol_identifiers { sym_identifier = 1, @@ -21,73 +21,73 @@ enum ts_symbol_identifiers { sym__whitespace = 3, sym_string = 4, sym_default = 5, - anon_sym_LPAREN = 6, - anon_sym_RPAREN = 7, - aux_sym_base_ten_token1 = 8, - aux_sym_octal_token1 = 9, - aux_sym_hex_token1 = 10, - aux_sym_hex_token2 = 11, - aux_sym_binary_token1 = 12, - aux_sym_binary_token2 = 13, - aux_sym_signed_integer_token1 = 14, - aux_sym_unsigned_integer_token1 = 15, - sym_unit_quote = 16, - anon_sym_DOT = 17, - sym_true = 18, - sym_false = 19, - anon_sym_COLON = 20, - anon_sym_DASH = 21, - anon_sym_PLUS = 22, - anon_sym_BANG = 23, - anon_sym_STAR_STAR = 24, - anon_sym_STAR = 25, - anon_sym_SLASH = 26, - anon_sym_SLASH_SLASH = 27, - anon_sym_LT_LT = 28, - anon_sym_GT_GT = 29, - anon_sym_AMP = 30, - anon_sym_PIPE = 31, - anon_sym_CARET = 32, - anon_sym_GT = 33, - anon_sym_GT_EQ = 34, - anon_sym_EQ_EQ = 35, - anon_sym_LT_EQ = 36, - anon_sym_LT = 37, - anon_sym_BANG_EQ = 38, - anon_sym_AMP_AMP = 39, - anon_sym_PIPE_PIPE = 40, - anon_sym_DOT_DOT = 41, - anon_sym_DOT_DOT_EQ = 42, - anon_sym_if = 43, - anon_sym_else = 44, - anon_sym_LBRACK = 45, - anon_sym_COMMA = 46, - anon_sym_RBRACK = 47, - sym_varadic_dots = 48, - anon_sym_EQ = 49, - anon_sym_LBRACE = 50, - anon_sym_RBRACE = 51, - anon_sym_DASH_GT = 52, - anon_sym_SEMI = 53, - anon_sym_AMP_EQ = 54, - anon_sym_PIPE_EQ = 55, - anon_sym_CARET_EQ = 56, - anon_sym_AMP_AMP_EQ = 57, - anon_sym_PIPE_PIPE_EQ = 58, - anon_sym_CARET_CARET_EQ = 59, - anon_sym_PLUS_EQ = 60, - anon_sym_DASH_EQ = 61, - anon_sym_STAR_STAR_EQ = 62, - anon_sym_STAR_EQ = 63, - anon_sym_SLASH_SLASH_EQ = 64, - anon_sym_SLASH_EQ = 65, - anon_sym_LT_LT_EQ = 66, - anon_sym_GT_GT_EQ = 67, - anon_sym_let = 68, - anon_sym_for = 69, - anon_sym_in = 70, - sym_source_file = 71, - sym_void = 72, + sym_void = 6, + aux_sym_base_ten_token1 = 7, + aux_sym_octal_token1 = 8, + aux_sym_hex_token1 = 9, + aux_sym_hex_token2 = 10, + aux_sym_binary_token1 = 11, + aux_sym_binary_token2 = 12, + aux_sym_signed_integer_token1 = 13, + aux_sym_unsigned_integer_token1 = 14, + sym_unit_quote = 15, + anon_sym_DOT = 16, + sym_true = 17, + sym_false = 18, + anon_sym_COLON = 19, + anon_sym_DASH = 20, + anon_sym_PLUS = 21, + anon_sym_BANG = 22, + anon_sym_STAR_STAR = 23, + anon_sym_STAR = 24, + anon_sym_SLASH = 25, + anon_sym_SLASH_SLASH = 26, + anon_sym_LT_LT = 27, + anon_sym_GT_GT = 28, + anon_sym_AMP = 29, + anon_sym_PIPE = 30, + anon_sym_CARET = 31, + anon_sym_GT = 32, + anon_sym_GT_EQ = 33, + anon_sym_EQ_EQ = 34, + anon_sym_LT_EQ = 35, + anon_sym_LT = 36, + anon_sym_BANG_EQ = 37, + anon_sym_AMP_AMP = 38, + anon_sym_PIPE_PIPE = 39, + anon_sym_DOT_DOT = 40, + anon_sym_DOT_DOT_EQ = 41, + anon_sym_if = 42, + anon_sym_else = 43, + anon_sym_LPAREN = 44, + anon_sym_RPAREN = 45, + anon_sym_LBRACK = 46, + anon_sym_COMMA = 47, + anon_sym_RBRACK = 48, + sym_varadic_dots = 49, + anon_sym_EQ = 50, + anon_sym_LBRACE = 51, + anon_sym_RBRACE = 52, + anon_sym_DASH_GT = 53, + anon_sym_SEMI = 54, + anon_sym_AMP_EQ = 55, + anon_sym_PIPE_EQ = 56, + anon_sym_CARET_EQ = 57, + anon_sym_AMP_AMP_EQ = 58, + anon_sym_PIPE_PIPE_EQ = 59, + anon_sym_CARET_CARET_EQ = 60, + anon_sym_PLUS_EQ = 61, + anon_sym_DASH_EQ = 62, + anon_sym_STAR_STAR_EQ = 63, + anon_sym_STAR_EQ = 64, + anon_sym_SLASH_SLASH_EQ = 65, + anon_sym_SLASH_EQ = 66, + anon_sym_LT_LT_EQ = 67, + anon_sym_GT_GT_EQ = 68, + anon_sym_let = 69, + anon_sym_for = 70, + anon_sym_in = 71, + sym_source_file = 72, sym_base_ten = 73, sym_octal = 74, sym_hex = 75, @@ -106,31 +106,30 @@ enum ts_symbol_identifiers { sym_unary_expression = 88, sym_binary_expression = 89, sym_if = 90, - sym__variable_type = 91, - sym_path = 92, - sym__declaration_type = 93, - sym_parenthesis = 94, - sym_list = 95, - sym_struct_member = 96, - sym__struct_final_element = 97, - sym_struct_definition = 98, - sym_dictionary_member_assignment = 99, - sym_dictionary_construction = 100, - sym_procedural_block = 101, - sym_closure_captured_variables = 102, - sym_closure_definition = 103, - sym_closed_expression = 104, - sym_statement = 105, - sym_assignment_operator = 106, - sym_let = 107, - sym_assign = 108, - sym_for = 109, - aux_sym_path_repeat1 = 110, - aux_sym_list_repeat1 = 111, - aux_sym_struct_definition_repeat1 = 112, - aux_sym_dictionary_construction_repeat1 = 113, - aux_sym_procedural_block_repeat1 = 114, - aux_sym_closure_captured_variables_repeat1 = 115, + sym_path = 91, + sym_declaration_type = 92, + sym_parenthesis = 93, + sym_list = 94, + sym_struct_member = 95, + sym__struct_final_element = 96, + sym_struct_definition = 97, + sym_dictionary_member_assignment = 98, + sym_dictionary_construction = 99, + sym_procedural_block = 100, + sym_closure_captured_variables = 101, + sym_closure_definition = 102, + sym_closed_expression = 103, + sym_statement = 104, + sym_assignment_operator = 105, + sym_let = 106, + sym_assign = 107, + sym_for = 108, + aux_sym_path_repeat1 = 109, + aux_sym_list_repeat1 = 110, + aux_sym_struct_definition_repeat1 = 111, + aux_sym_dictionary_construction_repeat1 = 112, + aux_sym_procedural_block_repeat1 = 113, + aux_sym_closure_captured_variables_repeat1 = 114, }; static const char * const ts_symbol_names[] = { @@ -140,8 +139,7 @@ static const char * const ts_symbol_names[] = { [sym__whitespace] = "_whitespace", [sym_string] = "string", [sym_default] = "default", - [anon_sym_LPAREN] = "(", - [anon_sym_RPAREN] = ")", + [sym_void] = "void", [aux_sym_base_ten_token1] = "base_ten_token1", [aux_sym_octal_token1] = "octal_token1", [aux_sym_hex_token1] = "hex_token1", @@ -179,6 +177,8 @@ static const char * const ts_symbol_names[] = { [anon_sym_DOT_DOT_EQ] = "..=", [anon_sym_if] = "if", [anon_sym_else] = "else", + [anon_sym_LPAREN] = "(", + [anon_sym_RPAREN] = ")", [anon_sym_LBRACK] = "[", [anon_sym_COMMA] = ",", [anon_sym_RBRACK] = "]", @@ -206,7 +206,6 @@ static const char * const ts_symbol_names[] = { [anon_sym_for] = "for", [anon_sym_in] = "in", [sym_source_file] = "source_file", - [sym_void] = "void", [sym_base_ten] = "base_ten", [sym_octal] = "octal", [sym_hex] = "hex", @@ -225,9 +224,8 @@ static const char * const ts_symbol_names[] = { [sym_unary_expression] = "unary_expression", [sym_binary_expression] = "binary_expression", [sym_if] = "if", - [sym__variable_type] = "_variable_type", [sym_path] = "path", - [sym__declaration_type] = "_declaration_type", + [sym_declaration_type] = "declaration_type", [sym_parenthesis] = "parenthesis", [sym_list] = "list", [sym_struct_member] = "struct_member", @@ -259,8 +257,7 @@ static const TSSymbol ts_symbol_map[] = { [sym__whitespace] = sym__whitespace, [sym_string] = sym_string, [sym_default] = sym_default, - [anon_sym_LPAREN] = anon_sym_LPAREN, - [anon_sym_RPAREN] = anon_sym_RPAREN, + [sym_void] = sym_void, [aux_sym_base_ten_token1] = aux_sym_base_ten_token1, [aux_sym_octal_token1] = aux_sym_octal_token1, [aux_sym_hex_token1] = aux_sym_hex_token1, @@ -298,6 +295,8 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_DOT_DOT_EQ] = anon_sym_DOT_DOT_EQ, [anon_sym_if] = anon_sym_if, [anon_sym_else] = anon_sym_else, + [anon_sym_LPAREN] = anon_sym_LPAREN, + [anon_sym_RPAREN] = anon_sym_RPAREN, [anon_sym_LBRACK] = anon_sym_LBRACK, [anon_sym_COMMA] = anon_sym_COMMA, [anon_sym_RBRACK] = anon_sym_RBRACK, @@ -325,7 +324,6 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_for] = anon_sym_for, [anon_sym_in] = anon_sym_in, [sym_source_file] = sym_source_file, - [sym_void] = sym_void, [sym_base_ten] = sym_base_ten, [sym_octal] = sym_octal, [sym_hex] = sym_hex, @@ -344,9 +342,8 @@ static const TSSymbol ts_symbol_map[] = { [sym_unary_expression] = sym_unary_expression, [sym_binary_expression] = sym_binary_expression, [sym_if] = sym_if, - [sym__variable_type] = sym__variable_type, [sym_path] = sym_path, - [sym__declaration_type] = sym__declaration_type, + [sym_declaration_type] = sym_declaration_type, [sym_parenthesis] = sym_parenthesis, [sym_list] = sym_list, [sym_struct_member] = sym_struct_member, @@ -396,13 +393,9 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [anon_sym_LPAREN] = { - .visible = true, - .named = false, - }, - [anon_sym_RPAREN] = { + [sym_void] = { .visible = true, - .named = false, + .named = true, }, [aux_sym_base_ten_token1] = { .visible = false, @@ -552,6 +545,14 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, + [anon_sym_LPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_RPAREN] = { + .visible = true, + .named = false, + }, [anon_sym_LBRACK] = { .visible = true, .named = false, @@ -660,10 +661,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [sym_void] = { - .visible = true, - .named = true, - }, [sym_base_ten] = { .visible = true, .named = true, @@ -736,16 +733,12 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [sym__variable_type] = { - .visible = false, - .named = true, - }, [sym_path] = { .visible = true, .named = true, }, - [sym__declaration_type] = { - .visible = false, + [sym_declaration_type] = { + .visible = true, .named = true, }, [sym_parenthesis] = { @@ -861,10 +854,9 @@ enum ts_field_identifiers { field_to_call = 20, field_to_iterate = 21, field_to_run = 22, - field_type_path = 23, - field_unit = 24, - field_value = 25, - field_whole = 26, + field_unit = 23, + field_value = 24, + field_whole = 25, }; static const char * const ts_field_names[] = { @@ -891,7 +883,6 @@ static const char * const ts_field_names[] = { [field_to_call] = "to_call", [field_to_iterate] = "to_iterate", [field_to_run] = "to_run", - [field_type_path] = "type_path", [field_unit] = "unit", [field_value] = "value", [field_whole] = "whole", @@ -908,22 +899,20 @@ static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [8] = {.index = 12, .length = 1}, [9] = {.index = 13, .length = 1}, [10] = {.index = 14, .length = 1}, - [11] = {.index = 15, .length = 2}, - [12] = {.index = 17, .length = 2}, - [13] = {.index = 19, .length = 3}, - [14] = {.index = 22, .length = 1}, - [15] = {.index = 23, .length = 1}, - [16] = {.index = 24, .length = 2}, - [17] = {.index = 26, .length = 2}, - [18] = {.index = 28, .length = 2}, - [19] = {.index = 30, .length = 3}, - [20] = {.index = 33, .length = 3}, - [21] = {.index = 36, .length = 3}, - [22] = {.index = 39, .length = 3}, - [23] = {.index = 42, .length = 2}, - [24] = {.index = 44, .length = 4}, - [25] = {.index = 48, .length = 2}, - [26] = {.index = 50, .length = 3}, + [11] = {.index = 15, .length = 1}, + [12] = {.index = 16, .length = 2}, + [13] = {.index = 18, .length = 3}, + [14] = {.index = 21, .length = 2}, + [15] = {.index = 23, .length = 2}, + [16] = {.index = 25, .length = 2}, + [17] = {.index = 27, .length = 3}, + [18] = {.index = 30, .length = 3}, + [19] = {.index = 33, .length = 2}, + [20] = {.index = 35, .length = 3}, + [21] = {.index = 38, .length = 2}, + [22] = {.index = 40, .length = 4}, + [23] = {.index = 44, .length = 2}, + [24] = {.index = 46, .length = 3}, }; static const TSFieldMapEntry ts_field_map_entries[] = { @@ -944,65 +933,59 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_argument, 1}, {field_to_call, 0}, [10] = - {field_name, 0}, - {field_type_path, 1, .inherited = true}, + {field_condition, 1}, + {field_on_true, 2}, [12] = - {field_final_element, 1}, + {field_name, 0}, [13] = - {field_assignments, 1}, + {field_final_element, 1}, [14] = - {field_members, 1}, + {field_assignments, 1}, [15] = - {field_condition, 1}, - {field_on_true, 2}, - [17] = + {field_members, 1}, + [16] = {field_fractional, 2}, {field_whole, 0}, - [19] = + [18] = {field_a, 0}, {field_b, 2}, {field_op, 1}, - [22] = - {field_type_path, 1, .inherited = true}, - [23] = - {field_type_path, 0}, - [24] = + [21] = {field_assignment, 2}, {field_name, 0}, - [26] = + [23] = {field_assignments, 1}, {field_assignments, 2}, - [28] = + [25] = {field_final_element, 2}, {field_members, 1}, - [30] = + [27] = {field_argument, 3}, {field_self_dictionary, 0}, {field_to_call, 2}, + [30] = + {field_condition, 1}, + {field_on_false, 4}, + {field_on_true, 2}, [33] = {field_default, 3}, {field_name, 0}, - {field_type_path, 1, .inherited = true}, - [36] = + [35] = {field_assignments, 1}, {field_assignments, 2}, {field_assignments, 3}, - [39] = - {field_condition, 1}, - {field_on_false, 4}, - {field_on_true, 2}, - [42] = + [38] = {field_to_assign, 0}, {field_value, 2}, - [44] = + [40] = {field_argument, 0}, {field_captured_variables, 1}, {field_expression, 4}, {field_result, 3}, - [48] = + [44] = {field_to_assign, 1}, {field_value, 3}, - [50] = + [46] = {field_to_assign, 1}, {field_to_iterate, 3}, {field_to_run, 4}, @@ -1079,48 +1062,48 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [59] = 59, [60] = 60, [61] = 61, - [62] = 55, + [62] = 62, [63] = 63, [64] = 64, [65] = 65, [66] = 66, - [67] = 67, + [67] = 58, [68] = 68, - [69] = 69, - [70] = 70, - [71] = 71, - [72] = 65, - [73] = 73, + [69] = 64, + [70] = 65, + [71] = 66, + [72] = 72, + [73] = 68, [74] = 74, [75] = 75, - [76] = 59, - [77] = 56, - [78] = 57, - [79] = 58, - [80] = 80, - [81] = 60, - [82] = 61, - [83] = 63, - [84] = 75, - [85] = 71, - [86] = 74, - [87] = 80, - [88] = 36, - [89] = 42, - [90] = 46, - [91] = 50, - [92] = 51, - [93] = 52, - [94] = 53, - [95] = 44, - [96] = 47, - [97] = 54, - [98] = 73, - [99] = 48, - [100] = 49, - [101] = 45, - [102] = 102, - [103] = 103, + [76] = 76, + [77] = 77, + [78] = 78, + [79] = 79, + [80] = 74, + [81] = 75, + [82] = 76, + [83] = 77, + [84] = 78, + [85] = 79, + [86] = 86, + [87] = 87, + [88] = 57, + [89] = 72, + [90] = 39, + [91] = 41, + [92] = 46, + [93] = 44, + [94] = 51, + [95] = 50, + [96] = 49, + [97] = 53, + [98] = 54, + [99] = 55, + [100] = 56, + [101] = 52, + [102] = 48, + [103] = 47, [104] = 104, [105] = 105, [106] = 106, @@ -1142,9 +1125,9 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [122] = 122, [123] = 123, [124] = 124, - [125] = 124, + [125] = 125, [126] = 126, - [127] = 127, + [127] = 126, [128] = 128, [129] = 129, [130] = 130, @@ -1194,7 +1177,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [174] = 174, [175] = 175, [176] = 176, - [177] = 155, + [177] = 170, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1204,57 +1187,60 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { case 0: if (eof) ADVANCE(14); ADVANCE_MAP( - '!', 42, + '!', 41, '"', 2, '#', 15, - '&', 49, + '&', 48, '\'', 7, - '(', 20, - ')', 21, - '*', 44, - '+', 40, - ',', 64, - '-', 38, - '.', 33, - '/', 45, - '0', 22, - '1', 24, - ':', 35, - ';', 71, - '<', 56, - '=', 67, - '>', 52, - '[', 63, - ']', 65, - '^', 51, - '{', 68, - '|', 50, - '}', 69, + '(', 62, + ')', 63, + '*', 43, + '+', 39, + ',', 65, + '-', 37, + '.', 32, + '/', 44, + '0', 21, + '1', 23, + ':', 34, + ';', 72, + '<', 55, + '=', 68, + '>', 51, + '[', 64, + ']', 66, + '^', 50, + '{', 69, + '|', 49, + '}', 70, + '~', 20, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(16); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(25); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(24); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(17); END_STATE(); case 1: ADVANCE_MAP( - '!', 41, + '!', 40, '"', 2, '#', 15, - '(', 20, - ')', 21, - '+', 39, - '-', 36, + '(', 62, + ')', 63, + '+', 38, + ',', 65, + '-', 35, '.', 10, - '0', 23, - '[', 63, - '{', 68, + '0', 22, + '[', 64, + '{', 69, + '~', 20, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(16); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(25); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(24); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(17); @@ -1274,12 +1260,12 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '-') ADVANCE(12); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(16); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(25); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(24); END_STATE(); case 5: if (lookahead == '#') ADVANCE(15); if (lookahead == '0' || - lookahead == '1') ADVANCE(30); + lookahead == '1') ADVANCE(29); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(16); END_STATE(); @@ -1289,62 +1275,63 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { lookahead == ' ') ADVANCE(16); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(28); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(27); END_STATE(); case 7: - if (lookahead == '\'') ADVANCE(31); + if (lookahead == '\'') ADVANCE(30); if (lookahead == '\\') ADVANCE(8); if (lookahead != 0) ADVANCE(7); END_STATE(); case 8: - if (lookahead == '\'') ADVANCE(32); + if (lookahead == '\'') ADVANCE(31); if (lookahead == '\\') ADVANCE(8); if (lookahead != 0) ADVANCE(7); END_STATE(); case 9: - if (lookahead == '.') ADVANCE(66); + if (lookahead == '.') ADVANCE(67); END_STATE(); case 10: if (lookahead == '.') ADVANCE(9); END_STATE(); case 11: - if (lookahead == '=') ADVANCE(77); + if (lookahead == '=') ADVANCE(78); END_STATE(); case 12: - if (lookahead == '>') ADVANCE(70); + if (lookahead == '>') ADVANCE(71); END_STATE(); case 13: if (eof) ADVANCE(14); ADVANCE_MAP( - '!', 42, + '!', 41, '"', 2, '#', 15, - '&', 49, + '&', 48, '\'', 7, - '(', 20, - ')', 21, - '*', 44, - '+', 40, - ',', 64, - '-', 37, - '.', 34, - '/', 45, - '0', 23, - ':', 35, - ';', 71, - '<', 56, - '=', 67, - '>', 52, - '[', 63, - ']', 65, - '^', 51, - '{', 68, - '|', 50, - '}', 69, + '(', 62, + ')', 63, + '*', 43, + '+', 39, + ',', 65, + '-', 36, + '.', 33, + '/', 44, + '0', 22, + ':', 34, + ';', 72, + '<', 55, + '=', 68, + '>', 51, + '[', 64, + ']', 66, + '^', 50, + '{', 69, + '|', 49, + '}', 70, + '~', 20, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(16); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(25); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(24); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(17); @@ -1377,254 +1364,257 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead != 0) ADVANCE(2); END_STATE(); case 20: - ACCEPT_TOKEN(anon_sym_LPAREN); + ACCEPT_TOKEN(sym_void); END_STATE(); case 21: - ACCEPT_TOKEN(anon_sym_RPAREN); + ACCEPT_TOKEN(aux_sym_base_ten_token1); + if (lookahead == 'b') ADVANCE(28); + if (lookahead == 'o') ADVANCE(25); + if (lookahead == 'x') ADVANCE(26); + if (lookahead == '0' || + lookahead == '1') ADVANCE(23); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(24); END_STATE(); case 22: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(29); - if (lookahead == 'o') ADVANCE(26); - if (lookahead == 'x') ADVANCE(27); - if (lookahead == '0' || - lookahead == '1') ADVANCE(24); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(25); + if (lookahead == 'b') ADVANCE(28); + if (lookahead == 'o') ADVANCE(25); + if (lookahead == 'x') ADVANCE(26); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(24); END_STATE(); case 23: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(29); - if (lookahead == 'o') ADVANCE(26); - if (lookahead == 'x') ADVANCE(27); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(25); + if (lookahead == '0' || + lookahead == '1') ADVANCE(23); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(24); END_STATE(); case 24: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == '0' || - lookahead == '1') ADVANCE(24); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(25); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(24); END_STATE(); case 25: - ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(25); - END_STATE(); - case 26: ACCEPT_TOKEN(aux_sym_octal_token1); END_STATE(); - case 27: + case 26: ACCEPT_TOKEN(aux_sym_hex_token1); END_STATE(); - case 28: + case 27: ACCEPT_TOKEN(aux_sym_hex_token2); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(28); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(27); END_STATE(); - case 29: + case 28: ACCEPT_TOKEN(aux_sym_binary_token1); END_STATE(); - case 30: + case 29: ACCEPT_TOKEN(aux_sym_binary_token2); if (lookahead == '0' || - lookahead == '1') ADVANCE(30); + lookahead == '1') ADVANCE(29); END_STATE(); - case 31: + case 30: ACCEPT_TOKEN(sym_unit_quote); END_STATE(); - case 32: + case 31: ACCEPT_TOKEN(sym_unit_quote); - if (lookahead == '\'') ADVANCE(31); + if (lookahead == '\'') ADVANCE(30); if (lookahead == '\\') ADVANCE(8); if (lookahead != 0) ADVANCE(7); END_STATE(); + case 32: + ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(59); + END_STATE(); case 33: ACCEPT_TOKEN(anon_sym_DOT); if (lookahead == '.') ADVANCE(60); END_STATE(); case 34: - ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(61); + ACCEPT_TOKEN(anon_sym_COLON); END_STATE(); case 35: - ACCEPT_TOKEN(anon_sym_COLON); + ACCEPT_TOKEN(anon_sym_DASH); END_STATE(); case 36: ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '=') ADVANCE(80); END_STATE(); case 37: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '=') ADVANCE(79); + if (lookahead == '=') ADVANCE(80); + if (lookahead == '>') ADVANCE(71); END_STATE(); case 38: - ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '=') ADVANCE(79); - if (lookahead == '>') ADVANCE(70); + ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); case 39: ACCEPT_TOKEN(anon_sym_PLUS); + if (lookahead == '=') ADVANCE(79); END_STATE(); case 40: - ACCEPT_TOKEN(anon_sym_PLUS); - if (lookahead == '=') ADVANCE(78); + ACCEPT_TOKEN(anon_sym_BANG); END_STATE(); case 41: ACCEPT_TOKEN(anon_sym_BANG); + if (lookahead == '=') ADVANCE(56); END_STATE(); case 42: - ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(57); + ACCEPT_TOKEN(anon_sym_STAR_STAR); + if (lookahead == '=') ADVANCE(81); END_STATE(); case 43: - ACCEPT_TOKEN(anon_sym_STAR_STAR); - if (lookahead == '=') ADVANCE(80); + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '*') ADVANCE(42); + if (lookahead == '=') ADVANCE(82); END_STATE(); case 44: - ACCEPT_TOKEN(anon_sym_STAR); - if (lookahead == '*') ADVANCE(43); - if (lookahead == '=') ADVANCE(81); + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '/') ADVANCE(45); + if (lookahead == '=') ADVANCE(84); END_STATE(); case 45: - ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '/') ADVANCE(46); + ACCEPT_TOKEN(anon_sym_SLASH_SLASH); if (lookahead == '=') ADVANCE(83); END_STATE(); case 46: - ACCEPT_TOKEN(anon_sym_SLASH_SLASH); - if (lookahead == '=') ADVANCE(82); - END_STATE(); - case 47: ACCEPT_TOKEN(anon_sym_LT_LT); - if (lookahead == '=') ADVANCE(84); + if (lookahead == '=') ADVANCE(85); END_STATE(); - case 48: + case 47: ACCEPT_TOKEN(anon_sym_GT_GT); - if (lookahead == '=') ADVANCE(85); + if (lookahead == '=') ADVANCE(86); END_STATE(); - case 49: + case 48: ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(58); - if (lookahead == '=') ADVANCE(72); + if (lookahead == '&') ADVANCE(57); + if (lookahead == '=') ADVANCE(73); END_STATE(); - case 50: + case 49: ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '=') ADVANCE(73); - if (lookahead == '|') ADVANCE(59); + if (lookahead == '=') ADVANCE(74); + if (lookahead == '|') ADVANCE(58); END_STATE(); - case 51: + case 50: ACCEPT_TOKEN(anon_sym_CARET); - if (lookahead == '=') ADVANCE(74); + if (lookahead == '=') ADVANCE(75); if (lookahead == '^') ADVANCE(11); END_STATE(); - case 52: + case 51: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(53); - if (lookahead == '>') ADVANCE(48); + if (lookahead == '=') ADVANCE(52); + if (lookahead == '>') ADVANCE(47); END_STATE(); - case 53: + case 52: ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); - case 54: + case 53: ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); - case 55: + case 54: ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); - case 56: + case 55: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(47); - if (lookahead == '=') ADVANCE(55); + if (lookahead == '<') ADVANCE(46); + if (lookahead == '=') ADVANCE(54); END_STATE(); - case 57: + case 56: ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); - case 58: + case 57: ACCEPT_TOKEN(anon_sym_AMP_AMP); - if (lookahead == '=') ADVANCE(75); + if (lookahead == '=') ADVANCE(76); END_STATE(); - case 59: + case 58: ACCEPT_TOKEN(anon_sym_PIPE_PIPE); - if (lookahead == '=') ADVANCE(76); + if (lookahead == '=') ADVANCE(77); + END_STATE(); + case 59: + ACCEPT_TOKEN(anon_sym_DOT_DOT); + if (lookahead == '.') ADVANCE(67); + if (lookahead == '=') ADVANCE(61); END_STATE(); case 60: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '.') ADVANCE(66); - if (lookahead == '=') ADVANCE(62); + if (lookahead == '=') ADVANCE(61); END_STATE(); case 61: - ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '=') ADVANCE(62); + ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); END_STATE(); case 62: - ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); + ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); case 63: - ACCEPT_TOKEN(anon_sym_LBRACK); + ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); case 64: - ACCEPT_TOKEN(anon_sym_COMMA); + ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); case 65: - ACCEPT_TOKEN(anon_sym_RBRACK); + ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); case 66: - ACCEPT_TOKEN(sym_varadic_dots); + ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); case 67: - ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(54); + ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); case 68: - ACCEPT_TOKEN(anon_sym_LBRACE); + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '=') ADVANCE(53); END_STATE(); case 69: - ACCEPT_TOKEN(anon_sym_RBRACE); + ACCEPT_TOKEN(anon_sym_LBRACE); END_STATE(); case 70: - ACCEPT_TOKEN(anon_sym_DASH_GT); + ACCEPT_TOKEN(anon_sym_RBRACE); END_STATE(); case 71: - ACCEPT_TOKEN(anon_sym_SEMI); + ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); case 72: - ACCEPT_TOKEN(anon_sym_AMP_EQ); + ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); case 73: - ACCEPT_TOKEN(anon_sym_PIPE_EQ); + ACCEPT_TOKEN(anon_sym_AMP_EQ); END_STATE(); case 74: - ACCEPT_TOKEN(anon_sym_CARET_EQ); + ACCEPT_TOKEN(anon_sym_PIPE_EQ); END_STATE(); case 75: - ACCEPT_TOKEN(anon_sym_AMP_AMP_EQ); + ACCEPT_TOKEN(anon_sym_CARET_EQ); END_STATE(); case 76: - ACCEPT_TOKEN(anon_sym_PIPE_PIPE_EQ); + ACCEPT_TOKEN(anon_sym_AMP_AMP_EQ); END_STATE(); case 77: - ACCEPT_TOKEN(anon_sym_CARET_CARET_EQ); + ACCEPT_TOKEN(anon_sym_PIPE_PIPE_EQ); END_STATE(); case 78: - ACCEPT_TOKEN(anon_sym_PLUS_EQ); + ACCEPT_TOKEN(anon_sym_CARET_CARET_EQ); END_STATE(); case 79: - ACCEPT_TOKEN(anon_sym_DASH_EQ); + ACCEPT_TOKEN(anon_sym_PLUS_EQ); END_STATE(); case 80: - ACCEPT_TOKEN(anon_sym_STAR_STAR_EQ); + ACCEPT_TOKEN(anon_sym_DASH_EQ); END_STATE(); case 81: - ACCEPT_TOKEN(anon_sym_STAR_EQ); + ACCEPT_TOKEN(anon_sym_STAR_STAR_EQ); END_STATE(); case 82: - ACCEPT_TOKEN(anon_sym_SLASH_SLASH_EQ); + ACCEPT_TOKEN(anon_sym_STAR_EQ); END_STATE(); case 83: - ACCEPT_TOKEN(anon_sym_SLASH_EQ); + ACCEPT_TOKEN(anon_sym_SLASH_SLASH_EQ); END_STATE(); case 84: - ACCEPT_TOKEN(anon_sym_LT_LT_EQ); + ACCEPT_TOKEN(anon_sym_SLASH_EQ); END_STATE(); case 85: + ACCEPT_TOKEN(anon_sym_LT_LT_EQ); + END_STATE(); + case 86: ACCEPT_TOKEN(anon_sym_GT_GT_EQ); END_STATE(); default: @@ -1869,20 +1859,20 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [118] = {.lex_state = 13}, [119] = {.lex_state = 13}, [120] = {.lex_state = 13}, - [121] = {.lex_state = 1}, - [122] = {.lex_state = 1}, - [123] = {.lex_state = 1}, - [124] = {.lex_state = 0}, - [125] = {.lex_state = 0}, + [121] = {.lex_state = 13}, + [122] = {.lex_state = 13}, + [123] = {.lex_state = 13}, + [124] = {.lex_state = 1}, + [125] = {.lex_state = 1}, [126] = {.lex_state = 0}, [127] = {.lex_state = 0}, - [128] = {.lex_state = 0}, + [128] = {.lex_state = 1}, [129] = {.lex_state = 0}, - [130] = {.lex_state = 1}, + [130] = {.lex_state = 0}, [131] = {.lex_state = 0}, [132] = {.lex_state = 0}, [133] = {.lex_state = 0}, - [134] = {.lex_state = 0}, + [134] = {.lex_state = 1}, [135] = {.lex_state = 0}, [136] = {.lex_state = 0}, [137] = {.lex_state = 0}, @@ -1902,28 +1892,28 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [151] = {.lex_state = 0}, [152] = {.lex_state = 0}, [153] = {.lex_state = 0}, - [154] = {.lex_state = 4}, + [154] = {.lex_state = 0}, [155] = {.lex_state = 4}, [156] = {.lex_state = 0}, [157] = {.lex_state = 0}, - [158] = {.lex_state = 4}, - [159] = {.lex_state = 0}, + [158] = {.lex_state = 0}, + [159] = {.lex_state = 4}, [160] = {.lex_state = 0}, [161] = {.lex_state = 0}, [162] = {.lex_state = 0}, - [163] = {.lex_state = 4}, - [164] = {.lex_state = 0}, - [165] = {.lex_state = 4}, - [166] = {.lex_state = 4}, - [167] = {.lex_state = 0}, - [168] = {.lex_state = 5}, + [163] = {.lex_state = 0}, + [164] = {.lex_state = 6}, + [165] = {.lex_state = 0}, + [166] = {.lex_state = 0}, + [167] = {.lex_state = 4}, + [168] = {.lex_state = 0}, [169] = {.lex_state = 0}, - [170] = {.lex_state = 0}, - [171] = {.lex_state = 0}, - [172] = {.lex_state = 0}, + [170] = {.lex_state = 4}, + [171] = {.lex_state = 4}, + [172] = {.lex_state = 4}, [173] = {.lex_state = 0}, - [174] = {.lex_state = 6}, - [175] = {.lex_state = 0}, + [174] = {.lex_state = 0}, + [175] = {.lex_state = 5}, [176] = {.lex_state = 0}, [177] = {.lex_state = 4}, }; @@ -1936,8 +1926,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(1), [sym_default] = ACTIONS(1), - [anon_sym_LPAREN] = ACTIONS(1), - [anon_sym_RPAREN] = ACTIONS(1), + [sym_void] = ACTIONS(1), [aux_sym_base_ten_token1] = ACTIONS(1), [aux_sym_octal_token1] = ACTIONS(1), [aux_sym_hex_token1] = ACTIONS(1), @@ -1974,6 +1963,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_DOT_DOT_EQ] = ACTIONS(1), [anon_sym_if] = ACTIONS(1), [anon_sym_else] = ACTIONS(1), + [anon_sym_LPAREN] = ACTIONS(1), + [anon_sym_RPAREN] = ACTIONS(1), [anon_sym_LBRACK] = ACTIONS(1), [anon_sym_COMMA] = ACTIONS(1), [anon_sym_RBRACK] = ACTIONS(1), @@ -2002,61 +1993,60 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_in] = ACTIONS(1), }, [1] = { - [sym_source_file] = STATE(176), - [sym_void] = STATE(98), - [sym_base_ten] = STATE(149), - [sym_octal] = STATE(149), - [sym_hex] = STATE(149), - [sym_binary] = STATE(149), - [sym_integer] = STATE(138), - [sym_signed_integer] = STATE(20), - [sym_unsigned_integer] = STATE(20), + [sym_source_file] = STATE(161), + [sym_base_ten] = STATE(152), + [sym_octal] = STATE(152), + [sym_hex] = STATE(152), + [sym_binary] = STATE(152), + [sym_integer] = STATE(154), + [sym_signed_integer] = STATE(32), + [sym_unsigned_integer] = STATE(32), [sym_number] = STATE(11), - [sym__float] = STATE(89), - [sym_scalar] = STATE(20), - [sym_boolean] = STATE(20), - [sym_function_call] = STATE(20), - [sym_method_call] = STATE(20), - [sym_expression] = STATE(112), - [sym_unary_expression] = STATE(20), - [sym_binary_expression] = STATE(20), - [sym_if] = STATE(20), - [sym_path] = STATE(98), - [sym_parenthesis] = STATE(20), - [sym_list] = STATE(20), - [sym_struct_definition] = STATE(98), - [sym_dictionary_construction] = STATE(20), - [sym_procedural_block] = STATE(20), - [sym_closure_definition] = STATE(20), + [sym__float] = STATE(91), + [sym_scalar] = STATE(32), + [sym_boolean] = STATE(32), + [sym_function_call] = STATE(32), + [sym_method_call] = STATE(32), + [sym_expression] = STATE(116), + [sym_unary_expression] = STATE(32), + [sym_binary_expression] = STATE(32), + [sym_if] = STATE(32), + [sym_path] = STATE(92), + [sym_parenthesis] = STATE(32), + [sym_list] = STATE(32), + [sym_struct_definition] = STATE(92), + [sym_dictionary_construction] = STATE(32), + [sym_procedural_block] = STATE(32), + [sym_closure_definition] = STATE(32), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), [sym_default] = ACTIONS(9), - [anon_sym_LPAREN] = ACTIONS(11), - [aux_sym_base_ten_token1] = ACTIONS(13), - [aux_sym_octal_token1] = ACTIONS(15), - [aux_sym_hex_token1] = ACTIONS(17), - [aux_sym_binary_token1] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_DASH] = ACTIONS(23), - [anon_sym_PLUS] = ACTIONS(23), - [anon_sym_BANG] = ACTIONS(23), - [anon_sym_if] = ACTIONS(25), + [sym_void] = ACTIONS(7), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_DASH] = ACTIONS(21), + [anon_sym_PLUS] = ACTIONS(21), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_if] = ACTIONS(23), + [anon_sym_LPAREN] = ACTIONS(25), [anon_sym_LBRACK] = ACTIONS(27), [anon_sym_LBRACE] = ACTIONS(29), }, [2] = { - [aux_sym_path_repeat1] = STATE(3), + [aux_sym_path_repeat1] = STATE(4), [ts_builtin_sym_end] = ACTIONS(31), [sym_identifier] = ACTIONS(33), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(31), [sym_default] = ACTIONS(33), - [anon_sym_LPAREN] = ACTIONS(31), - [anon_sym_RPAREN] = ACTIONS(31), + [sym_void] = ACTIONS(31), [aux_sym_base_ten_token1] = ACTIONS(33), [aux_sym_octal_token1] = ACTIONS(31), [aux_sym_hex_token1] = ACTIONS(31), @@ -2088,6 +2078,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_DOT_DOT] = ACTIONS(33), [anon_sym_DOT_DOT_EQ] = ACTIONS(31), [anon_sym_if] = ACTIONS(33), + [anon_sym_LPAREN] = ACTIONS(31), + [anon_sym_RPAREN] = ACTIONS(31), [anon_sym_LBRACK] = ACTIONS(31), [anon_sym_COMMA] = ACTIONS(31), [anon_sym_RBRACK] = ACTIONS(31), @@ -2113,20 +2105,19 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_for] = ACTIONS(33), }, [3] = { - [aux_sym_path_repeat1] = STATE(4), + [aux_sym_path_repeat1] = STATE(3), [ts_builtin_sym_end] = ACTIONS(37), [sym_identifier] = ACTIONS(39), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(37), [sym_default] = ACTIONS(39), - [anon_sym_LPAREN] = ACTIONS(37), - [anon_sym_RPAREN] = ACTIONS(37), + [sym_void] = ACTIONS(37), [aux_sym_base_ten_token1] = ACTIONS(39), [aux_sym_octal_token1] = ACTIONS(37), [aux_sym_hex_token1] = ACTIONS(37), [aux_sym_binary_token1] = ACTIONS(37), - [anon_sym_DOT] = ACTIONS(35), + [anon_sym_DOT] = ACTIONS(41), [sym_true] = ACTIONS(39), [sym_false] = ACTIONS(39), [anon_sym_COLON] = ACTIONS(37), @@ -2153,6 +2144,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_DOT_DOT] = ACTIONS(39), [anon_sym_DOT_DOT_EQ] = ACTIONS(37), [anon_sym_if] = ACTIONS(39), + [anon_sym_LPAREN] = ACTIONS(37), + [anon_sym_RPAREN] = ACTIONS(37), [anon_sym_LBRACK] = ACTIONS(37), [anon_sym_COMMA] = ACTIONS(37), [anon_sym_RBRACK] = ACTIONS(37), @@ -2178,143 +2171,145 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_for] = ACTIONS(39), }, [4] = { - [aux_sym_path_repeat1] = STATE(4), - [ts_builtin_sym_end] = ACTIONS(41), - [sym_identifier] = ACTIONS(43), + [aux_sym_path_repeat1] = STATE(3), + [ts_builtin_sym_end] = ACTIONS(44), + [sym_identifier] = ACTIONS(46), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(41), - [sym_default] = ACTIONS(43), - [anon_sym_LPAREN] = ACTIONS(41), - [anon_sym_RPAREN] = ACTIONS(41), - [aux_sym_base_ten_token1] = ACTIONS(43), - [aux_sym_octal_token1] = ACTIONS(41), - [aux_sym_hex_token1] = ACTIONS(41), - [aux_sym_binary_token1] = ACTIONS(41), - [anon_sym_DOT] = ACTIONS(45), - [sym_true] = ACTIONS(43), - [sym_false] = ACTIONS(43), - [anon_sym_COLON] = ACTIONS(41), - [anon_sym_DASH] = ACTIONS(43), - [anon_sym_PLUS] = ACTIONS(43), - [anon_sym_BANG] = ACTIONS(43), - [anon_sym_STAR_STAR] = ACTIONS(43), - [anon_sym_STAR] = ACTIONS(43), - [anon_sym_SLASH] = ACTIONS(43), - [anon_sym_SLASH_SLASH] = ACTIONS(43), - [anon_sym_LT_LT] = ACTIONS(43), - [anon_sym_GT_GT] = ACTIONS(43), - [anon_sym_AMP] = ACTIONS(43), - [anon_sym_PIPE] = ACTIONS(43), - [anon_sym_CARET] = ACTIONS(43), - [anon_sym_GT] = ACTIONS(43), - [anon_sym_GT_EQ] = ACTIONS(41), - [anon_sym_EQ_EQ] = ACTIONS(41), - [anon_sym_LT_EQ] = ACTIONS(41), - [anon_sym_LT] = ACTIONS(43), - [anon_sym_BANG_EQ] = ACTIONS(41), - [anon_sym_AMP_AMP] = ACTIONS(43), - [anon_sym_PIPE_PIPE] = ACTIONS(43), - [anon_sym_DOT_DOT] = ACTIONS(43), - [anon_sym_DOT_DOT_EQ] = ACTIONS(41), - [anon_sym_if] = ACTIONS(43), - [anon_sym_LBRACK] = ACTIONS(41), - [anon_sym_COMMA] = ACTIONS(41), - [anon_sym_RBRACK] = ACTIONS(41), - [anon_sym_EQ] = ACTIONS(43), - [anon_sym_LBRACE] = ACTIONS(41), - [anon_sym_RBRACE] = ACTIONS(41), - [anon_sym_SEMI] = ACTIONS(41), - [anon_sym_AMP_EQ] = ACTIONS(41), - [anon_sym_PIPE_EQ] = ACTIONS(41), - [anon_sym_CARET_EQ] = ACTIONS(41), - [anon_sym_AMP_AMP_EQ] = ACTIONS(41), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(41), - [anon_sym_CARET_CARET_EQ] = ACTIONS(41), - [anon_sym_PLUS_EQ] = ACTIONS(41), - [anon_sym_DASH_EQ] = ACTIONS(41), - [anon_sym_STAR_STAR_EQ] = ACTIONS(41), - [anon_sym_STAR_EQ] = ACTIONS(41), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(41), - [anon_sym_SLASH_EQ] = ACTIONS(41), - [anon_sym_LT_LT_EQ] = ACTIONS(41), - [anon_sym_GT_GT_EQ] = ACTIONS(41), - [anon_sym_let] = ACTIONS(43), - [anon_sym_for] = ACTIONS(43), + [sym_string] = ACTIONS(44), + [sym_default] = ACTIONS(46), + [sym_void] = ACTIONS(44), + [aux_sym_base_ten_token1] = ACTIONS(46), + [aux_sym_octal_token1] = ACTIONS(44), + [aux_sym_hex_token1] = ACTIONS(44), + [aux_sym_binary_token1] = ACTIONS(44), + [anon_sym_DOT] = ACTIONS(35), + [sym_true] = ACTIONS(46), + [sym_false] = ACTIONS(46), + [anon_sym_COLON] = ACTIONS(44), + [anon_sym_DASH] = ACTIONS(46), + [anon_sym_PLUS] = ACTIONS(46), + [anon_sym_BANG] = ACTIONS(46), + [anon_sym_STAR_STAR] = ACTIONS(46), + [anon_sym_STAR] = ACTIONS(46), + [anon_sym_SLASH] = ACTIONS(46), + [anon_sym_SLASH_SLASH] = ACTIONS(46), + [anon_sym_LT_LT] = ACTIONS(46), + [anon_sym_GT_GT] = ACTIONS(46), + [anon_sym_AMP] = ACTIONS(46), + [anon_sym_PIPE] = ACTIONS(46), + [anon_sym_CARET] = ACTIONS(46), + [anon_sym_GT] = ACTIONS(46), + [anon_sym_GT_EQ] = ACTIONS(44), + [anon_sym_EQ_EQ] = ACTIONS(44), + [anon_sym_LT_EQ] = ACTIONS(44), + [anon_sym_LT] = ACTIONS(46), + [anon_sym_BANG_EQ] = ACTIONS(44), + [anon_sym_AMP_AMP] = ACTIONS(46), + [anon_sym_PIPE_PIPE] = ACTIONS(46), + [anon_sym_DOT_DOT] = ACTIONS(46), + [anon_sym_DOT_DOT_EQ] = ACTIONS(44), + [anon_sym_if] = ACTIONS(46), + [anon_sym_LPAREN] = ACTIONS(44), + [anon_sym_RPAREN] = ACTIONS(44), + [anon_sym_LBRACK] = ACTIONS(44), + [anon_sym_COMMA] = ACTIONS(44), + [anon_sym_RBRACK] = ACTIONS(44), + [anon_sym_EQ] = ACTIONS(46), + [anon_sym_LBRACE] = ACTIONS(44), + [anon_sym_RBRACE] = ACTIONS(44), + [anon_sym_SEMI] = ACTIONS(44), + [anon_sym_AMP_EQ] = ACTIONS(44), + [anon_sym_PIPE_EQ] = ACTIONS(44), + [anon_sym_CARET_EQ] = ACTIONS(44), + [anon_sym_AMP_AMP_EQ] = ACTIONS(44), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(44), + [anon_sym_CARET_CARET_EQ] = ACTIONS(44), + [anon_sym_PLUS_EQ] = ACTIONS(44), + [anon_sym_DASH_EQ] = ACTIONS(44), + [anon_sym_STAR_STAR_EQ] = ACTIONS(44), + [anon_sym_STAR_EQ] = ACTIONS(44), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(44), + [anon_sym_SLASH_EQ] = ACTIONS(44), + [anon_sym_LT_LT_EQ] = ACTIONS(44), + [anon_sym_GT_GT_EQ] = ACTIONS(44), + [anon_sym_let] = ACTIONS(46), + [anon_sym_for] = ACTIONS(46), }, [5] = { - [ts_builtin_sym_end] = ACTIONS(41), - [sym_identifier] = ACTIONS(43), + [ts_builtin_sym_end] = ACTIONS(37), + [sym_identifier] = ACTIONS(39), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(41), - [sym_default] = ACTIONS(43), - [anon_sym_LPAREN] = ACTIONS(41), - [anon_sym_RPAREN] = ACTIONS(41), - [aux_sym_base_ten_token1] = ACTIONS(43), - [aux_sym_octal_token1] = ACTIONS(41), - [aux_sym_hex_token1] = ACTIONS(41), - [aux_sym_binary_token1] = ACTIONS(41), - [anon_sym_DOT] = ACTIONS(43), - [sym_true] = ACTIONS(43), - [sym_false] = ACTIONS(43), - [anon_sym_COLON] = ACTIONS(41), - [anon_sym_DASH] = ACTIONS(43), - [anon_sym_PLUS] = ACTIONS(43), - [anon_sym_BANG] = ACTIONS(43), - [anon_sym_STAR_STAR] = ACTIONS(43), - [anon_sym_STAR] = ACTIONS(43), - [anon_sym_SLASH] = ACTIONS(43), - [anon_sym_SLASH_SLASH] = ACTIONS(43), - [anon_sym_LT_LT] = ACTIONS(43), - [anon_sym_GT_GT] = ACTIONS(43), - [anon_sym_AMP] = ACTIONS(43), - [anon_sym_PIPE] = ACTIONS(43), - [anon_sym_CARET] = ACTIONS(43), - [anon_sym_GT] = ACTIONS(43), - [anon_sym_GT_EQ] = ACTIONS(41), - [anon_sym_EQ_EQ] = ACTIONS(41), - [anon_sym_LT_EQ] = ACTIONS(41), - [anon_sym_LT] = ACTIONS(43), - [anon_sym_BANG_EQ] = ACTIONS(41), - [anon_sym_AMP_AMP] = ACTIONS(43), - [anon_sym_PIPE_PIPE] = ACTIONS(43), - [anon_sym_DOT_DOT] = ACTIONS(43), - [anon_sym_DOT_DOT_EQ] = ACTIONS(41), - [anon_sym_if] = ACTIONS(43), - [anon_sym_LBRACK] = ACTIONS(41), - [anon_sym_COMMA] = ACTIONS(41), - [anon_sym_RBRACK] = ACTIONS(41), - [anon_sym_EQ] = ACTIONS(43), - [anon_sym_LBRACE] = ACTIONS(41), - [anon_sym_RBRACE] = ACTIONS(41), - [anon_sym_SEMI] = ACTIONS(41), - [anon_sym_AMP_EQ] = ACTIONS(41), - [anon_sym_PIPE_EQ] = ACTIONS(41), - [anon_sym_CARET_EQ] = ACTIONS(41), - [anon_sym_AMP_AMP_EQ] = ACTIONS(41), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(41), - [anon_sym_CARET_CARET_EQ] = ACTIONS(41), - [anon_sym_PLUS_EQ] = ACTIONS(41), - [anon_sym_DASH_EQ] = ACTIONS(41), - [anon_sym_STAR_STAR_EQ] = ACTIONS(41), - [anon_sym_STAR_EQ] = ACTIONS(41), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(41), - [anon_sym_SLASH_EQ] = ACTIONS(41), - [anon_sym_LT_LT_EQ] = ACTIONS(41), - [anon_sym_GT_GT_EQ] = ACTIONS(41), - [anon_sym_let] = ACTIONS(43), - [anon_sym_for] = ACTIONS(43), - }, - [6] = { - [sym_closure_captured_variables] = STATE(177), - [sym_assignment_operator] = STATE(66), - [sym_identifier] = ACTIONS(48), + [sym_string] = ACTIONS(37), + [sym_default] = ACTIONS(39), + [sym_void] = ACTIONS(37), + [aux_sym_base_ten_token1] = ACTIONS(39), + [aux_sym_octal_token1] = ACTIONS(37), + [aux_sym_hex_token1] = ACTIONS(37), + [aux_sym_binary_token1] = ACTIONS(37), + [anon_sym_DOT] = ACTIONS(39), + [sym_true] = ACTIONS(39), + [sym_false] = ACTIONS(39), + [anon_sym_COLON] = ACTIONS(37), + [anon_sym_DASH] = ACTIONS(39), + [anon_sym_PLUS] = ACTIONS(39), + [anon_sym_BANG] = ACTIONS(39), + [anon_sym_STAR_STAR] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(39), + [anon_sym_SLASH] = ACTIONS(39), + [anon_sym_SLASH_SLASH] = ACTIONS(39), + [anon_sym_LT_LT] = ACTIONS(39), + [anon_sym_GT_GT] = ACTIONS(39), + [anon_sym_AMP] = ACTIONS(39), + [anon_sym_PIPE] = ACTIONS(39), + [anon_sym_CARET] = ACTIONS(39), + [anon_sym_GT] = ACTIONS(39), + [anon_sym_GT_EQ] = ACTIONS(37), + [anon_sym_EQ_EQ] = ACTIONS(37), + [anon_sym_LT_EQ] = ACTIONS(37), + [anon_sym_LT] = ACTIONS(39), + [anon_sym_BANG_EQ] = ACTIONS(37), + [anon_sym_AMP_AMP] = ACTIONS(39), + [anon_sym_PIPE_PIPE] = ACTIONS(39), + [anon_sym_DOT_DOT] = ACTIONS(39), + [anon_sym_DOT_DOT_EQ] = ACTIONS(37), + [anon_sym_if] = ACTIONS(39), + [anon_sym_LPAREN] = ACTIONS(37), + [anon_sym_RPAREN] = ACTIONS(37), + [anon_sym_LBRACK] = ACTIONS(37), + [anon_sym_COMMA] = ACTIONS(37), + [anon_sym_RBRACK] = ACTIONS(37), + [anon_sym_EQ] = ACTIONS(39), + [anon_sym_LBRACE] = ACTIONS(37), + [anon_sym_RBRACE] = ACTIONS(37), + [anon_sym_SEMI] = ACTIONS(37), + [anon_sym_AMP_EQ] = ACTIONS(37), + [anon_sym_PIPE_EQ] = ACTIONS(37), + [anon_sym_CARET_EQ] = ACTIONS(37), + [anon_sym_AMP_AMP_EQ] = ACTIONS(37), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(37), + [anon_sym_CARET_CARET_EQ] = ACTIONS(37), + [anon_sym_PLUS_EQ] = ACTIONS(37), + [anon_sym_DASH_EQ] = ACTIONS(37), + [anon_sym_STAR_STAR_EQ] = ACTIONS(37), + [anon_sym_STAR_EQ] = ACTIONS(37), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(37), + [anon_sym_SLASH_EQ] = ACTIONS(37), + [anon_sym_LT_LT_EQ] = ACTIONS(37), + [anon_sym_GT_GT_EQ] = ACTIONS(37), + [anon_sym_let] = ACTIONS(39), + [anon_sym_for] = ACTIONS(39), + }, + [6] = { + [sym_closure_captured_variables] = STATE(177), + [sym_assignment_operator] = STATE(59), + [sym_identifier] = ACTIONS(48), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(50), [sym_default] = ACTIONS(48), - [anon_sym_LPAREN] = ACTIONS(50), + [sym_void] = ACTIONS(50), [aux_sym_base_ten_token1] = ACTIONS(48), [aux_sym_octal_token1] = ACTIONS(50), [aux_sym_hex_token1] = ACTIONS(50), @@ -2345,6 +2340,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_DOT_DOT] = ACTIONS(48), [anon_sym_DOT_DOT_EQ] = ACTIONS(50), [anon_sym_if] = ACTIONS(48), + [anon_sym_LPAREN] = ACTIONS(50), [anon_sym_LBRACK] = ACTIONS(50), [anon_sym_EQ] = ACTIONS(52), [anon_sym_LBRACE] = ACTIONS(50), @@ -2373,20 +2369,18 @@ static const uint16_t ts_small_parse_table[] = { [0] = 27, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, @@ -2403,39 +2397,41 @@ static const uint16_t ts_small_parse_table[] = { sym_path, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(41), 1, sym__float, - STATE(43), 1, + STATE(45), 1, sym_expression, - STATE(138), 1, + STATE(46), 1, + sym_struct_definition, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - STATE(9), 2, + STATE(8), 2, sym_statement, aux_sym_procedural_block_repeat1, - STATE(73), 2, - sym_void, - sym_struct_definition, ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(118), 4, + STATE(119), 4, sym_closed_expression, sym_let, sym_assign, sym_for, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2453,20 +2449,18 @@ static const uint16_t ts_small_parse_table[] = { [107] = 27, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, @@ -2483,39 +2477,41 @@ static const uint16_t ts_small_parse_table[] = { sym_path, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(41), 1, sym__float, - STATE(43), 1, + STATE(45), 1, sym_expression, - STATE(138), 1, + STATE(46), 1, + sym_struct_definition, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - STATE(7), 2, + STATE(9), 2, sym_statement, aux_sym_procedural_block_repeat1, - STATE(73), 2, - sym_void, - sym_struct_definition, ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(118), 4, + STATE(119), 4, sym_closed_expression, sym_let, sym_assign, sym_for, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2533,22 +2529,20 @@ static const uint16_t ts_small_parse_table[] = { [214] = 27, ACTIONS(68), 1, sym_identifier, - ACTIONS(71), 1, - sym_string, ACTIONS(74), 1, sym_default, ACTIONS(77), 1, - anon_sym_LPAREN, - ACTIONS(80), 1, aux_sym_base_ten_token1, - ACTIONS(83), 1, + ACTIONS(80), 1, aux_sym_octal_token1, - ACTIONS(86), 1, + ACTIONS(83), 1, aux_sym_hex_token1, - ACTIONS(89), 1, + ACTIONS(86), 1, aux_sym_binary_token1, - ACTIONS(98), 1, + ACTIONS(95), 1, anon_sym_if, + ACTIONS(98), 1, + anon_sym_LPAREN, ACTIONS(101), 1, anon_sym_LBRACK, ACTIONS(104), 1, @@ -2563,39 +2557,41 @@ static const uint16_t ts_small_parse_table[] = { sym_path, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(41), 1, sym__float, - STATE(43), 1, + STATE(45), 1, sym_expression, - STATE(138), 1, + STATE(46), 1, + sym_struct_definition, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(92), 2, + ACTIONS(71), 2, + sym_string, + sym_void, + ACTIONS(89), 2, sym_true, sym_false, STATE(9), 2, sym_statement, aux_sym_procedural_block_repeat1, - STATE(73), 2, - sym_void, - sym_struct_definition, - ACTIONS(95), 3, + ACTIONS(92), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(118), 4, + STATE(119), 4, sym_closed_expression, sym_let, sym_assign, sym_for, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2611,22 +2607,20 @@ static const uint16_t ts_small_parse_table[] = { sym_procedural_block, sym_closure_definition, [321] = 28, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, @@ -2636,45 +2630,47 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(117), 1, anon_sym_RPAREN, ACTIONS(119), 1, + anon_sym_COMMA, + ACTIONS(121), 1, sym_varadic_dots, STATE(11), 1, sym_number, - STATE(89), 1, + STATE(91), 1, sym__float, - STATE(113), 1, + STATE(115), 1, sym_expression, - STATE(121), 1, + STATE(124), 1, aux_sym_struct_definition_repeat1, - STATE(131), 1, - aux_sym_dictionary_construction_repeat1, STATE(138), 1, - sym_integer, - STATE(139), 1, - sym_struct_member, - STATE(148), 1, sym_dictionary_member_assignment, - STATE(159), 1, + STATE(153), 1, + sym_struct_member, + STATE(154), 1, + sym_integer, + STATE(162), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2690,12 +2686,12 @@ static const uint16_t ts_small_parse_table[] = { sym_procedural_block, sym_closure_definition, [428] = 4, - ACTIONS(125), 1, + ACTIONS(127), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(123), 16, + ACTIONS(125), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2710,13 +2706,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(121), 29, + ACTIONS(123), 30, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -2736,24 +2732,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [485] = 6, - ACTIONS(131), 1, - anon_sym_LPAREN, + [487] = 4, ACTIONS(133), 1, - anon_sym_COLON, + anon_sym_else, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(129), 16, + ACTIONS(131), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2768,15 +2761,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(127), 26, + ACTIONS(129), 29, ts_builtin_sym_end, sym_string, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -2791,24 +2786,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [546] = 6, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [545] = 6, + ACTIONS(139), 1, anon_sym_COLON, + ACTIONS(141), 1, + anon_sym_LPAREN, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 16, + ACTIONS(137), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2823,12 +2819,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(135), 26, + ACTIONS(135), 27, ts_builtin_sym_end, sym_string, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -2846,6 +2843,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, @@ -2856,7 +2854,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(141), 17, + ACTIONS(145), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2871,17 +2869,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - anon_sym_else, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(139), 28, + ACTIONS(143), 30, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -2897,19 +2895,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [661] = 4, - ACTIONS(147), 1, - anon_sym_else, + [663] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(145), 16, + ACTIONS(149), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2924,13 +2922,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_else, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(143), 28, + ACTIONS(147), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -2949,17 +2948,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [717] = 3, + [719] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(151), 16, + ACTIONS(153), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2974,17 +2975,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_else, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(149), 29, + ACTIONS(151), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -3000,17 +3001,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [771] = 3, + [775] = 6, + ACTIONS(139), 1, + anon_sym_COLON, + ACTIONS(141), 1, + anon_sym_LPAREN, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(155), 16, + ACTIONS(157), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3025,18 +3034,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(153), 29, + ACTIONS(155), 27, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - sym_unit_quote, - anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3051,17 +3058,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [825] = 3, + [837] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(159), 17, + ACTIONS(161), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3076,17 +3084,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - anon_sym_else, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(157), 28, + ACTIONS(159), 30, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -3102,17 +3110,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [879] = 3, + [893] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(163), 16, + ACTIONS(165), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3127,13 +3137,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(161), 28, + ACTIONS(163), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3152,17 +3162,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [932] = 3, + [948] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(48), 16, + ACTIONS(169), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3177,13 +3189,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(50), 28, + ACTIONS(167), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3202,17 +3214,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [985] = 3, + [1003] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 16, + ACTIONS(173), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3227,13 +3241,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(165), 28, + ACTIONS(171), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3252,17 +3266,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1038] = 3, + [1058] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(171), 16, + ACTIONS(177), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3277,13 +3293,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(169), 28, + ACTIONS(175), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3302,17 +3318,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1091] = 3, + [1113] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(175), 16, + ACTIONS(181), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3327,13 +3345,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(173), 28, + ACTIONS(179), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3352,17 +3370,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1144] = 3, + [1168] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(179), 16, + ACTIONS(185), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3377,13 +3397,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(177), 28, + ACTIONS(183), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3402,17 +3422,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1197] = 3, + [1223] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(183), 16, + ACTIONS(189), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3427,13 +3449,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(181), 28, + ACTIONS(187), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3452,17 +3474,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1250] = 3, + [1278] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(187), 16, + ACTIONS(193), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3477,13 +3501,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(185), 28, + ACTIONS(191), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3502,17 +3526,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1303] = 3, + [1333] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 16, + ACTIONS(197), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3527,13 +3553,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(189), 28, + ACTIONS(195), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3552,17 +3578,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1356] = 3, + [1388] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(195), 16, + ACTIONS(201), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3577,13 +3605,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(193), 28, + ACTIONS(199), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3602,17 +3630,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1409] = 3, + [1443] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(199), 16, + ACTIONS(205), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3627,13 +3657,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(197), 28, + ACTIONS(203), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3652,17 +3682,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1462] = 3, + [1498] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(203), 16, + ACTIONS(209), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3677,13 +3709,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(201), 28, + ACTIONS(207), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3702,17 +3734,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1515] = 3, + [1553] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(207), 16, + ACTIONS(213), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3727,13 +3761,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(205), 28, + ACTIONS(211), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3752,17 +3786,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1568] = 3, + [1608] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(211), 16, + ACTIONS(48), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3777,13 +3813,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(209), 28, + ACTIONS(50), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3802,17 +3838,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1621] = 3, + [1663] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(215), 16, + ACTIONS(217), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3827,13 +3865,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(213), 28, + ACTIONS(215), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3852,17 +3890,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1674] = 3, + [1718] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 16, + ACTIONS(221), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3877,13 +3917,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(217), 28, + ACTIONS(219), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3902,17 +3942,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1727] = 3, + [1773] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(223), 16, + ACTIONS(225), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3927,13 +3969,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(221), 28, + ACTIONS(223), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -3952,24 +3994,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1780] = 4, + [1828] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(225), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(151), 17, + ACTIONS(229), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, - anon_sym_DOT, sym_true, sym_false, anon_sym_BANG, @@ -3981,15 +4021,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(149), 25, + ACTIONS(227), 29, + ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -4005,15 +4046,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1835] = 3, + [1883] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(229), 16, + ACTIONS(233), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4028,13 +4073,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(227), 28, + ACTIONS(231), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -4053,17 +4098,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1888] = 3, + [1938] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(233), 16, + ACTIONS(237), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4078,13 +4125,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(231), 28, + ACTIONS(235), 29, ts_builtin_sym_end, sym_string, - anon_sym_LPAREN, - anon_sym_RPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -4103,67 +4150,121 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1941] = 23, - ACTIONS(5), 1, + [1993] = 4, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(239), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(145), 17, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, + aux_sym_base_ten_token1, + anon_sym_DOT, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(143), 26, + sym_string, + sym_void, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + sym_unit_quote, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - ACTIONS(13), 1, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [2049] = 23, + ACTIONS(241), 1, + sym_identifier, + ACTIONS(247), 1, + sym_default, + ACTIONS(250), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(253), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(256), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(259), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(268), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(271), 1, + anon_sym_LPAREN, + ACTIONS(274), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(235), 1, + ACTIONS(277), 1, anon_sym_RBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, STATE(11), 1, sym_number, STATE(40), 1, aux_sym_list_repeat1, - STATE(89), 1, + STATE(91), 1, sym__float, - STATE(104), 1, + STATE(112), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(244), 2, + sym_string, + sym_void, + ACTIONS(262), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(265), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4178,61 +4279,112 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2033] = 23, - ACTIONS(5), 1, + [2141] = 5, + ACTIONS(286), 1, + sym_unit_quote, + STATE(21), 1, + sym__unit, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(282), 16, sym_identifier, - ACTIONS(7), 1, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + anon_sym_for, + ACTIONS(284), 25, sym_string, + sym_void, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [2197] = 23, + ACTIONS(5), 1, + sym_identifier, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(237), 1, + ACTIONS(288), 1, anon_sym_RBRACK, STATE(11), 1, sym_number, - STATE(41), 1, + STATE(40), 1, aux_sym_list_repeat1, - STATE(89), 1, + STATE(91), 1, sym__float, - STATE(108), 1, + STATE(110), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4247,61 +4399,61 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2125] = 23, - ACTIONS(239), 1, + [2289] = 23, + ACTIONS(5), 1, sym_identifier, - ACTIONS(242), 1, - sym_string, - ACTIONS(245), 1, + ACTIONS(9), 1, sym_default, - ACTIONS(248), 1, - anon_sym_LPAREN, - ACTIONS(251), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(254), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(257), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(260), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(269), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(272), 1, + ACTIONS(25), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(275), 1, - anon_sym_RBRACK, - ACTIONS(277), 1, + ACTIONS(29), 1, anon_sym_LBRACE, + ACTIONS(290), 1, + anon_sym_RBRACK, STATE(11), 1, sym_number, - STATE(41), 1, + STATE(42), 1, aux_sym_list_repeat1, - STATE(89), 1, + STATE(91), 1, sym__float, - STATE(111), 1, + STATE(108), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(263), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(266), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4316,141 +4468,204 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2217] = 5, - ACTIONS(284), 1, - sym_unit_quote, - STATE(37), 1, - sym__unit, + [2381] = 20, + ACTIONS(139), 1, + anon_sym_COLON, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_PIPE, + ACTIONS(310), 1, + anon_sym_CARET, + ACTIONS(316), 1, + anon_sym_AMP_AMP, + ACTIONS(318), 1, + anon_sym_PIPE_PIPE, + ACTIONS(320), 1, + anon_sym_DOT_DOT, + ACTIONS(322), 1, + anon_sym_DOT_DOT_EQ, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(280), 16, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(312), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(314), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(292), 9, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(282), 24, + ACTIONS(294), 9, sym_string, - anon_sym_LPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2272] = 21, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [2466] = 21, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(292), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(298), 1, anon_sym_STAR_STAR, - ACTIONS(296), 1, + ACTIONS(302), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(306), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_PIPE, - ACTIONS(304), 1, - anon_sym_CARET, ACTIONS(310), 1, + anon_sym_CARET, + ACTIONS(316), 1, anon_sym_AMP_AMP, - ACTIONS(312), 1, + ACTIONS(318), 1, anon_sym_PIPE_PIPE, - ACTIONS(314), 1, + ACTIONS(320), 1, anon_sym_DOT_DOT, - ACTIONS(316), 1, + ACTIONS(322), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(318), 1, + ACTIONS(328), 1, anon_sym_SEMI, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 2, + ACTIONS(296), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(294), 2, + ACTIONS(300), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(298), 2, + ACTIONS(304), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(312), 2, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(308), 4, + ACTIONS(314), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(288), 7, + ACTIONS(326), 8, sym_string, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - ACTIONS(286), 9, + ACTIONS(324), 9, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_let, + anon_sym_for, + [2553] = 4, + STATE(177), 1, + sym_closure_captured_variables, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(48), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, anon_sym_if, anon_sym_let, anon_sym_for, - [2359] = 9, - ACTIONS(131), 1, + ACTIONS(50), 25, + sym_string, + sym_void, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - ACTIONS(133), 1, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [2606] = 9, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(292), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(298), 1, anon_sym_STAR_STAR, - ACTIONS(296), 1, + ACTIONS(302), 1, anon_sym_SLASH_SLASH, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 2, + ACTIONS(300), 2, anon_sym_STAR, anon_sym_SLASH, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 14, + ACTIONS(157), 14, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4465,8 +4680,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(135), 20, + ACTIONS(155), 21, sym_string, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -4486,20 +4702,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2422] = 7, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [2669] = 7, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(292), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(298), 1, anon_sym_STAR_STAR, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 16, + ACTIONS(157), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4516,8 +4731,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(135), 21, + ACTIONS(155), 22, sym_string, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -4538,28 +4754,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2481] = 10, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [2728] = 10, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(292), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(298), 1, anon_sym_STAR_STAR, - ACTIONS(296), 1, + ACTIONS(302), 1, anon_sym_SLASH_SLASH, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 2, + ACTIONS(296), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(294), 2, + ACTIONS(300), 2, anon_sym_STAR, anon_sym_SLASH, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 14, + ACTIONS(157), 14, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4574,8 +4789,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(135), 18, + ACTIONS(155), 19, sym_string, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -4593,31 +4809,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2546] = 11, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [2793] = 11, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(292), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(298), 1, anon_sym_STAR_STAR, - ACTIONS(296), 1, + ACTIONS(302), 1, anon_sym_SLASH_SLASH, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 2, + ACTIONS(296), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(294), 2, + ACTIONS(300), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(298), 2, + ACTIONS(304), 2, anon_sym_LT_LT, anon_sym_GT_GT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 14, + ACTIONS(157), 14, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4632,8 +4847,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(135), 16, + ACTIONS(155), 17, sym_string, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -4649,35 +4865,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2613] = 13, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [2860] = 13, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(292), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(298), 1, anon_sym_STAR_STAR, - ACTIONS(296), 1, + ACTIONS(302), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(306), 1, anon_sym_AMP, - ACTIONS(304), 1, + ACTIONS(310), 1, anon_sym_CARET, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 2, + ACTIONS(296), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(294), 2, + ACTIONS(300), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(298), 2, + ACTIONS(304), 2, anon_sym_LT_LT, anon_sym_GT_GT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 13, + ACTIONS(157), 13, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4691,8 +4906,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(135), 15, + ACTIONS(155), 16, sym_string, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -4707,33 +4923,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2684] = 12, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [2931] = 12, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(292), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(298), 1, anon_sym_STAR_STAR, - ACTIONS(296), 1, + ACTIONS(302), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(306), 1, anon_sym_AMP, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 2, + ACTIONS(296), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(294), 2, + ACTIONS(300), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(298), 2, + ACTIONS(304), 2, anon_sym_LT_LT, anon_sym_GT_GT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 13, + ACTIONS(157), 13, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4747,8 +4962,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(135), 16, + ACTIONS(155), 17, sym_string, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -4764,37 +4980,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2753] = 14, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [3000] = 14, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(292), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(298), 1, anon_sym_STAR_STAR, - ACTIONS(296), 1, + ACTIONS(302), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(306), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(310), 1, anon_sym_CARET, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 2, + ACTIONS(296), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(294), 2, + ACTIONS(300), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(298), 2, + ACTIONS(304), 2, anon_sym_LT_LT, anon_sym_GT_GT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 12, + ACTIONS(157), 12, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4807,8 +5022,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(135), 15, + ACTIONS(155), 16, sym_string, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -4823,45 +5039,44 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2826] = 16, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [3073] = 16, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(292), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(298), 1, anon_sym_STAR_STAR, - ACTIONS(296), 1, + ACTIONS(302), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(306), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_PIPE, - ACTIONS(304), 1, + ACTIONS(310), 1, anon_sym_CARET, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 2, + ACTIONS(296), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(294), 2, + ACTIONS(300), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(298), 2, + ACTIONS(304), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(312), 2, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(308), 4, + ACTIONS(314), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(137), 10, + ACTIONS(157), 10, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4872,8 +5087,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(135), 11, + ACTIONS(155), 12, sym_string, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -4884,58 +5100,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2903] = 17, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [3150] = 17, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(292), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(298), 1, anon_sym_STAR_STAR, - ACTIONS(296), 1, + ACTIONS(302), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(306), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_PIPE, - ACTIONS(304), 1, - anon_sym_CARET, ACTIONS(310), 1, + anon_sym_CARET, + ACTIONS(316), 1, anon_sym_AMP_AMP, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 2, + ACTIONS(296), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(294), 2, + ACTIONS(300), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(298), 2, + ACTIONS(304), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(312), 2, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(308), 4, + ACTIONS(314), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(135), 10, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - ACTIONS(137), 10, + ACTIONS(157), 10, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4946,50 +5150,62 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - [2982] = 18, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + ACTIONS(155), 11, + sym_string, + sym_void, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [3229] = 18, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(292), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(298), 1, anon_sym_STAR_STAR, - ACTIONS(296), 1, + ACTIONS(302), 1, anon_sym_SLASH_SLASH, - ACTIONS(300), 1, + ACTIONS(306), 1, anon_sym_AMP, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_PIPE, - ACTIONS(304), 1, - anon_sym_CARET, ACTIONS(310), 1, + anon_sym_CARET, + ACTIONS(316), 1, anon_sym_AMP_AMP, - ACTIONS(312), 1, + ACTIONS(318), 1, anon_sym_PIPE_PIPE, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 2, + ACTIONS(296), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(294), 2, + ACTIONS(300), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(298), 2, + ACTIONS(304), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(306), 2, + ACTIONS(312), 2, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(308), 4, + ACTIONS(314), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(135), 9, + ACTIONS(155), 10, sym_string, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -4998,7 +5214,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - ACTIONS(137), 10, + ACTIONS(157), 10, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5009,122 +5225,57 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - [3063] = 20, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, - anon_sym_COLON, - ACTIONS(292), 1, - anon_sym_STAR_STAR, - ACTIONS(296), 1, - anon_sym_SLASH_SLASH, - ACTIONS(300), 1, - anon_sym_AMP, - ACTIONS(302), 1, - anon_sym_PIPE, - ACTIONS(304), 1, - anon_sym_CARET, - ACTIONS(310), 1, - anon_sym_AMP_AMP, - ACTIONS(312), 1, - anon_sym_PIPE_PIPE, - ACTIONS(314), 1, - anon_sym_DOT_DOT, - ACTIONS(316), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(290), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(294), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(298), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(306), 2, - anon_sym_GT, - anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(308), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(322), 8, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - ACTIONS(320), 9, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, - anon_sym_let, - anon_sym_for, - [3148] = 21, + [3310] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, - aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(91), 1, sym__float, - STATE(52), 1, + STATE(93), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(58), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(73), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5139,57 +5290,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3234] = 21, + [3396] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(89), 1, - sym__float, - STATE(90), 1, + STATE(13), 1, sym_expression, - STATE(138), 1, + STATE(91), 1, + sym__float, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5204,57 +5355,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3320] = 21, + [3482] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(89), 1, + STATE(91), 1, sym__float, - STATE(96), 1, + STATE(114), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5269,57 +5420,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3406] = 21, + [3568] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(89), 1, + STATE(91), 1, sym__float, - STATE(99), 1, + STATE(111), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5334,57 +5485,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3492] = 21, + [3654] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(89), 1, + STATE(91), 1, sym__float, - STATE(101), 1, + STATE(107), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5399,57 +5550,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3578] = 21, + [3740] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(89), 1, - sym__float, STATE(91), 1, + sym__float, + STATE(113), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5464,57 +5615,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3664] = 21, + [3826] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(89), 1, + STATE(91), 1, sym__float, - STATE(92), 1, + STATE(109), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5529,57 +5680,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3750] = 21, + [3912] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(89), 1, + STATE(91), 1, sym__float, - STATE(93), 1, + STATE(103), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5594,57 +5745,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3836] = 21, + [3998] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(89), 1, - sym__float, - STATE(94), 1, + STATE(17), 1, sym_expression, - STATE(138), 1, + STATE(91), 1, + sym__float, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5659,57 +5810,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3922] = 21, + [4084] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(89), 1, + STATE(91), 1, sym__float, - STATE(106), 1, + STATE(102), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5724,57 +5875,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4008] = 21, + [4170] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_base_ten_token1, - ACTIONS(15), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, + ACTIONS(56), 1, + aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(12), 1, + STATE(13), 1, sym_expression, - STATE(89), 1, + STATE(41), 1, sym__float, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(46), 2, + sym_path, + sym_struct_definition, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5789,57 +5940,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4094] = 21, + [4256] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(89), 1, + STATE(91), 1, sym__float, - STATE(109), 1, + STATE(95), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5854,57 +6005,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4180] = 21, + [4342] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_base_ten_token1, - ACTIONS(15), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, + ACTIONS(56), 1, + aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(89), 1, + STATE(41), 1, sym__float, - STATE(107), 1, + STATE(47), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(46), 2, + sym_path, + sym_struct_definition, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5919,57 +6070,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4266] = 21, + [4428] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_base_ten_token1, - ACTIONS(15), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, + ACTIONS(56), 1, + aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(89), 1, - sym__float, - STATE(105), 1, + STATE(17), 1, sym_expression, - STATE(138), 1, + STATE(41), 1, + sym__float, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(46), 2, + sym_path, + sym_struct_definition, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5984,57 +6135,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4352] = 21, + [4514] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_base_ten_token1, - ACTIONS(15), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, + ACTIONS(56), 1, + aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(89), 1, + STATE(41), 1, sym__float, - STATE(110), 1, + STATE(48), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(46), 2, + sym_path, + sym_struct_definition, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6049,57 +6200,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4438] = 21, + [4600] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_base_ten_token1, - ACTIONS(15), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, + ACTIONS(56), 1, + aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(89), 1, + STATE(41), 1, sym__float, - STATE(103), 1, + STATE(49), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(46), 2, + sym_path, + sym_struct_definition, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6114,57 +6265,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4524] = 21, + [4686] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_base_ten_token1, - ACTIONS(15), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, + ACTIONS(56), 1, + aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(89), 1, + STATE(41), 1, sym__float, - STATE(97), 1, + STATE(50), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(46), 2, + sym_path, + sym_struct_definition, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6179,23 +6330,21 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4610] = 21, + [4772] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, @@ -6204,32 +6353,34 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(12), 1, - sym_expression, - STATE(42), 1, + STATE(41), 1, sym__float, - STATE(138), 1, + STATE(51), 1, + sym_expression, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, + STATE(46), 2, + sym_path, + sym_struct_definition, ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(73), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6244,71 +6395,86 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4696] = 4, - STATE(177), 1, - sym_closure_captured_variables, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(48), 16, + [4858] = 21, + ACTIONS(5), 1, sym_identifier, + ACTIONS(9), 1, sym_default, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(29), 1, + anon_sym_LBRACE, + ACTIONS(56), 1, aux_sym_base_ten_token1, + STATE(11), 1, + sym_number, + STATE(41), 1, + sym__float, + STATE(52), 1, + sym_expression, + STATE(154), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, + STATE(46), 2, + sym_path, + sym_struct_definition, + ACTIONS(58), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(50), 24, - sym_string, - anon_sym_LPAREN, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [4748] = 21, + STATE(152), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(32), 14, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_procedural_block, + sym_closure_definition, + [4944] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, @@ -6317,32 +6483,34 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(41), 1, sym__float, - STATE(44), 1, + STATE(53), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, + STATE(46), 2, + sym_path, + sym_struct_definition, ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(73), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6357,23 +6525,21 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4834] = 21, + [5030] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, @@ -6382,32 +6548,34 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(13), 1, - sym_expression, - STATE(42), 1, + STATE(41), 1, sym__float, - STATE(138), 1, + STATE(54), 1, + sym_expression, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, + STATE(46), 2, + sym_path, + sym_struct_definition, ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(73), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6422,23 +6590,21 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4920] = 21, + [5116] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, @@ -6447,32 +6613,34 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(41), 1, sym__float, - STATE(45), 1, + STATE(55), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, + STATE(46), 2, + sym_path, + sym_struct_definition, ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(73), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6487,23 +6655,21 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5006] = 21, + [5202] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, @@ -6512,32 +6678,34 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(41), 1, sym__float, - STATE(46), 1, + STATE(56), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, + STATE(46), 2, + sym_path, + sym_struct_definition, ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(73), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6552,57 +6720,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5092] = 21, + [5288] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, - aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(91), 1, sym__float, - STATE(47), 1, + STATE(94), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(58), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(73), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6617,57 +6785,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5178] = 21, + [5374] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, - aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(91), 1, sym__float, - STATE(48), 1, + STATE(101), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(58), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(73), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6682,57 +6850,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5264] = 21, + [5460] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, - aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(91), 1, sym__float, - STATE(49), 1, + STATE(97), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(58), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(73), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6747,57 +6915,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5350] = 21, + [5546] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, - aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(91), 1, sym__float, - STATE(50), 1, + STATE(98), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(58), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(73), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6812,57 +6980,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5436] = 21, + [5632] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, - aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(91), 1, sym__float, - STATE(51), 1, + STATE(99), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(58), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(73), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6877,57 +7045,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5522] = 21, + [5718] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, - aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(91), 1, sym__float, - STATE(53), 1, + STATE(100), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(58), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(73), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6942,57 +7110,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5608] = 21, + [5804] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(13), 1, - sym_expression, - STATE(89), 1, + STATE(91), 1, sym__float, - STATE(138), 1, + STATE(105), 1, + sym_expression, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7007,57 +7175,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5694] = 21, + [5890] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(15), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, - aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(91), 1, sym__float, - STATE(54), 1, + STATE(106), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(58), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(73), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7072,57 +7240,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5780] = 21, + [5976] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - anon_sym_LPAREN, ACTIONS(13), 1, - aux_sym_base_ten_token1, - ACTIONS(15), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, + ACTIONS(56), 1, + aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(89), 1, + STATE(41), 1, sym__float, - STATE(95), 1, + STATE(44), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(46), 2, + sym_path, + sym_struct_definition, + ACTIONS(58), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7137,57 +7305,57 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5866] = 21, + [6062] = 21, ACTIONS(5), 1, sym_identifier, - ACTIONS(7), 1, - sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - anon_sym_LPAREN, - ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(89), 1, + STATE(91), 1, sym__float, - STATE(100), 1, + STATE(96), 1, sym_expression, - STATE(138), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + STATE(92), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(98), 3, - sym_void, - sym_path, - sym_struct_definition, - STATE(149), 4, + STATE(152), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 14, + STATE(32), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7202,14 +7370,14 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5952] = 4, + [6148] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(225), 2, + ACTIONS(239), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(151), 9, + ACTIONS(145), 10, sym_identifier, anon_sym_DOT, anon_sym_STAR, @@ -7219,10 +7387,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(149), 23, + anon_sym_EQ, + ACTIONS(143), 23, ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_RPAREN, sym_unit_quote, anon_sym_COLON, anon_sym_DASH, @@ -7239,20 +7406,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [5997] = 5, - STATE(37), 1, + [6194] = 5, + STATE(21), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(284), 2, + ACTIONS(286), 2, sym_identifier, sym_unit_quote, - ACTIONS(280), 7, + ACTIONS(282), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -7260,10 +7429,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(282), 22, + anon_sym_EQ, + ACTIONS(284), 22, ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_RPAREN, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -7279,40 +7447,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6042] = 10, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, - anon_sym_COLON, - ACTIONS(326), 1, - anon_sym_STAR_STAR, + [6240] = 5, ACTIONS(330), 1, - anon_sym_SLASH_SLASH, + anon_sym_LBRACK, + STATE(170), 1, + sym_closure_captured_variables, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(48), 8, anon_sym_STAR, anon_sym_SLASH, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(135), 16, + anon_sym_EQ, + ACTIONS(50), 22, ts_builtin_sym_end, - anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -7323,243 +7487,238 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6096] = 14, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [6285] = 20, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(292), 1, + anon_sym_EQ, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(336), 1, + ACTIONS(344), 1, anon_sym_PIPE, - ACTIONS(338), 1, + ACTIONS(346), 1, anon_sym_CARET, + ACTIONS(352), 1, + anon_sym_AMP_AMP, + ACTIONS(354), 1, + anon_sym_PIPE_PIPE, + ACTIONS(356), 1, + anon_sym_DOT_DOT, + ACTIONS(358), 1, + anon_sym_DOT_DOT_EQ, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 3, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(135), 13, - ts_builtin_sym_end, - anon_sym_RPAREN, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(294), 6, + ts_builtin_sym_end, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6158] = 16, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [6359] = 13, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(137), 1, - anon_sym_DOT_DOT, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(336), 1, - anon_sym_PIPE, - ACTIONS(338), 1, + ACTIONS(346), 1, anon_sym_CARET, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(157), 5, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(155), 13, + ts_builtin_sym_end, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(135), 9, - ts_builtin_sym_end, - anon_sym_RPAREN, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6224] = 17, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [6419] = 11, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(137), 1, - anon_sym_DOT_DOT, - ACTIONS(326), 1, - anon_sym_STAR_STAR, - ACTIONS(330), 1, - anon_sym_SLASH_SLASH, + ACTIONS(141), 1, + anon_sym_LPAREN, ACTIONS(334), 1, - anon_sym_AMP, - ACTIONS(336), 1, - anon_sym_PIPE, + anon_sym_STAR_STAR, ACTIONS(338), 1, - anon_sym_CARET, - ACTIONS(344), 1, - anon_sym_AMP_AMP, + anon_sym_SLASH_SLASH, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(157), 6, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(155), 14, + ts_builtin_sym_end, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(135), 8, - ts_builtin_sym_end, - anon_sym_RPAREN, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6292] = 18, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [6475] = 10, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(137), 1, - anon_sym_DOT_DOT, - ACTIONS(326), 1, - anon_sym_STAR_STAR, - ACTIONS(330), 1, - anon_sym_SLASH_SLASH, + ACTIONS(141), 1, + anon_sym_LPAREN, ACTIONS(334), 1, - anon_sym_AMP, - ACTIONS(336), 1, - anon_sym_PIPE, + anon_sym_STAR_STAR, ACTIONS(338), 1, - anon_sym_CARET, - ACTIONS(344), 1, - anon_sym_AMP_AMP, - ACTIONS(346), 1, - anon_sym_PIPE_PIPE, + anon_sym_SLASH_SLASH, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(157), 6, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(155), 16, + ts_builtin_sym_end, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(135), 7, - ts_builtin_sym_end, - anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6362] = 9, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [6529] = 14, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, + ACTIONS(342), 1, + anon_sym_AMP, + ACTIONS(344), 1, + anon_sym_PIPE, + ACTIONS(346), 1, + anon_sym_CARET, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(328), 2, + ACTIONS(332), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 5, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(340), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(157), 4, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(135), 18, + anon_sym_EQ, + ACTIONS(155), 13, ts_builtin_sym_end, - anon_sym_RPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -7567,183 +7726,198 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6414] = 11, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [6591] = 16, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, + ACTIONS(342), 1, + anon_sym_AMP, + ACTIONS(344), 1, + anon_sym_PIPE, + ACTIONS(346), 1, + anon_sym_CARET, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(157), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 5, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(135), 14, - ts_builtin_sym_end, - anon_sym_RPAREN, - anon_sym_CARET, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(155), 9, + ts_builtin_sym_end, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6470] = 19, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [6657] = 17, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(336), 1, + ACTIONS(344), 1, anon_sym_PIPE, - ACTIONS(338), 1, + ACTIONS(346), 1, anon_sym_CARET, - ACTIONS(344), 1, + ACTIONS(352), 1, anon_sym_AMP_AMP, - ACTIONS(346), 1, - anon_sym_PIPE_PIPE, - ACTIONS(348), 1, - anon_sym_DOT_DOT, - ACTIONS(350), 1, - anon_sym_DOT_DOT_EQ, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(157), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(322), 6, + ACTIONS(155), 8, ts_builtin_sym_end, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6542] = 5, + [6725] = 18, + ACTIONS(139), 1, + anon_sym_COLON, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, + anon_sym_STAR_STAR, + ACTIONS(338), 1, + anon_sym_SLASH_SLASH, + ACTIONS(342), 1, + anon_sym_AMP, + ACTIONS(344), 1, + anon_sym_PIPE, + ACTIONS(346), 1, + anon_sym_CARET, ACTIONS(352), 1, - anon_sym_LBRACK, - STATE(155), 1, - sym_closure_captured_variables, + anon_sym_AMP_AMP, + ACTIONS(354), 1, + anon_sym_PIPE_PIPE, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(48), 7, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, + ACTIONS(157), 2, anon_sym_DOT_DOT, - ACTIONS(50), 22, - ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COLON, + anon_sym_EQ, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(348), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, + ACTIONS(155), 7, + ts_builtin_sym_end, anon_sym_DOT_DOT_EQ, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6586] = 13, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [6795] = 12, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(338), 1, - anon_sym_CARET, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 4, + ACTIONS(157), 5, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(135), 13, + anon_sym_EQ, + ACTIONS(155), 14, ts_builtin_sym_end, - anon_sym_RPAREN, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -7751,44 +7925,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6646] = 12, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [6853] = 7, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, - anon_sym_STAR_STAR, - ACTIONS(330), 1, - anon_sym_SLASH_SLASH, + ACTIONS(141), 1, + anon_sym_LPAREN, ACTIONS(334), 1, - anon_sym_AMP, + anon_sym_STAR_STAR, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(157), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 4, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(135), 14, + anon_sym_EQ, + ACTIONS(155), 19, ts_builtin_sym_end, - anon_sym_RPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -7797,37 +7966,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6704] = 7, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [6901] = 9, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, + ACTIONS(338), 1, + anon_sym_SLASH_SLASH, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(137), 7, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(157), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(135), 19, + anon_sym_EQ, + ACTIONS(155), 18, ts_builtin_sym_end, - anon_sym_RPAREN, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -7838,21 +8009,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6752] = 8, + [6953] = 8, ACTIONS(35), 1, anon_sym_DOT, - ACTIONS(354), 1, + ACTIONS(360), 1, anon_sym_COLON, - ACTIONS(356), 1, + ACTIONS(362), 1, anon_sym_EQ, - STATE(3), 1, + STATE(4), 1, aux_sym_path_repeat1, - STATE(127), 1, - sym__declaration_type, + STATE(135), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7865,8 +8037,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, ACTIONS(31), 17, - anon_sym_LPAREN, - anon_sym_RPAREN, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -7881,550 +8051,591 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - [6800] = 20, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(131), 1, anon_sym_LPAREN, - ACTIONS(133), 1, + anon_sym_RPAREN, + anon_sym_LBRACK, + [7001] = 20, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(336), 1, + ACTIONS(344), 1, anon_sym_PIPE, - ACTIONS(338), 1, + ACTIONS(346), 1, anon_sym_CARET, - ACTIONS(344), 1, + ACTIONS(352), 1, anon_sym_AMP_AMP, - ACTIONS(346), 1, + ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(348), 1, + ACTIONS(356), 1, anon_sym_DOT_DOT, - ACTIONS(350), 1, + ACTIONS(358), 1, anon_sym_DOT_DOT_EQ, - STATE(115), 1, - sym_procedural_block, + ACTIONS(366), 1, + anon_sym_EQ, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + ACTIONS(364), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6870] = 20, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [7071] = 19, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(237), 1, - anon_sym_RBRACK, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(336), 1, + ACTIONS(344), 1, anon_sym_PIPE, - ACTIONS(338), 1, + ACTIONS(346), 1, anon_sym_CARET, - ACTIONS(344), 1, + ACTIONS(352), 1, anon_sym_AMP_AMP, - ACTIONS(346), 1, + ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(348), 1, + ACTIONS(356), 1, anon_sym_DOT_DOT, - ACTIONS(350), 1, - anon_sym_DOT_DOT_EQ, ACTIONS(358), 1, + anon_sym_DOT_DOT_EQ, + STATE(22), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(332), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(336), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(340), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(348), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(368), 2, + anon_sym_RPAREN, anon_sym_COMMA, + ACTIONS(350), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [7138] = 19, + ACTIONS(139), 1, + anon_sym_COLON, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, + anon_sym_STAR_STAR, + ACTIONS(338), 1, + anon_sym_SLASH_SLASH, + ACTIONS(342), 1, + anon_sym_AMP, + ACTIONS(344), 1, + anon_sym_PIPE, + ACTIONS(346), 1, + anon_sym_CARET, + ACTIONS(352), 1, + anon_sym_AMP_AMP, + ACTIONS(354), 1, + anon_sym_PIPE_PIPE, + ACTIONS(356), 1, + anon_sym_DOT_DOT, + ACTIONS(358), 1, + anon_sym_DOT_DOT_EQ, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + ACTIONS(370), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6940] = 19, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [7205] = 20, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(288), 1, + anon_sym_RBRACK, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(336), 1, + ACTIONS(344), 1, anon_sym_PIPE, - ACTIONS(338), 1, + ACTIONS(346), 1, anon_sym_CARET, - ACTIONS(344), 1, + ACTIONS(352), 1, anon_sym_AMP_AMP, - ACTIONS(346), 1, + ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(348), 1, + ACTIONS(356), 1, anon_sym_DOT_DOT, - ACTIONS(350), 1, + ACTIONS(358), 1, anon_sym_DOT_DOT_EQ, + ACTIONS(372), 1, + anon_sym_COMMA, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(360), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7008] = 19, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [7274] = 20, + ACTIONS(29), 1, + anon_sym_LBRACE, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(336), 1, + ACTIONS(344), 1, anon_sym_PIPE, - ACTIONS(338), 1, + ACTIONS(346), 1, anon_sym_CARET, - ACTIONS(344), 1, + ACTIONS(352), 1, anon_sym_AMP_AMP, - ACTIONS(346), 1, + ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(348), 1, + ACTIONS(356), 1, anon_sym_DOT_DOT, - ACTIONS(350), 1, + ACTIONS(358), 1, anon_sym_DOT_DOT_EQ, + STATE(22), 1, + sym_dictionary_construction, + STATE(120), 1, + sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(362), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7076] = 20, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [7343] = 20, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(336), 1, + ACTIONS(344), 1, anon_sym_PIPE, - ACTIONS(338), 1, + ACTIONS(346), 1, anon_sym_CARET, - ACTIONS(344), 1, + ACTIONS(352), 1, anon_sym_AMP_AMP, - ACTIONS(346), 1, + ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(348), 1, + ACTIONS(356), 1, anon_sym_DOT_DOT, - ACTIONS(350), 1, + ACTIONS(358), 1, anon_sym_DOT_DOT_EQ, - STATE(15), 1, - sym_procedural_block, + ACTIONS(372), 1, + anon_sym_COMMA, + ACTIONS(374), 1, + anon_sym_RBRACK, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7146] = 20, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [7412] = 20, + ACTIONS(29), 1, + anon_sym_LBRACE, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(336), 1, + ACTIONS(344), 1, anon_sym_PIPE, - ACTIONS(338), 1, + ACTIONS(346), 1, anon_sym_CARET, - ACTIONS(344), 1, + ACTIONS(352), 1, anon_sym_AMP_AMP, - ACTIONS(346), 1, + ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(348), 1, + ACTIONS(356), 1, anon_sym_DOT_DOT, - ACTIONS(350), 1, - anon_sym_DOT_DOT_EQ, ACTIONS(358), 1, - anon_sym_COMMA, - ACTIONS(364), 1, - anon_sym_RBRACK, + anon_sym_DOT_DOT_EQ, + STATE(12), 1, + sym_procedural_block, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7216] = 19, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [7481] = 19, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(336), 1, + ACTIONS(344), 1, anon_sym_PIPE, - ACTIONS(338), 1, + ACTIONS(346), 1, anon_sym_CARET, - ACTIONS(344), 1, + ACTIONS(352), 1, anon_sym_AMP_AMP, - ACTIONS(346), 1, + ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(348), 1, + ACTIONS(356), 1, anon_sym_DOT_DOT, - ACTIONS(350), 1, + ACTIONS(358), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(366), 1, - anon_sym_SEMI, + ACTIONS(372), 1, + anon_sym_COMMA, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7283] = 19, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [7547] = 19, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(336), 1, + ACTIONS(344), 1, anon_sym_PIPE, - ACTIONS(338), 1, + ACTIONS(346), 1, anon_sym_CARET, - ACTIONS(344), 1, + ACTIONS(352), 1, anon_sym_AMP_AMP, - ACTIONS(346), 1, + ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(348), 1, + ACTIONS(356), 1, anon_sym_DOT_DOT, - ACTIONS(350), 1, + ACTIONS(358), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(368), 1, + ACTIONS(376), 1, anon_sym_SEMI, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7350] = 19, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [7613] = 19, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(336), 1, + ACTIONS(344), 1, anon_sym_PIPE, - ACTIONS(338), 1, + ACTIONS(346), 1, anon_sym_CARET, - ACTIONS(344), 1, + ACTIONS(352), 1, anon_sym_AMP_AMP, - ACTIONS(346), 1, + ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(348), 1, + ACTIONS(356), 1, anon_sym_DOT_DOT, - ACTIONS(350), 1, - anon_sym_DOT_DOT_EQ, ACTIONS(358), 1, - anon_sym_COMMA, + anon_sym_DOT_DOT_EQ, + ACTIONS(378), 1, + anon_sym_SEMI, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7417] = 19, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [7679] = 19, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(336), 1, + ACTIONS(344), 1, anon_sym_PIPE, - ACTIONS(338), 1, + ACTIONS(346), 1, anon_sym_CARET, - ACTIONS(344), 1, + ACTIONS(352), 1, anon_sym_AMP_AMP, - ACTIONS(346), 1, + ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(348), 1, + ACTIONS(356), 1, anon_sym_DOT_DOT, - ACTIONS(350), 1, + ACTIONS(358), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(370), 1, - ts_builtin_sym_end, + ACTIONS(380), 1, + anon_sym_RPAREN, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7484] = 19, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(133), 1, + [7745] = 19, + ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(326), 1, + ACTIONS(141), 1, + anon_sym_LPAREN, + ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(330), 1, + ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(334), 1, + ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(336), 1, + ACTIONS(344), 1, anon_sym_PIPE, - ACTIONS(338), 1, + ACTIONS(346), 1, anon_sym_CARET, - ACTIONS(344), 1, + ACTIONS(352), 1, anon_sym_AMP_AMP, - ACTIONS(346), 1, + ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(348), 1, + ACTIONS(356), 1, anon_sym_DOT_DOT, - ACTIONS(350), 1, + ACTIONS(358), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(372), 1, - anon_sym_RPAREN, + ACTIONS(382), 1, + ts_builtin_sym_end, + STATE(22), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(328), 2, + ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(332), 2, + ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(340), 2, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - STATE(38), 2, - sym_void, - sym_dictionary_construction, - ACTIONS(342), 4, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7551] = 3, + [7811] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 8, + ACTIONS(384), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8433,23 +8644,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(376), 11, + ACTIONS(386), 12, sym_string, - anon_sym_LPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, + anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7579] = 3, + [7840] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(378), 8, + ACTIONS(388), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8458,23 +8670,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(380), 11, + ACTIONS(390), 12, sym_string, - anon_sym_LPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, + anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7607] = 3, + [7869] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(382), 8, + ACTIONS(324), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8483,23 +8696,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(384), 11, + ACTIONS(326), 12, sym_string, - anon_sym_LPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, + anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7635] = 3, + [7898] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(386), 8, + ACTIONS(392), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8508,23 +8722,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(388), 11, + ACTIONS(394), 12, sym_string, - anon_sym_LPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, + anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7663] = 3, + [7927] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(286), 8, + ACTIONS(396), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8533,511 +8748,494 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(288), 11, + ACTIONS(398), 12, sym_string, - anon_sym_LPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, + anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7691] = 3, + [7956] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 6, + ACTIONS(400), 6, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, - ACTIONS(275), 11, + ACTIONS(277), 12, sym_string, - anon_sym_LPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, + anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LBRACE, - [7717] = 3, + [7983] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(392), 6, + ACTIONS(402), 6, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, - ACTIONS(394), 10, + ACTIONS(404), 11, sym_string, - anon_sym_LPAREN, + sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, + anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LBRACE, - [7742] = 7, - ACTIONS(119), 1, + [8009] = 7, + ACTIONS(121), 1, sym_varadic_dots, - ACTIONS(396), 1, + ACTIONS(406), 1, sym_identifier, - ACTIONS(398), 1, + ACTIONS(408), 1, anon_sym_RPAREN, - STATE(123), 1, + STATE(128), 1, aux_sym_struct_definition_repeat1, - STATE(139), 1, + STATE(153), 1, sym_struct_member, - STATE(170), 1, + STATE(165), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7765] = 7, - ACTIONS(117), 1, - anon_sym_RPAREN, + [8032] = 7, ACTIONS(119), 1, + anon_sym_COMMA, + ACTIONS(121), 1, sym_varadic_dots, - ACTIONS(396), 1, + ACTIONS(406), 1, sym_identifier, - STATE(121), 1, + STATE(124), 1, aux_sym_struct_definition_repeat1, - STATE(139), 1, + STATE(153), 1, sym_struct_member, - STATE(159), 1, + STATE(162), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7788] = 5, - ACTIONS(400), 1, + [8055] = 5, + ACTIONS(410), 1, sym_identifier, - STATE(123), 1, - aux_sym_struct_definition_repeat1, - STATE(169), 1, - sym_struct_member, + ACTIONS(412), 1, + sym_void, + ACTIONS(414), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(403), 2, - anon_sym_RPAREN, - sym_varadic_dots, - [7806] = 4, - ACTIONS(405), 1, + STATE(57), 2, + sym_path, + sym_struct_definition, + [8073] = 5, + ACTIONS(410), 1, sym_identifier, - ACTIONS(407), 1, + ACTIONS(414), 1, anon_sym_LPAREN, + ACTIONS(416), 1, + sym_void, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(71), 3, - sym_void, + STATE(88), 2, sym_path, sym_struct_definition, - [7822] = 4, - ACTIONS(405), 1, + [8091] = 5, + ACTIONS(418), 1, sym_identifier, - ACTIONS(407), 1, - anon_sym_LPAREN, + STATE(128), 1, + aux_sym_struct_definition_repeat1, + STATE(157), 1, + sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(85), 3, - sym_void, - sym_path, - sym_struct_definition, - [7838] = 5, + ACTIONS(421), 2, + anon_sym_RPAREN, + sym_varadic_dots, + [8109] = 4, ACTIONS(117), 1, anon_sym_RPAREN, - ACTIONS(409), 1, + ACTIONS(423), 1, sym_identifier, - STATE(131), 1, - aux_sym_dictionary_construction_repeat1, - STATE(148), 1, + STATE(138), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7855] = 3, - ACTIONS(413), 1, - anon_sym_EQ, + [8123] = 4, + ACTIONS(425), 1, + sym_identifier, + ACTIONS(427), 1, + anon_sym_RBRACK, + STATE(139), 1, + aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(411), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [7867] = 4, - ACTIONS(415), 1, + [8137] = 4, + ACTIONS(423), 1, sym_identifier, - STATE(128), 1, - aux_sym_dictionary_construction_repeat1, - STATE(175), 1, + ACTIONS(429), 1, + anon_sym_RPAREN, + STATE(150), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7881] = 2, + [8151] = 4, + ACTIONS(431), 1, + anon_sym_RPAREN, + ACTIONS(433), 1, + anon_sym_COMMA, + STATE(133), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(418), 3, + [8165] = 4, + ACTIONS(435), 1, anon_sym_RPAREN, + ACTIONS(437), 1, anon_sym_COMMA, - anon_sym_EQ, - [7891] = 2, + STATE(133), 1, + aux_sym_dictionary_construction_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [8179] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(403), 3, + ACTIONS(421), 3, sym_identifier, anon_sym_RPAREN, sym_varadic_dots, - [7901] = 4, - ACTIONS(409), 1, - sym_identifier, - STATE(128), 1, - aux_sym_dictionary_construction_repeat1, - STATE(142), 1, - sym_dictionary_member_assignment, + [8189] = 3, + ACTIONS(442), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7915] = 4, - ACTIONS(420), 1, + ACTIONS(440), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [8201] = 4, + ACTIONS(423), 1, sym_identifier, - ACTIONS(422), 1, - anon_sym_RBRACK, - STATE(133), 1, - aux_sym_closure_captured_variables_repeat1, + ACTIONS(431), 1, + anon_sym_RPAREN, + STATE(150), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7929] = 4, - ACTIONS(424), 1, + [8215] = 4, + ACTIONS(444), 1, sym_identifier, - ACTIONS(427), 1, + ACTIONS(446), 1, anon_sym_RBRACK, - STATE(133), 1, + STATE(130), 1, aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7943] = 4, - ACTIONS(405), 1, - sym_identifier, - STATE(129), 1, - sym_path, - STATE(137), 1, - sym__variable_type, + [8229] = 4, + ACTIONS(448), 1, + anon_sym_RPAREN, + ACTIONS(450), 1, + anon_sym_COMMA, + STATE(132), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7957] = 4, - ACTIONS(429), 1, + [8243] = 4, + ACTIONS(452), 1, sym_identifier, - ACTIONS(431), 1, + ACTIONS(455), 1, anon_sym_RBRACK, - STATE(132), 1, + STATE(139), 1, aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7971] = 3, - ACTIONS(131), 1, - anon_sym_LPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - STATE(33), 2, - sym_void, - sym_dictionary_construction, - [7983] = 2, + [8257] = 3, + ACTIONS(427), 1, + anon_sym_RBRACK, + ACTIONS(457), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(433), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_EQ, - [7993] = 3, - ACTIONS(435), 1, - aux_sym_signed_integer_token1, - ACTIONS(437), 1, - aux_sym_unsigned_integer_token1, + [8268] = 3, + ACTIONS(423), 1, + sym_identifier, + STATE(150), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8004] = 3, - ACTIONS(439), 1, - anon_sym_RPAREN, - ACTIONS(441), 1, - anon_sym_COMMA, + [8279] = 3, + ACTIONS(29), 1, + anon_sym_LBRACE, + STATE(37), 1, + sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8015] = 2, + [8290] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(443), 2, + ACTIONS(459), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [8024] = 3, - ACTIONS(422), 1, - anon_sym_RBRACK, - ACTIONS(445), 1, - anon_sym_COMMA, + [8299] = 3, + ACTIONS(360), 1, + anon_sym_COLON, + STATE(135), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8035] = 3, - ACTIONS(447), 1, - anon_sym_RPAREN, - ACTIONS(449), 1, - anon_sym_COMMA, + [8310] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8046] = 3, - ACTIONS(439), 1, - anon_sym_RPAREN, - ACTIONS(451), 1, + ACTIONS(455), 2, + sym_identifier, + anon_sym_RBRACK, + [8319] = 3, + ACTIONS(457), 1, anon_sym_COMMA, + ACTIONS(461), 1, + anon_sym_RBRACK, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8057] = 2, + [8330] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(453), 2, + ACTIONS(463), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [8066] = 3, - ACTIONS(455), 1, - sym_identifier, - ACTIONS(457), 1, - anon_sym_RPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8077] = 3, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(35), 1, - sym_procedural_block, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8088] = 2, + [8339] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(459), 2, + ACTIONS(465), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [8097] = 3, - ACTIONS(461), 1, + [8348] = 3, + ACTIONS(467), 1, anon_sym_RPAREN, - ACTIONS(463), 1, + ACTIONS(469), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8108] = 2, + [8359] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(465), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [8117] = 3, - ACTIONS(447), 1, + ACTIONS(435), 2, anon_sym_RPAREN, - ACTIONS(455), 1, - sym_identifier, + anon_sym_COMMA, + [8368] = 3, + ACTIONS(141), 1, + anon_sym_LPAREN, + STATE(36), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8128] = 2, + [8379] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(427), 2, - sym_identifier, - anon_sym_RBRACK, - [8137] = 3, - ACTIONS(445), 1, - anon_sym_COMMA, + ACTIONS(471), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [8388] = 3, ACTIONS(467), 1, - anon_sym_RBRACK, + anon_sym_RPAREN, + ACTIONS(473), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8148] = 3, - ACTIONS(354), 1, - anon_sym_COLON, - STATE(127), 1, - sym__declaration_type, + [8399] = 3, + ACTIONS(475), 1, + aux_sym_signed_integer_token1, + ACTIONS(477), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8159] = 3, - ACTIONS(469), 1, + [8410] = 3, + ACTIONS(479), 1, aux_sym_base_ten_token1, - STATE(17), 1, + STATE(18), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8170] = 2, - ACTIONS(471), 1, - anon_sym_DASH_GT, + [8421] = 2, + ACTIONS(481), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8178] = 2, + [8429] = 2, ACTIONS(473), 1, - sym_identifier, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8186] = 2, - ACTIONS(475), 1, - anon_sym_RPAREN, + [8437] = 2, + ACTIONS(483), 1, + anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8194] = 2, - ACTIONS(477), 1, + [8445] = 2, + ACTIONS(485), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8202] = 2, - ACTIONS(479), 1, - anon_sym_RPAREN, + [8453] = 2, + ACTIONS(457), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8210] = 2, - ACTIONS(481), 1, - sym_identifier, + [8461] = 2, + ACTIONS(487), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8218] = 2, - ACTIONS(483), 1, - sym_identifier, + [8469] = 2, + ACTIONS(489), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8226] = 2, - ACTIONS(485), 1, - anon_sym_EQ, + [8477] = 2, + ACTIONS(491), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8234] = 2, - ACTIONS(487), 1, - anon_sym_DASH_GT, + [8485] = 2, + ACTIONS(493), 1, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8242] = 2, - ACTIONS(445), 1, - anon_sym_COMMA, + [8493] = 2, + ACTIONS(495), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8250] = 2, - ACTIONS(489), 1, - anon_sym_DASH_GT, + [8501] = 2, + ACTIONS(497), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8258] = 2, - ACTIONS(491), 1, + [8509] = 2, + ACTIONS(499), 1, aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8266] = 2, - ACTIONS(455), 1, - sym_identifier, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8274] = 2, - ACTIONS(493), 1, - aux_sym_binary_token2, + [8517] = 2, + ACTIONS(501), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8282] = 2, - ACTIONS(441), 1, - anon_sym_COMMA, + [8525] = 2, + ACTIONS(503), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8290] = 2, - ACTIONS(495), 1, - anon_sym_RPAREN, + [8533] = 2, + ACTIONS(505), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8298] = 2, - ACTIONS(497), 1, - anon_sym_EQ, + [8541] = 2, + ACTIONS(507), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8306] = 2, - ACTIONS(499), 1, - anon_sym_in, + [8549] = 2, + ACTIONS(509), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8314] = 2, - ACTIONS(501), 1, + [8557] = 2, + ACTIONS(511), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8322] = 2, - ACTIONS(503), 1, - aux_sym_hex_token2, + [8565] = 2, + ACTIONS(513), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8330] = 2, - ACTIONS(505), 1, - anon_sym_COMMA, + [8573] = 2, + ACTIONS(515), 1, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8338] = 2, - ACTIONS(507), 1, - ts_builtin_sym_end, + [8581] = 2, + ACTIONS(517), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8346] = 2, - ACTIONS(509), 1, + [8589] = 2, + ACTIONS(519), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, @@ -9050,172 +9248,172 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(9)] = 214, [SMALL_STATE(10)] = 321, [SMALL_STATE(11)] = 428, - [SMALL_STATE(12)] = 485, - [SMALL_STATE(13)] = 546, + [SMALL_STATE(12)] = 487, + [SMALL_STATE(13)] = 545, [SMALL_STATE(14)] = 607, - [SMALL_STATE(15)] = 661, - [SMALL_STATE(16)] = 717, - [SMALL_STATE(17)] = 771, - [SMALL_STATE(18)] = 825, - [SMALL_STATE(19)] = 879, - [SMALL_STATE(20)] = 932, - [SMALL_STATE(21)] = 985, - [SMALL_STATE(22)] = 1038, - [SMALL_STATE(23)] = 1091, - [SMALL_STATE(24)] = 1144, - [SMALL_STATE(25)] = 1197, - [SMALL_STATE(26)] = 1250, - [SMALL_STATE(27)] = 1303, - [SMALL_STATE(28)] = 1356, - [SMALL_STATE(29)] = 1409, - [SMALL_STATE(30)] = 1462, - [SMALL_STATE(31)] = 1515, - [SMALL_STATE(32)] = 1568, - [SMALL_STATE(33)] = 1621, - [SMALL_STATE(34)] = 1674, - [SMALL_STATE(35)] = 1727, - [SMALL_STATE(36)] = 1780, - [SMALL_STATE(37)] = 1835, - [SMALL_STATE(38)] = 1888, - [SMALL_STATE(39)] = 1941, - [SMALL_STATE(40)] = 2033, - [SMALL_STATE(41)] = 2125, - [SMALL_STATE(42)] = 2217, - [SMALL_STATE(43)] = 2272, - [SMALL_STATE(44)] = 2359, - [SMALL_STATE(45)] = 2422, - [SMALL_STATE(46)] = 2481, - [SMALL_STATE(47)] = 2546, - [SMALL_STATE(48)] = 2613, - [SMALL_STATE(49)] = 2684, - [SMALL_STATE(50)] = 2753, - [SMALL_STATE(51)] = 2826, - [SMALL_STATE(52)] = 2903, - [SMALL_STATE(53)] = 2982, - [SMALL_STATE(54)] = 3063, - [SMALL_STATE(55)] = 3148, - [SMALL_STATE(56)] = 3234, - [SMALL_STATE(57)] = 3320, - [SMALL_STATE(58)] = 3406, - [SMALL_STATE(59)] = 3492, - [SMALL_STATE(60)] = 3578, - [SMALL_STATE(61)] = 3664, - [SMALL_STATE(62)] = 3750, - [SMALL_STATE(63)] = 3836, - [SMALL_STATE(64)] = 3922, - [SMALL_STATE(65)] = 4008, - [SMALL_STATE(66)] = 4094, - [SMALL_STATE(67)] = 4180, - [SMALL_STATE(68)] = 4266, - [SMALL_STATE(69)] = 4352, - [SMALL_STATE(70)] = 4438, - [SMALL_STATE(71)] = 4524, - [SMALL_STATE(72)] = 4610, - [SMALL_STATE(73)] = 4696, - [SMALL_STATE(74)] = 4748, - [SMALL_STATE(75)] = 4834, - [SMALL_STATE(76)] = 4920, - [SMALL_STATE(77)] = 5006, - [SMALL_STATE(78)] = 5092, - [SMALL_STATE(79)] = 5178, - [SMALL_STATE(80)] = 5264, - [SMALL_STATE(81)] = 5350, - [SMALL_STATE(82)] = 5436, - [SMALL_STATE(83)] = 5522, - [SMALL_STATE(84)] = 5608, - [SMALL_STATE(85)] = 5694, - [SMALL_STATE(86)] = 5780, - [SMALL_STATE(87)] = 5866, - [SMALL_STATE(88)] = 5952, - [SMALL_STATE(89)] = 5997, - [SMALL_STATE(90)] = 6042, - [SMALL_STATE(91)] = 6096, - [SMALL_STATE(92)] = 6158, - [SMALL_STATE(93)] = 6224, - [SMALL_STATE(94)] = 6292, - [SMALL_STATE(95)] = 6362, - [SMALL_STATE(96)] = 6414, - [SMALL_STATE(97)] = 6470, - [SMALL_STATE(98)] = 6542, - [SMALL_STATE(99)] = 6586, - [SMALL_STATE(100)] = 6646, - [SMALL_STATE(101)] = 6704, - [SMALL_STATE(102)] = 6752, - [SMALL_STATE(103)] = 6800, - [SMALL_STATE(104)] = 6870, - [SMALL_STATE(105)] = 6940, - [SMALL_STATE(106)] = 7008, - [SMALL_STATE(107)] = 7076, - [SMALL_STATE(108)] = 7146, - [SMALL_STATE(109)] = 7216, - [SMALL_STATE(110)] = 7283, - [SMALL_STATE(111)] = 7350, - [SMALL_STATE(112)] = 7417, - [SMALL_STATE(113)] = 7484, - [SMALL_STATE(114)] = 7551, - [SMALL_STATE(115)] = 7579, - [SMALL_STATE(116)] = 7607, - [SMALL_STATE(117)] = 7635, - [SMALL_STATE(118)] = 7663, - [SMALL_STATE(119)] = 7691, - [SMALL_STATE(120)] = 7717, - [SMALL_STATE(121)] = 7742, - [SMALL_STATE(122)] = 7765, - [SMALL_STATE(123)] = 7788, - [SMALL_STATE(124)] = 7806, - [SMALL_STATE(125)] = 7822, - [SMALL_STATE(126)] = 7838, - [SMALL_STATE(127)] = 7855, - [SMALL_STATE(128)] = 7867, - [SMALL_STATE(129)] = 7881, - [SMALL_STATE(130)] = 7891, - [SMALL_STATE(131)] = 7901, - [SMALL_STATE(132)] = 7915, - [SMALL_STATE(133)] = 7929, - [SMALL_STATE(134)] = 7943, - [SMALL_STATE(135)] = 7957, - [SMALL_STATE(136)] = 7971, - [SMALL_STATE(137)] = 7983, - [SMALL_STATE(138)] = 7993, - [SMALL_STATE(139)] = 8004, - [SMALL_STATE(140)] = 8015, - [SMALL_STATE(141)] = 8024, - [SMALL_STATE(142)] = 8035, - [SMALL_STATE(143)] = 8046, - [SMALL_STATE(144)] = 8057, - [SMALL_STATE(145)] = 8066, - [SMALL_STATE(146)] = 8077, - [SMALL_STATE(147)] = 8088, - [SMALL_STATE(148)] = 8097, - [SMALL_STATE(149)] = 8108, - [SMALL_STATE(150)] = 8117, - [SMALL_STATE(151)] = 8128, - [SMALL_STATE(152)] = 8137, - [SMALL_STATE(153)] = 8148, - [SMALL_STATE(154)] = 8159, - [SMALL_STATE(155)] = 8170, - [SMALL_STATE(156)] = 8178, - [SMALL_STATE(157)] = 8186, - [SMALL_STATE(158)] = 8194, - [SMALL_STATE(159)] = 8202, - [SMALL_STATE(160)] = 8210, - [SMALL_STATE(161)] = 8218, - [SMALL_STATE(162)] = 8226, - [SMALL_STATE(163)] = 8234, - [SMALL_STATE(164)] = 8242, - [SMALL_STATE(165)] = 8250, - [SMALL_STATE(166)] = 8258, - [SMALL_STATE(167)] = 8266, - [SMALL_STATE(168)] = 8274, - [SMALL_STATE(169)] = 8282, - [SMALL_STATE(170)] = 8290, - [SMALL_STATE(171)] = 8298, - [SMALL_STATE(172)] = 8306, - [SMALL_STATE(173)] = 8314, - [SMALL_STATE(174)] = 8322, - [SMALL_STATE(175)] = 8330, - [SMALL_STATE(176)] = 8338, - [SMALL_STATE(177)] = 8346, + [SMALL_STATE(15)] = 663, + [SMALL_STATE(16)] = 719, + [SMALL_STATE(17)] = 775, + [SMALL_STATE(18)] = 837, + [SMALL_STATE(19)] = 893, + [SMALL_STATE(20)] = 948, + [SMALL_STATE(21)] = 1003, + [SMALL_STATE(22)] = 1058, + [SMALL_STATE(23)] = 1113, + [SMALL_STATE(24)] = 1168, + [SMALL_STATE(25)] = 1223, + [SMALL_STATE(26)] = 1278, + [SMALL_STATE(27)] = 1333, + [SMALL_STATE(28)] = 1388, + [SMALL_STATE(29)] = 1443, + [SMALL_STATE(30)] = 1498, + [SMALL_STATE(31)] = 1553, + [SMALL_STATE(32)] = 1608, + [SMALL_STATE(33)] = 1663, + [SMALL_STATE(34)] = 1718, + [SMALL_STATE(35)] = 1773, + [SMALL_STATE(36)] = 1828, + [SMALL_STATE(37)] = 1883, + [SMALL_STATE(38)] = 1938, + [SMALL_STATE(39)] = 1993, + [SMALL_STATE(40)] = 2049, + [SMALL_STATE(41)] = 2141, + [SMALL_STATE(42)] = 2197, + [SMALL_STATE(43)] = 2289, + [SMALL_STATE(44)] = 2381, + [SMALL_STATE(45)] = 2466, + [SMALL_STATE(46)] = 2553, + [SMALL_STATE(47)] = 2606, + [SMALL_STATE(48)] = 2669, + [SMALL_STATE(49)] = 2728, + [SMALL_STATE(50)] = 2793, + [SMALL_STATE(51)] = 2860, + [SMALL_STATE(52)] = 2931, + [SMALL_STATE(53)] = 3000, + [SMALL_STATE(54)] = 3073, + [SMALL_STATE(55)] = 3150, + [SMALL_STATE(56)] = 3229, + [SMALL_STATE(57)] = 3310, + [SMALL_STATE(58)] = 3396, + [SMALL_STATE(59)] = 3482, + [SMALL_STATE(60)] = 3568, + [SMALL_STATE(61)] = 3654, + [SMALL_STATE(62)] = 3740, + [SMALL_STATE(63)] = 3826, + [SMALL_STATE(64)] = 3912, + [SMALL_STATE(65)] = 3998, + [SMALL_STATE(66)] = 4084, + [SMALL_STATE(67)] = 4170, + [SMALL_STATE(68)] = 4256, + [SMALL_STATE(69)] = 4342, + [SMALL_STATE(70)] = 4428, + [SMALL_STATE(71)] = 4514, + [SMALL_STATE(72)] = 4600, + [SMALL_STATE(73)] = 4686, + [SMALL_STATE(74)] = 4772, + [SMALL_STATE(75)] = 4858, + [SMALL_STATE(76)] = 4944, + [SMALL_STATE(77)] = 5030, + [SMALL_STATE(78)] = 5116, + [SMALL_STATE(79)] = 5202, + [SMALL_STATE(80)] = 5288, + [SMALL_STATE(81)] = 5374, + [SMALL_STATE(82)] = 5460, + [SMALL_STATE(83)] = 5546, + [SMALL_STATE(84)] = 5632, + [SMALL_STATE(85)] = 5718, + [SMALL_STATE(86)] = 5804, + [SMALL_STATE(87)] = 5890, + [SMALL_STATE(88)] = 5976, + [SMALL_STATE(89)] = 6062, + [SMALL_STATE(90)] = 6148, + [SMALL_STATE(91)] = 6194, + [SMALL_STATE(92)] = 6240, + [SMALL_STATE(93)] = 6285, + [SMALL_STATE(94)] = 6359, + [SMALL_STATE(95)] = 6419, + [SMALL_STATE(96)] = 6475, + [SMALL_STATE(97)] = 6529, + [SMALL_STATE(98)] = 6591, + [SMALL_STATE(99)] = 6657, + [SMALL_STATE(100)] = 6725, + [SMALL_STATE(101)] = 6795, + [SMALL_STATE(102)] = 6853, + [SMALL_STATE(103)] = 6901, + [SMALL_STATE(104)] = 6953, + [SMALL_STATE(105)] = 7001, + [SMALL_STATE(106)] = 7071, + [SMALL_STATE(107)] = 7138, + [SMALL_STATE(108)] = 7205, + [SMALL_STATE(109)] = 7274, + [SMALL_STATE(110)] = 7343, + [SMALL_STATE(111)] = 7412, + [SMALL_STATE(112)] = 7481, + [SMALL_STATE(113)] = 7547, + [SMALL_STATE(114)] = 7613, + [SMALL_STATE(115)] = 7679, + [SMALL_STATE(116)] = 7745, + [SMALL_STATE(117)] = 7811, + [SMALL_STATE(118)] = 7840, + [SMALL_STATE(119)] = 7869, + [SMALL_STATE(120)] = 7898, + [SMALL_STATE(121)] = 7927, + [SMALL_STATE(122)] = 7956, + [SMALL_STATE(123)] = 7983, + [SMALL_STATE(124)] = 8009, + [SMALL_STATE(125)] = 8032, + [SMALL_STATE(126)] = 8055, + [SMALL_STATE(127)] = 8073, + [SMALL_STATE(128)] = 8091, + [SMALL_STATE(129)] = 8109, + [SMALL_STATE(130)] = 8123, + [SMALL_STATE(131)] = 8137, + [SMALL_STATE(132)] = 8151, + [SMALL_STATE(133)] = 8165, + [SMALL_STATE(134)] = 8179, + [SMALL_STATE(135)] = 8189, + [SMALL_STATE(136)] = 8201, + [SMALL_STATE(137)] = 8215, + [SMALL_STATE(138)] = 8229, + [SMALL_STATE(139)] = 8243, + [SMALL_STATE(140)] = 8257, + [SMALL_STATE(141)] = 8268, + [SMALL_STATE(142)] = 8279, + [SMALL_STATE(143)] = 8290, + [SMALL_STATE(144)] = 8299, + [SMALL_STATE(145)] = 8310, + [SMALL_STATE(146)] = 8319, + [SMALL_STATE(147)] = 8330, + [SMALL_STATE(148)] = 8339, + [SMALL_STATE(149)] = 8348, + [SMALL_STATE(150)] = 8359, + [SMALL_STATE(151)] = 8368, + [SMALL_STATE(152)] = 8379, + [SMALL_STATE(153)] = 8388, + [SMALL_STATE(154)] = 8399, + [SMALL_STATE(155)] = 8410, + [SMALL_STATE(156)] = 8421, + [SMALL_STATE(157)] = 8429, + [SMALL_STATE(158)] = 8437, + [SMALL_STATE(159)] = 8445, + [SMALL_STATE(160)] = 8453, + [SMALL_STATE(161)] = 8461, + [SMALL_STATE(162)] = 8469, + [SMALL_STATE(163)] = 8477, + [SMALL_STATE(164)] = 8485, + [SMALL_STATE(165)] = 8493, + [SMALL_STATE(166)] = 8501, + [SMALL_STATE(167)] = 8509, + [SMALL_STATE(168)] = 8517, + [SMALL_STATE(169)] = 8525, + [SMALL_STATE(170)] = 8533, + [SMALL_STATE(171)] = 8541, + [SMALL_STATE(172)] = 8549, + [SMALL_STATE(173)] = 8557, + [SMALL_STATE(174)] = 8565, + [SMALL_STATE(175)] = 8573, + [SMALL_STATE(176)] = 8581, + [SMALL_STATE(177)] = 8589, }; static const TSParseActionEntry ts_parse_actions[] = { @@ -9223,242 +9421,247 @@ static const TSParseActionEntry ts_parse_actions[] = { [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), - [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), - [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), - [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), - [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), - [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), - [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(90), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), + [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), [31] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), [33] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), - [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(160), - [37] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), - [39] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), - [41] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), - [43] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), - [45] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(160), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(173), + [37] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), + [39] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), + [41] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(173), + [44] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), + [46] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), [48] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), [50] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [52] = {.entry = {.count = 1, .reusable = false}}, SHIFT(120), - [54] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), - [56] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36), - [58] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [60] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [62] = {.entry = {.count = 1, .reusable = false}}, SHIFT(156), - [64] = {.entry = {.count = 1, .reusable = false}}, SHIFT(161), - [66] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [52] = {.entry = {.count = 1, .reusable = false}}, SHIFT(123), + [54] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [56] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), + [58] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [60] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [62] = {.entry = {.count = 1, .reusable = false}}, SHIFT(166), + [64] = {.entry = {.count = 1, .reusable = false}}, SHIFT(169), + [66] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), [68] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(2), - [71] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [74] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [77] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [80] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(36), - [83] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(166), - [86] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(174), - [89] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(168), - [92] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(25), - [95] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(72), - [98] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(67), - [101] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(39), - [104] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(8), + [71] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(32), + [74] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(32), + [77] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(39), + [80] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(167), + [83] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(164), + [86] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(175), + [89] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(23), + [92] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(67), + [95] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(60), + [98] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(10), + [101] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(43), + [104] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(7), [107] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), - [109] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(156), - [112] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(161), - [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(102), - [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), - [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), - [121] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [123] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [125] = {.entry = {.count = 1, .reusable = false}}, SHIFT(154), - [127] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), - [129] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), - [131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), - [135] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 13), - [137] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 13), - [139] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 2, 0, 0), - [141] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 2, 0, 0), - [143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 11), - [145] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 11), - [147] = {.entry = {.count = 1, .reusable = false}}, SHIFT(146), - [149] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), - [151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), - [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), - [155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), - [157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 3, 0, 0), - [159] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 3, 0, 0), - [161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 8), - [163] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 8), - [165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [167] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [169] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [171] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [173] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 9), - [175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 9), - [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 10), - [179] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 10), - [181] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [183] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [187] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [189] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_void, 2, 0, 0), - [191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_void, 2, 0, 0), - [193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), - [195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), - [197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [199] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 17), - [203] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 17), - [205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 18), - [207] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 18), - [209] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [211] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [213] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 19), - [215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 19), - [217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 21), - [219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 21), - [221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 22), - [223] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 22), - [225] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), - [227] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), - [229] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), - [231] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), - [233] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), - [235] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [239] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(2), - [242] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [245] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [248] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [251] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(88), - [254] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(166), - [257] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(174), - [260] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(168), - [263] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(25), - [266] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(65), - [269] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(67), - [272] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(39), - [275] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [277] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(8), - [280] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [284] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), - [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), - [290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), - [292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), - [294] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), - [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), - [298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), - [300] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), - [302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(79), - [304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), - [306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(81), - [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), - [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), - [312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), - [314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(83), - [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [320] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 24), - [322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 24), - [324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), - [328] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), - [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), - [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), - [334] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), - [336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), - [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [340] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), - [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), - [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), - [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), - [356] = {.entry = {.count = 1, .reusable = false}}, SHIFT(64), - [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), - [360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 20), - [362] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 16), - [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), - [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), - [370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [374] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assign, 4, 0, 23), - [376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assign, 4, 0, 23), - [378] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for, 5, 0, 26), - [380] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for, 5, 0, 26), - [382] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let, 5, 0, 25), - [384] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let, 5, 0, 25), - [386] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closed_expression, 2, 0, 0), - [388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closed_expression, 2, 0, 0), - [390] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [392] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_operator, 1, 0, 3), - [394] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_operator, 1, 0, 3), - [396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), - [398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [400] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(153), - [403] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), - [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), - [411] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 7), - [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [415] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(162), - [418] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_type, 1, 0, 15), - [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), - [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), - [424] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(164), - [427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), - [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), - [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), - [433] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__declaration_type, 2, 0, 14), - [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [439] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), - [443] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), - [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), - [453] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [465] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), - [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), - [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), - [475] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [477] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), - [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), - [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [487] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), - [489] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), - [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), - [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), - [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), - [507] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [109] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(166), + [112] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(169), + [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(104), + [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), + [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [123] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [125] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [127] = {.entry = {.count = 1, .reusable = false}}, SHIFT(155), + [129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 7), + [131] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 7), + [133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(142), + [135] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), + [137] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), + [139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [145] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [147] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 2, 0, 0), + [149] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 2, 0, 0), + [151] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 3, 0, 0), + [153] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 3, 0, 0), + [155] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 13), + [157] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 13), + [159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), + [161] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), + [163] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), + [165] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), + [167] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [169] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), + [173] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), + [175] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), + [177] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), + [179] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [181] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [183] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [185] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [187] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [189] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [191] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 0), + [193] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 0), + [195] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [197] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), + [201] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), + [203] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 10), + [205] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 10), + [207] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 11), + [209] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 11), + [211] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [213] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [215] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 15), + [217] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 15), + [219] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 16), + [221] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 16), + [223] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [225] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [227] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 17), + [229] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 17), + [231] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 18), + [233] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 18), + [235] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 20), + [237] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 20), + [239] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), + [241] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(2), + [244] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(32), + [247] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(32), + [250] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(90), + [253] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(167), + [256] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(164), + [259] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(175), + [262] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(23), + [265] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(58), + [268] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(60), + [271] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), + [274] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(43), + [277] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [279] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(7), + [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [286] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [288] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 22), + [294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 22), + [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [300] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), + [302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(73), + [308] = {.entry = {.count = 1, .reusable = false}}, SHIFT(74), + [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), + [314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [320] = {.entry = {.count = 1, .reusable = false}}, SHIFT(79), + [322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), + [324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), + [326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), + [328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), + [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), + [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [342] = {.entry = {.count = 1, .reusable = false}}, SHIFT(68), + [344] = {.entry = {.count = 1, .reusable = false}}, SHIFT(80), + [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82), + [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [356] = {.entry = {.count = 1, .reusable = false}}, SHIFT(85), + [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [362] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87), + [364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), + [366] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), + [368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 14), + [370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 19), + [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [382] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [384] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assign, 4, 0, 21), + [386] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assign, 4, 0, 21), + [388] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let, 5, 0, 23), + [390] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let, 5, 0, 23), + [392] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for, 5, 0, 24), + [394] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for, 5, 0, 24), + [396] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closed_expression, 2, 0, 0), + [398] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closed_expression, 2, 0, 0), + [400] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [402] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_operator, 1, 0, 3), + [404] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_operator, 1, 0, 3), + [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [418] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(144), + [421] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), + [435] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [437] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(141), + [440] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 8), + [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), + [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [452] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(160), + [455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [463] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [465] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), + [471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [485] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), + [487] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), + [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [507] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), + [509] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), + [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [513] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index 9edcbf8..9d5724d 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -2,14 +2,63 @@ Empty ================== -()[] -> std.None {} +(,)[] -> std.None {} --- (source_file (expression (closure_definition - (void) + (struct_definition) + (closure_captured_variables) + (path + (identifier) + (identifier)) + (expression + (procedural_block))))) + +================== +With argument +================== + +(argument: std.types.UInt)[] -> std.None {} + +--- + +(source_file + (expression + (closure_definition + (struct_definition + (struct_member + (identifier) + (declaration_type + (expression + (path + (identifier) + (identifier) + (identifier)))))) + (closure_captured_variables) + (path + (identifier) + (identifier)) + (expression + (procedural_block))))) + +================== +Path for argument signature +================== + +path.to.signature[] -> std.None {} + +--- + +(source_file + (expression + (closure_definition + (path + (identifier) + (identifier) + (identifier)) (closure_captured_variables) (path (identifier) @@ -21,14 +70,14 @@ Empty Capture ================== -()[a, b, c] -> std.None {} +(,)[a, b, c] -> std.None {} --- (source_file (expression (closure_definition - (void) + (struct_definition) (closure_captured_variables (identifier) (identifier) @@ -43,14 +92,14 @@ Capture Capture, ================== -()[a, b, c,] -> std.None {} +(,)[a, b, c,] -> std.None {} --- (source_file (expression (closure_definition - (void) + (struct_definition) (closure_captured_variables (identifier) (identifier) @@ -65,7 +114,7 @@ Capture, With a statement ================== -()[] -> std.None { +(,)[] -> std.None { value = 5i; } @@ -74,7 +123,7 @@ With a statement (source_file (expression (closure_definition - (void) + (struct_definition) (closure_captured_variables) (path (identifier) @@ -124,7 +173,7 @@ value() (expression (path (identifier))) - (void)))) + (dictionary_construction)))) ================== Call function deep in tree @@ -185,7 +234,7 @@ value:value() (path (identifier))) (identifier) - (void)))) + (dictionary_construction)))) ================== Call method deep in tree diff --git a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt index eb0dd11..e7cd292 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt @@ -3,7 +3,7 @@ Comment ================== # There's a comment before the code. -() +~ --- @@ -17,7 +17,7 @@ Comment before closure ================== # There's a comment before the code. -()[]->std.None {} +(,)[]->std.None {} --- @@ -25,7 +25,7 @@ Comment before closure (comment) (expression (closure_definition - (void) + (struct_definition) (closure_captured_variables) (path (identifier) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt b/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt index b6b06d0..7223a97 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt @@ -1,3 +1,15 @@ +================== +Empty +================== + +() + +--- + +(source_file + (expression + (dictionary_construction))) + ================== One ================== diff --git a/crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt b/crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt index 55ee92f..e6d1da7 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt @@ -18,3 +18,23 @@ For loop (path (identifier))) (procedural_block)))))) + +================== +For with void +================== + + { + for x in ~ {} + } + +--- + +(source_file + (expression + (procedural_block + (statement + (for + (identifier) + (expression + (void)) + (procedural_block)))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt b/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt index 6727336..b4c4389 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt @@ -1,8 +1,8 @@ ================== -Comment +Void ================== -() +~ --- diff --git a/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt b/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt index 6d7181a..500d560 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt @@ -11,9 +11,11 @@ One (struct_definition (struct_member (identifier) - (path - (identifier) - (identifier)))))) + (declaration_type + (expression + (path + (identifier) + (identifier)))))))) ================== One, @@ -28,9 +30,11 @@ One, (struct_definition (struct_member (identifier) - (path - (identifier) - (identifier)))))) + (declaration_type + (expression + (path + (identifier) + (identifier)))))))) ================== ... @@ -71,9 +75,11 @@ One, ... (struct_definition (struct_member (identifier) - (path - (identifier) - (identifier))) + (declaration_type + (expression + (path + (identifier) + (identifier))))) (varadic_dots)))) ================== @@ -89,9 +95,11 @@ One, ..., (struct_definition (struct_member (identifier) - (path - (identifier) - (identifier))) + (declaration_type + (expression + (path + (identifier) + (identifier))))) (varadic_dots)))) ================== @@ -107,14 +115,18 @@ One, two (struct_definition (struct_member (identifier) - (path - (identifier) - (identifier))) + (declaration_type + (expression + (path + (identifier) + (identifier))))) (struct_member (identifier) - (path - (identifier) - (identifier)))))) + (declaration_type + (expression + (path + (identifier) + (identifier)))))))) ================== One, two, @@ -129,37 +141,18 @@ One, two, (struct_definition (struct_member (identifier) - (path - (identifier) - (identifier))) + (declaration_type + (expression + (path + (identifier) + (identifier))))) (struct_member (identifier) - (path - (identifier) - (identifier)))))) - -================== -One, two, ... -================== - -( one: std.Constraint, two: std.Constraint, ... ) - ---- - -(source_file - (expression - (struct_definition - (struct_member - (identifier) - (path - (identifier) - (identifier))) - (struct_member - (identifier) - (path - (identifier) - (identifier))) - (varadic_dots)))) + (declaration_type + (expression + (path + (identifier) + (identifier)))))))) ================== One, two, ..., @@ -174,14 +167,18 @@ One, two, ..., (struct_definition (struct_member (identifier) - (path - (identifier) - (identifier))) + (declaration_type + (expression + (path + (identifier) + (identifier))))) (struct_member (identifier) - (path - (identifier) - (identifier))) + (declaration_type + (expression + (path + (identifier) + (identifier))))) (varadic_dots)))) ================== @@ -197,9 +194,11 @@ Default (struct_definition (struct_member (identifier) - (path - (identifier) - (identifier)) + (declaration_type + (expression + (path + (identifier) + (identifier)))) (expression (path (identifier))))))) @@ -217,9 +216,11 @@ Default, (struct_definition (struct_member (identifier) - (path - (identifier) - (identifier)) + (declaration_type + (expression + (path + (identifier) + (identifier)))) (expression (path (identifier))))))) diff --git a/crates/units/src/lib.rs b/crates/units/src/lib.rs index 2e87b61..39d7b18 100644 --- a/crates/units/src/lib.rs +++ b/crates/units/src/lib.rs @@ -15,10 +15,13 @@ pub fn get_conversion_factor(name: &str) -> Option<&'static ConversionFactor> { database.get(name) } -pub fn get_dimension_name(dimension: &Dimension) -> Cow<'static, str> { +fn get_named_dimensions() -> &'static DimensionNameDatabase { static DIMENSIONS: OnceLock = OnceLock::new(); - let database = - DIMENSIONS.get_or_init(|| include!(concat!(env!("OUT_DIR"), "/dimension_names.rs"))); + DIMENSIONS.get_or_init(|| include!(concat!(env!("OUT_DIR"), "/dimension_names.rs"))) +} + +pub fn get_dimension_name(dimension: &Dimension) -> Cow<'static, str> { + let database = get_named_dimensions(); if let Some(name) = database.get(dimension) { Cow::Borrowed(name) @@ -39,6 +42,14 @@ pub fn get_dimension_name(dimension: &Dimension) -> Cow<'static, str> { } } +pub fn list_named_dimensions() -> impl Iterator { + let database = get_named_dimensions(); + + database + .iter() + .map(|(dimension, name)| (name.as_str(), *dimension)) +} + pub fn get_unit_list() -> &'static Vec<(String, Vec)> { static UNIT_LIST: OnceLock = OnceLock::new(); let list = UNIT_LIST.get_or_init(|| include!(concat!(env!("OUT_DIR"), "/unit_list.rs"))); From cfc86cbca6ca5af29e4ddfad9d360e90273047db Mon Sep 17 00:00:00 2001 From: James Carl Date: Tue, 15 Apr 2025 23:27:55 -0400 Subject: [PATCH 020/106] WIP closures --- crates/interpreter/src/execution/heap.rs | 3 +- crates/interpreter/src/execution/mod.rs | 6 ++ .../src/execution/values/closure.rs | 10 ++ .../interpreter/src/execution/values/mod.rs | 2 +- .../src/execution/values/value_type.rs | 99 ++++++++++++++----- 5 files changed, 96 insertions(+), 24 deletions(-) diff --git a/crates/interpreter/src/execution/heap.rs b/crates/interpreter/src/execution/heap.rs index 4b62474..c472732 100644 --- a/crates/interpreter/src/execution/heap.rs +++ b/crates/interpreter/src/execution/heap.rs @@ -22,12 +22,13 @@ use std::{ sync::atomic::{AtomicUsize, Ordering}, }; -use super::values::DictionaryStorage; +use super::values::{DictionaryStorage, StructMemberStorage}; #[derive(Debug, Default)] /// A collection of objects that are stored on the heap. pub struct Heap { pub dictionaries: DictionaryStorage, + pub struct_members: StructMemberStorage, } #[derive(Debug, Hash, Eq, PartialEq)] diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 89f3ac6..e7b8e5d 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -656,6 +656,12 @@ mod test { assert_eq!(product, values::UnsignedInteger::from(32).into()); } + #[test] + fn define_closure() { + let product = test_run("(~)[std.types] -> std.types.Void {}").unwrap().0; + assert_eq!(product, values::UnsignedInteger::from(32).into()); + } + // #[test] // fn nested_value_creation() { // let product = diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 49d6a2d..84bf2d5 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -33,6 +33,12 @@ pub struct CapturedValue { pub value: Value, } +impl CapturedValue { + fn drop(self, heap: &mut Heap) { + self.value.drop(heap); + } +} + /// Signature of a closure, used for type comparison. #[derive(Debug, Eq, PartialEq)] pub struct Signature { @@ -70,6 +76,10 @@ impl Object for UserClosure { fn get_type(&self) -> ValueType { ValueType::Closure(self.data.signature.clone()) } + + fn drop(self, heap: &mut Heap) { + todo!() + } } impl StaticTypeName for UserClosure { diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 7e8c434..9b8fb41 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -52,7 +52,7 @@ mod dictionary; pub use dictionary::{Dictionary, DictionaryStorage}; mod value_type; -pub use value_type::{StructDefinition, StructMember, ValueType}; +pub use value_type::{StructDefinition, StructMember, StructMemberStorage, ValueType}; pub trait StaticTypeName { /// Provides the type name without having an instance of the object. diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index c7afe6a..8754d64 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -20,17 +20,25 @@ use std::{borrow::Cow, fmt::Display, sync::Arc}; use common_data_types::Dimension; use super::{ - closure::Signature as ClosureSignature, Boolean, DefaultValue, Object, SignedInteger, - StaticTypeName, UnsignedInteger, Value, Void, + closure::Signature as ClosureSignature, Boolean, DefaultValue, Object, ObjectClone, + SignedInteger, StaticTypeName, UnsignedInteger, Value, Void, }; use crate::{ compile::{self, AstNode, SourceReference}, execute_expression, - execution::{errors::ExpressionResult, logging::RuntimeLog, stack::Stack, Heap}, + execution::{ + errors::ExpressionResult, + heap::{HeapKey, HeapStorage}, + logging::RuntimeLog, + stack::Stack, + Heap, + }, }; -#[derive(Debug, Eq, PartialEq, Clone)] +pub type StructMemberStorage = HeapStorage>; + +#[derive(Debug, Eq, PartialEq)] pub enum ValueType { Void, Default, @@ -90,6 +98,25 @@ impl StaticTypeName for ValueType { } } +impl ObjectClone for ValueType { + fn object_clone(&self, heap: &Heap) -> Value { + match self { + Self::Void => Self::Void, + Self::Default => Self::Default, + Self::Boolean => Self::Boolean, + Self::SignedInteger => Self::SignedInteger, + Self::UnsignedInteger => Self::UnsignedInteger, + Self::Scalar(dimension) => Self::Scalar(*dimension), + Self::Closure(signature) => Self::Closure(signature), + Self::Dictionary(struct_definition) => { + Self::Dictionary(struct_definition.object_clone(heap)) + } + Self::ValueType => Self::ValueType, + } + .into() + } +} + #[derive(Debug, Eq, PartialEq)] pub struct StructMember { pub name: String, @@ -116,6 +143,12 @@ impl StructMember { Ok(Self { name, ty, default }) } + + fn drop(self, heap: &mut Heap) { + if let Some(default) = self.default { + default.drop(heap); + } + } } impl Display for StructMember { @@ -128,9 +161,9 @@ impl Display for StructMember { } } -#[derive(Debug, Eq, PartialEq, Clone)] +#[derive(Debug, Eq, PartialEq)] pub struct StructDefinition { - pub members: Arc>, + pub members: HeapKey, pub variadic: bool, } @@ -147,34 +180,56 @@ impl StructDefinition { members.push(StructMember::new(log, stack_trace, stack, heap, member)?); } - let members = Arc::new(members); + let members = heap.struct_members.new_allocation(members); let variadic = source.node.variadic; Ok(Self { members, variadic }) } + + fn drop(self, heap: &mut Heap) { + if let Some(members) = heap.struct_members.dereference_allocation(self.members) { + for member in members { + member.drop(heap); + } + } + } + + fn object_clone(&self, heap: &Heap) -> StructDefinition { + let members = heap.struct_members.reference_allocation(&self.members); + + Self { + members, + variadic: self.variadic, + } + } } impl Display for StructDefinition { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "(")?; - let mut member_iter = self.members.iter(); + if self.members.is_empty() { + if self.variadic { + write!(f, "...")?; + } else { + write!(f, "~")?; + } + } else { + let mut member_iter = self.members.iter(); - // The first member should not have a comma before it. - if let Some(first_member) = member_iter.next() { - write!(f, "{}", first_member)?; - } + // The first member should not have a comma before it. + if let Some(first_member) = member_iter.next() { + write!(f, "{}", first_member)?; + } - // All other members get a comma before them. - for member in member_iter { - write!(f, ", {}", member)?; - } + // All other members get a comma before them. + for member in member_iter { + write!(f, ", {}", member)?; + } - // This struct is variadic. - if self.variadic { - // Only put a comma before the dots if there were any members before it. - if self.members.is_empty() { - write!(f, "...")?; - } else { + // This struct is variadic. + if self.variadic { + // We're not empty, so something is guaranteed to have been printed before the + // dots. Make sure to put a comma before the dots. write!(f, ", ...")?; } } From 2ae214bc4fc4494483eba121c9a603f836511040 Mon Sep 17 00:00:00 2001 From: James Carl Date: Tue, 29 Apr 2025 02:01:51 -0400 Subject: [PATCH 021/106] Remove the heap and start moving values instead --- crates/interpreter/src/compile/statements.rs | 25 +- crates/interpreter/src/execution/heap.rs | 169 ------- crates/interpreter/src/execution/mod.rs | 393 ++++++---------- crates/interpreter/src/execution/stack.rs | 101 ++-- .../src/execution/standard_environment.rs | 25 +- .../src/execution/values/boolean.rs | 30 +- .../src/execution/values/closure.rs | 21 +- .../src/execution/values/default.rs | 2 +- .../src/execution/values/dictionary.rs | 95 ++-- .../src/execution/values/integer.rs | 184 ++++---- .../interpreter/src/execution/values/mod.rs | 267 +++++++---- .../src/execution/values/scalar.rs | 82 ++-- .../src/execution/values/value_type.rs | 71 +-- .../interpreter/src/execution/values/void.rs | 2 +- .../tree-sitter-command-cad-model/grammar.js | 2 +- .../src/grammar.json | 2 +- .../src/node-types.json | 2 +- .../src/parser.c | 437 +++++++++--------- .../test/corpus/assignment.txt | 2 +- 19 files changed, 803 insertions(+), 1109 deletions(-) delete mode 100644 crates/interpreter/src/execution/heap.rs diff --git a/crates/interpreter/src/compile/statements.rs b/crates/interpreter/src/compile/statements.rs index 8e3b64a..20521cd 100644 --- a/crates/interpreter/src/compile/statements.rs +++ b/crates/interpreter/src/compile/statements.rs @@ -68,7 +68,7 @@ impl<'t> Parse<'t, nodes::Assign<'t>> for Assign { #[derive(Debug, Hash, Eq, PartialEq)] pub struct Let { - pub to_assign: AstNode, + pub to_assign: AstNode, pub value: AstNode, } @@ -78,7 +78,7 @@ impl<'t> Parse<'t, nodes::Let<'t>> for Let { input: &'i str, value: nodes::Let<'t>, ) -> Result, super::Error<'t, 'i>> { - let to_assign = String::parse(file, input, value.to_assign()?)?; + let to_assign = IdentityPath::parse(file, input, value.to_assign()?)?; let assigned_value = Expression::parse(file, input, value.value()?)?; Ok(AstNode::new( @@ -275,7 +275,7 @@ mod test { #[test] fn assign_let() { - let root = full_compile("{ let my_value = ~; }"); + let root = full_compile("{ let my_value.sub_value = ~; }"); let block = root.node.as_proceduralblock().unwrap(); let statement = &block.node.statements[0]; let let_assign = statement.node.as_let().unwrap(); @@ -293,7 +293,24 @@ mod test { node: Let { to_assign: AstNode { reference: let_assign.node.to_assign.reference.clone(), - node: "my_value".to_string() + node: IdentityPath { + path: vec![ + AstNode { + reference: let_assign.node.to_assign.node.path + [0] + .reference + .clone(), + node: "my_value".to_string() + }, + AstNode { + reference: let_assign.node.to_assign.node.path + [1] + .reference + .clone(), + node: "sub_value".to_string() + } + ] + } }, value: AstNode { reference: let_assign.node.value.reference.clone(), diff --git a/crates/interpreter/src/execution/heap.rs b/crates/interpreter/src/execution/heap.rs deleted file mode 100644 index c472732..0000000 --- a/crates/interpreter/src/execution/heap.rs +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright 2025 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::{ - collections::HashMap, - num::NonZeroUsize, - sync::atomic::{AtomicUsize, Ordering}, -}; - -use super::values::{DictionaryStorage, StructMemberStorage}; - -#[derive(Debug, Default)] -/// A collection of objects that are stored on the heap. -pub struct Heap { - pub dictionaries: DictionaryStorage, - pub struct_members: StructMemberStorage, -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct HeapKey(NonZeroUsize); - -#[derive(Debug)] -struct HeapData { - reference_count: AtomicUsize, - data: D, -} - -#[derive(Debug)] -pub struct HeapStorage { - allocations: HashMap>, - unused_keys: Vec, - next_key: usize, -} - -impl HeapStorage { - fn next_free_key(&mut self) -> HeapKey { - if let Some(key) = self.unused_keys.pop() { - HeapKey(key) - } else { - let key = self.next_key; - self.next_key += 1; - HeapKey(NonZeroUsize::new(key).expect("Key was zero")) - } - } - - pub fn get(&self, key: &HeapKey) -> &D { - &self - .allocations - .get(&key.0) - .expect("Zombie key used for reference") - .data - } - - pub fn get_mut(&mut self, key: &HeapKey) -> &mut D { - &mut self - .allocations - .get_mut(&key.0) - .expect("Zombie key used for reference") - .data - } - - /// Creates a new allocation from the given data and returns a key - /// for the first reference. - #[must_use] - pub fn new_allocation(&mut self, data: D) -> HeapKey { - let key = self.next_free_key(); - - let data = HeapData { - // Reference count starts as one since a key already exists. - reference_count: AtomicUsize::new(1), - data, - }; - self.allocations.insert(key.0, data); - - key - } - - /// Increments the reference count of a dictionary by one. - #[must_use] - pub fn reference_allocation(&self, key: &HeapKey) -> HeapKey { - let data = self.allocations.get(&key.0).expect("Zombie key referenced"); - - data.reference_count.fetch_add(1, Ordering::AcqRel); - - // The user can't clone keys themselves, so we'll do that for them. - HeapKey(key.0) - } - - /// Decrements the reference count of a dictionary by one. - /// Returns the allocation if the reference count reaches zero. - pub fn dereference_allocation(&mut self, key: HeapKey) -> Option { - let data = self - .allocations - .get_mut(&key.0) - .expect("Zombie key dropped"); - - let previous_count = data.reference_count.fetch_sub(1, Ordering::AcqRel); - let raw_key = key.0; - - // Make sure the key doesn't run its drop method, otherwise it'll panic. - std::mem::forget(key); - - if previous_count - 1 == 0 { - // No more references. Drop the data. - let data = self - .allocations - .remove(&raw_key) - .expect("Data to delete vanished"); - self.unused_keys.push(raw_key); - - Some(data.data) - } else { - None - } - } -} - -impl Default for HeapStorage { - fn default() -> Self { - Self { - allocations: HashMap::new(), - unused_keys: Vec::new(), - next_key: 1, - } - } -} - -#[cfg(debug_assertions)] -impl Drop for HeapStorage { - fn drop(&mut self) { - assert!( - self.allocations.is_empty(), - "Heap storage was not empty: {self:?}", - ); - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn free_key() { - let mut heap = HeapStorage::default(); - let key = heap.new_allocation(24); - let key2 = heap.reference_allocation(&key); - - let freed_data = heap.dereference_allocation(key); - assert!(freed_data.is_none()); - - let freed_data = heap.dereference_allocation(key2); - assert_eq!(freed_data, Some(24)); - } -} diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index e7b8e5d..fd5474e 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -25,78 +25,21 @@ use crate::compile::{ mod errors; mod formatting; -mod heap; mod logging; mod stack; mod standard_environment; -use standard_environment::build_prelude; pub mod values; use errors::{ErrorType, ExpressionResult, Raise}; -use heap::Heap; use logging::{LocatedStr, RuntimeLog, StackScope}; use stack::{ScopeType, Stack}; -use values::{Object, ObjectClone as _, Value, ValueType}; +use values::{Object, StoredValue, Value, ValueType}; -fn find_value<'a>( +fn find_value<'p, 's>( log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - stack: &Stack, - heap: &Heap, - path_iter: impl IntoIterator>, -) -> ExpressionResult { - let mut path_iter = path_iter.into_iter(); - let root = path_iter.next().expect("Path is empty"); - - let stack_value = stack.get_variable( - stack_trace, - LocatedStr { - location: root.reference.clone(), - string: &root.node, - }, - )?; - - // Ok(value.object_clone(heap)) - if let Some(sub_path) = path_iter.next() { - // We need the value off the heap. - - let mut value = stack_value.get_attribute_ref( - log, - stack_trace, - heap, - &LocatedStr { - location: sub_path.reference.clone(), - string: &sub_path.node, - }, - )?; - - // Follow the chain of elements to evaluate the whole path. - for sub_path in path_iter { - value = value.get_attribute_ref( - log, - stack_trace, - heap, - &LocatedStr { - location: sub_path.reference.clone(), - string: &sub_path.node, - }, - )?; - } - - Ok(value.object_clone(heap)) - } else { - // We just needed the value off the stack. - Ok(stack_value.object_clone(heap)) - } -} - -fn find_value_mut<'a>( - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - stack: &mut Stack, - heap: &mut Heap, - path_iter: impl IntoIterator>, - access: impl FnOnce(&mut Value), -) -> ExpressionResult<()> { + stack: &'s mut Stack, + path_iter: impl IntoIterator>, +) -> ExpressionResult<&'s mut StoredValue> { let mut path_iter = path_iter.into_iter().peekable(); let root = path_iter.next().expect("Path is empty"); @@ -111,10 +54,9 @@ fn find_value_mut<'a>( if let Some(sub_path) = path_iter.next() { // We need the value off the heap. - let mut value = stack_value.get_attribute_ref( + let mut value = stack_value.access_mut(stack_trace)?.get_attribute_mut( log, stack_trace, - heap, &LocatedStr { location: sub_path.reference.clone(), string: &sub_path.node, @@ -127,26 +69,20 @@ fn find_value_mut<'a>( // That's the last element of the path. We break out early because the // last one needs to be a mutable borrow. - let mut value = value.object_clone(heap); - let final_value = value.get_attribute_mut( + let final_value = value.access_mut(stack_trace)?.get_attribute_mut( log, stack_trace, - heap, &LocatedStr { location: sub_path.reference.clone(), string: &sub_path.node, }, )?; - access(final_value); - value.drop(heap); - - break; + return Ok(final_value); } else { - value = value.get_attribute_ref( + value = value.access_mut(stack_trace)?.get_attribute_mut( log, stack_trace, - heap, &LocatedStr { location: sub_path.reference.clone(), string: &sub_path.node, @@ -155,11 +91,10 @@ fn find_value_mut<'a>( } } - Ok(()) + Ok(value) } else { // We just needed the value off the stack. - access(stack_value); - Ok(()) + Ok(stack_value) } } @@ -167,14 +102,13 @@ pub fn execute_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, - heap: &mut Heap, expression: &compile::AstNode, ) -> ExpressionResult { stack_trace.stack_scope( expression.reference.clone(), |stack_trace| match &expression.node { compile::Expression::BinaryExpression(ast_node) => { - execute_binary_expression(log, stack_trace, stack, heap, ast_node) + execute_binary_expression(log, stack_trace, stack, ast_node) } compile::Expression::Boolean(ast_node) => Ok(values::Boolean(ast_node.node).into()), compile::Expression::ClosureDefinition(ast_node) => { @@ -182,20 +116,22 @@ pub fn execute_expression( } compile::Expression::Default(_ast_node) => Ok(values::DefaultValue.into()), compile::Expression::DictionaryConstruction(ast_node) => { - Ok(values::Dictionary::from_ast(log, stack_trace, stack, heap, ast_node)?.into()) + Ok(values::Dictionary::from_ast(log, stack_trace, stack, ast_node)?.into()) } compile::Expression::If(ast_node) => todo!(), compile::Expression::List(ast_node) => todo!(), compile::Expression::Parenthesis(ast_node) => { - execute_expression(log, stack_trace, stack, heap, &ast_node) + execute_expression(log, stack_trace, stack, &ast_node) } compile::Expression::Path(ast_node) => { let path_iter = ast_node.node.path.iter(); - Ok(find_value(log, stack_trace, stack, heap, path_iter)?.into()) + Ok(find_value(log, stack_trace, stack, path_iter)? + .take(stack_trace)? + .into()) } compile::Expression::ProceduralBlock(ast_node) => { - execute_procedural_block(log, stack, heap, stack_trace, ast_node) + execute_procedural_block(log, stack, stack_trace, ast_node) } compile::Expression::Scalar(ast_node) => Ok(values::Scalar { dimension: ast_node.node.dimension, @@ -207,11 +143,11 @@ pub fn execute_expression( } compile::Expression::String(ast_node) => todo!(), compile::Expression::StructDefinition(ast_node) => Ok(ValueType::from( - values::StructDefinition::new(log, stack_trace, stack, heap, ast_node)?, + values::StructDefinition::new(log, stack_trace, stack, ast_node)?, ) .into()), compile::Expression::UnaryExpression(ast_node) => { - execute_unary_expression(log, stack_trace, stack, heap, ast_node) + execute_unary_expression(log, stack_trace, stack, ast_node) } compile::Expression::UnsignedInteger(ast_node) => { Ok(values::UnsignedInteger::from(ast_node.node).into()) @@ -227,16 +163,15 @@ fn execute_unary_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, - heap: &mut Heap, expression: &compile::AstNode>, ) -> ExpressionResult { stack_trace.stack_scope(expression.reference.clone(), |stack_trace| { let node = &expression.node; - let value = execute_expression(log, stack_trace, stack, heap, &node.expression)?; + let value = execute_expression(log, stack_trace, stack, &node.expression)?; match node.operation.node { - UnaryExpressionOperation::Add => value.unary_plus(log, stack_trace, heap), - UnaryExpressionOperation::Sub => value.unary_minus(log, stack_trace, heap), - UnaryExpressionOperation::Not => value.unary_not(log, stack_trace, heap), + UnaryExpressionOperation::Add => value.unary_plus(log, stack_trace), + UnaryExpressionOperation::Sub => value.unary_minus(log, stack_trace), + UnaryExpressionOperation::Not => value.unary_not(log, stack_trace), } }) } @@ -245,77 +180,62 @@ fn execute_binary_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, - heap: &mut Heap, expression: &compile::AstNode>, ) -> ExpressionResult { stack_trace.stack_scope( expression.reference.clone(), |stack_trace: &mut Vec| { let node = &expression.node; - let value_a = execute_expression(log, stack_trace, stack, heap, &node.a)?; - let value_b = execute_expression(log, stack_trace, stack, heap, &node.b)?; + let value_a = execute_expression(log, stack_trace, stack, &node.a)?; + let value_b = execute_expression(log, stack_trace, stack, &node.b)?; match node.operation.node { BinaryExpressionOperation::NotEq => Ok(values::Boolean(!matches!( - value_a.cmp(log, stack_trace, heap, &value_b)?, + value_a.cmp(log, stack_trace, value_b)?, Ordering::Equal )) .into()), - BinaryExpressionOperation::And => value_a.bit_and(log, stack_trace, heap, &value_b), - BinaryExpressionOperation::AndAnd => value_a.and(log, stack_trace, heap, &value_b), - BinaryExpressionOperation::Mul => { - value_a.multiply(log, stack_trace, heap, &value_b) - } - BinaryExpressionOperation::MulMul => { - value_a.exponent(log, stack_trace, heap, &value_b) - } - BinaryExpressionOperation::Add => { - value_a.addition(log, stack_trace, heap, &value_b) - } - BinaryExpressionOperation::Sub => { - value_a.subtraction(log, stack_trace, heap, &value_b) - } + BinaryExpressionOperation::And => value_a.bit_and(log, stack_trace, value_b), + BinaryExpressionOperation::AndAnd => value_a.and(log, stack_trace, value_b), + BinaryExpressionOperation::Mul => value_a.multiply(log, stack_trace, value_b), + BinaryExpressionOperation::MulMul => value_a.exponent(log, stack_trace, value_b), + BinaryExpressionOperation::Add => value_a.addition(log, stack_trace, value_b), + BinaryExpressionOperation::Sub => value_a.subtraction(log, stack_trace, value_b), BinaryExpressionOperation::DotDot => todo!(), BinaryExpressionOperation::DotDotEq => todo!(), - BinaryExpressionOperation::Div => value_a.divide(log, stack_trace, heap, &value_b), + BinaryExpressionOperation::Div => value_a.divide(log, stack_trace, value_b), BinaryExpressionOperation::DivDiv => { - value_a.floor_divide(log, stack_trace, heap, &value_b) + value_a.floor_divide(log, stack_trace, value_b) } BinaryExpressionOperation::Lt => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, heap, &value_b)?, + value_a.cmp(log, stack_trace, value_b)?, Ordering::Less )) .into()), - BinaryExpressionOperation::LtLt => { - value_a.left_shift(log, stack_trace, heap, &value_b) - } + BinaryExpressionOperation::LtLt => value_a.left_shift(log, stack_trace, value_b), BinaryExpressionOperation::LtEq => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, heap, &value_b)?, + value_a.cmp(log, stack_trace, value_b)?, Ordering::Less | Ordering::Equal )) .into()), BinaryExpressionOperation::EqEq => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, heap, &value_b)?, + value_a.cmp(log, stack_trace, value_b)?, Ordering::Equal )) .into()), BinaryExpressionOperation::Gt => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, heap, &value_b)?, + value_a.cmp(log, stack_trace, value_b)?, Ordering::Greater )) .into()), BinaryExpressionOperation::GtEq => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, heap, &value_b)?, + value_a.cmp(log, stack_trace, value_b)?, Ordering::Equal | Ordering::Greater )) .into()), - BinaryExpressionOperation::GtGt => { - value_a.right_shift(log, stack_trace, heap, &value_b) - } - BinaryExpressionOperation::BitXor => { - value_a.bit_xor(log, stack_trace, heap, &value_b) - } - BinaryExpressionOperation::Or => value_a.bit_or(log, stack_trace, heap, &value_b), - BinaryExpressionOperation::OrOr => value_a.or(log, stack_trace, heap, &value_b), + BinaryExpressionOperation::GtGt => value_a.right_shift(log, stack_trace, value_b), + BinaryExpressionOperation::BitXor => value_a.bit_xor(log, stack_trace, value_b), + BinaryExpressionOperation::Or => value_a.bit_or(log, stack_trace, value_b), + BinaryExpressionOperation::OrOr => value_a.or(log, stack_trace, value_b), } }, ) @@ -324,51 +244,44 @@ fn execute_binary_expression( fn execute_procedural_block( log: &mut dyn RuntimeLog, stack: &mut Stack, - heap: &mut Heap, stack_trace: &mut Vec, block: &compile::AstNode, ) -> ExpressionResult { stack_trace.stack_scope(block.reference.clone(), |stack_trace| { - stack.scope( - heap, - [], - stack_trace, - ScopeType::Inherited, - |stack, stack_trace, heap| { - let mut last_value = Value::Void(values::Void); - - let mut statements = block.node.statements.iter().peekable(); - - while let Some(statement) = statements.next() { - last_value = execute_statement(log, stack, heap, stack_trace, statement)?; - - if statements.peek().is_some() { - // This was not the last statement, which means it needs to produce a void - // value. - - match last_value { - Value::Void(_) => { - // Not a problem. - continue; - } - _ => { - return Err(stack_trace.stack_scope( - statement.reference.clone(), - |stack_trace| { - MissingSemicolon { - actual_value_type: last_value.get_type(), - } - .to_error(stack_trace.iter()) - }, - )); - } + stack.scope(stack_trace, ScopeType::Inherited, |stack, stack_trace| { + let mut last_value = Value::Void(values::Void); + + let mut statements = block.node.statements.iter().peekable(); + + while let Some(statement) = statements.next() { + last_value = execute_statement(log, stack, stack_trace, statement)?; + + if statements.peek().is_some() { + // This was not the last statement, which means it needs to produce a void + // value. + + match last_value { + Value::Void(_) => { + // Not a problem. + continue; + } + _ => { + return Err(stack_trace.stack_scope( + statement.reference.clone(), + |stack_trace| { + MissingSemicolon { + actual_value_type: last_value.get_type(), + } + .to_error(stack_trace.iter()) + }, + )); } } } + } - Ok(last_value) - }, - )? + Ok(last_value) + })? }) } @@ -392,7 +305,6 @@ impl Display for MissingSemicolon { fn execute_statement( log: &mut dyn RuntimeLog, stack: &mut Stack, - heap: &mut Heap, stack_trace: &mut Vec, statement: &compile::AstNode, ) -> ExpressionResult { @@ -400,12 +312,12 @@ fn execute_statement( statement.reference.clone(), |stack_trace| match &statement.node { compile::Statement::Assign(ast_node) => { - let value = - execute_expression(log, stack_trace, stack, heap, &ast_node.node.value)?; + let value = execute_expression(log, stack_trace, stack, &ast_node.node.value)?; let path = &ast_node.node.to_assign.node.path; - let original_value = find_value(log, stack_trace, stack, heap, path)?; + let original_value_storage = find_value(log, stack_trace, stack, path)?; + let original_value = original_value_storage.take(stack_trace)?; // Start with a type check. if value.get_type() == original_value.get_type() { // Okay, we're good to assign the value. @@ -414,61 +326,40 @@ fn execute_statement( let mut new_value = match ast_node.node.assignment_type.node { AssignmentType::Direct => value, AssignmentType::BitAnd => { - original_value.bit_and(log, stack_trace, heap, &value)? - } - AssignmentType::BitOr => { - original_value.bit_or(log, stack_trace, heap, &value)? + original_value.bit_and(log, stack_trace, value)? } + AssignmentType::BitOr => original_value.bit_or(log, stack_trace, value)?, AssignmentType::BitXor => { - original_value.bit_xor(log, stack_trace, heap, &value)? - } - AssignmentType::LogicAnd => { - original_value.and(log, stack_trace, heap, &value)? - } - AssignmentType::LogicOr => { - original_value.or(log, stack_trace, heap, &value)? - } - AssignmentType::LogicXor => { - original_value.xor(log, stack_trace, heap, &value)? - } - AssignmentType::Add => { - original_value.addition(log, stack_trace, heap, &value)? + original_value.bit_xor(log, stack_trace, value)? } + AssignmentType::LogicAnd => original_value.and(log, stack_trace, value)?, + AssignmentType::LogicOr => original_value.or(log, stack_trace, value)?, + AssignmentType::LogicXor => original_value.xor(log, stack_trace, value)?, + AssignmentType::Add => original_value.addition(log, stack_trace, value)?, AssignmentType::Sub => { - original_value.subtraction(log, stack_trace, heap, &value)? + original_value.subtraction(log, stack_trace, value)? } AssignmentType::Exponent => { - original_value.exponent(log, stack_trace, heap, &value)? + original_value.exponent(log, stack_trace, value)? } AssignmentType::Multiply => { - original_value.multiply(log, stack_trace, heap, &value)? + original_value.multiply(log, stack_trace, value)? } AssignmentType::IntegerDivision => { - original_value.floor_divide(log, stack_trace, heap, &value)? + original_value.floor_divide(log, stack_trace, value)? } AssignmentType::Division => { - original_value.divide(log, stack_trace, heap, &value)? + original_value.divide(log, stack_trace, value)? } AssignmentType::LeftShift => { - original_value.left_shift(log, stack_trace, heap, &value)? + original_value.left_shift(log, stack_trace, value)? } AssignmentType::RightShift => { - original_value.right_shift(log, stack_trace, heap, &value)? + original_value.right_shift(log, stack_trace, value)? } }; - original_value.drop(heap); - find_value_mut( - log, - stack_trace, - stack, - heap, - path.iter(), - |original_value| { - std::mem::swap(original_value, &mut new_value); - }, - )?; - new_value.drop(heap); + original_value_storage.replace(new_value); Ok(values::Void.into()) } else { @@ -480,20 +371,39 @@ fn execute_statement( } } compile::Statement::Let(ast_node) => { - let value = - execute_expression(log, stack_trace, stack, heap, &ast_node.node.value)?; + let value = execute_expression(log, stack_trace, stack, &ast_node.node.value)?; + + let path = &ast_node.node.to_assign.node.path; + + if path.len() == 1 { + // We're just going to insert onto the stack. + let name = &path[0].node; + stack.insert_value(name, value); + } else { + // We are inserting the value into another value (like a dictionary). + let (parent_path, name) = path.split_at(path.len() - 1); + let name = &name[0]; + + let parent = find_value(log, stack_trace, stack, parent_path)?; + + parent.access_mut(stack_trace)?.insert_attribute( + log, + stack_trace, + &name.node, + value, + )?; + } - stack.insert_value(&ast_node.node.to_assign.node, value); Ok(values::Void.into()) } compile::Statement::For(ast_node) => todo!(), compile::Statement::Expression(ast_node) => { - execute_expression(log, stack_trace, stack, heap, ast_node) + execute_expression(log, stack_trace, stack, ast_node) } compile::Statement::ClosedExpression(ast_node) => { // It's the same as a normal statement, but we eat the result instead of returning // it. - execute_expression(log, stack_trace, stack, heap, &ast_node.node.expression) + execute_expression(log, stack_trace, stack, &ast_node.node.expression) .map(|_value| values::Void.into()) } }, @@ -518,23 +428,14 @@ impl Display for AssignmentTypeMissmatch { } #[cfg(test)] -pub(crate) fn test_run(input: &str) -> ExpressionResult<(Value, Heap)> { +pub(crate) fn test_run(input: &str) -> ExpressionResult { + use standard_environment::build_prelude; + let root = compile::full_compile(input); - let mut heap = Heap::default(); - let prelude = build_prelude(&mut heap); + let prelude = build_prelude(); let mut stack = Stack::new(prelude); - let result = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut stack, - &mut heap, - &root, - ); - stack.drop_prelude(&mut heap); - let result = result?; - - Ok((result, heap)) + execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root) } #[cfg(test)] @@ -545,67 +446,67 @@ mod test { #[test] fn none_type() { - let product = test_run("~").unwrap().0; + let product = test_run("~").unwrap(); assert_eq!(product, values::Void.into()); } #[test] fn default_type() { - let product = test_run("default").unwrap().0; + let product = test_run("default").unwrap(); assert_eq!(product, values::DefaultValue.into()); } #[test] fn boolean_type() { - let product = test_run("true").unwrap().0; + let product = test_run("true").unwrap(); assert_eq!(product, values::Boolean(true).into()); } #[test] fn signed_integer_type() { - let product = test_run("5i").unwrap().0; + let product = test_run("5i").unwrap(); assert_eq!(product, values::SignedInteger::from(5).into()); } #[test] fn unsigned_integer_type() { - let product = test_run("5u").unwrap().0; + let product = test_run("5u").unwrap(); assert_eq!(product, values::UnsignedInteger::from(5).into()); } #[test] fn empty_block() { - let product = test_run("{}").unwrap().0; + let product = test_run("{}").unwrap(); assert_eq!(product, values::Void.into()); } #[test] fn block_open_expression_statement() { - let product = test_run("{ 5u }").unwrap().0; + let product = test_run("{ 5u }").unwrap(); assert_eq!(product, values::UnsignedInteger::from(5).into()); } #[test] fn block_closed_expression_statement() { - let product = test_run("{ 5u; }").unwrap().0; + let product = test_run("{ 5u; }").unwrap(); assert_eq!(product, values::Void.into()); } #[test] fn block_recursive_blocks() { - let product = test_run("{ { 5u } }").unwrap().0; + let product = test_run("{ { 5u } }").unwrap(); assert_eq!(product, values::UnsignedInteger::from(5).into()); } #[test] fn let_statement() { - let product = test_run("{ let value = 5u; value }").unwrap().0; + let product = test_run("{ let value = 5u; value }").unwrap(); assert_eq!(product, values::UnsignedInteger::from(5).into()); } #[test] fn assign_statement() { - let product = test_run("{ let value = 5u; value = 4u; value }").unwrap().0; + let product = test_run("{ let value = 5u; value = 4u; value }").unwrap(); assert_eq!(product, values::UnsignedInteger::from(4).into()); } @@ -618,13 +519,13 @@ mod test { #[test] fn parenthesis() { // Fails because of a type mismatch. - let product = test_run("(1i + 2i) * 3i").unwrap().0; + let product = test_run("(1i + 2i) * 3i").unwrap(); assert_eq!(product, values::SignedInteger::from(9).into()); } #[test] fn struct_definition() { - let product = test_run("(name: std.types.Void = ~, ...)").unwrap().0; + let product = test_run("(name: std.types.Void = ~, ...)").unwrap(); assert_eq!( product, values::ValueType::Dictionary(values::StructDefinition { @@ -641,9 +542,7 @@ mod test { #[test] fn nested_value_access() { - let product = test_run("{ let dictionary = (a = (b = 23u)); dictionary.a.b }") - .unwrap() - .0; + let product = test_run("{ let dictionary = (a = (b = 23u)); dictionary.a.b }").unwrap(); assert_eq!(product, values::UnsignedInteger::from(23).into()); } @@ -651,23 +550,21 @@ mod test { fn nested_value_assignment() { let product = test_run("{ let dictionary = (a = (b = 23u)); dictionary.a.b = 32u; dictionary.a.b }") - .unwrap() - .0; + .unwrap(); assert_eq!(product, values::UnsignedInteger::from(32).into()); } #[test] fn define_closure() { - let product = test_run("(~)[std.types] -> std.types.Void {}").unwrap().0; + let product = test_run("(~)[std.types] -> std.types.Void {}").unwrap(); assert_eq!(product, values::UnsignedInteger::from(32).into()); } - // #[test] - // fn nested_value_creation() { - // let product = - // test_run("{ let dictionary = (a = ()); dictionary.a.b = 32u; dictionary.a.b }") - // .unwrap() - // .0; - // assert_eq!(product, values::UnsignedInteger::from(32).into()); - // } + #[test] + fn nested_value_creation() { + let product = + test_run("{ let dictionary = (a = ()); let dictionary.a.b = 32u; dictionary.a.b }") + .unwrap(); + assert_eq!(product, values::UnsignedInteger::from(32).into()); + } } diff --git a/crates/interpreter/src/execution/stack.rs b/crates/interpreter/src/execution/stack.rs index 30146f2..ae10171 100644 --- a/crates/interpreter/src/execution/stack.rs +++ b/crates/interpreter/src/execution/stack.rs @@ -21,8 +21,7 @@ use crate::compile::SourceReference; use super::{ errors::{ErrorType, ExpressionResult, Raise}, logging::LocatedStr, - values::{Object, ObjectClone, Value}, - Heap, + values::{StoredValue, Value}, }; use compact_str::CompactString; use std::{collections::HashMap, fmt::Display}; @@ -36,24 +35,26 @@ pub enum ScopeType { #[derive(Debug)] struct Scope { ty: ScopeType, - variables: HashMap, + variables: HashMap, } #[derive(Debug)] pub struct Stack { scopes: Vec, - prelude: HashMap, + prelude: HashMap, active_scope: usize, } macro_rules! generate_variable_getter { ($self:ident, $stack_trace: ident, $name:ident, $iter:ident, $get:ident) => {{ let mut scope_iterator = $self.scopes[..=$self.active_scope].$iter().rev(); + let mut result = None; // Search the stack for the thing. for scope in &mut scope_iterator { if let Some(value) = scope.variables.$get($name.string) { - return Ok(value); + result = Some(value); + break; } match &scope.ty { @@ -66,16 +67,7 @@ macro_rules! generate_variable_getter { } } - // See if we can find it in the prelude. - if let Some(value) = $self.prelude.$get($name.string) { - return Ok(value); - } - - // We couldn't find it. - Err(NotInScopeError { - variable_name: $name.string.to_string(), - } - .to_error($stack_trace.iter().chain([&$name.location]))) + result }}; } @@ -97,7 +89,7 @@ impl Display for NotInScopeError { } impl Stack { - pub fn new(prelude: HashMap) -> Self { + pub fn new(prelude: HashMap) -> Self { Self { scopes: vec![Scope { ty: ScopeType::Isolated, @@ -108,37 +100,23 @@ impl Stack { } } - pub fn drop_prelude(&mut self, heap: &mut Heap) { - for (_name, object) in self.prelude.drain() { - object.drop(heap); - } - } - pub fn scope<'s, B, R>( &mut self, - heap: &mut Heap, - variables_to_copy: impl IntoIterator>, stack_trace: &mut Vec, mode: ScopeType, block: B, ) -> ExpressionResult where - B: FnOnce(&mut Self, &mut Vec, &mut Heap) -> R, + B: FnOnce(&mut Self, &mut Vec) -> R, { - self.push_scope(heap, variables_to_copy.into_iter(), stack_trace, mode)?; - let result = block(self, stack_trace, heap); - self.pop_scope(heap); + self.push_scope(mode)?; + let result = block(self, stack_trace); + self.pop_scope(); Ok(result) } - fn push_scope<'s>( - &mut self, - heap: &mut Heap, - variables_to_copy: impl Iterator>, - stack_trace: &[SourceReference], - mode: ScopeType, - ) -> ExpressionResult<()> { + fn push_scope<'s>(&mut self, mode: ScopeType) -> ExpressionResult<()> { let next_scope_index = self.active_scope + 1; if next_scope_index >= self.scopes.len() { self.scopes.push(Scope { @@ -148,51 +126,66 @@ impl Stack { } self.scopes[next_scope_index].ty = mode; - - for variable in variables_to_copy { - let value = self - .get_variable(stack_trace, &variable)? - .object_clone(heap); - self.scopes[next_scope_index] - .variables - .insert(variable.string.into(), value); - } - self.active_scope = next_scope_index; Ok(()) } - fn pop_scope(&mut self, heap: &mut Heap) { - for (_name, value) in self.scopes[self.active_scope].variables.drain() { - value.drop(heap); - } + fn pop_scope(&mut self) { self.active_scope -= 1; } pub fn insert_value(&mut self, name: impl Into, value: Value) { self.scopes[self.active_scope] .variables - .insert(name.into(), value); + .insert(name.into(), StoredValue::Value(value)); } + /// Gets a reference to a variable on the stack. // TODO Recommending similar named variables would help users to notice typos. // https://crates.io/crates/levenshtein pub fn get_variable<'s, S: Into>>( &self, stack_trace: &[SourceReference], name: S, - ) -> ExpressionResult<&Value> { + ) -> ExpressionResult<&StoredValue> { let name = name.into(); - generate_variable_getter!(self, stack_trace, name, iter, get) + if let Some(value) = generate_variable_getter!(self, stack_trace, name, iter, get) { + Ok(value) + } else { + // See if we can find it in the prelude. + if let Some(value) = self.prelude.get(name.string) { + return Ok(value); + } + + // We couldn't find it. + Err(NotInScopeError { + variable_name: name.string.to_string(), + } + .to_error(stack_trace.iter().chain([&name.location]))) + } } + /// Gets a mutable reference to a variable on the stack. pub fn get_variable_mut<'s, S: Into>>( &mut self, stack_trace: &[SourceReference], name: S, - ) -> ExpressionResult<&mut Value> { + ) -> ExpressionResult<&mut StoredValue> { let name = name.into(); - generate_variable_getter!(self, stack_trace, name, iter_mut, get_mut) + if let Some(value) = generate_variable_getter!(self, stack_trace, name, iter_mut, get_mut) { + Ok(value) + } else { + // See if we can find it in the prelude. + if let Some(value) = self.prelude.get_mut(name.string) { + Ok(value) + } else { + // We couldn't find it. + Err(NotInScopeError { + variable_name: name.string.to_string(), + } + .to_error(stack_trace.iter().chain([&name.location]))) + } + } } } diff --git a/crates/interpreter/src/execution/standard_environment.rs b/crates/interpreter/src/execution/standard_environment.rs index 252cdf3..b826491 100644 --- a/crates/interpreter/src/execution/standard_environment.rs +++ b/crates/interpreter/src/execution/standard_environment.rs @@ -1,27 +1,22 @@ use std::collections::HashMap; -use common_data_types::Dimension; - -use super::{ - heap::Heap, - values::{Dictionary, Value, ValueType}, -}; +use super::values::{Dictionary, StoredValue, Value, ValueType}; /// Builds standard library. -pub fn build_prelude(heap: &mut Heap) -> HashMap { - let global = HashMap::from([("std".into(), build_std(heap).into())]); +pub fn build_prelude() -> HashMap { + let global = HashMap::from([("std".into(), build_std().into())]); global } -fn build_std(heap: &mut Heap) -> Dictionary { - let std = HashMap::from([("types".into(), build_types(heap).into())]); - Dictionary::from_hashmap(heap, std) +fn build_std() -> Dictionary { + let std = HashMap::from([("types".into(), build_types().into())]); + Dictionary::from(std) } /// Adds library for type safety. -fn build_types(heap: &mut Heap) -> Dictionary { - let types = HashMap::from_iter( +fn build_types() -> Dictionary { + let types: HashMap = HashMap::from_iter( [ ("Void".into(), ValueType::Void.into()), ("Bool".into(), ValueType::Boolean.into()), @@ -36,10 +31,10 @@ fn build_types(heap: &mut Heap) -> Dictionary { .into_iter() .chain(build_dimension_types()), ); - Dictionary::from_hashmap(heap, types) + Dictionary::from(types) } -fn build_dimension_types() -> impl Iterator { +fn build_dimension_types() -> impl Iterator { units::list_named_dimensions() .map(|(name, dimension)| (name.into(), ValueType::Scalar(dimension).into())) } diff --git a/crates/interpreter/src/execution/values/boolean.rs b/crates/interpreter/src/execution/values/boolean.rs index 656b73d..4958b9d 100644 --- a/crates/interpreter/src/execution/values/boolean.rs +++ b/crates/interpreter/src/execution/values/boolean.rs @@ -16,14 +16,11 @@ * program. If not, see . */ -use crate::{ - compile::SourceReference, - execution::{heap::Heap, logging::RuntimeLog}, -}; +use crate::{compile::SourceReference, execution::logging::RuntimeLog}; use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; -#[derive(Debug, Hash, Clone, Eq, PartialEq)] +#[derive(Debug, Hash, Clone, Copy, Eq, PartialEq)] pub struct Boolean(pub bool); impl Object for Boolean { @@ -32,53 +29,48 @@ impl Object for Boolean { } fn eq( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(self.0 == rhs.0) } fn and( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self(self.0 && rhs.0).into()) } fn or( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self(self.0 || rhs.0).into()) } fn xor( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self((self.0 && rhs.0) || (!self.0 && !rhs.0)).into()) } fn unary_not( - &self, + self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], - _heap: &Heap, ) -> ExpressionResult { Ok(Self(!self.0).into()) } diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 84bf2d5..89d0677 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -20,12 +20,9 @@ use std::{fmt::Display, sync::Arc}; use fortuples::fortuples; -use crate::{ - compile::{AstNode, ClosureDefinition, Expression}, - execution::Heap, -}; +use crate::compile::{AstNode, ClosureDefinition, Expression}; -use super::{Object, ObjectClone, StaticTypeName, StructDefinition, Value, ValueType}; +use super::{Object, ObjectCopy, StaticTypeName, StructDefinition, Value, ValueType}; #[derive(Debug, Eq, PartialEq)] pub struct CapturedValue { @@ -33,12 +30,6 @@ pub struct CapturedValue { pub value: Value, } -impl CapturedValue { - fn drop(self, heap: &mut Heap) { - self.value.drop(heap); - } -} - /// Signature of a closure, used for type comparison. #[derive(Debug, Eq, PartialEq)] pub struct Signature { @@ -76,10 +67,6 @@ impl Object for UserClosure { fn get_type(&self) -> ValueType { ValueType::Closure(self.data.signature.clone()) } - - fn drop(self, heap: &mut Heap) { - todo!() - } } impl StaticTypeName for UserClosure { @@ -88,8 +75,8 @@ impl StaticTypeName for UserClosure { } } -impl ObjectClone for UserClosure { - fn object_clone(&self, _heap: &Heap) -> Value { +impl ObjectCopy for UserClosure { + fn object_copy(&self) -> Option { todo!() } } diff --git a/crates/interpreter/src/execution/values/default.rs b/crates/interpreter/src/execution/values/default.rs index d70fac1..19945f0 100644 --- a/crates/interpreter/src/execution/values/default.rs +++ b/crates/interpreter/src/execution/values/default.rs @@ -18,7 +18,7 @@ use super::{value_type::ValueType, Object, StaticTypeName}; -#[derive(Debug, Eq, Clone, PartialEq, Hash)] +#[derive(Debug, Eq, Clone, Copy, PartialEq, Hash)] pub struct DefaultValue; impl Object for DefaultValue { diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index 019b36a..8d4bfed 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -25,24 +25,19 @@ use crate::{ execute_expression, execution::{ errors::{ErrorType, ExpressionResult, Raise as _}, - heap::{HeapKey, HeapStorage}, logging::RuntimeLog, stack::Stack, - Heap, }, }; use super::{ - MissingAttributeError, Object, ObjectClone, StaticTypeName, StructDefinition, StructMember, - Value, ValueType, + MissingAttributeError, Object, ObjectCopy, StaticTypeName, StoredValue, StructDefinition, + StructMember, Value, ValueType, }; -pub type DictionaryStorage = HeapStorage>; - #[derive(Debug, Eq, PartialEq)] pub struct Dictionary { - /// The actual storage to the dictionary lives in the heap, and we store a reference to it. - key: HeapKey, + members: HashableMap, } impl Object for Dictionary { @@ -55,15 +50,13 @@ impl Object for Dictionary { }) } - fn get_attribute_ref<'h>( + fn get_attribute_ref( &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - heap: &'h Heap, attribute: &str, - ) -> ExpressionResult<&'h Value> { - let members = heap.dictionaries.get(&self.key); - if let Some(member) = members.get(attribute) { + ) -> ExpressionResult<&StoredValue> { + if let Some(member) = self.members.get(attribute) { Ok(member) } else { Err(MissingAttributeError { @@ -72,15 +65,13 @@ impl Object for Dictionary { .to_error(stack_trace)) } } - fn get_attribute_mut<'h>( + fn get_attribute_mut( &mut self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - heap: &'h mut Heap, attribute: &str, - ) -> ExpressionResult<&'h mut Value> { - let members = heap.dictionaries.get_mut(&self.key); - if let Some(member) = members.get_mut(attribute) { + ) -> ExpressionResult<&mut StoredValue> { + if let Some(member) = self.members.get_mut(attribute) { Ok(member) } else { Err(MissingAttributeError { @@ -89,25 +80,21 @@ impl Object for Dictionary { .to_error(stack_trace)) } } - - fn drop(self, heap: &mut Heap) { - if let Some(mut internal_storage) = heap.dictionaries.dereference_allocation(self.key) { - // That was the last reference to this dictionary. - // We need to drop all the content. - for (_name, value) in internal_storage.drain() { - value.drop(heap); - } - } + fn insert_attribute( + &mut self, + _log: &mut dyn RuntimeLog, + _stack_trace: &[SourceReference], + attribute: impl Into, + new_value: Value, + ) -> ExpressionResult<()> { + self.members + .insert(attribute.into(), StoredValue::Value(new_value)); + Ok(()) } } -impl ObjectClone for Dictionary { - fn object_clone(&self, heap: &Heap) -> Value { - // Get another reference to the allocation and return that. - let key = heap.dictionaries.reference_allocation(&self.key); - Self { key }.into() - } -} +// Default implementation, cannot be moved by copy. +impl ObjectCopy for Dictionary {} impl StaticTypeName for Dictionary { fn static_type_name() -> &'static str { @@ -115,38 +102,30 @@ impl StaticTypeName for Dictionary { } } -impl Dictionary { - pub fn from_hashmap(heap: &mut Heap, map: HashMap) -> Self { +impl From> for Dictionary { + fn from(map: HashMap) -> Self { // HashableMap is just a wrapper around HashMap, so this has no additional cost. - let content = HashableMap::from(map); - - let key = heap.dictionaries.new_allocation(content); + let members = HashableMap::from(map); - Self { key } + Self { members } } +} +impl Dictionary { pub fn from_ast( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, - heap: &mut Heap, ast_node: &AstNode, ) -> ExpressionResult { let mut members = HashMap::with_capacity(ast_node.node.assignments.len()); for assignment in ast_node.node.assignments.iter() { let name = assignment.node.name.node.clone(); - let value = - execute_expression(log, stack_trace, stack, heap, &assignment.node.assignment)?; - - if let Some(already_occupied) = members.insert(name, value) { - // That's an error. We need to drop all that data and then report an error. - already_occupied.drop(heap); - - for (_name, value) in members { - value.drop(heap); - } + let value = execute_expression(log, stack_trace, stack, &assignment.node.assignment)?; + if members.insert(name, StoredValue::Value(value)).is_some() { + // That's a duplicate member. return Err(DuplicateMemberError { name: assignment.node.name.node.clone(), } @@ -154,7 +133,7 @@ impl Dictionary { } } - Ok(Self::from_hashmap(heap, members)) + Ok(Self::from(members)) } } @@ -182,13 +161,13 @@ mod test { #[test] fn build_dictionary() { - let (product, mut heap) = test_run("(void = ~)").unwrap(); - let product_heap = heap.dictionaries.get(&product.as_dictionary().unwrap().key); - let expected = HashableMap::from(HashMap::from_iter([("void".to_string(), Void.into())])); - - assert_eq!(product_heap, &expected); + let product = test_run("(void = ~)").unwrap(); + let expected = HashableMap::from(HashMap::from_iter([( + "void".to_string(), + StoredValue::Value(Void.into()), + )])); - product.drop(&mut heap); + assert_eq!(product.as_dictionary().unwrap().members, expected); } #[test] diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index 279509a..faa1325 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -30,14 +30,13 @@ use crate::{ compile::SourceReference, execution::{ errors::{ExpressionResult, GenericFailure, Raise}, - heap::Heap, logging::RuntimeLog, }, }; use super::{value_type::ValueType, Object, StaticTypeName, Value}; -#[derive(Debug, Hash, Clone, Eq, PartialEq)] +#[derive(Debug, Hash, Clone, Copy, Eq, PartialEq)] pub struct Integer(pub I); impl From for Integer { @@ -75,52 +74,47 @@ where } fn bit_and( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self(self.0 & rhs.0).into()) } fn bit_or( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self(self.0 | rhs.0).into()) } fn bit_xor( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self(self.0 ^ rhs.0).into()) } fn cmp( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(self.0.cmp(&rhs.0)) } fn addition( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self(self.0.checked_add(&rhs.0).ok_or_else(|| { @@ -132,11 +126,10 @@ where .into()) } fn subtraction( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self(self.0.checked_sub(&rhs.0).ok_or_else(|| { @@ -148,11 +141,10 @@ where .into()) } fn multiply( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self(self.0.checked_mul(&rhs.0).ok_or_else(|| { @@ -164,11 +156,10 @@ where .into()) } fn divide( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self( @@ -179,20 +170,18 @@ where .into()) } fn floor_divide( - &self, + self, log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { - self.divide(log, stack_trace, heap, rhs) + self.divide(log, stack_trace, rhs) } fn exponent( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -213,46 +202,41 @@ where .into()) } fn left_shift( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self(self.0 << rhs.0).into()) } fn right_shift( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self(self.0 >> rhs.0).into()) } fn unary_plus( - &self, + self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], - _heap: &Heap, ) -> ExpressionResult { Ok(self.clone().into()) } fn unary_minus( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, ) -> ExpressionResult { self.0.neg(stack_trace).into() } fn unary_not( - &self, + self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], - _heap: &Heap, ) -> ExpressionResult { Ok(Self(!self.0).into()) } @@ -318,255 +302,255 @@ mod test { #[test] fn signed_bit_or() { - let product = test_run("0xAAi | 0x55i").unwrap().0; + let product = test_run("0xAAi | 0x55i").unwrap(); assert_eq!(product, SignedInteger::from(0xFF).into()); } #[test] fn signed_bit_and() { - let product = test_run("0xFFi & 0x0Fi").unwrap().0; + let product = test_run("0xFFi & 0x0Fi").unwrap(); assert_eq!(product, SignedInteger::from(0x0F).into()); } #[test] fn signed_bit_xor() { - let product = test_run("0xF0i ^ 0xFFi").unwrap().0; + let product = test_run("0xF0i ^ 0xFFi").unwrap(); assert_eq!(product, SignedInteger::from(0x0F).into()); } #[test] fn signed_cmp_greater_than() { - let product = test_run("3i > 2i").unwrap().0; + let product = test_run("3i > 2i").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("2i > 3i").unwrap().0; + let product = test_run("2i > 3i").unwrap(); assert_eq!(product, Boolean(false).into()); } #[test] fn signed_cmp_greater_than_eq() { - let product = test_run("3i >= 2i").unwrap().0; + let product = test_run("3i >= 2i").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("3i >= 3i").unwrap().0; + let product = test_run("3i >= 3i").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("2i >= 3i").unwrap().0; + let product = test_run("2i >= 3i").unwrap(); assert_eq!(product, Boolean(false).into()); } #[test] fn signed_cmp_eq() { - let product = test_run("3i == 3i").unwrap().0; + let product = test_run("3i == 3i").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("3i == 2i").unwrap().0; + let product = test_run("3i == 2i").unwrap(); assert_eq!(product, Boolean(false).into()); - let product = test_run("3i != 3i").unwrap().0; + let product = test_run("3i != 3i").unwrap(); assert_eq!(product, Boolean(false).into()); - let product = test_run("3i != 2i").unwrap().0; + let product = test_run("3i != 2i").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn signed_cmp_less_than_eq() { - let product = test_run("3i <= 2i").unwrap().0; + let product = test_run("3i <= 2i").unwrap(); assert_eq!(product, Boolean(false).into()); - let product = test_run("3i <= 3i").unwrap().0; + let product = test_run("3i <= 3i").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("2i <= 3i").unwrap().0; + let product = test_run("2i <= 3i").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn signed_cmp_less_than() { - let product = test_run("3i < 2i").unwrap().0; + let product = test_run("3i < 2i").unwrap(); assert_eq!(product, Boolean(false).into()); - let product = test_run("2i < 3i").unwrap().0; + let product = test_run("2i < 3i").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn signed_addition() { - let product = test_run("3i + 2i").unwrap().0; + let product = test_run("3i + 2i").unwrap(); assert_eq!(product, SignedInteger::from(5).into()); } #[test] fn signed_subtraction() { - let product = test_run("3i - 2i").unwrap().0; + let product = test_run("3i - 2i").unwrap(); assert_eq!(product, SignedInteger::from(1).into()); } #[test] fn signed_multiply() { - let product = test_run("3i * 2i").unwrap().0; + let product = test_run("3i * 2i").unwrap(); assert_eq!(product, SignedInteger::from(6).into()); } #[test] fn signed_divide() { - let product = test_run("6i / 2i").unwrap().0; + let product = test_run("6i / 2i").unwrap(); assert_eq!(product, SignedInteger::from(3).into()); } #[test] fn signed_floor_divide() { - let product = test_run("6i // 2i").unwrap().0; + let product = test_run("6i // 2i").unwrap(); assert_eq!(product, SignedInteger::from(3).into()); } #[test] fn signed_exponent() { - let product = test_run("6i ** 3i").unwrap().0; + let product = test_run("6i ** 3i").unwrap(); assert_eq!(product, SignedInteger::from(216).into()); } #[test] fn signed_shift_left() { - let product = test_run("0x0Fi << 4i").unwrap().0; + let product = test_run("0x0Fi << 4i").unwrap(); assert_eq!(product, SignedInteger::from(0xF0).into()); } #[test] fn signed_shift_right() { - let product = test_run("0xF0i >> 4i").unwrap().0; + let product = test_run("0xF0i >> 4i").unwrap(); assert_eq!(product, SignedInteger::from(0x0F).into()); } #[test] fn signed_unary_plus() { - let product = test_run("+3i").unwrap().0; + let product = test_run("+3i").unwrap(); assert_eq!(product, SignedInteger::from(3).into()); } #[test] fn signed_unary_minus() { - let product = test_run("-3i").unwrap().0; + let product = test_run("-3i").unwrap(); assert_eq!(product, SignedInteger::from(-3).into()); } #[test] fn signed_unary_bit_not() { - let product = test_run("!0xAAi").unwrap().0; + let product = test_run("!0xAAi").unwrap(); assert_eq!(product, SignedInteger::from(!0xAA).into()); } #[test] fn unsigned_bit_or() { - let product = test_run("0xAAu | 0x55u").unwrap().0; + let product = test_run("0xAAu | 0x55u").unwrap(); assert_eq!(product, UnsignedInteger::from(0xFF).into()); } #[test] fn unsigned_bit_and() { - let product = test_run("0xFFu & 0x0Fu").unwrap().0; + let product = test_run("0xFFu & 0x0Fu").unwrap(); assert_eq!(product, UnsignedInteger::from(0x0F).into()); } #[test] fn unsigned_bit_xor() { - let product = test_run("0xF0u ^ 0xFFu").unwrap().0; + let product = test_run("0xF0u ^ 0xFFu").unwrap(); assert_eq!(product, UnsignedInteger::from(0x0F).into()); } #[test] fn unsigned_cmp_greater_than() { - let product = test_run("3u > 2u").unwrap().0; + let product = test_run("3u > 2u").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("2u > 3u").unwrap().0; + let product = test_run("2u > 3u").unwrap(); assert_eq!(product, Boolean(false).into()); } #[test] fn unsigned_cmp_greater_than_eq() { - let product = test_run("3u >= 2u").unwrap().0; + let product = test_run("3u >= 2u").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("3u >= 3u").unwrap().0; + let product = test_run("3u >= 3u").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("2u >= 3u").unwrap().0; + let product = test_run("2u >= 3u").unwrap(); assert_eq!(product, Boolean(false).into()); } #[test] fn unsigned_cmp_eq() { - let product = test_run("3u == 3u").unwrap().0; + let product = test_run("3u == 3u").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("3u == 2u").unwrap().0; + let product = test_run("3u == 2u").unwrap(); assert_eq!(product, Boolean(false).into()); - let product = test_run("3u != 3u").unwrap().0; + let product = test_run("3u != 3u").unwrap(); assert_eq!(product, Boolean(false).into()); - let product = test_run("3u != 2u").unwrap().0; + let product = test_run("3u != 2u").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn unsigned_cmp_less_than_eq() { - let product = test_run("3u <= 2u").unwrap().0; + let product = test_run("3u <= 2u").unwrap(); assert_eq!(product, Boolean(false).into()); - let product = test_run("3u <= 3u").unwrap().0; + let product = test_run("3u <= 3u").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("2u <= 3u").unwrap().0; + let product = test_run("2u <= 3u").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn unsigned_cmp_less_than() { - let product = test_run("3u < 2u").unwrap().0; + let product = test_run("3u < 2u").unwrap(); assert_eq!(product, Boolean(false).into()); - let product = test_run("2u < 3u").unwrap().0; + let product = test_run("2u < 3u").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn unsigned_addition() { - let product = test_run("3u + 2u").unwrap().0; + let product = test_run("3u + 2u").unwrap(); assert_eq!(product, UnsignedInteger::from(5).into()); } #[test] fn unsigned_subtraction() { - let product = test_run("3u - 2u").unwrap().0; + let product = test_run("3u - 2u").unwrap(); assert_eq!(product, UnsignedInteger::from(1).into()); } #[test] fn unsigned_multiply() { - let product = test_run("3u * 2u").unwrap().0; + let product = test_run("3u * 2u").unwrap(); assert_eq!(product, UnsignedInteger::from(6).into()); } #[test] fn unsigned_divide() { - let product = test_run("6u / 2u").unwrap().0; + let product = test_run("6u / 2u").unwrap(); assert_eq!(product, UnsignedInteger::from(3).into()); } #[test] fn unsigned_floor_divide() { - let product = test_run("6u // 2u").unwrap().0; + let product = test_run("6u // 2u").unwrap(); assert_eq!(product, UnsignedInteger::from(3).into()); } #[test] fn unsigned_exponent() { - let product = test_run("6u ** 3u").unwrap().0; + let product = test_run("6u ** 3u").unwrap(); assert_eq!(product, UnsignedInteger::from(216).into()); } #[test] fn unsigned_shift_left() { - let product = test_run("0x0Fu << 4u").unwrap().0; + let product = test_run("0x0Fu << 4u").unwrap(); assert_eq!(product, UnsignedInteger::from(0xF0).into()); } #[test] fn unsigned_shift_right() { - let product = test_run("0xF0u >> 4u").unwrap().0; + let product = test_run("0xF0u >> 4u").unwrap(); assert_eq!(product, UnsignedInteger::from(0x0F).into()); } #[test] fn unsigned_unary_plus() { - let product = test_run("+3u").unwrap().0; + let product = test_run("+3u").unwrap(); assert_eq!(product, UnsignedInteger::from(3).into()); } @@ -577,7 +561,7 @@ mod test { #[test] fn unsigned_unary_bit_not() { - let product = test_run("!0xAAu").unwrap().0; + let product = test_run("!0xAAu").unwrap(); assert_eq!(product, UnsignedInteger::from(!0xAA).into()); } } diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 9b8fb41..e00ebd8 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -27,7 +27,6 @@ use crate::compile::SourceReference; use super::{ errors::{ErrorType, ExpressionResult, Raise as _}, logging::RuntimeLog, - Heap, }; mod void; @@ -49,10 +48,10 @@ mod closure; pub use closure::UserClosure; mod dictionary; -pub use dictionary::{Dictionary, DictionaryStorage}; +pub use dictionary::Dictionary; mod value_type; -pub use value_type::{StructDefinition, StructMember, StructMemberStorage, ValueType}; +pub use value_type::{StructDefinition, StructMember, ValueType}; pub trait StaticTypeName { /// Provides the type name without having an instance of the object. @@ -106,7 +105,7 @@ impl Display for MissingAttributeError { } #[enum_dispatch] -pub trait Object: StaticTypeName + Sized + Eq + PartialEq + ObjectClone { +pub trait Object: StaticTypeName + Sized + Eq + PartialEq + ObjectCopy { fn get_type(&self) -> ValueType; // fn format( @@ -125,178 +124,165 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + ObjectClone { } fn and( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "logical and") + UnsupportedOperationError::raise(&self, stack_trace, "logical and") } fn or( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "logical or") + UnsupportedOperationError::raise(&self, stack_trace, "logical or") } fn xor( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "logical xor") + UnsupportedOperationError::raise(&self, stack_trace, "logical xor") } fn bit_and( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "binary and") + UnsupportedOperationError::raise(&self, stack_trace, "binary and") } fn bit_or( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "binary or") + UnsupportedOperationError::raise(&self, stack_trace, "binary or") } fn bit_xor( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "binary xor") + UnsupportedOperationError::raise(&self, stack_trace, "binary xor") } fn cmp( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "compare") + UnsupportedOperationError::raise(&self, stack_trace, "compare") } fn eq( - &self, + self, log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { - Ok(matches!( - self.cmp(log, stack_trace, heap, rhs)?, - Ordering::Equal - )) + Ok(matches!(self.cmp(log, stack_trace, rhs)?, Ordering::Equal)) } fn addition( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "addition") + UnsupportedOperationError::raise(&self, stack_trace, "addition") } fn subtraction( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "subtraction") + UnsupportedOperationError::raise(&self, stack_trace, "subtraction") } fn multiply( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "multiply") + UnsupportedOperationError::raise(&self, stack_trace, "multiply") } fn divide( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "divide") + UnsupportedOperationError::raise(&self, stack_trace, "divide") } fn floor_divide( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "floor_divide") + UnsupportedOperationError::raise(&self, stack_trace, "floor_divide") } fn exponent( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "exponent") + UnsupportedOperationError::raise(&self, stack_trace, "exponent") } fn left_shift( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "left shift") + UnsupportedOperationError::raise(&self, stack_trace, "left shift") } fn right_shift( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - _rhs: &Value, + _rhs: Value, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "right shift") + UnsupportedOperationError::raise(&self, stack_trace, "right shift") } - fn get_attribute_ref<'h>( + fn get_attribute_ref( &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &'h Heap, attribute: &str, - ) -> ExpressionResult<&'h Value> { + ) -> ExpressionResult<&StoredValue> { Err(MissingAttributeError { name: attribute.into(), } .to_error(stack_trace)) } - fn get_attribute_mut<'h>( + fn get_attribute_mut( &mut self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &'h mut Heap, _attribute: &str, - ) -> ExpressionResult<&'h mut Value> { + ) -> ExpressionResult<&mut StoredValue> { UnsupportedOperationError::raise(self, stack_trace, "set attribute") } + fn insert_attribute( + &mut self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + _attribute: impl Into, + _new_value: Value, + ) -> ExpressionResult<()> { + UnsupportedOperationError::raise(self, stack_trace, "insert attribute") + } fn call( &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, _argument: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "call") @@ -305,7 +291,6 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + ObjectClone { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, _index: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "index") @@ -314,33 +299,29 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + ObjectClone { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, ) -> ExpressionResult>> { UnsupportedOperationError::raise(self, stack_trace, "iterate") } fn unary_plus( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "unary plus") + UnsupportedOperationError::raise(&self, stack_trace, "unary plus") } fn unary_minus( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "unary minus") + UnsupportedOperationError::raise(&self, stack_trace, "unary minus") } fn unary_not( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "unary not") + UnsupportedOperationError::raise(&self, stack_trace, "unary not") } // fn export( @@ -350,25 +331,115 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + ObjectClone { // ) -> OperatorResult { // UnsupportedOperationError::raise(self, stack_trace, "export") // } - - fn drop(self, _heap: &mut Heap) {} } +/// Implements and indicates the copy rules of an object. #[enum_dispatch] -pub trait ObjectClone { - fn object_clone(&self, heap: &Heap) -> Value; +pub trait ObjectCopy { + /// Creates a copy of the object. Returning None indicates that the object should not be + /// passed by copy, and instead should be moved. + fn object_copy(&self) -> Option { + None + } } -impl ObjectClone for O +impl ObjectCopy for O where - O: Object + Clone + Into, + O: Object + Copy + Into, { - fn object_clone(&self, _heap: &Heap) -> Value { - self.clone().into() + fn object_copy(&self) -> Option { + Some(self.clone().into()) + } +} + +#[derive(Debug, Eq, PartialEq)] +pub enum StoredValue { + Value(Value), + Moved { + /// Where in the source code it was moved. + location: SourceReference, + }, +} + +impl StoredValue { + pub fn replace(&mut self, new: Value) { + *self = Self::Value(new); + } + + pub fn take(&mut self, stack_trace: &[SourceReference]) -> ExpressionResult { + if let Self::Value(value) = &self { + if let Some(value) = value.object_copy() { + // No need to move if it's a copy type. + return Ok(value); + } + } + + let mut old_self = Self::Moved { + location: stack_trace.last().expect("Stack trace was empty").clone(), + }; + std::mem::swap(self, &mut old_self); + + match old_self { + StoredValue::Value(value) => Ok(value), + StoredValue::Moved { location } => { + Err(ValueMovedError { location }.to_error(stack_trace)) + } + } + } + + pub fn access(&self, stack_trace: &[SourceReference]) -> ExpressionResult<&Value> { + match self { + StoredValue::Value(value) => Ok(value), + StoredValue::Moved { location } => Err(ValueMovedError { + location: location.clone(), + } + .to_error(stack_trace)), + } + } + + pub fn access_mut(&mut self, stack_trace: &[SourceReference]) -> ExpressionResult<&mut Value> { + match self { + StoredValue::Value(value) => Ok(value), + StoredValue::Moved { location } => Err(ValueMovedError { + location: location.clone(), + } + .to_error(stack_trace)), + } + } +} + +impl std::hash::Hash for StoredValue { + fn hash(&self, state: &mut H) { + // We only contribute to the hash if we actually contain a value. + if let Self::Value(value) = self { + core::mem::discriminant(value).hash(state); + } + } +} + +impl From for StoredValue +where + V: Into, +{ + fn from(value: V) -> Self { + Self::Value(value.into()) + } +} + +#[derive(Debug, Eq, PartialEq)] +struct ValueMovedError { + location: SourceReference, +} + +impl ErrorType for ValueMovedError {} + +impl Display for ValueMovedError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "value has was moved at {}", self.location) } } -#[enum_dispatch(Object, ObjectClone)] +#[enum_dispatch(Object, ObjectCopy)] #[derive(Debug, Eq, PartialEq, EnumDowncast, EnumAs)] pub enum Value { Void, diff --git a/crates/interpreter/src/execution/values/scalar.rs b/crates/interpreter/src/execution/values/scalar.rs index 9f2140e..cb90764 100644 --- a/crates/interpreter/src/execution/values/scalar.rs +++ b/crates/interpreter/src/execution/values/scalar.rs @@ -23,7 +23,6 @@ use crate::{ compile::SourceReference, execution::{ errors::{ExpressionResult, GenericFailure, Raise}, - heap::Heap, logging::RuntimeLog, }, }; @@ -45,7 +44,7 @@ impl UnwrapNotNan for std::result::Result { } } -#[derive(Debug, Hash, Clone, Eq, PartialEq)] +#[derive(Debug, Hash, Clone, Copy, Eq, PartialEq)] pub struct Scalar { pub dimension: Dimension, pub value: Float, @@ -182,11 +181,10 @@ impl Object for Scalar { // } fn addition( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs = self.unpack_for_addition_or_subtraction(stack_trace, rhs)?; @@ -199,11 +197,10 @@ impl Object for Scalar { .into()) } fn subtraction( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs = self.unpack_for_addition_or_subtraction(stack_trace, rhs)?; @@ -216,40 +213,36 @@ impl Object for Scalar { .into()) } fn multiply( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs = rhs.downcast_ref::(stack_trace)?; self.multiply_by_scalar(stack_trace, rhs) .map(|rhs| rhs.into()) } fn divide( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs = rhs.downcast_ref::(stack_trace)?; self.divide_by_measurement(stack_trace, rhs) .map(|rhs| rhs.into()) } fn unary_plus( - &self, + self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], - _heap: &Heap, ) -> ExpressionResult { Ok(self.clone().into()) } fn unary_minus( - &self, + self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], - _heap: &Heap, ) -> ExpressionResult { Ok(Self { value: -self.value, @@ -258,11 +251,10 @@ impl Object for Scalar { .into()) } fn cmp( - &self, + self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _heap: &Heap, - rhs: &Value, + rhs: Value, ) -> ExpressionResult { let rhs = rhs.downcast_ref::(stack_trace)?; if self.dimension == rhs.dimension { @@ -749,11 +741,11 @@ impl Scalar { self.dimension.is_zero_dimension() && self.dimension.ratio_type_hint.0 == 0 } - fn unpack_for_addition_or_subtraction<'b>( - &'b self, + fn unpack_for_addition_or_subtraction( + self, stack_trace: &[SourceReference], - rhs: &'b Value, - ) -> ExpressionResult<&'b Self> { + rhs: Value, + ) -> ExpressionResult { if let Value::Scalar(rhs) = rhs { if self.dimension == rhs.dimension { Ok(rhs) @@ -783,7 +775,7 @@ mod test { #[test] fn addition() { - let product = test_run("3m + 2m").unwrap().0; + let product = test_run("3m + 2m").unwrap(); assert_eq!( product, Scalar { @@ -796,7 +788,7 @@ mod test { #[test] fn subtraction() { - let product = test_run("3m - 2m").unwrap().0; + let product = test_run("3m - 2m").unwrap(); assert_eq!( product, Scalar { @@ -809,7 +801,7 @@ mod test { #[test] fn multiplication() { - let product = test_run("3m * 2m").unwrap().0; + let product = test_run("3m * 2m").unwrap(); assert_eq!( product, Scalar { @@ -822,7 +814,7 @@ mod test { #[test] fn division() { - let product = test_run("6'm^2' / 2m").unwrap().0; + let product = test_run("6'm^2' / 2m").unwrap(); assert_eq!( product, Scalar { @@ -835,55 +827,55 @@ mod test { #[test] fn comparisions() { - let product = test_run("6m > 2m").unwrap().0; + let product = test_run("6m > 2m").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("2m > 6m").unwrap().0; + let product = test_run("2m > 6m").unwrap(); assert_eq!(product, Boolean(false).into()); - let product = test_run("6m >= 2m").unwrap().0; + let product = test_run("6m >= 2m").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("6m >= 6m").unwrap().0; + let product = test_run("6m >= 6m").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("2m >= 6m").unwrap().0; + let product = test_run("2m >= 6m").unwrap(); assert_eq!(product, Boolean(false).into()); - let product = test_run("6m == 6m").unwrap().0; + let product = test_run("6m == 6m").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("6m == 5m").unwrap().0; + let product = test_run("6m == 5m").unwrap(); assert_eq!(product, Boolean(false).into()); - let product = test_run("6m <= 5m").unwrap().0; + let product = test_run("6m <= 5m").unwrap(); assert_eq!(product, Boolean(false).into()); - let product = test_run("5m <= 5m").unwrap().0; + let product = test_run("5m <= 5m").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("5m <= 6m").unwrap().0; + let product = test_run("5m <= 6m").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("5m < 6m").unwrap().0; + let product = test_run("5m < 6m").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("6m < 6m").unwrap().0; + let product = test_run("6m < 6m").unwrap(); assert_eq!(product, Boolean(false).into()); - let product = test_run("6m != 6m").unwrap().0; + let product = test_run("6m != 6m").unwrap(); assert_eq!(product, Boolean(false).into()); - let product = test_run("6m != 5m").unwrap().0; + let product = test_run("6m != 5m").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn conversions() { - let product = test_run("1m + 100cm == 2m").unwrap().0; + let product = test_run("1m + 100cm == 2m").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("2m * 2m == 4'm^2'").unwrap().0; + let product = test_run("2m * 2m == 4'm^2'").unwrap(); assert_eq!(product, Boolean(true).into()); } } diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 8754d64..364312f 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -20,25 +20,17 @@ use std::{borrow::Cow, fmt::Display, sync::Arc}; use common_data_types::Dimension; use super::{ - closure::Signature as ClosureSignature, Boolean, DefaultValue, Object, ObjectClone, + closure::Signature as ClosureSignature, Boolean, DefaultValue, Object, ObjectCopy, SignedInteger, StaticTypeName, UnsignedInteger, Value, Void, }; use crate::{ compile::{self, AstNode, SourceReference}, execute_expression, - execution::{ - errors::ExpressionResult, - heap::{HeapKey, HeapStorage}, - logging::RuntimeLog, - stack::Stack, - Heap, - }, + execution::{errors::ExpressionResult, logging::RuntimeLog, stack::Stack}, }; -pub type StructMemberStorage = HeapStorage>; - -#[derive(Debug, Eq, PartialEq)] +#[derive(Debug, Eq, Clone, PartialEq)] pub enum ValueType { Void, Default, @@ -98,22 +90,10 @@ impl StaticTypeName for ValueType { } } -impl ObjectClone for ValueType { - fn object_clone(&self, heap: &Heap) -> Value { - match self { - Self::Void => Self::Void, - Self::Default => Self::Default, - Self::Boolean => Self::Boolean, - Self::SignedInteger => Self::SignedInteger, - Self::UnsignedInteger => Self::UnsignedInteger, - Self::Scalar(dimension) => Self::Scalar(*dimension), - Self::Closure(signature) => Self::Closure(signature), - Self::Dictionary(struct_definition) => { - Self::Dictionary(struct_definition.object_clone(heap)) - } - Self::ValueType => Self::ValueType, - } - .into() +impl ObjectCopy for ValueType { + fn object_copy(&self) -> Option { + // It's not quite as cheap as a copy but it's still cheap enough. + Some(self.clone().into()) } } @@ -129,26 +109,19 @@ impl StructMember { log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, - heap: &mut Heap, source: &AstNode, ) -> ExpressionResult { let name = source.node.name.node.clone(); - let ty = execute_expression(log, stack_trace, stack, heap, &source.node.ty)? + let ty = execute_expression(log, stack_trace, stack, &source.node.ty)? .downcast::(stack_trace)?; let default = if let Some(default) = source.node.default.as_ref() { - Some(execute_expression(log, stack_trace, stack, heap, default)?) + Some(execute_expression(log, stack_trace, stack, default)?) } else { None }; Ok(Self { name, ty, default }) } - - fn drop(self, heap: &mut Heap) { - if let Some(default) = self.default { - default.drop(heap); - } - } } impl Display for StructMember { @@ -161,9 +134,9 @@ impl Display for StructMember { } } -#[derive(Debug, Eq, PartialEq)] +#[derive(Debug, Clone, Eq, PartialEq)] pub struct StructDefinition { - pub members: HeapKey, + pub members: Arc>, pub variadic: bool, } @@ -172,35 +145,17 @@ impl StructDefinition { log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, - heap: &mut Heap, source: &AstNode, ) -> ExpressionResult { let mut members = Vec::new(); for member in source.node.members.iter() { - members.push(StructMember::new(log, stack_trace, stack, heap, member)?); + members.push(StructMember::new(log, stack_trace, stack, member)?); } - let members = heap.struct_members.new_allocation(members); + let members = Arc::new(members); let variadic = source.node.variadic; Ok(Self { members, variadic }) } - - fn drop(self, heap: &mut Heap) { - if let Some(members) = heap.struct_members.dereference_allocation(self.members) { - for member in members { - member.drop(heap); - } - } - } - - fn object_clone(&self, heap: &Heap) -> StructDefinition { - let members = heap.struct_members.reference_allocation(&self.members); - - Self { - members, - variadic: self.variadic, - } - } } impl Display for StructDefinition { diff --git a/crates/interpreter/src/execution/values/void.rs b/crates/interpreter/src/execution/values/void.rs index e71a74c..20fbc02 100644 --- a/crates/interpreter/src/execution/values/void.rs +++ b/crates/interpreter/src/execution/values/void.rs @@ -18,7 +18,7 @@ use super::{value_type::ValueType, Object, StaticTypeName}; -#[derive(Debug, Hash, Clone, Eq, PartialEq)] +#[derive(Debug, Hash, Clone, Copy, Eq, PartialEq)] pub struct Void; impl Object for Void { diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 0d865b3..dfed216 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -241,7 +241,7 @@ module.exports = grammar({ return choice(...operators.map((operator) => field('op', operator))); }, - let: $ => seq('let', field('to_assign', $.identifier), '=', field('value', $.expression), ';'), + let: $ => seq('let', field('to_assign', $.path), '=', field('value', $.expression), ';'), assign: $ => seq(field('to_assign', $.path), $.assignment_operator, field('value', $.expression), ';'), for: $ => seq('for', field('to_assign', $.identifier), 'in', field('to_iterate', $.expression), field('to_run', $.procedural_block)), } diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 58110ea..4906130 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -1887,7 +1887,7 @@ "name": "to_assign", "content": { "type": "SYMBOL", - "name": "identifier" + "name": "path" } }, { diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 52613b1..2398a9c 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -627,7 +627,7 @@ "required": true, "types": [ { - "type": "identifier", + "type": "path", "named": true } ] diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 22d9d79..962d875 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -1893,20 +1893,20 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [152] = {.lex_state = 0}, [153] = {.lex_state = 0}, [154] = {.lex_state = 0}, - [155] = {.lex_state = 4}, - [156] = {.lex_state = 0}, + [155] = {.lex_state = 0}, + [156] = {.lex_state = 4}, [157] = {.lex_state = 0}, [158] = {.lex_state = 0}, - [159] = {.lex_state = 4}, - [160] = {.lex_state = 0}, + [159] = {.lex_state = 0}, + [160] = {.lex_state = 6}, [161] = {.lex_state = 0}, [162] = {.lex_state = 0}, [163] = {.lex_state = 0}, - [164] = {.lex_state = 6}, + [164] = {.lex_state = 0}, [165] = {.lex_state = 0}, - [166] = {.lex_state = 0}, - [167] = {.lex_state = 4}, - [168] = {.lex_state = 0}, + [166] = {.lex_state = 4}, + [167] = {.lex_state = 0}, + [168] = {.lex_state = 4}, [169] = {.lex_state = 0}, [170] = {.lex_state = 4}, [171] = {.lex_state = 4}, @@ -1994,11 +1994,11 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { }, [1] = { [sym_source_file] = STATE(161), - [sym_base_ten] = STATE(152), - [sym_octal] = STATE(152), - [sym_hex] = STATE(152), - [sym_binary] = STATE(152), - [sym_integer] = STATE(154), + [sym_base_ten] = STATE(153), + [sym_octal] = STATE(153), + [sym_hex] = STATE(153), + [sym_binary] = STATE(153), + [sym_integer] = STATE(155), [sym_signed_integer] = STATE(32), [sym_unsigned_integer] = STATE(32), [sym_number] = STATE(11), @@ -2403,7 +2403,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(46), 1, sym_struct_definition, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2426,7 +2426,7 @@ static const uint16_t ts_small_parse_table[] = { sym_let, sym_assign, sym_for, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -2483,7 +2483,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(46), 1, sym_struct_definition, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2506,7 +2506,7 @@ static const uint16_t ts_small_parse_table[] = { sym_let, sym_assign, sym_for, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -2563,7 +2563,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(46), 1, sym_struct_definition, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2586,7 +2586,7 @@ static const uint16_t ts_small_parse_table[] = { sym_let, sym_assign, sym_for, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -2643,9 +2643,9 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_struct_definition_repeat1, STATE(138), 1, sym_dictionary_member_assignment, - STATE(153), 1, - sym_struct_member, STATE(154), 1, + sym_struct_member, + STATE(155), 1, sym_integer, STATE(162), 1, sym__struct_final_element, @@ -2665,7 +2665,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -4241,7 +4241,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(112), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4259,7 +4259,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -4361,7 +4361,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(110), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4379,7 +4379,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -4430,7 +4430,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(108), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4448,7 +4448,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -5252,7 +5252,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(93), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5270,7 +5270,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -5317,7 +5317,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(91), 1, sym__float, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5335,7 +5335,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -5382,7 +5382,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(114), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5400,7 +5400,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -5447,7 +5447,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(111), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5465,7 +5465,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -5512,7 +5512,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(107), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5530,7 +5530,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -5577,7 +5577,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(113), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5595,7 +5595,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -5642,7 +5642,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(109), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5660,7 +5660,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -5707,7 +5707,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(103), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5725,7 +5725,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -5772,7 +5772,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(91), 1, sym__float, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5790,7 +5790,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -5837,7 +5837,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(102), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5855,7 +5855,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -5902,7 +5902,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(41), 1, sym__float, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5920,7 +5920,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -5967,7 +5967,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(95), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5985,7 +5985,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6032,7 +6032,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(47), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6050,7 +6050,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6097,7 +6097,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(41), 1, sym__float, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6115,7 +6115,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6162,7 +6162,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(48), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6180,7 +6180,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6227,7 +6227,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(49), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6245,7 +6245,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6292,7 +6292,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(50), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6310,7 +6310,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6357,7 +6357,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(51), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6375,7 +6375,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6422,7 +6422,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(52), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6440,7 +6440,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6487,7 +6487,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(53), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6505,7 +6505,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6552,7 +6552,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(54), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6570,7 +6570,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6617,7 +6617,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(55), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6635,7 +6635,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6682,7 +6682,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(56), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6700,7 +6700,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6747,7 +6747,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(94), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6765,7 +6765,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6812,7 +6812,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6830,7 +6830,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6877,7 +6877,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(97), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6895,7 +6895,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -6942,7 +6942,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(98), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6960,7 +6960,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -7007,7 +7007,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(99), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7025,7 +7025,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -7072,7 +7072,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(100), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7090,7 +7090,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -7137,7 +7137,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(105), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7155,7 +7155,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -7202,7 +7202,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(106), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7220,7 +7220,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -7267,7 +7267,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(44), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7285,7 +7285,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -7332,7 +7332,7 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(96), 1, sym_expression, - STATE(154), 1, + STATE(155), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7350,7 +7350,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(152), 4, + STATE(153), 4, sym_base_ten, sym_octal, sym_hex, @@ -8817,9 +8817,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, STATE(128), 1, aux_sym_struct_definition_repeat1, - STATE(153), 1, + STATE(154), 1, sym_struct_member, - STATE(165), 1, + STATE(164), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, @@ -8833,7 +8833,7 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, STATE(124), 1, aux_sym_struct_definition_repeat1, - STATE(153), 1, + STATE(154), 1, sym_struct_member, STATE(162), 1, sym__struct_final_element, @@ -8871,7 +8871,7 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, STATE(128), 1, aux_sym_struct_definition_repeat1, - STATE(157), 1, + STATE(158), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, @@ -8904,7 +8904,7 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(429), 1, anon_sym_RPAREN, - STATE(150), 1, + STATE(151), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, @@ -8951,7 +8951,7 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(431), 1, anon_sym_RPAREN, - STATE(150), 1, + STATE(151), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, @@ -8997,7 +8997,7 @@ static const uint16_t ts_small_parse_table[] = { [8268] = 3, ACTIONS(423), 1, sym_identifier, - STATE(150), 1, + STATE(151), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, @@ -9025,14 +9025,22 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [8310] = 2, + [8310] = 3, + ACTIONS(410), 1, + sym_identifier, + STATE(157), 1, + sym_path, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [8321] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(455), 2, sym_identifier, anon_sym_RBRACK, - [8319] = 3, + [8330] = 3, ACTIONS(457), 1, anon_sym_COMMA, ACTIONS(461), 1, @@ -9040,21 +9048,21 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [8330] = 2, + [8341] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(463), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [8339] = 2, + [8350] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(465), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [8348] = 3, + [8359] = 3, ACTIONS(467), 1, anon_sym_RPAREN, ACTIONS(469), 1, @@ -9062,14 +9070,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [8359] = 2, + [8370] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(435), 2, anon_sym_RPAREN, anon_sym_COMMA, - [8368] = 3, + [8379] = 3, ACTIONS(141), 1, anon_sym_LPAREN, STATE(36), 1, @@ -9077,14 +9085,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [8379] = 2, + [8390] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(471), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [8388] = 3, + [8399] = 3, ACTIONS(467), 1, anon_sym_RPAREN, ACTIONS(473), 1, @@ -9092,7 +9100,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [8399] = 3, + [8410] = 3, ACTIONS(475), 1, aux_sym_signed_integer_token1, ACTIONS(477), 1, @@ -9100,7 +9108,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [8410] = 3, + [8421] = 3, ACTIONS(479), 1, aux_sym_base_ten_token1, STATE(18), 1, @@ -9108,134 +9116,128 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [8421] = 2, + [8432] = 2, ACTIONS(481), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8429] = 2, + [8440] = 2, ACTIONS(473), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8437] = 2, - ACTIONS(483), 1, - anon_sym_in, + [8448] = 2, + ACTIONS(457), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8445] = 2, - ACTIONS(485), 1, - anon_sym_DASH_GT, + [8456] = 2, + ACTIONS(483), 1, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8453] = 2, - ACTIONS(457), 1, - anon_sym_COMMA, + [8464] = 2, + ACTIONS(485), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8461] = 2, + [8472] = 2, ACTIONS(487), 1, - ts_builtin_sym_end, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8469] = 2, + [8480] = 2, ACTIONS(489), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8477] = 2, + [8488] = 2, ACTIONS(491), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8485] = 2, + [8496] = 2, ACTIONS(493), 1, - aux_sym_hex_token2, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8493] = 2, + [8504] = 2, ACTIONS(495), 1, - anon_sym_RPAREN, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8501] = 2, + [8512] = 2, ACTIONS(497), 1, - sym_identifier, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8509] = 2, + [8520] = 2, ACTIONS(499), 1, - aux_sym_base_ten_token1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8517] = 2, + [8528] = 2, ACTIONS(501), 1, - anon_sym_EQ, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8525] = 2, + [8536] = 2, ACTIONS(503), 1, - sym_identifier, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8533] = 2, + [8544] = 2, ACTIONS(505), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8541] = 2, + [8552] = 2, ACTIONS(507), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8549] = 2, + [8560] = 2, ACTIONS(509), 1, - anon_sym_DASH_GT, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8557] = 2, + [8568] = 2, ACTIONS(511), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8565] = 2, + [8576] = 2, ACTIONS(513), 1, - anon_sym_RPAREN, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8573] = 2, + [8584] = 2, ACTIONS(515), 1, - aux_sym_binary_token2, + anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8581] = 2, + [8592] = 2, ACTIONS(517), 1, - sym_identifier, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8589] = 2, - ACTIONS(519), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, @@ -9382,38 +9384,38 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(143)] = 8290, [SMALL_STATE(144)] = 8299, [SMALL_STATE(145)] = 8310, - [SMALL_STATE(146)] = 8319, + [SMALL_STATE(146)] = 8321, [SMALL_STATE(147)] = 8330, - [SMALL_STATE(148)] = 8339, - [SMALL_STATE(149)] = 8348, + [SMALL_STATE(148)] = 8341, + [SMALL_STATE(149)] = 8350, [SMALL_STATE(150)] = 8359, - [SMALL_STATE(151)] = 8368, + [SMALL_STATE(151)] = 8370, [SMALL_STATE(152)] = 8379, - [SMALL_STATE(153)] = 8388, + [SMALL_STATE(153)] = 8390, [SMALL_STATE(154)] = 8399, [SMALL_STATE(155)] = 8410, [SMALL_STATE(156)] = 8421, - [SMALL_STATE(157)] = 8429, - [SMALL_STATE(158)] = 8437, - [SMALL_STATE(159)] = 8445, - [SMALL_STATE(160)] = 8453, - [SMALL_STATE(161)] = 8461, - [SMALL_STATE(162)] = 8469, - [SMALL_STATE(163)] = 8477, - [SMALL_STATE(164)] = 8485, - [SMALL_STATE(165)] = 8493, - [SMALL_STATE(166)] = 8501, - [SMALL_STATE(167)] = 8509, - [SMALL_STATE(168)] = 8517, - [SMALL_STATE(169)] = 8525, - [SMALL_STATE(170)] = 8533, - [SMALL_STATE(171)] = 8541, - [SMALL_STATE(172)] = 8549, - [SMALL_STATE(173)] = 8557, - [SMALL_STATE(174)] = 8565, - [SMALL_STATE(175)] = 8573, - [SMALL_STATE(176)] = 8581, - [SMALL_STATE(177)] = 8589, + [SMALL_STATE(157)] = 8432, + [SMALL_STATE(158)] = 8440, + [SMALL_STATE(159)] = 8448, + [SMALL_STATE(160)] = 8456, + [SMALL_STATE(161)] = 8464, + [SMALL_STATE(162)] = 8472, + [SMALL_STATE(163)] = 8480, + [SMALL_STATE(164)] = 8488, + [SMALL_STATE(165)] = 8496, + [SMALL_STATE(166)] = 8504, + [SMALL_STATE(167)] = 8512, + [SMALL_STATE(168)] = 8520, + [SMALL_STATE(169)] = 8528, + [SMALL_STATE(170)] = 8536, + [SMALL_STATE(171)] = 8544, + [SMALL_STATE(172)] = 8552, + [SMALL_STATE(173)] = 8560, + [SMALL_STATE(174)] = 8568, + [SMALL_STATE(175)] = 8576, + [SMALL_STATE(176)] = 8584, + [SMALL_STATE(177)] = 8592, }; static const TSParseActionEntry ts_parse_actions[] = { @@ -9424,8 +9426,8 @@ static const TSParseActionEntry ts_parse_actions[] = { [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(90), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), @@ -9448,15 +9450,15 @@ static const TSParseActionEntry ts_parse_actions[] = { [56] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), [58] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), [60] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [62] = {.entry = {.count = 1, .reusable = false}}, SHIFT(166), + [62] = {.entry = {.count = 1, .reusable = false}}, SHIFT(145), [64] = {.entry = {.count = 1, .reusable = false}}, SHIFT(169), [66] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), [68] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(2), [71] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(32), [74] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(32), [77] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(39), - [80] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(167), - [83] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(164), + [80] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(166), + [83] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(160), [86] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(175), [89] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(23), [92] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(67), @@ -9465,21 +9467,21 @@ static const TSParseActionEntry ts_parse_actions[] = { [101] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(43), [104] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(7), [107] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), - [109] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(166), + [109] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(145), [112] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(169), [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(104), [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), - [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), [123] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), [125] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [127] = {.entry = {.count = 1, .reusable = false}}, SHIFT(155), + [127] = {.entry = {.count = 1, .reusable = false}}, SHIFT(156), [129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 7), [131] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 7), [133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(142), [135] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), [137] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), - [139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), [141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), [143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), [145] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), @@ -9534,8 +9536,8 @@ static const TSParseActionEntry ts_parse_actions[] = { [244] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(32), [247] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(32), [250] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(90), - [253] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(167), - [256] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(164), + [253] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(166), + [256] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(160), [259] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(175), [262] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(23), [265] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(58), @@ -9614,9 +9616,9 @@ static const TSParseActionEntry ts_parse_actions[] = { [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), [418] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(144), [421] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), - [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), - [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), + [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), @@ -9628,40 +9630,39 @@ static const TSParseActionEntry ts_parse_actions[] = { [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), - [452] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(160), + [452] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(159), [455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), - [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), [459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), [463] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), [465] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), [467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), + [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), [471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [485] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), - [487] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), - [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), - [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), - [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [507] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), - [509] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), - [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [513] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), - [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [485] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [497] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [499] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), + [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [505] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), + [507] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), + [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt b/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt index 11eaddd..da88916 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt @@ -34,6 +34,6 @@ Let (procedural_block (statement (let - (identifier) + (path (identifier)) (expression (signed_integer (integer (base_ten))))))))) From 07ac852fc1078bb1f12c8a2d87426fd6d9b00740 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 3 May 2025 13:26:20 -0400 Subject: [PATCH 022/106] Finally implement closures --- crates/interpreter/src/compile/expressions.rs | 16 +- crates/interpreter/src/execution/mod.rs | 8 +- .../src/execution/values/closure.rs | 123 +- .../src/execution/values/value_type.rs | 6 + .../tree-sitter-command-cad-model/grammar.js | 4 +- .../src/grammar.json | 4 +- .../src/parser.c | 3139 ++++++++--------- .../test/corpus/closure.txt | 113 + .../test/corpus/code_block.txt | 24 + 9 files changed, 1810 insertions(+), 1627 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index b42ffc5..6f993d6 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -849,9 +849,9 @@ impl<'t> Parse<'t, nodes::DictionaryConstruction<'t>> for DictionaryConstruction #[derive(Debug, Hash, Eq, PartialEq)] pub struct ClosureDefinition { - pub argument: AstNode, + pub argument_type: AstNode, pub captures: Vec>, - pub returns: AstNode, + pub return_type: AstNode, pub expression: AstNode>, } @@ -890,9 +890,9 @@ impl<'t> Parse<'t, nodes::ClosureDefinition<'t>> for ClosureDefinition { file, &value, Self { - argument, + argument_type: argument, captures: identities, - returns, + return_type: returns, expression, }, )) @@ -1125,14 +1125,14 @@ mod test { let root = full_compile("(,)[this, that] -> ~ {}"); let closure = root.node.as_closuredefinition().unwrap(); let closure_reference = closure.reference.clone(); - let argument = &closure.node.argument; + let argument = &closure.node.argument_type; let argument_reference = argument.reference.clone(); let captures = &closure.node.captures; let this_reference = captures[0].reference.clone(); let that_reference = captures[1].reference.clone(); - let returns = &closure.node.returns; + let returns = &closure.node.return_type; let returns_reference = returns.reference.clone(); let returns_void_reference = returns.node.as_void().unwrap().reference.clone(); @@ -1152,7 +1152,7 @@ mod test { node: Expression::ClosureDefinition(AstNode { reference: closure_reference, node: Box::new(ClosureDefinition { - argument: AstNode { + argument_type: AstNode { reference: argument_reference, node: Expression::StructDefinition(AstNode { reference: argument @@ -1177,7 +1177,7 @@ mod test { node: "that".to_string() } ], - returns: AstNode { + return_type: AstNode { reference: returns_reference, node: Expression::Void(AstNode { reference: returns_void_reference, diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index fd5474e..8618bff 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -112,7 +112,7 @@ pub fn execute_expression( } compile::Expression::Boolean(ast_node) => Ok(values::Boolean(ast_node.node).into()), compile::Expression::ClosureDefinition(ast_node) => { - Ok(values::UserClosure::from_ast(ast_node).into()) + Ok(values::UserClosure::from_ast(log, stack_trace, stack, ast_node)?.into()) } compile::Expression::Default(_ast_node) => Ok(values::DefaultValue.into()), compile::Expression::DictionaryConstruction(ast_node) => { @@ -554,12 +554,6 @@ mod test { assert_eq!(product, values::UnsignedInteger::from(32).into()); } - #[test] - fn define_closure() { - let product = test_run("(~)[std.types] -> std.types.Void {}").unwrap(); - assert_eq!(product, values::UnsignedInteger::from(32).into()); - } - #[test] fn nested_value_creation() { let product = diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 89d0677..f9b47c6 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -20,7 +20,16 @@ use std::{fmt::Display, sync::Arc}; use fortuples::fortuples; -use crate::compile::{AstNode, ClosureDefinition, Expression}; +use crate::{ + compile::{AstNode, ClosureDefinition, Expression, SourceReference}, + execute_expression, + execution::{ + errors::{ExpressionResult, Raise}, + logging::{LocatedStr, RuntimeLog, StackScope}, + stack::Stack, + values::DowncastError, + }, +}; use super::{Object, ObjectCopy, StaticTypeName, StructDefinition, Value, ValueType}; @@ -52,14 +61,82 @@ struct UserClosureInternals { expression: Arc, } -#[derive(Debug, Eq, PartialEq)] +#[derive(Debug, Eq, PartialEq, Clone)] pub struct UserClosure { data: Arc, } impl UserClosure { - pub fn from_ast(source: &AstNode>) -> Self { - todo!() + pub fn from_ast( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + source: &AstNode>, + ) -> ExpressionResult { + let argument_type = stack_trace.stack_scope( + source.node.argument_type.reference.clone(), + |stack_trace| { + let argument_type = + execute_expression(log, stack_trace, stack, &source.node.argument_type)? + .downcast::(stack_trace)?; + + if let ValueType::Dictionary(argument_type) = argument_type { + Ok(argument_type) + } else { + Err(DowncastError { + expected: StructDefinition::static_type_name().into(), + got: argument_type.name(), + } + .to_error(stack_trace.as_slice())) + } + }, + )?; + + let return_type = + stack_trace.stack_scope(source.node.return_type.reference.clone(), |stack_trace| { + execute_expression(log, stack_trace, stack, &source.node.return_type)? + .downcast::(stack_trace) + })?; + + let signature = Arc::new(Signature { + argument_type, + return_type, + }); + + let mut captured_values = Vec::new(); + + for to_capture in source.node.captures.iter() { + let value = stack_trace.stack_scope( + to_capture.reference.clone(), + |stack_trace: &mut Vec| { + stack + .get_variable_mut( + stack_trace, + LocatedStr { + // TODO should actually point to the variable name. + location: stack_trace.last().unwrap().clone(), + string: to_capture.node.as_str(), + }, + )? + .take(stack_trace) + }, + )?; + + captured_values.push(CapturedValue { + name: to_capture.node.clone(), + value, + }); + } + + let expression = source.node.expression.node.clone(); + + Ok(Self { + data: Arc::new(UserClosureInternals { + signature, + captured_values, + expression, + }), + }) } } @@ -77,7 +154,7 @@ impl StaticTypeName for UserClosure { impl ObjectCopy for UserClosure { fn object_copy(&self) -> Option { - todo!() + Some(self.clone().into()) } } @@ -378,3 +455,39 @@ impl ObjectCopy for UserClosure { // } // } // } + +#[cfg(test)] +mod test { + use super::*; + use crate::execution::test_run; + + #[test] + fn define_closure() { + let product = + test_run("{ let value_to_capture = 5i; (,) [value_to_capture] -> std.types.Void {} }") + .unwrap(); + + let expression = product.as_userclosure().unwrap().data.expression.clone(); + + assert_eq!( + product, + UserClosure { + data: Arc::new(UserClosureInternals { + signature: Arc::new(Signature { + argument_type: StructDefinition { + members: vec![].into(), + variadic: false, + }, + return_type: ValueType::Void, + }), + captured_values: vec![CapturedValue { + name: "value_to_capture".into(), + value: super::super::SignedInteger::from(5).into() + }], + expression + }) + } + .into() + ); + } +} diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 364312f..eecea30 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -192,3 +192,9 @@ impl Display for StructDefinition { write!(f, ")") } } + +impl StaticTypeName for StructDefinition { + fn static_type_name() -> &'static str { + "Struct Definition" + } +} diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index dfed216..3c0aafc 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -8,6 +8,7 @@ // @ts-check const PREC = { + closure: 19, struct_member: 18, unit: 17, method_call: 16, @@ -26,8 +27,7 @@ const PREC = { or: 2, range: 1, assign: 0, - struct_def: -1, - closure: -2, + struct_def: -2, }; module.exports = grammar({ diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 4906130..0eac5b2 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -1419,7 +1419,7 @@ }, "struct_definition": { "type": "PREC_LEFT", - "value": -1, + "value": -2, "content": { "type": "SEQ", "members": [ @@ -1647,7 +1647,7 @@ }, "closure_definition": { "type": "PREC_LEFT", - "value": -2, + "value": 19, "content": { "type": "SEQ", "members": [ diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 962d875..59fef67 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -5,7 +5,7 @@ #endif #define LANGUAGE_VERSION 14 -#define STATE_COUNT 178 +#define STATE_COUNT 177 #define LARGE_STATE_COUNT 7 #define SYMBOL_COUNT 115 #define ALIAS_COUNT 0 @@ -1067,43 +1067,43 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [64] = 64, [65] = 65, [66] = 66, - [67] = 58, - [68] = 68, - [69] = 64, - [70] = 65, + [67] = 67, + [68] = 59, + [69] = 69, + [70] = 63, [71] = 66, - [72] = 72, - [73] = 68, + [72] = 67, + [73] = 69, [74] = 74, [75] = 75, [76] = 76, [77] = 77, [78] = 78, [79] = 79, - [80] = 74, - [81] = 75, - [82] = 76, - [83] = 77, - [84] = 78, - [85] = 79, - [86] = 86, - [87] = 87, - [88] = 57, - [89] = 72, - [90] = 39, - [91] = 41, + [80] = 80, + [81] = 74, + [82] = 75, + [83] = 76, + [84] = 77, + [85] = 78, + [86] = 79, + [87] = 80, + [88] = 65, + [89] = 89, + [90] = 40, + [91] = 42, [92] = 46, - [93] = 44, - [94] = 51, - [95] = 50, - [96] = 49, - [97] = 53, - [98] = 54, - [99] = 55, - [100] = 56, + [93] = 54, + [94] = 55, + [95] = 56, + [96] = 47, + [97] = 48, + [98] = 49, + [99] = 50, + [100] = 51, [101] = 52, - [102] = 48, - [103] = 47, + [102] = 53, + [103] = 103, [104] = 104, [105] = 105, [106] = 106, @@ -1126,8 +1126,8 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [123] = 123, [124] = 124, [125] = 125, - [126] = 126, - [127] = 126, + [126] = 125, + [127] = 127, [128] = 128, [129] = 129, [130] = 130, @@ -1175,9 +1175,8 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [172] = 172, [173] = 173, [174] = 174, - [175] = 175, + [175] = 167, [176] = 176, - [177] = 170, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1861,23 +1860,23 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [120] = {.lex_state = 13}, [121] = {.lex_state = 13}, [122] = {.lex_state = 13}, - [123] = {.lex_state = 13}, + [123] = {.lex_state = 1}, [124] = {.lex_state = 1}, - [125] = {.lex_state = 1}, + [125] = {.lex_state = 0}, [126] = {.lex_state = 0}, - [127] = {.lex_state = 0}, - [128] = {.lex_state = 1}, + [127] = {.lex_state = 1}, + [128] = {.lex_state = 0}, [129] = {.lex_state = 0}, [130] = {.lex_state = 0}, [131] = {.lex_state = 0}, [132] = {.lex_state = 0}, - [133] = {.lex_state = 0}, - [134] = {.lex_state = 1}, + [133] = {.lex_state = 1}, + [134] = {.lex_state = 0}, [135] = {.lex_state = 0}, [136] = {.lex_state = 0}, [137] = {.lex_state = 0}, [138] = {.lex_state = 0}, - [139] = {.lex_state = 0}, + [139] = {.lex_state = 4}, [140] = {.lex_state = 0}, [141] = {.lex_state = 0}, [142] = {.lex_state = 0}, @@ -1894,28 +1893,27 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [153] = {.lex_state = 0}, [154] = {.lex_state = 0}, [155] = {.lex_state = 0}, - [156] = {.lex_state = 4}, - [157] = {.lex_state = 0}, + [156] = {.lex_state = 0}, + [157] = {.lex_state = 4}, [158] = {.lex_state = 0}, [159] = {.lex_state = 0}, - [160] = {.lex_state = 6}, - [161] = {.lex_state = 0}, - [162] = {.lex_state = 0}, + [160] = {.lex_state = 0}, + [161] = {.lex_state = 4}, + [162] = {.lex_state = 4}, [163] = {.lex_state = 0}, - [164] = {.lex_state = 0}, + [164] = {.lex_state = 4}, [165] = {.lex_state = 0}, - [166] = {.lex_state = 4}, - [167] = {.lex_state = 0}, - [168] = {.lex_state = 4}, + [166] = {.lex_state = 0}, + [167] = {.lex_state = 4}, + [168] = {.lex_state = 0}, [169] = {.lex_state = 0}, - [170] = {.lex_state = 4}, - [171] = {.lex_state = 4}, - [172] = {.lex_state = 4}, + [170] = {.lex_state = 0}, + [171] = {.lex_state = 5}, + [172] = {.lex_state = 0}, [173] = {.lex_state = 0}, [174] = {.lex_state = 0}, - [175] = {.lex_state = 5}, - [176] = {.lex_state = 0}, - [177] = {.lex_state = 4}, + [175] = {.lex_state = 4}, + [176] = {.lex_state = 6}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -1993,31 +1991,31 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_in] = ACTIONS(1), }, [1] = { - [sym_source_file] = STATE(161), - [sym_base_ten] = STATE(153), - [sym_octal] = STATE(153), - [sym_hex] = STATE(153), - [sym_binary] = STATE(153), - [sym_integer] = STATE(155), - [sym_signed_integer] = STATE(32), - [sym_unsigned_integer] = STATE(32), + [sym_source_file] = STATE(169), + [sym_base_ten] = STATE(145), + [sym_octal] = STATE(145), + [sym_hex] = STATE(145), + [sym_binary] = STATE(145), + [sym_integer] = STATE(154), + [sym_signed_integer] = STATE(35), + [sym_unsigned_integer] = STATE(35), [sym_number] = STATE(11), [sym__float] = STATE(91), - [sym_scalar] = STATE(32), - [sym_boolean] = STATE(32), - [sym_function_call] = STATE(32), - [sym_method_call] = STATE(32), - [sym_expression] = STATE(116), - [sym_unary_expression] = STATE(32), - [sym_binary_expression] = STATE(32), - [sym_if] = STATE(32), + [sym_scalar] = STATE(35), + [sym_boolean] = STATE(35), + [sym_function_call] = STATE(35), + [sym_method_call] = STATE(35), + [sym_expression] = STATE(114), + [sym_unary_expression] = STATE(35), + [sym_binary_expression] = STATE(35), + [sym_if] = STATE(35), [sym_path] = STATE(92), - [sym_parenthesis] = STATE(32), - [sym_list] = STATE(32), + [sym_parenthesis] = STATE(35), + [sym_list] = STATE(35), [sym_struct_definition] = STATE(92), - [sym_dictionary_construction] = STATE(32), - [sym_procedural_block] = STATE(32), - [sym_closure_definition] = STATE(32), + [sym_dictionary_construction] = STATE(35), + [sym_procedural_block] = STATE(35), + [sym_closure_definition] = STATE(35), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2302,8 +2300,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_for] = ACTIONS(39), }, [6] = { - [sym_closure_captured_variables] = STATE(177), - [sym_assignment_operator] = STATE(59), + [sym_closure_captured_variables] = STATE(175), + [sym_assignment_operator] = STATE(60), [sym_identifier] = ACTIONS(48), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2341,25 +2339,25 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_DOT_DOT_EQ] = ACTIONS(50), [anon_sym_if] = ACTIONS(48), [anon_sym_LPAREN] = ACTIONS(50), - [anon_sym_LBRACK] = ACTIONS(50), - [anon_sym_EQ] = ACTIONS(52), + [anon_sym_LBRACK] = ACTIONS(52), + [anon_sym_EQ] = ACTIONS(54), [anon_sym_LBRACE] = ACTIONS(50), [anon_sym_RBRACE] = ACTIONS(50), [anon_sym_SEMI] = ACTIONS(50), - [anon_sym_AMP_EQ] = ACTIONS(54), - [anon_sym_PIPE_EQ] = ACTIONS(54), - [anon_sym_CARET_EQ] = ACTIONS(54), - [anon_sym_AMP_AMP_EQ] = ACTIONS(54), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(54), - [anon_sym_CARET_CARET_EQ] = ACTIONS(54), - [anon_sym_PLUS_EQ] = ACTIONS(54), - [anon_sym_DASH_EQ] = ACTIONS(54), - [anon_sym_STAR_STAR_EQ] = ACTIONS(54), - [anon_sym_STAR_EQ] = ACTIONS(54), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(54), - [anon_sym_SLASH_EQ] = ACTIONS(54), - [anon_sym_LT_LT_EQ] = ACTIONS(54), - [anon_sym_GT_GT_EQ] = ACTIONS(54), + [anon_sym_AMP_EQ] = ACTIONS(56), + [anon_sym_PIPE_EQ] = ACTIONS(56), + [anon_sym_CARET_EQ] = ACTIONS(56), + [anon_sym_AMP_AMP_EQ] = ACTIONS(56), + [anon_sym_PIPE_PIPE_EQ] = ACTIONS(56), + [anon_sym_CARET_CARET_EQ] = ACTIONS(56), + [anon_sym_PLUS_EQ] = ACTIONS(56), + [anon_sym_DASH_EQ] = ACTIONS(56), + [anon_sym_STAR_STAR_EQ] = ACTIONS(56), + [anon_sym_STAR_EQ] = ACTIONS(56), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(56), + [anon_sym_SLASH_EQ] = ACTIONS(56), + [anon_sym_LT_LT_EQ] = ACTIONS(56), + [anon_sym_GT_GT_EQ] = ACTIONS(56), [anon_sym_let] = ACTIONS(48), [anon_sym_for] = ACTIONS(48), }, @@ -2385,25 +2383,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, + ACTIONS(58), 1, aux_sym_base_ten_token1, - ACTIONS(60), 1, - anon_sym_RBRACE, ACTIONS(62), 1, - anon_sym_let, + anon_sym_RBRACE, ACTIONS(64), 1, + anon_sym_let, + ACTIONS(66), 1, anon_sym_for, STATE(6), 1, sym_path, STATE(11), 1, sym_number, - STATE(41), 1, + STATE(42), 1, sym__float, STATE(45), 1, sym_expression, STATE(46), 1, sym_struct_definition, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2417,21 +2415,21 @@ static const uint16_t ts_small_parse_table[] = { STATE(8), 2, sym_statement, aux_sym_procedural_block_repeat1, - ACTIONS(58), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(119), 4, + STATE(116), 4, sym_closed_expression, sym_let, sym_assign, sym_for, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2465,25 +2463,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, + ACTIONS(58), 1, aux_sym_base_ten_token1, - ACTIONS(62), 1, - anon_sym_let, ACTIONS(64), 1, - anon_sym_for, + anon_sym_let, ACTIONS(66), 1, + anon_sym_for, + ACTIONS(68), 1, anon_sym_RBRACE, STATE(6), 1, sym_path, STATE(11), 1, sym_number, - STATE(41), 1, + STATE(42), 1, sym__float, STATE(45), 1, sym_expression, STATE(46), 1, sym_struct_definition, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2497,21 +2495,21 @@ static const uint16_t ts_small_parse_table[] = { STATE(9), 2, sym_statement, aux_sym_procedural_block_repeat1, - ACTIONS(58), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(119), 4, + STATE(116), 4, sym_closed_expression, sym_let, sym_assign, sym_for, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2527,71 +2525,71 @@ static const uint16_t ts_small_parse_table[] = { sym_procedural_block, sym_closure_definition, [214] = 27, - ACTIONS(68), 1, + ACTIONS(70), 1, sym_identifier, - ACTIONS(74), 1, + ACTIONS(76), 1, sym_default, - ACTIONS(77), 1, + ACTIONS(79), 1, aux_sym_base_ten_token1, - ACTIONS(80), 1, + ACTIONS(82), 1, aux_sym_octal_token1, - ACTIONS(83), 1, + ACTIONS(85), 1, aux_sym_hex_token1, - ACTIONS(86), 1, + ACTIONS(88), 1, aux_sym_binary_token1, - ACTIONS(95), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(98), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(101), 1, + ACTIONS(103), 1, anon_sym_LBRACK, - ACTIONS(104), 1, + ACTIONS(106), 1, anon_sym_LBRACE, - ACTIONS(107), 1, - anon_sym_RBRACE, ACTIONS(109), 1, + anon_sym_RBRACE, + ACTIONS(111), 1, anon_sym_let, - ACTIONS(112), 1, + ACTIONS(114), 1, anon_sym_for, STATE(6), 1, sym_path, STATE(11), 1, sym_number, - STATE(41), 1, + STATE(42), 1, sym__float, STATE(45), 1, sym_expression, STATE(46), 1, sym_struct_definition, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(71), 2, + ACTIONS(73), 2, sym_string, sym_void, - ACTIONS(89), 2, + ACTIONS(91), 2, sym_true, sym_false, STATE(9), 2, sym_statement, aux_sym_procedural_block_repeat1, - ACTIONS(92), 3, + ACTIONS(94), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(119), 4, + STATE(116), 4, sym_closed_expression, sym_let, sym_assign, sym_for, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2625,29 +2623,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(115), 1, - sym_identifier, ACTIONS(117), 1, - anon_sym_RPAREN, + sym_identifier, ACTIONS(119), 1, - anon_sym_COMMA, + anon_sym_RPAREN, ACTIONS(121), 1, + anon_sym_COMMA, + ACTIONS(123), 1, sym_varadic_dots, STATE(11), 1, sym_number, STATE(91), 1, sym__float, - STATE(115), 1, + STATE(113), 1, sym_expression, STATE(124), 1, aux_sym_struct_definition_repeat1, - STATE(138), 1, + STATE(136), 1, sym_dictionary_member_assignment, - STATE(154), 1, + STATE(143), 1, sym_struct_member, - STATE(155), 1, + STATE(154), 1, sym_integer, - STATE(162), 1, + STATE(168), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, @@ -2665,12 +2663,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2686,12 +2684,12 @@ static const uint16_t ts_small_parse_table[] = { sym_procedural_block, sym_closure_definition, [428] = 4, - ACTIONS(127), 1, + ACTIONS(129), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(125), 17, + ACTIONS(127), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2709,7 +2707,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(123), 30, + ACTIONS(125), 30, ts_builtin_sym_end, sym_string, sym_void, @@ -2741,12 +2739,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_SEMI, [487] = 4, - ACTIONS(133), 1, + ACTIONS(135), 1, anon_sym_else, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(131), 17, + ACTIONS(133), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2764,7 +2762,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(129), 29, + ACTIONS(131), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -2795,16 +2793,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_SEMI, [545] = 6, - ACTIONS(139), 1, - anon_sym_COLON, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 17, + ACTIONS(139), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2822,7 +2820,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(135), 27, + ACTIONS(137), 27, ts_builtin_sym_end, sym_string, sym_void, @@ -2854,7 +2852,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(145), 17, + ACTIONS(147), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2869,17 +2867,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_else, anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(143), 30, + ACTIONS(145), 29, ts_builtin_sym_end, sym_string, sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -2907,7 +2905,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(149), 18, + ACTIONS(151), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2926,7 +2924,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(147), 29, + ACTIONS(149), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -2960,7 +2958,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(153), 18, + ACTIONS(155), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -2975,17 +2973,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - anon_sym_else, anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(151), 29, + ACTIONS(153), 30, ts_builtin_sym_end, sym_string, sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -3009,17 +3007,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [775] = 6, - ACTIONS(139), 1, - anon_sym_COLON, - ACTIONS(141), 1, - anon_sym_LPAREN, - STATE(22), 1, + [775] = 4, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 17, + ACTIONS(159), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3037,13 +3031,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(155), 27, + ACTIONS(157), 29, ts_builtin_sym_end, sym_string, sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -3058,6 +3053,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_LBRACK, anon_sym_COMMA, @@ -3065,11 +3061,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [837] = 3, + [833] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(161), 17, + ACTIONS(163), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3087,7 +3083,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(159), 30, + ACTIONS(161), 30, ts_builtin_sym_end, sym_string, sym_void, @@ -3118,11 +3114,67 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [893] = 3, + [889] = 6, + ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, + anon_sym_LPAREN, + STATE(23), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(165), 17, + ACTIONS(167), 17, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_EQ, + anon_sym_let, + anon_sym_for, + ACTIONS(165), 27, + ts_builtin_sym_end, + sym_string, + sym_void, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_SEMI, + [951] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(171), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3140,7 +3192,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(163), 29, + ACTIONS(169), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3170,11 +3222,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [948] = 3, + [1006] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(169), 17, + ACTIONS(175), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3192,7 +3244,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(167), 29, + ACTIONS(173), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3222,11 +3274,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1003] = 3, + [1061] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(173), 17, + ACTIONS(179), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3244,7 +3296,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(171), 29, + ACTIONS(177), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3274,11 +3326,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1058] = 3, + [1116] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(177), 17, + ACTIONS(183), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3296,7 +3348,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(175), 29, + ACTIONS(181), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3326,11 +3378,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1113] = 3, + [1171] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(181), 17, + ACTIONS(187), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3348,7 +3400,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(179), 29, + ACTIONS(185), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3378,11 +3430,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1168] = 3, + [1226] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(185), 17, + ACTIONS(191), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3400,7 +3452,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(183), 29, + ACTIONS(189), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3430,11 +3482,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1223] = 3, + [1281] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 17, + ACTIONS(195), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3452,7 +3504,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(187), 29, + ACTIONS(193), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3482,11 +3534,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1278] = 3, + [1336] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(193), 17, + ACTIONS(199), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3504,7 +3556,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(191), 29, + ACTIONS(197), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3534,11 +3586,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1333] = 3, + [1391] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(197), 17, + ACTIONS(203), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3556,7 +3608,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(195), 29, + ACTIONS(201), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3586,11 +3638,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1388] = 3, + [1446] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(201), 17, + ACTIONS(207), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3608,7 +3660,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(199), 29, + ACTIONS(205), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3638,11 +3690,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1443] = 3, + [1501] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(205), 17, + ACTIONS(211), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3660,7 +3712,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(203), 29, + ACTIONS(209), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3690,11 +3742,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1498] = 3, + [1556] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(209), 17, + ACTIONS(215), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3712,7 +3764,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(207), 29, + ACTIONS(213), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3742,11 +3794,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1553] = 3, + [1611] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(213), 17, + ACTIONS(219), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3764,7 +3816,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(211), 29, + ACTIONS(217), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3794,11 +3846,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1608] = 3, + [1666] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(48), 17, + ACTIONS(223), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3816,7 +3868,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(50), 29, + ACTIONS(221), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3846,11 +3898,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1663] = 3, + [1721] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(217), 17, + ACTIONS(227), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3868,7 +3920,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(215), 29, + ACTIONS(225), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3898,11 +3950,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1718] = 3, + [1776] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(221), 17, + ACTIONS(48), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3920,7 +3972,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(219), 29, + ACTIONS(50), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -3950,11 +4002,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1773] = 3, + [1831] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(225), 17, + ACTIONS(231), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -3972,7 +4024,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(223), 29, + ACTIONS(229), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -4002,11 +4054,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1828] = 3, + [1886] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(229), 17, + ACTIONS(235), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4024,7 +4076,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(227), 29, + ACTIONS(233), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -4054,11 +4106,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1883] = 3, + [1941] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(233), 17, + ACTIONS(239), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4076,7 +4128,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(231), 29, + ACTIONS(237), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -4106,11 +4158,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1938] = 3, + [1996] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(237), 17, + ACTIONS(243), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4128,7 +4180,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ, anon_sym_let, anon_sym_for, - ACTIONS(235), 29, + ACTIONS(241), 29, ts_builtin_sym_end, sym_string, sym_void, @@ -4158,14 +4210,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [1993] = 4, + [2051] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(239), 2, + ACTIONS(245), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(145), 17, + ACTIONS(155), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4183,7 +4235,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(143), 26, + ACTIONS(153), 26, sym_string, sym_void, aux_sym_octal_token1, @@ -4210,61 +4262,61 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2049] = 23, - ACTIONS(241), 1, - sym_identifier, + [2107] = 23, ACTIONS(247), 1, + sym_identifier, + ACTIONS(253), 1, sym_default, - ACTIONS(250), 1, + ACTIONS(256), 1, aux_sym_base_ten_token1, - ACTIONS(253), 1, + ACTIONS(259), 1, aux_sym_octal_token1, - ACTIONS(256), 1, + ACTIONS(262), 1, aux_sym_hex_token1, - ACTIONS(259), 1, + ACTIONS(265), 1, aux_sym_binary_token1, - ACTIONS(268), 1, + ACTIONS(274), 1, anon_sym_if, - ACTIONS(271), 1, + ACTIONS(277), 1, anon_sym_LPAREN, - ACTIONS(274), 1, + ACTIONS(280), 1, anon_sym_LBRACK, - ACTIONS(277), 1, + ACTIONS(283), 1, anon_sym_RBRACK, - ACTIONS(279), 1, + ACTIONS(285), 1, anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(40), 1, + STATE(41), 1, aux_sym_list_repeat1, STATE(91), 1, sym__float, - STATE(112), 1, + STATE(115), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(244), 2, + ACTIONS(250), 2, sym_string, sym_void, - ACTIONS(262), 2, + ACTIONS(268), 2, sym_true, sym_false, STATE(92), 2, sym_path, sym_struct_definition, - ACTIONS(265), 3, + ACTIONS(271), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4279,15 +4331,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2141] = 5, - ACTIONS(286), 1, + [2199] = 5, + ACTIONS(292), 1, sym_unit_quote, - STATE(21), 1, + STATE(22), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(282), 16, + ACTIONS(288), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4304,7 +4356,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(284), 25, + ACTIONS(290), 25, sym_string, sym_void, aux_sym_octal_token1, @@ -4330,7 +4382,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2197] = 23, + [2255] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -4351,17 +4403,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(288), 1, + ACTIONS(294), 1, anon_sym_RBRACK, STATE(11), 1, sym_number, - STATE(40), 1, + STATE(41), 1, aux_sym_list_repeat1, STATE(91), 1, sym__float, - STATE(110), 1, + STATE(107), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4379,12 +4431,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4399,7 +4451,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2289] = 23, + [2347] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -4420,17 +4472,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(290), 1, + ACTIONS(296), 1, anon_sym_RBRACK, STATE(11), 1, sym_number, - STATE(42), 1, + STATE(43), 1, aux_sym_list_repeat1, STATE(91), 1, sym__float, STATE(108), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4448,12 +4500,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4468,119 +4520,54 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [2381] = 20, - ACTIONS(139), 1, - anon_sym_COLON, + [2439] = 21, ACTIONS(141), 1, - anon_sym_LPAREN, - ACTIONS(298), 1, - anon_sym_STAR_STAR, - ACTIONS(302), 1, - anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, - anon_sym_PIPE, - ACTIONS(310), 1, - anon_sym_CARET, - ACTIONS(316), 1, - anon_sym_AMP_AMP, - ACTIONS(318), 1, - anon_sym_PIPE_PIPE, - ACTIONS(320), 1, - anon_sym_DOT_DOT, - ACTIONS(322), 1, - anon_sym_DOT_DOT_EQ, - STATE(22), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(304), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(312), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(314), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(292), 9, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(294), 9, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2466] = 21, - ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(141), 1, + ACTIONS(143), 1, anon_sym_LPAREN, - ACTIONS(298), 1, + ACTIONS(304), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, + ACTIONS(312), 1, anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(314), 1, anon_sym_PIPE, - ACTIONS(310), 1, - anon_sym_CARET, ACTIONS(316), 1, + anon_sym_CARET, + ACTIONS(322), 1, anon_sym_AMP_AMP, - ACTIONS(318), 1, + ACTIONS(324), 1, anon_sym_PIPE_PIPE, - ACTIONS(320), 1, + ACTIONS(326), 1, anon_sym_DOT_DOT, - ACTIONS(322), 1, - anon_sym_DOT_DOT_EQ, ACTIONS(328), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(330), 1, anon_sym_SEMI, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, + ACTIONS(302), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(306), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(310), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(312), 2, + ACTIONS(318), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(314), 4, + ACTIONS(320), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(326), 8, + ACTIONS(300), 8, sym_string, sym_void, aux_sym_octal_token1, @@ -4589,7 +4576,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - ACTIONS(324), 9, + ACTIONS(298), 9, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4599,8 +4586,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - [2553] = 4, - STATE(177), 1, + [2526] = 5, + ACTIONS(52), 1, + anon_sym_LBRACK, + STATE(175), 1, sym_closure_captured_variables, ACTIONS(3), 2, sym_comment, @@ -4622,7 +4611,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(50), 25, + ACTIONS(50), 24, sym_string, sym_void, aux_sym_octal_token1, @@ -4644,28 +4633,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2606] = 9, - ACTIONS(139), 1, - anon_sym_COLON, + [2581] = 9, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, - ACTIONS(298), 1, + ACTIONS(304), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_SLASH_SLASH, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(300), 2, + ACTIONS(306), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(157), 14, + ACTIONS(167), 14, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4680,7 +4668,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(155), 21, + ACTIONS(165), 21, sym_string, sym_void, aux_sym_octal_token1, @@ -4702,19 +4690,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2669] = 7, - ACTIONS(139), 1, - anon_sym_COLON, + [2644] = 7, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, - ACTIONS(298), 1, + ACTIONS(304), 1, anon_sym_STAR_STAR, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 16, + ACTIONS(167), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4731,7 +4719,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(155), 22, + ACTIONS(165), 22, sym_string, sym_void, aux_sym_octal_token1, @@ -4754,27 +4742,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2728] = 10, - ACTIONS(139), 1, - anon_sym_COLON, + [2703] = 10, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, - ACTIONS(298), 1, + ACTIONS(304), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_SLASH_SLASH, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, + ACTIONS(302), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(306), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(157), 14, + ACTIONS(167), 14, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4789,7 +4777,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(155), 19, + ACTIONS(165), 19, sym_string, sym_void, aux_sym_octal_token1, @@ -4809,30 +4797,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2793] = 11, - ACTIONS(139), 1, - anon_sym_COLON, + [2768] = 11, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, - ACTIONS(298), 1, + ACTIONS(304), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_SLASH_SLASH, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, + ACTIONS(302), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(306), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(310), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(157), 14, + ACTIONS(167), 14, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4847,7 +4835,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(155), 17, + ACTIONS(165), 17, sym_string, sym_void, aux_sym_octal_token1, @@ -4865,34 +4853,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2860] = 13, - ACTIONS(139), 1, - anon_sym_COLON, + [2835] = 13, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, - ACTIONS(298), 1, + ACTIONS(304), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, + ACTIONS(312), 1, anon_sym_AMP, - ACTIONS(310), 1, + ACTIONS(316), 1, anon_sym_CARET, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, + ACTIONS(302), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(306), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(310), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(157), 13, + ACTIONS(167), 13, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4906,7 +4894,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(155), 16, + ACTIONS(165), 16, sym_string, sym_void, aux_sym_octal_token1, @@ -4923,32 +4911,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [2931] = 12, - ACTIONS(139), 1, - anon_sym_COLON, + [2906] = 12, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, - ACTIONS(298), 1, + ACTIONS(304), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, + ACTIONS(312), 1, anon_sym_AMP, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, + ACTIONS(302), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(306), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(310), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(157), 13, + ACTIONS(167), 13, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -4962,7 +4950,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(155), 17, + ACTIONS(165), 17, sym_string, sym_void, aux_sym_octal_token1, @@ -4980,36 +4968,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [3000] = 14, - ACTIONS(139), 1, - anon_sym_COLON, + [2975] = 14, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, - ACTIONS(298), 1, + ACTIONS(304), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, + ACTIONS(312), 1, anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(314), 1, anon_sym_PIPE, - ACTIONS(310), 1, + ACTIONS(316), 1, anon_sym_CARET, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, + ACTIONS(302), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(306), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(310), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(157), 12, + ACTIONS(167), 12, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5022,7 +5010,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(155), 16, + ACTIONS(165), 16, sym_string, sym_void, aux_sym_octal_token1, @@ -5039,44 +5027,44 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [3073] = 16, - ACTIONS(139), 1, - anon_sym_COLON, + [3048] = 16, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, - ACTIONS(298), 1, + ACTIONS(304), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, + ACTIONS(312), 1, anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(314), 1, anon_sym_PIPE, - ACTIONS(310), 1, + ACTIONS(316), 1, anon_sym_CARET, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, + ACTIONS(302), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(306), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(310), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(312), 2, + ACTIONS(318), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(314), 4, + ACTIONS(320), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(157), 10, + ACTIONS(167), 10, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5087,7 +5075,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(155), 12, + ACTIONS(165), 12, sym_string, sym_void, aux_sym_octal_token1, @@ -5100,46 +5088,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [3150] = 17, - ACTIONS(139), 1, - anon_sym_COLON, + [3125] = 17, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, - ACTIONS(298), 1, + ACTIONS(304), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, + ACTIONS(312), 1, anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(314), 1, anon_sym_PIPE, - ACTIONS(310), 1, - anon_sym_CARET, ACTIONS(316), 1, + anon_sym_CARET, + ACTIONS(322), 1, anon_sym_AMP_AMP, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, + ACTIONS(302), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(306), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(310), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(312), 2, + ACTIONS(318), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(314), 4, + ACTIONS(320), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(157), 10, + ACTIONS(167), 10, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5150,7 +5138,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(155), 11, + ACTIONS(165), 11, sym_string, sym_void, aux_sym_octal_token1, @@ -5162,48 +5150,48 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - [3229] = 18, - ACTIONS(139), 1, - anon_sym_COLON, + [3204] = 18, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, - ACTIONS(298), 1, + ACTIONS(304), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, + ACTIONS(312), 1, anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(314), 1, anon_sym_PIPE, - ACTIONS(310), 1, - anon_sym_CARET, ACTIONS(316), 1, + anon_sym_CARET, + ACTIONS(322), 1, anon_sym_AMP_AMP, - ACTIONS(318), 1, + ACTIONS(324), 1, anon_sym_PIPE_PIPE, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, + ACTIONS(302), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(306), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(310), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(312), 2, + ACTIONS(318), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(314), 4, + ACTIONS(320), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(155), 10, + ACTIONS(165), 10, sym_string, sym_void, aux_sym_octal_token1, @@ -5214,7 +5202,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, anon_sym_RBRACE, anon_sym_SEMI, - ACTIONS(157), 10, + ACTIONS(167), 10, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5225,7 +5213,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - [3310] = 21, + [3285] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5250,9 +5238,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(91), 1, sym__float, - STATE(93), 1, + STATE(111), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5270,12 +5258,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5290,7 +5278,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3396] = 21, + [3371] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5313,11 +5301,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, - STATE(13), 1, - sym_expression, STATE(91), 1, sym__float, - STATE(155), 1, + STATE(104), 1, + sym_expression, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5335,12 +5323,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5355,7 +5343,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3482] = 21, + [3457] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5378,11 +5366,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, + STATE(13), 1, + sym_expression, STATE(91), 1, sym__float, - STATE(114), 1, - sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5400,12 +5388,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5420,7 +5408,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3568] = 21, + [3543] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5445,9 +5433,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(91), 1, sym__float, - STATE(111), 1, + STATE(112), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5465,12 +5453,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5485,7 +5473,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3654] = 21, + [3629] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5510,9 +5498,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(91), 1, sym__float, - STATE(107), 1, + STATE(106), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5530,12 +5518,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5550,7 +5538,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3740] = 21, + [3715] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5575,9 +5563,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(91), 1, sym__float, - STATE(113), 1, + STATE(109), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5595,12 +5583,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5615,7 +5603,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3826] = 21, + [3801] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5640,9 +5628,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(91), 1, sym__float, - STATE(109), 1, + STATE(96), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5660,12 +5648,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5680,7 +5668,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3912] = 21, + [3887] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5705,9 +5693,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(91), 1, sym__float, - STATE(103), 1, + STATE(110), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5725,12 +5713,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5745,7 +5733,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [3998] = 21, + [3973] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5772,7 +5760,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(91), 1, sym__float, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5790,12 +5778,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5810,7 +5798,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4084] = 21, + [4059] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5833,11 +5821,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACE, STATE(11), 1, sym_number, + STATE(19), 1, + sym_expression, STATE(91), 1, sym__float, - STATE(102), 1, - sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5855,12 +5843,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5875,11 +5863,13 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4170] = 21, + [4145] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -5894,15 +5884,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, - aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(13), 1, - sym_expression, - STATE(41), 1, + STATE(91), 1, sym__float, - STATE(155), 1, + STATE(97), 1, + sym_expression, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5913,19 +5901,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(46), 2, + STATE(92), 2, sym_path, sym_struct_definition, - ACTIONS(58), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5940,13 +5928,11 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4256] = 21, + [4231] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -5961,13 +5947,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, + ACTIONS(58), 1, + aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(91), 1, - sym__float, - STATE(95), 1, + STATE(13), 1, sym_expression, - STATE(155), 1, + STATE(42), 1, + sym__float, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5978,19 +5966,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(46), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6005,11 +5993,13 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4342] = 21, + [4317] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6024,15 +6014,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, - aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(41), 1, + STATE(91), 1, sym__float, - STATE(47), 1, + STATE(98), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6043,19 +6031,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(46), 2, + STATE(92), 2, sym_path, sym_struct_definition, - ACTIONS(58), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6070,7 +6058,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4428] = 21, + [4403] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6089,15 +6077,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, + ACTIONS(58), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(17), 1, - sym_expression, - STATE(41), 1, + STATE(42), 1, sym__float, - STATE(155), 1, + STATE(47), 1, + sym_expression, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6111,16 +6099,16 @@ static const uint16_t ts_small_parse_table[] = { STATE(46), 2, sym_path, sym_struct_definition, - ACTIONS(58), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6135,7 +6123,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4514] = 21, + [4489] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6154,15 +6142,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, + ACTIONS(58), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(41), 1, - sym__float, - STATE(48), 1, + STATE(19), 1, sym_expression, - STATE(155), 1, + STATE(42), 1, + sym__float, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6176,16 +6164,16 @@ static const uint16_t ts_small_parse_table[] = { STATE(46), 2, sym_path, sym_struct_definition, - ACTIONS(58), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6200,7 +6188,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4600] = 21, + [4575] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6219,15 +6207,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, + ACTIONS(58), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(41), 1, + STATE(42), 1, sym__float, - STATE(49), 1, + STATE(48), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6241,16 +6229,16 @@ static const uint16_t ts_small_parse_table[] = { STATE(46), 2, sym_path, sym_struct_definition, - ACTIONS(58), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6265,7 +6253,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4686] = 21, + [4661] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6284,15 +6272,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, + ACTIONS(58), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(41), 1, + STATE(42), 1, sym__float, - STATE(50), 1, + STATE(49), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6306,16 +6294,16 @@ static const uint16_t ts_small_parse_table[] = { STATE(46), 2, sym_path, sym_struct_definition, - ACTIONS(58), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6330,7 +6318,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4772] = 21, + [4747] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6349,15 +6337,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, + ACTIONS(58), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(41), 1, + STATE(42), 1, sym__float, - STATE(51), 1, + STATE(50), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6371,16 +6359,16 @@ static const uint16_t ts_small_parse_table[] = { STATE(46), 2, sym_path, sym_struct_definition, - ACTIONS(58), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6395,7 +6383,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4858] = 21, + [4833] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6414,15 +6402,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, + ACTIONS(58), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(41), 1, + STATE(42), 1, sym__float, - STATE(52), 1, + STATE(51), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6436,16 +6424,16 @@ static const uint16_t ts_small_parse_table[] = { STATE(46), 2, sym_path, sym_struct_definition, - ACTIONS(58), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6460,7 +6448,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [4944] = 21, + [4919] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6479,15 +6467,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, + ACTIONS(58), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(41), 1, + STATE(42), 1, sym__float, - STATE(53), 1, + STATE(52), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6501,16 +6489,16 @@ static const uint16_t ts_small_parse_table[] = { STATE(46), 2, sym_path, sym_struct_definition, - ACTIONS(58), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6525,7 +6513,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5030] = 21, + [5005] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6544,15 +6532,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, + ACTIONS(58), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(41), 1, + STATE(42), 1, sym__float, - STATE(54), 1, + STATE(53), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6566,16 +6554,16 @@ static const uint16_t ts_small_parse_table[] = { STATE(46), 2, sym_path, sym_struct_definition, - ACTIONS(58), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6590,7 +6578,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5116] = 21, + [5091] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6609,15 +6597,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, + ACTIONS(58), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(41), 1, + STATE(42), 1, sym__float, - STATE(55), 1, + STATE(54), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6631,16 +6619,16 @@ static const uint16_t ts_small_parse_table[] = { STATE(46), 2, sym_path, sym_struct_definition, - ACTIONS(58), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6655,7 +6643,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5202] = 21, + [5177] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6674,15 +6662,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, + ACTIONS(58), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(41), 1, + STATE(42), 1, sym__float, - STATE(56), 1, + STATE(55), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6696,16 +6684,16 @@ static const uint16_t ts_small_parse_table[] = { STATE(46), 2, sym_path, sym_struct_definition, - ACTIONS(58), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6720,13 +6708,11 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5288] = 21, + [5263] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6741,13 +6727,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, + ACTIONS(58), 1, + aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(91), 1, + STATE(42), 1, sym__float, - STATE(94), 1, + STATE(56), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6758,19 +6746,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(46), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6785,7 +6773,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5374] = 21, + [5349] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6810,9 +6798,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(91), 1, sym__float, - STATE(101), 1, + STATE(99), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6830,12 +6818,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6850,7 +6838,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5460] = 21, + [5435] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6875,9 +6863,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(91), 1, sym__float, - STATE(97), 1, + STATE(100), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6895,12 +6883,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6915,7 +6903,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5546] = 21, + [5521] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6940,9 +6928,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(91), 1, sym__float, - STATE(98), 1, + STATE(101), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6960,12 +6948,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6980,7 +6968,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5632] = 21, + [5607] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -7005,9 +6993,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(91), 1, sym__float, - STATE(99), 1, + STATE(102), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7025,12 +7013,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7045,7 +7033,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5718] = 21, + [5693] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -7070,9 +7058,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(91), 1, sym__float, - STATE(100), 1, + STATE(93), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7090,12 +7078,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7110,7 +7098,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5804] = 21, + [5779] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -7135,9 +7123,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(91), 1, sym__float, - STATE(105), 1, + STATE(94), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7155,12 +7143,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7175,7 +7163,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5890] = 21, + [5865] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -7200,9 +7188,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(91), 1, sym__float, - STATE(106), 1, + STATE(95), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7220,12 +7208,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7240,7 +7228,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [5976] = 21, + [5951] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -7259,15 +7247,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(56), 1, + ACTIONS(58), 1, aux_sym_base_ten_token1, STATE(11), 1, sym_number, - STATE(41), 1, - sym__float, - STATE(44), 1, + STATE(17), 1, sym_expression, - STATE(155), 1, + STATE(42), 1, + sym__float, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7281,16 +7269,16 @@ static const uint16_t ts_small_parse_table[] = { STATE(46), 2, sym_path, sym_struct_definition, - ACTIONS(58), 3, + ACTIONS(60), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7305,7 +7293,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [6062] = 21, + [6037] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -7330,9 +7318,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(91), 1, sym__float, - STATE(96), 1, + STATE(105), 1, sym_expression, - STATE(155), 1, + STATE(154), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7350,12 +7338,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(153), 4, + STATE(145), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(32), 14, + STATE(35), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7370,14 +7358,14 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_procedural_block, sym_closure_definition, - [6148] = 4, + [6123] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(239), 2, + ACTIONS(245), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(145), 10, + ACTIONS(155), 10, sym_identifier, anon_sym_DOT, anon_sym_STAR, @@ -7388,7 +7376,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(143), 23, + ACTIONS(153), 23, ts_builtin_sym_end, sym_unit_quote, anon_sym_COLON, @@ -7412,16 +7400,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6194] = 5, - STATE(21), 1, + [6169] = 5, + STATE(22), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(286), 2, + ACTIONS(292), 2, sym_identifier, sym_unit_quote, - ACTIONS(282), 8, + ACTIONS(288), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -7430,7 +7418,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(284), 22, + ACTIONS(290), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -7453,10 +7441,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6240] = 5, - ACTIONS(330), 1, + [6215] = 5, + ACTIONS(52), 1, anon_sym_LBRACK, - STATE(170), 1, + STATE(167), 1, sym_closure_captured_variables, ACTIONS(3), 2, sym_comment, @@ -7493,13 +7481,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6285] = 20, - ACTIONS(139), 1, - anon_sym_COLON, + [6260] = 16, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, - ACTIONS(292), 1, - anon_sym_EQ, ACTIONS(334), 1, anon_sym_STAR_STAR, ACTIONS(338), 1, @@ -7510,19 +7496,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, ACTIONS(346), 1, anon_sym_CARET, - ACTIONS(352), 1, - anon_sym_AMP_AMP, - ACTIONS(354), 1, - anon_sym_PIPE_PIPE, - ACTIONS(356), 1, - anon_sym_DOT_DOT, - ACTIONS(358), 1, - anon_sym_DOT_DOT_EQ, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, + ACTIONS(167), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, @@ -7540,17 +7521,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(294), 6, + ACTIONS(165), 9, ts_builtin_sym_end, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6359] = 13, - ACTIONS(139), 1, - anon_sym_COLON, + [6326] = 17, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, @@ -7558,13 +7542,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SLASH_SLASH, ACTIONS(342), 1, anon_sym_AMP, + ACTIONS(344), 1, + anon_sym_PIPE, ACTIONS(346), 1, anon_sym_CARET, - STATE(22), 1, + ACTIONS(352), 1, + anon_sym_AMP_AMP, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, + ACTIONS(167), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, @@ -7574,19 +7565,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(157), 5, - anon_sym_PIPE, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(155), 13, - ts_builtin_sym_end, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(165), 8, + ts_builtin_sym_end, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_RPAREN, @@ -7594,20 +7582,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6419] = 11, - ACTIONS(139), 1, - anon_sym_COLON, + [6394] = 18, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, ACTIONS(338), 1, anon_sym_SLASH_SLASH, - STATE(22), 1, + ACTIONS(342), 1, + anon_sym_AMP, + ACTIONS(344), 1, + anon_sym_PIPE, + ACTIONS(346), 1, + anon_sym_CARET, + ACTIONS(352), 1, + anon_sym_AMP_AMP, + ACTIONS(354), 1, + anon_sym_PIPE_PIPE, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, + ACTIONS(167), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, @@ -7617,57 +7618,50 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(157), 6, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(155), 14, - ts_builtin_sym_end, - anon_sym_CARET, + ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, + ACTIONS(165), 7, + ts_builtin_sym_end, anon_sym_DOT_DOT_EQ, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6475] = 10, - ACTIONS(139), 1, - anon_sym_COLON, + [6464] = 9, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, ACTIONS(338), 1, anon_sym_SLASH_SLASH, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, - anon_sym_DASH, - anon_sym_PLUS, ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(157), 6, + ACTIONS(167), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(155), 16, + ACTIONS(165), 18, ts_builtin_sym_end, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -7683,42 +7677,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6529] = 14, - ACTIONS(139), 1, - anon_sym_COLON, + [6516] = 7, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, - anon_sym_SLASH_SLASH, - ACTIONS(342), 1, - anon_sym_AMP, - ACTIONS(344), 1, - anon_sym_PIPE, - ACTIONS(346), 1, - anon_sym_CARET, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(167), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(157), 4, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(155), 13, + ACTIONS(165), 19, ts_builtin_sym_end, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -7731,48 +7718,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6591] = 16, - ACTIONS(139), 1, - anon_sym_COLON, + [6564] = 10, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, - anon_sym_AMP, - ACTIONS(344), 1, - anon_sym_PIPE, - ACTIONS(346), 1, - anon_sym_CARET, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(348), 2, + ACTIONS(167), 6, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(350), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(165), 16, + ts_builtin_sym_end, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(155), 9, - ts_builtin_sym_end, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, @@ -7781,31 +7762,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6657] = 17, - ACTIONS(139), 1, - anon_sym_COLON, + [6618] = 11, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, ACTIONS(338), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, - anon_sym_AMP, - ACTIONS(344), 1, - anon_sym_PIPE, - ACTIONS(346), 1, - anon_sym_CARET, - ACTIONS(352), 1, - anon_sym_AMP_AMP, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, @@ -7815,16 +7785,21 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(348), 2, + ACTIONS(167), 6, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(350), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(165), 14, + ts_builtin_sym_end, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(155), 8, - ts_builtin_sym_end, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_RPAREN, @@ -7832,10 +7807,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6725] = 18, - ACTIONS(139), 1, - anon_sym_COLON, + [6674] = 13, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, @@ -7843,22 +7818,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SLASH_SLASH, ACTIONS(342), 1, anon_sym_AMP, - ACTIONS(344), 1, - anon_sym_PIPE, ACTIONS(346), 1, anon_sym_CARET, - ACTIONS(352), 1, - anon_sym_AMP_AMP, - ACTIONS(354), 1, - anon_sym_PIPE_PIPE, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, ACTIONS(332), 2, anon_sym_DASH, anon_sym_PLUS, @@ -7868,26 +7834,30 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(348), 2, + ACTIONS(167), 5, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(350), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(165), 13, + ts_builtin_sym_end, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(155), 7, - ts_builtin_sym_end, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6795] = 12, - ACTIONS(139), 1, - anon_sym_COLON, + [6734] = 12, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, @@ -7895,7 +7865,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SLASH_SLASH, ACTIONS(342), 1, anon_sym_AMP, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -7909,13 +7879,13 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(340), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(157), 5, + ACTIONS(167), 5, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(155), 14, + ACTIONS(165), 14, ts_builtin_sym_end, anon_sym_CARET, anon_sym_GT_EQ, @@ -7930,78 +7900,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6853] = 7, - ACTIONS(139), 1, - anon_sym_COLON, + [6792] = 14, ACTIONS(141), 1, - anon_sym_LPAREN, - ACTIONS(334), 1, - anon_sym_STAR_STAR, - STATE(22), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 8, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(155), 19, - ts_builtin_sym_end, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [6901] = 9, - ACTIONS(139), 1, anon_sym_COLON, - ACTIONS(141), 1, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, ACTIONS(338), 1, anon_sym_SLASH_SLASH, - STATE(22), 1, + ACTIONS(342), 1, + anon_sym_AMP, + ACTIONS(344), 1, + anon_sym_PIPE, + ACTIONS(346), 1, + anon_sym_CARET, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, + ACTIONS(332), 2, + anon_sym_DASH, + anon_sym_PLUS, ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(157), 6, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(340), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(167), 4, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(155), 18, + ACTIONS(165), 13, ts_builtin_sym_end, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8014,16 +7948,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_LBRACE, anon_sym_SEMI, - [6953] = 8, + [6854] = 8, ACTIONS(35), 1, anon_sym_DOT, - ACTIONS(360), 1, + ACTIONS(356), 1, anon_sym_COLON, - ACTIONS(362), 1, + ACTIONS(358), 1, anon_sym_EQ, STATE(4), 1, aux_sym_path_repeat1, - STATE(135), 1, + STATE(129), 1, sym_declaration_type, ACTIONS(3), 2, sym_comment, @@ -8054,10 +7988,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_LBRACK, - [7001] = 20, - ACTIONS(139), 1, - anon_sym_COLON, + [6902] = 20, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, @@ -8073,13 +8007,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(356), 1, + ACTIONS(360), 1, anon_sym_DOT_DOT, - ACTIONS(358), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT_EQ, ACTIONS(366), 1, anon_sym_EQ, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -8104,10 +8038,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7071] = 19, - ACTIONS(139), 1, - anon_sym_COLON, + [6972] = 19, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, @@ -8123,11 +8057,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(356), 1, + ACTIONS(360), 1, anon_sym_DOT_DOT, - ACTIONS(358), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT_EQ, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -8152,10 +8086,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7138] = 19, - ACTIONS(139), 1, - anon_sym_COLON, + [7039] = 20, + ACTIONS(29), 1, + anon_sym_LBRACE, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, @@ -8171,11 +8107,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(356), 1, + ACTIONS(360), 1, anon_sym_DOT_DOT, - ACTIONS(358), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT_EQ, - STATE(22), 1, + STATE(12), 1, + sym_procedural_block, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -8192,21 +8130,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(370), 2, - anon_sym_RPAREN, - anon_sym_COMMA, ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7205] = 20, - ACTIONS(139), 1, - anon_sym_COLON, + [7108] = 20, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, - ACTIONS(288), 1, - anon_sym_RBRACK, ACTIONS(334), 1, anon_sym_STAR_STAR, ACTIONS(338), 1, @@ -8221,13 +8154,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(356), 1, + ACTIONS(360), 1, anon_sym_DOT_DOT, - ACTIONS(358), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(372), 1, + ACTIONS(370), 1, anon_sym_COMMA, - STATE(22), 1, + ACTIONS(372), 1, + anon_sym_RBRACK, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -8249,13 +8184,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7274] = 20, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(139), 1, - anon_sym_COLON, + [7177] = 20, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, + ACTIONS(294), 1, + anon_sym_RBRACK, ACTIONS(334), 1, anon_sym_STAR_STAR, ACTIONS(338), 1, @@ -8270,14 +8205,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(356), 1, + ACTIONS(360), 1, anon_sym_DOT_DOT, - ACTIONS(358), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT_EQ, - STATE(22), 1, + ACTIONS(370), 1, + anon_sym_COMMA, + STATE(23), 1, sym_dictionary_construction, - STATE(120), 1, - sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -8298,10 +8233,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7343] = 20, - ACTIONS(139), 1, - anon_sym_COLON, + [7246] = 19, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, @@ -8317,15 +8252,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(356), 1, + ACTIONS(360), 1, anon_sym_DOT_DOT, - ACTIONS(358), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(372), 1, - anon_sym_COMMA, - ACTIONS(374), 1, - anon_sym_RBRACK, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -8342,17 +8273,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(348), 2, anon_sym_GT, anon_sym_LT, + ACTIONS(374), 2, + anon_sym_RPAREN, + anon_sym_COMMA, ACTIONS(350), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7412] = 20, + [7313] = 20, ACTIONS(29), 1, anon_sym_LBRACE, - ACTIONS(139), 1, - anon_sym_COLON, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, @@ -8368,14 +8302,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(356), 1, + ACTIONS(360), 1, anon_sym_DOT_DOT, - ACTIONS(358), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT_EQ, - STATE(12), 1, - sym_procedural_block, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, + STATE(120), 1, + sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -8396,10 +8330,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7481] = 19, - ACTIONS(139), 1, - anon_sym_COLON, + [7382] = 19, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, @@ -8415,13 +8349,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(356), 1, + ACTIONS(360), 1, anon_sym_DOT_DOT, - ACTIONS(358), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(372), 1, - anon_sym_COMMA, - STATE(22), 1, + ACTIONS(376), 1, + anon_sym_SEMI, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -8443,10 +8377,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7547] = 19, - ACTIONS(139), 1, - anon_sym_COLON, + [7448] = 19, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, @@ -8462,13 +8396,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(356), 1, + ACTIONS(360), 1, anon_sym_DOT_DOT, - ACTIONS(358), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(376), 1, + ACTIONS(378), 1, anon_sym_SEMI, - STATE(22), 1, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -8490,10 +8424,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7613] = 19, - ACTIONS(139), 1, - anon_sym_COLON, + [7514] = 19, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, @@ -8509,13 +8443,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(356), 1, + ACTIONS(360), 1, anon_sym_DOT_DOT, - ACTIONS(358), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(378), 1, - anon_sym_SEMI, - STATE(22), 1, + ACTIONS(380), 1, + anon_sym_RPAREN, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -8537,10 +8471,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7679] = 19, - ACTIONS(139), 1, - anon_sym_COLON, + [7580] = 19, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, @@ -8556,13 +8490,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(356), 1, + ACTIONS(360), 1, anon_sym_DOT_DOT, - ACTIONS(358), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(380), 1, - anon_sym_RPAREN, - STATE(22), 1, + ACTIONS(382), 1, + ts_builtin_sym_end, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -8584,10 +8518,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7745] = 19, - ACTIONS(139), 1, - anon_sym_COLON, + [7646] = 19, ACTIONS(141), 1, + anon_sym_COLON, + ACTIONS(143), 1, anon_sym_LPAREN, ACTIONS(334), 1, anon_sym_STAR_STAR, @@ -8603,13 +8537,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(356), 1, + ACTIONS(360), 1, anon_sym_DOT_DOT, - ACTIONS(358), 1, + ACTIONS(362), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(382), 1, - ts_builtin_sym_end, - STATE(22), 1, + ACTIONS(370), 1, + anon_sym_COMMA, + STATE(23), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -8631,11 +8565,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7811] = 3, + [7712] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(384), 8, + ACTIONS(298), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8644,7 +8578,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(386), 12, + ACTIONS(300), 12, sym_string, sym_void, aux_sym_octal_token1, @@ -8657,11 +8591,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7840] = 3, + [7741] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(388), 8, + ACTIONS(384), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8670,7 +8604,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(390), 12, + ACTIONS(386), 12, sym_string, sym_void, aux_sym_octal_token1, @@ -8683,11 +8617,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7869] = 3, + [7770] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 8, + ACTIONS(388), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -8696,7 +8630,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_let, anon_sym_for, - ACTIONS(326), 12, + ACTIONS(390), 12, sym_string, sym_void, aux_sym_octal_token1, @@ -8709,7 +8643,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7898] = 3, + [7799] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -8735,7 +8669,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7927] = 3, + [7828] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -8761,7 +8695,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_LBRACE, anon_sym_RBRACE, - [7956] = 3, + [7857] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -8772,7 +8706,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, anon_sym_if, - ACTIONS(277), 12, + ACTIONS(283), 12, sym_string, sym_void, aux_sym_octal_token1, @@ -8785,7 +8719,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LBRACE, - [7983] = 3, + [7884] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -8808,39 +8742,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LBRACE, - [8009] = 7, + [7910] = 7, ACTIONS(121), 1, + anon_sym_COMMA, + ACTIONS(123), 1, sym_varadic_dots, ACTIONS(406), 1, sym_identifier, - ACTIONS(408), 1, - anon_sym_RPAREN, - STATE(128), 1, + STATE(124), 1, aux_sym_struct_definition_repeat1, - STATE(154), 1, + STATE(143), 1, sym_struct_member, - STATE(164), 1, + STATE(168), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8032] = 7, - ACTIONS(119), 1, - anon_sym_COMMA, - ACTIONS(121), 1, + [7933] = 7, + ACTIONS(123), 1, sym_varadic_dots, ACTIONS(406), 1, sym_identifier, - STATE(124), 1, + ACTIONS(408), 1, + anon_sym_RPAREN, + STATE(127), 1, aux_sym_struct_definition_repeat1, - STATE(154), 1, + STATE(143), 1, sym_struct_member, - STATE(162), 1, + STATE(166), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8055] = 5, + [7956] = 5, ACTIONS(410), 1, sym_identifier, ACTIONS(412), 1, @@ -8850,10 +8784,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(57), 2, + STATE(65), 2, sym_path, sym_struct_definition, - [8073] = 5, + [7974] = 5, ACTIONS(410), 1, sym_identifier, ACTIONS(414), 1, @@ -8866,12 +8800,12 @@ static const uint16_t ts_small_parse_table[] = { STATE(88), 2, sym_path, sym_struct_definition, - [8091] = 5, + [7992] = 5, ACTIONS(418), 1, sym_identifier, - STATE(128), 1, + STATE(127), 1, aux_sym_struct_definition_repeat1, - STATE(158), 1, + STATE(173), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, @@ -8879,57 +8813,56 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(421), 2, anon_sym_RPAREN, sym_varadic_dots, - [8109] = 4, - ACTIONS(117), 1, - anon_sym_RPAREN, + [8010] = 4, ACTIONS(423), 1, sym_identifier, - STATE(138), 1, - sym_dictionary_member_assignment, + ACTIONS(426), 1, + anon_sym_RBRACK, + STATE(128), 1, + aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8123] = 4, - ACTIONS(425), 1, - sym_identifier, - ACTIONS(427), 1, - anon_sym_RBRACK, - STATE(139), 1, - aux_sym_closure_captured_variables_repeat1, + [8024] = 3, + ACTIONS(430), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8137] = 4, - ACTIONS(423), 1, + ACTIONS(428), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [8036] = 4, + ACTIONS(432), 1, sym_identifier, - ACTIONS(429), 1, + ACTIONS(434), 1, anon_sym_RPAREN, - STATE(151), 1, + STATE(140), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8151] = 4, - ACTIONS(431), 1, - anon_sym_RPAREN, - ACTIONS(433), 1, - anon_sym_COMMA, - STATE(133), 1, - aux_sym_dictionary_construction_repeat1, + [8050] = 4, + ACTIONS(436), 1, + sym_identifier, + ACTIONS(438), 1, + anon_sym_RBRACK, + STATE(132), 1, + aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8165] = 4, - ACTIONS(435), 1, - anon_sym_RPAREN, - ACTIONS(437), 1, - anon_sym_COMMA, - STATE(133), 1, - aux_sym_dictionary_construction_repeat1, + [8064] = 4, + ACTIONS(440), 1, + sym_identifier, + ACTIONS(442), 1, + anon_sym_RBRACK, + STATE(128), 1, + aux_sym_closure_captured_variables_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8179] = 2, + [8078] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -8937,308 +8870,309 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, anon_sym_RPAREN, sym_varadic_dots, - [8189] = 3, - ACTIONS(442), 1, - anon_sym_EQ, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(440), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [8201] = 4, - ACTIONS(423), 1, + [8088] = 4, + ACTIONS(432), 1, sym_identifier, - ACTIONS(431), 1, + ACTIONS(444), 1, anon_sym_RPAREN, - STATE(151), 1, + STATE(140), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8215] = 4, - ACTIONS(444), 1, - sym_identifier, + [8102] = 4, ACTIONS(446), 1, - anon_sym_RBRACK, - STATE(130), 1, - aux_sym_closure_captured_variables_repeat1, + anon_sym_RPAREN, + ACTIONS(448), 1, + anon_sym_COMMA, + STATE(135), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8229] = 4, - ACTIONS(448), 1, + [8116] = 4, + ACTIONS(451), 1, anon_sym_RPAREN, - ACTIONS(450), 1, + ACTIONS(453), 1, anon_sym_COMMA, - STATE(132), 1, + STATE(137), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8243] = 4, - ACTIONS(452), 1, - sym_identifier, + [8130] = 4, + ACTIONS(434), 1, + anon_sym_RPAREN, ACTIONS(455), 1, - anon_sym_RBRACK, - STATE(139), 1, - aux_sym_closure_captured_variables_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8257] = 3, - ACTIONS(427), 1, - anon_sym_RBRACK, - ACTIONS(457), 1, anon_sym_COMMA, + STATE(135), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8268] = 3, - ACTIONS(423), 1, + [8144] = 4, + ACTIONS(119), 1, + anon_sym_RPAREN, + ACTIONS(432), 1, sym_identifier, - STATE(151), 1, + STATE(136), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8279] = 3, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(37), 1, - sym_procedural_block, + [8158] = 3, + ACTIONS(457), 1, + aux_sym_base_ten_token1, + STATE(18), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8290] = 2, + [8169] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(459), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [8299] = 3, - ACTIONS(360), 1, - anon_sym_COLON, - STATE(135), 1, - sym_declaration_type, + ACTIONS(446), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [8178] = 3, + ACTIONS(459), 1, + anon_sym_RPAREN, + ACTIONS(461), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8310] = 3, - ACTIONS(410), 1, - sym_identifier, - STATE(157), 1, - sym_path, + [8189] = 3, + ACTIONS(143), 1, + anon_sym_LPAREN, + STATE(36), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8321] = 2, + [8200] = 3, + ACTIONS(459), 1, + anon_sym_RPAREN, + ACTIONS(463), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(455), 2, + [8211] = 3, + ACTIONS(410), 1, sym_identifier, - anon_sym_RBRACK, - [8330] = 3, - ACTIONS(457), 1, - anon_sym_COMMA, - ACTIONS(461), 1, - anon_sym_RBRACK, + STATE(160), 1, + sym_path, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8341] = 2, + [8222] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(463), 2, + ACTIONS(465), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [8350] = 2, + [8231] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(465), 2, + ACTIONS(467), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [8359] = 3, - ACTIONS(467), 1, - anon_sym_RPAREN, - ACTIONS(469), 1, - anon_sym_COMMA, + [8240] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8370] = 2, + ACTIONS(469), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [8249] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(435), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [8379] = 3, - ACTIONS(141), 1, - anon_sym_LPAREN, - STATE(36), 1, - sym_dictionary_construction, + ACTIONS(471), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [8258] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8390] = 2, + ACTIONS(426), 2, + sym_identifier, + anon_sym_RBRACK, + [8267] = 3, + ACTIONS(356), 1, + anon_sym_COLON, + STATE(129), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(471), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [8399] = 3, - ACTIONS(467), 1, - anon_sym_RPAREN, + [8278] = 3, + ACTIONS(442), 1, + anon_sym_RBRACK, ACTIONS(473), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8410] = 3, + [8289] = 3, + ACTIONS(473), 1, + anon_sym_COMMA, ACTIONS(475), 1, - aux_sym_signed_integer_token1, - ACTIONS(477), 1, - aux_sym_unsigned_integer_token1, + anon_sym_RBRACK, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8421] = 3, - ACTIONS(479), 1, - aux_sym_base_ten_token1, - STATE(18), 1, - sym_number, + [8300] = 3, + ACTIONS(29), 1, + anon_sym_LBRACE, + STATE(37), 1, + sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8432] = 2, - ACTIONS(481), 1, - anon_sym_EQ, + [8311] = 3, + ACTIONS(477), 1, + aux_sym_signed_integer_token1, + ACTIONS(479), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8440] = 2, - ACTIONS(473), 1, - anon_sym_COMMA, + [8322] = 3, + ACTIONS(432), 1, + sym_identifier, + STATE(140), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8448] = 2, - ACTIONS(457), 1, - anon_sym_COMMA, + [8333] = 2, + ACTIONS(481), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8456] = 2, + [8341] = 2, ACTIONS(483), 1, - aux_sym_hex_token2, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8464] = 2, + [8349] = 2, ACTIONS(485), 1, - ts_builtin_sym_end, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8472] = 2, + [8357] = 2, ACTIONS(487), 1, - anon_sym_RPAREN, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8480] = 2, + [8365] = 2, ACTIONS(489), 1, - anon_sym_RPAREN, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8488] = 2, + [8373] = 2, ACTIONS(491), 1, - anon_sym_RPAREN, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8496] = 2, + [8381] = 2, ACTIONS(493), 1, - anon_sym_EQ, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8504] = 2, + [8389] = 2, ACTIONS(495), 1, - aux_sym_base_ten_token1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8512] = 2, + [8397] = 2, ACTIONS(497), 1, - anon_sym_RPAREN, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [8405] = 2, + ACTIONS(473), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8520] = 2, + [8413] = 2, ACTIONS(499), 1, - anon_sym_DASH_GT, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8528] = 2, + [8421] = 2, ACTIONS(501), 1, - sym_identifier, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8536] = 2, + [8429] = 2, ACTIONS(503), 1, - anon_sym_DASH_GT, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8544] = 2, + [8437] = 2, ACTIONS(505), 1, - anon_sym_DASH_GT, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8552] = 2, + [8445] = 2, ACTIONS(507), 1, - anon_sym_DASH_GT, + anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8560] = 2, + [8453] = 2, ACTIONS(509), 1, - sym_identifier, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8568] = 2, + [8461] = 2, ACTIONS(511), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8576] = 2, + [8469] = 2, + ACTIONS(463), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [8477] = 2, ACTIONS(513), 1, - aux_sym_binary_token2, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8584] = 2, + [8485] = 2, ACTIONS(515), 1, - anon_sym_in, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8592] = 2, + [8493] = 2, ACTIONS(517), 1, - anon_sym_DASH_GT, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9256,166 +9190,165 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(15)] = 663, [SMALL_STATE(16)] = 719, [SMALL_STATE(17)] = 775, - [SMALL_STATE(18)] = 837, - [SMALL_STATE(19)] = 893, - [SMALL_STATE(20)] = 948, - [SMALL_STATE(21)] = 1003, - [SMALL_STATE(22)] = 1058, - [SMALL_STATE(23)] = 1113, - [SMALL_STATE(24)] = 1168, - [SMALL_STATE(25)] = 1223, - [SMALL_STATE(26)] = 1278, - [SMALL_STATE(27)] = 1333, - [SMALL_STATE(28)] = 1388, - [SMALL_STATE(29)] = 1443, - [SMALL_STATE(30)] = 1498, - [SMALL_STATE(31)] = 1553, - [SMALL_STATE(32)] = 1608, - [SMALL_STATE(33)] = 1663, - [SMALL_STATE(34)] = 1718, - [SMALL_STATE(35)] = 1773, - [SMALL_STATE(36)] = 1828, - [SMALL_STATE(37)] = 1883, - [SMALL_STATE(38)] = 1938, - [SMALL_STATE(39)] = 1993, - [SMALL_STATE(40)] = 2049, - [SMALL_STATE(41)] = 2141, - [SMALL_STATE(42)] = 2197, - [SMALL_STATE(43)] = 2289, - [SMALL_STATE(44)] = 2381, - [SMALL_STATE(45)] = 2466, - [SMALL_STATE(46)] = 2553, - [SMALL_STATE(47)] = 2606, - [SMALL_STATE(48)] = 2669, - [SMALL_STATE(49)] = 2728, - [SMALL_STATE(50)] = 2793, - [SMALL_STATE(51)] = 2860, - [SMALL_STATE(52)] = 2931, - [SMALL_STATE(53)] = 3000, - [SMALL_STATE(54)] = 3073, - [SMALL_STATE(55)] = 3150, - [SMALL_STATE(56)] = 3229, - [SMALL_STATE(57)] = 3310, - [SMALL_STATE(58)] = 3396, - [SMALL_STATE(59)] = 3482, - [SMALL_STATE(60)] = 3568, - [SMALL_STATE(61)] = 3654, - [SMALL_STATE(62)] = 3740, - [SMALL_STATE(63)] = 3826, - [SMALL_STATE(64)] = 3912, - [SMALL_STATE(65)] = 3998, - [SMALL_STATE(66)] = 4084, - [SMALL_STATE(67)] = 4170, - [SMALL_STATE(68)] = 4256, - [SMALL_STATE(69)] = 4342, - [SMALL_STATE(70)] = 4428, - [SMALL_STATE(71)] = 4514, - [SMALL_STATE(72)] = 4600, - [SMALL_STATE(73)] = 4686, - [SMALL_STATE(74)] = 4772, - [SMALL_STATE(75)] = 4858, - [SMALL_STATE(76)] = 4944, - [SMALL_STATE(77)] = 5030, - [SMALL_STATE(78)] = 5116, - [SMALL_STATE(79)] = 5202, - [SMALL_STATE(80)] = 5288, - [SMALL_STATE(81)] = 5374, - [SMALL_STATE(82)] = 5460, - [SMALL_STATE(83)] = 5546, - [SMALL_STATE(84)] = 5632, - [SMALL_STATE(85)] = 5718, - [SMALL_STATE(86)] = 5804, - [SMALL_STATE(87)] = 5890, - [SMALL_STATE(88)] = 5976, - [SMALL_STATE(89)] = 6062, - [SMALL_STATE(90)] = 6148, - [SMALL_STATE(91)] = 6194, - [SMALL_STATE(92)] = 6240, - [SMALL_STATE(93)] = 6285, - [SMALL_STATE(94)] = 6359, - [SMALL_STATE(95)] = 6419, - [SMALL_STATE(96)] = 6475, - [SMALL_STATE(97)] = 6529, - [SMALL_STATE(98)] = 6591, - [SMALL_STATE(99)] = 6657, - [SMALL_STATE(100)] = 6725, - [SMALL_STATE(101)] = 6795, - [SMALL_STATE(102)] = 6853, - [SMALL_STATE(103)] = 6901, - [SMALL_STATE(104)] = 6953, - [SMALL_STATE(105)] = 7001, - [SMALL_STATE(106)] = 7071, - [SMALL_STATE(107)] = 7138, - [SMALL_STATE(108)] = 7205, - [SMALL_STATE(109)] = 7274, - [SMALL_STATE(110)] = 7343, - [SMALL_STATE(111)] = 7412, - [SMALL_STATE(112)] = 7481, - [SMALL_STATE(113)] = 7547, - [SMALL_STATE(114)] = 7613, - [SMALL_STATE(115)] = 7679, - [SMALL_STATE(116)] = 7745, - [SMALL_STATE(117)] = 7811, - [SMALL_STATE(118)] = 7840, - [SMALL_STATE(119)] = 7869, - [SMALL_STATE(120)] = 7898, - [SMALL_STATE(121)] = 7927, - [SMALL_STATE(122)] = 7956, - [SMALL_STATE(123)] = 7983, - [SMALL_STATE(124)] = 8009, - [SMALL_STATE(125)] = 8032, - [SMALL_STATE(126)] = 8055, - [SMALL_STATE(127)] = 8073, - [SMALL_STATE(128)] = 8091, - [SMALL_STATE(129)] = 8109, - [SMALL_STATE(130)] = 8123, - [SMALL_STATE(131)] = 8137, - [SMALL_STATE(132)] = 8151, - [SMALL_STATE(133)] = 8165, - [SMALL_STATE(134)] = 8179, - [SMALL_STATE(135)] = 8189, - [SMALL_STATE(136)] = 8201, - [SMALL_STATE(137)] = 8215, - [SMALL_STATE(138)] = 8229, - [SMALL_STATE(139)] = 8243, - [SMALL_STATE(140)] = 8257, - [SMALL_STATE(141)] = 8268, - [SMALL_STATE(142)] = 8279, - [SMALL_STATE(143)] = 8290, - [SMALL_STATE(144)] = 8299, - [SMALL_STATE(145)] = 8310, - [SMALL_STATE(146)] = 8321, - [SMALL_STATE(147)] = 8330, - [SMALL_STATE(148)] = 8341, - [SMALL_STATE(149)] = 8350, - [SMALL_STATE(150)] = 8359, - [SMALL_STATE(151)] = 8370, - [SMALL_STATE(152)] = 8379, - [SMALL_STATE(153)] = 8390, - [SMALL_STATE(154)] = 8399, - [SMALL_STATE(155)] = 8410, - [SMALL_STATE(156)] = 8421, - [SMALL_STATE(157)] = 8432, - [SMALL_STATE(158)] = 8440, - [SMALL_STATE(159)] = 8448, - [SMALL_STATE(160)] = 8456, - [SMALL_STATE(161)] = 8464, - [SMALL_STATE(162)] = 8472, - [SMALL_STATE(163)] = 8480, - [SMALL_STATE(164)] = 8488, - [SMALL_STATE(165)] = 8496, - [SMALL_STATE(166)] = 8504, - [SMALL_STATE(167)] = 8512, - [SMALL_STATE(168)] = 8520, - [SMALL_STATE(169)] = 8528, - [SMALL_STATE(170)] = 8536, - [SMALL_STATE(171)] = 8544, - [SMALL_STATE(172)] = 8552, - [SMALL_STATE(173)] = 8560, - [SMALL_STATE(174)] = 8568, - [SMALL_STATE(175)] = 8576, - [SMALL_STATE(176)] = 8584, - [SMALL_STATE(177)] = 8592, + [SMALL_STATE(18)] = 833, + [SMALL_STATE(19)] = 889, + [SMALL_STATE(20)] = 951, + [SMALL_STATE(21)] = 1006, + [SMALL_STATE(22)] = 1061, + [SMALL_STATE(23)] = 1116, + [SMALL_STATE(24)] = 1171, + [SMALL_STATE(25)] = 1226, + [SMALL_STATE(26)] = 1281, + [SMALL_STATE(27)] = 1336, + [SMALL_STATE(28)] = 1391, + [SMALL_STATE(29)] = 1446, + [SMALL_STATE(30)] = 1501, + [SMALL_STATE(31)] = 1556, + [SMALL_STATE(32)] = 1611, + [SMALL_STATE(33)] = 1666, + [SMALL_STATE(34)] = 1721, + [SMALL_STATE(35)] = 1776, + [SMALL_STATE(36)] = 1831, + [SMALL_STATE(37)] = 1886, + [SMALL_STATE(38)] = 1941, + [SMALL_STATE(39)] = 1996, + [SMALL_STATE(40)] = 2051, + [SMALL_STATE(41)] = 2107, + [SMALL_STATE(42)] = 2199, + [SMALL_STATE(43)] = 2255, + [SMALL_STATE(44)] = 2347, + [SMALL_STATE(45)] = 2439, + [SMALL_STATE(46)] = 2526, + [SMALL_STATE(47)] = 2581, + [SMALL_STATE(48)] = 2644, + [SMALL_STATE(49)] = 2703, + [SMALL_STATE(50)] = 2768, + [SMALL_STATE(51)] = 2835, + [SMALL_STATE(52)] = 2906, + [SMALL_STATE(53)] = 2975, + [SMALL_STATE(54)] = 3048, + [SMALL_STATE(55)] = 3125, + [SMALL_STATE(56)] = 3204, + [SMALL_STATE(57)] = 3285, + [SMALL_STATE(58)] = 3371, + [SMALL_STATE(59)] = 3457, + [SMALL_STATE(60)] = 3543, + [SMALL_STATE(61)] = 3629, + [SMALL_STATE(62)] = 3715, + [SMALL_STATE(63)] = 3801, + [SMALL_STATE(64)] = 3887, + [SMALL_STATE(65)] = 3973, + [SMALL_STATE(66)] = 4059, + [SMALL_STATE(67)] = 4145, + [SMALL_STATE(68)] = 4231, + [SMALL_STATE(69)] = 4317, + [SMALL_STATE(70)] = 4403, + [SMALL_STATE(71)] = 4489, + [SMALL_STATE(72)] = 4575, + [SMALL_STATE(73)] = 4661, + [SMALL_STATE(74)] = 4747, + [SMALL_STATE(75)] = 4833, + [SMALL_STATE(76)] = 4919, + [SMALL_STATE(77)] = 5005, + [SMALL_STATE(78)] = 5091, + [SMALL_STATE(79)] = 5177, + [SMALL_STATE(80)] = 5263, + [SMALL_STATE(81)] = 5349, + [SMALL_STATE(82)] = 5435, + [SMALL_STATE(83)] = 5521, + [SMALL_STATE(84)] = 5607, + [SMALL_STATE(85)] = 5693, + [SMALL_STATE(86)] = 5779, + [SMALL_STATE(87)] = 5865, + [SMALL_STATE(88)] = 5951, + [SMALL_STATE(89)] = 6037, + [SMALL_STATE(90)] = 6123, + [SMALL_STATE(91)] = 6169, + [SMALL_STATE(92)] = 6215, + [SMALL_STATE(93)] = 6260, + [SMALL_STATE(94)] = 6326, + [SMALL_STATE(95)] = 6394, + [SMALL_STATE(96)] = 6464, + [SMALL_STATE(97)] = 6516, + [SMALL_STATE(98)] = 6564, + [SMALL_STATE(99)] = 6618, + [SMALL_STATE(100)] = 6674, + [SMALL_STATE(101)] = 6734, + [SMALL_STATE(102)] = 6792, + [SMALL_STATE(103)] = 6854, + [SMALL_STATE(104)] = 6902, + [SMALL_STATE(105)] = 6972, + [SMALL_STATE(106)] = 7039, + [SMALL_STATE(107)] = 7108, + [SMALL_STATE(108)] = 7177, + [SMALL_STATE(109)] = 7246, + [SMALL_STATE(110)] = 7313, + [SMALL_STATE(111)] = 7382, + [SMALL_STATE(112)] = 7448, + [SMALL_STATE(113)] = 7514, + [SMALL_STATE(114)] = 7580, + [SMALL_STATE(115)] = 7646, + [SMALL_STATE(116)] = 7712, + [SMALL_STATE(117)] = 7741, + [SMALL_STATE(118)] = 7770, + [SMALL_STATE(119)] = 7799, + [SMALL_STATE(120)] = 7828, + [SMALL_STATE(121)] = 7857, + [SMALL_STATE(122)] = 7884, + [SMALL_STATE(123)] = 7910, + [SMALL_STATE(124)] = 7933, + [SMALL_STATE(125)] = 7956, + [SMALL_STATE(126)] = 7974, + [SMALL_STATE(127)] = 7992, + [SMALL_STATE(128)] = 8010, + [SMALL_STATE(129)] = 8024, + [SMALL_STATE(130)] = 8036, + [SMALL_STATE(131)] = 8050, + [SMALL_STATE(132)] = 8064, + [SMALL_STATE(133)] = 8078, + [SMALL_STATE(134)] = 8088, + [SMALL_STATE(135)] = 8102, + [SMALL_STATE(136)] = 8116, + [SMALL_STATE(137)] = 8130, + [SMALL_STATE(138)] = 8144, + [SMALL_STATE(139)] = 8158, + [SMALL_STATE(140)] = 8169, + [SMALL_STATE(141)] = 8178, + [SMALL_STATE(142)] = 8189, + [SMALL_STATE(143)] = 8200, + [SMALL_STATE(144)] = 8211, + [SMALL_STATE(145)] = 8222, + [SMALL_STATE(146)] = 8231, + [SMALL_STATE(147)] = 8240, + [SMALL_STATE(148)] = 8249, + [SMALL_STATE(149)] = 8258, + [SMALL_STATE(150)] = 8267, + [SMALL_STATE(151)] = 8278, + [SMALL_STATE(152)] = 8289, + [SMALL_STATE(153)] = 8300, + [SMALL_STATE(154)] = 8311, + [SMALL_STATE(155)] = 8322, + [SMALL_STATE(156)] = 8333, + [SMALL_STATE(157)] = 8341, + [SMALL_STATE(158)] = 8349, + [SMALL_STATE(159)] = 8357, + [SMALL_STATE(160)] = 8365, + [SMALL_STATE(161)] = 8373, + [SMALL_STATE(162)] = 8381, + [SMALL_STATE(163)] = 8389, + [SMALL_STATE(164)] = 8397, + [SMALL_STATE(165)] = 8405, + [SMALL_STATE(166)] = 8413, + [SMALL_STATE(167)] = 8421, + [SMALL_STATE(168)] = 8429, + [SMALL_STATE(169)] = 8437, + [SMALL_STATE(170)] = 8445, + [SMALL_STATE(171)] = 8453, + [SMALL_STATE(172)] = 8461, + [SMALL_STATE(173)] = 8469, + [SMALL_STATE(174)] = 8477, + [SMALL_STATE(175)] = 8485, + [SMALL_STATE(176)] = 8493, }; static const TSParseActionEntry ts_parse_actions[] = { @@ -9423,246 +9356,246 @@ static const TSParseActionEntry ts_parse_actions[] = { [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(90), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), - [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), - [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(24), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(61), [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), - [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), [31] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), [33] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), - [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(173), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(174), [37] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), [39] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), - [41] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(173), + [41] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(174), [44] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), [46] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), [48] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), [50] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [52] = {.entry = {.count = 1, .reusable = false}}, SHIFT(123), - [54] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [56] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), - [58] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [60] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [62] = {.entry = {.count = 1, .reusable = false}}, SHIFT(145), - [64] = {.entry = {.count = 1, .reusable = false}}, SHIFT(169), - [66] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [68] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(2), - [71] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(32), - [74] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(32), - [77] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(39), - [80] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(166), - [83] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(160), - [86] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(175), - [89] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(23), - [92] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(67), - [95] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(60), - [98] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [101] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(43), - [104] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(7), - [107] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), - [109] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(145), - [112] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(169), - [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(104), - [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), - [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [123] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [125] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [127] = {.entry = {.count = 1, .reusable = false}}, SHIFT(156), - [129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 7), - [131] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 7), - [133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(142), - [135] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), - [137] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), - [139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), - [141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), - [143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), - [145] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), - [147] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 2, 0, 0), - [149] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 2, 0, 0), - [151] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 3, 0, 0), - [153] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 3, 0, 0), - [155] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 13), - [157] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 13), - [159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), - [161] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), - [163] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), - [165] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), - [167] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [169] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), - [173] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), - [175] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), - [177] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), - [179] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [181] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [183] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [185] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [187] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [189] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [191] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 0), - [193] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 0), - [195] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [197] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), - [201] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), - [203] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 10), - [205] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 10), - [207] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 11), - [209] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 11), - [211] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [213] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [215] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 15), - [217] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 15), - [219] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 16), - [221] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 16), - [223] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [225] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [227] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 17), - [229] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 17), - [231] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 18), - [233] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 18), - [235] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 20), - [237] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 20), - [239] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), - [241] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(2), - [244] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(32), - [247] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(32), - [250] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(90), - [253] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(166), - [256] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(160), - [259] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(175), - [262] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(23), - [265] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(58), - [268] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(60), - [271] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [274] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(43), - [277] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [279] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(7), - [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [286] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [288] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 22), - [294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 22), - [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [300] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), - [302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), - [304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(73), - [308] = {.entry = {.count = 1, .reusable = false}}, SHIFT(74), - [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), - [312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), - [314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), - [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), - [318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), - [320] = {.entry = {.count = 1, .reusable = false}}, SHIFT(79), - [322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), - [324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), - [326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), - [328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), - [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), - [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [342] = {.entry = {.count = 1, .reusable = false}}, SHIFT(68), - [344] = {.entry = {.count = 1, .reusable = false}}, SHIFT(80), - [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), - [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82), - [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), - [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), - [356] = {.entry = {.count = 1, .reusable = false}}, SHIFT(85), - [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [362] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87), + [52] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), + [54] = {.entry = {.count = 1, .reusable = false}}, SHIFT(122), + [56] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [58] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), + [60] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [62] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [64] = {.entry = {.count = 1, .reusable = false}}, SHIFT(144), + [66] = {.entry = {.count = 1, .reusable = false}}, SHIFT(163), + [68] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [70] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(2), + [73] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(35), + [76] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(35), + [79] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(40), + [82] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(162), + [85] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(176), + [88] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(171), + [91] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(24), + [94] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(68), + [97] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(61), + [100] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(10), + [103] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(44), + [106] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(7), + [109] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), + [111] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(144), + [114] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(163), + [117] = {.entry = {.count = 1, .reusable = false}}, SHIFT(103), + [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), + [123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), + [125] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [127] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [129] = {.entry = {.count = 1, .reusable = false}}, SHIFT(139), + [131] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 7), + [133] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 7), + [135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(153), + [137] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), + [139] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), + [141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), + [145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 2, 0, 0), + [147] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 2, 0, 0), + [149] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 3, 0, 0), + [151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 3, 0, 0), + [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 22), + [159] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 22), + [161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), + [163] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), + [165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 13), + [167] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 13), + [169] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), + [171] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), + [173] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), + [179] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), + [181] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), + [183] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), + [185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [187] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [189] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 0), + [199] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 0), + [201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [203] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), + [207] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), + [209] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 10), + [211] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 10), + [213] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 11), + [215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 11), + [217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 15), + [223] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 15), + [225] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 16), + [227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 16), + [229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 17), + [231] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 17), + [233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 18), + [235] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 18), + [237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [239] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [241] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 20), + [243] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 20), + [245] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), + [247] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(2), + [250] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(35), + [253] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(35), + [256] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(90), + [259] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(162), + [262] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(176), + [265] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(171), + [268] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(24), + [271] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(59), + [274] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(61), + [277] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), + [280] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(44), + [283] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [285] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(7), + [288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [298] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), + [300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), + [302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(72), + [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(74), + [314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), + [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [318] = {.entry = {.count = 1, .reusable = false}}, SHIFT(77), + [320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), + [326] = {.entry = {.count = 1, .reusable = false}}, SHIFT(80), + [328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), + [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [342] = {.entry = {.count = 1, .reusable = false}}, SHIFT(81), + [344] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82), + [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(84), + [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [358] = {.entry = {.count = 1, .reusable = false}}, SHIFT(89), + [360] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87), + [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), [364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), [366] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), [368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 14), - [370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 19), - [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), - [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [374] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 19), + [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), [382] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [384] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assign, 4, 0, 21), - [386] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assign, 4, 0, 21), - [388] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let, 5, 0, 23), - [390] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let, 5, 0, 23), - [392] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for, 5, 0, 24), - [394] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for, 5, 0, 24), - [396] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closed_expression, 2, 0, 0), - [398] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closed_expression, 2, 0, 0), + [384] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let, 5, 0, 23), + [386] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let, 5, 0, 23), + [388] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closed_expression, 2, 0, 0), + [390] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closed_expression, 2, 0, 0), + [392] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assign, 4, 0, 21), + [394] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assign, 4, 0, 21), + [396] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for, 5, 0, 24), + [398] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for, 5, 0, 24), [400] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), [402] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_operator, 1, 0, 3), [404] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_operator, 1, 0, 3), - [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), - [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), - [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), - [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [418] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(144), + [418] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(150), [421] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), - [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), - [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), - [435] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [437] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(141), - [440] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 8), - [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), - [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), - [452] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(159), - [455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), - [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), - [459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), - [463] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [465] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), - [471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), - [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [423] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(165), + [426] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), + [428] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 8), + [430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), + [440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [446] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [448] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(155), + [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), + [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), + [465] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [469] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), - [485] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), - [497] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [499] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), - [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), - [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [505] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), - [507] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), - [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), - [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), - [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [483] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), + [485] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [491] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), + [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [497] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), + [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [505] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index 9d5724d..a7bc220 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -258,3 +258,116 @@ value.value:value(value=value) (expression (path (identifier)))))))) + +================== +Closure as statement. +================== +{ + let types = std.types; + (,)[types] -> std.types.Void {} +} + +--- + +(source_file + (expression + (procedural_block + (statement + (let + (path + (identifier)) + (expression + (path + (identifier) + (identifier))))) + (statement + (expression + (closure_definition + (struct_definition) + (closure_captured_variables + (identifier)) + (path + (identifier) + (identifier) + (identifier)) + (expression + (procedural_block)))))))) + +================== +Closure as statement with path as argument. +================== +{ + let types = std.types; + types.Void[types] -> std.types.Void {} +} + +--- + +(source_file + (expression + (procedural_block + (statement + (let + (path + (identifier)) + (expression + (path + (identifier) + (identifier))))) + (statement + (expression + (closure_definition + (path + (identifier) + (identifier)) + (closure_captured_variables + (identifier)) + (path + (identifier) + (identifier) + (identifier)) + (expression + (procedural_block)))))))) + +================== +Closure as assignment. +================== +{ + let types = std.types; + let closure = (,)[types] -> std.types.Void {}; + + closure +} + +--- + +(source_file + (expression + (procedural_block + (statement + (let + (path + (identifier)) + (expression + (path + (identifier) + (identifier))))) + (statement + (let + (path + (identifier)) + (expression + (closure_definition + (struct_definition) + (closure_captured_variables + (identifier)) + (path + (identifier) + (identifier) + (identifier)) + (expression + (procedural_block)))))) + (statement + (expression + (path + (identifier))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt b/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt index cd23be5..32e5256 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt @@ -28,6 +28,30 @@ Closed statement (expression (signed_integer (integer (base_ten))))))))) +================== +Closed statement followed by open statement +================== +{ + 5i; 5i +} + +--- + +(source_file + (expression + (procedural_block + (statement + (closed_expression + (expression + (signed_integer + (integer + (base_ten)))))) + (statement + (expression + (signed_integer + (integer + (base_ten)))))))) + ================== Open statement ================== From 58aeb62166a2dfc3e30310fbe4f91b7e07d94058 Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 21 Nov 2025 02:52:13 -0500 Subject: [PATCH 023/106] Convert to flake --- .envrc | 2 +- Cargo.nix | 6846 ---------------------------------------- build_dependencies.nix | 43 - crate-hashes.json | 7 - default.nix | 10 - flake.lock | 77 + flake.nix | 54 + shell.nix | 11 - 8 files changed, 132 insertions(+), 6918 deletions(-) delete mode 100644 Cargo.nix delete mode 100644 build_dependencies.nix delete mode 100644 crate-hashes.json delete mode 100644 default.nix create mode 100644 flake.lock create mode 100644 flake.nix delete mode 100644 shell.nix diff --git a/.envrc b/.envrc index 65326bb..3550a30 100644 --- a/.envrc +++ b/.envrc @@ -1 +1 @@ -use nix \ No newline at end of file +use flake diff --git a/Cargo.nix b/Cargo.nix deleted file mode 100644 index 1ed9df6..0000000 --- a/Cargo.nix +++ /dev/null @@ -1,6846 +0,0 @@ - -# This file was @generated by crate2nix 0.14.0 with the command: -# "generate" -# See https://github.com/kolloch/crate2nix for more info. - -{ nixpkgs ? -, pkgs ? import nixpkgs { config = {}; } -, lib ? pkgs.lib -, stdenv ? pkgs.stdenv -, buildRustCrateForPkgs ? pkgs: pkgs.buildRustCrate - # This is used as the `crateOverrides` argument for `buildRustCrate`. -, defaultCrateOverrides ? pkgs.defaultCrateOverrides - # The features to enable for the root_crate or the workspace_members. -, rootFeatures ? [ "default" ] - # If true, throw errors instead of issueing deprecation warnings. -, strictDeprecation ? false - # Used for conditional compilation based on CPU feature detection. -, targetFeatures ? [] - # Whether to perform release builds: longer compile times, faster binaries. -, release ? true - # Additional crate2nix configuration if it exists. -, crateConfig - ? if builtins.pathExists ./crate-config.nix - then pkgs.callPackage ./crate-config.nix {} - else {} -}: - -rec { - # - # "public" attributes that we attempt to keep stable with new versions of crate2nix. - # - - - # Refer your crate build derivation by name here. - # You can override the features with - # workspaceMembers."${crateName}".build.override { features = [ "default" "feature1" ... ]; }. - workspaceMembers = { - "command_cad" = rec { - packageId = "command_cad"; - build = internal.buildRustCrateWithFeatures { - packageId = "command_cad"; - }; - - # Debug support which might change between releases. - # File a bug if you depend on any for non-debug work! - debug = internal.debugCrate { inherit packageId; }; - }; - "common_data_types" = rec { - packageId = "common_data_types"; - build = internal.buildRustCrateWithFeatures { - packageId = "common_data_types"; - }; - - # Debug support which might change between releases. - # File a bug if you depend on any for non-debug work! - debug = internal.debugCrate { inherit packageId; }; - }; - "macros" = rec { - packageId = "macros"; - build = internal.buildRustCrateWithFeatures { - packageId = "macros"; - }; - - # Debug support which might change between releases. - # File a bug if you depend on any for non-debug work! - debug = internal.debugCrate { inherit packageId; }; - }; - }; - - # A derivation that joins the outputs of all workspace members together. - allWorkspaceMembers = pkgs.symlinkJoin { - name = "all-workspace-members"; - paths = - let members = builtins.attrValues workspaceMembers; - in builtins.map (m: m.build) members; - }; - - # - # "internal" ("private") attributes that may change in every new version of crate2nix. - # - - internal = rec { - # Build and dependency information for crates. - # Many of the fields are passed one-to-one to buildRustCrate. - # - # Noteworthy: - # * `dependencies`/`buildDependencies`: similar to the corresponding fields for buildRustCrate. - # but with additional information which is used during dependency/feature resolution. - # * `resolvedDependencies`: the selected default features reported by cargo - only included for debugging. - # * `devDependencies` as of now not used by `buildRustCrate` but used to - # inject test dependencies into the build - - crates = { - "adler" = rec { - crateName = "adler"; - version = "1.0.2"; - edition = "2015"; - sha256 = "1zim79cvzd5yrkzl3nyfx0avijwgk9fqv3yrscdy1cc79ih02qpj"; - authors = [ - "Jonas Schievink " - ]; - features = { - "compiler_builtins" = [ "dep:compiler_builtins" ]; - "core" = [ "dep:core" ]; - "default" = [ "std" ]; - "rustc-dep-of-std" = [ "core" "compiler_builtins" ]; - }; - }; - "ahash" = rec { - crateName = "ahash"; - version = "0.8.11"; - edition = "2018"; - sha256 = "04chdfkls5xmhp1d48gnjsmglbqibizs3bpbj6rsj604m10si7g8"; - authors = [ - "Tom Kaitchuck " - ]; - dependencies = [ - { - name = "cfg-if"; - packageId = "cfg-if"; - } - { - name = "once_cell"; - packageId = "once_cell"; - usesDefaultFeatures = false; - target = { target, features }: (!(("arm" == target."arch" or null) && ("none" == target."os" or null))); - features = [ "alloc" ]; - } - { - name = "zerocopy"; - packageId = "zerocopy"; - usesDefaultFeatures = false; - features = [ "simd" ]; - } - ]; - buildDependencies = [ - { - name = "version_check"; - packageId = "version_check"; - } - ]; - features = { - "atomic-polyfill" = [ "dep:atomic-polyfill" "once_cell/atomic-polyfill" ]; - "compile-time-rng" = [ "const-random" ]; - "const-random" = [ "dep:const-random" ]; - "default" = [ "std" "runtime-rng" ]; - "getrandom" = [ "dep:getrandom" ]; - "runtime-rng" = [ "getrandom" ]; - "serde" = [ "dep:serde" ]; - }; - }; - "aliasable" = rec { - crateName = "aliasable"; - version = "0.1.3"; - edition = "2018"; - sha256 = "1z8548zdjlm4ps1k0d7x68lfdyji02crwcc9rw3q3bb106f643r5"; - authors = [ - "avitex " - ]; - features = { - "aliasable_deref_trait" = [ "dep:aliasable_deref_trait" ]; - "default" = [ "alloc" ]; - "stable_deref_trait" = [ "dep:stable_deref_trait" ]; - "traits" = [ "stable_deref_trait" "aliasable_deref_trait" ]; - }; - resolvedDefaultFeatures = [ "alloc" "default" ]; - }; - "allocator-api2" = rec { - crateName = "allocator-api2"; - version = "0.2.18"; - edition = "2018"; - sha256 = "0kr6lfnxvnj164j1x38g97qjlhb7akppqzvgfs0697140ixbav2w"; - libName = "allocator_api2"; - authors = [ - "Zakarum " - ]; - features = { - "default" = [ "std" ]; - "serde" = [ "dep:serde" ]; - "std" = [ "alloc" ]; - }; - resolvedDefaultFeatures = [ "alloc" ]; - }; - "android-tzdata" = rec { - crateName = "android-tzdata"; - version = "0.1.1"; - edition = "2018"; - sha256 = "1w7ynjxrfs97xg3qlcdns4kgfpwcdv824g611fq32cag4cdr96g9"; - libName = "android_tzdata"; - authors = [ - "RumovZ" - ]; - - }; - "android_system_properties" = rec { - crateName = "android_system_properties"; - version = "0.1.5"; - edition = "2018"; - sha256 = "04b3wrz12837j7mdczqd95b732gw5q7q66cv4yn4646lvccp57l1"; - authors = [ - "Nicolas Silva " - ]; - dependencies = [ - { - name = "libc"; - packageId = "libc"; - } - ]; - - }; - "anstream" = rec { - crateName = "anstream"; - version = "0.6.14"; - edition = "2021"; - sha256 = "0nx1vnfs2lil1sl14l49i6jvp6zpjczn85wxx4xw1ycafvx7b321"; - dependencies = [ - { - name = "anstyle"; - packageId = "anstyle"; - } - { - name = "anstyle-parse"; - packageId = "anstyle-parse"; - } - { - name = "anstyle-query"; - packageId = "anstyle-query"; - optional = true; - } - { - name = "anstyle-wincon"; - packageId = "anstyle-wincon"; - optional = true; - target = { target, features }: (target."windows" or false); - } - { - name = "colorchoice"; - packageId = "colorchoice"; - } - { - name = "is_terminal_polyfill"; - packageId = "is_terminal_polyfill"; - } - { - name = "utf8parse"; - packageId = "utf8parse"; - } - ]; - features = { - "auto" = [ "dep:anstyle-query" ]; - "default" = [ "auto" "wincon" ]; - "wincon" = [ "dep:anstyle-wincon" ]; - }; - resolvedDefaultFeatures = [ "auto" "default" "wincon" ]; - }; - "anstyle" = rec { - crateName = "anstyle"; - version = "1.0.7"; - edition = "2021"; - sha256 = "06qxmrba0xbhv07jpdvrdrhw1hjlb9icj88bqvlnissz9bqgr383"; - features = { - "default" = [ "std" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "anstyle-parse" = rec { - crateName = "anstyle-parse"; - version = "0.2.4"; - edition = "2021"; - sha256 = "1m121pa4plpcb4g7xali2kv9njmgb3713q3fxf60b4jd0fli2fn0"; - libName = "anstyle_parse"; - dependencies = [ - { - name = "utf8parse"; - packageId = "utf8parse"; - optional = true; - } - ]; - features = { - "core" = [ "dep:arrayvec" ]; - "default" = [ "utf8" ]; - "utf8" = [ "dep:utf8parse" ]; - }; - resolvedDefaultFeatures = [ "default" "utf8" ]; - }; - "anstyle-query" = rec { - crateName = "anstyle-query"; - version = "1.0.3"; - edition = "2021"; - sha256 = "1x9pyl231rry5g45dvkdb2sfnl2dx2f4qd9a5v3ml8kr9ryr0k56"; - libName = "anstyle_query"; - dependencies = [ - { - name = "windows-sys"; - packageId = "windows-sys 0.52.0"; - target = { target, features }: (target."windows" or false); - features = [ "Win32_System_Console" "Win32_Foundation" ]; - } - ]; - - }; - "anstyle-wincon" = rec { - crateName = "anstyle-wincon"; - version = "3.0.3"; - edition = "2021"; - sha256 = "06gv2vbj4hvwb8fxqjmvabp5kx2w01cjgh86pd98y1mpzr4q98v1"; - libName = "anstyle_wincon"; - dependencies = [ - { - name = "anstyle"; - packageId = "anstyle"; - } - { - name = "windows-sys"; - packageId = "windows-sys 0.52.0"; - target = { target, features }: (target."windows" or false); - features = [ "Win32_System_Console" "Win32_Foundation" ]; - } - ]; - - }; - "anyhow" = rec { - crateName = "anyhow"; - version = "1.0.86"; - edition = "2018"; - sha256 = "1nk301x8qhpdaks6a9zvcp7yakjqnczjmqndbg7vk4494d3d1ldk"; - authors = [ - "David Tolnay " - ]; - features = { - "backtrace" = [ "dep:backtrace" ]; - "default" = [ "std" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "approx 0.3.2" = rec { - crateName = "approx"; - version = "0.3.2"; - edition = "2015"; - sha256 = "1hx580xjdxl3766js9b49rnbnmr8gw8c060809l43k9f0xshprph"; - authors = [ - "Brendan Zabarauskas " - ]; - dependencies = [ - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - } - ]; - features = { - "default" = [ "std" ]; - "num-complex" = [ "dep:num-complex" ]; - }; - resolvedDefaultFeatures = [ "std" ]; - }; - "approx 0.5.1" = rec { - crateName = "approx"; - version = "0.5.1"; - edition = "2015"; - sha256 = "1ilpv3dgd58rasslss0labarq7jawxmivk17wsh8wmkdm3q15cfa"; - authors = [ - "Brendan Zabarauskas " - ]; - dependencies = [ - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - } - ]; - features = { - "default" = [ "std" ]; - "num-complex" = [ "dep:num-complex" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "arrayvec" = rec { - crateName = "arrayvec"; - version = "0.7.4"; - edition = "2018"; - sha256 = "04b7n722jij0v3fnm3qk072d5ysc2q30rl9fz33zpfhzah30mlwn"; - authors = [ - "bluss" - ]; - features = { - "default" = [ "std" ]; - "serde" = [ "dep:serde" ]; - "zeroize" = [ "dep:zeroize" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "autocfg" = rec { - crateName = "autocfg"; - version = "1.3.0"; - edition = "2015"; - sha256 = "1c3njkfzpil03k92q0mij5y1pkhhfr4j3bf0h53bgl2vs85lsjqc"; - authors = [ - "Josh Stone " - ]; - - }; - "bezier-rs" = rec { - crateName = "bezier-rs"; - version = "0.4.0"; - edition = "2021"; - sha256 = "1pj1ax64kgqinxc45kgjq39yx4sbqscv7p0sz22gkqi68cqsmqxx"; - libName = "bezier_rs"; - authors = [ - "Graphite Authors " - ]; - dependencies = [ - { - name = "glam"; - packageId = "glam"; - features = [ "serde" ]; - } - ]; - features = { - "dyn-any" = [ "dep:dyn-any" ]; - "serde" = [ "dep:serde" ]; - }; - }; - "bitflags 1.3.2" = rec { - crateName = "bitflags"; - version = "1.3.2"; - edition = "2018"; - sha256 = "12ki6w8gn1ldq7yz9y680llwk5gmrhrzszaa17g1sbrw2r2qvwxy"; - authors = [ - "The Rust Project Developers" - ]; - features = { - "compiler_builtins" = [ "dep:compiler_builtins" ]; - "core" = [ "dep:core" ]; - "rustc-dep-of-std" = [ "core" "compiler_builtins" ]; - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "bitflags 2.5.0" = rec { - crateName = "bitflags"; - version = "2.5.0"; - edition = "2021"; - sha256 = "1h91vdx1il069vdiiissj8ymzj130rbiic0dbs77yxjgjim9sjyg"; - authors = [ - "The Rust Project Developers" - ]; - features = { - "arbitrary" = [ "dep:arbitrary" ]; - "bytemuck" = [ "dep:bytemuck" ]; - "compiler_builtins" = [ "dep:compiler_builtins" ]; - "core" = [ "dep:core" ]; - "rustc-dep-of-std" = [ "core" "compiler_builtins" ]; - "serde" = [ "dep:serde" ]; - }; - resolvedDefaultFeatures = [ "std" ]; - }; - "bumpalo" = rec { - crateName = "bumpalo"; - version = "3.16.0"; - edition = "2021"; - sha256 = "0b015qb4knwanbdlp1x48pkb4pm57b8gidbhhhxr900q2wb6fabr"; - authors = [ - "Nick Fitzgerald " - ]; - features = { - "allocator-api2" = [ "dep:allocator-api2" ]; - "serde" = [ "dep:serde" ]; - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "bytecount" = rec { - crateName = "bytecount"; - version = "0.6.8"; - edition = "2018"; - sha256 = "1klqfjwn41fwmcqw4z03v6i4imgrf7lmf3b5s9v74hxir8hrps2w"; - authors = [ - "Andre Bogus " - "Joshua Landau " - ]; - features = { - }; - }; - "bytemuck" = rec { - crateName = "bytemuck"; - version = "1.16.0"; - edition = "2018"; - sha256 = "19dwdvjri09mhgrngy0737965pchm25ix2yma8sgwpjxrcalr0vq"; - authors = [ - "Lokathor " - ]; - features = { - "bytemuck_derive" = [ "dep:bytemuck_derive" ]; - "derive" = [ "bytemuck_derive" ]; - "extern_crate_std" = [ "extern_crate_alloc" ]; - }; - }; - "byteorder 0.4.2" = rec { - crateName = "byteorder"; - version = "0.4.2"; - edition = "2015"; - sha256 = "010k8mb3fi4jgbj4nxzggyi7zg2jvm7aqirdyf5c1348h4cb9j4n"; - authors = [ - "Andrew Gallant " - ]; - features = { - }; - }; - "byteorder 1.5.0" = rec { - crateName = "byteorder"; - version = "1.5.0"; - edition = "2021"; - sha256 = "0jzncxyf404mwqdbspihyzpkndfgda450l0893pz5xj685cg5l0z"; - authors = [ - "Andrew Gallant " - ]; - features = { - "default" = [ "std" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "casey" = rec { - crateName = "casey"; - version = "0.4.0"; - edition = "2018"; - sha256 = "0sv5ll6aavwcigmr53b22dg16adlz4pa2pb73367sna974k8cib1"; - procMacro = true; - authors = [ - "jordy25519 " - ]; - dependencies = [ - { - name = "syn"; - packageId = "syn 1.0.109"; - } - ]; - - }; - "castaway" = rec { - crateName = "castaway"; - version = "0.2.2"; - edition = "2018"; - sha256 = "1k1z4v61vq7la56js1azkr0k9b415vif2kaxiqk3d1gw6mbfs5wa"; - authors = [ - "Stephen M. Coakley " - ]; - dependencies = [ - { - name = "rustversion"; - packageId = "rustversion"; - } - ]; - features = { - "default" = [ "std" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "cc" = rec { - crateName = "cc"; - version = "1.0.98"; - edition = "2018"; - sha256 = "0gzhij74hblfkzwwyysdc8crfd6fr0m226vzmijmwwhdakkp1hj1"; - authors = [ - "Alex Crichton " - ]; - dependencies = [ - { - name = "jobserver"; - packageId = "jobserver"; - optional = true; - usesDefaultFeatures = false; - } - { - name = "libc"; - packageId = "libc"; - optional = true; - usesDefaultFeatures = false; - target = { target, features }: (target."unix" or false); - } - { - name = "once_cell"; - packageId = "once_cell"; - optional = true; - } - ]; - features = { - "jobserver" = [ "dep:jobserver" ]; - "libc" = [ "dep:libc" ]; - "once_cell" = [ "dep:once_cell" ]; - "parallel" = [ "libc" "jobserver" "once_cell" ]; - }; - resolvedDefaultFeatures = [ "jobserver" "libc" "once_cell" "parallel" ]; - }; - "cfg-if" = rec { - crateName = "cfg-if"; - version = "1.0.0"; - edition = "2018"; - sha256 = "1za0vb97n4brpzpv8lsbnzmq5r8f2b0cpqqr0sy8h5bn751xxwds"; - libName = "cfg_if"; - authors = [ - "Alex Crichton " - ]; - features = { - "compiler_builtins" = [ "dep:compiler_builtins" ]; - "core" = [ "dep:core" ]; - "rustc-dep-of-std" = [ "core" "compiler_builtins" ]; - }; - }; - "chrono" = rec { - crateName = "chrono"; - version = "0.4.38"; - edition = "2021"; - sha256 = "009l8vc5p8750vn02z30mblg4pv2qhkbfizhfwmzc6vpy5nr67x2"; - dependencies = [ - { - name = "android-tzdata"; - packageId = "android-tzdata"; - optional = true; - target = { target, features }: ("android" == target."os" or null); - } - { - name = "iana-time-zone"; - packageId = "iana-time-zone"; - optional = true; - target = { target, features }: (target."unix" or false); - features = [ "fallback" ]; - } - { - name = "js-sys"; - packageId = "js-sys"; - optional = true; - target = { target, features }: (("wasm32" == target."arch" or null) && (!(("emscripten" == target."os" or null) || ("wasi" == target."os" or null)))); - } - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - } - { - name = "wasm-bindgen"; - packageId = "wasm-bindgen"; - optional = true; - target = { target, features }: (("wasm32" == target."arch" or null) && (!(("emscripten" == target."os" or null) || ("wasi" == target."os" or null)))); - } - { - name = "windows-targets"; - packageId = "windows-targets 0.52.5"; - optional = true; - target = { target, features }: (target."windows" or false); - } - ]; - features = { - "android-tzdata" = [ "dep:android-tzdata" ]; - "arbitrary" = [ "dep:arbitrary" ]; - "clock" = [ "winapi" "iana-time-zone" "android-tzdata" "now" ]; - "default" = [ "clock" "std" "oldtime" "wasmbind" ]; - "iana-time-zone" = [ "dep:iana-time-zone" ]; - "js-sys" = [ "dep:js-sys" ]; - "now" = [ "std" ]; - "pure-rust-locales" = [ "dep:pure-rust-locales" ]; - "rkyv" = [ "dep:rkyv" "rkyv/size_32" ]; - "rkyv-16" = [ "dep:rkyv" "rkyv?/size_16" ]; - "rkyv-32" = [ "dep:rkyv" "rkyv?/size_32" ]; - "rkyv-64" = [ "dep:rkyv" "rkyv?/size_64" ]; - "rkyv-validation" = [ "rkyv?/validation" ]; - "serde" = [ "dep:serde" ]; - "std" = [ "alloc" ]; - "unstable-locales" = [ "pure-rust-locales" ]; - "wasm-bindgen" = [ "dep:wasm-bindgen" ]; - "wasmbind" = [ "wasm-bindgen" "js-sys" ]; - "winapi" = [ "windows-targets" ]; - "windows-targets" = [ "dep:windows-targets" ]; - }; - resolvedDefaultFeatures = [ "alloc" "android-tzdata" "clock" "iana-time-zone" "js-sys" "now" "std" "wasm-bindgen" "wasmbind" "winapi" "windows-targets" ]; - }; - "clap" = rec { - crateName = "clap"; - version = "4.5.4"; - edition = "2021"; - crateBin = []; - sha256 = "1828wm9qws5gh2xnimnvmp2vria6d6hsxnqmhnm84dwjcxm0dg4h"; - dependencies = [ - { - name = "clap_builder"; - packageId = "clap_builder"; - usesDefaultFeatures = false; - } - { - name = "clap_derive"; - packageId = "clap_derive"; - optional = true; - } - ]; - features = { - "cargo" = [ "clap_builder/cargo" ]; - "color" = [ "clap_builder/color" ]; - "debug" = [ "clap_builder/debug" "clap_derive?/debug" ]; - "default" = [ "std" "color" "help" "usage" "error-context" "suggestions" ]; - "deprecated" = [ "clap_builder/deprecated" "clap_derive?/deprecated" ]; - "derive" = [ "dep:clap_derive" ]; - "env" = [ "clap_builder/env" ]; - "error-context" = [ "clap_builder/error-context" ]; - "help" = [ "clap_builder/help" ]; - "std" = [ "clap_builder/std" ]; - "string" = [ "clap_builder/string" ]; - "suggestions" = [ "clap_builder/suggestions" ]; - "unicode" = [ "clap_builder/unicode" ]; - "unstable-doc" = [ "clap_builder/unstable-doc" "derive" ]; - "unstable-styles" = [ "clap_builder/unstable-styles" ]; - "unstable-v5" = [ "clap_builder/unstable-v5" "clap_derive?/unstable-v5" "deprecated" ]; - "usage" = [ "clap_builder/usage" ]; - "wrap_help" = [ "clap_builder/wrap_help" ]; - }; - resolvedDefaultFeatures = [ "color" "default" "derive" "error-context" "help" "std" "suggestions" "usage" "wrap_help" ]; - }; - "clap_builder" = rec { - crateName = "clap_builder"; - version = "4.5.2"; - edition = "2021"; - sha256 = "1d7p4hph4fyhaphkf0v5zv0kq4lz25a9jq2f901yrq3afqp9w4mf"; - dependencies = [ - { - name = "anstream"; - packageId = "anstream"; - optional = true; - } - { - name = "anstyle"; - packageId = "anstyle"; - } - { - name = "clap_lex"; - packageId = "clap_lex"; - } - { - name = "strsim"; - packageId = "strsim"; - optional = true; - } - { - name = "terminal_size"; - packageId = "terminal_size"; - optional = true; - } - ]; - features = { - "color" = [ "dep:anstream" ]; - "debug" = [ "dep:backtrace" ]; - "default" = [ "std" "color" "help" "usage" "error-context" "suggestions" ]; - "std" = [ "anstyle/std" ]; - "suggestions" = [ "dep:strsim" "error-context" ]; - "unicode" = [ "dep:unicode-width" "dep:unicase" ]; - "unstable-doc" = [ "cargo" "wrap_help" "env" "unicode" "string" ]; - "unstable-styles" = [ "color" ]; - "unstable-v5" = [ "deprecated" ]; - "wrap_help" = [ "help" "dep:terminal_size" ]; - }; - resolvedDefaultFeatures = [ "color" "error-context" "help" "std" "suggestions" "usage" "wrap_help" ]; - }; - "clap_derive" = rec { - crateName = "clap_derive"; - version = "4.5.4"; - edition = "2021"; - sha256 = "0r2gs2p10pb435w52xzsgz2mmx5qd3qfkmk29y4mbz9ph11k30aj"; - procMacro = true; - dependencies = [ - { - name = "heck"; - packageId = "heck 0.5.0"; - } - { - name = "proc-macro2"; - packageId = "proc-macro2"; - } - { - name = "quote"; - packageId = "quote"; - } - { - name = "syn"; - packageId = "syn 2.0.66"; - features = [ "full" ]; - } - ]; - features = { - "raw-deprecated" = [ "deprecated" ]; - "unstable-v5" = [ "deprecated" ]; - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "clap_lex" = rec { - crateName = "clap_lex"; - version = "0.7.0"; - edition = "2021"; - sha256 = "1kh1sckgq71kay2rrr149pl9gbsrvyccsq6xm5xpnq0cxnyqzk4q"; - - }; - "colorchoice" = rec { - crateName = "colorchoice"; - version = "1.0.1"; - edition = "2021"; - sha256 = "08h4jsrd2j5k6lp1b9v5p1f1g7cmyzm4djsvb3ydywdb4hmqashb"; - - }; - "command_cad" = rec { - crateName = "command_cad"; - version = "0.6.0"; - edition = "2021"; - crateBin = [ - { - name = "command_cad"; - path = "src/main.rs"; - requiredFeatures = [ ]; - } - ]; - # We can't filter paths with references in Nix 2.4 - # See https://github.com/NixOS/nix/issues/5410 - src = if ((lib.versionOlder builtins.nixVersion "2.4pre20211007") || (lib.versionOlder "2.5" builtins.nixVersion )) - then lib.cleanSourceWith { filter = sourceFilter; src = ./.; } - else ./.; - dependencies = [ - { - name = "anyhow"; - packageId = "anyhow"; - } - { - name = "arrayvec"; - packageId = "arrayvec"; - } - { - name = "bezier-rs"; - packageId = "bezier-rs"; - } - { - name = "casey"; - packageId = "casey"; - } - { - name = "clap"; - packageId = "clap"; - features = [ "derive" "wrap_help" ]; - } - { - name = "common_data_types"; - packageId = "common_data_types"; - } - { - name = "compact_str"; - packageId = "compact_str"; - } - { - name = "const-str"; - packageId = "const-str"; - } - { - name = "enum_dispatch"; - packageId = "enum_dispatch"; - } - { - name = "enum_downcast"; - packageId = "enum_downcast"; - features = [ "derive" ]; - } - { - name = "fj-core"; - packageId = "fj-core"; - } - { - name = "fj-export"; - packageId = "fj-export"; - } - { - name = "fj-math"; - packageId = "fj-math"; - } - { - name = "fortuples"; - packageId = "fortuples"; - } - { - name = "git2"; - packageId = "git2"; - } - { - name = "glam"; - packageId = "glam"; - } - { - name = "imstr"; - packageId = "imstr"; - features = [ "std" "nom" ]; - } - { - name = "lazy_static"; - packageId = "lazy_static"; - } - { - name = "log"; - packageId = "log"; - } - { - name = "macros"; - packageId = "macros"; - } - { - name = "nalgebra"; - packageId = "nalgebra"; - } - { - name = "nom"; - packageId = "nom"; - } - { - name = "nom_locate"; - packageId = "nom_locate"; - } - { - name = "ouroboros"; - packageId = "ouroboros"; - } - { - name = "paste"; - packageId = "paste"; - } - { - name = "semver"; - packageId = "semver"; - features = [ "serde" ]; - } - { - name = "serde"; - packageId = "serde"; - features = [ "derive" ]; - } - { - name = "serde_json"; - packageId = "serde_json"; - } - { - name = "serde_yaml"; - packageId = "serde_yaml"; - } - { - name = "stderrlog"; - packageId = "stderrlog"; - } - { - name = "tempfile"; - packageId = "tempfile"; - } - { - name = "uom"; - packageId = "uom"; - } - { - name = "whoami"; - packageId = "whoami"; - } - ]; - buildDependencies = [ - { - name = "common_data_types"; - packageId = "common_data_types"; - } - { - name = "csv"; - packageId = "csv"; - } - { - name = "serde"; - packageId = "serde"; - features = [ "derive" ]; - } - { - name = "uneval"; - packageId = "uneval"; - } - ]; - - }; - "common_data_types" = rec { - crateName = "common_data_types"; - version = "0.1.0"; - edition = "2021"; - # We can't filter paths with references in Nix 2.4 - # See https://github.com/NixOS/nix/issues/5410 - src = if ((lib.versionOlder builtins.nixVersion "2.4pre20211007") || (lib.versionOlder "2.5" builtins.nixVersion )) - then lib.cleanSourceWith { filter = sourceFilter; src = ./crates/common_data_types; } - else ./crates/common_data_types; - dependencies = [ - { - name = "ordered-float"; - packageId = "ordered-float"; - } - { - name = "paste"; - packageId = "paste"; - } - { - name = "serde"; - packageId = "serde"; - features = [ "derive" ]; - } - ]; - - }; - "compact_str" = rec { - crateName = "compact_str"; - version = "0.7.1"; - edition = "2021"; - sha256 = "0gvvfc2c6pg1rwr2w36ra4674w3lzwg97vq2v6k791w30169qszq"; - authors = [ - "Parker Timmerman " - ]; - dependencies = [ - { - name = "castaway"; - packageId = "castaway"; - } - { - name = "cfg-if"; - packageId = "cfg-if"; - } - { - name = "itoa"; - packageId = "itoa"; - } - { - name = "ryu"; - packageId = "ryu"; - } - { - name = "static_assertions"; - packageId = "static_assertions"; - } - ]; - devDependencies = [ - { - name = "cfg-if"; - packageId = "cfg-if"; - } - ]; - features = { - "arbitrary" = [ "dep:arbitrary" ]; - "bytes" = [ "dep:bytes" ]; - "markup" = [ "dep:markup" ]; - "proptest" = [ "dep:proptest" ]; - "quickcheck" = [ "dep:quickcheck" ]; - "rkyv" = [ "dep:rkyv" ]; - "serde" = [ "dep:serde" ]; - "smallvec" = [ "dep:smallvec" ]; - }; - }; - "const-str" = rec { - crateName = "const-str"; - version = "0.5.7"; - edition = "2021"; - sha256 = "1agvan36a2fgks5w47kk8idym54rdk504p6q2nj8gf9v136cq61n"; - libName = "const_str"; - authors = [ - "Nugine " - ]; - features = { - "all" = [ "std" "proc" "regex" "http" "case" ]; - "case" = [ "proc" "const-str-proc-macro?/heck" ]; - "http" = [ "proc" "const-str-proc-macro?/http" ]; - "proc" = [ "dep:const-str-proc-macro" ]; - "regex" = [ "proc" "const-str-proc-macro?/regex" ]; - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "core-foundation-sys" = rec { - crateName = "core-foundation-sys"; - version = "0.8.6"; - edition = "2018"; - sha256 = "13w6sdf06r0hn7bx2b45zxsg1mm2phz34jikm6xc5qrbr6djpsh6"; - libName = "core_foundation_sys"; - authors = [ - "The Servo Project Developers" - ]; - features = { - "default" = [ "link" ]; - }; - resolvedDefaultFeatures = [ "default" "link" ]; - }; - "crc32fast" = rec { - crateName = "crc32fast"; - version = "1.4.2"; - edition = "2015"; - sha256 = "1czp7vif73b8xslr3c9yxysmh9ws2r8824qda7j47ffs9pcnjxx9"; - authors = [ - "Sam Rijs " - "Alex Crichton " - ]; - dependencies = [ - { - name = "cfg-if"; - packageId = "cfg-if"; - } - ]; - features = { - "default" = [ "std" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "crossbeam-utils" = rec { - crateName = "crossbeam-utils"; - version = "0.8.20"; - edition = "2021"; - sha256 = "100fksq5mm1n7zj242cclkw6yf7a4a8ix3lvpfkhxvdhbda9kv12"; - libName = "crossbeam_utils"; - features = { - "default" = [ "std" ]; - "loom" = [ "dep:loom" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "csv" = rec { - crateName = "csv"; - version = "1.3.0"; - edition = "2021"; - sha256 = "1zjrlycvn44fxd9m8nwy8x33r9ncgk0k3wvy4fnvb9rpsks4ymxc"; - authors = [ - "Andrew Gallant " - ]; - dependencies = [ - { - name = "csv-core"; - packageId = "csv-core"; - } - { - name = "itoa"; - packageId = "itoa"; - } - { - name = "ryu"; - packageId = "ryu"; - } - { - name = "serde"; - packageId = "serde"; - } - ]; - devDependencies = [ - { - name = "serde"; - packageId = "serde"; - features = [ "derive" ]; - } - ]; - - }; - "csv-core" = rec { - crateName = "csv-core"; - version = "0.1.11"; - edition = "2018"; - sha256 = "0w7s7qa60xb054rqddpyg53xq2b29sf3rbhcl8sbdx02g4yjpyjy"; - libName = "csv_core"; - authors = [ - "Andrew Gallant " - ]; - dependencies = [ - { - name = "memchr"; - packageId = "memchr"; - usesDefaultFeatures = false; - } - ]; - features = { - "libc" = [ "memchr/libc" ]; - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "decorum" = rec { - crateName = "decorum"; - version = "0.3.1"; - edition = "2018"; - sha256 = "1kz5zlh2j345vgr9fbs223wxgz0hd3jkndj91hzmqkx1r39mj5r8"; - authors = [ - "Sean Olson " - ]; - dependencies = [ - { - name = "approx"; - packageId = "approx 0.3.2"; - optional = true; - usesDefaultFeatures = false; - } - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - } - { - name = "serde"; - packageId = "serde"; - optional = true; - usesDefaultFeatures = false; - } - { - name = "serde_derive"; - packageId = "serde_derive"; - optional = true; - usesDefaultFeatures = false; - } - ]; - features = { - "approx" = [ "dep:approx" ]; - "default" = [ "approx" "serialize-serde" "std" ]; - "serde" = [ "dep:serde" ]; - "serde_derive" = [ "dep:serde_derive" ]; - "serialize-serde" = [ "serde" "serde_derive" ]; - "std" = [ "approx/std" "num-traits/std" ]; - }; - resolvedDefaultFeatures = [ "approx" "default" "serde" "serde_derive" "serialize-serde" "std" ]; - }; - "downcast-rs" = rec { - crateName = "downcast-rs"; - version = "1.2.1"; - edition = "2015"; - sha256 = "1lmrq383d1yszp7mg5i7i56b17x2lnn3kb91jwsq0zykvg2jbcvm"; - libName = "downcast_rs"; - authors = [ - "Ashish Myles " - "Runji Wang " - ]; - features = { - "default" = [ "std" ]; - }; - }; - "either" = rec { - crateName = "either"; - version = "1.12.0"; - edition = "2018"; - sha256 = "12xmhlrv5gfsraimh6xaxcmb0qh6cc7w7ap4sw40ky9wfm095jix"; - authors = [ - "bluss" - ]; - features = { - "default" = [ "use_std" ]; - "serde" = [ "dep:serde" ]; - }; - resolvedDefaultFeatures = [ "use_std" ]; - }; - "enum_dispatch" = rec { - crateName = "enum_dispatch"; - version = "0.3.13"; - edition = "2018"; - sha256 = "1kby2jz173ggg7wk41vjsskmkdyx7749ll8lhqhv6mb5qqmww65a"; - procMacro = true; - authors = [ - "Anton Lazarev " - ]; - dependencies = [ - { - name = "once_cell"; - packageId = "once_cell"; - } - { - name = "proc-macro2"; - packageId = "proc-macro2"; - } - { - name = "quote"; - packageId = "quote"; - } - { - name = "syn"; - packageId = "syn 2.0.66"; - features = [ "full" ]; - } - ]; - - }; - "enum_downcast" = rec { - crateName = "enum_downcast"; - version = "0.1.0"; - edition = "2021"; - sha256 = "0jlbrpffnrq6mgijii27gm6a3g14xags783ldzjlly8drdgh6cp5"; - dependencies = [ - { - name = "enum_downcast_derive"; - packageId = "enum_downcast_derive"; - optional = true; - } - ]; - features = { - "derive" = [ "enum_downcast_derive" ]; - "enum_downcast_derive" = [ "dep:enum_downcast_derive" ]; - }; - resolvedDefaultFeatures = [ "default" "derive" "enum_downcast_derive" ]; - }; - "enum_downcast_derive" = rec { - crateName = "enum_downcast_derive"; - version = "0.1.0"; - edition = "2021"; - sha256 = "0jk3gvzvhjdh4bvykm1j8hv41l6gm1kwgxxd2c1s2snqj5zris50"; - procMacro = true; - dependencies = [ - { - name = "proc-macro2"; - packageId = "proc-macro2"; - } - { - name = "quote"; - packageId = "quote"; - } - { - name = "syn"; - packageId = "syn 2.0.66"; - features = [ "full" "extra-traits" ]; - } - ]; - - }; - "equivalent" = rec { - crateName = "equivalent"; - version = "1.0.1"; - edition = "2015"; - sha256 = "1malmx5f4lkfvqasz319lq6gb3ddg19yzf9s8cykfsgzdmyq0hsl"; - - }; - "errno" = rec { - crateName = "errno"; - version = "0.3.9"; - edition = "2018"; - sha256 = "1fi0m0493maq1jygcf1bya9cymz2pc1mqxj26bdv7yjd37v5qk2k"; - authors = [ - "Chris Wong " - ]; - dependencies = [ - { - name = "libc"; - packageId = "libc"; - usesDefaultFeatures = false; - target = { target, features }: ("hermit" == target."os" or null); - } - { - name = "libc"; - packageId = "libc"; - usesDefaultFeatures = false; - target = { target, features }: ("wasi" == target."os" or null); - } - { - name = "libc"; - packageId = "libc"; - usesDefaultFeatures = false; - target = { target, features }: (target."unix" or false); - } - { - name = "windows-sys"; - packageId = "windows-sys 0.52.0"; - target = { target, features }: (target."windows" or false); - features = [ "Win32_Foundation" "Win32_System_Diagnostics_Debug" ]; - } - ]; - features = { - "default" = [ "std" ]; - "std" = [ "libc/std" ]; - }; - resolvedDefaultFeatures = [ "std" ]; - }; - "fastrand" = rec { - crateName = "fastrand"; - version = "2.1.0"; - edition = "2018"; - sha256 = "06p5d0rxq7by260m4ym9ial0bwgi0v42lrvhl6nm2g7h0h2m3h4z"; - authors = [ - "Stjepan Glavina " - ]; - features = { - "default" = [ "std" ]; - "getrandom" = [ "dep:getrandom" ]; - "js" = [ "std" "getrandom" ]; - "std" = [ "alloc" ]; - }; - resolvedDefaultFeatures = [ "alloc" "default" "std" ]; - }; - "fj-core" = rec { - crateName = "fj-core"; - version = "0.49.0"; - edition = "2021"; - workspace_member = null; - src = pkgs.fetchgit { - url = "https://github.com/hannobraun/fornjot.git"; - rev = "613779934166dea13b7f87c0d56f3952f9658ff9"; - sha256 = "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d"; - }; - libName = "fj_core"; - dependencies = [ - { - name = "fj-interop"; - packageId = "fj-interop"; - } - { - name = "fj-math"; - packageId = "fj-math"; - } - { - name = "itertools"; - packageId = "itertools 0.13.0"; - } - { - name = "parking_lot"; - packageId = "parking_lot"; - } - { - name = "robust"; - packageId = "robust"; - } - { - name = "spade"; - packageId = "spade"; - } - { - name = "thiserror"; - packageId = "thiserror"; - } - { - name = "type-map"; - packageId = "type-map"; - } - ]; - - }; - "fj-export" = rec { - crateName = "fj-export"; - version = "0.49.0"; - edition = "2021"; - workspace_member = null; - src = pkgs.fetchgit { - url = "https://github.com/hannobraun/fornjot.git"; - rev = "613779934166dea13b7f87c0d56f3952f9658ff9"; - sha256 = "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d"; - }; - libName = "fj_export"; - dependencies = [ - { - name = "fj-interop"; - packageId = "fj-interop"; - } - { - name = "fj-math"; - packageId = "fj-math"; - } - { - name = "stl"; - packageId = "stl"; - } - { - name = "thiserror"; - packageId = "thiserror"; - } - { - name = "threemf"; - packageId = "threemf"; - } - { - name = "wavefront_rs"; - packageId = "wavefront_rs"; - } - ]; - - }; - "fj-interop" = rec { - crateName = "fj-interop"; - version = "0.49.0"; - edition = "2021"; - workspace_member = null; - src = pkgs.fetchgit { - url = "https://github.com/hannobraun/fornjot.git"; - rev = "613779934166dea13b7f87c0d56f3952f9658ff9"; - sha256 = "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d"; - }; - libName = "fj_interop"; - dependencies = [ - { - name = "fj-math"; - packageId = "fj-math"; - } - ]; - - }; - "fj-math" = rec { - crateName = "fj-math"; - version = "0.49.0"; - edition = "2021"; - workspace_member = null; - src = pkgs.fetchgit { - url = "https://github.com/hannobraun/fornjot.git"; - rev = "613779934166dea13b7f87c0d56f3952f9658ff9"; - sha256 = "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d"; - }; - libName = "fj_math"; - dependencies = [ - { - name = "approx"; - packageId = "approx 0.5.1"; - } - { - name = "decorum"; - packageId = "decorum"; - } - { - name = "nalgebra"; - packageId = "nalgebra"; - } - { - name = "num-traits"; - packageId = "num-traits"; - } - { - name = "parry2d-f64"; - packageId = "parry2d-f64"; - } - { - name = "parry3d-f64"; - packageId = "parry3d-f64"; - } - { - name = "robust"; - packageId = "robust"; - } - ]; - - }; - "flate2" = rec { - crateName = "flate2"; - version = "1.0.30"; - edition = "2018"; - sha256 = "1bjx56n0wq5w7vsjn7b5rbmqiw0vc3mfzz1rl7i2jy0wzmy44m2z"; - authors = [ - "Alex Crichton " - "Josh Triplett " - ]; - dependencies = [ - { - name = "crc32fast"; - packageId = "crc32fast"; - } - { - name = "miniz_oxide"; - packageId = "miniz_oxide"; - optional = true; - usesDefaultFeatures = false; - features = [ "with-alloc" ]; - } - { - name = "miniz_oxide"; - packageId = "miniz_oxide"; - usesDefaultFeatures = false; - target = { target, features }: (("wasm32" == target."arch" or null) && (!("emscripten" == target."os" or null))); - features = [ "with-alloc" ]; - } - ]; - features = { - "any_zlib" = [ "any_impl" ]; - "cloudflare-zlib-sys" = [ "dep:cloudflare-zlib-sys" ]; - "cloudflare_zlib" = [ "any_zlib" "cloudflare-zlib-sys" ]; - "default" = [ "rust_backend" ]; - "libz-ng-sys" = [ "dep:libz-ng-sys" ]; - "libz-rs-sys" = [ "dep:libz-rs-sys" ]; - "libz-sys" = [ "dep:libz-sys" ]; - "miniz-sys" = [ "rust_backend" ]; - "miniz_oxide" = [ "dep:miniz_oxide" ]; - "rust_backend" = [ "miniz_oxide" "any_impl" ]; - "zlib" = [ "any_zlib" "libz-sys" ]; - "zlib-default" = [ "any_zlib" "libz-sys/default" ]; - "zlib-ng" = [ "any_zlib" "libz-ng-sys" ]; - "zlib-ng-compat" = [ "zlib" "libz-sys/zlib-ng" ]; - "zlib-rs" = [ "any_zlib" "libz-rs-sys" ]; - }; - resolvedDefaultFeatures = [ "any_impl" "miniz_oxide" "rust_backend" ]; - }; - "form_urlencoded" = rec { - crateName = "form_urlencoded"; - version = "1.2.1"; - edition = "2018"; - sha256 = "0milh8x7nl4f450s3ddhg57a3flcv6yq8hlkyk6fyr3mcb128dp1"; - authors = [ - "The rust-url developers" - ]; - dependencies = [ - { - name = "percent-encoding"; - packageId = "percent-encoding"; - usesDefaultFeatures = false; - } - ]; - features = { - "alloc" = [ "percent-encoding/alloc" ]; - "default" = [ "std" ]; - "std" = [ "alloc" "percent-encoding/std" ]; - }; - resolvedDefaultFeatures = [ "alloc" "default" "std" ]; - }; - "fortuples" = rec { - crateName = "fortuples"; - version = "0.9.1"; - edition = "2021"; - sha256 = "1kpam2ipawqhypc1fsvvnl993jnxa3ifavpvxnvw9jp9hy00lqw7"; - procMacro = true; - authors = [ - "Daniel Shiposha" - ]; - dependencies = [ - { - name = "proc-macro2"; - packageId = "proc-macro2"; - } - { - name = "quote"; - packageId = "quote"; - } - { - name = "syn"; - packageId = "syn 1.0.109"; - features = [ "full" ]; - } - ]; - features = { - }; - }; - "git2" = rec { - crateName = "git2"; - version = "0.18.3"; - edition = "2018"; - sha256 = "0w7gcq6v9kdlh0vcv27xrk09c1bhkarqhnp52pvnnximzrxnlbi3"; - authors = [ - "Josh Triplett " - "Alex Crichton " - ]; - dependencies = [ - { - name = "bitflags"; - packageId = "bitflags 2.5.0"; - } - { - name = "libc"; - packageId = "libc"; - } - { - name = "libgit2-sys"; - packageId = "libgit2-sys"; - } - { - name = "log"; - packageId = "log"; - } - { - name = "openssl-probe"; - packageId = "openssl-probe"; - optional = true; - target = { target, features }: ((target."unix" or false) && (!("macos" == target."os" or null))); - } - { - name = "openssl-sys"; - packageId = "openssl-sys"; - optional = true; - target = { target, features }: ((target."unix" or false) && (!("macos" == target."os" or null))); - } - { - name = "url"; - packageId = "url"; - } - ]; - features = { - "default" = [ "ssh" "https" "ssh_key_from_memory" ]; - "https" = [ "libgit2-sys/https" "openssl-sys" "openssl-probe" ]; - "openssl-probe" = [ "dep:openssl-probe" ]; - "openssl-sys" = [ "dep:openssl-sys" ]; - "ssh" = [ "libgit2-sys/ssh" ]; - "ssh_key_from_memory" = [ "libgit2-sys/ssh_key_from_memory" ]; - "vendored-libgit2" = [ "libgit2-sys/vendored" ]; - "vendored-openssl" = [ "openssl-sys/vendored" "libgit2-sys/vendored-openssl" ]; - "zlib-ng-compat" = [ "libgit2-sys/zlib-ng-compat" ]; - }; - resolvedDefaultFeatures = [ "default" "https" "openssl-probe" "openssl-sys" "ssh" "ssh_key_from_memory" ]; - }; - "glam" = rec { - crateName = "glam"; - version = "0.24.2"; - edition = "2021"; - sha256 = "0ibrq68ldg1gyynb5ss5hx0gr6p3397cfclh1xrl5prba4bqqhdm"; - authors = [ - "Cameron Hart " - ]; - dependencies = [ - { - name = "serde"; - packageId = "serde"; - optional = true; - usesDefaultFeatures = false; - } - ]; - features = { - "approx" = [ "dep:approx" ]; - "bytecheck" = [ "dep:bytecheck" ]; - "bytemuck" = [ "dep:bytemuck" ]; - "default" = [ "std" ]; - "libm" = [ "dep:libm" ]; - "mint" = [ "dep:mint" ]; - "rand" = [ "dep:rand" ]; - "rkyv" = [ "dep:rkyv" ]; - "serde" = [ "dep:serde" ]; - }; - resolvedDefaultFeatures = [ "default" "serde" "std" ]; - }; - "hashbrown" = rec { - crateName = "hashbrown"; - version = "0.14.5"; - edition = "2021"; - sha256 = "1wa1vy1xs3mp11bn3z9dv0jricgr6a2j0zkf1g19yz3vw4il89z5"; - authors = [ - "Amanieu d'Antras " - ]; - dependencies = [ - { - name = "ahash"; - packageId = "ahash"; - optional = true; - usesDefaultFeatures = false; - } - { - name = "allocator-api2"; - packageId = "allocator-api2"; - optional = true; - usesDefaultFeatures = false; - features = [ "alloc" ]; - } - ]; - features = { - "ahash" = [ "dep:ahash" ]; - "alloc" = [ "dep:alloc" ]; - "allocator-api2" = [ "dep:allocator-api2" ]; - "compiler_builtins" = [ "dep:compiler_builtins" ]; - "core" = [ "dep:core" ]; - "default" = [ "ahash" "inline-more" "allocator-api2" ]; - "equivalent" = [ "dep:equivalent" ]; - "nightly" = [ "allocator-api2?/nightly" "bumpalo/allocator_api" ]; - "rayon" = [ "dep:rayon" ]; - "rkyv" = [ "dep:rkyv" ]; - "rustc-dep-of-std" = [ "nightly" "core" "compiler_builtins" "alloc" "rustc-internal-api" ]; - "serde" = [ "dep:serde" ]; - }; - resolvedDefaultFeatures = [ "ahash" "allocator-api2" "default" "inline-more" "raw" ]; - }; - "heck 0.4.1" = rec { - crateName = "heck"; - version = "0.4.1"; - edition = "2018"; - sha256 = "1a7mqsnycv5z4z5vnv1k34548jzmc0ajic7c1j8jsaspnhw5ql4m"; - authors = [ - "Without Boats " - ]; - features = { - "unicode" = [ "unicode-segmentation" ]; - "unicode-segmentation" = [ "dep:unicode-segmentation" ]; - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "heck 0.5.0" = rec { - crateName = "heck"; - version = "0.5.0"; - edition = "2021"; - sha256 = "1sjmpsdl8czyh9ywl3qcsfsq9a307dg4ni2vnlwgnzzqhc4y0113"; - - }; - "hermit-abi" = rec { - crateName = "hermit-abi"; - version = "0.3.9"; - edition = "2021"; - sha256 = "092hxjbjnq5fmz66grd9plxd0sh6ssg5fhgwwwqbrzgzkjwdycfj"; - libName = "hermit_abi"; - authors = [ - "Stefan Lankes" - ]; - features = { - "alloc" = [ "dep:alloc" ]; - "compiler_builtins" = [ "dep:compiler_builtins" ]; - "core" = [ "dep:core" ]; - "rustc-dep-of-std" = [ "core" "alloc" "compiler_builtins/rustc-dep-of-std" ]; - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "iana-time-zone" = rec { - crateName = "iana-time-zone"; - version = "0.1.60"; - edition = "2018"; - sha256 = "0hdid5xz3jznm04lysjm3vi93h3c523w0hcc3xba47jl3ddbpzz7"; - libName = "iana_time_zone"; - authors = [ - "Andrew Straw " - "René Kijewski " - "Ryan Lopopolo " - ]; - dependencies = [ - { - name = "android_system_properties"; - packageId = "android_system_properties"; - target = { target, features }: ("android" == target."os" or null); - } - { - name = "core-foundation-sys"; - packageId = "core-foundation-sys"; - target = { target, features }: (("macos" == target."os" or null) || ("ios" == target."os" or null)); - } - { - name = "iana-time-zone-haiku"; - packageId = "iana-time-zone-haiku"; - target = { target, features }: ("haiku" == target."os" or null); - } - { - name = "js-sys"; - packageId = "js-sys"; - target = { target, features }: ("wasm32" == target."arch" or null); - } - { - name = "wasm-bindgen"; - packageId = "wasm-bindgen"; - target = { target, features }: ("wasm32" == target."arch" or null); - } - { - name = "windows-core"; - packageId = "windows-core"; - target = { target, features }: ("windows" == target."os" or null); - } - ]; - features = { - }; - resolvedDefaultFeatures = [ "fallback" ]; - }; - "iana-time-zone-haiku" = rec { - crateName = "iana-time-zone-haiku"; - version = "0.1.2"; - edition = "2018"; - sha256 = "17r6jmj31chn7xs9698r122mapq85mfnv98bb4pg6spm0si2f67k"; - libName = "iana_time_zone_haiku"; - authors = [ - "René Kijewski " - ]; - buildDependencies = [ - { - name = "cc"; - packageId = "cc"; - } - ]; - - }; - "idna" = rec { - crateName = "idna"; - version = "0.5.0"; - edition = "2018"; - sha256 = "1xhjrcjqq0l5bpzvdgylvpkgk94panxgsirzhjnnqfdgc4a9nkb3"; - authors = [ - "The rust-url developers" - ]; - dependencies = [ - { - name = "unicode-bidi"; - packageId = "unicode-bidi"; - usesDefaultFeatures = false; - features = [ "hardcoded-data" ]; - } - { - name = "unicode-normalization"; - packageId = "unicode-normalization"; - usesDefaultFeatures = false; - } - ]; - features = { - "default" = [ "std" ]; - "std" = [ "alloc" "unicode-bidi/std" "unicode-normalization/std" ]; - }; - resolvedDefaultFeatures = [ "alloc" "default" "std" ]; - }; - "imstr" = rec { - crateName = "imstr"; - version = "0.2.0"; - edition = "2021"; - workspace_member = null; - src = pkgs.fetchgit { - url = "https://github.com/IamTheCarl/imstr"; - rev = "a679d58d06f06a8e87c8640922aa157a0f86693f"; - sha256 = "0csqvjlgi1wvrfhidy0khivwx5p3h0rhwzz5r5zsx0zzwn7qpn2d"; - }; - authors = [ - "Patrick Elsen " - ]; - dependencies = [ - { - name = "nom"; - packageId = "nom"; - optional = true; - } - ]; - features = { - "nom" = [ "dep:nom" ]; - "peg" = [ "dep:peg-runtime" ]; - "serde" = [ "dep:serde" ]; - }; - resolvedDefaultFeatures = [ "default" "nom" "std" ]; - }; - "indexmap" = rec { - crateName = "indexmap"; - version = "2.2.6"; - edition = "2021"; - sha256 = "09hgwi2ig0wyj5rjziia76zmhgfj95k0jb4ic3iiawm4vlavg3qn"; - dependencies = [ - { - name = "equivalent"; - packageId = "equivalent"; - usesDefaultFeatures = false; - } - { - name = "hashbrown"; - packageId = "hashbrown"; - usesDefaultFeatures = false; - features = [ "raw" ]; - } - ]; - features = { - "arbitrary" = [ "dep:arbitrary" ]; - "borsh" = [ "dep:borsh" ]; - "default" = [ "std" ]; - "quickcheck" = [ "dep:quickcheck" ]; - "rayon" = [ "dep:rayon" ]; - "rustc-rayon" = [ "dep:rustc-rayon" ]; - "serde" = [ "dep:serde" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "is-terminal" = rec { - crateName = "is-terminal"; - version = "0.4.12"; - edition = "2018"; - sha256 = "12vk6g0f94zlxl6mdh5gc4jdjb469n9k9s7y3vb0iml05gpzagzj"; - libName = "is_terminal"; - authors = [ - "softprops " - "Dan Gohman " - ]; - dependencies = [ - { - name = "hermit-abi"; - packageId = "hermit-abi"; - target = { target, features }: ("hermit" == target."os" or null); - } - { - name = "libc"; - packageId = "libc"; - target = { target, features }: ((target."unix" or false) || ("wasi" == target."os" or null)); - } - { - name = "windows-sys"; - packageId = "windows-sys 0.52.0"; - target = { target, features }: (target."windows" or false); - features = [ "Win32_Foundation" "Win32_Storage_FileSystem" "Win32_System_Console" ]; - } - ]; - devDependencies = [ - { - name = "libc"; - packageId = "libc"; - target = {target, features}: ((target."unix" or false) || ("wasi" == target."os" or null)); - } - ]; - - }; - "is_terminal_polyfill" = rec { - crateName = "is_terminal_polyfill"; - version = "1.70.0"; - edition = "2021"; - sha256 = "0018q5cf3rifbnzfc1w1z1xcx9c6i7xlywp2n0fw4limq1vqaizq"; - features = { - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "itertools 0.12.1" = rec { - crateName = "itertools"; - version = "0.12.1"; - edition = "2018"; - sha256 = "0s95jbb3ndj1lvfxyq5wanc0fm0r6hg6q4ngb92qlfdxvci10ads"; - authors = [ - "bluss" - ]; - dependencies = [ - { - name = "either"; - packageId = "either"; - usesDefaultFeatures = false; - } - ]; - features = { - "default" = [ "use_std" ]; - "use_std" = [ "use_alloc" "either/use_std" ]; - }; - resolvedDefaultFeatures = [ "default" "use_alloc" "use_std" ]; - }; - "itertools 0.13.0" = rec { - crateName = "itertools"; - version = "0.13.0"; - edition = "2018"; - sha256 = "11hiy3qzl643zcigknclh446qb9zlg4dpdzfkjaa9q9fqpgyfgj1"; - authors = [ - "bluss" - ]; - dependencies = [ - { - name = "either"; - packageId = "either"; - usesDefaultFeatures = false; - } - ]; - features = { - "default" = [ "use_std" ]; - "use_std" = [ "use_alloc" "either/use_std" ]; - }; - resolvedDefaultFeatures = [ "default" "use_alloc" "use_std" ]; - }; - "itoa" = rec { - crateName = "itoa"; - version = "1.0.11"; - edition = "2018"; - sha256 = "0nv9cqjwzr3q58qz84dcz63ggc54yhf1yqar1m858m1kfd4g3wa9"; - authors = [ - "David Tolnay " - ]; - features = { - "no-panic" = [ "dep:no-panic" ]; - }; - }; - "jobserver" = rec { - crateName = "jobserver"; - version = "0.1.31"; - edition = "2021"; - sha256 = "0vnyfxr5gm03j3lpnd1zswnyvqa40kbssy08pz2m35salfm9kc6j"; - authors = [ - "Alex Crichton " - ]; - dependencies = [ - { - name = "libc"; - packageId = "libc"; - target = { target, features }: (target."unix" or false); - } - ]; - - }; - "js-sys" = rec { - crateName = "js-sys"; - version = "0.3.69"; - edition = "2018"; - sha256 = "0v99rz97asnzapb0jsc3jjhvxpfxr7h7qd97yqyrf9i7viimbh99"; - libName = "js_sys"; - authors = [ - "The wasm-bindgen Developers" - ]; - dependencies = [ - { - name = "wasm-bindgen"; - packageId = "wasm-bindgen"; - } - ]; - - }; - "lazy_static" = rec { - crateName = "lazy_static"; - version = "1.4.0"; - edition = "2015"; - sha256 = "0in6ikhw8mgl33wjv6q6xfrb5b9jr16q8ygjy803fay4zcisvaz2"; - authors = [ - "Marvin Löbel " - ]; - features = { - "spin" = [ "dep:spin" ]; - "spin_no_std" = [ "spin" ]; - }; - }; - "libc" = rec { - crateName = "libc"; - version = "0.2.155"; - edition = "2015"; - sha256 = "0z44c53z54znna8n322k5iwg80arxxpdzjj5260pxxzc9a58icwp"; - authors = [ - "The Rust Project Developers" - ]; - features = { - "default" = [ "std" ]; - "rustc-dep-of-std" = [ "align" "rustc-std-workspace-core" ]; - "rustc-std-workspace-core" = [ "dep:rustc-std-workspace-core" ]; - "use_std" = [ "std" ]; - }; - resolvedDefaultFeatures = [ "default" "extra_traits" "std" ]; - }; - "libgit2-sys" = rec { - crateName = "libgit2-sys"; - version = "0.16.2+1.7.2"; - edition = "2018"; - links = "git2"; - sha256 = "1s149nkximw3n42925rp0jax1sf1zmf8gpcim2g9sp7fnkc2chgf"; - libName = "libgit2_sys"; - libPath = "lib.rs"; - authors = [ - "Josh Triplett " - "Alex Crichton " - ]; - dependencies = [ - { - name = "libc"; - packageId = "libc"; - } - { - name = "libssh2-sys"; - packageId = "libssh2-sys"; - optional = true; - } - { - name = "libz-sys"; - packageId = "libz-sys"; - usesDefaultFeatures = false; - features = [ "libc" ]; - } - { - name = "openssl-sys"; - packageId = "openssl-sys"; - optional = true; - target = { target, features }: (target."unix" or false); - } - ]; - buildDependencies = [ - { - name = "cc"; - packageId = "cc"; - features = [ "parallel" ]; - } - { - name = "pkg-config"; - packageId = "pkg-config"; - } - ]; - features = { - "https" = [ "openssl-sys" ]; - "libssh2-sys" = [ "dep:libssh2-sys" ]; - "openssl-sys" = [ "dep:openssl-sys" ]; - "ssh" = [ "libssh2-sys" ]; - "vendored-openssl" = [ "openssl-sys/vendored" ]; - "zlib-ng-compat" = [ "libz-sys/zlib-ng" "libssh2-sys?/zlib-ng-compat" ]; - }; - resolvedDefaultFeatures = [ "https" "libssh2-sys" "openssl-sys" "ssh" "ssh_key_from_memory" ]; - }; - "libm" = rec { - crateName = "libm"; - version = "0.2.8"; - edition = "2018"; - sha256 = "0n4hk1rs8pzw8hdfmwn96c4568s93kfxqgcqswr7sajd2diaihjf"; - authors = [ - "Jorge Aparicio " - ]; - features = { - "musl-reference-tests" = [ "rand" ]; - "rand" = [ "dep:rand" ]; - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "libssh2-sys" = rec { - crateName = "libssh2-sys"; - version = "0.3.0"; - edition = "2015"; - links = "ssh2"; - sha256 = "1vkidqw5ll71ynqc93hgcq62iqkklzb5268zffd13ql7nwqa1j1d"; - libName = "libssh2_sys"; - libPath = "lib.rs"; - authors = [ - "Alex Crichton " - "Wez Furlong " - "Matteo Bigoi " - ]; - dependencies = [ - { - name = "libc"; - packageId = "libc"; - } - { - name = "libz-sys"; - packageId = "libz-sys"; - usesDefaultFeatures = false; - features = [ "libc" ]; - } - { - name = "openssl-sys"; - packageId = "openssl-sys"; - target = { target, features }: (target."unix" or false); - } - { - name = "openssl-sys"; - packageId = "openssl-sys"; - optional = true; - target = { target, features }: (target."windows" or false); - } - ]; - buildDependencies = [ - { - name = "cc"; - packageId = "cc"; - } - { - name = "pkg-config"; - packageId = "pkg-config"; - } - { - name = "vcpkg"; - packageId = "vcpkg"; - target = {target, features}: ("msvc" == target."env" or null); - } - ]; - features = { - "openssl-on-win32" = [ "openssl-sys" ]; - "openssl-sys" = [ "dep:openssl-sys" ]; - "vendored-openssl" = [ "openssl-sys/vendored" ]; - "zlib-ng-compat" = [ "libz-sys/zlib-ng" ]; - }; - }; - "libz-sys" = rec { - crateName = "libz-sys"; - version = "1.1.18"; - edition = "2018"; - links = "z"; - sha256 = "0bpqmfzvijbrqs29vphnafjz834lpz6pabbsnf85rqppb9pa4pf1"; - libName = "libz_sys"; - authors = [ - "Alex Crichton " - "Josh Triplett " - "Sebastian Thiel " - ]; - dependencies = [ - { - name = "libc"; - packageId = "libc"; - optional = true; - } - ]; - buildDependencies = [ - { - name = "cc"; - packageId = "cc"; - } - { - name = "pkg-config"; - packageId = "pkg-config"; - } - { - name = "vcpkg"; - packageId = "vcpkg"; - } - ]; - features = { - "cmake" = [ "dep:cmake" ]; - "default" = [ "libc" "stock-zlib" ]; - "libc" = [ "dep:libc" ]; - "zlib-ng" = [ "libc" "cmake" ]; - "zlib-ng-no-cmake-experimental-community-maintained" = [ "libc" ]; - }; - resolvedDefaultFeatures = [ "libc" ]; - }; - "linux-raw-sys" = rec { - crateName = "linux-raw-sys"; - version = "0.4.14"; - edition = "2021"; - sha256 = "12gsjgbhhjwywpqcrizv80vrp7p7grsz5laqq773i33wphjsxcvq"; - libName = "linux_raw_sys"; - authors = [ - "Dan Gohman " - ]; - features = { - "compiler_builtins" = [ "dep:compiler_builtins" ]; - "core" = [ "dep:core" ]; - "default" = [ "std" "general" "errno" ]; - "rustc-dep-of-std" = [ "core" "compiler_builtins" "no_std" ]; - }; - resolvedDefaultFeatures = [ "elf" "errno" "general" "ioctl" "no_std" ]; - }; - "lock_api" = rec { - crateName = "lock_api"; - version = "0.4.12"; - edition = "2021"; - sha256 = "05qvxa6g27yyva25a5ghsg85apdxkvr77yhkyhapj6r8vnf8pbq7"; - authors = [ - "Amanieu d'Antras " - ]; - dependencies = [ - { - name = "scopeguard"; - packageId = "scopeguard"; - usesDefaultFeatures = false; - } - ]; - buildDependencies = [ - { - name = "autocfg"; - packageId = "autocfg"; - } - ]; - features = { - "default" = [ "atomic_usize" ]; - "owning_ref" = [ "dep:owning_ref" ]; - "serde" = [ "dep:serde" ]; - }; - resolvedDefaultFeatures = [ "atomic_usize" "default" ]; - }; - "log" = rec { - crateName = "log"; - version = "0.4.21"; - edition = "2021"; - sha256 = "074hldq1q8rlzq2s2qa8f25hj4s3gpw71w64vdwzjd01a4g8rvch"; - authors = [ - "The Rust Project Developers" - ]; - features = { - "kv_serde" = [ "kv_std" "value-bag/serde" "serde" ]; - "kv_std" = [ "std" "kv" "value-bag/error" ]; - "kv_sval" = [ "kv" "value-bag/sval" "sval" "sval_ref" ]; - "kv_unstable" = [ "kv" "value-bag" ]; - "kv_unstable_serde" = [ "kv_serde" "kv_unstable_std" ]; - "kv_unstable_std" = [ "kv_std" "kv_unstable" ]; - "kv_unstable_sval" = [ "kv_sval" "kv_unstable" ]; - "serde" = [ "dep:serde" ]; - "sval" = [ "dep:sval" ]; - "sval_ref" = [ "dep:sval_ref" ]; - "value-bag" = [ "dep:value-bag" ]; - }; - resolvedDefaultFeatures = [ "std" ]; - }; - "macros" = rec { - crateName = "macros"; - version = "0.1.0"; - edition = "2021"; - # We can't filter paths with references in Nix 2.4 - # See https://github.com/NixOS/nix/issues/5410 - src = if ((lib.versionOlder builtins.nixVersion "2.4pre20211007") || (lib.versionOlder "2.5" builtins.nixVersion )) - then lib.cleanSourceWith { filter = sourceFilter; src = ./crates/macros; } - else ./crates/macros; - procMacro = true; - dependencies = [ - { - name = "proc-macro2"; - packageId = "proc-macro2"; - } - { - name = "quote"; - packageId = "quote"; - } - { - name = "syn"; - packageId = "syn 2.0.66"; - features = [ "derive" ]; - } - ]; - - }; - "matrixmultiply" = rec { - crateName = "matrixmultiply"; - version = "0.3.8"; - edition = "2018"; - sha256 = "1whgrp8ph7904aslqx87h9qm0ks4pxdj2nysffmrhiys6v7w2x3m"; - authors = [ - "bluss" - "R. Janis Goldschmidt" - ]; - dependencies = [ - { - name = "rawpointer"; - packageId = "rawpointer"; - } - ]; - buildDependencies = [ - { - name = "autocfg"; - packageId = "autocfg"; - } - ]; - features = { - "default" = [ "std" ]; - "num_cpus" = [ "dep:num_cpus" ]; - "once_cell" = [ "dep:once_cell" ]; - "thread-tree" = [ "dep:thread-tree" ]; - "threading" = [ "thread-tree" "std" "once_cell" "num_cpus" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "memchr" = rec { - crateName = "memchr"; - version = "2.7.2"; - edition = "2021"; - sha256 = "07bcqxb0vx4ji0648ny5xsicjnpma95x1n07v7mi7jrhsz2l11kc"; - authors = [ - "Andrew Gallant " - "bluss" - ]; - features = { - "compiler_builtins" = [ "dep:compiler_builtins" ]; - "core" = [ "dep:core" ]; - "default" = [ "std" ]; - "logging" = [ "dep:log" ]; - "rustc-dep-of-std" = [ "core" "compiler_builtins" ]; - "std" = [ "alloc" ]; - "use_std" = [ "std" ]; - }; - resolvedDefaultFeatures = [ "alloc" "default" "std" "use_std" ]; - }; - "minimal-lexical" = rec { - crateName = "minimal-lexical"; - version = "0.2.1"; - edition = "2018"; - sha256 = "16ppc5g84aijpri4jzv14rvcnslvlpphbszc7zzp6vfkddf4qdb8"; - libName = "minimal_lexical"; - authors = [ - "Alex Huszagh " - ]; - features = { - "default" = [ "std" ]; - }; - resolvedDefaultFeatures = [ "std" ]; - }; - "miniz_oxide" = rec { - crateName = "miniz_oxide"; - version = "0.7.3"; - edition = "2018"; - sha256 = "1bndap8kj8ihlaz23a5cq0ihc09xh3c1m4ip5dbnpilmw4gx1pw7"; - authors = [ - "Frommi " - "oyvindln " - ]; - dependencies = [ - { - name = "adler"; - packageId = "adler"; - usesDefaultFeatures = false; - } - ]; - features = { - "alloc" = [ "dep:alloc" ]; - "compiler_builtins" = [ "dep:compiler_builtins" ]; - "core" = [ "dep:core" ]; - "default" = [ "with-alloc" ]; - "rustc-dep-of-std" = [ "core" "alloc" "compiler_builtins" "adler/rustc-dep-of-std" ]; - "simd" = [ "simd-adler32" ]; - "simd-adler32" = [ "dep:simd-adler32" ]; - }; - resolvedDefaultFeatures = [ "with-alloc" ]; - }; - "nalgebra" = rec { - crateName = "nalgebra"; - version = "0.32.5"; - edition = "2018"; - sha256 = "1vx210cjajqmrkrlr1ls7s67pb7iy3z0z9nslgfll9939y6r191y"; - authors = [ - "Sébastien Crozet " - ]; - dependencies = [ - { - name = "approx"; - packageId = "approx 0.5.1"; - usesDefaultFeatures = false; - } - { - name = "matrixmultiply"; - packageId = "matrixmultiply"; - optional = true; - } - { - name = "nalgebra-macros"; - packageId = "nalgebra-macros"; - optional = true; - } - { - name = "num-complex"; - packageId = "num-complex"; - usesDefaultFeatures = false; - } - { - name = "num-rational"; - packageId = "num-rational"; - usesDefaultFeatures = false; - } - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - } - { - name = "simba"; - packageId = "simba"; - usesDefaultFeatures = false; - } - { - name = "typenum"; - packageId = "typenum"; - } - ]; - features = { - "alga" = [ "dep:alga" ]; - "arbitrary" = [ "quickcheck" ]; - "bytemuck" = [ "dep:bytemuck" ]; - "compare" = [ "matrixcompare-core" ]; - "convert-bytemuck" = [ "bytemuck" ]; - "convert-glam014" = [ "glam014" ]; - "convert-glam015" = [ "glam015" ]; - "convert-glam016" = [ "glam016" ]; - "convert-glam017" = [ "glam017" ]; - "convert-glam018" = [ "glam018" ]; - "convert-glam019" = [ "glam019" ]; - "convert-glam020" = [ "glam020" ]; - "convert-glam021" = [ "glam021" ]; - "convert-glam022" = [ "glam022" ]; - "convert-glam023" = [ "glam023" ]; - "convert-glam024" = [ "glam024" ]; - "convert-glam025" = [ "glam025" ]; - "convert-mint" = [ "mint" ]; - "cuda" = [ "cust_core" "simba/cuda" ]; - "cust_core" = [ "dep:cust_core" ]; - "debug" = [ "approx/num-complex" "rand" ]; - "default" = [ "std" "macros" ]; - "glam014" = [ "dep:glam014" ]; - "glam015" = [ "dep:glam015" ]; - "glam016" = [ "dep:glam016" ]; - "glam017" = [ "dep:glam017" ]; - "glam018" = [ "dep:glam018" ]; - "glam019" = [ "dep:glam019" ]; - "glam020" = [ "dep:glam020" ]; - "glam021" = [ "dep:glam021" ]; - "glam022" = [ "dep:glam022" ]; - "glam023" = [ "dep:glam023" ]; - "glam024" = [ "dep:glam024" ]; - "glam025" = [ "dep:glam025" ]; - "io" = [ "pest" "pest_derive" ]; - "libm" = [ "simba/libm" ]; - "libm-force" = [ "simba/libm_force" ]; - "macros" = [ "nalgebra-macros" ]; - "matrixcompare-core" = [ "dep:matrixcompare-core" ]; - "matrixmultiply" = [ "dep:matrixmultiply" ]; - "mint" = [ "dep:mint" ]; - "nalgebra-macros" = [ "dep:nalgebra-macros" ]; - "pest" = [ "dep:pest" ]; - "pest_derive" = [ "dep:pest_derive" ]; - "proptest" = [ "dep:proptest" ]; - "proptest-support" = [ "proptest" ]; - "quickcheck" = [ "dep:quickcheck" ]; - "rand" = [ "rand-no-std" "rand-package/std" "rand-package/std_rng" "rand_distr" ]; - "rand-no-std" = [ "rand-package" ]; - "rand-package" = [ "dep:rand-package" ]; - "rand_distr" = [ "dep:rand_distr" ]; - "rayon" = [ "dep:rayon" ]; - "rkyv" = [ "dep:rkyv" ]; - "rkyv-safe-deser" = [ "rkyv-serialize" "rkyv/validation" ]; - "rkyv-serialize" = [ "rkyv-serialize-no-std" "rkyv/std" "rkyv/validation" ]; - "rkyv-serialize-no-std" = [ "rkyv/size_32" ]; - "serde" = [ "dep:serde" ]; - "serde-serialize" = [ "serde-serialize-no-std" "serde/std" ]; - "serde-serialize-no-std" = [ "serde" "num-complex/serde" ]; - "std" = [ "matrixmultiply" "simba/std" ]; - }; - resolvedDefaultFeatures = [ "default" "libm" "macros" "matrixmultiply" "nalgebra-macros" "std" ]; - }; - "nalgebra-macros" = rec { - crateName = "nalgebra-macros"; - version = "0.2.1"; - edition = "2018"; - sha256 = "166rzbzi1hcyjfvwxmrdimrcmflvxxifjfkqxxkdjfnhcznilxli"; - procMacro = true; - libName = "nalgebra_macros"; - authors = [ - "Andreas Longva" - "Sébastien Crozet " - ]; - dependencies = [ - { - name = "proc-macro2"; - packageId = "proc-macro2"; - } - { - name = "quote"; - packageId = "quote"; - } - { - name = "syn"; - packageId = "syn 1.0.109"; - features = [ "full" ]; - } - ]; - - }; - "nom" = rec { - crateName = "nom"; - version = "7.1.3"; - edition = "2018"; - sha256 = "0jha9901wxam390jcf5pfa0qqfrgh8li787jx2ip0yk5b8y9hwyj"; - authors = [ - "contact@geoffroycouprie.com" - ]; - dependencies = [ - { - name = "memchr"; - packageId = "memchr"; - usesDefaultFeatures = false; - } - { - name = "minimal-lexical"; - packageId = "minimal-lexical"; - usesDefaultFeatures = false; - } - ]; - features = { - "default" = [ "std" ]; - "std" = [ "alloc" "memchr/std" "minimal-lexical/std" ]; - }; - resolvedDefaultFeatures = [ "alloc" "default" "std" ]; - }; - "nom_locate" = rec { - crateName = "nom_locate"; - version = "4.2.0"; - edition = "2018"; - sha256 = "1wx87c2pm84h63rb4rsjrqzgx574x1zy93av1jk3swdhag086g0y"; - authors = [ - "Florent FAYOLLE " - "Christopher Durham " - "Valentin Lorentz " - ]; - dependencies = [ - { - name = "bytecount"; - packageId = "bytecount"; - } - { - name = "memchr"; - packageId = "memchr"; - usesDefaultFeatures = false; - } - { - name = "nom"; - packageId = "nom"; - usesDefaultFeatures = false; - } - ]; - features = { - "alloc" = [ "nom/alloc" ]; - "default" = [ "std" ]; - "generic-simd" = [ "bytecount/generic-simd" ]; - "runtime-dispatch-simd" = [ "bytecount/runtime-dispatch-simd" ]; - "stable-deref-trait" = [ "stable_deref_trait" ]; - "stable_deref_trait" = [ "dep:stable_deref_trait" ]; - "std" = [ "nom/std" "alloc" "memchr/use_std" ]; - }; - resolvedDefaultFeatures = [ "alloc" "default" "std" ]; - }; - "num-complex" = rec { - crateName = "num-complex"; - version = "0.4.6"; - edition = "2021"; - sha256 = "15cla16mnw12xzf5g041nxbjjm9m85hdgadd5dl5d0b30w9qmy3k"; - libName = "num_complex"; - authors = [ - "The Rust Project Developers" - ]; - dependencies = [ - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - features = [ "i128" ]; - } - ]; - features = { - "bytecheck" = [ "dep:bytecheck" ]; - "bytemuck" = [ "dep:bytemuck" ]; - "default" = [ "std" ]; - "libm" = [ "num-traits/libm" ]; - "rand" = [ "dep:rand" ]; - "rkyv" = [ "dep:rkyv" ]; - "serde" = [ "dep:serde" ]; - "std" = [ "num-traits/std" ]; - }; - }; - "num-derive" = rec { - crateName = "num-derive"; - version = "0.4.2"; - edition = "2021"; - sha256 = "00p2am9ma8jgd2v6xpsz621wc7wbn1yqi71g15gc3h67m7qmafgd"; - procMacro = true; - libName = "num_derive"; - authors = [ - "The Rust Project Developers" - ]; - dependencies = [ - { - name = "proc-macro2"; - packageId = "proc-macro2"; - } - { - name = "quote"; - packageId = "quote"; - } - { - name = "syn"; - packageId = "syn 2.0.66"; - } - ]; - - }; - "num-integer" = rec { - crateName = "num-integer"; - version = "0.1.46"; - edition = "2018"; - sha256 = "13w5g54a9184cqlbsq80rnxw4jj4s0d8wv75jsq5r2lms8gncsbr"; - libName = "num_integer"; - authors = [ - "The Rust Project Developers" - ]; - dependencies = [ - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - features = [ "i128" ]; - } - ]; - features = { - "default" = [ "std" ]; - "std" = [ "num-traits/std" ]; - }; - resolvedDefaultFeatures = [ "i128" ]; - }; - "num-rational" = rec { - crateName = "num-rational"; - version = "0.4.2"; - edition = "2021"; - sha256 = "093qndy02817vpgcqjnj139im3jl7vkq4h68kykdqqh577d18ggq"; - libName = "num_rational"; - authors = [ - "The Rust Project Developers" - ]; - dependencies = [ - { - name = "num-integer"; - packageId = "num-integer"; - usesDefaultFeatures = false; - features = [ "i128" ]; - } - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - features = [ "i128" ]; - } - ]; - features = { - "default" = [ "num-bigint" "std" ]; - "num-bigint" = [ "dep:num-bigint" ]; - "num-bigint-std" = [ "num-bigint/std" ]; - "serde" = [ "dep:serde" ]; - "std" = [ "num-bigint?/std" "num-integer/std" "num-traits/std" ]; - }; - }; - "num-traits" = rec { - crateName = "num-traits"; - version = "0.2.19"; - edition = "2021"; - sha256 = "0h984rhdkkqd4ny9cif7y2azl3xdfb7768hb9irhpsch4q3gq787"; - libName = "num_traits"; - authors = [ - "The Rust Project Developers" - ]; - dependencies = [ - { - name = "libm"; - packageId = "libm"; - optional = true; - } - ]; - buildDependencies = [ - { - name = "autocfg"; - packageId = "autocfg"; - } - ]; - features = { - "default" = [ "std" ]; - "libm" = [ "dep:libm" ]; - }; - resolvedDefaultFeatures = [ "default" "i128" "libm" "std" ]; - }; - "once_cell" = rec { - crateName = "once_cell"; - version = "1.19.0"; - edition = "2021"; - sha256 = "14kvw7px5z96dk4dwdm1r9cqhhy2cyj1l5n5b29mynbb8yr15nrz"; - authors = [ - "Aleksey Kladov " - ]; - features = { - "alloc" = [ "race" ]; - "atomic-polyfill" = [ "critical-section" ]; - "critical-section" = [ "dep:critical-section" "portable-atomic" ]; - "default" = [ "std" ]; - "parking_lot" = [ "dep:parking_lot_core" ]; - "portable-atomic" = [ "dep:portable-atomic" ]; - "std" = [ "alloc" ]; - }; - resolvedDefaultFeatures = [ "alloc" "default" "race" "std" ]; - }; - "openssl-probe" = rec { - crateName = "openssl-probe"; - version = "0.1.5"; - edition = "2015"; - sha256 = "1kq18qm48rvkwgcggfkqq6pm948190czqc94d6bm2sir5hq1l0gz"; - libName = "openssl_probe"; - authors = [ - "Alex Crichton " - ]; - - }; - "openssl-sys" = rec { - crateName = "openssl-sys"; - version = "0.9.102"; - edition = "2018"; - links = "openssl"; - sha256 = "18jzni7xzdcqwf9r8kp6j46abrxqn82dvc2ylf9kij7varyn75y5"; - build = "build/main.rs"; - libName = "openssl_sys"; - authors = [ - "Alex Crichton " - "Steven Fackler " - ]; - dependencies = [ - { - name = "libc"; - packageId = "libc"; - } - ]; - buildDependencies = [ - { - name = "cc"; - packageId = "cc"; - } - { - name = "pkg-config"; - packageId = "pkg-config"; - } - { - name = "vcpkg"; - packageId = "vcpkg"; - } - ]; - features = { - "bindgen" = [ "dep:bindgen" ]; - "bssl-sys" = [ "dep:bssl-sys" ]; - "openssl-src" = [ "dep:openssl-src" ]; - "unstable_boringssl" = [ "bssl-sys" ]; - "vendored" = [ "openssl-src" ]; - }; - }; - "ordered-float" = rec { - crateName = "ordered-float"; - version = "4.2.0"; - edition = "2021"; - sha256 = "0kjqcvvbcsibbx3hnj7ag06bd9gv2zfi5ja6rgyh2kbxbh3zfvd7"; - libName = "ordered_float"; - authors = [ - "Jonathan Reem " - "Matt Brubeck " - ]; - dependencies = [ - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - } - ]; - features = { - "arbitrary" = [ "dep:arbitrary" ]; - "borsh" = [ "dep:borsh" ]; - "bytemuck" = [ "dep:bytemuck" ]; - "default" = [ "std" ]; - "proptest" = [ "dep:proptest" ]; - "rand" = [ "dep:rand" ]; - "randtest" = [ "rand/std" "rand/std_rng" ]; - "rkyv" = [ "rkyv_32" ]; - "rkyv_16" = [ "dep:rkyv" "rkyv?/size_16" ]; - "rkyv_32" = [ "dep:rkyv" "rkyv?/size_32" ]; - "rkyv_64" = [ "dep:rkyv" "rkyv?/size_64" ]; - "rkyv_ck" = [ "rkyv?/validation" ]; - "schemars" = [ "dep:schemars" ]; - "serde" = [ "dep:serde" "rand?/serde1" ]; - "speedy" = [ "dep:speedy" ]; - "std" = [ "num-traits/std" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "ouroboros" = rec { - crateName = "ouroboros"; - version = "0.18.4"; - edition = "2018"; - sha256 = "0rsazk2hh2w626585scb7ylaf500y5insp3rnkbdwnm2jq4s4kwl"; - authors = [ - "Josh " - ]; - dependencies = [ - { - name = "aliasable"; - packageId = "aliasable"; - } - { - name = "ouroboros_macro"; - packageId = "ouroboros_macro"; - } - { - name = "static_assertions"; - packageId = "static_assertions"; - } - ]; - features = { - "default" = [ "std" ]; - "std" = [ "ouroboros_macro/std" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "ouroboros_macro" = rec { - crateName = "ouroboros_macro"; - version = "0.18.4"; - edition = "2018"; - sha256 = "1gb5njxh9clp9krjc7kfbz17g5racjlld1bsjkjx13sjs7mdxc1r"; - procMacro = true; - authors = [ - "Josh " - ]; - dependencies = [ - { - name = "heck"; - packageId = "heck 0.4.1"; - } - { - name = "itertools"; - packageId = "itertools 0.12.1"; - } - { - name = "proc-macro2"; - packageId = "proc-macro2"; - } - { - name = "proc-macro2-diagnostics"; - packageId = "proc-macro2-diagnostics"; - } - { - name = "quote"; - packageId = "quote"; - } - { - name = "syn"; - packageId = "syn 2.0.66"; - features = [ "full" ]; - } - ]; - features = { - }; - resolvedDefaultFeatures = [ "std" ]; - }; - "parking_lot" = rec { - crateName = "parking_lot"; - version = "0.12.3"; - edition = "2021"; - sha256 = "09ws9g6245iiq8z975h8ycf818a66q3c6zv4b5h8skpm7hc1igzi"; - authors = [ - "Amanieu d'Antras " - ]; - dependencies = [ - { - name = "lock_api"; - packageId = "lock_api"; - } - { - name = "parking_lot_core"; - packageId = "parking_lot_core"; - } - ]; - features = { - "arc_lock" = [ "lock_api/arc_lock" ]; - "deadlock_detection" = [ "parking_lot_core/deadlock_detection" ]; - "nightly" = [ "parking_lot_core/nightly" "lock_api/nightly" ]; - "owning_ref" = [ "lock_api/owning_ref" ]; - "serde" = [ "lock_api/serde" ]; - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "parking_lot_core" = rec { - crateName = "parking_lot_core"; - version = "0.9.10"; - edition = "2021"; - sha256 = "1y3cf9ld9ijf7i4igwzffcn0xl16dxyn4c5bwgjck1dkgabiyh0y"; - authors = [ - "Amanieu d'Antras " - ]; - dependencies = [ - { - name = "cfg-if"; - packageId = "cfg-if"; - } - { - name = "libc"; - packageId = "libc"; - target = { target, features }: (target."unix" or false); - } - { - name = "redox_syscall"; - packageId = "redox_syscall 0.5.1"; - target = { target, features }: ("redox" == target."os" or null); - } - { - name = "smallvec"; - packageId = "smallvec"; - } - { - name = "windows-targets"; - packageId = "windows-targets 0.52.5"; - target = { target, features }: (target."windows" or false); - } - ]; - features = { - "backtrace" = [ "dep:backtrace" ]; - "deadlock_detection" = [ "petgraph" "thread-id" "backtrace" ]; - "petgraph" = [ "dep:petgraph" ]; - "thread-id" = [ "dep:thread-id" ]; - }; - }; - "parry2d-f64" = rec { - crateName = "parry2d-f64"; - version = "0.15.1"; - edition = "2021"; - sha256 = "1lch9w3rhwwwqd3fhjv9j0sbkikdx94xcy68zhcy5wxm7md7css1"; - libName = "parry2d_f64"; - authors = [ - "Sébastien Crozet " - ]; - dependencies = [ - { - name = "approx"; - packageId = "approx 0.5.1"; - usesDefaultFeatures = false; - } - { - name = "arrayvec"; - packageId = "arrayvec"; - usesDefaultFeatures = false; - } - { - name = "bitflags"; - packageId = "bitflags 1.3.2"; - } - { - name = "downcast-rs"; - packageId = "downcast-rs"; - usesDefaultFeatures = false; - } - { - name = "either"; - packageId = "either"; - usesDefaultFeatures = false; - } - { - name = "log"; - packageId = "log"; - } - { - name = "nalgebra"; - packageId = "nalgebra"; - usesDefaultFeatures = false; - features = [ "libm" ]; - } - { - name = "num-derive"; - packageId = "num-derive"; - } - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - } - { - name = "rustc-hash"; - packageId = "rustc-hash"; - optional = true; - } - { - name = "simba"; - packageId = "simba"; - usesDefaultFeatures = false; - } - { - name = "slab"; - packageId = "slab"; - optional = true; - } - { - name = "smallvec"; - packageId = "smallvec"; - } - { - name = "spade"; - packageId = "spade"; - optional = true; - } - ]; - devDependencies = [ - { - name = "simba"; - packageId = "simba"; - usesDefaultFeatures = false; - features = [ "partial_fixed_point_support" ]; - } - ]; - features = { - "bytemuck" = [ "dep:bytemuck" ]; - "bytemuck-serialize" = [ "bytemuck" "nalgebra/convert-bytemuck" ]; - "cust_core" = [ "dep:cust_core" ]; - "default" = [ "required-features" "std" ]; - "enhanced-determinism" = [ "simba/libm_force" "indexmap" ]; - "indexmap" = [ "dep:indexmap" ]; - "parallel" = [ "rayon" ]; - "rayon" = [ "dep:rayon" ]; - "required-features" = [ "dim2" "f64" ]; - "rkyv" = [ "dep:rkyv" ]; - "rkyv-serialize" = [ "rkyv/validation" "nalgebra/rkyv-serialize" "simba/rkyv-serialize" ]; - "rustc-hash" = [ "dep:rustc-hash" ]; - "serde" = [ "dep:serde" ]; - "serde-serialize" = [ "serde" "nalgebra/serde-serialize" "arrayvec/serde" ]; - "simd-nightly" = [ "simba/packed_simd" "simd-is-enabled" ]; - "simd-stable" = [ "simba/wide" "simd-is-enabled" ]; - "slab" = [ "dep:slab" ]; - "spade" = [ "dep:spade" ]; - "std" = [ "nalgebra/std" "slab" "rustc-hash" "simba/std" "arrayvec/std" "spade" ]; - }; - resolvedDefaultFeatures = [ "default" "dim2" "f64" "required-features" "rustc-hash" "slab" "spade" "std" ]; - }; - "parry3d-f64" = rec { - crateName = "parry3d-f64"; - version = "0.15.1"; - edition = "2021"; - sha256 = "0vnp9vm5k50hc06qrqw2smg89gr0spgd6nbd0qlwlgi7fjipzh7x"; - libName = "parry3d_f64"; - authors = [ - "Sébastien Crozet " - ]; - dependencies = [ - { - name = "approx"; - packageId = "approx 0.5.1"; - usesDefaultFeatures = false; - } - { - name = "arrayvec"; - packageId = "arrayvec"; - usesDefaultFeatures = false; - } - { - name = "bitflags"; - packageId = "bitflags 1.3.2"; - } - { - name = "downcast-rs"; - packageId = "downcast-rs"; - usesDefaultFeatures = false; - } - { - name = "either"; - packageId = "either"; - usesDefaultFeatures = false; - } - { - name = "log"; - packageId = "log"; - } - { - name = "nalgebra"; - packageId = "nalgebra"; - usesDefaultFeatures = false; - features = [ "libm" ]; - } - { - name = "num-derive"; - packageId = "num-derive"; - } - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - } - { - name = "rustc-hash"; - packageId = "rustc-hash"; - optional = true; - } - { - name = "simba"; - packageId = "simba"; - usesDefaultFeatures = false; - } - { - name = "slab"; - packageId = "slab"; - optional = true; - } - { - name = "smallvec"; - packageId = "smallvec"; - } - { - name = "spade"; - packageId = "spade"; - optional = true; - } - ]; - features = { - "bytemuck" = [ "dep:bytemuck" ]; - "bytemuck-serialize" = [ "bytemuck" "nalgebra/convert-bytemuck" ]; - "cust_core" = [ "dep:cust_core" ]; - "default" = [ "required-features" "std" ]; - "enhanced-determinism" = [ "simba/libm_force" "indexmap" ]; - "indexmap" = [ "dep:indexmap" ]; - "parallel" = [ "rayon" ]; - "rayon" = [ "dep:rayon" ]; - "required-features" = [ "dim3" "f64" ]; - "rkyv" = [ "dep:rkyv" ]; - "rkyv-serialize" = [ "rkyv/validation" "nalgebra/rkyv-serialize" "simba/rkyv-serialize" ]; - "rustc-hash" = [ "dep:rustc-hash" ]; - "serde" = [ "dep:serde" ]; - "serde-serialize" = [ "serde" "nalgebra/serde-serialize" ]; - "simd-nightly" = [ "simba/packed_simd" "simd-is-enabled" ]; - "simd-stable" = [ "simba/wide" "simd-is-enabled" ]; - "slab" = [ "dep:slab" ]; - "spade" = [ "dep:spade" ]; - "std" = [ "nalgebra/std" "slab" "rustc-hash" "simba/std" "arrayvec/std" "spade" ]; - }; - resolvedDefaultFeatures = [ "default" "dim3" "f64" "required-features" "rustc-hash" "slab" "spade" "std" ]; - }; - "paste" = rec { - crateName = "paste"; - version = "1.0.15"; - edition = "2018"; - sha256 = "02pxffpdqkapy292harq6asfjvadgp1s005fip9ljfsn9fvxgh2p"; - procMacro = true; - authors = [ - "David Tolnay " - ]; - - }; - "percent-encoding" = rec { - crateName = "percent-encoding"; - version = "2.3.1"; - edition = "2018"; - sha256 = "0gi8wgx0dcy8rnv1kywdv98lwcx67hz0a0zwpib5v2i08r88y573"; - libName = "percent_encoding"; - authors = [ - "The rust-url developers" - ]; - features = { - "default" = [ "std" ]; - "std" = [ "alloc" ]; - }; - resolvedDefaultFeatures = [ "alloc" "default" "std" ]; - }; - "pkg-config" = rec { - crateName = "pkg-config"; - version = "0.3.30"; - edition = "2015"; - sha256 = "1v07557dj1sa0aly9c90wsygc0i8xv5vnmyv0g94lpkvj8qb4cfj"; - libName = "pkg_config"; - authors = [ - "Alex Crichton " - ]; - - }; - "proc-macro2" = rec { - crateName = "proc-macro2"; - version = "1.0.84"; - edition = "2021"; - sha256 = "1mj998115z75c0007glkdr8qj57ibv82h7kg6r8hnc914slwd5pc"; - libName = "proc_macro2"; - authors = [ - "David Tolnay " - "Alex Crichton " - ]; - dependencies = [ - { - name = "unicode-ident"; - packageId = "unicode-ident"; - } - ]; - features = { - "default" = [ "proc-macro" ]; - }; - resolvedDefaultFeatures = [ "default" "proc-macro" ]; - }; - "proc-macro2-diagnostics" = rec { - crateName = "proc-macro2-diagnostics"; - version = "0.10.1"; - edition = "2018"; - sha256 = "1j48ipc80pykvhx6yhndfa774s58ax1h6sm6mlhf09ls76f6l1mg"; - libName = "proc_macro2_diagnostics"; - authors = [ - "Sergio Benitez " - ]; - dependencies = [ - { - name = "proc-macro2"; - packageId = "proc-macro2"; - } - { - name = "quote"; - packageId = "quote"; - } - { - name = "syn"; - packageId = "syn 2.0.66"; - } - { - name = "yansi"; - packageId = "yansi"; - optional = true; - } - ]; - buildDependencies = [ - { - name = "version_check"; - packageId = "version_check"; - } - ]; - features = { - "colors" = [ "yansi" ]; - "default" = [ "colors" ]; - "yansi" = [ "dep:yansi" ]; - }; - resolvedDefaultFeatures = [ "colors" "default" "yansi" ]; - }; - "quick-xml" = rec { - crateName = "quick-xml"; - version = "0.31.0"; - edition = "2021"; - sha256 = "0cravqanylzh5cq2v6hzlfqgxcid5nrp2snnb3pf4m0and2a610h"; - libName = "quick_xml"; - dependencies = [ - { - name = "memchr"; - packageId = "memchr"; - } - { - name = "serde"; - packageId = "serde"; - optional = true; - } - ]; - features = { - "arbitrary" = [ "dep:arbitrary" ]; - "async-tokio" = [ "tokio" ]; - "document-features" = [ "dep:document-features" ]; - "encoding" = [ "encoding_rs" ]; - "encoding_rs" = [ "dep:encoding_rs" ]; - "serde" = [ "dep:serde" ]; - "serde-types" = [ "serde/derive" ]; - "serialize" = [ "serde" ]; - "tokio" = [ "dep:tokio" ]; - }; - resolvedDefaultFeatures = [ "default" "serde" "serialize" ]; - }; - "quote" = rec { - crateName = "quote"; - version = "1.0.36"; - edition = "2018"; - sha256 = "19xcmh445bg6simirnnd4fvkmp6v2qiwxh5f6rw4a70h76pnm9qg"; - authors = [ - "David Tolnay " - ]; - dependencies = [ - { - name = "proc-macro2"; - packageId = "proc-macro2"; - usesDefaultFeatures = false; - } - ]; - features = { - "default" = [ "proc-macro" ]; - "proc-macro" = [ "proc-macro2/proc-macro" ]; - }; - resolvedDefaultFeatures = [ "default" "proc-macro" ]; - }; - "rawpointer" = rec { - crateName = "rawpointer"; - version = "0.2.1"; - edition = "2015"; - sha256 = "1qy1qvj17yh957vhffnq6agq0brvylw27xgks171qrah75wmg8v0"; - authors = [ - "bluss" - ]; - - }; - "redox_syscall 0.4.1" = rec { - crateName = "redox_syscall"; - version = "0.4.1"; - edition = "2018"; - sha256 = "1aiifyz5dnybfvkk4cdab9p2kmphag1yad6iknc7aszlxxldf8j7"; - libName = "syscall"; - authors = [ - "Jeremy Soller " - ]; - dependencies = [ - { - name = "bitflags"; - packageId = "bitflags 1.3.2"; - } - ]; - features = { - "core" = [ "dep:core" ]; - "rustc-dep-of-std" = [ "core" "bitflags/rustc-dep-of-std" ]; - }; - }; - "redox_syscall 0.5.1" = rec { - crateName = "redox_syscall"; - version = "0.5.1"; - edition = "2018"; - sha256 = "0zja6y3av9z50gg1hh0vsc053941wng21r43whhk8mfb9n4m5426"; - libName = "syscall"; - authors = [ - "Jeremy Soller " - ]; - dependencies = [ - { - name = "bitflags"; - packageId = "bitflags 2.5.0"; - } - ]; - features = { - "core" = [ "dep:core" ]; - "rustc-dep-of-std" = [ "core" "bitflags/rustc-dep-of-std" ]; - }; - }; - "robust" = rec { - crateName = "robust"; - version = "1.1.0"; - edition = "2021"; - sha256 = "0c5fhzk7dc1ci9dyjy0xrv6nlrkbmprlj1lqkvrqhs3dbymadx6b"; - authors = [ - "The Spade Developers" - "The GeoRust Developers" - ]; - features = { - "ieee754" = [ "dep:ieee754" ]; - "no_std" = [ "ieee754" ]; - }; - }; - "rustc-hash" = rec { - crateName = "rustc-hash"; - version = "1.1.0"; - edition = "2015"; - sha256 = "1qkc5khrmv5pqi5l5ca9p5nl5hs742cagrndhbrlk3dhlrx3zm08"; - libName = "rustc_hash"; - authors = [ - "The Rust Project Developers" - ]; - features = { - "default" = [ "std" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "rustix" = rec { - crateName = "rustix"; - version = "0.38.34"; - edition = "2021"; - sha256 = "03vkqa2ism7q56rkifyy8mns0wwqrk70f4i4fd53r97p8b05xp3h"; - authors = [ - "Dan Gohman " - "Jakub Konka " - ]; - dependencies = [ - { - name = "bitflags"; - packageId = "bitflags 2.5.0"; - usesDefaultFeatures = false; - } - { - name = "errno"; - packageId = "errno"; - rename = "libc_errno"; - optional = true; - usesDefaultFeatures = false; - target = { target, features }: ((!(target."rustix_use_libc" or false)) && (!(target."miri" or false)) && ("linux" == target."os" or null) && ("little" == target."endian" or null) && (("arm" == target."arch" or null) || (("aarch64" == target."arch" or null) && ("64" == target."pointer_width" or null)) || ("riscv64" == target."arch" or null) || ((target."rustix_use_experimental_asm" or false) && ("powerpc64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips32r6" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64r6" == target."arch" or null)) || ("x86" == target."arch" or null) || (("x86_64" == target."arch" or null) && ("64" == target."pointer_width" or null)))); - } - { - name = "errno"; - packageId = "errno"; - rename = "libc_errno"; - usesDefaultFeatures = false; - target = { target, features }: ((!(target."windows" or false)) && ((target."rustix_use_libc" or false) || (target."miri" or false) || (!(("linux" == target."os" or null) && ("little" == target."endian" or null) && (("arm" == target."arch" or null) || (("aarch64" == target."arch" or null) && ("64" == target."pointer_width" or null)) || ("riscv64" == target."arch" or null) || ((target."rustix_use_experimental_asm" or false) && ("powerpc64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips32r6" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64r6" == target."arch" or null)) || ("x86" == target."arch" or null) || (("x86_64" == target."arch" or null) && ("64" == target."pointer_width" or null))))))); - } - { - name = "errno"; - packageId = "errno"; - rename = "libc_errno"; - usesDefaultFeatures = false; - target = { target, features }: (target."windows" or false); - } - { - name = "libc"; - packageId = "libc"; - optional = true; - usesDefaultFeatures = false; - target = { target, features }: ((!(target."rustix_use_libc" or false)) && (!(target."miri" or false)) && ("linux" == target."os" or null) && ("little" == target."endian" or null) && (("arm" == target."arch" or null) || (("aarch64" == target."arch" or null) && ("64" == target."pointer_width" or null)) || ("riscv64" == target."arch" or null) || ((target."rustix_use_experimental_asm" or false) && ("powerpc64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips32r6" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64r6" == target."arch" or null)) || ("x86" == target."arch" or null) || (("x86_64" == target."arch" or null) && ("64" == target."pointer_width" or null)))); - } - { - name = "libc"; - packageId = "libc"; - usesDefaultFeatures = false; - target = { target, features }: ((!(target."windows" or false)) && ((target."rustix_use_libc" or false) || (target."miri" or false) || (!(("linux" == target."os" or null) && ("little" == target."endian" or null) && (("arm" == target."arch" or null) || (("aarch64" == target."arch" or null) && ("64" == target."pointer_width" or null)) || ("riscv64" == target."arch" or null) || ((target."rustix_use_experimental_asm" or false) && ("powerpc64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips32r6" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64r6" == target."arch" or null)) || ("x86" == target."arch" or null) || (("x86_64" == target."arch" or null) && ("64" == target."pointer_width" or null))))))); - } - { - name = "linux-raw-sys"; - packageId = "linux-raw-sys"; - usesDefaultFeatures = false; - target = { target, features }: ((("android" == target."os" or null) || ("linux" == target."os" or null)) && ((target."rustix_use_libc" or false) || (target."miri" or false) || (!(("linux" == target."os" or null) && ("little" == target."endian" or null) && (("arm" == target."arch" or null) || (("aarch64" == target."arch" or null) && ("64" == target."pointer_width" or null)) || ("riscv64" == target."arch" or null) || ((target."rustix_use_experimental_asm" or false) && ("powerpc64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips32r6" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64r6" == target."arch" or null)) || ("x86" == target."arch" or null) || (("x86_64" == target."arch" or null) && ("64" == target."pointer_width" or null))))))); - features = [ "general" "ioctl" "no_std" ]; - } - { - name = "linux-raw-sys"; - packageId = "linux-raw-sys"; - usesDefaultFeatures = false; - target = { target, features }: ((!(target."rustix_use_libc" or false)) && (!(target."miri" or false)) && ("linux" == target."os" or null) && ("little" == target."endian" or null) && (("arm" == target."arch" or null) || (("aarch64" == target."arch" or null) && ("64" == target."pointer_width" or null)) || ("riscv64" == target."arch" or null) || ((target."rustix_use_experimental_asm" or false) && ("powerpc64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips32r6" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64" == target."arch" or null)) || ((target."rustix_use_experimental_asm" or false) && ("mips64r6" == target."arch" or null)) || ("x86" == target."arch" or null) || (("x86_64" == target."arch" or null) && ("64" == target."pointer_width" or null)))); - features = [ "general" "errno" "ioctl" "no_std" "elf" ]; - } - { - name = "windows-sys"; - packageId = "windows-sys 0.52.0"; - target = { target, features }: (target."windows" or false); - features = [ "Win32_Foundation" "Win32_Networking_WinSock" "Win32_NetworkManagement_IpHelper" "Win32_System_Threading" ]; - } - ]; - devDependencies = [ - { - name = "errno"; - packageId = "errno"; - rename = "libc_errno"; - usesDefaultFeatures = false; - } - { - name = "libc"; - packageId = "libc"; - } - ]; - features = { - "all-apis" = [ "event" "fs" "io_uring" "mm" "mount" "net" "param" "pipe" "process" "procfs" "pty" "rand" "runtime" "shm" "stdio" "system" "termios" "thread" "time" ]; - "default" = [ "std" "use-libc-auxv" ]; - "io_uring" = [ "event" "fs" "net" "linux-raw-sys/io_uring" ]; - "itoa" = [ "dep:itoa" ]; - "libc" = [ "dep:libc" ]; - "libc-extra-traits" = [ "libc?/extra_traits" ]; - "libc_errno" = [ "dep:libc_errno" ]; - "linux_latest" = [ "linux_4_11" ]; - "net" = [ "linux-raw-sys/net" "linux-raw-sys/netlink" "linux-raw-sys/if_ether" "linux-raw-sys/xdp" ]; - "once_cell" = [ "dep:once_cell" ]; - "param" = [ "fs" ]; - "process" = [ "linux-raw-sys/prctl" ]; - "procfs" = [ "once_cell" "itoa" "fs" ]; - "pty" = [ "itoa" "fs" ]; - "runtime" = [ "linux-raw-sys/prctl" ]; - "rustc-dep-of-std" = [ "dep:core" "dep:alloc" "dep:compiler_builtins" "linux-raw-sys/rustc-dep-of-std" "bitflags/rustc-dep-of-std" "compiler_builtins?/rustc-dep-of-std" ]; - "shm" = [ "fs" ]; - "std" = [ "bitflags/std" "alloc" "libc?/std" "libc_errno?/std" "libc-extra-traits" ]; - "system" = [ "linux-raw-sys/system" ]; - "thread" = [ "linux-raw-sys/prctl" ]; - "use-libc" = [ "libc_errno" "libc" "libc-extra-traits" ]; - }; - resolvedDefaultFeatures = [ "alloc" "default" "fs" "libc-extra-traits" "std" "termios" "use-libc-auxv" ]; - }; - "rustversion" = rec { - crateName = "rustversion"; - version = "1.0.17"; - edition = "2018"; - sha256 = "1mm3fckyvb0l2209in1n2k05sws5d9mpkszbnwhq3pkq8apjhpcm"; - procMacro = true; - build = "build/build.rs"; - authors = [ - "David Tolnay " - ]; - - }; - "ryu" = rec { - crateName = "ryu"; - version = "1.0.18"; - edition = "2018"; - sha256 = "17xx2s8j1lln7iackzd9p0sv546vjq71i779gphjq923vjh5pjzk"; - authors = [ - "David Tolnay " - ]; - features = { - "no-panic" = [ "dep:no-panic" ]; - }; - }; - "safe_arch" = rec { - crateName = "safe_arch"; - version = "0.7.1"; - edition = "2018"; - sha256 = "0m63dasp3rs9mkaa5wai6l6v14lbb788igaidys7k8g6w5f0g67k"; - authors = [ - "Lokathor " - ]; - dependencies = [ - { - name = "bytemuck"; - packageId = "bytemuck"; - optional = true; - } - ]; - features = { - "bytemuck" = [ "dep:bytemuck" ]; - }; - resolvedDefaultFeatures = [ "bytemuck" "default" ]; - }; - "scopeguard" = rec { - crateName = "scopeguard"; - version = "1.2.0"; - edition = "2015"; - sha256 = "0jcz9sd47zlsgcnm1hdw0664krxwb5gczlif4qngj2aif8vky54l"; - authors = [ - "bluss" - ]; - features = { - "default" = [ "use_std" ]; - }; - }; - "semver" = rec { - crateName = "semver"; - version = "1.0.23"; - edition = "2018"; - sha256 = "12wqpxfflclbq4dv8sa6gchdh92ahhwn4ci1ls22wlby3h57wsb1"; - authors = [ - "David Tolnay " - ]; - dependencies = [ - { - name = "serde"; - packageId = "serde"; - optional = true; - usesDefaultFeatures = false; - } - ]; - features = { - "default" = [ "std" ]; - "serde" = [ "dep:serde" ]; - }; - resolvedDefaultFeatures = [ "default" "serde" "std" ]; - }; - "serde" = rec { - crateName = "serde"; - version = "1.0.203"; - edition = "2018"; - sha256 = "1500ghq198n6py5anvz5qbqagd9h1hq04f4qpsvjzrvix56snlvj"; - authors = [ - "Erick Tryzelaar " - "David Tolnay " - ]; - dependencies = [ - { - name = "serde_derive"; - packageId = "serde_derive"; - optional = true; - } - { - name = "serde_derive"; - packageId = "serde_derive"; - target = { target, features }: false; - } - ]; - devDependencies = [ - { - name = "serde_derive"; - packageId = "serde_derive"; - } - ]; - features = { - "default" = [ "std" ]; - "derive" = [ "serde_derive" ]; - "serde_derive" = [ "dep:serde_derive" ]; - }; - resolvedDefaultFeatures = [ "default" "derive" "serde_derive" "std" ]; - }; - "serde_derive" = rec { - crateName = "serde_derive"; - version = "1.0.203"; - edition = "2015"; - sha256 = "1fmmqmfza3mwxb1v80737dj01gznrh8mhgqgylkndx5npq7bq32h"; - procMacro = true; - authors = [ - "Erick Tryzelaar " - "David Tolnay " - ]; - dependencies = [ - { - name = "proc-macro2"; - packageId = "proc-macro2"; - usesDefaultFeatures = false; - features = [ "proc-macro" ]; - } - { - name = "quote"; - packageId = "quote"; - usesDefaultFeatures = false; - features = [ "proc-macro" ]; - } - { - name = "syn"; - packageId = "syn 2.0.66"; - usesDefaultFeatures = false; - features = [ "clone-impls" "derive" "parsing" "printing" "proc-macro" ]; - } - ]; - features = { - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "serde_json" = rec { - crateName = "serde_json"; - version = "1.0.117"; - edition = "2021"; - sha256 = "1hxziifjlc0kn1cci9d4crmjc7qwnfi20lxwyj9lzca2c7m84la5"; - authors = [ - "Erick Tryzelaar " - "David Tolnay " - ]; - dependencies = [ - { - name = "itoa"; - packageId = "itoa"; - } - { - name = "ryu"; - packageId = "ryu"; - } - { - name = "serde"; - packageId = "serde"; - usesDefaultFeatures = false; - } - ]; - devDependencies = [ - { - name = "serde"; - packageId = "serde"; - features = [ "derive" ]; - } - ]; - features = { - "alloc" = [ "serde/alloc" ]; - "default" = [ "std" ]; - "indexmap" = [ "dep:indexmap" ]; - "preserve_order" = [ "indexmap" "std" ]; - "std" = [ "serde/std" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "serde_yaml" = rec { - crateName = "serde_yaml"; - version = "0.9.34+deprecated"; - edition = "2021"; - sha256 = "0isba1fjyg3l6rxk156k600ilzr8fp7crv82rhal0rxz5qd1m2va"; - authors = [ - "David Tolnay " - ]; - dependencies = [ - { - name = "indexmap"; - packageId = "indexmap"; - } - { - name = "itoa"; - packageId = "itoa"; - } - { - name = "ryu"; - packageId = "ryu"; - } - { - name = "serde"; - packageId = "serde"; - } - { - name = "unsafe-libyaml"; - packageId = "unsafe-libyaml"; - } - ]; - - }; - "simba" = rec { - crateName = "simba"; - version = "0.8.1"; - edition = "2018"; - sha256 = "1bnf7ainywmaz2z67ss1q0bjwccf80c50c50r6hlpay69z4hf586"; - authors = [ - "sebcrozet " - ]; - dependencies = [ - { - name = "approx"; - packageId = "approx 0.5.1"; - usesDefaultFeatures = false; - } - { - name = "num-complex"; - packageId = "num-complex"; - usesDefaultFeatures = false; - } - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - } - { - name = "paste"; - packageId = "paste"; - } - { - name = "wide"; - packageId = "wide"; - optional = true; - usesDefaultFeatures = false; - } - ]; - features = { - "cordic" = [ "dep:cordic" ]; - "cuda" = [ "cuda_std" "cust_core" ]; - "cuda_std" = [ "dep:cuda_std" ]; - "cust_core" = [ "dep:cust_core" ]; - "decimal" = [ "dep:decimal" ]; - "default" = [ "std" ]; - "fixed" = [ "dep:fixed" ]; - "libm" = [ "num-traits/libm" ]; - "libm_force" = [ "dep:libm_force" ]; - "packed_simd" = [ "dep:packed_simd" ]; - "partial_fixed_point_support" = [ "fixed" "cordic" ]; - "rand" = [ "dep:rand" ]; - "rkyv" = [ "dep:rkyv" ]; - "rkyv-serialize" = [ "rkyv" ]; - "serde" = [ "dep:serde" ]; - "serde_serialize" = [ "serde" "fixed/serde" ]; - "std" = [ "wide/std" ]; - "wide" = [ "dep:wide" ]; - }; - resolvedDefaultFeatures = [ "libm" "std" "wide" ]; - }; - "slab" = rec { - crateName = "slab"; - version = "0.4.9"; - edition = "2018"; - sha256 = "0rxvsgir0qw5lkycrqgb1cxsvxzjv9bmx73bk5y42svnzfba94lg"; - authors = [ - "Carl Lerche " - ]; - buildDependencies = [ - { - name = "autocfg"; - packageId = "autocfg"; - } - ]; - features = { - "default" = [ "std" ]; - "serde" = [ "dep:serde" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "smallvec" = rec { - crateName = "smallvec"; - version = "1.13.2"; - edition = "2018"; - sha256 = "0rsw5samawl3wsw6glrsb127rx6sh89a8wyikicw6dkdcjd1lpiw"; - authors = [ - "The Servo Project Developers" - ]; - features = { - "arbitrary" = [ "dep:arbitrary" ]; - "const_new" = [ "const_generics" ]; - "drain_keep_rest" = [ "drain_filter" ]; - "serde" = [ "dep:serde" ]; - }; - }; - "spade" = rec { - crateName = "spade"; - version = "2.8.0"; - edition = "2021"; - sha256 = "1h68d205s3cida0r1iba9shfxqhlbzy9gaa1gr4l5r4s2q4sh82v"; - authors = [ - "Stefan Altmayer " - ]; - dependencies = [ - { - name = "hashbrown"; - packageId = "hashbrown"; - } - { - name = "num-traits"; - packageId = "num-traits"; - } - { - name = "robust"; - packageId = "robust"; - } - { - name = "smallvec"; - packageId = "smallvec"; - } - ]; - features = { - "default" = [ "std" ]; - "serde" = [ "dep:serde" ]; - }; - resolvedDefaultFeatures = [ "default" "std" ]; - }; - "static_assertions" = rec { - crateName = "static_assertions"; - version = "1.1.0"; - edition = "2015"; - sha256 = "0gsl6xmw10gvn3zs1rv99laj5ig7ylffnh71f9l34js4nr4r7sx2"; - authors = [ - "Nikolai Vazquez" - ]; - features = { - }; - }; - "stderrlog" = rec { - crateName = "stderrlog"; - version = "0.6.0"; - edition = "2018"; - sha256 = "0syw0ypmd5b8a9kpj3nm1q9z8lr3glb0wxnn69yv2alr5xvi1jb1"; - authors = [ - "Doug Goldstein " - ]; - dependencies = [ - { - name = "chrono"; - packageId = "chrono"; - optional = true; - usesDefaultFeatures = false; - features = [ "clock" "std" "wasmbind" ]; - } - { - name = "is-terminal"; - packageId = "is-terminal"; - } - { - name = "log"; - packageId = "log"; - features = [ "std" ]; - } - { - name = "termcolor"; - packageId = "termcolor"; - } - { - name = "thread_local"; - packageId = "thread_local"; - } - ]; - features = { - "chrono" = [ "dep:chrono" ]; - "default" = [ "timestamps" ]; - "timestamps" = [ "chrono" ]; - }; - resolvedDefaultFeatures = [ "chrono" "default" "timestamps" ]; - }; - "stl" = rec { - crateName = "stl"; - version = "0.2.1"; - edition = "2015"; - sha256 = "04kfj8isclf2cl60bx4pk4fvfzvilfpg409aavq533r5m6rp4vj6"; - authors = [ - "Eric Holk " - ]; - dependencies = [ - { - name = "byteorder"; - packageId = "byteorder 0.4.2"; - } - ]; - - }; - "strsim" = rec { - crateName = "strsim"; - version = "0.11.1"; - edition = "2015"; - sha256 = "0kzvqlw8hxqb7y598w1s0hxlnmi84sg5vsipp3yg5na5d1rvba3x"; - authors = [ - "Danny Guo " - "maxbachmann " - ]; - - }; - "syn 1.0.109" = rec { - crateName = "syn"; - version = "1.0.109"; - edition = "2018"; - sha256 = "0ds2if4600bd59wsv7jjgfkayfzy3hnazs394kz6zdkmna8l3dkj"; - authors = [ - "David Tolnay " - ]; - dependencies = [ - { - name = "proc-macro2"; - packageId = "proc-macro2"; - usesDefaultFeatures = false; - } - { - name = "quote"; - packageId = "quote"; - optional = true; - usesDefaultFeatures = false; - } - { - name = "unicode-ident"; - packageId = "unicode-ident"; - } - ]; - features = { - "default" = [ "derive" "parsing" "printing" "clone-impls" "proc-macro" ]; - "printing" = [ "quote" ]; - "proc-macro" = [ "proc-macro2/proc-macro" "quote/proc-macro" ]; - "quote" = [ "dep:quote" ]; - "test" = [ "syn-test-suite/all-features" ]; - }; - resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "full" "parsing" "printing" "proc-macro" "quote" ]; - }; - "syn 2.0.66" = rec { - crateName = "syn"; - version = "2.0.66"; - edition = "2021"; - sha256 = "1xfgrprsbz8j31kabvfinb4fyhajlk2q7lxa18fb006yl90kyby4"; - authors = [ - "David Tolnay " - ]; - dependencies = [ - { - name = "proc-macro2"; - packageId = "proc-macro2"; - usesDefaultFeatures = false; - } - { - name = "quote"; - packageId = "quote"; - optional = true; - usesDefaultFeatures = false; - } - { - name = "unicode-ident"; - packageId = "unicode-ident"; - } - ]; - features = { - "default" = [ "derive" "parsing" "printing" "clone-impls" "proc-macro" ]; - "printing" = [ "dep:quote" ]; - "proc-macro" = [ "proc-macro2/proc-macro" "quote?/proc-macro" ]; - "test" = [ "syn-test-suite/all-features" ]; - }; - resolvedDefaultFeatures = [ "clone-impls" "default" "derive" "extra-traits" "full" "parsing" "printing" "proc-macro" "visit" ]; - }; - "tempfile" = rec { - crateName = "tempfile"; - version = "3.10.1"; - edition = "2021"; - sha256 = "1wdzz35ri168jn9al4s1g2rnsrr5ci91khgarc2rvpb3nappzdw5"; - authors = [ - "Steven Allen " - "The Rust Project Developers" - "Ashley Mannix " - "Jason White " - ]; - dependencies = [ - { - name = "cfg-if"; - packageId = "cfg-if"; - } - { - name = "fastrand"; - packageId = "fastrand"; - } - { - name = "rustix"; - packageId = "rustix"; - target = { target, features }: ((target."unix" or false) || ("wasi" == target."os" or null)); - features = [ "fs" ]; - } - { - name = "windows-sys"; - packageId = "windows-sys 0.52.0"; - target = { target, features }: (target."windows" or false); - features = [ "Win32_Storage_FileSystem" "Win32_Foundation" ]; - } - ]; - features = { - }; - }; - "termcolor" = rec { - crateName = "termcolor"; - version = "1.1.3"; - edition = "2018"; - sha256 = "0mbpflskhnz3jf312k50vn0hqbql8ga2rk0k79pkgchip4q4vcms"; - authors = [ - "Andrew Gallant " - ]; - dependencies = [ - { - name = "winapi-util"; - packageId = "winapi-util"; - target = { target, features }: (target."windows" or false); - } - ]; - - }; - "terminal_size" = rec { - crateName = "terminal_size"; - version = "0.3.0"; - edition = "2021"; - sha256 = "1xqdzdjq77smg41z67vg3qwrcilf1zf5330gdrgm22lyghmvzgi1"; - authors = [ - "Andrew Chin " - ]; - dependencies = [ - { - name = "rustix"; - packageId = "rustix"; - target = { target, features }: (!(target."windows" or false)); - features = [ "termios" ]; - } - { - name = "windows-sys"; - packageId = "windows-sys 0.48.0"; - target = { target, features }: (target."windows" or false); - features = [ "Win32_Foundation" "Win32_System_Console" ]; - } - ]; - - }; - "thiserror" = rec { - crateName = "thiserror"; - version = "1.0.61"; - edition = "2021"; - sha256 = "028prh962l16cmjivwb1g9xalbpqip0305zhq006mg74dc6whin5"; - authors = [ - "David Tolnay " - ]; - dependencies = [ - { - name = "thiserror-impl"; - packageId = "thiserror-impl"; - } - ]; - - }; - "thiserror-impl" = rec { - crateName = "thiserror-impl"; - version = "1.0.61"; - edition = "2021"; - sha256 = "0cvm37hp0kbcyk1xac1z0chpbd9pbn2g456iyid6sah0a113ihs6"; - procMacro = true; - libName = "thiserror_impl"; - authors = [ - "David Tolnay " - ]; - dependencies = [ - { - name = "proc-macro2"; - packageId = "proc-macro2"; - } - { - name = "quote"; - packageId = "quote"; - } - { - name = "syn"; - packageId = "syn 2.0.66"; - } - ]; - - }; - "thread_local" = rec { - crateName = "thread_local"; - version = "1.1.8"; - edition = "2021"; - sha256 = "173i5lyjh011gsimk21np9jn8al18rxsrkjli20a7b8ks2xgk7lb"; - authors = [ - "Amanieu d'Antras " - ]; - dependencies = [ - { - name = "cfg-if"; - packageId = "cfg-if"; - } - { - name = "once_cell"; - packageId = "once_cell"; - } - ]; - features = { - }; - }; - "threemf" = rec { - crateName = "threemf"; - version = "0.5.0"; - edition = "2021"; - sha256 = "08q1amp0k8v7rv0gjh9slvvnfwxra95dl9b39fspkiwdgni6wbjl"; - authors = [ - "Hanno Braun " - ]; - dependencies = [ - { - name = "quick-xml"; - packageId = "quick-xml"; - features = [ "serialize" ]; - } - { - name = "serde"; - packageId = "serde"; - features = [ "derive" ]; - } - { - name = "thiserror"; - packageId = "thiserror"; - } - { - name = "zip"; - packageId = "zip"; - usesDefaultFeatures = false; - features = [ "deflate" ]; - } - ]; - - }; - "tinyvec" = rec { - crateName = "tinyvec"; - version = "1.6.0"; - edition = "2018"; - sha256 = "0l6bl2h62a5m44jdnpn7lmj14rd44via8180i7121fvm73mmrk47"; - authors = [ - "Lokathor " - ]; - dependencies = [ - { - name = "tinyvec_macros"; - packageId = "tinyvec_macros"; - optional = true; - } - ]; - features = { - "alloc" = [ "tinyvec_macros" ]; - "arbitrary" = [ "dep:arbitrary" ]; - "real_blackbox" = [ "criterion/real_blackbox" ]; - "rustc_1_55" = [ "rustc_1_40" ]; - "rustc_1_57" = [ "rustc_1_55" ]; - "serde" = [ "dep:serde" ]; - "std" = [ "alloc" ]; - "tinyvec_macros" = [ "dep:tinyvec_macros" ]; - }; - resolvedDefaultFeatures = [ "alloc" "default" "tinyvec_macros" ]; - }; - "tinyvec_macros" = rec { - crateName = "tinyvec_macros"; - version = "0.1.1"; - edition = "2018"; - sha256 = "081gag86208sc3y6sdkshgw3vysm5d34p431dzw0bshz66ncng0z"; - authors = [ - "Soveu " - ]; - - }; - "type-map" = rec { - crateName = "type-map"; - version = "0.5.0"; - edition = "2018"; - sha256 = "17qaga12nkankr7hi2mv43f4lnc78hg480kz6j9zmy4g0h28ddny"; - libName = "type_map"; - authors = [ - "Jacob Brown " - ]; - dependencies = [ - { - name = "rustc-hash"; - packageId = "rustc-hash"; - } - ]; - - }; - "typenum" = rec { - crateName = "typenum"; - version = "1.17.0"; - edition = "2018"; - sha256 = "09dqxv69m9lj9zvv6xw5vxaqx15ps0vxyy5myg33i0kbqvq0pzs2"; - build = "build/main.rs"; - authors = [ - "Paho Lurie-Gregg " - "Andre Bogus " - ]; - features = { - "scale-info" = [ "dep:scale-info" ]; - "scale_info" = [ "scale-info/derive" ]; - }; - }; - "uneval" = rec { - crateName = "uneval"; - version = "0.2.4"; - edition = "2021"; - sha256 = "0wyw25yz7qhhd4i1wg0bf764aw6fkq6gd630x0mpx3b4v0pmvk33"; - authors = [ - "Cerber Ursi " - ]; - dependencies = [ - { - name = "serde"; - packageId = "serde"; - } - { - name = "thiserror"; - packageId = "thiserror"; - } - ]; - - }; - "unicode-bidi" = rec { - crateName = "unicode-bidi"; - version = "0.3.15"; - edition = "2018"; - sha256 = "0xcdxm7h0ydyprwpcbh436rbs6s6lph7f3gr527lzgv6lw053y88"; - libName = "unicode_bidi"; - authors = [ - "The Servo Project Developers" - ]; - features = { - "default" = [ "std" "hardcoded-data" ]; - "flame" = [ "dep:flame" ]; - "flame_it" = [ "flame" "flamer" ]; - "flamer" = [ "dep:flamer" ]; - "serde" = [ "dep:serde" ]; - "with_serde" = [ "serde" ]; - }; - resolvedDefaultFeatures = [ "hardcoded-data" "std" ]; - }; - "unicode-ident" = rec { - crateName = "unicode-ident"; - version = "1.0.12"; - edition = "2018"; - sha256 = "0jzf1znfpb2gx8nr8mvmyqs1crnv79l57nxnbiszc7xf7ynbjm1k"; - libName = "unicode_ident"; - authors = [ - "David Tolnay " - ]; - - }; - "unicode-normalization" = rec { - crateName = "unicode-normalization"; - version = "0.1.23"; - edition = "2018"; - sha256 = "1x81a50h2zxigj74b9bqjsirxxbyhmis54kg600xj213vf31cvd5"; - libName = "unicode_normalization"; - authors = [ - "kwantam " - "Manish Goregaokar " - ]; - dependencies = [ - { - name = "tinyvec"; - packageId = "tinyvec"; - features = [ "alloc" ]; - } - ]; - features = { - "default" = [ "std" ]; - }; - resolvedDefaultFeatures = [ "std" ]; - }; - "unsafe-libyaml" = rec { - crateName = "unsafe-libyaml"; - version = "0.2.11"; - edition = "2021"; - crateBin = []; - sha256 = "0qdq69ffl3v5pzx9kzxbghzn0fzn266i1xn70y88maybz9csqfk7"; - libName = "unsafe_libyaml"; - authors = [ - "David Tolnay " - ]; - - }; - "uom" = rec { - crateName = "uom"; - version = "0.35.0"; - edition = "2018"; - sha256 = "1cl7853v99bpzrwcn6102gvj8gysw7b768anyfksficqg961jql3"; - authors = [ - "Mike Boutin " - ]; - dependencies = [ - { - name = "num-traits"; - packageId = "num-traits"; - usesDefaultFeatures = false; - } - { - name = "typenum"; - packageId = "typenum"; - } - ]; - features = { - "bigint" = [ "bigint-support" ]; - "bigint-support" = [ "num-bigint" "num-rational/num-bigint-std" ]; - "bigrational" = [ "bigint-support" ]; - "biguint" = [ "bigint-support" ]; - "complex-support" = [ "num-complex" ]; - "complex32" = [ "complex-support" ]; - "complex64" = [ "complex-support" ]; - "default" = [ "autoconvert" "f32" "f64" "si" "std" ]; - "i128" = [ "rational-support" ]; - "i16" = [ "rational-support" ]; - "i32" = [ "rational-support" ]; - "i64" = [ "rational-support" ]; - "i8" = [ "rational-support" ]; - "isize" = [ "rational-support" ]; - "num-bigint" = [ "dep:num-bigint" ]; - "num-complex" = [ "dep:num-complex" ]; - "num-rational" = [ "dep:num-rational" ]; - "rational" = [ "rational-support" ]; - "rational-support" = [ "num-rational" ]; - "rational32" = [ "rational-support" ]; - "rational64" = [ "rational-support" ]; - "serde" = [ "dep:serde" ]; - "std" = [ "num-traits/std" ]; - "u128" = [ "rational-support" ]; - "u16" = [ "rational-support" ]; - "u32" = [ "rational-support" ]; - "u64" = [ "rational-support" ]; - "u8" = [ "rational-support" ]; - "use_serde" = [ "serde" ]; - "usize" = [ "rational-support" ]; - }; - resolvedDefaultFeatures = [ "autoconvert" "default" "f32" "f64" "si" "std" ]; - }; - "url" = rec { - crateName = "url"; - version = "2.5.0"; - edition = "2018"; - sha256 = "0cs65961miawncdg2z20171w0vqrmraswv2ihdpd8lxp7cp31rii"; - authors = [ - "The rust-url developers" - ]; - dependencies = [ - { - name = "form_urlencoded"; - packageId = "form_urlencoded"; - } - { - name = "idna"; - packageId = "idna"; - } - { - name = "percent-encoding"; - packageId = "percent-encoding"; - } - ]; - features = { - "serde" = [ "dep:serde" ]; - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "utf8parse" = rec { - crateName = "utf8parse"; - version = "0.2.1"; - edition = "2018"; - sha256 = "02ip1a0az0qmc2786vxk2nqwsgcwf17d3a38fkf0q7hrmwh9c6vi"; - authors = [ - "Joe Wilm " - "Christian Duerr " - ]; - features = { - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "vcpkg" = rec { - crateName = "vcpkg"; - version = "0.2.15"; - edition = "2015"; - sha256 = "09i4nf5y8lig6xgj3f7fyrvzd3nlaw4znrihw8psidvv5yk4xkdc"; - authors = [ - "Jim McGrath " - ]; - - }; - "version_check" = rec { - crateName = "version_check"; - version = "0.9.4"; - edition = "2015"; - sha256 = "0gs8grwdlgh0xq660d7wr80x14vxbizmd8dbp29p2pdncx8lp1s9"; - authors = [ - "Sergio Benitez " - ]; - - }; - "wasite" = rec { - crateName = "wasite"; - version = "0.1.0"; - edition = "2018"; - sha256 = "0nw5h9nmcl4fyf4j5d4mfdjfgvwi1cakpi349wc4zrr59wxxinmq"; - - }; - "wasm-bindgen" = rec { - crateName = "wasm-bindgen"; - version = "0.2.92"; - edition = "2018"; - sha256 = "1a4mcw13nsk3fr8fxjzf9kk1wj88xkfsmnm0pjraw01ryqfm7qjb"; - libName = "wasm_bindgen"; - authors = [ - "The wasm-bindgen Developers" - ]; - dependencies = [ - { - name = "cfg-if"; - packageId = "cfg-if"; - } - { - name = "wasm-bindgen-macro"; - packageId = "wasm-bindgen-macro"; - } - ]; - features = { - "default" = [ "spans" "std" ]; - "enable-interning" = [ "std" ]; - "gg-alloc" = [ "wasm-bindgen-test/gg-alloc" ]; - "serde" = [ "dep:serde" ]; - "serde-serialize" = [ "serde" "serde_json" "std" ]; - "serde_json" = [ "dep:serde_json" ]; - "spans" = [ "wasm-bindgen-macro/spans" ]; - "strict-macro" = [ "wasm-bindgen-macro/strict-macro" ]; - "xxx_debug_only_print_generated_code" = [ "wasm-bindgen-macro/xxx_debug_only_print_generated_code" ]; - }; - resolvedDefaultFeatures = [ "default" "spans" "std" ]; - }; - "wasm-bindgen-backend" = rec { - crateName = "wasm-bindgen-backend"; - version = "0.2.92"; - edition = "2018"; - sha256 = "1nj7wxbi49f0rw9d44rjzms26xlw6r76b2mrggx8jfbdjrxphkb1"; - libName = "wasm_bindgen_backend"; - authors = [ - "The wasm-bindgen Developers" - ]; - dependencies = [ - { - name = "bumpalo"; - packageId = "bumpalo"; - } - { - name = "log"; - packageId = "log"; - } - { - name = "once_cell"; - packageId = "once_cell"; - } - { - name = "proc-macro2"; - packageId = "proc-macro2"; - } - { - name = "quote"; - packageId = "quote"; - } - { - name = "syn"; - packageId = "syn 2.0.66"; - features = [ "full" ]; - } - { - name = "wasm-bindgen-shared"; - packageId = "wasm-bindgen-shared"; - } - ]; - features = { - "extra-traits" = [ "syn/extra-traits" ]; - }; - resolvedDefaultFeatures = [ "spans" ]; - }; - "wasm-bindgen-macro" = rec { - crateName = "wasm-bindgen-macro"; - version = "0.2.92"; - edition = "2018"; - sha256 = "09npa1srjjabd6nfph5yc03jb26sycjlxhy0c2a1pdrpx4yq5y51"; - procMacro = true; - libName = "wasm_bindgen_macro"; - authors = [ - "The wasm-bindgen Developers" - ]; - dependencies = [ - { - name = "quote"; - packageId = "quote"; - } - { - name = "wasm-bindgen-macro-support"; - packageId = "wasm-bindgen-macro-support"; - } - ]; - features = { - "spans" = [ "wasm-bindgen-macro-support/spans" ]; - "strict-macro" = [ "wasm-bindgen-macro-support/strict-macro" ]; - }; - resolvedDefaultFeatures = [ "spans" ]; - }; - "wasm-bindgen-macro-support" = rec { - crateName = "wasm-bindgen-macro-support"; - version = "0.2.92"; - edition = "2018"; - sha256 = "1dqv2xs8zcyw4kjgzj84bknp2h76phmsb3n7j6hn396h4ssifkz9"; - libName = "wasm_bindgen_macro_support"; - authors = [ - "The wasm-bindgen Developers" - ]; - dependencies = [ - { - name = "proc-macro2"; - packageId = "proc-macro2"; - } - { - name = "quote"; - packageId = "quote"; - } - { - name = "syn"; - packageId = "syn 2.0.66"; - features = [ "visit" "full" ]; - } - { - name = "wasm-bindgen-backend"; - packageId = "wasm-bindgen-backend"; - } - { - name = "wasm-bindgen-shared"; - packageId = "wasm-bindgen-shared"; - } - ]; - features = { - "extra-traits" = [ "syn/extra-traits" ]; - "spans" = [ "wasm-bindgen-backend/spans" ]; - }; - resolvedDefaultFeatures = [ "spans" ]; - }; - "wasm-bindgen-shared" = rec { - crateName = "wasm-bindgen-shared"; - version = "0.2.92"; - edition = "2018"; - links = "wasm_bindgen"; - sha256 = "15kyavsrna2cvy30kg03va257fraf9x00ny554vxngvpyaa0q6dg"; - libName = "wasm_bindgen_shared"; - authors = [ - "The wasm-bindgen Developers" - ]; - - }; - "wavefront_rs" = rec { - crateName = "wavefront_rs"; - version = "2.0.0-beta.1"; - edition = "2018"; - sha256 = "0c4r3l5772hzwbf2vxivh9dgs54mg0c6kq9ycg69qgqw4zi3gwn2"; - authors = [ - "Alexander Weber " - ]; - - }; - "web-sys" = rec { - crateName = "web-sys"; - version = "0.3.69"; - edition = "2018"; - sha256 = "1vqkxk935xa8zcnsi4bd88sb267ly2i24xl1yiq26d1n32hskbvp"; - libName = "web_sys"; - authors = [ - "The wasm-bindgen Developers" - ]; - dependencies = [ - { - name = "js-sys"; - packageId = "js-sys"; - } - { - name = "wasm-bindgen"; - packageId = "wasm-bindgen"; - } - ]; - features = { - "AbortSignal" = [ "EventTarget" ]; - "AnalyserNode" = [ "AudioNode" "EventTarget" ]; - "Animation" = [ "EventTarget" ]; - "AnimationEvent" = [ "Event" ]; - "AnimationPlaybackEvent" = [ "Event" ]; - "Attr" = [ "EventTarget" "Node" ]; - "AudioBufferSourceNode" = [ "AudioNode" "AudioScheduledSourceNode" "EventTarget" ]; - "AudioContext" = [ "BaseAudioContext" "EventTarget" ]; - "AudioDestinationNode" = [ "AudioNode" "EventTarget" ]; - "AudioNode" = [ "EventTarget" ]; - "AudioProcessingEvent" = [ "Event" ]; - "AudioScheduledSourceNode" = [ "AudioNode" "EventTarget" ]; - "AudioStreamTrack" = [ "EventTarget" "MediaStreamTrack" ]; - "AudioTrackList" = [ "EventTarget" ]; - "AudioWorklet" = [ "Worklet" ]; - "AudioWorkletGlobalScope" = [ "WorkletGlobalScope" ]; - "AudioWorkletNode" = [ "AudioNode" "EventTarget" ]; - "AuthenticatorAssertionResponse" = [ "AuthenticatorResponse" ]; - "AuthenticatorAttestationResponse" = [ "AuthenticatorResponse" ]; - "BaseAudioContext" = [ "EventTarget" ]; - "BatteryManager" = [ "EventTarget" ]; - "BeforeUnloadEvent" = [ "Event" ]; - "BiquadFilterNode" = [ "AudioNode" "EventTarget" ]; - "BlobEvent" = [ "Event" ]; - "Bluetooth" = [ "EventTarget" ]; - "BluetoothAdvertisingEvent" = [ "Event" ]; - "BluetoothDevice" = [ "EventTarget" ]; - "BluetoothPermissionResult" = [ "EventTarget" "PermissionStatus" ]; - "BluetoothRemoteGattCharacteristic" = [ "EventTarget" ]; - "BluetoothRemoteGattService" = [ "EventTarget" ]; - "BroadcastChannel" = [ "EventTarget" ]; - "CanvasCaptureMediaStream" = [ "EventTarget" "MediaStream" ]; - "CanvasCaptureMediaStreamTrack" = [ "EventTarget" "MediaStreamTrack" ]; - "CdataSection" = [ "CharacterData" "EventTarget" "Node" "Text" ]; - "ChannelMergerNode" = [ "AudioNode" "EventTarget" ]; - "ChannelSplitterNode" = [ "AudioNode" "EventTarget" ]; - "CharacterData" = [ "EventTarget" "Node" ]; - "ChromeWorker" = [ "EventTarget" "Worker" ]; - "Clipboard" = [ "EventTarget" ]; - "ClipboardEvent" = [ "Event" ]; - "CloseEvent" = [ "Event" ]; - "Comment" = [ "CharacterData" "EventTarget" "Node" ]; - "CompositionEvent" = [ "Event" "UiEvent" ]; - "ConstantSourceNode" = [ "AudioNode" "AudioScheduledSourceNode" "EventTarget" ]; - "ConvolverNode" = [ "AudioNode" "EventTarget" ]; - "CssAnimation" = [ "Animation" "EventTarget" ]; - "CssConditionRule" = [ "CssGroupingRule" "CssRule" ]; - "CssCounterStyleRule" = [ "CssRule" ]; - "CssFontFaceRule" = [ "CssRule" ]; - "CssFontFeatureValuesRule" = [ "CssRule" ]; - "CssGroupingRule" = [ "CssRule" ]; - "CssImportRule" = [ "CssRule" ]; - "CssKeyframeRule" = [ "CssRule" ]; - "CssKeyframesRule" = [ "CssRule" ]; - "CssMediaRule" = [ "CssConditionRule" "CssGroupingRule" "CssRule" ]; - "CssNamespaceRule" = [ "CssRule" ]; - "CssPageRule" = [ "CssRule" ]; - "CssStyleRule" = [ "CssRule" ]; - "CssStyleSheet" = [ "StyleSheet" ]; - "CssSupportsRule" = [ "CssConditionRule" "CssGroupingRule" "CssRule" ]; - "CssTransition" = [ "Animation" "EventTarget" ]; - "CustomEvent" = [ "Event" ]; - "DedicatedWorkerGlobalScope" = [ "EventTarget" "WorkerGlobalScope" ]; - "DelayNode" = [ "AudioNode" "EventTarget" ]; - "DeviceLightEvent" = [ "Event" ]; - "DeviceMotionEvent" = [ "Event" ]; - "DeviceOrientationEvent" = [ "Event" ]; - "DeviceProximityEvent" = [ "Event" ]; - "Document" = [ "EventTarget" "Node" ]; - "DocumentFragment" = [ "EventTarget" "Node" ]; - "DocumentTimeline" = [ "AnimationTimeline" ]; - "DocumentType" = [ "EventTarget" "Node" ]; - "DomMatrix" = [ "DomMatrixReadOnly" ]; - "DomPoint" = [ "DomPointReadOnly" ]; - "DomRect" = [ "DomRectReadOnly" ]; - "DomRequest" = [ "EventTarget" ]; - "DragEvent" = [ "Event" "MouseEvent" "UiEvent" ]; - "DynamicsCompressorNode" = [ "AudioNode" "EventTarget" ]; - "Element" = [ "EventTarget" "Node" ]; - "ErrorEvent" = [ "Event" ]; - "EventSource" = [ "EventTarget" ]; - "ExtendableEvent" = [ "Event" ]; - "ExtendableMessageEvent" = [ "Event" "ExtendableEvent" ]; - "FetchEvent" = [ "Event" "ExtendableEvent" ]; - "FetchObserver" = [ "EventTarget" ]; - "File" = [ "Blob" ]; - "FileReader" = [ "EventTarget" ]; - "FileSystemDirectoryEntry" = [ "FileSystemEntry" ]; - "FileSystemDirectoryHandle" = [ "FileSystemHandle" ]; - "FileSystemFileEntry" = [ "FileSystemEntry" ]; - "FileSystemFileHandle" = [ "FileSystemHandle" ]; - "FileSystemWritableFileStream" = [ "WritableStream" ]; - "FocusEvent" = [ "Event" "UiEvent" ]; - "FontFaceSet" = [ "EventTarget" ]; - "FontFaceSetLoadEvent" = [ "Event" ]; - "GainNode" = [ "AudioNode" "EventTarget" ]; - "GamepadAxisMoveEvent" = [ "Event" "GamepadEvent" ]; - "GamepadButtonEvent" = [ "Event" "GamepadEvent" ]; - "GamepadEvent" = [ "Event" ]; - "GpuDevice" = [ "EventTarget" ]; - "GpuInternalError" = [ "GpuError" ]; - "GpuOutOfMemoryError" = [ "GpuError" ]; - "GpuPipelineError" = [ "DomException" ]; - "GpuUncapturedErrorEvent" = [ "Event" ]; - "GpuValidationError" = [ "GpuError" ]; - "HashChangeEvent" = [ "Event" ]; - "Hid" = [ "EventTarget" ]; - "HidConnectionEvent" = [ "Event" ]; - "HidDevice" = [ "EventTarget" ]; - "HidInputReportEvent" = [ "Event" ]; - "HtmlAnchorElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlAreaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlAudioElement" = [ "Element" "EventTarget" "HtmlElement" "HtmlMediaElement" "Node" ]; - "HtmlBaseElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlBodyElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlBrElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlButtonElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlCanvasElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlDListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlDataElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlDataListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlDetailsElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlDialogElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlDirectoryElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlDivElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlDocument" = [ "Document" "EventTarget" "Node" ]; - "HtmlElement" = [ "Element" "EventTarget" "Node" ]; - "HtmlEmbedElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlFieldSetElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlFontElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlFormControlsCollection" = [ "HtmlCollection" ]; - "HtmlFormElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlFrameElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlFrameSetElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlHeadElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlHeadingElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlHrElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlHtmlElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlIFrameElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlImageElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlInputElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlLabelElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlLegendElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlLiElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlLinkElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlMapElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlMediaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlMenuElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlMenuItemElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlMetaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlMeterElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlModElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlOListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlObjectElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlOptGroupElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlOptionElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlOptionsCollection" = [ "HtmlCollection" ]; - "HtmlOutputElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlParagraphElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlParamElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlPictureElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlPreElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlProgressElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlQuoteElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlScriptElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlSelectElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlSlotElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlSourceElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlSpanElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlStyleElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlTableCaptionElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlTableCellElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlTableColElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlTableElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlTableRowElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlTableSectionElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlTemplateElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlTextAreaElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlTimeElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlTitleElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlTrackElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlUListElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlUnknownElement" = [ "Element" "EventTarget" "HtmlElement" "Node" ]; - "HtmlVideoElement" = [ "Element" "EventTarget" "HtmlElement" "HtmlMediaElement" "Node" ]; - "IdbCursorWithValue" = [ "IdbCursor" ]; - "IdbDatabase" = [ "EventTarget" ]; - "IdbFileHandle" = [ "EventTarget" ]; - "IdbFileRequest" = [ "DomRequest" "EventTarget" ]; - "IdbLocaleAwareKeyRange" = [ "IdbKeyRange" ]; - "IdbMutableFile" = [ "EventTarget" ]; - "IdbOpenDbRequest" = [ "EventTarget" "IdbRequest" ]; - "IdbRequest" = [ "EventTarget" ]; - "IdbTransaction" = [ "EventTarget" ]; - "IdbVersionChangeEvent" = [ "Event" ]; - "IirFilterNode" = [ "AudioNode" "EventTarget" ]; - "ImageCaptureErrorEvent" = [ "Event" ]; - "ImageTrack" = [ "EventTarget" ]; - "InputEvent" = [ "Event" "UiEvent" ]; - "KeyboardEvent" = [ "Event" "UiEvent" ]; - "KeyframeEffect" = [ "AnimationEffect" ]; - "LocalMediaStream" = [ "EventTarget" "MediaStream" ]; - "MediaDevices" = [ "EventTarget" ]; - "MediaElementAudioSourceNode" = [ "AudioNode" "EventTarget" ]; - "MediaEncryptedEvent" = [ "Event" ]; - "MediaKeyError" = [ "Event" ]; - "MediaKeyMessageEvent" = [ "Event" ]; - "MediaKeySession" = [ "EventTarget" ]; - "MediaQueryList" = [ "EventTarget" ]; - "MediaQueryListEvent" = [ "Event" ]; - "MediaRecorder" = [ "EventTarget" ]; - "MediaRecorderErrorEvent" = [ "Event" ]; - "MediaSource" = [ "EventTarget" ]; - "MediaStream" = [ "EventTarget" ]; - "MediaStreamAudioDestinationNode" = [ "AudioNode" "EventTarget" ]; - "MediaStreamAudioSourceNode" = [ "AudioNode" "EventTarget" ]; - "MediaStreamEvent" = [ "Event" ]; - "MediaStreamTrack" = [ "EventTarget" ]; - "MediaStreamTrackEvent" = [ "Event" ]; - "MediaStreamTrackGenerator" = [ "EventTarget" "MediaStreamTrack" ]; - "MessageEvent" = [ "Event" ]; - "MessagePort" = [ "EventTarget" ]; - "MidiAccess" = [ "EventTarget" ]; - "MidiConnectionEvent" = [ "Event" ]; - "MidiInput" = [ "EventTarget" "MidiPort" ]; - "MidiMessageEvent" = [ "Event" ]; - "MidiOutput" = [ "EventTarget" "MidiPort" ]; - "MidiPort" = [ "EventTarget" ]; - "MouseEvent" = [ "Event" "UiEvent" ]; - "MouseScrollEvent" = [ "Event" "MouseEvent" "UiEvent" ]; - "MutationEvent" = [ "Event" ]; - "NetworkInformation" = [ "EventTarget" ]; - "Node" = [ "EventTarget" ]; - "Notification" = [ "EventTarget" ]; - "NotificationEvent" = [ "Event" "ExtendableEvent" ]; - "OfflineAudioCompletionEvent" = [ "Event" ]; - "OfflineAudioContext" = [ "BaseAudioContext" "EventTarget" ]; - "OfflineResourceList" = [ "EventTarget" ]; - "OffscreenCanvas" = [ "EventTarget" ]; - "OscillatorNode" = [ "AudioNode" "AudioScheduledSourceNode" "EventTarget" ]; - "PageTransitionEvent" = [ "Event" ]; - "PaintWorkletGlobalScope" = [ "WorkletGlobalScope" ]; - "PannerNode" = [ "AudioNode" "EventTarget" ]; - "PaymentMethodChangeEvent" = [ "Event" "PaymentRequestUpdateEvent" ]; - "PaymentRequestUpdateEvent" = [ "Event" ]; - "Performance" = [ "EventTarget" ]; - "PerformanceMark" = [ "PerformanceEntry" ]; - "PerformanceMeasure" = [ "PerformanceEntry" ]; - "PerformanceNavigationTiming" = [ "PerformanceEntry" "PerformanceResourceTiming" ]; - "PerformanceResourceTiming" = [ "PerformanceEntry" ]; - "PermissionStatus" = [ "EventTarget" ]; - "PointerEvent" = [ "Event" "MouseEvent" "UiEvent" ]; - "PopStateEvent" = [ "Event" ]; - "PopupBlockedEvent" = [ "Event" ]; - "PresentationAvailability" = [ "EventTarget" ]; - "PresentationConnection" = [ "EventTarget" ]; - "PresentationConnectionAvailableEvent" = [ "Event" ]; - "PresentationConnectionCloseEvent" = [ "Event" ]; - "PresentationConnectionList" = [ "EventTarget" ]; - "PresentationRequest" = [ "EventTarget" ]; - "ProcessingInstruction" = [ "CharacterData" "EventTarget" "Node" ]; - "ProgressEvent" = [ "Event" ]; - "PromiseRejectionEvent" = [ "Event" ]; - "PublicKeyCredential" = [ "Credential" ]; - "PushEvent" = [ "Event" "ExtendableEvent" ]; - "RadioNodeList" = [ "NodeList" ]; - "RtcDataChannel" = [ "EventTarget" ]; - "RtcDataChannelEvent" = [ "Event" ]; - "RtcPeerConnection" = [ "EventTarget" ]; - "RtcPeerConnectionIceErrorEvent" = [ "Event" ]; - "RtcPeerConnectionIceEvent" = [ "Event" ]; - "RtcTrackEvent" = [ "Event" ]; - "RtcdtmfSender" = [ "EventTarget" ]; - "RtcdtmfToneChangeEvent" = [ "Event" ]; - "Screen" = [ "EventTarget" ]; - "ScreenOrientation" = [ "EventTarget" ]; - "ScriptProcessorNode" = [ "AudioNode" "EventTarget" ]; - "ScrollAreaEvent" = [ "Event" "UiEvent" ]; - "SecurityPolicyViolationEvent" = [ "Event" ]; - "Serial" = [ "EventTarget" ]; - "SerialPort" = [ "EventTarget" ]; - "ServiceWorker" = [ "EventTarget" ]; - "ServiceWorkerContainer" = [ "EventTarget" ]; - "ServiceWorkerGlobalScope" = [ "EventTarget" "WorkerGlobalScope" ]; - "ServiceWorkerRegistration" = [ "EventTarget" ]; - "ShadowRoot" = [ "DocumentFragment" "EventTarget" "Node" ]; - "SharedWorker" = [ "EventTarget" ]; - "SharedWorkerGlobalScope" = [ "EventTarget" "WorkerGlobalScope" ]; - "SourceBuffer" = [ "EventTarget" ]; - "SourceBufferList" = [ "EventTarget" ]; - "SpeechRecognition" = [ "EventTarget" ]; - "SpeechRecognitionError" = [ "Event" ]; - "SpeechRecognitionEvent" = [ "Event" ]; - "SpeechSynthesis" = [ "EventTarget" ]; - "SpeechSynthesisErrorEvent" = [ "Event" "SpeechSynthesisEvent" ]; - "SpeechSynthesisEvent" = [ "Event" ]; - "SpeechSynthesisUtterance" = [ "EventTarget" ]; - "StereoPannerNode" = [ "AudioNode" "EventTarget" ]; - "StorageEvent" = [ "Event" ]; - "SubmitEvent" = [ "Event" ]; - "SvgAnimateElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ]; - "SvgAnimateMotionElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ]; - "SvgAnimateTransformElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ]; - "SvgAnimationElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgCircleElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ]; - "SvgClipPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgComponentTransferFunctionElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgDefsElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; - "SvgDescElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgElement" = [ "Element" "EventTarget" "Node" ]; - "SvgEllipseElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ]; - "SvgFilterElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgForeignObjectElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; - "SvgGeometryElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; - "SvgGradientElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgGraphicsElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgImageElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; - "SvgLineElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ]; - "SvgLinearGradientElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGradientElement" ]; - "SvgMarkerElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgMaskElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgMetadataElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ]; - "SvgPathSegArcAbs" = [ "SvgPathSeg" ]; - "SvgPathSegArcRel" = [ "SvgPathSeg" ]; - "SvgPathSegClosePath" = [ "SvgPathSeg" ]; - "SvgPathSegCurvetoCubicAbs" = [ "SvgPathSeg" ]; - "SvgPathSegCurvetoCubicRel" = [ "SvgPathSeg" ]; - "SvgPathSegCurvetoCubicSmoothAbs" = [ "SvgPathSeg" ]; - "SvgPathSegCurvetoCubicSmoothRel" = [ "SvgPathSeg" ]; - "SvgPathSegCurvetoQuadraticAbs" = [ "SvgPathSeg" ]; - "SvgPathSegCurvetoQuadraticRel" = [ "SvgPathSeg" ]; - "SvgPathSegCurvetoQuadraticSmoothAbs" = [ "SvgPathSeg" ]; - "SvgPathSegCurvetoQuadraticSmoothRel" = [ "SvgPathSeg" ]; - "SvgPathSegLinetoAbs" = [ "SvgPathSeg" ]; - "SvgPathSegLinetoHorizontalAbs" = [ "SvgPathSeg" ]; - "SvgPathSegLinetoHorizontalRel" = [ "SvgPathSeg" ]; - "SvgPathSegLinetoRel" = [ "SvgPathSeg" ]; - "SvgPathSegLinetoVerticalAbs" = [ "SvgPathSeg" ]; - "SvgPathSegLinetoVerticalRel" = [ "SvgPathSeg" ]; - "SvgPathSegMovetoAbs" = [ "SvgPathSeg" ]; - "SvgPathSegMovetoRel" = [ "SvgPathSeg" ]; - "SvgPatternElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgPolygonElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ]; - "SvgPolylineElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ]; - "SvgRadialGradientElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGradientElement" ]; - "SvgRectElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGeometryElement" "SvgGraphicsElement" ]; - "SvgScriptElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgSetElement" = [ "Element" "EventTarget" "Node" "SvgAnimationElement" "SvgElement" ]; - "SvgStopElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgStyleElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgSwitchElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; - "SvgSymbolElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgTextContentElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; - "SvgTextElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" "SvgTextPositioningElement" ]; - "SvgTextPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" ]; - "SvgTextPositioningElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" ]; - "SvgTitleElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgUseElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; - "SvgViewElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgaElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; - "SvgfeBlendElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeColorMatrixElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeComponentTransferElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeCompositeElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeConvolveMatrixElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeDiffuseLightingElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeDisplacementMapElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeDistantLightElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeDropShadowElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeFloodElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeFuncAElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ]; - "SvgfeFuncBElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ]; - "SvgfeFuncGElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ]; - "SvgfeFuncRElement" = [ "Element" "EventTarget" "Node" "SvgComponentTransferFunctionElement" "SvgElement" ]; - "SvgfeGaussianBlurElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeImageElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeMergeElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeMergeNodeElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeMorphologyElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeOffsetElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfePointLightElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeSpecularLightingElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeSpotLightElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeTileElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgfeTurbulenceElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvggElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; - "SvgmPathElement" = [ "Element" "EventTarget" "Node" "SvgElement" ]; - "SvgsvgElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" ]; - "SvgtSpanElement" = [ "Element" "EventTarget" "Node" "SvgElement" "SvgGraphicsElement" "SvgTextContentElement" "SvgTextPositioningElement" ]; - "TaskController" = [ "AbortController" ]; - "TaskPriorityChangeEvent" = [ "Event" ]; - "TaskSignal" = [ "AbortSignal" "EventTarget" ]; - "TcpServerSocket" = [ "EventTarget" ]; - "TcpServerSocketEvent" = [ "Event" ]; - "TcpSocket" = [ "EventTarget" ]; - "TcpSocketErrorEvent" = [ "Event" ]; - "TcpSocketEvent" = [ "Event" ]; - "Text" = [ "CharacterData" "EventTarget" "Node" ]; - "TextTrack" = [ "EventTarget" ]; - "TextTrackCue" = [ "EventTarget" ]; - "TextTrackList" = [ "EventTarget" ]; - "TimeEvent" = [ "Event" ]; - "TouchEvent" = [ "Event" "UiEvent" ]; - "TrackEvent" = [ "Event" ]; - "TransitionEvent" = [ "Event" ]; - "UiEvent" = [ "Event" ]; - "Usb" = [ "EventTarget" ]; - "UsbConnectionEvent" = [ "Event" ]; - "UsbPermissionResult" = [ "EventTarget" "PermissionStatus" ]; - "UserProximityEvent" = [ "Event" ]; - "ValueEvent" = [ "Event" ]; - "VideoStreamTrack" = [ "EventTarget" "MediaStreamTrack" ]; - "VideoTrackList" = [ "EventTarget" ]; - "VrDisplay" = [ "EventTarget" ]; - "VttCue" = [ "EventTarget" "TextTrackCue" ]; - "WakeLockSentinel" = [ "EventTarget" ]; - "WaveShaperNode" = [ "AudioNode" "EventTarget" ]; - "WebGlContextEvent" = [ "Event" ]; - "WebKitCssMatrix" = [ "DomMatrix" "DomMatrixReadOnly" ]; - "WebSocket" = [ "EventTarget" ]; - "WebTransportError" = [ "DomException" ]; - "WebTransportReceiveStream" = [ "ReadableStream" ]; - "WebTransportSendStream" = [ "WritableStream" ]; - "WheelEvent" = [ "Event" "MouseEvent" "UiEvent" ]; - "Window" = [ "EventTarget" ]; - "WindowClient" = [ "Client" ]; - "Worker" = [ "EventTarget" ]; - "WorkerDebuggerGlobalScope" = [ "EventTarget" ]; - "WorkerGlobalScope" = [ "EventTarget" ]; - "XmlDocument" = [ "Document" "EventTarget" "Node" ]; - "XmlHttpRequest" = [ "EventTarget" "XmlHttpRequestEventTarget" ]; - "XmlHttpRequestEventTarget" = [ "EventTarget" ]; - "XmlHttpRequestUpload" = [ "EventTarget" "XmlHttpRequestEventTarget" ]; - "XrBoundedReferenceSpace" = [ "EventTarget" "XrReferenceSpace" "XrSpace" ]; - "XrInputSourceEvent" = [ "Event" ]; - "XrInputSourcesChangeEvent" = [ "Event" ]; - "XrJointPose" = [ "XrPose" ]; - "XrJointSpace" = [ "EventTarget" "XrSpace" ]; - "XrLayer" = [ "EventTarget" ]; - "XrPermissionStatus" = [ "EventTarget" "PermissionStatus" ]; - "XrReferenceSpace" = [ "EventTarget" "XrSpace" ]; - "XrReferenceSpaceEvent" = [ "Event" ]; - "XrSession" = [ "EventTarget" ]; - "XrSessionEvent" = [ "Event" ]; - "XrSpace" = [ "EventTarget" ]; - "XrSystem" = [ "EventTarget" ]; - "XrViewerPose" = [ "XrPose" ]; - "XrWebGlLayer" = [ "EventTarget" "XrLayer" ]; - }; - resolvedDefaultFeatures = [ "Document" "EventTarget" "Location" "Navigator" "Node" "Window" ]; - }; - "whoami" = rec { - crateName = "whoami"; - version = "1.5.1"; - edition = "2018"; - sha256 = "1aafr70h2zlqr73i58bj84hdf9rgplxbpygqbgsqhkk3mngv8jm4"; - dependencies = [ - { - name = "redox_syscall"; - packageId = "redox_syscall 0.4.1"; - target = { target, features }: (("redox" == target."os" or null) && (!("wasm32" == target."arch" or null))); - } - { - name = "wasite"; - packageId = "wasite"; - target = { target, features }: (("wasm32" == target."arch" or null) && ("wasi" == target."os" or null)); - } - { - name = "web-sys"; - packageId = "web-sys"; - optional = true; - target = { target, features }: (("wasm32" == target."arch" or null) && (!("wasi" == target."os" or null)) && (!("daku" == target."os" or null))); - features = [ "Navigator" "Document" "Window" "Location" ]; - } - ]; - features = { - "default" = [ "web" ]; - "web" = [ "web-sys" ]; - "web-sys" = [ "dep:web-sys" ]; - }; - resolvedDefaultFeatures = [ "default" "web" "web-sys" ]; - }; - "wide" = rec { - crateName = "wide"; - version = "0.7.21"; - edition = "2018"; - sha256 = "1z6pfk6pkxribm9d9ikbgjdx0ppfq3ss8r1hb8jkqgxhl54wg3fd"; - authors = [ - "Lokathor " - ]; - dependencies = [ - { - name = "bytemuck"; - packageId = "bytemuck"; - } - { - name = "safe_arch"; - packageId = "safe_arch"; - features = [ "bytemuck" ]; - } - ]; - features = { - "default" = [ "std" ]; - }; - resolvedDefaultFeatures = [ "std" ]; - }; - "winapi-util" = rec { - crateName = "winapi-util"; - version = "0.1.8"; - edition = "2021"; - sha256 = "0svcgddd2rw06mj4r76gj655qsa1ikgz3d3gzax96fz7w62c6k2d"; - libName = "winapi_util"; - authors = [ - "Andrew Gallant " - ]; - dependencies = [ - { - name = "windows-sys"; - packageId = "windows-sys 0.52.0"; - target = { target, features }: (target."windows" or false); - features = [ "Win32_Foundation" "Win32_Storage_FileSystem" "Win32_System_Console" "Win32_System_SystemInformation" ]; - } - ]; - - }; - "windows-core" = rec { - crateName = "windows-core"; - version = "0.52.0"; - edition = "2021"; - sha256 = "1nc3qv7sy24x0nlnb32f7alzpd6f72l4p24vl65vydbyil669ark"; - libName = "windows_core"; - authors = [ - "Microsoft" - ]; - dependencies = [ - { - name = "windows-targets"; - packageId = "windows-targets 0.52.5"; - } - ]; - features = { - }; - resolvedDefaultFeatures = [ "default" ]; - }; - "windows-sys 0.48.0" = rec { - crateName = "windows-sys"; - version = "0.48.0"; - edition = "2018"; - sha256 = "1aan23v5gs7gya1lc46hqn9mdh8yph3fhxmhxlw36pn6pqc28zb7"; - libName = "windows_sys"; - authors = [ - "Microsoft" - ]; - dependencies = [ - { - name = "windows-targets"; - packageId = "windows-targets 0.48.5"; - } - ]; - features = { - "Wdk_System" = [ "Wdk" ]; - "Wdk_System_OfflineRegistry" = [ "Wdk_System" ]; - "Win32_Data" = [ "Win32" ]; - "Win32_Data_HtmlHelp" = [ "Win32_Data" ]; - "Win32_Data_RightsManagement" = [ "Win32_Data" ]; - "Win32_Data_Xml" = [ "Win32_Data" ]; - "Win32_Data_Xml_MsXml" = [ "Win32_Data_Xml" ]; - "Win32_Data_Xml_XmlLite" = [ "Win32_Data_Xml" ]; - "Win32_Devices" = [ "Win32" ]; - "Win32_Devices_AllJoyn" = [ "Win32_Devices" ]; - "Win32_Devices_BiometricFramework" = [ "Win32_Devices" ]; - "Win32_Devices_Bluetooth" = [ "Win32_Devices" ]; - "Win32_Devices_Communication" = [ "Win32_Devices" ]; - "Win32_Devices_DeviceAccess" = [ "Win32_Devices" ]; - "Win32_Devices_DeviceAndDriverInstallation" = [ "Win32_Devices" ]; - "Win32_Devices_DeviceQuery" = [ "Win32_Devices" ]; - "Win32_Devices_Display" = [ "Win32_Devices" ]; - "Win32_Devices_Enumeration" = [ "Win32_Devices" ]; - "Win32_Devices_Enumeration_Pnp" = [ "Win32_Devices_Enumeration" ]; - "Win32_Devices_Fax" = [ "Win32_Devices" ]; - "Win32_Devices_FunctionDiscovery" = [ "Win32_Devices" ]; - "Win32_Devices_Geolocation" = [ "Win32_Devices" ]; - "Win32_Devices_HumanInterfaceDevice" = [ "Win32_Devices" ]; - "Win32_Devices_ImageAcquisition" = [ "Win32_Devices" ]; - "Win32_Devices_PortableDevices" = [ "Win32_Devices" ]; - "Win32_Devices_Properties" = [ "Win32_Devices" ]; - "Win32_Devices_Pwm" = [ "Win32_Devices" ]; - "Win32_Devices_Sensors" = [ "Win32_Devices" ]; - "Win32_Devices_SerialCommunication" = [ "Win32_Devices" ]; - "Win32_Devices_Tapi" = [ "Win32_Devices" ]; - "Win32_Devices_Usb" = [ "Win32_Devices" ]; - "Win32_Devices_WebServicesOnDevices" = [ "Win32_Devices" ]; - "Win32_Foundation" = [ "Win32" ]; - "Win32_Gaming" = [ "Win32" ]; - "Win32_Globalization" = [ "Win32" ]; - "Win32_Graphics" = [ "Win32" ]; - "Win32_Graphics_Dwm" = [ "Win32_Graphics" ]; - "Win32_Graphics_Gdi" = [ "Win32_Graphics" ]; - "Win32_Graphics_Hlsl" = [ "Win32_Graphics" ]; - "Win32_Graphics_OpenGL" = [ "Win32_Graphics" ]; - "Win32_Graphics_Printing" = [ "Win32_Graphics" ]; - "Win32_Graphics_Printing_PrintTicket" = [ "Win32_Graphics_Printing" ]; - "Win32_Management" = [ "Win32" ]; - "Win32_Management_MobileDeviceManagementRegistration" = [ "Win32_Management" ]; - "Win32_Media" = [ "Win32" ]; - "Win32_Media_Audio" = [ "Win32_Media" ]; - "Win32_Media_Audio_Apo" = [ "Win32_Media_Audio" ]; - "Win32_Media_Audio_DirectMusic" = [ "Win32_Media_Audio" ]; - "Win32_Media_Audio_Endpoints" = [ "Win32_Media_Audio" ]; - "Win32_Media_Audio_XAudio2" = [ "Win32_Media_Audio" ]; - "Win32_Media_DeviceManager" = [ "Win32_Media" ]; - "Win32_Media_DxMediaObjects" = [ "Win32_Media" ]; - "Win32_Media_KernelStreaming" = [ "Win32_Media" ]; - "Win32_Media_LibrarySharingServices" = [ "Win32_Media" ]; - "Win32_Media_MediaPlayer" = [ "Win32_Media" ]; - "Win32_Media_Multimedia" = [ "Win32_Media" ]; - "Win32_Media_Speech" = [ "Win32_Media" ]; - "Win32_Media_Streaming" = [ "Win32_Media" ]; - "Win32_Media_WindowsMediaFormat" = [ "Win32_Media" ]; - "Win32_NetworkManagement" = [ "Win32" ]; - "Win32_NetworkManagement_Dhcp" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Dns" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_InternetConnectionWizard" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_IpHelper" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_MobileBroadband" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Multicast" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Ndis" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_NetBios" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_NetManagement" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_NetShell" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_NetworkDiagnosticsFramework" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_NetworkPolicyServer" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_P2P" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_QoS" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Rras" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Snmp" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WNet" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WebDav" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WiFi" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WindowsConnectNow" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WindowsConnectionManager" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WindowsFilteringPlatform" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WindowsFirewall" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WindowsNetworkVirtualization" = [ "Win32_NetworkManagement" ]; - "Win32_Networking" = [ "Win32" ]; - "Win32_Networking_ActiveDirectory" = [ "Win32_Networking" ]; - "Win32_Networking_BackgroundIntelligentTransferService" = [ "Win32_Networking" ]; - "Win32_Networking_Clustering" = [ "Win32_Networking" ]; - "Win32_Networking_HttpServer" = [ "Win32_Networking" ]; - "Win32_Networking_Ldap" = [ "Win32_Networking" ]; - "Win32_Networking_NetworkListManager" = [ "Win32_Networking" ]; - "Win32_Networking_RemoteDifferentialCompression" = [ "Win32_Networking" ]; - "Win32_Networking_WebSocket" = [ "Win32_Networking" ]; - "Win32_Networking_WinHttp" = [ "Win32_Networking" ]; - "Win32_Networking_WinInet" = [ "Win32_Networking" ]; - "Win32_Networking_WinSock" = [ "Win32_Networking" ]; - "Win32_Networking_WindowsWebServices" = [ "Win32_Networking" ]; - "Win32_Security" = [ "Win32" ]; - "Win32_Security_AppLocker" = [ "Win32_Security" ]; - "Win32_Security_Authentication" = [ "Win32_Security" ]; - "Win32_Security_Authentication_Identity" = [ "Win32_Security_Authentication" ]; - "Win32_Security_Authentication_Identity_Provider" = [ "Win32_Security_Authentication_Identity" ]; - "Win32_Security_Authorization" = [ "Win32_Security" ]; - "Win32_Security_Authorization_UI" = [ "Win32_Security_Authorization" ]; - "Win32_Security_ConfigurationSnapin" = [ "Win32_Security" ]; - "Win32_Security_Credentials" = [ "Win32_Security" ]; - "Win32_Security_Cryptography" = [ "Win32_Security" ]; - "Win32_Security_Cryptography_Catalog" = [ "Win32_Security_Cryptography" ]; - "Win32_Security_Cryptography_Certificates" = [ "Win32_Security_Cryptography" ]; - "Win32_Security_Cryptography_Sip" = [ "Win32_Security_Cryptography" ]; - "Win32_Security_Cryptography_UI" = [ "Win32_Security_Cryptography" ]; - "Win32_Security_DiagnosticDataQuery" = [ "Win32_Security" ]; - "Win32_Security_DirectoryServices" = [ "Win32_Security" ]; - "Win32_Security_EnterpriseData" = [ "Win32_Security" ]; - "Win32_Security_ExtensibleAuthenticationProtocol" = [ "Win32_Security" ]; - "Win32_Security_Isolation" = [ "Win32_Security" ]; - "Win32_Security_LicenseProtection" = [ "Win32_Security" ]; - "Win32_Security_NetworkAccessProtection" = [ "Win32_Security" ]; - "Win32_Security_Tpm" = [ "Win32_Security" ]; - "Win32_Security_WinTrust" = [ "Win32_Security" ]; - "Win32_Security_WinWlx" = [ "Win32_Security" ]; - "Win32_Storage" = [ "Win32" ]; - "Win32_Storage_Cabinets" = [ "Win32_Storage" ]; - "Win32_Storage_CloudFilters" = [ "Win32_Storage" ]; - "Win32_Storage_Compression" = [ "Win32_Storage" ]; - "Win32_Storage_DataDeduplication" = [ "Win32_Storage" ]; - "Win32_Storage_DistributedFileSystem" = [ "Win32_Storage" ]; - "Win32_Storage_EnhancedStorage" = [ "Win32_Storage" ]; - "Win32_Storage_FileHistory" = [ "Win32_Storage" ]; - "Win32_Storage_FileServerResourceManager" = [ "Win32_Storage" ]; - "Win32_Storage_FileSystem" = [ "Win32_Storage" ]; - "Win32_Storage_Imapi" = [ "Win32_Storage" ]; - "Win32_Storage_IndexServer" = [ "Win32_Storage" ]; - "Win32_Storage_InstallableFileSystems" = [ "Win32_Storage" ]; - "Win32_Storage_IscsiDisc" = [ "Win32_Storage" ]; - "Win32_Storage_Jet" = [ "Win32_Storage" ]; - "Win32_Storage_OfflineFiles" = [ "Win32_Storage" ]; - "Win32_Storage_OperationRecorder" = [ "Win32_Storage" ]; - "Win32_Storage_Packaging" = [ "Win32_Storage" ]; - "Win32_Storage_Packaging_Appx" = [ "Win32_Storage_Packaging" ]; - "Win32_Storage_Packaging_Opc" = [ "Win32_Storage_Packaging" ]; - "Win32_Storage_ProjectedFileSystem" = [ "Win32_Storage" ]; - "Win32_Storage_StructuredStorage" = [ "Win32_Storage" ]; - "Win32_Storage_Vhd" = [ "Win32_Storage" ]; - "Win32_Storage_VirtualDiskService" = [ "Win32_Storage" ]; - "Win32_Storage_Vss" = [ "Win32_Storage" ]; - "Win32_Storage_Xps" = [ "Win32_Storage" ]; - "Win32_Storage_Xps_Printing" = [ "Win32_Storage_Xps" ]; - "Win32_System" = [ "Win32" ]; - "Win32_System_AddressBook" = [ "Win32_System" ]; - "Win32_System_Antimalware" = [ "Win32_System" ]; - "Win32_System_ApplicationInstallationAndServicing" = [ "Win32_System" ]; - "Win32_System_ApplicationVerifier" = [ "Win32_System" ]; - "Win32_System_AssessmentTool" = [ "Win32_System" ]; - "Win32_System_ClrHosting" = [ "Win32_System" ]; - "Win32_System_Com" = [ "Win32_System" ]; - "Win32_System_Com_CallObj" = [ "Win32_System_Com" ]; - "Win32_System_Com_ChannelCredentials" = [ "Win32_System_Com" ]; - "Win32_System_Com_Events" = [ "Win32_System_Com" ]; - "Win32_System_Com_Marshal" = [ "Win32_System_Com" ]; - "Win32_System_Com_StructuredStorage" = [ "Win32_System_Com" ]; - "Win32_System_Com_UI" = [ "Win32_System_Com" ]; - "Win32_System_Com_Urlmon" = [ "Win32_System_Com" ]; - "Win32_System_ComponentServices" = [ "Win32_System" ]; - "Win32_System_Console" = [ "Win32_System" ]; - "Win32_System_Contacts" = [ "Win32_System" ]; - "Win32_System_CorrelationVector" = [ "Win32_System" ]; - "Win32_System_DataExchange" = [ "Win32_System" ]; - "Win32_System_DeploymentServices" = [ "Win32_System" ]; - "Win32_System_DesktopSharing" = [ "Win32_System" ]; - "Win32_System_DeveloperLicensing" = [ "Win32_System" ]; - "Win32_System_Diagnostics" = [ "Win32_System" ]; - "Win32_System_Diagnostics_Ceip" = [ "Win32_System_Diagnostics" ]; - "Win32_System_Diagnostics_ClrProfiling" = [ "Win32_System_Diagnostics" ]; - "Win32_System_Diagnostics_Debug" = [ "Win32_System_Diagnostics" ]; - "Win32_System_Diagnostics_Debug_ActiveScript" = [ "Win32_System_Diagnostics_Debug" ]; - "Win32_System_Diagnostics_Debug_Extensions" = [ "Win32_System_Diagnostics_Debug" ]; - "Win32_System_Diagnostics_Etw" = [ "Win32_System_Diagnostics" ]; - "Win32_System_Diagnostics_ProcessSnapshotting" = [ "Win32_System_Diagnostics" ]; - "Win32_System_Diagnostics_ToolHelp" = [ "Win32_System_Diagnostics" ]; - "Win32_System_DistributedTransactionCoordinator" = [ "Win32_System" ]; - "Win32_System_Environment" = [ "Win32_System" ]; - "Win32_System_ErrorReporting" = [ "Win32_System" ]; - "Win32_System_EventCollector" = [ "Win32_System" ]; - "Win32_System_EventLog" = [ "Win32_System" ]; - "Win32_System_EventNotificationService" = [ "Win32_System" ]; - "Win32_System_GroupPolicy" = [ "Win32_System" ]; - "Win32_System_HostCompute" = [ "Win32_System" ]; - "Win32_System_HostComputeNetwork" = [ "Win32_System" ]; - "Win32_System_HostComputeSystem" = [ "Win32_System" ]; - "Win32_System_Hypervisor" = [ "Win32_System" ]; - "Win32_System_IO" = [ "Win32_System" ]; - "Win32_System_Iis" = [ "Win32_System" ]; - "Win32_System_Ioctl" = [ "Win32_System" ]; - "Win32_System_JobObjects" = [ "Win32_System" ]; - "Win32_System_Js" = [ "Win32_System" ]; - "Win32_System_Kernel" = [ "Win32_System" ]; - "Win32_System_LibraryLoader" = [ "Win32_System" ]; - "Win32_System_Mailslots" = [ "Win32_System" ]; - "Win32_System_Mapi" = [ "Win32_System" ]; - "Win32_System_Memory" = [ "Win32_System" ]; - "Win32_System_Memory_NonVolatile" = [ "Win32_System_Memory" ]; - "Win32_System_MessageQueuing" = [ "Win32_System" ]; - "Win32_System_MixedReality" = [ "Win32_System" ]; - "Win32_System_Mmc" = [ "Win32_System" ]; - "Win32_System_Ole" = [ "Win32_System" ]; - "Win32_System_ParentalControls" = [ "Win32_System" ]; - "Win32_System_PasswordManagement" = [ "Win32_System" ]; - "Win32_System_Performance" = [ "Win32_System" ]; - "Win32_System_Performance_HardwareCounterProfiling" = [ "Win32_System_Performance" ]; - "Win32_System_Pipes" = [ "Win32_System" ]; - "Win32_System_Power" = [ "Win32_System" ]; - "Win32_System_ProcessStatus" = [ "Win32_System" ]; - "Win32_System_RealTimeCommunications" = [ "Win32_System" ]; - "Win32_System_Recovery" = [ "Win32_System" ]; - "Win32_System_Registry" = [ "Win32_System" ]; - "Win32_System_RemoteAssistance" = [ "Win32_System" ]; - "Win32_System_RemoteDesktop" = [ "Win32_System" ]; - "Win32_System_RemoteManagement" = [ "Win32_System" ]; - "Win32_System_RestartManager" = [ "Win32_System" ]; - "Win32_System_Restore" = [ "Win32_System" ]; - "Win32_System_Rpc" = [ "Win32_System" ]; - "Win32_System_Search" = [ "Win32_System" ]; - "Win32_System_Search_Common" = [ "Win32_System_Search" ]; - "Win32_System_SecurityCenter" = [ "Win32_System" ]; - "Win32_System_ServerBackup" = [ "Win32_System" ]; - "Win32_System_Services" = [ "Win32_System" ]; - "Win32_System_SettingsManagementInfrastructure" = [ "Win32_System" ]; - "Win32_System_SetupAndMigration" = [ "Win32_System" ]; - "Win32_System_Shutdown" = [ "Win32_System" ]; - "Win32_System_StationsAndDesktops" = [ "Win32_System" ]; - "Win32_System_SubsystemForLinux" = [ "Win32_System" ]; - "Win32_System_SystemInformation" = [ "Win32_System" ]; - "Win32_System_SystemServices" = [ "Win32_System" ]; - "Win32_System_TaskScheduler" = [ "Win32_System" ]; - "Win32_System_Threading" = [ "Win32_System" ]; - "Win32_System_Time" = [ "Win32_System" ]; - "Win32_System_TpmBaseServices" = [ "Win32_System" ]; - "Win32_System_UpdateAgent" = [ "Win32_System" ]; - "Win32_System_UpdateAssessment" = [ "Win32_System" ]; - "Win32_System_UserAccessLogging" = [ "Win32_System" ]; - "Win32_System_VirtualDosMachines" = [ "Win32_System" ]; - "Win32_System_WindowsProgramming" = [ "Win32_System" ]; - "Win32_System_WindowsSync" = [ "Win32_System" ]; - "Win32_System_Wmi" = [ "Win32_System" ]; - "Win32_UI" = [ "Win32" ]; - "Win32_UI_Accessibility" = [ "Win32_UI" ]; - "Win32_UI_Animation" = [ "Win32_UI" ]; - "Win32_UI_ColorSystem" = [ "Win32_UI" ]; - "Win32_UI_Controls" = [ "Win32_UI" ]; - "Win32_UI_Controls_Dialogs" = [ "Win32_UI_Controls" ]; - "Win32_UI_Controls_RichEdit" = [ "Win32_UI_Controls" ]; - "Win32_UI_HiDpi" = [ "Win32_UI" ]; - "Win32_UI_Input" = [ "Win32_UI" ]; - "Win32_UI_Input_Ime" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_Ink" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_KeyboardAndMouse" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_Pointer" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_Radial" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_Touch" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_XboxController" = [ "Win32_UI_Input" ]; - "Win32_UI_InteractionContext" = [ "Win32_UI" ]; - "Win32_UI_LegacyWindowsEnvironmentFeatures" = [ "Win32_UI" ]; - "Win32_UI_Magnification" = [ "Win32_UI" ]; - "Win32_UI_Notifications" = [ "Win32_UI" ]; - "Win32_UI_Ribbon" = [ "Win32_UI" ]; - "Win32_UI_Shell" = [ "Win32_UI" ]; - "Win32_UI_Shell_Common" = [ "Win32_UI_Shell" ]; - "Win32_UI_Shell_PropertiesSystem" = [ "Win32_UI_Shell" ]; - "Win32_UI_TabletPC" = [ "Win32_UI" ]; - "Win32_UI_TextServices" = [ "Win32_UI" ]; - "Win32_UI_WindowsAndMessaging" = [ "Win32_UI" ]; - "Win32_UI_Wpf" = [ "Win32_UI" ]; - "Win32_Web" = [ "Win32" ]; - "Win32_Web_InternetExplorer" = [ "Win32_Web" ]; - }; - resolvedDefaultFeatures = [ "Win32" "Win32_Foundation" "Win32_System" "Win32_System_Console" "default" ]; - }; - "windows-sys 0.52.0" = rec { - crateName = "windows-sys"; - version = "0.52.0"; - edition = "2021"; - sha256 = "0gd3v4ji88490zgb6b5mq5zgbvwv7zx1ibn8v3x83rwcdbryaar8"; - libName = "windows_sys"; - authors = [ - "Microsoft" - ]; - dependencies = [ - { - name = "windows-targets"; - packageId = "windows-targets 0.52.5"; - } - ]; - features = { - "Wdk_Foundation" = [ "Wdk" ]; - "Wdk_Graphics" = [ "Wdk" ]; - "Wdk_Graphics_Direct3D" = [ "Wdk_Graphics" ]; - "Wdk_Storage" = [ "Wdk" ]; - "Wdk_Storage_FileSystem" = [ "Wdk_Storage" ]; - "Wdk_Storage_FileSystem_Minifilters" = [ "Wdk_Storage_FileSystem" ]; - "Wdk_System" = [ "Wdk" ]; - "Wdk_System_IO" = [ "Wdk_System" ]; - "Wdk_System_OfflineRegistry" = [ "Wdk_System" ]; - "Wdk_System_Registry" = [ "Wdk_System" ]; - "Wdk_System_SystemInformation" = [ "Wdk_System" ]; - "Wdk_System_SystemServices" = [ "Wdk_System" ]; - "Wdk_System_Threading" = [ "Wdk_System" ]; - "Win32_Data" = [ "Win32" ]; - "Win32_Data_HtmlHelp" = [ "Win32_Data" ]; - "Win32_Data_RightsManagement" = [ "Win32_Data" ]; - "Win32_Devices" = [ "Win32" ]; - "Win32_Devices_AllJoyn" = [ "Win32_Devices" ]; - "Win32_Devices_BiometricFramework" = [ "Win32_Devices" ]; - "Win32_Devices_Bluetooth" = [ "Win32_Devices" ]; - "Win32_Devices_Communication" = [ "Win32_Devices" ]; - "Win32_Devices_DeviceAndDriverInstallation" = [ "Win32_Devices" ]; - "Win32_Devices_DeviceQuery" = [ "Win32_Devices" ]; - "Win32_Devices_Display" = [ "Win32_Devices" ]; - "Win32_Devices_Enumeration" = [ "Win32_Devices" ]; - "Win32_Devices_Enumeration_Pnp" = [ "Win32_Devices_Enumeration" ]; - "Win32_Devices_Fax" = [ "Win32_Devices" ]; - "Win32_Devices_HumanInterfaceDevice" = [ "Win32_Devices" ]; - "Win32_Devices_PortableDevices" = [ "Win32_Devices" ]; - "Win32_Devices_Properties" = [ "Win32_Devices" ]; - "Win32_Devices_Pwm" = [ "Win32_Devices" ]; - "Win32_Devices_Sensors" = [ "Win32_Devices" ]; - "Win32_Devices_SerialCommunication" = [ "Win32_Devices" ]; - "Win32_Devices_Tapi" = [ "Win32_Devices" ]; - "Win32_Devices_Usb" = [ "Win32_Devices" ]; - "Win32_Devices_WebServicesOnDevices" = [ "Win32_Devices" ]; - "Win32_Foundation" = [ "Win32" ]; - "Win32_Gaming" = [ "Win32" ]; - "Win32_Globalization" = [ "Win32" ]; - "Win32_Graphics" = [ "Win32" ]; - "Win32_Graphics_Dwm" = [ "Win32_Graphics" ]; - "Win32_Graphics_Gdi" = [ "Win32_Graphics" ]; - "Win32_Graphics_GdiPlus" = [ "Win32_Graphics" ]; - "Win32_Graphics_Hlsl" = [ "Win32_Graphics" ]; - "Win32_Graphics_OpenGL" = [ "Win32_Graphics" ]; - "Win32_Graphics_Printing" = [ "Win32_Graphics" ]; - "Win32_Graphics_Printing_PrintTicket" = [ "Win32_Graphics_Printing" ]; - "Win32_Management" = [ "Win32" ]; - "Win32_Management_MobileDeviceManagementRegistration" = [ "Win32_Management" ]; - "Win32_Media" = [ "Win32" ]; - "Win32_Media_Audio" = [ "Win32_Media" ]; - "Win32_Media_DxMediaObjects" = [ "Win32_Media" ]; - "Win32_Media_KernelStreaming" = [ "Win32_Media" ]; - "Win32_Media_Multimedia" = [ "Win32_Media" ]; - "Win32_Media_Streaming" = [ "Win32_Media" ]; - "Win32_Media_WindowsMediaFormat" = [ "Win32_Media" ]; - "Win32_NetworkManagement" = [ "Win32" ]; - "Win32_NetworkManagement_Dhcp" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Dns" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_InternetConnectionWizard" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_IpHelper" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Multicast" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Ndis" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_NetBios" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_NetManagement" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_NetShell" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_NetworkDiagnosticsFramework" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_P2P" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_QoS" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Rras" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_Snmp" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WNet" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WebDav" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WiFi" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WindowsConnectionManager" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WindowsFilteringPlatform" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WindowsFirewall" = [ "Win32_NetworkManagement" ]; - "Win32_NetworkManagement_WindowsNetworkVirtualization" = [ "Win32_NetworkManagement" ]; - "Win32_Networking" = [ "Win32" ]; - "Win32_Networking_ActiveDirectory" = [ "Win32_Networking" ]; - "Win32_Networking_Clustering" = [ "Win32_Networking" ]; - "Win32_Networking_HttpServer" = [ "Win32_Networking" ]; - "Win32_Networking_Ldap" = [ "Win32_Networking" ]; - "Win32_Networking_WebSocket" = [ "Win32_Networking" ]; - "Win32_Networking_WinHttp" = [ "Win32_Networking" ]; - "Win32_Networking_WinInet" = [ "Win32_Networking" ]; - "Win32_Networking_WinSock" = [ "Win32_Networking" ]; - "Win32_Networking_WindowsWebServices" = [ "Win32_Networking" ]; - "Win32_Security" = [ "Win32" ]; - "Win32_Security_AppLocker" = [ "Win32_Security" ]; - "Win32_Security_Authentication" = [ "Win32_Security" ]; - "Win32_Security_Authentication_Identity" = [ "Win32_Security_Authentication" ]; - "Win32_Security_Authorization" = [ "Win32_Security" ]; - "Win32_Security_Credentials" = [ "Win32_Security" ]; - "Win32_Security_Cryptography" = [ "Win32_Security" ]; - "Win32_Security_Cryptography_Catalog" = [ "Win32_Security_Cryptography" ]; - "Win32_Security_Cryptography_Certificates" = [ "Win32_Security_Cryptography" ]; - "Win32_Security_Cryptography_Sip" = [ "Win32_Security_Cryptography" ]; - "Win32_Security_Cryptography_UI" = [ "Win32_Security_Cryptography" ]; - "Win32_Security_DiagnosticDataQuery" = [ "Win32_Security" ]; - "Win32_Security_DirectoryServices" = [ "Win32_Security" ]; - "Win32_Security_EnterpriseData" = [ "Win32_Security" ]; - "Win32_Security_ExtensibleAuthenticationProtocol" = [ "Win32_Security" ]; - "Win32_Security_Isolation" = [ "Win32_Security" ]; - "Win32_Security_LicenseProtection" = [ "Win32_Security" ]; - "Win32_Security_NetworkAccessProtection" = [ "Win32_Security" ]; - "Win32_Security_WinTrust" = [ "Win32_Security" ]; - "Win32_Security_WinWlx" = [ "Win32_Security" ]; - "Win32_Storage" = [ "Win32" ]; - "Win32_Storage_Cabinets" = [ "Win32_Storage" ]; - "Win32_Storage_CloudFilters" = [ "Win32_Storage" ]; - "Win32_Storage_Compression" = [ "Win32_Storage" ]; - "Win32_Storage_DistributedFileSystem" = [ "Win32_Storage" ]; - "Win32_Storage_FileHistory" = [ "Win32_Storage" ]; - "Win32_Storage_FileSystem" = [ "Win32_Storage" ]; - "Win32_Storage_Imapi" = [ "Win32_Storage" ]; - "Win32_Storage_IndexServer" = [ "Win32_Storage" ]; - "Win32_Storage_InstallableFileSystems" = [ "Win32_Storage" ]; - "Win32_Storage_IscsiDisc" = [ "Win32_Storage" ]; - "Win32_Storage_Jet" = [ "Win32_Storage" ]; - "Win32_Storage_Nvme" = [ "Win32_Storage" ]; - "Win32_Storage_OfflineFiles" = [ "Win32_Storage" ]; - "Win32_Storage_OperationRecorder" = [ "Win32_Storage" ]; - "Win32_Storage_Packaging" = [ "Win32_Storage" ]; - "Win32_Storage_Packaging_Appx" = [ "Win32_Storage_Packaging" ]; - "Win32_Storage_ProjectedFileSystem" = [ "Win32_Storage" ]; - "Win32_Storage_StructuredStorage" = [ "Win32_Storage" ]; - "Win32_Storage_Vhd" = [ "Win32_Storage" ]; - "Win32_Storage_Xps" = [ "Win32_Storage" ]; - "Win32_System" = [ "Win32" ]; - "Win32_System_AddressBook" = [ "Win32_System" ]; - "Win32_System_Antimalware" = [ "Win32_System" ]; - "Win32_System_ApplicationInstallationAndServicing" = [ "Win32_System" ]; - "Win32_System_ApplicationVerifier" = [ "Win32_System" ]; - "Win32_System_ClrHosting" = [ "Win32_System" ]; - "Win32_System_Com" = [ "Win32_System" ]; - "Win32_System_Com_Marshal" = [ "Win32_System_Com" ]; - "Win32_System_Com_StructuredStorage" = [ "Win32_System_Com" ]; - "Win32_System_Com_Urlmon" = [ "Win32_System_Com" ]; - "Win32_System_ComponentServices" = [ "Win32_System" ]; - "Win32_System_Console" = [ "Win32_System" ]; - "Win32_System_CorrelationVector" = [ "Win32_System" ]; - "Win32_System_DataExchange" = [ "Win32_System" ]; - "Win32_System_DeploymentServices" = [ "Win32_System" ]; - "Win32_System_DeveloperLicensing" = [ "Win32_System" ]; - "Win32_System_Diagnostics" = [ "Win32_System" ]; - "Win32_System_Diagnostics_Ceip" = [ "Win32_System_Diagnostics" ]; - "Win32_System_Diagnostics_Debug" = [ "Win32_System_Diagnostics" ]; - "Win32_System_Diagnostics_Debug_Extensions" = [ "Win32_System_Diagnostics_Debug" ]; - "Win32_System_Diagnostics_Etw" = [ "Win32_System_Diagnostics" ]; - "Win32_System_Diagnostics_ProcessSnapshotting" = [ "Win32_System_Diagnostics" ]; - "Win32_System_Diagnostics_ToolHelp" = [ "Win32_System_Diagnostics" ]; - "Win32_System_DistributedTransactionCoordinator" = [ "Win32_System" ]; - "Win32_System_Environment" = [ "Win32_System" ]; - "Win32_System_ErrorReporting" = [ "Win32_System" ]; - "Win32_System_EventCollector" = [ "Win32_System" ]; - "Win32_System_EventLog" = [ "Win32_System" ]; - "Win32_System_EventNotificationService" = [ "Win32_System" ]; - "Win32_System_GroupPolicy" = [ "Win32_System" ]; - "Win32_System_HostCompute" = [ "Win32_System" ]; - "Win32_System_HostComputeNetwork" = [ "Win32_System" ]; - "Win32_System_HostComputeSystem" = [ "Win32_System" ]; - "Win32_System_Hypervisor" = [ "Win32_System" ]; - "Win32_System_IO" = [ "Win32_System" ]; - "Win32_System_Iis" = [ "Win32_System" ]; - "Win32_System_Ioctl" = [ "Win32_System" ]; - "Win32_System_JobObjects" = [ "Win32_System" ]; - "Win32_System_Js" = [ "Win32_System" ]; - "Win32_System_Kernel" = [ "Win32_System" ]; - "Win32_System_LibraryLoader" = [ "Win32_System" ]; - "Win32_System_Mailslots" = [ "Win32_System" ]; - "Win32_System_Mapi" = [ "Win32_System" ]; - "Win32_System_Memory" = [ "Win32_System" ]; - "Win32_System_Memory_NonVolatile" = [ "Win32_System_Memory" ]; - "Win32_System_MessageQueuing" = [ "Win32_System" ]; - "Win32_System_MixedReality" = [ "Win32_System" ]; - "Win32_System_Ole" = [ "Win32_System" ]; - "Win32_System_PasswordManagement" = [ "Win32_System" ]; - "Win32_System_Performance" = [ "Win32_System" ]; - "Win32_System_Performance_HardwareCounterProfiling" = [ "Win32_System_Performance" ]; - "Win32_System_Pipes" = [ "Win32_System" ]; - "Win32_System_Power" = [ "Win32_System" ]; - "Win32_System_ProcessStatus" = [ "Win32_System" ]; - "Win32_System_Recovery" = [ "Win32_System" ]; - "Win32_System_Registry" = [ "Win32_System" ]; - "Win32_System_RemoteDesktop" = [ "Win32_System" ]; - "Win32_System_RemoteManagement" = [ "Win32_System" ]; - "Win32_System_RestartManager" = [ "Win32_System" ]; - "Win32_System_Restore" = [ "Win32_System" ]; - "Win32_System_Rpc" = [ "Win32_System" ]; - "Win32_System_Search" = [ "Win32_System" ]; - "Win32_System_Search_Common" = [ "Win32_System_Search" ]; - "Win32_System_SecurityCenter" = [ "Win32_System" ]; - "Win32_System_Services" = [ "Win32_System" ]; - "Win32_System_SetupAndMigration" = [ "Win32_System" ]; - "Win32_System_Shutdown" = [ "Win32_System" ]; - "Win32_System_StationsAndDesktops" = [ "Win32_System" ]; - "Win32_System_SubsystemForLinux" = [ "Win32_System" ]; - "Win32_System_SystemInformation" = [ "Win32_System" ]; - "Win32_System_SystemServices" = [ "Win32_System" ]; - "Win32_System_Threading" = [ "Win32_System" ]; - "Win32_System_Time" = [ "Win32_System" ]; - "Win32_System_TpmBaseServices" = [ "Win32_System" ]; - "Win32_System_UserAccessLogging" = [ "Win32_System" ]; - "Win32_System_Variant" = [ "Win32_System" ]; - "Win32_System_VirtualDosMachines" = [ "Win32_System" ]; - "Win32_System_WindowsProgramming" = [ "Win32_System" ]; - "Win32_System_Wmi" = [ "Win32_System" ]; - "Win32_UI" = [ "Win32" ]; - "Win32_UI_Accessibility" = [ "Win32_UI" ]; - "Win32_UI_ColorSystem" = [ "Win32_UI" ]; - "Win32_UI_Controls" = [ "Win32_UI" ]; - "Win32_UI_Controls_Dialogs" = [ "Win32_UI_Controls" ]; - "Win32_UI_HiDpi" = [ "Win32_UI" ]; - "Win32_UI_Input" = [ "Win32_UI" ]; - "Win32_UI_Input_Ime" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_KeyboardAndMouse" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_Pointer" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_Touch" = [ "Win32_UI_Input" ]; - "Win32_UI_Input_XboxController" = [ "Win32_UI_Input" ]; - "Win32_UI_InteractionContext" = [ "Win32_UI" ]; - "Win32_UI_Magnification" = [ "Win32_UI" ]; - "Win32_UI_Shell" = [ "Win32_UI" ]; - "Win32_UI_Shell_PropertiesSystem" = [ "Win32_UI_Shell" ]; - "Win32_UI_TabletPC" = [ "Win32_UI" ]; - "Win32_UI_TextServices" = [ "Win32_UI" ]; - "Win32_UI_WindowsAndMessaging" = [ "Win32_UI" ]; - "Win32_Web" = [ "Win32" ]; - "Win32_Web_InternetExplorer" = [ "Win32_Web" ]; - }; - resolvedDefaultFeatures = [ "Win32" "Win32_Foundation" "Win32_NetworkManagement" "Win32_NetworkManagement_IpHelper" "Win32_Networking" "Win32_Networking_WinSock" "Win32_Storage" "Win32_Storage_FileSystem" "Win32_System" "Win32_System_Console" "Win32_System_Diagnostics" "Win32_System_Diagnostics_Debug" "Win32_System_SystemInformation" "Win32_System_Threading" "default" ]; - }; - "windows-targets 0.48.5" = rec { - crateName = "windows-targets"; - version = "0.48.5"; - edition = "2018"; - sha256 = "034ljxqshifs1lan89xwpcy1hp0lhdh4b5n0d2z4fwjx2piacbws"; - libName = "windows_targets"; - authors = [ - "Microsoft" - ]; - dependencies = [ - { - name = "windows_aarch64_gnullvm"; - packageId = "windows_aarch64_gnullvm 0.48.5"; - target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "aarch64-pc-windows-gnullvm"); - } - { - name = "windows_aarch64_msvc"; - packageId = "windows_aarch64_msvc 0.48.5"; - target = { target, features }: (("aarch64" == target."arch" or null) && ("msvc" == target."env" or null) && (!(target."windows_raw_dylib" or false))); - } - { - name = "windows_i686_gnu"; - packageId = "windows_i686_gnu 0.48.5"; - target = { target, features }: (("x86" == target."arch" or null) && ("gnu" == target."env" or null) && (!(target."windows_raw_dylib" or false))); - } - { - name = "windows_i686_msvc"; - packageId = "windows_i686_msvc 0.48.5"; - target = { target, features }: (("x86" == target."arch" or null) && ("msvc" == target."env" or null) && (!(target."windows_raw_dylib" or false))); - } - { - name = "windows_x86_64_gnu"; - packageId = "windows_x86_64_gnu 0.48.5"; - target = { target, features }: (("x86_64" == target."arch" or null) && ("gnu" == target."env" or null) && (!("llvm" == target."abi" or null)) && (!(target."windows_raw_dylib" or false))); - } - { - name = "windows_x86_64_gnullvm"; - packageId = "windows_x86_64_gnullvm 0.48.5"; - target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "x86_64-pc-windows-gnullvm"); - } - { - name = "windows_x86_64_msvc"; - packageId = "windows_x86_64_msvc 0.48.5"; - target = { target, features }: (("x86_64" == target."arch" or null) && ("msvc" == target."env" or null) && (!(target."windows_raw_dylib" or false))); - } - ]; - - }; - "windows-targets 0.52.5" = rec { - crateName = "windows-targets"; - version = "0.52.5"; - edition = "2021"; - sha256 = "1sz7jrnkygmmlj1ia8fk85wbyil450kq5qkh5qh9sh2rcnj161vg"; - libName = "windows_targets"; - authors = [ - "Microsoft" - ]; - dependencies = [ - { - name = "windows_aarch64_gnullvm"; - packageId = "windows_aarch64_gnullvm 0.52.5"; - target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "aarch64-pc-windows-gnullvm"); - } - { - name = "windows_aarch64_msvc"; - packageId = "windows_aarch64_msvc 0.52.5"; - target = { target, features }: (("aarch64" == target."arch" or null) && ("msvc" == target."env" or null) && (!(target."windows_raw_dylib" or false))); - } - { - name = "windows_i686_gnu"; - packageId = "windows_i686_gnu 0.52.5"; - target = { target, features }: (("x86" == target."arch" or null) && ("gnu" == target."env" or null) && (!("llvm" == target."abi" or null)) && (!(target."windows_raw_dylib" or false))); - } - { - name = "windows_i686_gnullvm"; - packageId = "windows_i686_gnullvm"; - target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "i686-pc-windows-gnullvm"); - } - { - name = "windows_i686_msvc"; - packageId = "windows_i686_msvc 0.52.5"; - target = { target, features }: (("x86" == target."arch" or null) && ("msvc" == target."env" or null) && (!(target."windows_raw_dylib" or false))); - } - { - name = "windows_x86_64_gnu"; - packageId = "windows_x86_64_gnu 0.52.5"; - target = { target, features }: (("x86_64" == target."arch" or null) && ("gnu" == target."env" or null) && (!("llvm" == target."abi" or null)) && (!(target."windows_raw_dylib" or false))); - } - { - name = "windows_x86_64_gnullvm"; - packageId = "windows_x86_64_gnullvm 0.52.5"; - target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "x86_64-pc-windows-gnullvm"); - } - { - name = "windows_x86_64_msvc"; - packageId = "windows_x86_64_msvc 0.52.5"; - target = { target, features }: ((("x86_64" == target."arch" or null) || ("arm64ec" == target."arch" or null)) && ("msvc" == target."env" or null) && (!(target."windows_raw_dylib" or false))); - } - ]; - - }; - "windows_aarch64_gnullvm 0.48.5" = rec { - crateName = "windows_aarch64_gnullvm"; - version = "0.48.5"; - edition = "2018"; - sha256 = "1n05v7qblg1ci3i567inc7xrkmywczxrs1z3lj3rkkxw18py6f1b"; - authors = [ - "Microsoft" - ]; - - }; - "windows_aarch64_gnullvm 0.52.5" = rec { - crateName = "windows_aarch64_gnullvm"; - version = "0.52.5"; - edition = "2021"; - sha256 = "0qrjimbj67nnyn7zqy15mzzmqg0mn5gsr2yciqjxm3cb3vbyx23h"; - authors = [ - "Microsoft" - ]; - - }; - "windows_aarch64_msvc 0.48.5" = rec { - crateName = "windows_aarch64_msvc"; - version = "0.48.5"; - edition = "2018"; - sha256 = "1g5l4ry968p73g6bg6jgyvy9lb8fyhcs54067yzxpcpkf44k2dfw"; - authors = [ - "Microsoft" - ]; - - }; - "windows_aarch64_msvc 0.52.5" = rec { - crateName = "windows_aarch64_msvc"; - version = "0.52.5"; - edition = "2021"; - sha256 = "1dmga8kqlmln2ibckk6mxc9n59vdg8ziqa2zr8awcl720hazv1cr"; - authors = [ - "Microsoft" - ]; - - }; - "windows_i686_gnu 0.48.5" = rec { - crateName = "windows_i686_gnu"; - version = "0.48.5"; - edition = "2018"; - sha256 = "0gklnglwd9ilqx7ac3cn8hbhkraqisd0n83jxzf9837nvvkiand7"; - authors = [ - "Microsoft" - ]; - - }; - "windows_i686_gnu 0.52.5" = rec { - crateName = "windows_i686_gnu"; - version = "0.52.5"; - edition = "2021"; - sha256 = "0w4np3l6qwlra9s2xpflqrs60qk1pz6ahhn91rr74lvdy4y0gfl8"; - authors = [ - "Microsoft" - ]; - - }; - "windows_i686_gnullvm" = rec { - crateName = "windows_i686_gnullvm"; - version = "0.52.5"; - edition = "2021"; - sha256 = "1s9f4gff0cixd86mw3n63rpmsm4pmr4ffndl6s7qa2h35492dx47"; - authors = [ - "Microsoft" - ]; - - }; - "windows_i686_msvc 0.48.5" = rec { - crateName = "windows_i686_msvc"; - version = "0.48.5"; - edition = "2018"; - sha256 = "01m4rik437dl9rdf0ndnm2syh10hizvq0dajdkv2fjqcywrw4mcg"; - authors = [ - "Microsoft" - ]; - - }; - "windows_i686_msvc 0.52.5" = rec { - crateName = "windows_i686_msvc"; - version = "0.52.5"; - edition = "2021"; - sha256 = "1gw7fklxywgpnwbwg43alb4hm0qjmx72hqrlwy5nanrxs7rjng6v"; - authors = [ - "Microsoft" - ]; - - }; - "windows_x86_64_gnu 0.48.5" = rec { - crateName = "windows_x86_64_gnu"; - version = "0.48.5"; - edition = "2018"; - sha256 = "13kiqqcvz2vnyxzydjh73hwgigsdr2z1xpzx313kxll34nyhmm2k"; - authors = [ - "Microsoft" - ]; - - }; - "windows_x86_64_gnu 0.52.5" = rec { - crateName = "windows_x86_64_gnu"; - version = "0.52.5"; - edition = "2021"; - sha256 = "1n8p2mcf3lw6300k77a0knksssmgwb9hynl793mhkzyydgvlchjf"; - authors = [ - "Microsoft" - ]; - - }; - "windows_x86_64_gnullvm 0.48.5" = rec { - crateName = "windows_x86_64_gnullvm"; - version = "0.48.5"; - edition = "2018"; - sha256 = "1k24810wfbgz8k48c2yknqjmiigmql6kk3knmddkv8k8g1v54yqb"; - authors = [ - "Microsoft" - ]; - - }; - "windows_x86_64_gnullvm 0.52.5" = rec { - crateName = "windows_x86_64_gnullvm"; - version = "0.52.5"; - edition = "2021"; - sha256 = "15n56jrh4s5bz66zimavr1rmcaw6wa306myrvmbc6rydhbj9h8l5"; - authors = [ - "Microsoft" - ]; - - }; - "windows_x86_64_msvc 0.48.5" = rec { - crateName = "windows_x86_64_msvc"; - version = "0.48.5"; - edition = "2018"; - sha256 = "0f4mdp895kkjh9zv8dxvn4pc10xr7839lf5pa9l0193i2pkgr57d"; - authors = [ - "Microsoft" - ]; - - }; - "windows_x86_64_msvc 0.52.5" = rec { - crateName = "windows_x86_64_msvc"; - version = "0.52.5"; - edition = "2021"; - sha256 = "1w1bn24ap8dp9i85s8mlg8cim2bl2368bd6qyvm0xzqvzmdpxi5y"; - authors = [ - "Microsoft" - ]; - - }; - "yansi" = rec { - crateName = "yansi"; - version = "1.0.1"; - edition = "2021"; - sha256 = "0jdh55jyv0dpd38ij4qh60zglbw9aa8wafqai6m0wa7xaxk3mrfg"; - authors = [ - "Sergio Benitez " - ]; - features = { - "default" = [ "std" ]; - "detect-env" = [ "std" ]; - "detect-tty" = [ "is-terminal" "std" ]; - "hyperlink" = [ "std" ]; - "is-terminal" = [ "dep:is-terminal" ]; - "std" = [ "alloc" ]; - }; - resolvedDefaultFeatures = [ "alloc" "default" "std" ]; - }; - "zerocopy" = rec { - crateName = "zerocopy"; - version = "0.7.34"; - edition = "2018"; - sha256 = "11xhrwixm78m6ca1jdxf584wdwvpgg7q00vg21fhwl0psvyf71xf"; - authors = [ - "Joshua Liebow-Feeser " - ]; - dependencies = [ - { - name = "zerocopy-derive"; - packageId = "zerocopy-derive"; - optional = true; - } - { - name = "zerocopy-derive"; - packageId = "zerocopy-derive"; - target = { target, features }: false; - } - ]; - devDependencies = [ - { - name = "zerocopy-derive"; - packageId = "zerocopy-derive"; - } - ]; - features = { - "__internal_use_only_features_that_work_on_stable" = [ "alloc" "derive" "simd" ]; - "byteorder" = [ "dep:byteorder" ]; - "default" = [ "byteorder" ]; - "derive" = [ "zerocopy-derive" ]; - "simd-nightly" = [ "simd" ]; - "zerocopy-derive" = [ "dep:zerocopy-derive" ]; - }; - resolvedDefaultFeatures = [ "simd" ]; - }; - "zerocopy-derive" = rec { - crateName = "zerocopy-derive"; - version = "0.7.34"; - edition = "2018"; - sha256 = "0fqvglw01w3hp7xj9gdk1800x9j7v58s9w8ijiyiz2a7krb39s8m"; - procMacro = true; - libName = "zerocopy_derive"; - authors = [ - "Joshua Liebow-Feeser " - ]; - dependencies = [ - { - name = "proc-macro2"; - packageId = "proc-macro2"; - } - { - name = "quote"; - packageId = "quote"; - } - { - name = "syn"; - packageId = "syn 2.0.66"; - } - ]; - - }; - "zip" = rec { - crateName = "zip"; - version = "0.6.6"; - edition = "2021"; - sha256 = "0qcjbqfvbwxi5g9wbymf2r05cvziic2qqj4xy64q3hp48vi980vn"; - authors = [ - "Mathijs van de Nes " - "Marli Frost " - "Ryan Levick " - ]; - dependencies = [ - { - name = "byteorder"; - packageId = "byteorder 1.5.0"; - } - { - name = "crc32fast"; - packageId = "crc32fast"; - } - { - name = "crossbeam-utils"; - packageId = "crossbeam-utils"; - target = { target, features }: ((("arm" == target."arch" or null) && ("32" == target."pointer_width" or null)) || ("mips" == target."arch" or null) || ("powerpc" == target."arch" or null)); - } - { - name = "flate2"; - packageId = "flate2"; - optional = true; - usesDefaultFeatures = false; - } - ]; - features = { - "aes" = [ "dep:aes" ]; - "aes-crypto" = [ "aes" "constant_time_eq" "hmac" "pbkdf2" "sha1" ]; - "bzip2" = [ "dep:bzip2" ]; - "constant_time_eq" = [ "dep:constant_time_eq" ]; - "default" = [ "aes-crypto" "bzip2" "deflate" "time" "zstd" ]; - "deflate" = [ "flate2/rust_backend" ]; - "deflate-miniz" = [ "flate2/default" ]; - "deflate-zlib" = [ "flate2/zlib" ]; - "flate2" = [ "dep:flate2" ]; - "hmac" = [ "dep:hmac" ]; - "pbkdf2" = [ "dep:pbkdf2" ]; - "sha1" = [ "dep:sha1" ]; - "time" = [ "dep:time" ]; - "zstd" = [ "dep:zstd" ]; - }; - resolvedDefaultFeatures = [ "deflate" "flate2" ]; - }; - }; - - # -# crate2nix/default.nix (excerpt start) -# - - /* Target (platform) data for conditional dependencies. - This corresponds roughly to what buildRustCrate is setting. - */ - makeDefaultTarget = platform: { - unix = platform.isUnix; - windows = platform.isWindows; - fuchsia = true; - test = false; - - /* We are choosing an arbitrary rust version to grab `lib` from, - which is unfortunate, but `lib` has been version-agnostic the - whole time so this is good enough for now. - */ - os = pkgs.rust.lib.toTargetOs platform; - arch = pkgs.rust.lib.toTargetArch platform; - family = pkgs.rust.lib.toTargetFamily platform; - vendor = pkgs.rust.lib.toTargetVendor platform; - env = "gnu"; - endian = - if platform.parsed.cpu.significantByte.name == "littleEndian" - then "little" else "big"; - pointer_width = toString platform.parsed.cpu.bits; - debug_assertions = false; - }; - - /* Filters common temp files and build files. */ - # TODO(pkolloch): Substitute with gitignore filter - sourceFilter = name: type: - let - baseName = builtins.baseNameOf (builtins.toString name); - in - ! ( - # Filter out git - baseName == ".gitignore" - || (type == "directory" && baseName == ".git") - - # Filter out build results - || ( - type == "directory" && ( - baseName == "target" - || baseName == "_site" - || baseName == ".sass-cache" - || baseName == ".jekyll-metadata" - || baseName == "build-artifacts" - ) - ) - - # Filter out nix-build result symlinks - || ( - type == "symlink" && lib.hasPrefix "result" baseName - ) - - # Filter out IDE config - || ( - type == "directory" && ( - baseName == ".idea" || baseName == ".vscode" - ) - ) || lib.hasSuffix ".iml" baseName - - # Filter out nix build files - || baseName == "Cargo.nix" - - # Filter out editor backup / swap files. - || lib.hasSuffix "~" baseName - || builtins.match "^\\.sw[a-z]$$" baseName != null - || builtins.match "^\\..*\\.sw[a-z]$$" baseName != null - || lib.hasSuffix ".tmp" baseName - || lib.hasSuffix ".bak" baseName - || baseName == "tests.nix" - ); - - /* Returns a crate which depends on successful test execution - of crate given as the second argument. - - testCrateFlags: list of flags to pass to the test exectuable - testInputs: list of packages that should be available during test execution - */ - crateWithTest = { crate, testCrate, testCrateFlags, testInputs, testPreRun, testPostRun }: - assert builtins.typeOf testCrateFlags == "list"; - assert builtins.typeOf testInputs == "list"; - assert builtins.typeOf testPreRun == "string"; - assert builtins.typeOf testPostRun == "string"; - let - # override the `crate` so that it will build and execute tests instead of - # building the actual lib and bin targets We just have to pass `--test` - # to rustc and it will do the right thing. We execute the tests and copy - # their log and the test executables to $out for later inspection. - test = - let - drv = testCrate.override - ( - _: { - buildTests = true; - } - ); - # If the user hasn't set any pre/post commands, we don't want to - # insert empty lines. This means that any existing users of crate2nix - # don't get a spurious rebuild unless they set these explicitly. - testCommand = pkgs.lib.concatStringsSep "\n" - (pkgs.lib.filter (s: s != "") [ - testPreRun - "$f $testCrateFlags 2>&1 | tee -a $out" - testPostRun - ]); - in - pkgs.runCommand "run-tests-${testCrate.name}" - { - inherit testCrateFlags; - buildInputs = testInputs; - } '' - set -e - - export RUST_BACKTRACE=1 - - # recreate a file hierarchy as when running tests with cargo - - # the source for test data - # It's necessary to locate the source in $NIX_BUILD_TOP/source/ - # instead of $NIX_BUILD_TOP/ - # because we compiled those test binaries in the former and not the latter. - # So all paths will expect source tree to be there and not in the build top directly. - # For example: $NIX_BUILD_TOP := /build in general, if you ask yourself. - # NOTE: There could be edge cases if `crate.sourceRoot` does exist but - # it's very hard to reason about them. - # Open a bug if you run into this! - mkdir -p source/ - cd source/ - - ${pkgs.buildPackages.xorg.lndir}/bin/lndir ${crate.src} - - # build outputs - testRoot=target/debug - mkdir -p $testRoot - - # executables of the crate - # we copy to prevent std::env::current_exe() to resolve to a store location - for i in ${crate}/bin/*; do - cp "$i" "$testRoot" - done - chmod +w -R . - - # test harness executables are suffixed with a hash, like cargo does - # this allows to prevent name collision with the main - # executables of the crate - hash=$(basename $out) - for file in ${drv}/tests/*; do - f=$testRoot/$(basename $file)-$hash - cp $file $f - ${testCommand} - done - ''; - in - pkgs.runCommand "${crate.name}-linked" - { - inherit (crate) outputs crateName; - passthru = (crate.passthru or { }) // { - inherit test; - }; - } - (lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) '' - echo tested by ${test} - '' + '' - ${lib.concatMapStringsSep "\n" (output: "ln -s ${crate.${output}} ${"$"}${output}") crate.outputs} - ''); - - /* A restricted overridable version of builtRustCratesWithFeatures. */ - buildRustCrateWithFeatures = - { packageId - , features ? rootFeatures - , crateOverrides ? defaultCrateOverrides - , buildRustCrateForPkgsFunc ? null - , runTests ? false - , testCrateFlags ? [ ] - , testInputs ? [ ] - # Any command to run immediatelly before a test is executed. - , testPreRun ? "" - # Any command run immediatelly after a test is executed. - , testPostRun ? "" - }: - lib.makeOverridable - ( - { features - , crateOverrides - , runTests - , testCrateFlags - , testInputs - , testPreRun - , testPostRun - }: - let - buildRustCrateForPkgsFuncOverriden = - if buildRustCrateForPkgsFunc != null - then buildRustCrateForPkgsFunc - else - ( - if crateOverrides == pkgs.defaultCrateOverrides - then buildRustCrateForPkgs - else - pkgs: (buildRustCrateForPkgs pkgs).override { - defaultCrateOverrides = crateOverrides; - } - ); - builtRustCrates = builtRustCratesWithFeatures { - inherit packageId features; - buildRustCrateForPkgsFunc = buildRustCrateForPkgsFuncOverriden; - runTests = false; - }; - builtTestRustCrates = builtRustCratesWithFeatures { - inherit packageId features; - buildRustCrateForPkgsFunc = buildRustCrateForPkgsFuncOverriden; - runTests = true; - }; - drv = builtRustCrates.crates.${packageId}; - testDrv = builtTestRustCrates.crates.${packageId}; - derivation = - if runTests then - crateWithTest - { - crate = drv; - testCrate = testDrv; - inherit testCrateFlags testInputs testPreRun testPostRun; - } - else drv; - in - derivation - ) - { inherit features crateOverrides runTests testCrateFlags testInputs testPreRun testPostRun; }; - - /* Returns an attr set with packageId mapped to the result of buildRustCrateForPkgsFunc - for the corresponding crate. - */ - builtRustCratesWithFeatures = - { packageId - , features - , crateConfigs ? crates - , buildRustCrateForPkgsFunc - , runTests - , makeTarget ? makeDefaultTarget - } @ args: - assert (builtins.isAttrs crateConfigs); - assert (builtins.isString packageId); - assert (builtins.isList features); - assert (builtins.isAttrs (makeTarget stdenv.hostPlatform)); - assert (builtins.isBool runTests); - let - rootPackageId = packageId; - mergedFeatures = mergePackageFeatures - ( - args // { - inherit rootPackageId; - target = makeTarget stdenv.hostPlatform // { test = runTests; }; - } - ); - # Memoize built packages so that reappearing packages are only built once. - builtByPackageIdByPkgs = mkBuiltByPackageIdByPkgs pkgs; - mkBuiltByPackageIdByPkgs = pkgs: - let - self = { - crates = lib.mapAttrs (packageId: value: buildByPackageIdForPkgsImpl self pkgs packageId) crateConfigs; - target = makeTarget pkgs.stdenv.hostPlatform; - build = mkBuiltByPackageIdByPkgs pkgs.buildPackages; - }; - in - self; - buildByPackageIdForPkgsImpl = self: pkgs: packageId: - let - features = mergedFeatures."${packageId}" or [ ]; - crateConfig' = crateConfigs."${packageId}"; - crateConfig = - builtins.removeAttrs crateConfig' [ "resolvedDefaultFeatures" "devDependencies" ]; - devDependencies = - lib.optionals - (runTests && packageId == rootPackageId) - (crateConfig'.devDependencies or [ ]); - dependencies = - dependencyDerivations { - inherit features; - inherit (self) target; - buildByPackageId = depPackageId: - # proc_macro crates must be compiled for the build architecture - if crateConfigs.${depPackageId}.procMacro or false - then self.build.crates.${depPackageId} - else self.crates.${depPackageId}; - dependencies = - (crateConfig.dependencies or [ ]) - ++ devDependencies; - }; - buildDependencies = - dependencyDerivations { - inherit features; - inherit (self.build) target; - buildByPackageId = depPackageId: - self.build.crates.${depPackageId}; - dependencies = crateConfig.buildDependencies or [ ]; - }; - dependenciesWithRenames = - let - buildDeps = filterEnabledDependencies { - inherit features; - inherit (self) target; - dependencies = crateConfig.dependencies or [ ] ++ devDependencies; - }; - hostDeps = filterEnabledDependencies { - inherit features; - inherit (self.build) target; - dependencies = crateConfig.buildDependencies or [ ]; - }; - in - lib.filter (d: d ? "rename") (hostDeps ++ buildDeps); - # Crate renames have the form: - # - # { - # crate_name = [ - # { version = "1.2.3"; rename = "crate_name01"; } - # ]; - # # ... - # } - crateRenames = - let - grouped = - lib.groupBy - (dependency: dependency.name) - dependenciesWithRenames; - versionAndRename = dep: - let - package = crateConfigs."${dep.packageId}"; - in - { inherit (dep) rename; inherit (package) version; }; - in - lib.mapAttrs (name: builtins.map versionAndRename) grouped; - in - buildRustCrateForPkgsFunc pkgs - ( - crateConfig // { - # https://github.com/NixOS/nixpkgs/issues/218712 - dontStrip = stdenv.hostPlatform.isDarwin; - src = crateConfig.src or ( - pkgs.fetchurl rec { - name = "${crateConfig.crateName}-${crateConfig.version}.tar.gz"; - # https://www.pietroalbini.org/blog/downloading-crates-io/ - # Not rate-limited, CDN URL. - url = "https://static.crates.io/crates/${crateConfig.crateName}/${crateConfig.crateName}-${crateConfig.version}.crate"; - sha256 = - assert (lib.assertMsg (crateConfig ? sha256) "Missing sha256 for ${name}"); - crateConfig.sha256; - } - ); - extraRustcOpts = lib.lists.optional (targetFeatures != [ ]) "-C target-feature=${lib.concatMapStringsSep "," (x: "+${x}") targetFeatures}"; - inherit features dependencies buildDependencies crateRenames release; - } - ); - in - builtByPackageIdByPkgs; - - /* Returns the actual derivations for the given dependencies. */ - dependencyDerivations = - { buildByPackageId - , features - , dependencies - , target - }: - assert (builtins.isList features); - assert (builtins.isList dependencies); - assert (builtins.isAttrs target); - let - enabledDependencies = filterEnabledDependencies { - inherit dependencies features target; - }; - depDerivation = dependency: buildByPackageId dependency.packageId; - in - map depDerivation enabledDependencies; - - /* Returns a sanitized version of val with all values substituted that cannot - be serialized as JSON. - */ - sanitizeForJson = val: - if builtins.isAttrs val - then lib.mapAttrs (n: sanitizeForJson) val - else if builtins.isList val - then builtins.map sanitizeForJson val - else if builtins.isFunction val - then "function" - else val; - - /* Returns various tools to debug a crate. */ - debugCrate = { packageId, target ? makeDefaultTarget stdenv.hostPlatform }: - assert (builtins.isString packageId); - let - debug = rec { - # The built tree as passed to buildRustCrate. - buildTree = buildRustCrateWithFeatures { - buildRustCrateForPkgsFunc = _: lib.id; - inherit packageId; - }; - sanitizedBuildTree = sanitizeForJson buildTree; - dependencyTree = sanitizeForJson - ( - buildRustCrateWithFeatures { - buildRustCrateForPkgsFunc = _: crate: { - "01_crateName" = crate.crateName or false; - "02_features" = crate.features or [ ]; - "03_dependencies" = crate.dependencies or [ ]; - }; - inherit packageId; - } - ); - mergedPackageFeatures = mergePackageFeatures { - features = rootFeatures; - inherit packageId target; - }; - diffedDefaultPackageFeatures = diffDefaultPackageFeatures { - inherit packageId target; - }; - }; - in - { internal = debug; }; - - /* Returns differences between cargo default features and crate2nix default - features. - - This is useful for verifying the feature resolution in crate2nix. - */ - diffDefaultPackageFeatures = - { crateConfigs ? crates - , packageId - , target - }: - assert (builtins.isAttrs crateConfigs); - let - prefixValues = prefix: lib.mapAttrs (n: v: { "${prefix}" = v; }); - mergedFeatures = - prefixValues - "crate2nix" - (mergePackageFeatures { inherit crateConfigs packageId target; features = [ "default" ]; }); - configs = prefixValues "cargo" crateConfigs; - combined = lib.foldAttrs (a: b: a // b) { } [ mergedFeatures configs ]; - onlyInCargo = - builtins.attrNames - (lib.filterAttrs (n: v: !(v ? "crate2nix") && (v ? "cargo")) combined); - onlyInCrate2Nix = - builtins.attrNames - (lib.filterAttrs (n: v: (v ? "crate2nix") && !(v ? "cargo")) combined); - differentFeatures = lib.filterAttrs - ( - n: v: - (v ? "crate2nix") - && (v ? "cargo") - && (v.crate2nix.features or [ ]) != (v."cargo".resolved_default_features or [ ]) - ) - combined; - in - builtins.toJSON { - inherit onlyInCargo onlyInCrate2Nix differentFeatures; - }; - - /* Returns an attrset mapping packageId to the list of enabled features. - - If multiple paths to a dependency enable different features, the - corresponding feature sets are merged. Features in rust are additive. - */ - mergePackageFeatures = - { crateConfigs ? crates - , packageId - , rootPackageId ? packageId - , features ? rootFeatures - , dependencyPath ? [ crates.${packageId}.crateName ] - , featuresByPackageId ? { } - , target - # Adds devDependencies to the crate with rootPackageId. - , runTests ? false - , ... - } @ args: - assert (builtins.isAttrs crateConfigs); - assert (builtins.isString packageId); - assert (builtins.isString rootPackageId); - assert (builtins.isList features); - assert (builtins.isList dependencyPath); - assert (builtins.isAttrs featuresByPackageId); - assert (builtins.isAttrs target); - assert (builtins.isBool runTests); - let - crateConfig = crateConfigs."${packageId}" or (builtins.throw "Package not found: ${packageId}"); - expandedFeatures = expandFeatures (crateConfig.features or { }) features; - enabledFeatures = enableFeatures (crateConfig.dependencies or [ ]) expandedFeatures; - depWithResolvedFeatures = dependency: - let - inherit (dependency) packageId; - features = dependencyFeatures enabledFeatures dependency; - in - { inherit packageId features; }; - resolveDependencies = cache: path: dependencies: - assert (builtins.isAttrs cache); - assert (builtins.isList dependencies); - let - enabledDependencies = filterEnabledDependencies { - inherit dependencies target; - features = enabledFeatures; - }; - directDependencies = map depWithResolvedFeatures enabledDependencies; - foldOverCache = op: lib.foldl op cache directDependencies; - in - foldOverCache - ( - cache: { packageId, features }: - let - cacheFeatures = cache.${packageId} or [ ]; - combinedFeatures = sortedUnique (cacheFeatures ++ features); - in - if cache ? ${packageId} && cache.${packageId} == combinedFeatures - then cache - else - mergePackageFeatures { - features = combinedFeatures; - featuresByPackageId = cache; - inherit crateConfigs packageId target runTests rootPackageId; - } - ); - cacheWithSelf = - let - cacheFeatures = featuresByPackageId.${packageId} or [ ]; - combinedFeatures = sortedUnique (cacheFeatures ++ enabledFeatures); - in - featuresByPackageId // { - "${packageId}" = combinedFeatures; - }; - cacheWithDependencies = - resolveDependencies cacheWithSelf "dep" - ( - crateConfig.dependencies or [ ] - ++ lib.optionals - (runTests && packageId == rootPackageId) - (crateConfig.devDependencies or [ ]) - ); - cacheWithAll = - resolveDependencies - cacheWithDependencies "build" - (crateConfig.buildDependencies or [ ]); - in - cacheWithAll; - - /* Returns the enabled dependencies given the enabled features. */ - filterEnabledDependencies = { dependencies, features, target }: - assert (builtins.isList dependencies); - assert (builtins.isList features); - assert (builtins.isAttrs target); - - lib.filter - ( - dep: - let - targetFunc = dep.target or (features: true); - in - targetFunc { inherit features target; } - && ( - !(dep.optional or false) - || builtins.any (doesFeatureEnableDependency dep) features - ) - ) - dependencies; - - /* Returns whether the given feature should enable the given dependency. */ - doesFeatureEnableDependency = dependency: feature: - let - name = dependency.rename or dependency.name; - prefix = "${name}/"; - len = builtins.stringLength prefix; - startsWithPrefix = builtins.substring 0 len feature == prefix; - in - feature == name || feature == "dep:" + name || startsWithPrefix; - - /* Returns the expanded features for the given inputFeatures by applying the - rules in featureMap. - - featureMap is an attribute set which maps feature names to lists of further - feature names to enable in case this feature is selected. - */ - expandFeatures = featureMap: inputFeatures: - assert (builtins.isAttrs featureMap); - assert (builtins.isList inputFeatures); - let - expandFeaturesNoCycle = oldSeen: inputFeatures: - if inputFeatures != [ ] - then - let - # The feature we're currently expanding. - feature = builtins.head inputFeatures; - # All the features we've seen/expanded so far, including the one - # we're currently processing. - seen = oldSeen // { ${feature} = 1; }; - # Expand the feature but be careful to not re-introduce a feature - # that we've already seen: this can easily cause a cycle, see issue - # #209. - enables = builtins.filter (f: !(seen ? "${f}")) (featureMap."${feature}" or [ ]); - in - [ feature ] ++ (expandFeaturesNoCycle seen (builtins.tail inputFeatures ++ enables)) - # No more features left, nothing to expand to. - else [ ]; - outFeatures = expandFeaturesNoCycle { } inputFeatures; - in - sortedUnique outFeatures; - - /* This function adds optional dependencies as features if they are enabled - indirectly by dependency features. This function mimics Cargo's behavior - described in a note at: - https://doc.rust-lang.org/nightly/cargo/reference/features.html#dependency-features - */ - enableFeatures = dependencies: features: - assert (builtins.isList features); - assert (builtins.isList dependencies); - let - additionalFeatures = lib.concatMap - ( - dependency: - assert (builtins.isAttrs dependency); - let - enabled = builtins.any (doesFeatureEnableDependency dependency) features; - in - if (dependency.optional or false) && enabled - then [ (dependency.rename or dependency.name) ] - else [ ] - ) - dependencies; - in - sortedUnique (features ++ additionalFeatures); - - /* - Returns the actual features for the given dependency. - - features: The features of the crate that refers this dependency. - */ - dependencyFeatures = features: dependency: - assert (builtins.isList features); - assert (builtins.isAttrs dependency); - let - defaultOrNil = - if dependency.usesDefaultFeatures or true - then [ "default" ] - else [ ]; - explicitFeatures = dependency.features or [ ]; - additionalDependencyFeatures = - let - name = dependency.rename or dependency.name; - stripPrefixMatch = prefix: s: - if lib.hasPrefix prefix s - then lib.removePrefix prefix s - else null; - extractFeature = feature: lib.findFirst - (f: f != null) - null - (map (prefix: stripPrefixMatch prefix feature) [ - (name + "/") - (name + "?/") - ]); - dependencyFeatures = lib.filter (f: f != null) (map extractFeature features); - in - dependencyFeatures; - in - defaultOrNil ++ explicitFeatures ++ additionalDependencyFeatures; - - /* Sorts and removes duplicates from a list of strings. */ - sortedUnique = features: - assert (builtins.isList features); - assert (builtins.all builtins.isString features); - let - outFeaturesSet = lib.foldl (set: feature: set // { "${feature}" = 1; }) { } features; - outFeaturesUnique = builtins.attrNames outFeaturesSet; - in - builtins.sort (a: b: a < b) outFeaturesUnique; - - deprecationWarning = message: value: - if strictDeprecation - then builtins.throw "strictDeprecation enabled, aborting: ${message}" - else builtins.trace message value; - - # - # crate2nix/default.nix (excerpt end) - # - }; -} - diff --git a/build_dependencies.nix b/build_dependencies.nix deleted file mode 100644 index f14116d..0000000 --- a/build_dependencies.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ pkgs }: -let - rust-overlay = import (builtins.fetchTarball "https://github.com/oxalica/rust-overlay/archive/stable.tar.gz"); - pkgs = import { overlays = [ rust-overlay ]; }; - rust = pkgs.rust-bin.stable.latest.default.override { - extensions = [ - "rust-src" - "rust-analyzer" - "rustfmt" - "clippy" - ]; - targets = [ - "x86_64-unknown-linux-gnu" - ]; - }; - rust_platform = pkgs.makeRustPlatform { - cargo = rust; - rustc = rust; - }; - - tree-sitter-cli = rust_platform.buildRustPackage rec { - pname = "tree-sitter-cli"; - version = "0.24.4"; - - src = pkgs.fetchCrate { - inherit pname version; - sha256 = "sha256-+45nWB37pR6yUqyFovlnOTCCHSPPeoKa0mcEYQn2I1o="; - }; - - cargoHash = "sha256-4Zl/5nSTRJOLtXebJxERNKaqyVRXN/VpoIMu9ZpMAao="; - doCheck = false; - }; -in -[ - rust - rust_platform.bindgenHook - tree-sitter-cli - pkgs.crate2nix - pkgs.openssl - pkgs.pkg-config - pkgs.nodejs_22 - pkgs.gcc -] diff --git a/crate-hashes.json b/crate-hashes.json deleted file mode 100644 index 8399f77..0000000 --- a/crate-hashes.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "git+https://github.com/IamTheCarl/imstr#0.2.0": "0csqvjlgi1wvrfhidy0khivwx5p3h0rhwzz5r5zsx0zzwn7qpn2d", - "git+https://github.com/hannobraun/fornjot.git#fj-core@0.49.0": "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d", - "git+https://github.com/hannobraun/fornjot.git#fj-export@0.49.0": "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d", - "git+https://github.com/hannobraun/fornjot.git#fj-interop@0.49.0": "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d", - "git+https://github.com/hannobraun/fornjot.git#fj-math@0.49.0": "10grx83xjz63gpmcfmkbihv9zq78f67sa5yjjsmvnz5bd9rrlx9d" -} \ No newline at end of file diff --git a/default.nix b/default.nix deleted file mode 100644 index 53f4200..0000000 --- a/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ pkgs ? import { } }: -let - addDeps = list: { ... }: { - nativeBuildInputs = list ++ (import ./build_dependencies.nix { - pkgs = pkgs; - }); - }; - cargo_nix = pkgs.callPackage ./Cargo.nix { }; -in -cargo_nix.workspaceMembers."command_cad".build.overrideAttrs { } diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..cbf0f57 --- /dev/null +++ b/flake.lock @@ -0,0 +1,77 @@ +{ + "nodes": { + "crane": { + "locked": { + "lastModified": 1763511871, + "narHash": "sha256-KKZWi+ij7oT0Ag8yC6MQkzfHGcytyjMJDD+47ZV1YNU=", + "owner": "ipetkov", + "repo": "crane", + "rev": "099f9014bc8d0cd6e445470ea1df0fd691d5a548", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1763421233, + "narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "crane": "crane", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..399be79 --- /dev/null +++ b/flake.nix @@ -0,0 +1,54 @@ +{ + description = "A data driven CAD program"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + crane.url = "github:ipetkov/crane"; + }; + + outputs = { + self, + nixpkgs, + flake-utils, + crane, + ... + }: + flake-utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { + inherit system; + }; + craneLib = crane.mkLib pkgs; + in + { + devShells.default = with pkgs; craneLib.devShell { + buildInputs = [ + bashInteractive + nodejs_24 + tree-sitter + openssl + pkg-config + ]; + + shellHook = '' + export SHELL=${pkgs.bashInteractive}/bin/bash + ''; + }; + + packages.default = with pkgs; + craneLib.buildPackage { + nativeBuildInputs = [ + pkg-config + ]; + + buildInputs = [ + openssl + ]; + + src = craneLib.cleanCargoSource ./.; + strictDeps = true; + }; + } + ); +} diff --git a/shell.nix b/shell.nix deleted file mode 100644 index bde131e..0000000 --- a/shell.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ pkgs ? import { } }: -pkgs.mkShell { - buildInputs = (import ./build_dependencies.nix { - pkgs = pkgs; - }); - - # Set environment variables - shellHook = '' - export OPENSSL_NO_VENDOR=1 - ''; -} From 48192adf20e8b975ded8ac8f1e892e0ed35a2fce Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 22 Nov 2025 12:20:16 -0500 Subject: [PATCH 024/106] Rip out statements --- .../tree-sitter-command-cad-model/grammar.js | 56 +- .../src/grammar.json | 373 +- .../src/node-types.json | 349 +- .../src/parser.c | 10360 +++++++--------- .../src/tree_sitter/array.h | 3 +- .../src/tree_sitter/parser.h | 34 +- .../test/corpus/assignment.txt | 39 - .../test/corpus/closure.txt | 199 +- .../test/corpus/code_block.txt | 118 - .../test/corpus/comments.txt | 5 +- .../test/corpus/for_loop.txt | 40 - .../test/corpus/if.txt | 30 +- 12 files changed, 4465 insertions(+), 7141 deletions(-) delete mode 100644 crates/tree-sitter-command-cad-model/test/corpus/assignment.txt delete mode 100644 crates/tree-sitter-command-cad-model/test/corpus/code_block.txt delete mode 100644 crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 3c0aafc..4bfaf69 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -94,7 +94,6 @@ module.exports = grammar({ $.if, $.struct_definition, $.dictionary_construction, - $.procedural_block, $.closure_definition, $.unary_expression, $.binary_expression, @@ -146,7 +145,7 @@ module.exports = grammar({ )))); }, - if: $ => seq('if', field('condition', $.expression), field('on_true', $.procedural_block), optional(seq('else', field('on_false', $.procedural_block)))), + if: $ => seq('if', field('condition', $.expression), field('on_true', $.expression), seq('else', field('on_false', $.expression))), path: $ => seq($.identifier, repeat(seq('.', $.identifier))), @@ -190,59 +189,16 @@ module.exports = grammar({ ')' ), - procedural_block: $ => seq( - '{', - repeat($.statement), - '}' - ), - - closure_captured_variables: $ => seq( - '[', - seq(repeat(seq($.identifier, ',')), optional($.identifier)), - ']' - ), + // closure_captured_variables: $ => seq( + // '[', + // seq(repeat(seq($.identifier, ',')), optional($.identifier)), + // ']' + // ), closure_definition: $ => prec.left(PREC.closure, seq( field('argument', choice($.struct_definition, $.path)), - field('captured_variables', $.closure_captured_variables), '->', field('result', choice($.struct_definition, $.path, $.void)), field('expression', $.expression), )), - - closed_expression: $ => seq($.expression, ';'), - - statement: $ => choice( - $.assign, - $.let, - $.for, - $.expression, - $.closed_expression, - ), - - assignment_operator: $ => { - let operators = [ - '=', - '&=', - '|=', - '^=', - '&&=', - '||=', - '^^=', - '+=', - '-=', - '**=', - '*=', - '//=', - '/=', - '<<=', - '>>=' - ]; - - return choice(...operators.map((operator) => field('op', operator))); - }, - - let: $ => seq('let', field('to_assign', $.path), '=', field('value', $.expression), ';'), - assign: $ => seq(field('to_assign', $.path), $.assignment_operator, field('value', $.expression), ';'), - for: $ => seq('for', field('to_assign', $.identifier), 'in', field('to_iterate', $.expression), field('to_run', $.procedural_block)), } }); diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 0eac5b2..bfec573 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -397,10 +397,6 @@ "type": "SYMBOL", "name": "dictionary_construction" }, - { - "type": "SYMBOL", - "name": "procedural_block" - }, { "type": "SYMBOL", "name": "closure_definition" @@ -1201,31 +1197,23 @@ "name": "on_true", "content": { "type": "SYMBOL", - "name": "procedural_block" + "name": "expression" } }, { - "type": "CHOICE", + "type": "SEQ", "members": [ { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "else" - }, - { - "type": "FIELD", - "name": "on_false", - "content": { - "type": "SYMBOL", - "name": "procedural_block" - } - } - ] + "type": "STRING", + "value": "else" }, { - "type": "BLANK" + "type": "FIELD", + "name": "on_false", + "content": { + "type": "SYMBOL", + "name": "expression" + } } ] } @@ -1579,72 +1567,6 @@ } ] }, - "procedural_block": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "{" - }, - { - "type": "REPEAT", - "content": { - "type": "SYMBOL", - "name": "statement" - } - }, - { - "type": "STRING", - "value": "}" - } - ] - }, - "closure_captured_variables": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "[" - }, - { - "type": "SEQ", - "members": [ - { - "type": "REPEAT", - "content": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "identifier" - }, - { - "type": "STRING", - "value": "," - } - ] - } - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "identifier" - }, - { - "type": "BLANK" - } - ] - } - ] - }, - { - "type": "STRING", - "value": "]" - } - ] - }, "closure_definition": { "type": "PREC_LEFT", "value": 19, @@ -1668,14 +1590,6 @@ ] } }, - { - "type": "FIELD", - "name": "captured_variables", - "content": { - "type": "SYMBOL", - "name": "closure_captured_variables" - } - }, { "type": "STRING", "value": "->" @@ -1711,268 +1625,6 @@ } ] } - }, - "closed_expression": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "expression" - }, - { - "type": "STRING", - "value": ";" - } - ] - }, - "statement": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "assign" - }, - { - "type": "SYMBOL", - "name": "let" - }, - { - "type": "SYMBOL", - "name": "for" - }, - { - "type": "SYMBOL", - "name": "expression" - }, - { - "type": "SYMBOL", - "name": "closed_expression" - } - ] - }, - "assignment_operator": { - "type": "CHOICE", - "members": [ - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "=" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "&=" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "|=" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "^=" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "&&=" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "||=" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "^^=" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "+=" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "-=" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "**=" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "*=" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "//=" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "/=" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "<<=" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": ">>=" - } - } - ] - }, - "let": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "let" - }, - { - "type": "FIELD", - "name": "to_assign", - "content": { - "type": "SYMBOL", - "name": "path" - } - }, - { - "type": "STRING", - "value": "=" - }, - { - "type": "FIELD", - "name": "value", - "content": { - "type": "SYMBOL", - "name": "expression" - } - }, - { - "type": "STRING", - "value": ";" - } - ] - }, - "assign": { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "to_assign", - "content": { - "type": "SYMBOL", - "name": "path" - } - }, - { - "type": "SYMBOL", - "name": "assignment_operator" - }, - { - "type": "FIELD", - "name": "value", - "content": { - "type": "SYMBOL", - "name": "expression" - } - }, - { - "type": "STRING", - "value": ";" - } - ] - }, - "for": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "for" - }, - { - "type": "FIELD", - "name": "to_assign", - "content": { - "type": "SYMBOL", - "name": "identifier" - } - }, - { - "type": "STRING", - "value": "in" - }, - { - "type": "FIELD", - "name": "to_iterate", - "content": { - "type": "SYMBOL", - "name": "expression" - } - }, - { - "type": "FIELD", - "name": "to_run", - "content": { - "type": "SYMBOL", - "name": "procedural_block" - } - } - ] } }, "extras": [ @@ -1989,5 +1641,6 @@ "precedences": [], "externals": [], "inline": [], - "supertypes": [] -} + "supertypes": [], + "reserved": {} +} \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 2398a9c..3c7b07f 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -1,112 +1,4 @@ [ - { - "type": "assign", - "named": true, - "fields": { - "to_assign": { - "multiple": false, - "required": true, - "types": [ - { - "type": "path", - "named": true - } - ] - }, - "value": { - "multiple": false, - "required": true, - "types": [ - { - "type": "expression", - "named": true - } - ] - } - }, - "children": { - "multiple": false, - "required": true, - "types": [ - { - "type": "assignment_operator", - "named": true - } - ] - } - }, - { - "type": "assignment_operator", - "named": true, - "fields": { - "op": { - "multiple": false, - "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": "<<=", - "named": false - }, - { - "type": "=", - "named": false - }, - { - "type": ">>=", - "named": false - }, - { - "type": "^=", - "named": false - }, - { - "type": "^^=", - "named": false - }, - { - "type": "|=", - "named": false - }, - { - "type": "||=", - "named": false - } - ] - } - } - }, { "type": "base_ten", "named": true, @@ -252,36 +144,6 @@ ] } }, - { - "type": "closed_expression", - "named": true, - "fields": {}, - "children": { - "multiple": false, - "required": true, - "types": [ - { - "type": "expression", - "named": true - } - ] - } - }, - { - "type": "closure_captured_variables", - "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": false, - "types": [ - { - "type": "identifier", - "named": true - } - ] - } - }, { "type": "closure_definition", "named": true, @@ -300,16 +162,6 @@ } ] }, - "captured_variables": { - "multiple": false, - "required": true, - "types": [ - { - "type": "closure_captured_variables", - "named": true - } - ] - }, "expression": { "multiple": false, "required": true, @@ -453,10 +305,6 @@ "type": "path", "named": true }, - { - "type": "procedural_block", - "named": true - }, { "type": "scalar", "named": true @@ -488,42 +336,6 @@ ] } }, - { - "type": "for", - "named": true, - "fields": { - "to_assign": { - "multiple": false, - "required": true, - "types": [ - { - "type": "identifier", - "named": true - } - ] - }, - "to_iterate": { - "multiple": false, - "required": true, - "types": [ - { - "type": "expression", - "named": true - } - ] - }, - "to_run": { - "multiple": false, - "required": true, - "types": [ - { - "type": "procedural_block", - "named": true - } - ] - } - } - }, { "type": "function_call", "named": true, @@ -571,10 +383,10 @@ }, "on_false": { "multiple": false, - "required": false, + "required": true, "types": [ { - "type": "procedural_block", + "type": "expression", "named": true } ] @@ -584,7 +396,7 @@ "required": true, "types": [ { - "type": "procedural_block", + "type": "expression", "named": true } ] @@ -618,32 +430,6 @@ ] } }, - { - "type": "let", - "named": true, - "fields": { - "to_assign": { - "multiple": false, - "required": true, - "types": [ - { - "type": "path", - "named": true - } - ] - }, - "value": { - "multiple": false, - "required": true, - "types": [ - { - "type": "expression", - "named": true - } - ] - } - } - }, { "type": "list", "named": true, @@ -735,21 +521,6 @@ ] } }, - { - "type": "procedural_block", - "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": false, - "types": [ - { - "type": "statement", - "named": true - } - ] - } - }, { "type": "scalar", "named": true, @@ -822,37 +593,6 @@ ] } }, - { - "type": "statement", - "named": true, - "fields": {}, - "children": { - "multiple": false, - "required": true, - "types": [ - { - "type": "assign", - "named": true - }, - { - "type": "closed_expression", - "named": true - }, - { - "type": "expression", - "named": true - }, - { - "type": "for", - "named": true - }, - { - "type": "let", - "named": true - } - ] - } - }, { "type": "struct_definition", "named": true, @@ -993,14 +733,6 @@ "type": "&&", "named": false }, - { - "type": "&&=", - "named": false - }, - { - "type": "&=", - "named": false - }, { "type": "(", "named": false @@ -1017,22 +749,10 @@ "type": "**", "named": false }, - { - "type": "**=", - "named": false - }, - { - "type": "*=", - "named": false - }, { "type": "+", "named": false }, - { - "type": "+=", - "named": false - }, { "type": ",", "named": false @@ -1041,10 +761,6 @@ "type": "-", "named": false }, - { - "type": "-=", - "named": false - }, { "type": "->", "named": false @@ -1069,22 +785,10 @@ "type": "//", "named": false }, - { - "type": "//=", - "named": false - }, - { - "type": "/=", - "named": false - }, { "type": ":", "named": false }, - { - "type": ";", - "named": false - }, { "type": "<", "named": false @@ -1093,10 +797,6 @@ "type": "<<", "named": false }, - { - "type": "<<=", - "named": false - }, { "type": "<=", "named": false @@ -1121,10 +821,6 @@ "type": ">>", "named": false }, - { - "type": ">>=", - "named": false - }, { "type": "[", "named": false @@ -1137,17 +833,10 @@ "type": "^", "named": false }, - { - "type": "^=", - "named": false - }, - { - "type": "^^=", - "named": false - }, { "type": "comment", - "named": true + "named": true, + "extra": true }, { "type": "default", @@ -1161,10 +850,6 @@ "type": "false", "named": true }, - { - "type": "for", - "named": false - }, { "type": "identifier", "named": true @@ -1173,14 +858,6 @@ "type": "if", "named": false }, - { - "type": "in", - "named": false - }, - { - "type": "let", - "named": false - }, { "type": "string", "named": true @@ -1201,28 +878,12 @@ "type": "void", "named": true }, - { - "type": "{", - "named": false - }, { "type": "|", "named": false }, - { - "type": "|=", - "named": false - }, { "type": "||", "named": false - }, - { - "type": "||=", - "named": false - }, - { - "type": "}", - "named": false } ] \ No newline at end of file diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 59fef67..d9c292c 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -1,19 +1,23 @@ +/* Automatically @generated by tree-sitter v0.25.10 */ + #include "tree_sitter/parser.h" #if defined(__GNUC__) || defined(__clang__) #pragma GCC diagnostic ignored "-Wmissing-field-initializers" #endif -#define LANGUAGE_VERSION 14 -#define STATE_COUNT 177 -#define LARGE_STATE_COUNT 7 -#define SYMBOL_COUNT 115 +#define LANGUAGE_VERSION 15 +#define STATE_COUNT 150 +#define LARGE_STATE_COUNT 38 +#define SYMBOL_COUNT 85 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 72 +#define TOKEN_COUNT 52 #define EXTERNAL_TOKEN_COUNT 0 -#define FIELD_COUNT 25 +#define FIELD_COUNT 21 #define MAX_ALIAS_SEQUENCE_LENGTH 5 -#define PRODUCTION_ID_COUNT 25 +#define MAX_RESERVED_WORD_SET_SIZE 0 +#define PRODUCTION_ID_COUNT 21 +#define SUPERTYPE_COUNT 0 enum ts_symbol_identifiers { sym_identifier = 1, @@ -66,70 +70,40 @@ enum ts_symbol_identifiers { anon_sym_RBRACK = 48, sym_varadic_dots = 49, anon_sym_EQ = 50, - anon_sym_LBRACE = 51, - anon_sym_RBRACE = 52, - anon_sym_DASH_GT = 53, - anon_sym_SEMI = 54, - anon_sym_AMP_EQ = 55, - anon_sym_PIPE_EQ = 56, - anon_sym_CARET_EQ = 57, - anon_sym_AMP_AMP_EQ = 58, - anon_sym_PIPE_PIPE_EQ = 59, - anon_sym_CARET_CARET_EQ = 60, - anon_sym_PLUS_EQ = 61, - anon_sym_DASH_EQ = 62, - anon_sym_STAR_STAR_EQ = 63, - anon_sym_STAR_EQ = 64, - anon_sym_SLASH_SLASH_EQ = 65, - anon_sym_SLASH_EQ = 66, - anon_sym_LT_LT_EQ = 67, - anon_sym_GT_GT_EQ = 68, - anon_sym_let = 69, - anon_sym_for = 70, - anon_sym_in = 71, - sym_source_file = 72, - sym_base_ten = 73, - sym_octal = 74, - sym_hex = 75, - sym_binary = 76, - sym_integer = 77, - sym_signed_integer = 78, - sym_unsigned_integer = 79, - sym_number = 80, - sym__float = 81, - sym__unit = 82, - sym_scalar = 83, - sym_boolean = 84, - sym_function_call = 85, - sym_method_call = 86, - sym_expression = 87, - sym_unary_expression = 88, - sym_binary_expression = 89, - sym_if = 90, - sym_path = 91, - sym_declaration_type = 92, - sym_parenthesis = 93, - sym_list = 94, - sym_struct_member = 95, - sym__struct_final_element = 96, - sym_struct_definition = 97, - sym_dictionary_member_assignment = 98, - sym_dictionary_construction = 99, - sym_procedural_block = 100, - sym_closure_captured_variables = 101, - sym_closure_definition = 102, - sym_closed_expression = 103, - sym_statement = 104, - sym_assignment_operator = 105, - sym_let = 106, - sym_assign = 107, - sym_for = 108, - aux_sym_path_repeat1 = 109, - aux_sym_list_repeat1 = 110, - aux_sym_struct_definition_repeat1 = 111, - aux_sym_dictionary_construction_repeat1 = 112, - aux_sym_procedural_block_repeat1 = 113, - aux_sym_closure_captured_variables_repeat1 = 114, + anon_sym_DASH_GT = 51, + sym_source_file = 52, + sym_base_ten = 53, + sym_octal = 54, + sym_hex = 55, + sym_binary = 56, + sym_integer = 57, + sym_signed_integer = 58, + sym_unsigned_integer = 59, + sym_number = 60, + sym__float = 61, + sym__unit = 62, + sym_scalar = 63, + sym_boolean = 64, + sym_function_call = 65, + sym_method_call = 66, + sym_expression = 67, + sym_unary_expression = 68, + sym_binary_expression = 69, + sym_if = 70, + sym_path = 71, + sym_declaration_type = 72, + sym_parenthesis = 73, + sym_list = 74, + sym_struct_member = 75, + sym__struct_final_element = 76, + sym_struct_definition = 77, + sym_dictionary_member_assignment = 78, + sym_dictionary_construction = 79, + sym_closure_definition = 80, + aux_sym_path_repeat1 = 81, + aux_sym_list_repeat1 = 82, + aux_sym_struct_definition_repeat1 = 83, + aux_sym_dictionary_construction_repeat1 = 84, }; static const char * const ts_symbol_names[] = { @@ -184,27 +158,7 @@ static const char * const ts_symbol_names[] = { [anon_sym_RBRACK] = "]", [sym_varadic_dots] = "varadic_dots", [anon_sym_EQ] = "=", - [anon_sym_LBRACE] = "{", - [anon_sym_RBRACE] = "}", [anon_sym_DASH_GT] = "->", - [anon_sym_SEMI] = ";", - [anon_sym_AMP_EQ] = "&=", - [anon_sym_PIPE_EQ] = "|=", - [anon_sym_CARET_EQ] = "^=", - [anon_sym_AMP_AMP_EQ] = "&&=", - [anon_sym_PIPE_PIPE_EQ] = "||=", - [anon_sym_CARET_CARET_EQ] = "^^=", - [anon_sym_PLUS_EQ] = "+=", - [anon_sym_DASH_EQ] = "-=", - [anon_sym_STAR_STAR_EQ] = "**=", - [anon_sym_STAR_EQ] = "*=", - [anon_sym_SLASH_SLASH_EQ] = "//=", - [anon_sym_SLASH_EQ] = "/=", - [anon_sym_LT_LT_EQ] = "<<=", - [anon_sym_GT_GT_EQ] = ">>=", - [anon_sym_let] = "let", - [anon_sym_for] = "for", - [anon_sym_in] = "in", [sym_source_file] = "source_file", [sym_base_ten] = "base_ten", [sym_octal] = "octal", @@ -233,21 +187,11 @@ static const char * const ts_symbol_names[] = { [sym_struct_definition] = "struct_definition", [sym_dictionary_member_assignment] = "dictionary_member_assignment", [sym_dictionary_construction] = "dictionary_construction", - [sym_procedural_block] = "procedural_block", - [sym_closure_captured_variables] = "closure_captured_variables", [sym_closure_definition] = "closure_definition", - [sym_closed_expression] = "closed_expression", - [sym_statement] = "statement", - [sym_assignment_operator] = "assignment_operator", - [sym_let] = "let", - [sym_assign] = "assign", - [sym_for] = "for", [aux_sym_path_repeat1] = "path_repeat1", [aux_sym_list_repeat1] = "list_repeat1", [aux_sym_struct_definition_repeat1] = "struct_definition_repeat1", [aux_sym_dictionary_construction_repeat1] = "dictionary_construction_repeat1", - [aux_sym_procedural_block_repeat1] = "procedural_block_repeat1", - [aux_sym_closure_captured_variables_repeat1] = "closure_captured_variables_repeat1", }; static const TSSymbol ts_symbol_map[] = { @@ -302,27 +246,7 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_RBRACK] = anon_sym_RBRACK, [sym_varadic_dots] = sym_varadic_dots, [anon_sym_EQ] = anon_sym_EQ, - [anon_sym_LBRACE] = anon_sym_LBRACE, - [anon_sym_RBRACE] = anon_sym_RBRACE, [anon_sym_DASH_GT] = anon_sym_DASH_GT, - [anon_sym_SEMI] = anon_sym_SEMI, - [anon_sym_AMP_EQ] = anon_sym_AMP_EQ, - [anon_sym_PIPE_EQ] = anon_sym_PIPE_EQ, - [anon_sym_CARET_EQ] = anon_sym_CARET_EQ, - [anon_sym_AMP_AMP_EQ] = anon_sym_AMP_AMP_EQ, - [anon_sym_PIPE_PIPE_EQ] = anon_sym_PIPE_PIPE_EQ, - [anon_sym_CARET_CARET_EQ] = anon_sym_CARET_CARET_EQ, - [anon_sym_PLUS_EQ] = anon_sym_PLUS_EQ, - [anon_sym_DASH_EQ] = anon_sym_DASH_EQ, - [anon_sym_STAR_STAR_EQ] = anon_sym_STAR_STAR_EQ, - [anon_sym_STAR_EQ] = anon_sym_STAR_EQ, - [anon_sym_SLASH_SLASH_EQ] = anon_sym_SLASH_SLASH_EQ, - [anon_sym_SLASH_EQ] = anon_sym_SLASH_EQ, - [anon_sym_LT_LT_EQ] = anon_sym_LT_LT_EQ, - [anon_sym_GT_GT_EQ] = anon_sym_GT_GT_EQ, - [anon_sym_let] = anon_sym_let, - [anon_sym_for] = anon_sym_for, - [anon_sym_in] = anon_sym_in, [sym_source_file] = sym_source_file, [sym_base_ten] = sym_base_ten, [sym_octal] = sym_octal, @@ -351,21 +275,11 @@ static const TSSymbol ts_symbol_map[] = { [sym_struct_definition] = sym_struct_definition, [sym_dictionary_member_assignment] = sym_dictionary_member_assignment, [sym_dictionary_construction] = sym_dictionary_construction, - [sym_procedural_block] = sym_procedural_block, - [sym_closure_captured_variables] = sym_closure_captured_variables, [sym_closure_definition] = sym_closure_definition, - [sym_closed_expression] = sym_closed_expression, - [sym_statement] = sym_statement, - [sym_assignment_operator] = sym_assignment_operator, - [sym_let] = sym_let, - [sym_assign] = sym_assign, - [sym_for] = sym_for, [aux_sym_path_repeat1] = aux_sym_path_repeat1, [aux_sym_list_repeat1] = aux_sym_list_repeat1, [aux_sym_struct_definition_repeat1] = aux_sym_struct_definition_repeat1, [aux_sym_dictionary_construction_repeat1] = aux_sym_dictionary_construction_repeat1, - [aux_sym_procedural_block_repeat1] = aux_sym_procedural_block_repeat1, - [aux_sym_closure_captured_variables_repeat1] = aux_sym_closure_captured_variables_repeat1, }; static const TSSymbolMetadata ts_symbol_metadata[] = { @@ -573,90 +487,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, - [anon_sym_LBRACE] = { - .visible = true, - .named = false, - }, - [anon_sym_RBRACE] = { - .visible = true, - .named = false, - }, [anon_sym_DASH_GT] = { .visible = true, .named = false, }, - [anon_sym_SEMI] = { - .visible = true, - .named = false, - }, - [anon_sym_AMP_EQ] = { - .visible = true, - .named = false, - }, - [anon_sym_PIPE_EQ] = { - .visible = true, - .named = false, - }, - [anon_sym_CARET_EQ] = { - .visible = true, - .named = false, - }, - [anon_sym_AMP_AMP_EQ] = { - .visible = true, - .named = false, - }, - [anon_sym_PIPE_PIPE_EQ] = { - .visible = true, - .named = false, - }, - [anon_sym_CARET_CARET_EQ] = { - .visible = true, - .named = false, - }, - [anon_sym_PLUS_EQ] = { - .visible = true, - .named = false, - }, - [anon_sym_DASH_EQ] = { - .visible = true, - .named = false, - }, - [anon_sym_STAR_STAR_EQ] = { - .visible = true, - .named = false, - }, - [anon_sym_STAR_EQ] = { - .visible = true, - .named = false, - }, - [anon_sym_SLASH_SLASH_EQ] = { - .visible = true, - .named = false, - }, - [anon_sym_SLASH_EQ] = { - .visible = true, - .named = false, - }, - [anon_sym_LT_LT_EQ] = { - .visible = true, - .named = false, - }, - [anon_sym_GT_GT_EQ] = { - .visible = true, - .named = false, - }, - [anon_sym_let] = { - .visible = true, - .named = false, - }, - [anon_sym_for] = { - .visible = true, - .named = false, - }, - [anon_sym_in] = { - .visible = true, - .named = false, - }, [sym_source_file] = { .visible = true, .named = true, @@ -769,42 +603,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [sym_procedural_block] = { - .visible = true, - .named = true, - }, - [sym_closure_captured_variables] = { - .visible = true, - .named = true, - }, [sym_closure_definition] = { .visible = true, .named = true, }, - [sym_closed_expression] = { - .visible = true, - .named = true, - }, - [sym_statement] = { - .visible = true, - .named = true, - }, - [sym_assignment_operator] = { - .visible = true, - .named = true, - }, - [sym_let] = { - .visible = true, - .named = true, - }, - [sym_assign] = { - .visible = true, - .named = true, - }, - [sym_for] = { - .visible = true, - .named = true, - }, [aux_sym_path_repeat1] = { .visible = false, .named = false, @@ -821,14 +623,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = false, .named = false, }, - [aux_sym_procedural_block_repeat1] = { - .visible = false, - .named = false, - }, - [aux_sym_closure_captured_variables_repeat1] = { - .visible = false, - .named = false, - }, }; enum ts_field_identifiers { @@ -837,26 +631,22 @@ enum ts_field_identifiers { field_assignment = 3, field_assignments = 4, field_b = 5, - field_captured_variables = 6, - field_condition = 7, - field_default = 8, - field_expression = 9, - field_final_element = 10, - field_fractional = 11, - field_members = 12, - field_name = 13, - field_on_false = 14, - field_on_true = 15, - field_op = 16, - field_result = 17, - field_self_dictionary = 18, - field_to_assign = 19, - field_to_call = 20, - field_to_iterate = 21, - field_to_run = 22, - field_unit = 23, - field_value = 24, - field_whole = 25, + field_condition = 6, + field_default = 7, + field_expression = 8, + field_final_element = 9, + field_fractional = 10, + field_members = 11, + field_name = 12, + field_on_false = 13, + field_on_true = 14, + field_op = 15, + field_result = 16, + field_self_dictionary = 17, + field_to_call = 18, + field_unit = 19, + field_value = 20, + field_whole = 21, }; static const char * const ts_field_names[] = { @@ -866,7 +656,6 @@ static const char * const ts_field_names[] = { [field_assignment] = "assignment", [field_assignments] = "assignments", [field_b] = "b", - [field_captured_variables] = "captured_variables", [field_condition] = "condition", [field_default] = "default", [field_expression] = "expression", @@ -879,40 +668,33 @@ static const char * const ts_field_names[] = { [field_op] = "op", [field_result] = "result", [field_self_dictionary] = "self_dictionary", - [field_to_assign] = "to_assign", [field_to_call] = "to_call", - [field_to_iterate] = "to_iterate", - [field_to_run] = "to_run", [field_unit] = "unit", [field_value] = "value", [field_whole] = "whole", }; -static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { +static const TSMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [1] = {.index = 0, .length = 1}, [2] = {.index = 1, .length = 2}, [3] = {.index = 3, .length = 1}, [4] = {.index = 4, .length = 1}, [5] = {.index = 5, .length = 3}, [6] = {.index = 8, .length = 2}, - [7] = {.index = 10, .length = 2}, - [8] = {.index = 12, .length = 1}, - [9] = {.index = 13, .length = 1}, - [10] = {.index = 14, .length = 1}, - [11] = {.index = 15, .length = 1}, - [12] = {.index = 16, .length = 2}, - [13] = {.index = 18, .length = 3}, + [7] = {.index = 10, .length = 1}, + [8] = {.index = 11, .length = 1}, + [9] = {.index = 12, .length = 1}, + [10] = {.index = 13, .length = 1}, + [11] = {.index = 14, .length = 2}, + [12] = {.index = 16, .length = 3}, + [13] = {.index = 19, .length = 2}, [14] = {.index = 21, .length = 2}, [15] = {.index = 23, .length = 2}, - [16] = {.index = 25, .length = 2}, - [17] = {.index = 27, .length = 3}, - [18] = {.index = 30, .length = 3}, - [19] = {.index = 33, .length = 2}, - [20] = {.index = 35, .length = 3}, - [21] = {.index = 38, .length = 2}, - [22] = {.index = 40, .length = 4}, - [23] = {.index = 44, .length = 2}, - [24] = {.index = 46, .length = 3}, + [16] = {.index = 25, .length = 3}, + [17] = {.index = 28, .length = 3}, + [18] = {.index = 31, .length = 3}, + [19] = {.index = 34, .length = 2}, + [20] = {.index = 36, .length = 3}, }; static const TSFieldMapEntry ts_field_map_entries[] = { @@ -933,62 +715,48 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_argument, 1}, {field_to_call, 0}, [10] = - {field_condition, 1}, - {field_on_true, 2}, - [12] = {field_name, 0}, - [13] = + [11] = {field_final_element, 1}, - [14] = + [12] = {field_assignments, 1}, - [15] = + [13] = {field_members, 1}, - [16] = + [14] = {field_fractional, 2}, {field_whole, 0}, - [18] = + [16] = {field_a, 0}, {field_b, 2}, {field_op, 1}, - [21] = + [19] = {field_assignment, 2}, {field_name, 0}, - [23] = + [21] = {field_assignments, 1}, {field_assignments, 2}, - [25] = + [23] = {field_final_element, 2}, {field_members, 1}, - [27] = + [25] = {field_argument, 3}, {field_self_dictionary, 0}, {field_to_call, 2}, - [30] = + [28] = + {field_argument, 0}, + {field_expression, 3}, + {field_result, 2}, + [31] = {field_condition, 1}, {field_on_false, 4}, {field_on_true, 2}, - [33] = + [34] = {field_default, 3}, {field_name, 0}, - [35] = + [36] = {field_assignments, 1}, {field_assignments, 2}, {field_assignments, 3}, - [38] = - {field_to_assign, 0}, - {field_value, 2}, - [40] = - {field_argument, 0}, - {field_captured_variables, 1}, - {field_expression, 4}, - {field_result, 3}, - [44] = - {field_to_assign, 1}, - {field_value, 3}, - [46] = - {field_to_assign, 1}, - {field_to_iterate, 3}, - {field_to_run, 4}, }; static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { @@ -1003,7 +771,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [0] = 0, [1] = 1, [2] = 2, - [3] = 3, + [3] = 2, [4] = 4, [5] = 5, [6] = 6, @@ -1056,24 +824,24 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [53] = 53, [54] = 54, [55] = 55, - [56] = 56, - [57] = 57, - [58] = 58, - [59] = 59, - [60] = 60, - [61] = 61, - [62] = 62, - [63] = 63, - [64] = 64, - [65] = 65, - [66] = 66, + [56] = 50, + [57] = 54, + [58] = 40, + [59] = 51, + [60] = 53, + [61] = 39, + [62] = 41, + [63] = 42, + [64] = 43, + [65] = 47, + [66] = 48, [67] = 67, - [68] = 59, - [69] = 69, - [70] = 63, - [71] = 66, - [72] = 67, - [73] = 69, + [68] = 44, + [69] = 45, + [70] = 70, + [71] = 38, + [72] = 49, + [73] = 73, [74] = 74, [75] = 75, [76] = 76, @@ -1081,28 +849,28 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [78] = 78, [79] = 79, [80] = 80, - [81] = 74, - [82] = 75, - [83] = 76, - [84] = 77, - [85] = 78, - [86] = 79, - [87] = 80, - [88] = 65, - [89] = 89, - [90] = 40, - [91] = 42, - [92] = 46, - [93] = 54, - [94] = 55, - [95] = 56, - [96] = 47, - [97] = 48, - [98] = 49, - [99] = 50, - [100] = 51, - [101] = 52, - [102] = 53, + [81] = 81, + [82] = 82, + [83] = 83, + [84] = 84, + [85] = 85, + [86] = 86, + [87] = 35, + [88] = 55, + [89] = 84, + [90] = 76, + [91] = 83, + [92] = 82, + [93] = 73, + [94] = 74, + [95] = 81, + [96] = 80, + [97] = 85, + [98] = 79, + [99] = 78, + [100] = 77, + [101] = 101, + [102] = 102, [103] = 103, [104] = 104, [105] = 105, @@ -1111,13 +879,13 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [108] = 108, [109] = 109, [110] = 110, - [111] = 111, + [111] = 110, [112] = 112, [113] = 113, [114] = 114, [115] = 115, [116] = 116, - [117] = 117, + [117] = 116, [118] = 118, [119] = 119, [120] = 120, @@ -1126,7 +894,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [123] = 123, [124] = 124, [125] = 125, - [126] = 125, + [126] = 126, [127] = 127, [128] = 128, [129] = 129, @@ -1150,33 +918,6 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [147] = 147, [148] = 148, [149] = 149, - [150] = 150, - [151] = 151, - [152] = 152, - [153] = 153, - [154] = 154, - [155] = 155, - [156] = 156, - [157] = 157, - [158] = 158, - [159] = 159, - [160] = 160, - [161] = 161, - [162] = 162, - [163] = 163, - [164] = 164, - [165] = 165, - [166] = 166, - [167] = 167, - [168] = 168, - [169] = 169, - [170] = 170, - [171] = 171, - [172] = 172, - [173] = 173, - [174] = 174, - [175] = 167, - [176] = 176, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1184,438 +925,352 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(14); + if (eof) ADVANCE(12); ADVANCE_MAP( - '!', 41, + '!', 37, '"', 2, - '#', 15, - '&', 48, + '#', 13, + '&', 44, '\'', 7, - '(', 62, - ')', 63, - '*', 43, - '+', 39, - ',', 65, - '-', 37, - '.', 32, - '/', 44, - '0', 21, - '1', 23, - ':', 34, - ';', 72, - '<', 55, - '=', 68, - '>', 51, - '[', 64, - ']', 66, - '^', 50, - '{', 69, - '|', 49, - '}', 70, - '~', 20, + '(', 58, + ')', 59, + '*', 39, + '+', 35, + ',', 61, + '-', 34, + '.', 30, + '/', 40, + '0', 19, + '1', 21, + ':', 32, + '<', 51, + '=', 64, + '>', 47, + '[', 60, + ']', 62, + '^', 46, + '|', 45, + '~', 18, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(16); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(24); + lookahead == ' ') ADVANCE(14); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(22); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(17); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); END_STATE(); case 1: ADVANCE_MAP( - '!', 40, + '!', 36, '"', 2, - '#', 15, - '(', 62, - ')', 63, - '+', 38, - ',', 65, - '-', 35, + '#', 13, + '(', 58, + ')', 59, + '+', 35, + ',', 61, + '-', 33, '.', 10, - '0', 22, - '[', 64, - '{', 69, - '~', 20, + '0', 20, + '[', 60, + '~', 18, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(16); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(24); + lookahead == ' ') ADVANCE(14); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(22); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(17); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); END_STATE(); case 2: - if (lookahead == '"') ADVANCE(18); + if (lookahead == '"') ADVANCE(16); if (lookahead == '\\') ADVANCE(3); if (lookahead != 0) ADVANCE(2); END_STATE(); case 3: - if (lookahead == '"') ADVANCE(19); + if (lookahead == '"') ADVANCE(17); if (lookahead == '\\') ADVANCE(3); if (lookahead != 0) ADVANCE(2); END_STATE(); case 4: - if (lookahead == '#') ADVANCE(15); - if (lookahead == '-') ADVANCE(12); + if (lookahead == '#') ADVANCE(13); + if (lookahead == '0' || + lookahead == '1') ADVANCE(27); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(16); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(24); + lookahead == ' ') ADVANCE(14); END_STATE(); case 5: - if (lookahead == '#') ADVANCE(15); - if (lookahead == '0' || - lookahead == '1') ADVANCE(29); + if (lookahead == '#') ADVANCE(13); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(16); + lookahead == ' ') ADVANCE(14); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); END_STATE(); case 6: - if (lookahead == '#') ADVANCE(15); + if (lookahead == '#') ADVANCE(13); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(16); + lookahead == ' ') ADVANCE(14); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(27); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(25); END_STATE(); case 7: - if (lookahead == '\'') ADVANCE(30); + if (lookahead == '\'') ADVANCE(28); if (lookahead == '\\') ADVANCE(8); if (lookahead != 0) ADVANCE(7); END_STATE(); case 8: - if (lookahead == '\'') ADVANCE(31); + if (lookahead == '\'') ADVANCE(29); if (lookahead == '\\') ADVANCE(8); if (lookahead != 0) ADVANCE(7); END_STATE(); case 9: - if (lookahead == '.') ADVANCE(67); + if (lookahead == '.') ADVANCE(63); END_STATE(); case 10: if (lookahead == '.') ADVANCE(9); END_STATE(); case 11: - if (lookahead == '=') ADVANCE(78); - END_STATE(); - case 12: - if (lookahead == '>') ADVANCE(71); - END_STATE(); - case 13: - if (eof) ADVANCE(14); + if (eof) ADVANCE(12); ADVANCE_MAP( - '!', 41, + '!', 37, '"', 2, - '#', 15, - '&', 48, + '#', 13, + '&', 44, '\'', 7, - '(', 62, - ')', 63, - '*', 43, - '+', 39, - ',', 65, - '-', 36, - '.', 33, - '/', 44, - '0', 22, - ':', 34, - ';', 72, - '<', 55, - '=', 68, - '>', 51, - '[', 64, - ']', 66, - '^', 50, - '{', 69, - '|', 49, - '}', 70, - '~', 20, + '(', 58, + ')', 59, + '*', 39, + '+', 35, + ',', 61, + '-', 34, + '.', 31, + '/', 40, + '0', 20, + ':', 32, + '<', 51, + '=', 64, + '>', 47, + '[', 60, + ']', 62, + '^', 46, + '|', 45, + '~', 18, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(16); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(24); + lookahead == ' ') ADVANCE(14); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(22); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(17); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); END_STATE(); - case 14: + case 12: ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); - case 15: + case 13: ACCEPT_TOKEN(sym_comment); if (lookahead != 0 && - lookahead != '\n') ADVANCE(15); + lookahead != '\n') ADVANCE(13); END_STATE(); - case 16: + case 14: ACCEPT_TOKEN(sym__whitespace); END_STATE(); - case 17: + case 15: ACCEPT_TOKEN(sym_identifier); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(17); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); END_STATE(); - case 18: + case 16: ACCEPT_TOKEN(sym_string); END_STATE(); - case 19: + case 17: ACCEPT_TOKEN(sym_string); - if (lookahead == '"') ADVANCE(18); + if (lookahead == '"') ADVANCE(16); if (lookahead == '\\') ADVANCE(3); if (lookahead != 0) ADVANCE(2); END_STATE(); - case 20: + case 18: ACCEPT_TOKEN(sym_void); END_STATE(); - case 21: + case 19: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(28); - if (lookahead == 'o') ADVANCE(25); - if (lookahead == 'x') ADVANCE(26); + if (lookahead == 'b') ADVANCE(26); + if (lookahead == 'o') ADVANCE(23); + if (lookahead == 'x') ADVANCE(24); if (lookahead == '0' || - lookahead == '1') ADVANCE(23); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(24); + lookahead == '1') ADVANCE(21); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(22); END_STATE(); - case 22: + case 20: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(28); - if (lookahead == 'o') ADVANCE(25); - if (lookahead == 'x') ADVANCE(26); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(24); + if (lookahead == 'b') ADVANCE(26); + if (lookahead == 'o') ADVANCE(23); + if (lookahead == 'x') ADVANCE(24); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); END_STATE(); - case 23: + case 21: ACCEPT_TOKEN(aux_sym_base_ten_token1); if (lookahead == '0' || - lookahead == '1') ADVANCE(23); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(24); + lookahead == '1') ADVANCE(21); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(22); END_STATE(); - case 24: + case 22: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(24); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); END_STATE(); - case 25: + case 23: ACCEPT_TOKEN(aux_sym_octal_token1); END_STATE(); - case 26: + case 24: ACCEPT_TOKEN(aux_sym_hex_token1); END_STATE(); - case 27: + case 25: ACCEPT_TOKEN(aux_sym_hex_token2); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(27); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(25); END_STATE(); - case 28: + case 26: ACCEPT_TOKEN(aux_sym_binary_token1); END_STATE(); - case 29: + case 27: ACCEPT_TOKEN(aux_sym_binary_token2); if (lookahead == '0' || - lookahead == '1') ADVANCE(29); + lookahead == '1') ADVANCE(27); END_STATE(); - case 30: + case 28: ACCEPT_TOKEN(sym_unit_quote); END_STATE(); - case 31: + case 29: ACCEPT_TOKEN(sym_unit_quote); - if (lookahead == '\'') ADVANCE(30); + if (lookahead == '\'') ADVANCE(28); if (lookahead == '\\') ADVANCE(8); if (lookahead != 0) ADVANCE(7); END_STATE(); - case 32: + case 30: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(59); + if (lookahead == '.') ADVANCE(55); END_STATE(); - case 33: + case 31: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(60); + if (lookahead == '.') ADVANCE(56); END_STATE(); - case 34: + case 32: ACCEPT_TOKEN(anon_sym_COLON); END_STATE(); - case 35: - ACCEPT_TOKEN(anon_sym_DASH); - END_STATE(); - case 36: + case 33: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '=') ADVANCE(80); END_STATE(); - case 37: + case 34: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '=') ADVANCE(80); - if (lookahead == '>') ADVANCE(71); + if (lookahead == '>') ADVANCE(65); END_STATE(); - case 38: - ACCEPT_TOKEN(anon_sym_PLUS); - END_STATE(); - case 39: + case 35: ACCEPT_TOKEN(anon_sym_PLUS); - if (lookahead == '=') ADVANCE(79); END_STATE(); - case 40: + case 36: ACCEPT_TOKEN(anon_sym_BANG); END_STATE(); - case 41: + case 37: ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(56); + if (lookahead == '=') ADVANCE(52); END_STATE(); - case 42: + case 38: ACCEPT_TOKEN(anon_sym_STAR_STAR); - if (lookahead == '=') ADVANCE(81); END_STATE(); - case 43: + case 39: ACCEPT_TOKEN(anon_sym_STAR); - if (lookahead == '*') ADVANCE(42); - if (lookahead == '=') ADVANCE(82); + if (lookahead == '*') ADVANCE(38); END_STATE(); - case 44: + case 40: ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '/') ADVANCE(45); - if (lookahead == '=') ADVANCE(84); + if (lookahead == '/') ADVANCE(41); END_STATE(); - case 45: + case 41: ACCEPT_TOKEN(anon_sym_SLASH_SLASH); - if (lookahead == '=') ADVANCE(83); END_STATE(); - case 46: + case 42: ACCEPT_TOKEN(anon_sym_LT_LT); - if (lookahead == '=') ADVANCE(85); END_STATE(); - case 47: + case 43: ACCEPT_TOKEN(anon_sym_GT_GT); - if (lookahead == '=') ADVANCE(86); END_STATE(); - case 48: + case 44: ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(57); - if (lookahead == '=') ADVANCE(73); + if (lookahead == '&') ADVANCE(53); END_STATE(); - case 49: + case 45: ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '=') ADVANCE(74); - if (lookahead == '|') ADVANCE(58); + if (lookahead == '|') ADVANCE(54); END_STATE(); - case 50: + case 46: ACCEPT_TOKEN(anon_sym_CARET); - if (lookahead == '=') ADVANCE(75); - if (lookahead == '^') ADVANCE(11); END_STATE(); - case 51: + case 47: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(52); - if (lookahead == '>') ADVANCE(47); + if (lookahead == '=') ADVANCE(48); + if (lookahead == '>') ADVANCE(43); END_STATE(); - case 52: + case 48: ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); - case 53: + case 49: ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); - case 54: + case 50: ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); - case 55: + case 51: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(46); - if (lookahead == '=') ADVANCE(54); + if (lookahead == '<') ADVANCE(42); + if (lookahead == '=') ADVANCE(50); END_STATE(); - case 56: + case 52: ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); - case 57: + case 53: ACCEPT_TOKEN(anon_sym_AMP_AMP); - if (lookahead == '=') ADVANCE(76); END_STATE(); - case 58: + case 54: ACCEPT_TOKEN(anon_sym_PIPE_PIPE); - if (lookahead == '=') ADVANCE(77); END_STATE(); - case 59: + case 55: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '.') ADVANCE(67); - if (lookahead == '=') ADVANCE(61); + if (lookahead == '.') ADVANCE(63); + if (lookahead == '=') ADVANCE(57); END_STATE(); - case 60: + case 56: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '=') ADVANCE(61); + if (lookahead == '=') ADVANCE(57); END_STATE(); - case 61: + case 57: ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); END_STATE(); - case 62: + case 58: ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); - case 63: + case 59: ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); - case 64: + case 60: ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); - case 65: + case 61: ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); - case 66: + case 62: ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); - case 67: + case 63: ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); - case 68: + case 64: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(53); - END_STATE(); - case 69: - ACCEPT_TOKEN(anon_sym_LBRACE); - END_STATE(); - case 70: - ACCEPT_TOKEN(anon_sym_RBRACE); + if (lookahead == '=') ADVANCE(49); END_STATE(); - case 71: + case 65: ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); - case 72: - ACCEPT_TOKEN(anon_sym_SEMI); - END_STATE(); - case 73: - ACCEPT_TOKEN(anon_sym_AMP_EQ); - END_STATE(); - case 74: - ACCEPT_TOKEN(anon_sym_PIPE_EQ); - END_STATE(); - case 75: - ACCEPT_TOKEN(anon_sym_CARET_EQ); - END_STATE(); - case 76: - ACCEPT_TOKEN(anon_sym_AMP_AMP_EQ); - END_STATE(); - case 77: - ACCEPT_TOKEN(anon_sym_PIPE_PIPE_EQ); - END_STATE(); - case 78: - ACCEPT_TOKEN(anon_sym_CARET_CARET_EQ); - END_STATE(); - case 79: - ACCEPT_TOKEN(anon_sym_PLUS_EQ); - END_STATE(); - case 80: - ACCEPT_TOKEN(anon_sym_DASH_EQ); - END_STATE(); - case 81: - ACCEPT_TOKEN(anon_sym_STAR_STAR_EQ); - END_STATE(); - case 82: - ACCEPT_TOKEN(anon_sym_STAR_EQ); - END_STATE(); - case 83: - ACCEPT_TOKEN(anon_sym_SLASH_SLASH_EQ); - END_STATE(); - case 84: - ACCEPT_TOKEN(anon_sym_SLASH_EQ); - END_STATE(); - case 85: - ACCEPT_TOKEN(anon_sym_LT_LT_EQ); - END_STATE(); - case 86: - ACCEPT_TOKEN(anon_sym_GT_GT_EQ); - END_STATE(); default: return false; } @@ -1632,245 +1287,224 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { 'e', 3, 'f', 4, 'i', 5, - 'l', 6, - 't', 7, - 'U', 8, - 'u', 8, + 't', 6, + 'U', 7, + 'u', 7, ); END_STATE(); case 1: ACCEPT_TOKEN(aux_sym_signed_integer_token1); END_STATE(); case 2: - if (lookahead == 'e') ADVANCE(9); + if (lookahead == 'e') ADVANCE(8); END_STATE(); case 3: - if (lookahead == 'l') ADVANCE(10); + if (lookahead == 'l') ADVANCE(9); END_STATE(); case 4: - if (lookahead == 'a') ADVANCE(11); - if (lookahead == 'o') ADVANCE(12); + if (lookahead == 'a') ADVANCE(10); END_STATE(); case 5: ACCEPT_TOKEN(aux_sym_signed_integer_token1); - if (lookahead == 'f') ADVANCE(13); - if (lookahead == 'n') ADVANCE(14); + if (lookahead == 'f') ADVANCE(11); END_STATE(); case 6: - if (lookahead == 'e') ADVANCE(15); + if (lookahead == 'r') ADVANCE(12); END_STATE(); case 7: - if (lookahead == 'r') ADVANCE(16); + ACCEPT_TOKEN(aux_sym_unsigned_integer_token1); END_STATE(); case 8: - ACCEPT_TOKEN(aux_sym_unsigned_integer_token1); + if (lookahead == 'f') ADVANCE(13); END_STATE(); case 9: - if (lookahead == 'f') ADVANCE(17); + if (lookahead == 's') ADVANCE(14); END_STATE(); case 10: - if (lookahead == 's') ADVANCE(18); + if (lookahead == 'l') ADVANCE(15); END_STATE(); case 11: - if (lookahead == 'l') ADVANCE(19); + ACCEPT_TOKEN(anon_sym_if); END_STATE(); case 12: - if (lookahead == 'r') ADVANCE(20); + if (lookahead == 'u') ADVANCE(16); END_STATE(); case 13: - ACCEPT_TOKEN(anon_sym_if); + if (lookahead == 'a') ADVANCE(17); END_STATE(); case 14: - ACCEPT_TOKEN(anon_sym_in); + if (lookahead == 'e') ADVANCE(18); END_STATE(); case 15: - if (lookahead == 't') ADVANCE(21); + if (lookahead == 's') ADVANCE(19); END_STATE(); case 16: - if (lookahead == 'u') ADVANCE(22); + if (lookahead == 'e') ADVANCE(20); END_STATE(); case 17: - if (lookahead == 'a') ADVANCE(23); + if (lookahead == 'u') ADVANCE(21); END_STATE(); case 18: - if (lookahead == 'e') ADVANCE(24); + ACCEPT_TOKEN(anon_sym_else); END_STATE(); case 19: - if (lookahead == 's') ADVANCE(25); + if (lookahead == 'e') ADVANCE(22); END_STATE(); case 20: - ACCEPT_TOKEN(anon_sym_for); + ACCEPT_TOKEN(sym_true); END_STATE(); case 21: - ACCEPT_TOKEN(anon_sym_let); + if (lookahead == 'l') ADVANCE(23); END_STATE(); case 22: - if (lookahead == 'e') ADVANCE(26); + ACCEPT_TOKEN(sym_false); END_STATE(); case 23: - if (lookahead == 'u') ADVANCE(27); + if (lookahead == 't') ADVANCE(24); END_STATE(); case 24: - ACCEPT_TOKEN(anon_sym_else); - END_STATE(); - case 25: - if (lookahead == 'e') ADVANCE(28); - END_STATE(); - case 26: - ACCEPT_TOKEN(sym_true); - END_STATE(); - case 27: - if (lookahead == 'l') ADVANCE(29); - END_STATE(); - case 28: - ACCEPT_TOKEN(sym_false); - END_STATE(); - case 29: - if (lookahead == 't') ADVANCE(30); - END_STATE(); - case 30: - ACCEPT_TOKEN(sym_default); + ACCEPT_TOKEN(sym_default); END_STATE(); default: return false; } } -static const TSLexMode ts_lex_modes[STATE_COUNT] = { +static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [0] = {.lex_state = 0}, - [1] = {.lex_state = 13}, - [2] = {.lex_state = 13}, - [3] = {.lex_state = 13}, - [4] = {.lex_state = 13}, - [5] = {.lex_state = 13}, - [6] = {.lex_state = 13}, - [7] = {.lex_state = 13}, - [8] = {.lex_state = 13}, - [9] = {.lex_state = 13}, - [10] = {.lex_state = 1}, - [11] = {.lex_state = 13}, - [12] = {.lex_state = 13}, - [13] = {.lex_state = 13}, - [14] = {.lex_state = 13}, - [15] = {.lex_state = 13}, - [16] = {.lex_state = 13}, - [17] = {.lex_state = 13}, - [18] = {.lex_state = 13}, - [19] = {.lex_state = 13}, - [20] = {.lex_state = 13}, - [21] = {.lex_state = 13}, - [22] = {.lex_state = 13}, - [23] = {.lex_state = 13}, - [24] = {.lex_state = 13}, - [25] = {.lex_state = 13}, - [26] = {.lex_state = 13}, - [27] = {.lex_state = 13}, - [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 = 13}, - [41] = {.lex_state = 13}, - [42] = {.lex_state = 13}, - [43] = {.lex_state = 13}, - [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 = 13}, - [53] = {.lex_state = 13}, - [54] = {.lex_state = 13}, - [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 = 13}, - [68] = {.lex_state = 13}, - [69] = {.lex_state = 13}, - [70] = {.lex_state = 13}, - [71] = {.lex_state = 13}, - [72] = {.lex_state = 13}, - [73] = {.lex_state = 13}, - [74] = {.lex_state = 13}, - [75] = {.lex_state = 13}, - [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}, + [1] = {.lex_state = 11}, + [2] = {.lex_state = 11}, + [3] = {.lex_state = 11}, + [4] = {.lex_state = 1}, + [5] = {.lex_state = 11}, + [6] = {.lex_state = 11}, + [7] = {.lex_state = 11}, + [8] = {.lex_state = 11}, + [9] = {.lex_state = 11}, + [10] = {.lex_state = 11}, + [11] = {.lex_state = 11}, + [12] = {.lex_state = 11}, + [13] = {.lex_state = 11}, + [14] = {.lex_state = 11}, + [15] = {.lex_state = 11}, + [16] = {.lex_state = 11}, + [17] = {.lex_state = 11}, + [18] = {.lex_state = 11}, + [19] = {.lex_state = 11}, + [20] = {.lex_state = 11}, + [21] = {.lex_state = 11}, + [22] = {.lex_state = 11}, + [23] = {.lex_state = 11}, + [24] = {.lex_state = 11}, + [25] = {.lex_state = 11}, + [26] = {.lex_state = 11}, + [27] = {.lex_state = 11}, + [28] = {.lex_state = 11}, + [29] = {.lex_state = 11}, + [30] = {.lex_state = 11}, + [31] = {.lex_state = 11}, + [32] = {.lex_state = 11}, + [33] = {.lex_state = 11}, + [34] = {.lex_state = 11}, + [35] = {.lex_state = 11}, + [36] = {.lex_state = 11}, + [37] = {.lex_state = 11}, + [38] = {.lex_state = 11}, + [39] = {.lex_state = 11}, + [40] = {.lex_state = 11}, + [41] = {.lex_state = 11}, + [42] = {.lex_state = 11}, + [43] = {.lex_state = 11}, + [44] = {.lex_state = 11}, + [45] = {.lex_state = 11}, + [46] = {.lex_state = 11}, + [47] = {.lex_state = 11}, + [48] = {.lex_state = 11}, + [49] = {.lex_state = 11}, + [50] = {.lex_state = 11}, + [51] = {.lex_state = 11}, + [52] = {.lex_state = 11}, + [53] = {.lex_state = 11}, + [54] = {.lex_state = 11}, + [55] = {.lex_state = 11}, + [56] = {.lex_state = 11}, + [57] = {.lex_state = 11}, + [58] = {.lex_state = 11}, + [59] = {.lex_state = 11}, + [60] = {.lex_state = 11}, + [61] = {.lex_state = 11}, + [62] = {.lex_state = 11}, + [63] = {.lex_state = 11}, + [64] = {.lex_state = 11}, + [65] = {.lex_state = 11}, + [66] = {.lex_state = 11}, + [67] = {.lex_state = 11}, + [68] = {.lex_state = 11}, + [69] = {.lex_state = 11}, + [70] = {.lex_state = 11}, + [71] = {.lex_state = 11}, + [72] = {.lex_state = 11}, + [73] = {.lex_state = 11}, + [74] = {.lex_state = 11}, + [75] = {.lex_state = 11}, + [76] = {.lex_state = 11}, + [77] = {.lex_state = 11}, + [78] = {.lex_state = 11}, + [79] = {.lex_state = 11}, + [80] = {.lex_state = 11}, + [81] = {.lex_state = 11}, + [82] = {.lex_state = 11}, + [83] = {.lex_state = 11}, + [84] = {.lex_state = 11}, + [85] = {.lex_state = 11}, + [86] = {.lex_state = 11}, + [87] = {.lex_state = 11}, + [88] = {.lex_state = 11}, + [89] = {.lex_state = 11}, + [90] = {.lex_state = 11}, + [91] = {.lex_state = 11}, + [92] = {.lex_state = 11}, + [93] = {.lex_state = 11}, + [94] = {.lex_state = 11}, + [95] = {.lex_state = 11}, + [96] = {.lex_state = 11}, + [97] = {.lex_state = 11}, + [98] = {.lex_state = 11}, + [99] = {.lex_state = 11}, + [100] = {.lex_state = 11}, + [101] = {.lex_state = 11}, + [102] = {.lex_state = 11}, + [103] = {.lex_state = 11}, + [104] = {.lex_state = 11}, + [105] = {.lex_state = 11}, + [106] = {.lex_state = 11}, + [107] = {.lex_state = 11}, + [108] = {.lex_state = 11}, + [109] = {.lex_state = 11}, + [110] = {.lex_state = 11}, + [111] = {.lex_state = 11}, + [112] = {.lex_state = 11}, + [113] = {.lex_state = 1}, + [114] = {.lex_state = 1}, + [115] = {.lex_state = 1}, + [116] = {.lex_state = 0}, + [117] = {.lex_state = 0}, + [118] = {.lex_state = 0}, + [119] = {.lex_state = 0}, + [120] = {.lex_state = 0}, + [121] = {.lex_state = 0}, + [122] = {.lex_state = 0}, [123] = {.lex_state = 1}, - [124] = {.lex_state = 1}, + [124] = {.lex_state = 0}, [125] = {.lex_state = 0}, [126] = {.lex_state = 0}, - [127] = {.lex_state = 1}, + [127] = {.lex_state = 0}, [128] = {.lex_state = 0}, [129] = {.lex_state = 0}, [130] = {.lex_state = 0}, - [131] = {.lex_state = 0}, + [131] = {.lex_state = 5}, [132] = {.lex_state = 0}, - [133] = {.lex_state = 1}, + [133] = {.lex_state = 0}, [134] = {.lex_state = 0}, [135] = {.lex_state = 0}, [136] = {.lex_state = 0}, @@ -1882,42 +1516,15 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [142] = {.lex_state = 0}, [143] = {.lex_state = 0}, [144] = {.lex_state = 0}, - [145] = {.lex_state = 0}, - [146] = {.lex_state = 0}, + [145] = {.lex_state = 6}, + [146] = {.lex_state = 5}, [147] = {.lex_state = 0}, [148] = {.lex_state = 0}, [149] = {.lex_state = 0}, - [150] = {.lex_state = 0}, - [151] = {.lex_state = 0}, - [152] = {.lex_state = 0}, - [153] = {.lex_state = 0}, - [154] = {.lex_state = 0}, - [155] = {.lex_state = 0}, - [156] = {.lex_state = 0}, - [157] = {.lex_state = 4}, - [158] = {.lex_state = 0}, - [159] = {.lex_state = 0}, - [160] = {.lex_state = 0}, - [161] = {.lex_state = 4}, - [162] = {.lex_state = 4}, - [163] = {.lex_state = 0}, - [164] = {.lex_state = 4}, - [165] = {.lex_state = 0}, - [166] = {.lex_state = 0}, - [167] = {.lex_state = 4}, - [168] = {.lex_state = 0}, - [169] = {.lex_state = 0}, - [170] = {.lex_state = 0}, - [171] = {.lex_state = 5}, - [172] = {.lex_state = 0}, - [173] = {.lex_state = 0}, - [174] = {.lex_state = 0}, - [175] = {.lex_state = 4}, - [176] = {.lex_state = 6}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { - [0] = { + [STATE(0)] = { [ts_builtin_sym_end] = ACTIONS(1), [sym_identifier] = ACTIONS(1), [sym_comment] = ACTIONS(3), @@ -1968,54 +1575,33 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_RBRACK] = ACTIONS(1), [sym_varadic_dots] = ACTIONS(1), [anon_sym_EQ] = ACTIONS(1), - [anon_sym_LBRACE] = ACTIONS(1), - [anon_sym_RBRACE] = ACTIONS(1), [anon_sym_DASH_GT] = ACTIONS(1), - [anon_sym_SEMI] = ACTIONS(1), - [anon_sym_AMP_EQ] = ACTIONS(1), - [anon_sym_PIPE_EQ] = ACTIONS(1), - [anon_sym_CARET_EQ] = ACTIONS(1), - [anon_sym_AMP_AMP_EQ] = ACTIONS(1), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(1), - [anon_sym_CARET_CARET_EQ] = ACTIONS(1), - [anon_sym_PLUS_EQ] = ACTIONS(1), - [anon_sym_DASH_EQ] = ACTIONS(1), - [anon_sym_STAR_STAR_EQ] = ACTIONS(1), - [anon_sym_STAR_EQ] = ACTIONS(1), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(1), - [anon_sym_SLASH_EQ] = ACTIONS(1), - [anon_sym_LT_LT_EQ] = ACTIONS(1), - [anon_sym_GT_GT_EQ] = ACTIONS(1), - [anon_sym_let] = ACTIONS(1), - [anon_sym_for] = ACTIONS(1), - [anon_sym_in] = ACTIONS(1), }, - [1] = { - [sym_source_file] = STATE(169), - [sym_base_ten] = STATE(145), - [sym_octal] = STATE(145), - [sym_hex] = STATE(145), - [sym_binary] = STATE(145), - [sym_integer] = STATE(154), - [sym_signed_integer] = STATE(35), - [sym_unsigned_integer] = STATE(35), - [sym_number] = STATE(11), - [sym__float] = STATE(91), - [sym_scalar] = STATE(35), - [sym_boolean] = STATE(35), - [sym_function_call] = STATE(35), - [sym_method_call] = STATE(35), - [sym_expression] = STATE(114), - [sym_unary_expression] = STATE(35), - [sym_binary_expression] = STATE(35), - [sym_if] = STATE(35), - [sym_path] = STATE(92), - [sym_parenthesis] = STATE(35), - [sym_list] = STATE(35), - [sym_struct_definition] = STATE(92), - [sym_dictionary_construction] = STATE(35), - [sym_procedural_block] = STATE(35), - [sym_closure_definition] = STATE(35), + [STATE(1)] = { + [sym_source_file] = STATE(144), + [sym_base_ten] = STATE(130), + [sym_octal] = STATE(130), + [sym_hex] = STATE(130), + [sym_binary] = STATE(130), + [sym_integer] = STATE(134), + [sym_signed_integer] = STATE(20), + [sym_unsigned_integer] = STATE(20), + [sym_number] = STATE(9), + [sym__float] = STATE(88), + [sym_scalar] = STATE(20), + [sym_boolean] = STATE(20), + [sym_function_call] = STATE(20), + [sym_method_call] = STATE(20), + [sym_expression] = STATE(109), + [sym_unary_expression] = STATE(20), + [sym_binary_expression] = STATE(20), + [sym_if] = STATE(20), + [sym_path] = STATE(97), + [sym_parenthesis] = STATE(20), + [sym_list] = STATE(20), + [sym_struct_definition] = STATE(97), + [sym_dictionary_construction] = STATE(20), + [sym_closure_definition] = STATE(20), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2034,337 +1620,1723 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_if] = ACTIONS(23), [anon_sym_LPAREN] = ACTIONS(25), [anon_sym_LBRACK] = ACTIONS(27), - [anon_sym_LBRACE] = ACTIONS(29), }, - [2] = { - [aux_sym_path_repeat1] = STATE(4), - [ts_builtin_sym_end] = ACTIONS(31), - [sym_identifier] = ACTIONS(33), + [STATE(2)] = { + [sym_base_ten] = STATE(130), + [sym_octal] = STATE(130), + [sym_hex] = STATE(130), + [sym_binary] = STATE(130), + [sym_integer] = STATE(134), + [sym_signed_integer] = STATE(20), + [sym_unsigned_integer] = STATE(20), + [sym_number] = STATE(9), + [sym__float] = STATE(88), + [sym_scalar] = STATE(20), + [sym_boolean] = STATE(20), + [sym_function_call] = STATE(20), + [sym_method_call] = STATE(20), + [sym_expression] = STATE(110), + [sym_unary_expression] = STATE(20), + [sym_binary_expression] = STATE(20), + [sym_if] = STATE(20), + [sym_path] = STATE(97), + [sym_parenthesis] = STATE(20), + [sym_list] = STATE(20), + [sym_struct_definition] = STATE(97), + [sym_dictionary_construction] = STATE(86), + [sym_closure_definition] = STATE(20), + [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(31), - [sym_default] = ACTIONS(33), - [sym_void] = ACTIONS(31), - [aux_sym_base_ten_token1] = ACTIONS(33), - [aux_sym_octal_token1] = ACTIONS(31), - [aux_sym_hex_token1] = ACTIONS(31), - [aux_sym_binary_token1] = ACTIONS(31), - [anon_sym_DOT] = ACTIONS(35), - [sym_true] = ACTIONS(33), - [sym_false] = ACTIONS(33), - [anon_sym_COLON] = ACTIONS(31), - [anon_sym_DASH] = ACTIONS(33), - [anon_sym_PLUS] = ACTIONS(33), + [sym_string] = ACTIONS(7), + [sym_default] = ACTIONS(9), + [sym_void] = ACTIONS(7), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_COLON] = ACTIONS(29), + [anon_sym_DASH] = ACTIONS(31), + [anon_sym_PLUS] = ACTIONS(31), [anon_sym_BANG] = ACTIONS(33), - [anon_sym_STAR_STAR] = ACTIONS(33), - [anon_sym_STAR] = ACTIONS(33), - [anon_sym_SLASH] = ACTIONS(33), - [anon_sym_SLASH_SLASH] = ACTIONS(33), - [anon_sym_LT_LT] = ACTIONS(33), - [anon_sym_GT_GT] = ACTIONS(33), - [anon_sym_AMP] = ACTIONS(33), - [anon_sym_PIPE] = ACTIONS(33), - [anon_sym_CARET] = ACTIONS(33), - [anon_sym_GT] = ACTIONS(33), - [anon_sym_GT_EQ] = ACTIONS(31), - [anon_sym_EQ_EQ] = ACTIONS(31), - [anon_sym_LT_EQ] = ACTIONS(31), - [anon_sym_LT] = ACTIONS(33), - [anon_sym_BANG_EQ] = ACTIONS(31), - [anon_sym_AMP_AMP] = ACTIONS(33), - [anon_sym_PIPE_PIPE] = ACTIONS(33), - [anon_sym_DOT_DOT] = ACTIONS(33), - [anon_sym_DOT_DOT_EQ] = ACTIONS(31), - [anon_sym_if] = ACTIONS(33), - [anon_sym_LPAREN] = ACTIONS(31), - [anon_sym_RPAREN] = ACTIONS(31), - [anon_sym_LBRACK] = ACTIONS(31), - [anon_sym_COMMA] = ACTIONS(31), - [anon_sym_RBRACK] = ACTIONS(31), - [anon_sym_EQ] = ACTIONS(33), - [anon_sym_LBRACE] = ACTIONS(31), - [anon_sym_RBRACE] = ACTIONS(31), - [anon_sym_SEMI] = ACTIONS(31), - [anon_sym_AMP_EQ] = ACTIONS(31), - [anon_sym_PIPE_EQ] = ACTIONS(31), - [anon_sym_CARET_EQ] = ACTIONS(31), - [anon_sym_AMP_AMP_EQ] = ACTIONS(31), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(31), - [anon_sym_CARET_CARET_EQ] = ACTIONS(31), - [anon_sym_PLUS_EQ] = ACTIONS(31), - [anon_sym_DASH_EQ] = ACTIONS(31), - [anon_sym_STAR_STAR_EQ] = ACTIONS(31), - [anon_sym_STAR_EQ] = ACTIONS(31), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(31), - [anon_sym_SLASH_EQ] = ACTIONS(31), - [anon_sym_LT_LT_EQ] = ACTIONS(31), - [anon_sym_GT_GT_EQ] = ACTIONS(31), - [anon_sym_let] = ACTIONS(33), - [anon_sym_for] = ACTIONS(33), + [anon_sym_STAR_STAR] = ACTIONS(35), + [anon_sym_STAR] = ACTIONS(37), + [anon_sym_SLASH] = ACTIONS(37), + [anon_sym_SLASH_SLASH] = ACTIONS(39), + [anon_sym_LT_LT] = ACTIONS(41), + [anon_sym_GT_GT] = ACTIONS(41), + [anon_sym_AMP] = ACTIONS(43), + [anon_sym_PIPE] = ACTIONS(45), + [anon_sym_CARET] = ACTIONS(47), + [anon_sym_GT] = ACTIONS(49), + [anon_sym_GT_EQ] = ACTIONS(51), + [anon_sym_EQ_EQ] = ACTIONS(51), + [anon_sym_LT_EQ] = ACTIONS(51), + [anon_sym_LT] = ACTIONS(49), + [anon_sym_BANG_EQ] = ACTIONS(51), + [anon_sym_AMP_AMP] = ACTIONS(53), + [anon_sym_PIPE_PIPE] = ACTIONS(55), + [anon_sym_DOT_DOT] = ACTIONS(57), + [anon_sym_DOT_DOT_EQ] = ACTIONS(59), + [anon_sym_if] = ACTIONS(23), + [anon_sym_LPAREN] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), }, - [3] = { - [aux_sym_path_repeat1] = STATE(3), - [ts_builtin_sym_end] = ACTIONS(37), - [sym_identifier] = ACTIONS(39), + [STATE(3)] = { + [sym_base_ten] = STATE(130), + [sym_octal] = STATE(130), + [sym_hex] = STATE(130), + [sym_binary] = STATE(130), + [sym_integer] = STATE(134), + [sym_signed_integer] = STATE(20), + [sym_unsigned_integer] = STATE(20), + [sym_number] = STATE(9), + [sym__float] = STATE(88), + [sym_scalar] = STATE(20), + [sym_boolean] = STATE(20), + [sym_function_call] = STATE(20), + [sym_method_call] = STATE(20), + [sym_expression] = STATE(111), + [sym_unary_expression] = STATE(20), + [sym_binary_expression] = STATE(20), + [sym_if] = STATE(20), + [sym_path] = STATE(97), + [sym_parenthesis] = STATE(20), + [sym_list] = STATE(20), + [sym_struct_definition] = STATE(97), + [sym_dictionary_construction] = STATE(86), + [sym_closure_definition] = STATE(20), + [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(37), - [sym_default] = ACTIONS(39), - [sym_void] = ACTIONS(37), - [aux_sym_base_ten_token1] = ACTIONS(39), - [aux_sym_octal_token1] = ACTIONS(37), - [aux_sym_hex_token1] = ACTIONS(37), - [aux_sym_binary_token1] = ACTIONS(37), - [anon_sym_DOT] = ACTIONS(41), - [sym_true] = ACTIONS(39), - [sym_false] = ACTIONS(39), - [anon_sym_COLON] = ACTIONS(37), - [anon_sym_DASH] = ACTIONS(39), - [anon_sym_PLUS] = ACTIONS(39), - [anon_sym_BANG] = ACTIONS(39), - [anon_sym_STAR_STAR] = ACTIONS(39), - [anon_sym_STAR] = ACTIONS(39), - [anon_sym_SLASH] = ACTIONS(39), + [sym_string] = ACTIONS(7), + [sym_default] = ACTIONS(9), + [sym_void] = ACTIONS(7), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_COLON] = ACTIONS(29), + [anon_sym_DASH] = ACTIONS(31), + [anon_sym_PLUS] = ACTIONS(31), + [anon_sym_BANG] = ACTIONS(33), + [anon_sym_STAR_STAR] = ACTIONS(35), + [anon_sym_STAR] = ACTIONS(37), + [anon_sym_SLASH] = ACTIONS(37), [anon_sym_SLASH_SLASH] = ACTIONS(39), - [anon_sym_LT_LT] = ACTIONS(39), - [anon_sym_GT_GT] = ACTIONS(39), - [anon_sym_AMP] = ACTIONS(39), - [anon_sym_PIPE] = ACTIONS(39), - [anon_sym_CARET] = ACTIONS(39), - [anon_sym_GT] = ACTIONS(39), - [anon_sym_GT_EQ] = ACTIONS(37), - [anon_sym_EQ_EQ] = ACTIONS(37), - [anon_sym_LT_EQ] = ACTIONS(37), - [anon_sym_LT] = ACTIONS(39), - [anon_sym_BANG_EQ] = ACTIONS(37), - [anon_sym_AMP_AMP] = ACTIONS(39), - [anon_sym_PIPE_PIPE] = ACTIONS(39), - [anon_sym_DOT_DOT] = ACTIONS(39), - [anon_sym_DOT_DOT_EQ] = ACTIONS(37), - [anon_sym_if] = ACTIONS(39), - [anon_sym_LPAREN] = ACTIONS(37), - [anon_sym_RPAREN] = ACTIONS(37), - [anon_sym_LBRACK] = ACTIONS(37), - [anon_sym_COMMA] = ACTIONS(37), - [anon_sym_RBRACK] = ACTIONS(37), - [anon_sym_EQ] = ACTIONS(39), - [anon_sym_LBRACE] = ACTIONS(37), - [anon_sym_RBRACE] = ACTIONS(37), - [anon_sym_SEMI] = ACTIONS(37), - [anon_sym_AMP_EQ] = ACTIONS(37), - [anon_sym_PIPE_EQ] = ACTIONS(37), - [anon_sym_CARET_EQ] = ACTIONS(37), - [anon_sym_AMP_AMP_EQ] = ACTIONS(37), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(37), - [anon_sym_CARET_CARET_EQ] = ACTIONS(37), - [anon_sym_PLUS_EQ] = ACTIONS(37), - [anon_sym_DASH_EQ] = ACTIONS(37), - [anon_sym_STAR_STAR_EQ] = ACTIONS(37), - [anon_sym_STAR_EQ] = ACTIONS(37), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(37), - [anon_sym_SLASH_EQ] = ACTIONS(37), - [anon_sym_LT_LT_EQ] = ACTIONS(37), - [anon_sym_GT_GT_EQ] = ACTIONS(37), - [anon_sym_let] = ACTIONS(39), - [anon_sym_for] = ACTIONS(39), + [anon_sym_LT_LT] = ACTIONS(41), + [anon_sym_GT_GT] = ACTIONS(41), + [anon_sym_AMP] = ACTIONS(43), + [anon_sym_PIPE] = ACTIONS(45), + [anon_sym_CARET] = ACTIONS(47), + [anon_sym_GT] = ACTIONS(49), + [anon_sym_GT_EQ] = ACTIONS(51), + [anon_sym_EQ_EQ] = ACTIONS(51), + [anon_sym_LT_EQ] = ACTIONS(51), + [anon_sym_LT] = ACTIONS(49), + [anon_sym_BANG_EQ] = ACTIONS(51), + [anon_sym_AMP_AMP] = ACTIONS(53), + [anon_sym_PIPE_PIPE] = ACTIONS(55), + [anon_sym_DOT_DOT] = ACTIONS(57), + [anon_sym_DOT_DOT_EQ] = ACTIONS(59), + [anon_sym_if] = ACTIONS(23), + [anon_sym_LPAREN] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + }, + [STATE(4)] = { + [sym_base_ten] = STATE(130), + [sym_octal] = STATE(130), + [sym_hex] = STATE(130), + [sym_binary] = STATE(130), + [sym_integer] = STATE(134), + [sym_signed_integer] = STATE(20), + [sym_unsigned_integer] = STATE(20), + [sym_number] = STATE(9), + [sym__float] = STATE(88), + [sym_scalar] = STATE(20), + [sym_boolean] = STATE(20), + [sym_function_call] = STATE(20), + [sym_method_call] = STATE(20), + [sym_expression] = STATE(108), + [sym_unary_expression] = STATE(20), + [sym_binary_expression] = STATE(20), + [sym_if] = STATE(20), + [sym_path] = STATE(97), + [sym_parenthesis] = STATE(20), + [sym_list] = STATE(20), + [sym_struct_member] = STATE(129), + [sym__struct_final_element] = STATE(138), + [sym_struct_definition] = STATE(97), + [sym_dictionary_member_assignment] = STATE(122), + [sym_dictionary_construction] = STATE(20), + [sym_closure_definition] = STATE(20), + [aux_sym_struct_definition_repeat1] = STATE(114), + [sym_identifier] = ACTIONS(61), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(7), + [sym_default] = ACTIONS(9), + [sym_void] = ACTIONS(7), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_DASH] = ACTIONS(21), + [anon_sym_PLUS] = ACTIONS(21), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_if] = ACTIONS(23), + [anon_sym_LPAREN] = ACTIONS(25), + [anon_sym_RPAREN] = ACTIONS(63), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_COMMA] = ACTIONS(65), + [sym_varadic_dots] = ACTIONS(67), }, - [4] = { - [aux_sym_path_repeat1] = STATE(3), - [ts_builtin_sym_end] = ACTIONS(44), - [sym_identifier] = ACTIONS(46), + [STATE(5)] = { + [aux_sym_path_repeat1] = STATE(7), + [ts_builtin_sym_end] = ACTIONS(69), + [sym_identifier] = ACTIONS(71), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(44), - [sym_default] = ACTIONS(46), - [sym_void] = ACTIONS(44), - [aux_sym_base_ten_token1] = ACTIONS(46), - [aux_sym_octal_token1] = ACTIONS(44), - [aux_sym_hex_token1] = ACTIONS(44), - [aux_sym_binary_token1] = ACTIONS(44), - [anon_sym_DOT] = ACTIONS(35), - [sym_true] = ACTIONS(46), - [sym_false] = ACTIONS(46), - [anon_sym_COLON] = ACTIONS(44), - [anon_sym_DASH] = ACTIONS(46), - [anon_sym_PLUS] = ACTIONS(46), - [anon_sym_BANG] = ACTIONS(46), - [anon_sym_STAR_STAR] = ACTIONS(46), - [anon_sym_STAR] = ACTIONS(46), - [anon_sym_SLASH] = ACTIONS(46), - [anon_sym_SLASH_SLASH] = ACTIONS(46), - [anon_sym_LT_LT] = ACTIONS(46), - [anon_sym_GT_GT] = ACTIONS(46), - [anon_sym_AMP] = ACTIONS(46), - [anon_sym_PIPE] = ACTIONS(46), - [anon_sym_CARET] = ACTIONS(46), - [anon_sym_GT] = ACTIONS(46), - [anon_sym_GT_EQ] = ACTIONS(44), - [anon_sym_EQ_EQ] = ACTIONS(44), - [anon_sym_LT_EQ] = ACTIONS(44), - [anon_sym_LT] = ACTIONS(46), - [anon_sym_BANG_EQ] = ACTIONS(44), - [anon_sym_AMP_AMP] = ACTIONS(46), - [anon_sym_PIPE_PIPE] = ACTIONS(46), - [anon_sym_DOT_DOT] = ACTIONS(46), - [anon_sym_DOT_DOT_EQ] = ACTIONS(44), - [anon_sym_if] = ACTIONS(46), - [anon_sym_LPAREN] = ACTIONS(44), - [anon_sym_RPAREN] = ACTIONS(44), - [anon_sym_LBRACK] = ACTIONS(44), - [anon_sym_COMMA] = ACTIONS(44), - [anon_sym_RBRACK] = ACTIONS(44), - [anon_sym_EQ] = ACTIONS(46), - [anon_sym_LBRACE] = ACTIONS(44), - [anon_sym_RBRACE] = ACTIONS(44), - [anon_sym_SEMI] = ACTIONS(44), - [anon_sym_AMP_EQ] = ACTIONS(44), - [anon_sym_PIPE_EQ] = ACTIONS(44), - [anon_sym_CARET_EQ] = ACTIONS(44), - [anon_sym_AMP_AMP_EQ] = ACTIONS(44), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(44), - [anon_sym_CARET_CARET_EQ] = ACTIONS(44), - [anon_sym_PLUS_EQ] = ACTIONS(44), - [anon_sym_DASH_EQ] = ACTIONS(44), - [anon_sym_STAR_STAR_EQ] = ACTIONS(44), - [anon_sym_STAR_EQ] = ACTIONS(44), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(44), - [anon_sym_SLASH_EQ] = ACTIONS(44), - [anon_sym_LT_LT_EQ] = ACTIONS(44), - [anon_sym_GT_GT_EQ] = ACTIONS(44), - [anon_sym_let] = ACTIONS(46), - [anon_sym_for] = ACTIONS(46), + [sym_string] = ACTIONS(69), + [sym_default] = ACTIONS(71), + [sym_void] = ACTIONS(69), + [aux_sym_base_ten_token1] = ACTIONS(71), + [aux_sym_octal_token1] = ACTIONS(69), + [aux_sym_hex_token1] = ACTIONS(69), + [aux_sym_binary_token1] = ACTIONS(69), + [anon_sym_DOT] = ACTIONS(73), + [sym_true] = ACTIONS(71), + [sym_false] = ACTIONS(71), + [anon_sym_COLON] = ACTIONS(69), + [anon_sym_DASH] = ACTIONS(71), + [anon_sym_PLUS] = ACTIONS(69), + [anon_sym_BANG] = ACTIONS(71), + [anon_sym_STAR_STAR] = ACTIONS(69), + [anon_sym_STAR] = ACTIONS(71), + [anon_sym_SLASH] = ACTIONS(71), + [anon_sym_SLASH_SLASH] = ACTIONS(69), + [anon_sym_LT_LT] = ACTIONS(69), + [anon_sym_GT_GT] = ACTIONS(69), + [anon_sym_AMP] = ACTIONS(71), + [anon_sym_PIPE] = ACTIONS(71), + [anon_sym_CARET] = ACTIONS(69), + [anon_sym_GT] = ACTIONS(71), + [anon_sym_GT_EQ] = ACTIONS(69), + [anon_sym_EQ_EQ] = ACTIONS(69), + [anon_sym_LT_EQ] = ACTIONS(69), + [anon_sym_LT] = ACTIONS(71), + [anon_sym_BANG_EQ] = ACTIONS(69), + [anon_sym_AMP_AMP] = ACTIONS(69), + [anon_sym_PIPE_PIPE] = ACTIONS(69), + [anon_sym_DOT_DOT] = ACTIONS(71), + [anon_sym_DOT_DOT_EQ] = ACTIONS(69), + [anon_sym_if] = ACTIONS(71), + [anon_sym_else] = ACTIONS(71), + [anon_sym_LPAREN] = ACTIONS(69), + [anon_sym_RPAREN] = ACTIONS(69), + [anon_sym_LBRACK] = ACTIONS(69), + [anon_sym_COMMA] = ACTIONS(69), + [anon_sym_RBRACK] = ACTIONS(69), + [anon_sym_EQ] = ACTIONS(71), + [anon_sym_DASH_GT] = ACTIONS(69), }, - [5] = { - [ts_builtin_sym_end] = ACTIONS(37), - [sym_identifier] = ACTIONS(39), + [STATE(6)] = { + [aux_sym_path_repeat1] = STATE(6), + [ts_builtin_sym_end] = ACTIONS(75), + [sym_identifier] = ACTIONS(77), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(37), - [sym_default] = ACTIONS(39), - [sym_void] = ACTIONS(37), - [aux_sym_base_ten_token1] = ACTIONS(39), - [aux_sym_octal_token1] = ACTIONS(37), - [aux_sym_hex_token1] = ACTIONS(37), - [aux_sym_binary_token1] = ACTIONS(37), - [anon_sym_DOT] = ACTIONS(39), - [sym_true] = ACTIONS(39), - [sym_false] = ACTIONS(39), - [anon_sym_COLON] = ACTIONS(37), - [anon_sym_DASH] = ACTIONS(39), - [anon_sym_PLUS] = ACTIONS(39), - [anon_sym_BANG] = ACTIONS(39), - [anon_sym_STAR_STAR] = ACTIONS(39), - [anon_sym_STAR] = ACTIONS(39), - [anon_sym_SLASH] = ACTIONS(39), - [anon_sym_SLASH_SLASH] = ACTIONS(39), - [anon_sym_LT_LT] = ACTIONS(39), - [anon_sym_GT_GT] = ACTIONS(39), - [anon_sym_AMP] = ACTIONS(39), - [anon_sym_PIPE] = ACTIONS(39), - [anon_sym_CARET] = ACTIONS(39), - [anon_sym_GT] = ACTIONS(39), - [anon_sym_GT_EQ] = ACTIONS(37), - [anon_sym_EQ_EQ] = ACTIONS(37), - [anon_sym_LT_EQ] = ACTIONS(37), - [anon_sym_LT] = ACTIONS(39), - [anon_sym_BANG_EQ] = ACTIONS(37), - [anon_sym_AMP_AMP] = ACTIONS(39), - [anon_sym_PIPE_PIPE] = ACTIONS(39), - [anon_sym_DOT_DOT] = ACTIONS(39), - [anon_sym_DOT_DOT_EQ] = ACTIONS(37), - [anon_sym_if] = ACTIONS(39), - [anon_sym_LPAREN] = ACTIONS(37), - [anon_sym_RPAREN] = ACTIONS(37), - [anon_sym_LBRACK] = ACTIONS(37), - [anon_sym_COMMA] = ACTIONS(37), - [anon_sym_RBRACK] = ACTIONS(37), - [anon_sym_EQ] = ACTIONS(39), - [anon_sym_LBRACE] = ACTIONS(37), - [anon_sym_RBRACE] = ACTIONS(37), - [anon_sym_SEMI] = ACTIONS(37), - [anon_sym_AMP_EQ] = ACTIONS(37), - [anon_sym_PIPE_EQ] = ACTIONS(37), - [anon_sym_CARET_EQ] = ACTIONS(37), - [anon_sym_AMP_AMP_EQ] = ACTIONS(37), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(37), - [anon_sym_CARET_CARET_EQ] = ACTIONS(37), - [anon_sym_PLUS_EQ] = ACTIONS(37), - [anon_sym_DASH_EQ] = ACTIONS(37), - [anon_sym_STAR_STAR_EQ] = ACTIONS(37), - [anon_sym_STAR_EQ] = ACTIONS(37), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(37), - [anon_sym_SLASH_EQ] = ACTIONS(37), - [anon_sym_LT_LT_EQ] = ACTIONS(37), - [anon_sym_GT_GT_EQ] = ACTIONS(37), - [anon_sym_let] = ACTIONS(39), - [anon_sym_for] = ACTIONS(39), + [sym_string] = ACTIONS(75), + [sym_default] = ACTIONS(77), + [sym_void] = ACTIONS(75), + [aux_sym_base_ten_token1] = ACTIONS(77), + [aux_sym_octal_token1] = ACTIONS(75), + [aux_sym_hex_token1] = ACTIONS(75), + [aux_sym_binary_token1] = ACTIONS(75), + [anon_sym_DOT] = ACTIONS(79), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(75), + [anon_sym_DASH] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(75), + [anon_sym_BANG] = ACTIONS(77), + [anon_sym_STAR_STAR] = ACTIONS(75), + [anon_sym_STAR] = ACTIONS(77), + [anon_sym_SLASH] = ACTIONS(77), + [anon_sym_SLASH_SLASH] = ACTIONS(75), + [anon_sym_LT_LT] = ACTIONS(75), + [anon_sym_GT_GT] = ACTIONS(75), + [anon_sym_AMP] = ACTIONS(77), + [anon_sym_PIPE] = ACTIONS(77), + [anon_sym_CARET] = ACTIONS(75), + [anon_sym_GT] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(75), + [anon_sym_EQ_EQ] = ACTIONS(75), + [anon_sym_LT_EQ] = ACTIONS(75), + [anon_sym_LT] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(75), + [anon_sym_AMP_AMP] = ACTIONS(75), + [anon_sym_PIPE_PIPE] = ACTIONS(75), + [anon_sym_DOT_DOT] = ACTIONS(77), + [anon_sym_DOT_DOT_EQ] = ACTIONS(75), + [anon_sym_if] = ACTIONS(77), + [anon_sym_else] = ACTIONS(77), + [anon_sym_LPAREN] = ACTIONS(75), + [anon_sym_RPAREN] = ACTIONS(75), + [anon_sym_LBRACK] = ACTIONS(75), + [anon_sym_COMMA] = ACTIONS(75), + [anon_sym_RBRACK] = ACTIONS(75), + [anon_sym_EQ] = ACTIONS(77), + [anon_sym_DASH_GT] = ACTIONS(75), + }, + [STATE(7)] = { + [aux_sym_path_repeat1] = STATE(6), + [ts_builtin_sym_end] = ACTIONS(82), + [sym_identifier] = ACTIONS(84), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(82), + [sym_default] = ACTIONS(84), + [sym_void] = ACTIONS(82), + [aux_sym_base_ten_token1] = ACTIONS(84), + [aux_sym_octal_token1] = ACTIONS(82), + [aux_sym_hex_token1] = ACTIONS(82), + [aux_sym_binary_token1] = ACTIONS(82), + [anon_sym_DOT] = ACTIONS(73), + [sym_true] = ACTIONS(84), + [sym_false] = ACTIONS(84), + [anon_sym_COLON] = ACTIONS(82), + [anon_sym_DASH] = ACTIONS(84), + [anon_sym_PLUS] = ACTIONS(82), + [anon_sym_BANG] = ACTIONS(84), + [anon_sym_STAR_STAR] = ACTIONS(82), + [anon_sym_STAR] = ACTIONS(84), + [anon_sym_SLASH] = ACTIONS(84), + [anon_sym_SLASH_SLASH] = ACTIONS(82), + [anon_sym_LT_LT] = ACTIONS(82), + [anon_sym_GT_GT] = ACTIONS(82), + [anon_sym_AMP] = ACTIONS(84), + [anon_sym_PIPE] = ACTIONS(84), + [anon_sym_CARET] = ACTIONS(82), + [anon_sym_GT] = ACTIONS(84), + [anon_sym_GT_EQ] = ACTIONS(82), + [anon_sym_EQ_EQ] = ACTIONS(82), + [anon_sym_LT_EQ] = ACTIONS(82), + [anon_sym_LT] = ACTIONS(84), + [anon_sym_BANG_EQ] = ACTIONS(82), + [anon_sym_AMP_AMP] = ACTIONS(82), + [anon_sym_PIPE_PIPE] = ACTIONS(82), + [anon_sym_DOT_DOT] = ACTIONS(84), + [anon_sym_DOT_DOT_EQ] = ACTIONS(82), + [anon_sym_if] = ACTIONS(84), + [anon_sym_else] = ACTIONS(84), + [anon_sym_LPAREN] = ACTIONS(82), + [anon_sym_RPAREN] = ACTIONS(82), + [anon_sym_LBRACK] = ACTIONS(82), + [anon_sym_COMMA] = ACTIONS(82), + [anon_sym_RBRACK] = ACTIONS(82), + [anon_sym_EQ] = ACTIONS(84), + [anon_sym_DASH_GT] = ACTIONS(82), + }, + [STATE(8)] = { + [ts_builtin_sym_end] = ACTIONS(75), + [sym_identifier] = ACTIONS(77), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(75), + [sym_default] = ACTIONS(77), + [sym_void] = ACTIONS(75), + [aux_sym_base_ten_token1] = ACTIONS(77), + [aux_sym_octal_token1] = ACTIONS(75), + [aux_sym_hex_token1] = ACTIONS(75), + [aux_sym_binary_token1] = ACTIONS(75), + [anon_sym_DOT] = ACTIONS(77), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [anon_sym_COLON] = ACTIONS(75), + [anon_sym_DASH] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(75), + [anon_sym_BANG] = ACTIONS(77), + [anon_sym_STAR_STAR] = ACTIONS(75), + [anon_sym_STAR] = ACTIONS(77), + [anon_sym_SLASH] = ACTIONS(77), + [anon_sym_SLASH_SLASH] = ACTIONS(75), + [anon_sym_LT_LT] = ACTIONS(75), + [anon_sym_GT_GT] = ACTIONS(75), + [anon_sym_AMP] = ACTIONS(77), + [anon_sym_PIPE] = ACTIONS(77), + [anon_sym_CARET] = ACTIONS(75), + [anon_sym_GT] = ACTIONS(77), + [anon_sym_GT_EQ] = ACTIONS(75), + [anon_sym_EQ_EQ] = ACTIONS(75), + [anon_sym_LT_EQ] = ACTIONS(75), + [anon_sym_LT] = ACTIONS(77), + [anon_sym_BANG_EQ] = ACTIONS(75), + [anon_sym_AMP_AMP] = ACTIONS(75), + [anon_sym_PIPE_PIPE] = ACTIONS(75), + [anon_sym_DOT_DOT] = ACTIONS(77), + [anon_sym_DOT_DOT_EQ] = ACTIONS(75), + [anon_sym_if] = ACTIONS(77), + [anon_sym_else] = ACTIONS(77), + [anon_sym_LPAREN] = ACTIONS(75), + [anon_sym_RPAREN] = ACTIONS(75), + [anon_sym_LBRACK] = ACTIONS(75), + [anon_sym_COMMA] = ACTIONS(75), + [anon_sym_RBRACK] = ACTIONS(75), + [anon_sym_EQ] = ACTIONS(77), + [anon_sym_DASH_GT] = ACTIONS(75), + }, + [STATE(9)] = { + [ts_builtin_sym_end] = ACTIONS(86), + [sym_identifier] = ACTIONS(88), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(86), + [sym_default] = ACTIONS(88), + [sym_void] = ACTIONS(86), + [aux_sym_base_ten_token1] = ACTIONS(88), + [aux_sym_octal_token1] = ACTIONS(86), + [aux_sym_hex_token1] = ACTIONS(86), + [aux_sym_binary_token1] = ACTIONS(86), + [sym_unit_quote] = ACTIONS(86), + [anon_sym_DOT] = ACTIONS(90), + [sym_true] = ACTIONS(88), + [sym_false] = ACTIONS(88), + [anon_sym_COLON] = ACTIONS(86), + [anon_sym_DASH] = ACTIONS(86), + [anon_sym_PLUS] = ACTIONS(86), + [anon_sym_BANG] = ACTIONS(88), + [anon_sym_STAR_STAR] = ACTIONS(86), + [anon_sym_STAR] = ACTIONS(88), + [anon_sym_SLASH] = ACTIONS(88), + [anon_sym_SLASH_SLASH] = ACTIONS(86), + [anon_sym_LT_LT] = ACTIONS(86), + [anon_sym_GT_GT] = ACTIONS(86), + [anon_sym_AMP] = ACTIONS(88), + [anon_sym_PIPE] = ACTIONS(88), + [anon_sym_CARET] = ACTIONS(86), + [anon_sym_GT] = ACTIONS(88), + [anon_sym_GT_EQ] = ACTIONS(86), + [anon_sym_EQ_EQ] = ACTIONS(86), + [anon_sym_LT_EQ] = ACTIONS(86), + [anon_sym_LT] = ACTIONS(88), + [anon_sym_BANG_EQ] = ACTIONS(86), + [anon_sym_AMP_AMP] = ACTIONS(86), + [anon_sym_PIPE_PIPE] = ACTIONS(86), + [anon_sym_DOT_DOT] = ACTIONS(88), + [anon_sym_DOT_DOT_EQ] = ACTIONS(86), + [anon_sym_if] = ACTIONS(88), + [anon_sym_else] = ACTIONS(88), + [anon_sym_LPAREN] = ACTIONS(86), + [anon_sym_RPAREN] = ACTIONS(86), + [anon_sym_LBRACK] = ACTIONS(86), + [anon_sym_COMMA] = ACTIONS(86), + [anon_sym_RBRACK] = ACTIONS(86), + [anon_sym_EQ] = ACTIONS(88), + }, + [STATE(10)] = { + [ts_builtin_sym_end] = ACTIONS(92), + [sym_identifier] = ACTIONS(94), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(92), + [sym_default] = ACTIONS(94), + [sym_void] = ACTIONS(92), + [aux_sym_base_ten_token1] = ACTIONS(94), + [aux_sym_octal_token1] = ACTIONS(92), + [aux_sym_hex_token1] = ACTIONS(92), + [aux_sym_binary_token1] = ACTIONS(92), + [sym_true] = ACTIONS(94), + [sym_false] = ACTIONS(94), + [anon_sym_COLON] = ACTIONS(92), + [anon_sym_DASH] = ACTIONS(94), + [anon_sym_PLUS] = ACTIONS(92), + [anon_sym_BANG] = ACTIONS(94), + [anon_sym_STAR_STAR] = ACTIONS(92), + [anon_sym_STAR] = ACTIONS(94), + [anon_sym_SLASH] = ACTIONS(94), + [anon_sym_SLASH_SLASH] = ACTIONS(92), + [anon_sym_LT_LT] = ACTIONS(92), + [anon_sym_GT_GT] = ACTIONS(92), + [anon_sym_AMP] = ACTIONS(94), + [anon_sym_PIPE] = ACTIONS(94), + [anon_sym_CARET] = ACTIONS(92), + [anon_sym_GT] = ACTIONS(94), + [anon_sym_GT_EQ] = ACTIONS(92), + [anon_sym_EQ_EQ] = ACTIONS(92), + [anon_sym_LT_EQ] = ACTIONS(92), + [anon_sym_LT] = ACTIONS(94), + [anon_sym_BANG_EQ] = ACTIONS(92), + [anon_sym_AMP_AMP] = ACTIONS(92), + [anon_sym_PIPE_PIPE] = ACTIONS(92), + [anon_sym_DOT_DOT] = ACTIONS(94), + [anon_sym_DOT_DOT_EQ] = ACTIONS(92), + [anon_sym_if] = ACTIONS(94), + [anon_sym_else] = ACTIONS(94), + [anon_sym_LPAREN] = ACTIONS(92), + [anon_sym_RPAREN] = ACTIONS(92), + [anon_sym_LBRACK] = ACTIONS(92), + [anon_sym_COMMA] = ACTIONS(92), + [anon_sym_RBRACK] = ACTIONS(92), + [anon_sym_EQ] = ACTIONS(94), + [anon_sym_DASH_GT] = ACTIONS(92), + }, + [STATE(11)] = { + [sym_dictionary_construction] = STATE(25), + [ts_builtin_sym_end] = ACTIONS(96), + [sym_identifier] = ACTIONS(98), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(96), + [sym_default] = ACTIONS(98), + [sym_void] = ACTIONS(96), + [aux_sym_base_ten_token1] = ACTIONS(98), + [aux_sym_octal_token1] = ACTIONS(96), + [aux_sym_hex_token1] = ACTIONS(96), + [aux_sym_binary_token1] = ACTIONS(96), + [sym_true] = ACTIONS(98), + [sym_false] = ACTIONS(98), + [anon_sym_COLON] = ACTIONS(29), + [anon_sym_DASH] = ACTIONS(96), + [anon_sym_PLUS] = ACTIONS(96), + [anon_sym_BANG] = ACTIONS(98), + [anon_sym_STAR_STAR] = ACTIONS(96), + [anon_sym_STAR] = ACTIONS(98), + [anon_sym_SLASH] = ACTIONS(98), + [anon_sym_SLASH_SLASH] = ACTIONS(96), + [anon_sym_LT_LT] = ACTIONS(96), + [anon_sym_GT_GT] = ACTIONS(96), + [anon_sym_AMP] = ACTIONS(98), + [anon_sym_PIPE] = ACTIONS(98), + [anon_sym_CARET] = ACTIONS(96), + [anon_sym_GT] = ACTIONS(98), + [anon_sym_GT_EQ] = ACTIONS(96), + [anon_sym_EQ_EQ] = ACTIONS(96), + [anon_sym_LT_EQ] = ACTIONS(96), + [anon_sym_LT] = ACTIONS(98), + [anon_sym_BANG_EQ] = ACTIONS(96), + [anon_sym_AMP_AMP] = ACTIONS(96), + [anon_sym_PIPE_PIPE] = ACTIONS(96), + [anon_sym_DOT_DOT] = ACTIONS(98), + [anon_sym_DOT_DOT_EQ] = ACTIONS(96), + [anon_sym_if] = ACTIONS(98), + [anon_sym_else] = ACTIONS(98), + [anon_sym_LPAREN] = ACTIONS(100), + [anon_sym_RPAREN] = ACTIONS(96), + [anon_sym_LBRACK] = ACTIONS(96), + [anon_sym_COMMA] = ACTIONS(96), + [anon_sym_RBRACK] = ACTIONS(96), + [anon_sym_EQ] = ACTIONS(98), + }, + [STATE(12)] = { + [ts_builtin_sym_end] = ACTIONS(102), + [sym_identifier] = ACTIONS(104), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(102), + [sym_default] = ACTIONS(104), + [sym_void] = ACTIONS(102), + [aux_sym_base_ten_token1] = ACTIONS(104), + [aux_sym_octal_token1] = ACTIONS(102), + [aux_sym_hex_token1] = ACTIONS(102), + [aux_sym_binary_token1] = ACTIONS(102), + [sym_true] = ACTIONS(104), + [sym_false] = ACTIONS(104), + [anon_sym_COLON] = ACTIONS(102), + [anon_sym_DASH] = ACTIONS(104), + [anon_sym_PLUS] = ACTIONS(102), + [anon_sym_BANG] = ACTIONS(104), + [anon_sym_STAR_STAR] = ACTIONS(102), + [anon_sym_STAR] = ACTIONS(104), + [anon_sym_SLASH] = ACTIONS(104), + [anon_sym_SLASH_SLASH] = ACTIONS(102), + [anon_sym_LT_LT] = ACTIONS(102), + [anon_sym_GT_GT] = ACTIONS(102), + [anon_sym_AMP] = ACTIONS(104), + [anon_sym_PIPE] = ACTIONS(104), + [anon_sym_CARET] = ACTIONS(102), + [anon_sym_GT] = ACTIONS(104), + [anon_sym_GT_EQ] = ACTIONS(102), + [anon_sym_EQ_EQ] = ACTIONS(102), + [anon_sym_LT_EQ] = ACTIONS(102), + [anon_sym_LT] = ACTIONS(104), + [anon_sym_BANG_EQ] = ACTIONS(102), + [anon_sym_AMP_AMP] = ACTIONS(102), + [anon_sym_PIPE_PIPE] = ACTIONS(102), + [anon_sym_DOT_DOT] = ACTIONS(104), + [anon_sym_DOT_DOT_EQ] = ACTIONS(102), + [anon_sym_if] = ACTIONS(104), + [anon_sym_else] = ACTIONS(104), + [anon_sym_LPAREN] = ACTIONS(102), + [anon_sym_RPAREN] = ACTIONS(102), + [anon_sym_LBRACK] = ACTIONS(102), + [anon_sym_COMMA] = ACTIONS(102), + [anon_sym_RBRACK] = ACTIONS(102), + [anon_sym_EQ] = ACTIONS(104), + [anon_sym_DASH_GT] = ACTIONS(102), + }, + [STATE(13)] = { + [ts_builtin_sym_end] = ACTIONS(106), + [sym_identifier] = ACTIONS(108), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(106), + [sym_default] = ACTIONS(108), + [sym_void] = ACTIONS(106), + [aux_sym_base_ten_token1] = ACTIONS(108), + [aux_sym_octal_token1] = ACTIONS(106), + [aux_sym_hex_token1] = ACTIONS(106), + [aux_sym_binary_token1] = ACTIONS(106), + [sym_true] = ACTIONS(108), + [sym_false] = ACTIONS(108), + [anon_sym_COLON] = ACTIONS(106), + [anon_sym_DASH] = ACTIONS(108), + [anon_sym_PLUS] = ACTIONS(106), + [anon_sym_BANG] = ACTIONS(108), + [anon_sym_STAR_STAR] = ACTIONS(106), + [anon_sym_STAR] = ACTIONS(108), + [anon_sym_SLASH] = ACTIONS(108), + [anon_sym_SLASH_SLASH] = ACTIONS(106), + [anon_sym_LT_LT] = ACTIONS(106), + [anon_sym_GT_GT] = ACTIONS(106), + [anon_sym_AMP] = ACTIONS(108), + [anon_sym_PIPE] = ACTIONS(108), + [anon_sym_CARET] = ACTIONS(106), + [anon_sym_GT] = ACTIONS(108), + [anon_sym_GT_EQ] = ACTIONS(106), + [anon_sym_EQ_EQ] = ACTIONS(106), + [anon_sym_LT_EQ] = ACTIONS(106), + [anon_sym_LT] = ACTIONS(108), + [anon_sym_BANG_EQ] = ACTIONS(106), + [anon_sym_AMP_AMP] = ACTIONS(106), + [anon_sym_PIPE_PIPE] = ACTIONS(106), + [anon_sym_DOT_DOT] = ACTIONS(108), + [anon_sym_DOT_DOT_EQ] = ACTIONS(106), + [anon_sym_if] = ACTIONS(108), + [anon_sym_else] = ACTIONS(108), + [anon_sym_LPAREN] = ACTIONS(106), + [anon_sym_RPAREN] = ACTIONS(106), + [anon_sym_LBRACK] = ACTIONS(106), + [anon_sym_COMMA] = ACTIONS(106), + [anon_sym_RBRACK] = ACTIONS(106), + [anon_sym_EQ] = ACTIONS(108), + [anon_sym_DASH_GT] = ACTIONS(106), + }, + [STATE(14)] = { + [ts_builtin_sym_end] = ACTIONS(110), + [sym_identifier] = ACTIONS(112), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(110), + [sym_default] = ACTIONS(112), + [sym_void] = ACTIONS(110), + [aux_sym_base_ten_token1] = ACTIONS(112), + [aux_sym_octal_token1] = ACTIONS(110), + [aux_sym_hex_token1] = ACTIONS(110), + [aux_sym_binary_token1] = ACTIONS(110), + [sym_unit_quote] = ACTIONS(110), + [sym_true] = ACTIONS(112), + [sym_false] = ACTIONS(112), + [anon_sym_COLON] = ACTIONS(110), + [anon_sym_DASH] = ACTIONS(110), + [anon_sym_PLUS] = ACTIONS(110), + [anon_sym_BANG] = ACTIONS(112), + [anon_sym_STAR_STAR] = ACTIONS(110), + [anon_sym_STAR] = ACTIONS(112), + [anon_sym_SLASH] = ACTIONS(112), + [anon_sym_SLASH_SLASH] = ACTIONS(110), + [anon_sym_LT_LT] = ACTIONS(110), + [anon_sym_GT_GT] = ACTIONS(110), + [anon_sym_AMP] = ACTIONS(112), + [anon_sym_PIPE] = ACTIONS(112), + [anon_sym_CARET] = ACTIONS(110), + [anon_sym_GT] = ACTIONS(112), + [anon_sym_GT_EQ] = ACTIONS(110), + [anon_sym_EQ_EQ] = ACTIONS(110), + [anon_sym_LT_EQ] = ACTIONS(110), + [anon_sym_LT] = ACTIONS(112), + [anon_sym_BANG_EQ] = ACTIONS(110), + [anon_sym_AMP_AMP] = ACTIONS(110), + [anon_sym_PIPE_PIPE] = ACTIONS(110), + [anon_sym_DOT_DOT] = ACTIONS(112), + [anon_sym_DOT_DOT_EQ] = ACTIONS(110), + [anon_sym_if] = ACTIONS(112), + [anon_sym_else] = ACTIONS(112), + [anon_sym_LPAREN] = ACTIONS(110), + [anon_sym_RPAREN] = ACTIONS(110), + [anon_sym_LBRACK] = ACTIONS(110), + [anon_sym_COMMA] = ACTIONS(110), + [anon_sym_RBRACK] = ACTIONS(110), + [anon_sym_EQ] = ACTIONS(112), + }, + [STATE(15)] = { + [sym_dictionary_construction] = STATE(25), + [ts_builtin_sym_end] = ACTIONS(114), + [sym_identifier] = ACTIONS(116), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(114), + [sym_default] = ACTIONS(116), + [sym_void] = ACTIONS(114), + [aux_sym_base_ten_token1] = ACTIONS(116), + [aux_sym_octal_token1] = ACTIONS(114), + [aux_sym_hex_token1] = ACTIONS(114), + [aux_sym_binary_token1] = ACTIONS(114), + [sym_true] = ACTIONS(116), + [sym_false] = ACTIONS(116), + [anon_sym_COLON] = ACTIONS(114), + [anon_sym_DASH] = ACTIONS(114), + [anon_sym_PLUS] = ACTIONS(114), + [anon_sym_BANG] = ACTIONS(116), + [anon_sym_STAR_STAR] = ACTIONS(114), + [anon_sym_STAR] = ACTIONS(116), + [anon_sym_SLASH] = ACTIONS(116), + [anon_sym_SLASH_SLASH] = ACTIONS(114), + [anon_sym_LT_LT] = ACTIONS(114), + [anon_sym_GT_GT] = ACTIONS(114), + [anon_sym_AMP] = ACTIONS(116), + [anon_sym_PIPE] = ACTIONS(116), + [anon_sym_CARET] = ACTIONS(114), + [anon_sym_GT] = ACTIONS(116), + [anon_sym_GT_EQ] = ACTIONS(114), + [anon_sym_EQ_EQ] = ACTIONS(114), + [anon_sym_LT_EQ] = ACTIONS(114), + [anon_sym_LT] = ACTIONS(116), + [anon_sym_BANG_EQ] = ACTIONS(114), + [anon_sym_AMP_AMP] = ACTIONS(114), + [anon_sym_PIPE_PIPE] = ACTIONS(114), + [anon_sym_DOT_DOT] = ACTIONS(116), + [anon_sym_DOT_DOT_EQ] = ACTIONS(114), + [anon_sym_if] = ACTIONS(116), + [anon_sym_else] = ACTIONS(116), + [anon_sym_LPAREN] = ACTIONS(114), + [anon_sym_RPAREN] = ACTIONS(114), + [anon_sym_LBRACK] = ACTIONS(114), + [anon_sym_COMMA] = ACTIONS(114), + [anon_sym_RBRACK] = ACTIONS(114), + [anon_sym_EQ] = ACTIONS(116), + }, + [STATE(16)] = { + [ts_builtin_sym_end] = ACTIONS(118), + [sym_identifier] = ACTIONS(120), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(118), + [sym_default] = ACTIONS(120), + [sym_void] = ACTIONS(118), + [aux_sym_base_ten_token1] = ACTIONS(120), + [aux_sym_octal_token1] = ACTIONS(118), + [aux_sym_hex_token1] = ACTIONS(118), + [aux_sym_binary_token1] = ACTIONS(118), + [sym_unit_quote] = ACTIONS(118), + [sym_true] = ACTIONS(120), + [sym_false] = ACTIONS(120), + [anon_sym_COLON] = ACTIONS(118), + [anon_sym_DASH] = ACTIONS(118), + [anon_sym_PLUS] = ACTIONS(118), + [anon_sym_BANG] = ACTIONS(120), + [anon_sym_STAR_STAR] = ACTIONS(118), + [anon_sym_STAR] = ACTIONS(120), + [anon_sym_SLASH] = ACTIONS(120), + [anon_sym_SLASH_SLASH] = ACTIONS(118), + [anon_sym_LT_LT] = ACTIONS(118), + [anon_sym_GT_GT] = ACTIONS(118), + [anon_sym_AMP] = ACTIONS(120), + [anon_sym_PIPE] = ACTIONS(120), + [anon_sym_CARET] = ACTIONS(118), + [anon_sym_GT] = ACTIONS(120), + [anon_sym_GT_EQ] = ACTIONS(118), + [anon_sym_EQ_EQ] = ACTIONS(118), + [anon_sym_LT_EQ] = ACTIONS(118), + [anon_sym_LT] = ACTIONS(120), + [anon_sym_BANG_EQ] = ACTIONS(118), + [anon_sym_AMP_AMP] = ACTIONS(118), + [anon_sym_PIPE_PIPE] = ACTIONS(118), + [anon_sym_DOT_DOT] = ACTIONS(120), + [anon_sym_DOT_DOT_EQ] = ACTIONS(118), + [anon_sym_if] = ACTIONS(120), + [anon_sym_else] = ACTIONS(120), + [anon_sym_LPAREN] = ACTIONS(118), + [anon_sym_RPAREN] = ACTIONS(118), + [anon_sym_LBRACK] = ACTIONS(118), + [anon_sym_COMMA] = ACTIONS(118), + [anon_sym_RBRACK] = ACTIONS(118), + [anon_sym_EQ] = ACTIONS(120), + }, + [STATE(17)] = { + [sym_dictionary_construction] = STATE(25), + [ts_builtin_sym_end] = ACTIONS(122), + [sym_identifier] = ACTIONS(124), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(122), + [sym_default] = ACTIONS(124), + [sym_void] = ACTIONS(122), + [aux_sym_base_ten_token1] = ACTIONS(124), + [aux_sym_octal_token1] = ACTIONS(122), + [aux_sym_hex_token1] = ACTIONS(122), + [aux_sym_binary_token1] = ACTIONS(122), + [sym_true] = ACTIONS(124), + [sym_false] = ACTIONS(124), + [anon_sym_COLON] = ACTIONS(29), + [anon_sym_DASH] = ACTIONS(122), + [anon_sym_PLUS] = ACTIONS(122), + [anon_sym_BANG] = ACTIONS(124), + [anon_sym_STAR_STAR] = ACTIONS(122), + [anon_sym_STAR] = ACTIONS(124), + [anon_sym_SLASH] = ACTIONS(124), + [anon_sym_SLASH_SLASH] = ACTIONS(122), + [anon_sym_LT_LT] = ACTIONS(122), + [anon_sym_GT_GT] = ACTIONS(122), + [anon_sym_AMP] = ACTIONS(124), + [anon_sym_PIPE] = ACTIONS(124), + [anon_sym_CARET] = ACTIONS(122), + [anon_sym_GT] = ACTIONS(124), + [anon_sym_GT_EQ] = ACTIONS(122), + [anon_sym_EQ_EQ] = ACTIONS(122), + [anon_sym_LT_EQ] = ACTIONS(122), + [anon_sym_LT] = ACTIONS(124), + [anon_sym_BANG_EQ] = ACTIONS(122), + [anon_sym_AMP_AMP] = ACTIONS(122), + [anon_sym_PIPE_PIPE] = ACTIONS(122), + [anon_sym_DOT_DOT] = ACTIONS(124), + [anon_sym_DOT_DOT_EQ] = ACTIONS(122), + [anon_sym_if] = ACTIONS(124), + [anon_sym_else] = ACTIONS(124), + [anon_sym_LPAREN] = ACTIONS(100), + [anon_sym_RPAREN] = ACTIONS(122), + [anon_sym_LBRACK] = ACTIONS(122), + [anon_sym_COMMA] = ACTIONS(122), + [anon_sym_RBRACK] = ACTIONS(122), + [anon_sym_EQ] = ACTIONS(124), + }, + [STATE(18)] = { + [ts_builtin_sym_end] = ACTIONS(126), + [sym_identifier] = ACTIONS(128), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(126), + [sym_default] = ACTIONS(128), + [sym_void] = ACTIONS(126), + [aux_sym_base_ten_token1] = ACTIONS(128), + [aux_sym_octal_token1] = ACTIONS(126), + [aux_sym_hex_token1] = ACTIONS(126), + [aux_sym_binary_token1] = ACTIONS(126), + [sym_true] = ACTIONS(128), + [sym_false] = ACTIONS(128), + [anon_sym_COLON] = ACTIONS(126), + [anon_sym_DASH] = ACTIONS(128), + [anon_sym_PLUS] = ACTIONS(126), + [anon_sym_BANG] = ACTIONS(128), + [anon_sym_STAR_STAR] = ACTIONS(126), + [anon_sym_STAR] = ACTIONS(128), + [anon_sym_SLASH] = ACTIONS(128), + [anon_sym_SLASH_SLASH] = ACTIONS(126), + [anon_sym_LT_LT] = ACTIONS(126), + [anon_sym_GT_GT] = ACTIONS(126), + [anon_sym_AMP] = ACTIONS(128), + [anon_sym_PIPE] = ACTIONS(128), + [anon_sym_CARET] = ACTIONS(126), + [anon_sym_GT] = ACTIONS(128), + [anon_sym_GT_EQ] = ACTIONS(126), + [anon_sym_EQ_EQ] = ACTIONS(126), + [anon_sym_LT_EQ] = ACTIONS(126), + [anon_sym_LT] = ACTIONS(128), + [anon_sym_BANG_EQ] = ACTIONS(126), + [anon_sym_AMP_AMP] = ACTIONS(126), + [anon_sym_PIPE_PIPE] = ACTIONS(126), + [anon_sym_DOT_DOT] = ACTIONS(128), + [anon_sym_DOT_DOT_EQ] = ACTIONS(126), + [anon_sym_if] = ACTIONS(128), + [anon_sym_else] = ACTIONS(128), + [anon_sym_LPAREN] = ACTIONS(126), + [anon_sym_RPAREN] = ACTIONS(126), + [anon_sym_LBRACK] = ACTIONS(126), + [anon_sym_COMMA] = ACTIONS(126), + [anon_sym_RBRACK] = ACTIONS(126), + [anon_sym_EQ] = ACTIONS(128), + [anon_sym_DASH_GT] = ACTIONS(126), + }, + [STATE(19)] = { + [ts_builtin_sym_end] = ACTIONS(130), + [sym_identifier] = ACTIONS(132), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(130), + [sym_default] = ACTIONS(132), + [sym_void] = ACTIONS(130), + [aux_sym_base_ten_token1] = ACTIONS(132), + [aux_sym_octal_token1] = ACTIONS(130), + [aux_sym_hex_token1] = ACTIONS(130), + [aux_sym_binary_token1] = ACTIONS(130), + [sym_true] = ACTIONS(132), + [sym_false] = ACTIONS(132), + [anon_sym_COLON] = ACTIONS(130), + [anon_sym_DASH] = ACTIONS(130), + [anon_sym_PLUS] = ACTIONS(130), + [anon_sym_BANG] = ACTIONS(132), + [anon_sym_STAR_STAR] = ACTIONS(130), + [anon_sym_STAR] = ACTIONS(132), + [anon_sym_SLASH] = ACTIONS(132), + [anon_sym_SLASH_SLASH] = ACTIONS(130), + [anon_sym_LT_LT] = ACTIONS(130), + [anon_sym_GT_GT] = ACTIONS(130), + [anon_sym_AMP] = ACTIONS(132), + [anon_sym_PIPE] = ACTIONS(132), + [anon_sym_CARET] = ACTIONS(130), + [anon_sym_GT] = ACTIONS(132), + [anon_sym_GT_EQ] = ACTIONS(130), + [anon_sym_EQ_EQ] = ACTIONS(130), + [anon_sym_LT_EQ] = ACTIONS(130), + [anon_sym_LT] = ACTIONS(132), + [anon_sym_BANG_EQ] = ACTIONS(130), + [anon_sym_AMP_AMP] = ACTIONS(130), + [anon_sym_PIPE_PIPE] = ACTIONS(130), + [anon_sym_DOT_DOT] = ACTIONS(132), + [anon_sym_DOT_DOT_EQ] = ACTIONS(130), + [anon_sym_if] = ACTIONS(132), + [anon_sym_else] = ACTIONS(132), + [anon_sym_LPAREN] = ACTIONS(130), + [anon_sym_RPAREN] = ACTIONS(130), + [anon_sym_LBRACK] = ACTIONS(130), + [anon_sym_COMMA] = ACTIONS(130), + [anon_sym_RBRACK] = ACTIONS(130), + [anon_sym_EQ] = ACTIONS(132), + }, + [STATE(20)] = { + [ts_builtin_sym_end] = ACTIONS(134), + [sym_identifier] = ACTIONS(136), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(134), + [sym_default] = ACTIONS(136), + [sym_void] = ACTIONS(134), + [aux_sym_base_ten_token1] = ACTIONS(136), + [aux_sym_octal_token1] = ACTIONS(134), + [aux_sym_hex_token1] = ACTIONS(134), + [aux_sym_binary_token1] = ACTIONS(134), + [sym_true] = ACTIONS(136), + [sym_false] = ACTIONS(136), + [anon_sym_COLON] = ACTIONS(134), + [anon_sym_DASH] = ACTIONS(134), + [anon_sym_PLUS] = ACTIONS(134), + [anon_sym_BANG] = ACTIONS(136), + [anon_sym_STAR_STAR] = ACTIONS(134), + [anon_sym_STAR] = ACTIONS(136), + [anon_sym_SLASH] = ACTIONS(136), + [anon_sym_SLASH_SLASH] = ACTIONS(134), + [anon_sym_LT_LT] = ACTIONS(134), + [anon_sym_GT_GT] = ACTIONS(134), + [anon_sym_AMP] = ACTIONS(136), + [anon_sym_PIPE] = ACTIONS(136), + [anon_sym_CARET] = ACTIONS(134), + [anon_sym_GT] = ACTIONS(136), + [anon_sym_GT_EQ] = ACTIONS(134), + [anon_sym_EQ_EQ] = ACTIONS(134), + [anon_sym_LT_EQ] = ACTIONS(134), + [anon_sym_LT] = ACTIONS(136), + [anon_sym_BANG_EQ] = ACTIONS(134), + [anon_sym_AMP_AMP] = ACTIONS(134), + [anon_sym_PIPE_PIPE] = ACTIONS(134), + [anon_sym_DOT_DOT] = ACTIONS(136), + [anon_sym_DOT_DOT_EQ] = ACTIONS(134), + [anon_sym_if] = ACTIONS(136), + [anon_sym_else] = ACTIONS(136), + [anon_sym_LPAREN] = ACTIONS(134), + [anon_sym_RPAREN] = ACTIONS(134), + [anon_sym_LBRACK] = ACTIONS(134), + [anon_sym_COMMA] = ACTIONS(134), + [anon_sym_RBRACK] = ACTIONS(134), + [anon_sym_EQ] = ACTIONS(136), + }, + [STATE(21)] = { + [ts_builtin_sym_end] = ACTIONS(138), + [sym_identifier] = ACTIONS(140), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(138), + [sym_default] = ACTIONS(140), + [sym_void] = ACTIONS(138), + [aux_sym_base_ten_token1] = ACTIONS(140), + [aux_sym_octal_token1] = ACTIONS(138), + [aux_sym_hex_token1] = ACTIONS(138), + [aux_sym_binary_token1] = ACTIONS(138), + [sym_true] = ACTIONS(140), + [sym_false] = ACTIONS(140), + [anon_sym_COLON] = ACTIONS(138), + [anon_sym_DASH] = ACTIONS(138), + [anon_sym_PLUS] = ACTIONS(138), + [anon_sym_BANG] = ACTIONS(140), + [anon_sym_STAR_STAR] = ACTIONS(138), + [anon_sym_STAR] = ACTIONS(140), + [anon_sym_SLASH] = ACTIONS(140), + [anon_sym_SLASH_SLASH] = ACTIONS(138), + [anon_sym_LT_LT] = ACTIONS(138), + [anon_sym_GT_GT] = ACTIONS(138), + [anon_sym_AMP] = ACTIONS(140), + [anon_sym_PIPE] = ACTIONS(140), + [anon_sym_CARET] = ACTIONS(138), + [anon_sym_GT] = ACTIONS(140), + [anon_sym_GT_EQ] = ACTIONS(138), + [anon_sym_EQ_EQ] = ACTIONS(138), + [anon_sym_LT_EQ] = ACTIONS(138), + [anon_sym_LT] = ACTIONS(140), + [anon_sym_BANG_EQ] = ACTIONS(138), + [anon_sym_AMP_AMP] = ACTIONS(138), + [anon_sym_PIPE_PIPE] = ACTIONS(138), + [anon_sym_DOT_DOT] = ACTIONS(140), + [anon_sym_DOT_DOT_EQ] = ACTIONS(138), + [anon_sym_if] = ACTIONS(140), + [anon_sym_else] = ACTIONS(140), + [anon_sym_LPAREN] = ACTIONS(138), + [anon_sym_RPAREN] = ACTIONS(138), + [anon_sym_LBRACK] = ACTIONS(138), + [anon_sym_COMMA] = ACTIONS(138), + [anon_sym_RBRACK] = ACTIONS(138), + [anon_sym_EQ] = ACTIONS(140), + }, + [STATE(22)] = { + [ts_builtin_sym_end] = ACTIONS(142), + [sym_identifier] = ACTIONS(144), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(142), + [sym_default] = ACTIONS(144), + [sym_void] = ACTIONS(142), + [aux_sym_base_ten_token1] = ACTIONS(144), + [aux_sym_octal_token1] = ACTIONS(142), + [aux_sym_hex_token1] = ACTIONS(142), + [aux_sym_binary_token1] = ACTIONS(142), + [sym_true] = ACTIONS(144), + [sym_false] = ACTIONS(144), + [anon_sym_COLON] = ACTIONS(142), + [anon_sym_DASH] = ACTIONS(142), + [anon_sym_PLUS] = ACTIONS(142), + [anon_sym_BANG] = ACTIONS(144), + [anon_sym_STAR_STAR] = ACTIONS(142), + [anon_sym_STAR] = ACTIONS(144), + [anon_sym_SLASH] = ACTIONS(144), + [anon_sym_SLASH_SLASH] = ACTIONS(142), + [anon_sym_LT_LT] = ACTIONS(142), + [anon_sym_GT_GT] = ACTIONS(142), + [anon_sym_AMP] = ACTIONS(144), + [anon_sym_PIPE] = ACTIONS(144), + [anon_sym_CARET] = ACTIONS(142), + [anon_sym_GT] = ACTIONS(144), + [anon_sym_GT_EQ] = ACTIONS(142), + [anon_sym_EQ_EQ] = ACTIONS(142), + [anon_sym_LT_EQ] = ACTIONS(142), + [anon_sym_LT] = ACTIONS(144), + [anon_sym_BANG_EQ] = ACTIONS(142), + [anon_sym_AMP_AMP] = ACTIONS(142), + [anon_sym_PIPE_PIPE] = ACTIONS(142), + [anon_sym_DOT_DOT] = ACTIONS(144), + [anon_sym_DOT_DOT_EQ] = ACTIONS(142), + [anon_sym_if] = ACTIONS(144), + [anon_sym_else] = ACTIONS(144), + [anon_sym_LPAREN] = ACTIONS(142), + [anon_sym_RPAREN] = ACTIONS(142), + [anon_sym_LBRACK] = ACTIONS(142), + [anon_sym_COMMA] = ACTIONS(142), + [anon_sym_RBRACK] = ACTIONS(142), + [anon_sym_EQ] = ACTIONS(144), + }, + [STATE(23)] = { + [ts_builtin_sym_end] = ACTIONS(146), + [sym_identifier] = ACTIONS(148), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(146), + [sym_default] = ACTIONS(148), + [sym_void] = ACTIONS(146), + [aux_sym_base_ten_token1] = ACTIONS(148), + [aux_sym_octal_token1] = ACTIONS(146), + [aux_sym_hex_token1] = ACTIONS(146), + [aux_sym_binary_token1] = ACTIONS(146), + [sym_true] = ACTIONS(148), + [sym_false] = ACTIONS(148), + [anon_sym_COLON] = ACTIONS(146), + [anon_sym_DASH] = ACTIONS(146), + [anon_sym_PLUS] = ACTIONS(146), + [anon_sym_BANG] = ACTIONS(148), + [anon_sym_STAR_STAR] = ACTIONS(146), + [anon_sym_STAR] = ACTIONS(148), + [anon_sym_SLASH] = ACTIONS(148), + [anon_sym_SLASH_SLASH] = ACTIONS(146), + [anon_sym_LT_LT] = ACTIONS(146), + [anon_sym_GT_GT] = ACTIONS(146), + [anon_sym_AMP] = ACTIONS(148), + [anon_sym_PIPE] = ACTIONS(148), + [anon_sym_CARET] = ACTIONS(146), + [anon_sym_GT] = ACTIONS(148), + [anon_sym_GT_EQ] = ACTIONS(146), + [anon_sym_EQ_EQ] = ACTIONS(146), + [anon_sym_LT_EQ] = ACTIONS(146), + [anon_sym_LT] = ACTIONS(148), + [anon_sym_BANG_EQ] = ACTIONS(146), + [anon_sym_AMP_AMP] = ACTIONS(146), + [anon_sym_PIPE_PIPE] = ACTIONS(146), + [anon_sym_DOT_DOT] = ACTIONS(148), + [anon_sym_DOT_DOT_EQ] = ACTIONS(146), + [anon_sym_if] = ACTIONS(148), + [anon_sym_else] = ACTIONS(148), + [anon_sym_LPAREN] = ACTIONS(146), + [anon_sym_RPAREN] = ACTIONS(146), + [anon_sym_LBRACK] = ACTIONS(146), + [anon_sym_COMMA] = ACTIONS(146), + [anon_sym_RBRACK] = ACTIONS(146), + [anon_sym_EQ] = ACTIONS(148), + }, + [STATE(24)] = { + [ts_builtin_sym_end] = ACTIONS(150), + [sym_identifier] = ACTIONS(152), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(150), + [sym_default] = ACTIONS(152), + [sym_void] = ACTIONS(150), + [aux_sym_base_ten_token1] = ACTIONS(152), + [aux_sym_octal_token1] = ACTIONS(150), + [aux_sym_hex_token1] = ACTIONS(150), + [aux_sym_binary_token1] = ACTIONS(150), + [sym_true] = ACTIONS(152), + [sym_false] = ACTIONS(152), + [anon_sym_COLON] = ACTIONS(150), + [anon_sym_DASH] = ACTIONS(150), + [anon_sym_PLUS] = ACTIONS(150), + [anon_sym_BANG] = ACTIONS(152), + [anon_sym_STAR_STAR] = ACTIONS(150), + [anon_sym_STAR] = ACTIONS(152), + [anon_sym_SLASH] = ACTIONS(152), + [anon_sym_SLASH_SLASH] = ACTIONS(150), + [anon_sym_LT_LT] = ACTIONS(150), + [anon_sym_GT_GT] = ACTIONS(150), + [anon_sym_AMP] = ACTIONS(152), + [anon_sym_PIPE] = ACTIONS(152), + [anon_sym_CARET] = ACTIONS(150), + [anon_sym_GT] = ACTIONS(152), + [anon_sym_GT_EQ] = ACTIONS(150), + [anon_sym_EQ_EQ] = ACTIONS(150), + [anon_sym_LT_EQ] = ACTIONS(150), + [anon_sym_LT] = ACTIONS(152), + [anon_sym_BANG_EQ] = ACTIONS(150), + [anon_sym_AMP_AMP] = ACTIONS(150), + [anon_sym_PIPE_PIPE] = ACTIONS(150), + [anon_sym_DOT_DOT] = ACTIONS(152), + [anon_sym_DOT_DOT_EQ] = ACTIONS(150), + [anon_sym_if] = ACTIONS(152), + [anon_sym_else] = ACTIONS(152), + [anon_sym_LPAREN] = ACTIONS(150), + [anon_sym_RPAREN] = ACTIONS(150), + [anon_sym_LBRACK] = ACTIONS(150), + [anon_sym_COMMA] = ACTIONS(150), + [anon_sym_RBRACK] = ACTIONS(150), + [anon_sym_EQ] = ACTIONS(152), + }, + [STATE(25)] = { + [ts_builtin_sym_end] = ACTIONS(154), + [sym_identifier] = ACTIONS(156), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(154), + [sym_default] = ACTIONS(156), + [sym_void] = ACTIONS(154), + [aux_sym_base_ten_token1] = ACTIONS(156), + [aux_sym_octal_token1] = ACTIONS(154), + [aux_sym_hex_token1] = ACTIONS(154), + [aux_sym_binary_token1] = ACTIONS(154), + [sym_true] = ACTIONS(156), + [sym_false] = ACTIONS(156), + [anon_sym_COLON] = ACTIONS(154), + [anon_sym_DASH] = ACTIONS(154), + [anon_sym_PLUS] = ACTIONS(154), + [anon_sym_BANG] = ACTIONS(156), + [anon_sym_STAR_STAR] = ACTIONS(154), + [anon_sym_STAR] = ACTIONS(156), + [anon_sym_SLASH] = ACTIONS(156), + [anon_sym_SLASH_SLASH] = ACTIONS(154), + [anon_sym_LT_LT] = ACTIONS(154), + [anon_sym_GT_GT] = ACTIONS(154), + [anon_sym_AMP] = ACTIONS(156), + [anon_sym_PIPE] = ACTIONS(156), + [anon_sym_CARET] = ACTIONS(154), + [anon_sym_GT] = ACTIONS(156), + [anon_sym_GT_EQ] = ACTIONS(154), + [anon_sym_EQ_EQ] = ACTIONS(154), + [anon_sym_LT_EQ] = ACTIONS(154), + [anon_sym_LT] = ACTIONS(156), + [anon_sym_BANG_EQ] = ACTIONS(154), + [anon_sym_AMP_AMP] = ACTIONS(154), + [anon_sym_PIPE_PIPE] = ACTIONS(154), + [anon_sym_DOT_DOT] = ACTIONS(156), + [anon_sym_DOT_DOT_EQ] = ACTIONS(154), + [anon_sym_if] = ACTIONS(156), + [anon_sym_else] = ACTIONS(156), + [anon_sym_LPAREN] = ACTIONS(154), + [anon_sym_RPAREN] = ACTIONS(154), + [anon_sym_LBRACK] = ACTIONS(154), + [anon_sym_COMMA] = ACTIONS(154), + [anon_sym_RBRACK] = ACTIONS(154), + [anon_sym_EQ] = ACTIONS(156), + }, + [STATE(26)] = { + [ts_builtin_sym_end] = ACTIONS(158), + [sym_identifier] = ACTIONS(160), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(158), + [sym_default] = ACTIONS(160), + [sym_void] = ACTIONS(158), + [aux_sym_base_ten_token1] = ACTIONS(160), + [aux_sym_octal_token1] = ACTIONS(158), + [aux_sym_hex_token1] = ACTIONS(158), + [aux_sym_binary_token1] = ACTIONS(158), + [sym_true] = ACTIONS(160), + [sym_false] = ACTIONS(160), + [anon_sym_COLON] = ACTIONS(158), + [anon_sym_DASH] = ACTIONS(158), + [anon_sym_PLUS] = ACTIONS(158), + [anon_sym_BANG] = ACTIONS(160), + [anon_sym_STAR_STAR] = ACTIONS(158), + [anon_sym_STAR] = ACTIONS(160), + [anon_sym_SLASH] = ACTIONS(160), + [anon_sym_SLASH_SLASH] = ACTIONS(158), + [anon_sym_LT_LT] = ACTIONS(158), + [anon_sym_GT_GT] = ACTIONS(158), + [anon_sym_AMP] = ACTIONS(160), + [anon_sym_PIPE] = ACTIONS(160), + [anon_sym_CARET] = ACTIONS(158), + [anon_sym_GT] = ACTIONS(160), + [anon_sym_GT_EQ] = ACTIONS(158), + [anon_sym_EQ_EQ] = ACTIONS(158), + [anon_sym_LT_EQ] = ACTIONS(158), + [anon_sym_LT] = ACTIONS(160), + [anon_sym_BANG_EQ] = ACTIONS(158), + [anon_sym_AMP_AMP] = ACTIONS(158), + [anon_sym_PIPE_PIPE] = ACTIONS(158), + [anon_sym_DOT_DOT] = ACTIONS(160), + [anon_sym_DOT_DOT_EQ] = ACTIONS(158), + [anon_sym_if] = ACTIONS(160), + [anon_sym_else] = ACTIONS(160), + [anon_sym_LPAREN] = ACTIONS(158), + [anon_sym_RPAREN] = ACTIONS(158), + [anon_sym_LBRACK] = ACTIONS(158), + [anon_sym_COMMA] = ACTIONS(158), + [anon_sym_RBRACK] = ACTIONS(158), + [anon_sym_EQ] = ACTIONS(160), + }, + [STATE(27)] = { + [ts_builtin_sym_end] = ACTIONS(162), + [sym_identifier] = ACTIONS(164), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(162), + [sym_default] = ACTIONS(164), + [sym_void] = ACTIONS(162), + [aux_sym_base_ten_token1] = ACTIONS(164), + [aux_sym_octal_token1] = ACTIONS(162), + [aux_sym_hex_token1] = ACTIONS(162), + [aux_sym_binary_token1] = ACTIONS(162), + [sym_true] = ACTIONS(164), + [sym_false] = ACTIONS(164), + [anon_sym_COLON] = ACTIONS(162), + [anon_sym_DASH] = ACTIONS(162), + [anon_sym_PLUS] = ACTIONS(162), + [anon_sym_BANG] = ACTIONS(164), + [anon_sym_STAR_STAR] = ACTIONS(162), + [anon_sym_STAR] = ACTIONS(164), + [anon_sym_SLASH] = ACTIONS(164), + [anon_sym_SLASH_SLASH] = ACTIONS(162), + [anon_sym_LT_LT] = ACTIONS(162), + [anon_sym_GT_GT] = ACTIONS(162), + [anon_sym_AMP] = ACTIONS(164), + [anon_sym_PIPE] = ACTIONS(164), + [anon_sym_CARET] = ACTIONS(162), + [anon_sym_GT] = ACTIONS(164), + [anon_sym_GT_EQ] = ACTIONS(162), + [anon_sym_EQ_EQ] = ACTIONS(162), + [anon_sym_LT_EQ] = ACTIONS(162), + [anon_sym_LT] = ACTIONS(164), + [anon_sym_BANG_EQ] = ACTIONS(162), + [anon_sym_AMP_AMP] = ACTIONS(162), + [anon_sym_PIPE_PIPE] = ACTIONS(162), + [anon_sym_DOT_DOT] = ACTIONS(164), + [anon_sym_DOT_DOT_EQ] = ACTIONS(162), + [anon_sym_if] = ACTIONS(164), + [anon_sym_else] = ACTIONS(164), + [anon_sym_LPAREN] = ACTIONS(162), + [anon_sym_RPAREN] = ACTIONS(162), + [anon_sym_LBRACK] = ACTIONS(162), + [anon_sym_COMMA] = ACTIONS(162), + [anon_sym_RBRACK] = ACTIONS(162), + [anon_sym_EQ] = ACTIONS(164), + }, + [STATE(28)] = { + [ts_builtin_sym_end] = ACTIONS(166), + [sym_identifier] = ACTIONS(168), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(166), + [sym_default] = ACTIONS(168), + [sym_void] = ACTIONS(166), + [aux_sym_base_ten_token1] = ACTIONS(168), + [aux_sym_octal_token1] = ACTIONS(166), + [aux_sym_hex_token1] = ACTIONS(166), + [aux_sym_binary_token1] = ACTIONS(166), + [sym_true] = ACTIONS(168), + [sym_false] = ACTIONS(168), + [anon_sym_COLON] = ACTIONS(166), + [anon_sym_DASH] = ACTIONS(166), + [anon_sym_PLUS] = ACTIONS(166), + [anon_sym_BANG] = ACTIONS(168), + [anon_sym_STAR_STAR] = ACTIONS(166), + [anon_sym_STAR] = ACTIONS(168), + [anon_sym_SLASH] = ACTIONS(168), + [anon_sym_SLASH_SLASH] = ACTIONS(166), + [anon_sym_LT_LT] = ACTIONS(166), + [anon_sym_GT_GT] = ACTIONS(166), + [anon_sym_AMP] = ACTIONS(168), + [anon_sym_PIPE] = ACTIONS(168), + [anon_sym_CARET] = ACTIONS(166), + [anon_sym_GT] = ACTIONS(168), + [anon_sym_GT_EQ] = ACTIONS(166), + [anon_sym_EQ_EQ] = ACTIONS(166), + [anon_sym_LT_EQ] = ACTIONS(166), + [anon_sym_LT] = ACTIONS(168), + [anon_sym_BANG_EQ] = ACTIONS(166), + [anon_sym_AMP_AMP] = ACTIONS(166), + [anon_sym_PIPE_PIPE] = ACTIONS(166), + [anon_sym_DOT_DOT] = ACTIONS(168), + [anon_sym_DOT_DOT_EQ] = ACTIONS(166), + [anon_sym_if] = ACTIONS(168), + [anon_sym_else] = ACTIONS(168), + [anon_sym_LPAREN] = ACTIONS(166), + [anon_sym_RPAREN] = ACTIONS(166), + [anon_sym_LBRACK] = ACTIONS(166), + [anon_sym_COMMA] = ACTIONS(166), + [anon_sym_RBRACK] = ACTIONS(166), + [anon_sym_EQ] = ACTIONS(168), + }, + [STATE(29)] = { + [ts_builtin_sym_end] = ACTIONS(170), + [sym_identifier] = ACTIONS(172), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(170), + [sym_default] = ACTIONS(172), + [sym_void] = ACTIONS(170), + [aux_sym_base_ten_token1] = ACTIONS(172), + [aux_sym_octal_token1] = ACTIONS(170), + [aux_sym_hex_token1] = ACTIONS(170), + [aux_sym_binary_token1] = ACTIONS(170), + [sym_true] = ACTIONS(172), + [sym_false] = ACTIONS(172), + [anon_sym_COLON] = ACTIONS(170), + [anon_sym_DASH] = ACTIONS(170), + [anon_sym_PLUS] = ACTIONS(170), + [anon_sym_BANG] = ACTIONS(172), + [anon_sym_STAR_STAR] = ACTIONS(170), + [anon_sym_STAR] = ACTIONS(172), + [anon_sym_SLASH] = ACTIONS(172), + [anon_sym_SLASH_SLASH] = ACTIONS(170), + [anon_sym_LT_LT] = ACTIONS(170), + [anon_sym_GT_GT] = ACTIONS(170), + [anon_sym_AMP] = ACTIONS(172), + [anon_sym_PIPE] = ACTIONS(172), + [anon_sym_CARET] = ACTIONS(170), + [anon_sym_GT] = ACTIONS(172), + [anon_sym_GT_EQ] = ACTIONS(170), + [anon_sym_EQ_EQ] = ACTIONS(170), + [anon_sym_LT_EQ] = ACTIONS(170), + [anon_sym_LT] = ACTIONS(172), + [anon_sym_BANG_EQ] = ACTIONS(170), + [anon_sym_AMP_AMP] = ACTIONS(170), + [anon_sym_PIPE_PIPE] = ACTIONS(170), + [anon_sym_DOT_DOT] = ACTIONS(172), + [anon_sym_DOT_DOT_EQ] = ACTIONS(170), + [anon_sym_if] = ACTIONS(172), + [anon_sym_else] = ACTIONS(172), + [anon_sym_LPAREN] = ACTIONS(170), + [anon_sym_RPAREN] = ACTIONS(170), + [anon_sym_LBRACK] = ACTIONS(170), + [anon_sym_COMMA] = ACTIONS(170), + [anon_sym_RBRACK] = ACTIONS(170), + [anon_sym_EQ] = ACTIONS(172), + }, + [STATE(30)] = { + [ts_builtin_sym_end] = ACTIONS(174), + [sym_identifier] = ACTIONS(176), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(174), + [sym_default] = ACTIONS(176), + [sym_void] = ACTIONS(174), + [aux_sym_base_ten_token1] = ACTIONS(176), + [aux_sym_octal_token1] = ACTIONS(174), + [aux_sym_hex_token1] = ACTIONS(174), + [aux_sym_binary_token1] = ACTIONS(174), + [sym_true] = ACTIONS(176), + [sym_false] = ACTIONS(176), + [anon_sym_COLON] = ACTIONS(174), + [anon_sym_DASH] = ACTIONS(174), + [anon_sym_PLUS] = ACTIONS(174), + [anon_sym_BANG] = ACTIONS(176), + [anon_sym_STAR_STAR] = ACTIONS(174), + [anon_sym_STAR] = ACTIONS(176), + [anon_sym_SLASH] = ACTIONS(176), + [anon_sym_SLASH_SLASH] = ACTIONS(174), + [anon_sym_LT_LT] = ACTIONS(174), + [anon_sym_GT_GT] = ACTIONS(174), + [anon_sym_AMP] = ACTIONS(176), + [anon_sym_PIPE] = ACTIONS(176), + [anon_sym_CARET] = ACTIONS(174), + [anon_sym_GT] = ACTIONS(176), + [anon_sym_GT_EQ] = ACTIONS(174), + [anon_sym_EQ_EQ] = ACTIONS(174), + [anon_sym_LT_EQ] = ACTIONS(174), + [anon_sym_LT] = ACTIONS(176), + [anon_sym_BANG_EQ] = ACTIONS(174), + [anon_sym_AMP_AMP] = ACTIONS(174), + [anon_sym_PIPE_PIPE] = ACTIONS(174), + [anon_sym_DOT_DOT] = ACTIONS(176), + [anon_sym_DOT_DOT_EQ] = ACTIONS(174), + [anon_sym_if] = ACTIONS(176), + [anon_sym_else] = ACTIONS(176), + [anon_sym_LPAREN] = ACTIONS(174), + [anon_sym_RPAREN] = ACTIONS(174), + [anon_sym_LBRACK] = ACTIONS(174), + [anon_sym_COMMA] = ACTIONS(174), + [anon_sym_RBRACK] = ACTIONS(174), + [anon_sym_EQ] = ACTIONS(176), + }, + [STATE(31)] = { + [ts_builtin_sym_end] = ACTIONS(178), + [sym_identifier] = ACTIONS(180), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(178), + [sym_default] = ACTIONS(180), + [sym_void] = ACTIONS(178), + [aux_sym_base_ten_token1] = ACTIONS(180), + [aux_sym_octal_token1] = ACTIONS(178), + [aux_sym_hex_token1] = ACTIONS(178), + [aux_sym_binary_token1] = ACTIONS(178), + [sym_true] = ACTIONS(180), + [sym_false] = ACTIONS(180), + [anon_sym_COLON] = ACTIONS(178), + [anon_sym_DASH] = ACTIONS(178), + [anon_sym_PLUS] = ACTIONS(178), + [anon_sym_BANG] = ACTIONS(180), + [anon_sym_STAR_STAR] = ACTIONS(178), + [anon_sym_STAR] = ACTIONS(180), + [anon_sym_SLASH] = ACTIONS(180), + [anon_sym_SLASH_SLASH] = ACTIONS(178), + [anon_sym_LT_LT] = ACTIONS(178), + [anon_sym_GT_GT] = ACTIONS(178), + [anon_sym_AMP] = ACTIONS(180), + [anon_sym_PIPE] = ACTIONS(180), + [anon_sym_CARET] = ACTIONS(178), + [anon_sym_GT] = ACTIONS(180), + [anon_sym_GT_EQ] = ACTIONS(178), + [anon_sym_EQ_EQ] = ACTIONS(178), + [anon_sym_LT_EQ] = ACTIONS(178), + [anon_sym_LT] = ACTIONS(180), + [anon_sym_BANG_EQ] = ACTIONS(178), + [anon_sym_AMP_AMP] = ACTIONS(178), + [anon_sym_PIPE_PIPE] = ACTIONS(178), + [anon_sym_DOT_DOT] = ACTIONS(180), + [anon_sym_DOT_DOT_EQ] = ACTIONS(178), + [anon_sym_if] = ACTIONS(180), + [anon_sym_else] = ACTIONS(180), + [anon_sym_LPAREN] = ACTIONS(178), + [anon_sym_RPAREN] = ACTIONS(178), + [anon_sym_LBRACK] = ACTIONS(178), + [anon_sym_COMMA] = ACTIONS(178), + [anon_sym_RBRACK] = ACTIONS(178), + [anon_sym_EQ] = ACTIONS(180), + }, + [STATE(32)] = { + [ts_builtin_sym_end] = ACTIONS(182), + [sym_identifier] = ACTIONS(184), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(182), + [sym_default] = ACTIONS(184), + [sym_void] = ACTIONS(182), + [aux_sym_base_ten_token1] = ACTIONS(184), + [aux_sym_octal_token1] = ACTIONS(182), + [aux_sym_hex_token1] = ACTIONS(182), + [aux_sym_binary_token1] = ACTIONS(182), + [sym_true] = ACTIONS(184), + [sym_false] = ACTIONS(184), + [anon_sym_COLON] = ACTIONS(182), + [anon_sym_DASH] = ACTIONS(182), + [anon_sym_PLUS] = ACTIONS(182), + [anon_sym_BANG] = ACTIONS(184), + [anon_sym_STAR_STAR] = ACTIONS(182), + [anon_sym_STAR] = ACTIONS(184), + [anon_sym_SLASH] = ACTIONS(184), + [anon_sym_SLASH_SLASH] = ACTIONS(182), + [anon_sym_LT_LT] = ACTIONS(182), + [anon_sym_GT_GT] = ACTIONS(182), + [anon_sym_AMP] = ACTIONS(184), + [anon_sym_PIPE] = ACTIONS(184), + [anon_sym_CARET] = ACTIONS(182), + [anon_sym_GT] = ACTIONS(184), + [anon_sym_GT_EQ] = ACTIONS(182), + [anon_sym_EQ_EQ] = ACTIONS(182), + [anon_sym_LT_EQ] = ACTIONS(182), + [anon_sym_LT] = ACTIONS(184), + [anon_sym_BANG_EQ] = ACTIONS(182), + [anon_sym_AMP_AMP] = ACTIONS(182), + [anon_sym_PIPE_PIPE] = ACTIONS(182), + [anon_sym_DOT_DOT] = ACTIONS(184), + [anon_sym_DOT_DOT_EQ] = ACTIONS(182), + [anon_sym_if] = ACTIONS(184), + [anon_sym_else] = ACTIONS(184), + [anon_sym_LPAREN] = ACTIONS(182), + [anon_sym_RPAREN] = ACTIONS(182), + [anon_sym_LBRACK] = ACTIONS(182), + [anon_sym_COMMA] = ACTIONS(182), + [anon_sym_RBRACK] = ACTIONS(182), + [anon_sym_EQ] = ACTIONS(184), + }, + [STATE(33)] = { + [ts_builtin_sym_end] = ACTIONS(186), + [sym_identifier] = ACTIONS(188), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(186), + [sym_default] = ACTIONS(188), + [sym_void] = ACTIONS(186), + [aux_sym_base_ten_token1] = ACTIONS(188), + [aux_sym_octal_token1] = ACTIONS(186), + [aux_sym_hex_token1] = ACTIONS(186), + [aux_sym_binary_token1] = ACTIONS(186), + [sym_true] = ACTIONS(188), + [sym_false] = ACTIONS(188), + [anon_sym_COLON] = ACTIONS(186), + [anon_sym_DASH] = ACTIONS(186), + [anon_sym_PLUS] = ACTIONS(186), + [anon_sym_BANG] = ACTIONS(188), + [anon_sym_STAR_STAR] = ACTIONS(186), + [anon_sym_STAR] = ACTIONS(188), + [anon_sym_SLASH] = ACTIONS(188), + [anon_sym_SLASH_SLASH] = ACTIONS(186), + [anon_sym_LT_LT] = ACTIONS(186), + [anon_sym_GT_GT] = ACTIONS(186), + [anon_sym_AMP] = ACTIONS(188), + [anon_sym_PIPE] = ACTIONS(188), + [anon_sym_CARET] = ACTIONS(186), + [anon_sym_GT] = ACTIONS(188), + [anon_sym_GT_EQ] = ACTIONS(186), + [anon_sym_EQ_EQ] = ACTIONS(186), + [anon_sym_LT_EQ] = ACTIONS(186), + [anon_sym_LT] = ACTIONS(188), + [anon_sym_BANG_EQ] = ACTIONS(186), + [anon_sym_AMP_AMP] = ACTIONS(186), + [anon_sym_PIPE_PIPE] = ACTIONS(186), + [anon_sym_DOT_DOT] = ACTIONS(188), + [anon_sym_DOT_DOT_EQ] = ACTIONS(186), + [anon_sym_if] = ACTIONS(188), + [anon_sym_else] = ACTIONS(188), + [anon_sym_LPAREN] = ACTIONS(186), + [anon_sym_RPAREN] = ACTIONS(186), + [anon_sym_LBRACK] = ACTIONS(186), + [anon_sym_COMMA] = ACTIONS(186), + [anon_sym_RBRACK] = ACTIONS(186), + [anon_sym_EQ] = ACTIONS(188), + }, + [STATE(34)] = { + [sym_base_ten] = STATE(130), + [sym_octal] = STATE(130), + [sym_hex] = STATE(130), + [sym_binary] = STATE(130), + [sym_integer] = STATE(134), + [sym_signed_integer] = STATE(20), + [sym_unsigned_integer] = STATE(20), + [sym_number] = STATE(9), + [sym__float] = STATE(88), + [sym_scalar] = STATE(20), + [sym_boolean] = STATE(20), + [sym_function_call] = STATE(20), + [sym_method_call] = STATE(20), + [sym_expression] = STATE(105), + [sym_unary_expression] = STATE(20), + [sym_binary_expression] = STATE(20), + [sym_if] = STATE(20), + [sym_path] = STATE(97), + [sym_parenthesis] = STATE(20), + [sym_list] = STATE(20), + [sym_struct_definition] = STATE(97), + [sym_dictionary_construction] = STATE(20), + [sym_closure_definition] = STATE(20), + [aux_sym_list_repeat1] = STATE(37), + [sym_identifier] = ACTIONS(5), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(7), + [sym_default] = ACTIONS(9), + [sym_void] = ACTIONS(7), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_DASH] = ACTIONS(21), + [anon_sym_PLUS] = ACTIONS(21), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_if] = ACTIONS(23), + [anon_sym_LPAREN] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_RBRACK] = ACTIONS(190), + }, + [STATE(35)] = { + [sym_identifier] = ACTIONS(112), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(110), + [sym_default] = ACTIONS(112), + [sym_void] = ACTIONS(110), + [aux_sym_base_ten_token1] = ACTIONS(112), + [aux_sym_octal_token1] = ACTIONS(110), + [aux_sym_hex_token1] = ACTIONS(110), + [aux_sym_binary_token1] = ACTIONS(110), + [aux_sym_signed_integer_token1] = ACTIONS(192), + [aux_sym_unsigned_integer_token1] = ACTIONS(192), + [sym_unit_quote] = ACTIONS(110), + [anon_sym_DOT] = ACTIONS(112), + [sym_true] = ACTIONS(112), + [sym_false] = ACTIONS(112), + [anon_sym_COLON] = ACTIONS(110), + [anon_sym_DASH] = ACTIONS(110), + [anon_sym_PLUS] = ACTIONS(110), + [anon_sym_BANG] = ACTIONS(112), + [anon_sym_STAR_STAR] = ACTIONS(110), + [anon_sym_STAR] = ACTIONS(112), + [anon_sym_SLASH] = ACTIONS(112), + [anon_sym_SLASH_SLASH] = ACTIONS(110), + [anon_sym_LT_LT] = ACTIONS(110), + [anon_sym_GT_GT] = ACTIONS(110), + [anon_sym_AMP] = ACTIONS(112), + [anon_sym_PIPE] = ACTIONS(112), + [anon_sym_CARET] = ACTIONS(110), + [anon_sym_GT] = ACTIONS(112), + [anon_sym_GT_EQ] = ACTIONS(110), + [anon_sym_EQ_EQ] = ACTIONS(110), + [anon_sym_LT_EQ] = ACTIONS(110), + [anon_sym_LT] = ACTIONS(112), + [anon_sym_BANG_EQ] = ACTIONS(110), + [anon_sym_AMP_AMP] = ACTIONS(110), + [anon_sym_PIPE_PIPE] = ACTIONS(110), + [anon_sym_DOT_DOT] = ACTIONS(112), + [anon_sym_DOT_DOT_EQ] = ACTIONS(110), + [anon_sym_if] = ACTIONS(112), + [anon_sym_else] = ACTIONS(112), + [anon_sym_LPAREN] = ACTIONS(110), + [anon_sym_LBRACK] = ACTIONS(110), }, - [6] = { - [sym_closure_captured_variables] = STATE(175), - [sym_assignment_operator] = STATE(60), - [sym_identifier] = ACTIONS(48), + [STATE(36)] = { + [sym_base_ten] = STATE(130), + [sym_octal] = STATE(130), + [sym_hex] = STATE(130), + [sym_binary] = STATE(130), + [sym_integer] = STATE(134), + [sym_signed_integer] = STATE(20), + [sym_unsigned_integer] = STATE(20), + [sym_number] = STATE(9), + [sym__float] = STATE(88), + [sym_scalar] = STATE(20), + [sym_boolean] = STATE(20), + [sym_function_call] = STATE(20), + [sym_method_call] = STATE(20), + [sym_expression] = STATE(107), + [sym_unary_expression] = STATE(20), + [sym_binary_expression] = STATE(20), + [sym_if] = STATE(20), + [sym_path] = STATE(97), + [sym_parenthesis] = STATE(20), + [sym_list] = STATE(20), + [sym_struct_definition] = STATE(97), + [sym_dictionary_construction] = STATE(20), + [sym_closure_definition] = STATE(20), + [aux_sym_list_repeat1] = STATE(36), + [sym_identifier] = ACTIONS(194), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(197), + [sym_default] = ACTIONS(200), + [sym_void] = ACTIONS(197), + [aux_sym_base_ten_token1] = ACTIONS(203), + [aux_sym_octal_token1] = ACTIONS(206), + [aux_sym_hex_token1] = ACTIONS(209), + [aux_sym_binary_token1] = ACTIONS(212), + [sym_true] = ACTIONS(215), + [sym_false] = ACTIONS(215), + [anon_sym_DASH] = ACTIONS(218), + [anon_sym_PLUS] = ACTIONS(218), + [anon_sym_BANG] = ACTIONS(218), + [anon_sym_if] = ACTIONS(221), + [anon_sym_LPAREN] = ACTIONS(224), + [anon_sym_LBRACK] = ACTIONS(227), + [anon_sym_RBRACK] = ACTIONS(230), + }, + [STATE(37)] = { + [sym_base_ten] = STATE(130), + [sym_octal] = STATE(130), + [sym_hex] = STATE(130), + [sym_binary] = STATE(130), + [sym_integer] = STATE(134), + [sym_signed_integer] = STATE(20), + [sym_unsigned_integer] = STATE(20), + [sym_number] = STATE(9), + [sym__float] = STATE(88), + [sym_scalar] = STATE(20), + [sym_boolean] = STATE(20), + [sym_function_call] = STATE(20), + [sym_method_call] = STATE(20), + [sym_expression] = STATE(106), + [sym_unary_expression] = STATE(20), + [sym_binary_expression] = STATE(20), + [sym_if] = STATE(20), + [sym_path] = STATE(97), + [sym_parenthesis] = STATE(20), + [sym_list] = STATE(20), + [sym_struct_definition] = STATE(97), + [sym_dictionary_construction] = STATE(20), + [sym_closure_definition] = STATE(20), + [aux_sym_list_repeat1] = STATE(36), + [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(50), - [sym_default] = ACTIONS(48), - [sym_void] = ACTIONS(50), - [aux_sym_base_ten_token1] = ACTIONS(48), - [aux_sym_octal_token1] = ACTIONS(50), - [aux_sym_hex_token1] = ACTIONS(50), - [aux_sym_binary_token1] = ACTIONS(50), - [sym_true] = ACTIONS(48), - [sym_false] = ACTIONS(48), - [anon_sym_COLON] = ACTIONS(50), - [anon_sym_DASH] = ACTIONS(48), - [anon_sym_PLUS] = ACTIONS(48), - [anon_sym_BANG] = ACTIONS(48), - [anon_sym_STAR_STAR] = ACTIONS(48), - [anon_sym_STAR] = ACTIONS(48), - [anon_sym_SLASH] = ACTIONS(48), - [anon_sym_SLASH_SLASH] = ACTIONS(48), - [anon_sym_LT_LT] = ACTIONS(48), - [anon_sym_GT_GT] = ACTIONS(48), - [anon_sym_AMP] = ACTIONS(48), - [anon_sym_PIPE] = ACTIONS(48), - [anon_sym_CARET] = ACTIONS(48), - [anon_sym_GT] = ACTIONS(48), - [anon_sym_GT_EQ] = ACTIONS(50), - [anon_sym_EQ_EQ] = ACTIONS(50), - [anon_sym_LT_EQ] = ACTIONS(50), - [anon_sym_LT] = ACTIONS(48), - [anon_sym_BANG_EQ] = ACTIONS(50), - [anon_sym_AMP_AMP] = ACTIONS(48), - [anon_sym_PIPE_PIPE] = ACTIONS(48), - [anon_sym_DOT_DOT] = ACTIONS(48), - [anon_sym_DOT_DOT_EQ] = ACTIONS(50), - [anon_sym_if] = ACTIONS(48), - [anon_sym_LPAREN] = ACTIONS(50), - [anon_sym_LBRACK] = ACTIONS(52), - [anon_sym_EQ] = ACTIONS(54), - [anon_sym_LBRACE] = ACTIONS(50), - [anon_sym_RBRACE] = ACTIONS(50), - [anon_sym_SEMI] = ACTIONS(50), - [anon_sym_AMP_EQ] = ACTIONS(56), - [anon_sym_PIPE_EQ] = ACTIONS(56), - [anon_sym_CARET_EQ] = ACTIONS(56), - [anon_sym_AMP_AMP_EQ] = ACTIONS(56), - [anon_sym_PIPE_PIPE_EQ] = ACTIONS(56), - [anon_sym_CARET_CARET_EQ] = ACTIONS(56), - [anon_sym_PLUS_EQ] = ACTIONS(56), - [anon_sym_DASH_EQ] = ACTIONS(56), - [anon_sym_STAR_STAR_EQ] = ACTIONS(56), - [anon_sym_STAR_EQ] = ACTIONS(56), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(56), - [anon_sym_SLASH_EQ] = ACTIONS(56), - [anon_sym_LT_LT_EQ] = ACTIONS(56), - [anon_sym_GT_GT_EQ] = ACTIONS(56), - [anon_sym_let] = ACTIONS(48), - [anon_sym_for] = ACTIONS(48), + [sym_string] = ACTIONS(7), + [sym_default] = ACTIONS(9), + [sym_void] = ACTIONS(7), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_DASH] = ACTIONS(21), + [anon_sym_PLUS] = ACTIONS(21), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_if] = ACTIONS(23), + [anon_sym_LPAREN] = ACTIONS(25), + [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_RBRACK] = ACTIONS(232), }, }; static const uint16_t ts_small_parse_table[] = { - [0] = 27, + [0] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -2375,33 +3347,21 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, + ACTIONS(234), 1, aux_sym_base_ten_token1, - ACTIONS(62), 1, - anon_sym_RBRACE, - ACTIONS(64), 1, - anon_sym_let, - ACTIONS(66), 1, - anon_sym_for, - STATE(6), 1, - sym_path, - STATE(11), 1, + ACTIONS(238), 1, + anon_sym_if, + STATE(3), 1, + sym_expression, + STATE(9), 1, sym_number, - STATE(42), 1, + STATE(55), 1, sym__float, - STATE(45), 1, - sym_expression, - STATE(46), 1, - sym_struct_definition, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2412,24 +3372,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(8), 2, - sym_statement, - aux_sym_procedural_block_repeat1, - ACTIONS(60), 3, + STATE(85), 2, + sym_path, + sym_struct_definition, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(116), 4, - sym_closed_expression, - sym_let, - sym_assign, - sym_for, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2442,13 +3397,14 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [107] = 27, + [82] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -2461,27 +3417,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, - aux_sym_base_ten_token1, - ACTIONS(64), 1, - anon_sym_let, - ACTIONS(66), 1, - anon_sym_for, - ACTIONS(68), 1, - anon_sym_RBRACE, - STATE(6), 1, - sym_path, - STATE(11), 1, + STATE(9), 1, sym_number, - STATE(42), 1, + STATE(88), 1, sym__float, - STATE(45), 1, + STATE(95), 1, sym_expression, - STATE(46), 1, - sym_struct_definition, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2492,24 +3434,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(9), 2, - sym_statement, - aux_sym_procedural_block_repeat1, - ACTIONS(60), 3, + STATE(97), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(116), 4, - sym_closed_expression, - sym_let, - sym_assign, - sym_for, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2522,74 +3459,56 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [214] = 27, - ACTIONS(70), 1, + [164] = 20, + ACTIONS(5), 1, sym_identifier, - ACTIONS(76), 1, + ACTIONS(9), 1, sym_default, - ACTIONS(79), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(82), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(85), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(88), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(97), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(100), 1, + ACTIONS(25), 1, anon_sym_LPAREN, - ACTIONS(103), 1, + ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(106), 1, - anon_sym_LBRACE, - ACTIONS(109), 1, - anon_sym_RBRACE, - ACTIONS(111), 1, - anon_sym_let, - ACTIONS(114), 1, - anon_sym_for, - STATE(6), 1, - sym_path, - STATE(11), 1, + STATE(9), 1, sym_number, - STATE(42), 1, + STATE(88), 1, sym__float, - STATE(45), 1, + STATE(98), 1, sym_expression, - STATE(46), 1, - sym_struct_definition, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(73), 2, + ACTIONS(7), 2, sym_string, sym_void, - ACTIONS(91), 2, + ACTIONS(19), 2, sym_true, sym_false, - STATE(9), 2, - sym_statement, - aux_sym_procedural_block_repeat1, - ACTIONS(94), 3, + STATE(97), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(116), 4, - sym_closed_expression, - sym_let, - sym_assign, - sym_for, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2602,9 +3521,10 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [321] = 28, + [246] = 20, + ACTIONS(5), 1, + sym_identifier, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -2621,32 +3541,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(117), 1, - sym_identifier, - ACTIONS(119), 1, - anon_sym_RPAREN, - ACTIONS(121), 1, - anon_sym_COMMA, - ACTIONS(123), 1, - sym_varadic_dots, - STATE(11), 1, + STATE(9), 1, sym_number, - STATE(91), 1, + STATE(88), 1, sym__float, - STATE(113), 1, + STATE(90), 1, sym_expression, - STATE(124), 1, - aux_sym_struct_definition_repeat1, - STATE(136), 1, - sym_dictionary_member_assignment, - STATE(143), 1, - sym_struct_member, - STATE(154), 1, + STATE(134), 1, sym_integer, - STATE(168), 1, - sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -2656,19 +3558,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(97), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2681,2539 +3583,318 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [428] = 4, - ACTIONS(129), 1, - anon_sym_DOT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(127), 17, + [328] = 20, + ACTIONS(5), 1, sym_identifier, + ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(125), 30, - ts_builtin_sym_end, - sym_string, - sym_void, + ACTIONS(13), 1, aux_sym_octal_token1, + ACTIONS(15), 1, aux_sym_hex_token1, + ACTIONS(17), 1, aux_sym_binary_token1, - sym_unit_quote, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, anon_sym_LPAREN, - anon_sym_RPAREN, + ACTIONS(27), 1, anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [487] = 4, - ACTIONS(135), 1, - anon_sym_else, + STATE(9), 1, + sym_number, + STATE(88), 1, + sym__float, + STATE(91), 1, + sym_expression, + STATE(134), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(133), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(131), 29, - ts_builtin_sym_end, + ACTIONS(7), 2, sym_string, sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, + ACTIONS(19), 2, + sym_true, + sym_false, + STATE(97), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [545] = 6, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, - anon_sym_LPAREN, - STATE(23), 1, + anon_sym_BANG, + STATE(130), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 13, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(139), 17, + sym_closure_definition, + [410] = 20, + ACTIONS(5), 1, sym_identifier, + ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(137), 27, - ts_builtin_sym_end, - sym_string, - sym_void, + ACTIONS(13), 1, aux_sym_octal_token1, + ACTIONS(15), 1, aux_sym_hex_token1, + ACTIONS(17), 1, aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_RPAREN, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [607] = 3, + STATE(9), 1, + sym_number, + STATE(88), 1, + sym__float, + STATE(92), 1, + sym_expression, + STATE(134), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(147), 18, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, sym_true, sym_false, + STATE(97), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(145), 29, - ts_builtin_sym_end, - sym_string, - sym_void, + STATE(130), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 13, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + [492] = 20, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, aux_sym_octal_token1, + ACTIONS(15), 1, aux_sym_hex_token1, + ACTIONS(17), 1, aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, anon_sym_LPAREN, - anon_sym_RPAREN, + ACTIONS(27), 1, anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [663] = 3, + STATE(9), 1, + sym_number, + STATE(15), 1, + sym_expression, + STATE(88), 1, + sym__float, + STATE(134), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(151), 18, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(149), 29, - ts_builtin_sym_end, + ACTIONS(7), 2, sym_string, sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, + ACTIONS(19), 2, + sym_true, + sym_false, + STATE(97), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [719] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(155), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(153), 30, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - sym_unit_quote, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [775] = 4, - STATE(23), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(159), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(157), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [833] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(163), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(161), 30, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - sym_unit_quote, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [889] = 6, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, - anon_sym_LPAREN, - STATE(23), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(167), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(165), 27, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [951] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(171), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(169), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1006] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(175), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(173), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1061] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(179), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(177), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1116] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(183), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(181), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1171] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(187), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(185), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1226] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(191), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(189), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1281] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(195), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(193), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1336] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(199), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(197), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1391] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(203), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(201), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1446] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(207), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(205), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1501] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(211), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(209), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1556] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(215), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(213), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1611] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(219), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(217), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1666] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(223), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(221), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1721] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(227), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(225), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1776] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(48), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(50), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1831] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(231), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(229), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1886] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(235), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(233), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1941] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(239), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(237), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [1996] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(243), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_EQ, - anon_sym_let, - anon_sym_for, - ACTIONS(241), 29, - ts_builtin_sym_end, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_LBRACK, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2051] = 4, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(245), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(155), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - anon_sym_DOT, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(153), 26, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - sym_unit_quote, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2107] = 23, - ACTIONS(247), 1, - sym_identifier, - ACTIONS(253), 1, - sym_default, - ACTIONS(256), 1, - aux_sym_base_ten_token1, - ACTIONS(259), 1, - aux_sym_octal_token1, - ACTIONS(262), 1, - aux_sym_hex_token1, - ACTIONS(265), 1, - aux_sym_binary_token1, - ACTIONS(274), 1, - anon_sym_if, - ACTIONS(277), 1, - anon_sym_LPAREN, - ACTIONS(280), 1, - anon_sym_LBRACK, - ACTIONS(283), 1, - anon_sym_RBRACK, - ACTIONS(285), 1, - anon_sym_LBRACE, - STATE(11), 1, - sym_number, - STATE(41), 1, - aux_sym_list_repeat1, - STATE(91), 1, - sym__float, - STATE(115), 1, - sym_expression, - STATE(154), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(250), 2, - sym_string, - sym_void, - ACTIONS(268), 2, - sym_true, - sym_false, - STATE(92), 2, - sym_path, - sym_struct_definition, - ACTIONS(271), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(145), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(35), 14, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [2199] = 5, - ACTIONS(292), 1, - sym_unit_quote, - STATE(22), 1, - sym__unit, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(288), 16, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(290), 25, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2255] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(294), 1, - anon_sym_RBRACK, - STATE(11), 1, - sym_number, - STATE(41), 1, - aux_sym_list_repeat1, - STATE(91), 1, - sym__float, - STATE(107), 1, - sym_expression, - STATE(154), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, - ACTIONS(19), 2, - sym_true, - sym_false, - STATE(92), 2, - sym_path, - sym_struct_definition, - ACTIONS(21), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(145), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(35), 14, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [2347] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(296), 1, - anon_sym_RBRACK, - STATE(11), 1, - sym_number, - STATE(43), 1, - aux_sym_list_repeat1, - STATE(91), 1, - sym__float, - STATE(108), 1, - sym_expression, - STATE(154), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, - ACTIONS(19), 2, - sym_true, - sym_false, - STATE(92), 2, - sym_path, - sym_struct_definition, - ACTIONS(21), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(145), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(35), 14, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [2439] = 21, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, - anon_sym_LPAREN, - ACTIONS(304), 1, - anon_sym_STAR_STAR, - ACTIONS(308), 1, - anon_sym_SLASH_SLASH, - ACTIONS(312), 1, - anon_sym_AMP, - ACTIONS(314), 1, - anon_sym_PIPE, - ACTIONS(316), 1, - anon_sym_CARET, - ACTIONS(322), 1, - anon_sym_AMP_AMP, - ACTIONS(324), 1, - anon_sym_PIPE_PIPE, - ACTIONS(326), 1, - anon_sym_DOT_DOT, - ACTIONS(328), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(330), 1, - anon_sym_SEMI, - STATE(23), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(302), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(306), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(310), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(318), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(320), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(300), 8, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - ACTIONS(298), 9, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, - anon_sym_let, - anon_sym_for, - [2526] = 5, - ACTIONS(52), 1, - anon_sym_LBRACK, - STATE(175), 1, - sym_closure_captured_variables, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(48), 16, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(50), 24, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2581] = 9, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, - anon_sym_LPAREN, - ACTIONS(304), 1, - anon_sym_STAR_STAR, - ACTIONS(308), 1, - anon_sym_SLASH_SLASH, - STATE(23), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(306), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(167), 14, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(165), 21, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2644] = 7, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, - anon_sym_LPAREN, - ACTIONS(304), 1, - anon_sym_STAR_STAR, - STATE(23), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(167), 16, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(165), 22, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2703] = 10, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, - anon_sym_LPAREN, - ACTIONS(304), 1, - anon_sym_STAR_STAR, - ACTIONS(308), 1, - anon_sym_SLASH_SLASH, - STATE(23), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(302), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(306), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(167), 14, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(165), 19, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2768] = 11, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, - anon_sym_LPAREN, - ACTIONS(304), 1, - anon_sym_STAR_STAR, - ACTIONS(308), 1, - anon_sym_SLASH_SLASH, - STATE(23), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(302), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(306), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(310), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(167), 14, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(165), 17, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2835] = 13, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, - anon_sym_LPAREN, - ACTIONS(304), 1, - anon_sym_STAR_STAR, - ACTIONS(308), 1, - anon_sym_SLASH_SLASH, - ACTIONS(312), 1, - anon_sym_AMP, - ACTIONS(316), 1, - anon_sym_CARET, - STATE(23), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(302), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(306), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(310), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(167), 13, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(165), 16, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2906] = 12, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, - anon_sym_LPAREN, - ACTIONS(304), 1, - anon_sym_STAR_STAR, - ACTIONS(308), 1, - anon_sym_SLASH_SLASH, - ACTIONS(312), 1, - anon_sym_AMP, - STATE(23), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(302), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(306), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(310), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(167), 13, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(165), 17, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [2975] = 14, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, - anon_sym_LPAREN, - ACTIONS(304), 1, - anon_sym_STAR_STAR, - ACTIONS(308), 1, - anon_sym_SLASH_SLASH, - ACTIONS(312), 1, - anon_sym_AMP, - ACTIONS(314), 1, - anon_sym_PIPE, - ACTIONS(316), 1, - anon_sym_CARET, - STATE(23), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(302), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(306), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(310), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(167), 12, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, anon_sym_BANG, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(165), 16, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [3048] = 16, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, - anon_sym_LPAREN, - ACTIONS(304), 1, - anon_sym_STAR_STAR, - ACTIONS(308), 1, - anon_sym_SLASH_SLASH, - ACTIONS(312), 1, - anon_sym_AMP, - ACTIONS(314), 1, - anon_sym_PIPE, - ACTIONS(316), 1, - anon_sym_CARET, - STATE(23), 1, + STATE(130), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 13, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(302), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(306), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(310), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(318), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(320), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(167), 10, + sym_closure_definition, + [574] = 20, + ACTIONS(5), 1, sym_identifier, + ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(165), 12, - sym_string, - sym_void, + ACTIONS(13), 1, aux_sym_octal_token1, + ACTIONS(15), 1, aux_sym_hex_token1, + ACTIONS(17), 1, aux_sym_binary_token1, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [3125] = 17, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, anon_sym_LPAREN, - ACTIONS(304), 1, - anon_sym_STAR_STAR, - ACTIONS(308), 1, - anon_sym_SLASH_SLASH, - ACTIONS(312), 1, - anon_sym_AMP, - ACTIONS(314), 1, - anon_sym_PIPE, - ACTIONS(316), 1, - anon_sym_CARET, - ACTIONS(322), 1, - anon_sym_AMP_AMP, - STATE(23), 1, - sym_dictionary_construction, + ACTIONS(27), 1, + anon_sym_LBRACK, + STATE(9), 1, + sym_number, + STATE(88), 1, + sym__float, + STATE(89), 1, + sym_expression, + STATE(134), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(302), 2, + ACTIONS(7), 2, + sym_string, + sym_void, + ACTIONS(19), 2, + sym_true, + sym_false, + STATE(97), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(306), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(310), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(318), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(320), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(167), 10, + anon_sym_BANG, + STATE(130), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 13, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + [656] = 20, + ACTIONS(5), 1, sym_identifier, + ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(165), 11, - sym_string, - sym_void, + ACTIONS(13), 1, aux_sym_octal_token1, + ACTIONS(15), 1, aux_sym_hex_token1, + ACTIONS(17), 1, aux_sym_binary_token1, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - [3204] = 18, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, anon_sym_LPAREN, - ACTIONS(304), 1, - anon_sym_STAR_STAR, - ACTIONS(308), 1, - anon_sym_SLASH_SLASH, - ACTIONS(312), 1, - anon_sym_AMP, - ACTIONS(314), 1, - anon_sym_PIPE, - ACTIONS(316), 1, - anon_sym_CARET, - ACTIONS(322), 1, - anon_sym_AMP_AMP, - ACTIONS(324), 1, - anon_sym_PIPE_PIPE, - STATE(23), 1, - sym_dictionary_construction, + ACTIONS(27), 1, + anon_sym_LBRACK, + STATE(9), 1, + sym_number, + STATE(88), 1, + sym__float, + STATE(103), 1, + sym_expression, + STATE(134), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(302), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(306), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(310), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(318), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(320), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(165), 10, + ACTIONS(7), 2, sym_string, sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - anon_sym_SEMI, - ACTIONS(167), 10, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, + ACTIONS(19), 2, sym_true, sym_false, + STATE(97), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - anon_sym_for, - [3285] = 21, + STATE(130), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 13, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + [738] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5232,15 +3913,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, + STATE(9), 1, sym_number, - STATE(91), 1, + STATE(88), 1, sym__float, - STATE(111), 1, + STATE(93), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5251,19 +3930,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(97), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5276,9 +3955,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [3371] = 21, + [820] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5297,15 +3975,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, + STATE(9), 1, sym_number, - STATE(91), 1, + STATE(88), 1, sym__float, - STATE(104), 1, + STATE(94), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5316,19 +3992,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(97), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5341,9 +4017,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [3457] = 21, + [902] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5362,15 +4037,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, + STATE(9), 1, sym_number, - STATE(13), 1, + STATE(11), 1, sym_expression, - STATE(91), 1, + STATE(88), 1, sym__float, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5381,19 +4054,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(97), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5406,9 +4079,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [3543] = 21, + [984] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5427,15 +4099,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, + STATE(9), 1, sym_number, - STATE(91), 1, + STATE(88), 1, sym__float, - STATE(112), 1, + STATE(99), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5446,19 +4116,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(97), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5471,9 +4141,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [3629] = 21, + [1066] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5492,15 +4161,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, + STATE(9), 1, sym_number, - STATE(91), 1, + STATE(88), 1, sym__float, - STATE(106), 1, + STATE(96), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5511,19 +4178,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(97), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5536,36 +4203,33 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [3715] = 21, + [1148] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, + ACTIONS(234), 1, + aux_sym_base_ten_token1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(91), 1, + STATE(55), 1, sym__float, - STATE(109), 1, + STATE(75), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5576,19 +4240,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5601,9 +4265,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [3801] = 21, + [1230] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5622,15 +4285,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, + STATE(9), 1, sym_number, - STATE(91), 1, + STATE(88), 1, sym__float, - STATE(96), 1, + STATE(100), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5641,19 +4302,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(97), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5666,9 +4327,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [3887] = 21, + [1312] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5687,15 +4347,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, + STATE(9), 1, sym_number, - STATE(91), 1, - sym__float, - STATE(110), 1, + STATE(17), 1, sym_expression, - STATE(154), 1, + STATE(88), 1, + sym__float, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5706,19 +4364,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(97), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5731,36 +4389,80 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [3973] = 21, + [1394] = 5, + ACTIONS(244), 1, + sym_unit_quote, + STATE(23), 1, + sym__unit, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(240), 15, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(242), 22, + sym_string, + sym_void, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + [1446] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, + ACTIONS(234), 1, + aux_sym_base_ten_token1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(17), 1, - sym_expression, - STATE(91), 1, + STATE(55), 1, sym__float, - STATE(154), 1, + STATE(78), 1, + sym_expression, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5771,19 +4473,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5796,36 +4498,33 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [4059] = 21, + [1528] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, + ACTIONS(234), 1, + aux_sym_base_ten_token1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(19), 1, + STATE(17), 1, sym_expression, - STATE(91), 1, + STATE(55), 1, sym__float, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5836,19 +4535,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5861,36 +4560,33 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [4145] = 21, + [1610] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, + ACTIONS(234), 1, + aux_sym_base_ten_token1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(91), 1, + STATE(55), 1, sym__float, - STATE(97), 1, + STATE(79), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5901,19 +4597,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5926,9 +4622,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [4231] = 21, + [1692] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -5939,23 +4634,21 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, + ACTIONS(234), 1, aux_sym_base_ten_token1, - STATE(11), 1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(13), 1, - sym_expression, - STATE(42), 1, + STATE(55), 1, sym__float, - STATE(154), 1, + STATE(80), 1, + sym_expression, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5966,19 +4659,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(46), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(60), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5991,36 +4684,33 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [4317] = 21, + [1774] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, + ACTIONS(234), 1, + aux_sym_base_ten_token1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(91), 1, + STATE(55), 1, sym__float, - STATE(98), 1, + STATE(77), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6031,19 +4721,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6056,9 +4746,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [4403] = 21, + [1856] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6069,23 +4758,21 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, + ACTIONS(234), 1, aux_sym_base_ten_token1, - STATE(11), 1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(42), 1, + STATE(55), 1, sym__float, - STATE(47), 1, + STATE(81), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6096,19 +4783,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(46), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(60), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6121,9 +4808,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [4489] = 21, + [1938] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6134,23 +4820,21 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, + ACTIONS(234), 1, aux_sym_base_ten_token1, - STATE(11), 1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(19), 1, - sym_expression, - STATE(42), 1, + STATE(55), 1, sym__float, - STATE(154), 1, + STATE(76), 1, + sym_expression, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6161,19 +4845,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(46), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(60), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6186,9 +4870,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [4575] = 21, + [2020] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6199,23 +4882,21 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, + ACTIONS(234), 1, aux_sym_base_ten_token1, - STATE(11), 1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(42), 1, + STATE(55), 1, sym__float, - STATE(48), 1, + STATE(83), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6226,19 +4907,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(46), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(60), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6251,9 +4932,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [4661] = 21, + [2102] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6264,23 +4944,21 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, + ACTIONS(234), 1, aux_sym_base_ten_token1, - STATE(11), 1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(42), 1, + STATE(55), 1, sym__float, - STATE(49), 1, + STATE(82), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6291,19 +4969,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(46), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(60), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6316,9 +4994,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [4747] = 21, + [2184] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6329,23 +5006,21 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, + ACTIONS(234), 1, aux_sym_base_ten_token1, - STATE(11), 1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(42), 1, + STATE(55), 1, sym__float, - STATE(50), 1, + STATE(73), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6356,19 +5031,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(46), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(60), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6381,9 +5056,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [4833] = 21, + [2266] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6394,23 +5068,21 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, + ACTIONS(234), 1, aux_sym_base_ten_token1, - STATE(11), 1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(42), 1, + STATE(55), 1, sym__float, - STATE(51), 1, + STATE(74), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6421,19 +5093,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(46), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(60), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6446,13 +5118,14 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [4919] = 21, + [2348] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6465,17 +5138,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, - aux_sym_base_ten_token1, - STATE(11), 1, + STATE(9), 1, sym_number, - STATE(42), 1, + STATE(88), 1, sym__float, - STATE(52), 1, + STATE(102), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6486,19 +5155,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(46), 2, + STATE(97), 2, sym_path, sym_struct_definition, - ACTIONS(60), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6511,9 +5180,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [5005] = 21, + [2430] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6524,23 +5192,21 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, + ACTIONS(234), 1, aux_sym_base_ten_token1, - STATE(11), 1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(42), 1, - sym__float, - STATE(53), 1, + STATE(15), 1, sym_expression, - STATE(154), 1, + STATE(55), 1, + sym__float, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6551,19 +5217,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(46), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(60), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6576,9 +5242,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [5091] = 21, + [2512] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6589,23 +5254,21 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, + ACTIONS(234), 1, aux_sym_base_ten_token1, - STATE(11), 1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(42), 1, + STATE(55), 1, sym__float, - STATE(54), 1, + STATE(84), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6616,19 +5279,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(46), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(60), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6641,13 +5304,14 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [5177] = 21, + [2594] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6660,17 +5324,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, - aux_sym_base_ten_token1, - STATE(11), 1, + STATE(9), 1, sym_number, - STATE(42), 1, + STATE(88), 1, sym__float, - STATE(55), 1, + STATE(104), 1, sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6681,19 +5341,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(46), 2, + STATE(97), 2, sym_path, sym_struct_definition, - ACTIONS(60), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6706,9 +5366,8 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [5263] = 21, + [2676] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, @@ -6719,23 +5378,21 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, + ACTIONS(234), 1, aux_sym_base_ten_token1, - STATE(11), 1, + ACTIONS(238), 1, + anon_sym_if, + STATE(2), 1, + sym_expression, + STATE(9), 1, sym_number, - STATE(42), 1, + STATE(55), 1, sym__float, - STATE(56), 1, - sym_expression, - STATE(154), 1, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6746,19 +5403,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(46), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(60), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6771,36 +5428,33 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [5349] = 21, + [2758] = 20, ACTIONS(5), 1, sym_identifier, ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, + ACTIONS(234), 1, + aux_sym_base_ten_token1, + ACTIONS(238), 1, + anon_sym_if, + STATE(9), 1, sym_number, - STATE(91), 1, - sym__float, - STATE(99), 1, + STATE(11), 1, sym_expression, - STATE(154), 1, + STATE(55), 1, + sym__float, + STATE(134), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6811,19 +5465,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(92), 2, + STATE(85), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(236), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, + STATE(130), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(35), 14, + STATE(20), 13, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6836,538 +5490,668 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesis, sym_list, sym_dictionary_construction, - sym_procedural_block, sym_closure_definition, - [5435] = 21, - ACTIONS(5), 1, + [2840] = 17, + ACTIONS(29), 1, + anon_sym_COLON, + ACTIONS(35), 1, + anon_sym_STAR_STAR, + ACTIONS(39), 1, + anon_sym_SLASH_SLASH, + ACTIONS(43), 1, + anon_sym_AMP, + ACTIONS(45), 1, + anon_sym_PIPE, + ACTIONS(47), 1, + anon_sym_CARET, + ACTIONS(53), 1, + anon_sym_AMP_AMP, + ACTIONS(100), 1, + anon_sym_LPAREN, + STATE(25), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(37), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(41), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(49), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(246), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(51), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(122), 8, + sym_string, + sym_void, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + ACTIONS(124), 9, sym_identifier, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + [2915] = 18, + ACTIONS(29), 1, + anon_sym_COLON, + ACTIONS(35), 1, + anon_sym_STAR_STAR, + ACTIONS(39), 1, + anon_sym_SLASH_SLASH, + ACTIONS(43), 1, + anon_sym_AMP, + ACTIONS(45), 1, + anon_sym_PIPE, + ACTIONS(47), 1, + anon_sym_CARET, + ACTIONS(53), 1, + anon_sym_AMP_AMP, + ACTIONS(55), 1, + anon_sym_PIPE_PIPE, + ACTIONS(100), 1, + anon_sym_LPAREN, + STATE(25), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(37), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(41), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(49), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(246), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(51), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(122), 7, + sym_string, + sym_void, aux_sym_octal_token1, - ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, + ACTIONS(124), 9, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + [2992] = 8, ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, - sym_number, - STATE(91), 1, - sym__float, - STATE(100), 1, - sym_expression, - STATE(154), 1, - sym_integer, + anon_sym_COLON, + ACTIONS(100), 1, + anon_sym_LPAREN, + STATE(25), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, + ACTIONS(122), 6, sym_string, sym_void, - ACTIONS(19), 2, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LBRACK, + ACTIONS(124), 7, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, - STATE(92), 2, - sym_path, - sym_struct_definition, - ACTIONS(21), 3, + anon_sym_BANG, + anon_sym_if, + ACTIONS(98), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_else, + ACTIONS(96), 14, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(145), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(35), 14, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + [3049] = 12, + ACTIONS(29), 1, + anon_sym_COLON, + ACTIONS(35), 1, + anon_sym_STAR_STAR, + ACTIONS(39), 1, + anon_sym_SLASH_SLASH, + ACTIONS(43), 1, + anon_sym_AMP, + ACTIONS(100), 1, + anon_sym_LPAREN, + STATE(25), 1, sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [5521] = 21, - ACTIONS(5), 1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(37), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(41), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(246), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(124), 12, sym_identifier, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(122), 14, + sym_string, + sym_void, aux_sym_octal_token1, - ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, + [3114] = 11, ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, - sym_number, - STATE(91), 1, - sym__float, - STATE(101), 1, - sym_expression, - STATE(154), 1, - sym_integer, + anon_sym_COLON, + ACTIONS(35), 1, + anon_sym_STAR_STAR, + ACTIONS(39), 1, + anon_sym_SLASH_SLASH, + ACTIONS(100), 1, + anon_sym_LPAREN, + STATE(25), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, - ACTIONS(19), 2, - sym_true, - sym_false, - STATE(92), 2, - sym_path, - sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(37), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(41), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(246), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(145), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(35), 14, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [5607] = 21, - ACTIONS(5), 1, + ACTIONS(124), 13, sym_identifier, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(122), 14, + sym_string, + sym_void, aux_sym_octal_token1, - ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, + [3177] = 9, ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, - sym_number, - STATE(91), 1, - sym__float, - STATE(102), 1, - sym_expression, - STATE(154), 1, - sym_integer, + anon_sym_COLON, + ACTIONS(35), 1, + anon_sym_STAR_STAR, + ACTIONS(39), 1, + anon_sym_SLASH_SLASH, + ACTIONS(100), 1, + anon_sym_LPAREN, + STATE(25), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, - ACTIONS(19), 2, + ACTIONS(37), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(124), 13, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, - STATE(92), 2, - sym_path, - sym_struct_definition, - ACTIONS(21), 3, + anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(122), 18, + sym_string, + sym_void, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(145), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(35), 14, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + [3236] = 7, + ACTIONS(29), 1, + anon_sym_COLON, + ACTIONS(35), 1, + anon_sym_STAR_STAR, + ACTIONS(100), 1, + anon_sym_LPAREN, + STATE(25), 1, sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [5693] = 21, - ACTIONS(5), 1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(124), 15, sym_identifier, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(122), 19, + sym_string, + sym_void, aux_sym_octal_token1, - ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, + [3291] = 10, ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, - sym_number, - STATE(91), 1, - sym__float, - STATE(93), 1, - sym_expression, - STATE(154), 1, - sym_integer, + anon_sym_COLON, + ACTIONS(35), 1, + anon_sym_STAR_STAR, + ACTIONS(39), 1, + anon_sym_SLASH_SLASH, + ACTIONS(100), 1, + anon_sym_LPAREN, + STATE(25), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, - ACTIONS(19), 2, - sym_true, - sym_false, - STATE(92), 2, - sym_path, - sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(37), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(246), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(145), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(35), 14, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [5779] = 21, - ACTIONS(5), 1, + ACTIONS(124), 13, sym_identifier, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(122), 16, + sym_string, + sym_void, aux_sym_octal_token1, - ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, + [3352] = 13, ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, - sym_number, - STATE(91), 1, - sym__float, - STATE(94), 1, - sym_expression, - STATE(154), 1, - sym_integer, + anon_sym_COLON, + ACTIONS(35), 1, + anon_sym_STAR_STAR, + ACTIONS(39), 1, + anon_sym_SLASH_SLASH, + ACTIONS(43), 1, + anon_sym_AMP, + ACTIONS(47), 1, + anon_sym_CARET, + ACTIONS(100), 1, + anon_sym_LPAREN, + STATE(25), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, - ACTIONS(19), 2, - sym_true, - sym_false, - STATE(92), 2, - sym_path, - sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(37), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(41), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(246), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(145), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(35), 14, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [5865] = 21, - ACTIONS(5), 1, + ACTIONS(124), 12, sym_identifier, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(122), 13, + sym_string, + sym_void, aux_sym_octal_token1, - ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, + [3419] = 16, ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, - sym_number, - STATE(91), 1, - sym__float, - STATE(95), 1, - sym_expression, - STATE(154), 1, - sym_integer, + anon_sym_COLON, + ACTIONS(35), 1, + anon_sym_STAR_STAR, + ACTIONS(39), 1, + anon_sym_SLASH_SLASH, + ACTIONS(43), 1, + anon_sym_AMP, + ACTIONS(45), 1, + anon_sym_PIPE, + ACTIONS(47), 1, + anon_sym_CARET, + ACTIONS(100), 1, + anon_sym_LPAREN, + STATE(25), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, - ACTIONS(19), 2, - sym_true, - sym_false, - STATE(92), 2, - sym_path, - sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(37), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(41), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(49), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(246), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(145), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(35), 14, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [5951] = 21, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(9), 1, - sym_default, - ACTIONS(13), 1, + ACTIONS(51), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(122), 9, + sym_string, + sym_void, aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(58), 1, + ACTIONS(124), 9, + sym_identifier, + sym_default, aux_sym_base_ten_token1, - STATE(11), 1, - sym_number, - STATE(17), 1, - sym_expression, - STATE(42), 1, - sym__float, - STATE(154), 1, - sym_integer, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + [3492] = 14, + ACTIONS(29), 1, + anon_sym_COLON, + ACTIONS(35), 1, + anon_sym_STAR_STAR, + ACTIONS(39), 1, + anon_sym_SLASH_SLASH, + ACTIONS(43), 1, + anon_sym_AMP, + ACTIONS(45), 1, + anon_sym_PIPE, + ACTIONS(47), 1, + anon_sym_CARET, + ACTIONS(100), 1, + anon_sym_LPAREN, + STATE(25), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, - ACTIONS(19), 2, - sym_true, - sym_false, - STATE(46), 2, - sym_path, - sym_struct_definition, - ACTIONS(60), 3, + ACTIONS(37), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(41), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(246), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(145), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(35), 14, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [6037] = 21, - ACTIONS(5), 1, + ACTIONS(124), 11, sym_identifier, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(122), 13, + sym_string, + sym_void, aux_sym_octal_token1, - ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, + [3561] = 20, ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(11), 1, - sym_number, - STATE(91), 1, - sym__float, - STATE(105), 1, - sym_expression, - STATE(154), 1, - sym_integer, + anon_sym_COLON, + ACTIONS(35), 1, + anon_sym_STAR_STAR, + ACTIONS(39), 1, + anon_sym_SLASH_SLASH, + ACTIONS(43), 1, + anon_sym_AMP, + ACTIONS(45), 1, + anon_sym_PIPE, + ACTIONS(47), 1, + anon_sym_CARET, + ACTIONS(53), 1, + anon_sym_AMP_AMP, + ACTIONS(55), 1, + anon_sym_PIPE_PIPE, + ACTIONS(57), 1, + anon_sym_DOT_DOT, + ACTIONS(59), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(100), 1, + anon_sym_LPAREN, + STATE(25), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, + ACTIONS(37), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(41), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(49), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(246), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(51), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(250), 6, sym_string, sym_void, - ACTIONS(19), 2, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LBRACK, + ACTIONS(248), 8, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, - STATE(92), 2, - sym_path, - sym_struct_definition, - ACTIONS(21), 3, - anon_sym_DASH, - anon_sym_PLUS, anon_sym_BANG, - STATE(145), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(35), 14, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_procedural_block, - sym_closure_definition, - [6123] = 4, + anon_sym_if, + anon_sym_else, + [3642] = 4, + ACTIONS(252), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(245), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(155), 10, + ACTIONS(136), 16, sym_identifier, - anon_sym_DOT, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_DASH, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -7375,12 +6159,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(153), 23, - ts_builtin_sym_end, - sym_unit_quote, + anon_sym_if, + anon_sym_else, + ACTIONS(134), 21, + sym_string, + sym_void, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -7395,21 +6182,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [6169] = 5, - STATE(22), 1, - sym__unit, + anon_sym_LBRACK, + [3691] = 4, + ACTIONS(136), 1, + anon_sym_else, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 2, + ACTIONS(156), 14, sym_identifier, - sym_unit_quote, - ACTIONS(288), 8, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -7417,9 +6203,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(290), 22, - ts_builtin_sym_end, + anon_sym_if, + ACTIONS(154), 22, + sym_string, + sym_void, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -7436,20 +6226,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [6215] = 5, - ACTIONS(52), 1, anon_sym_LBRACK, - STATE(167), 1, - sym_closure_captured_variables, + [3739] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(48), 8, + ACTIONS(192), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(112), 11, + sym_identifier, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -7457,9 +6244,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, + anon_sym_else, anon_sym_EQ, - ACTIONS(50), 22, + ACTIONS(110), 21, ts_builtin_sym_end, + sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -7479,191 +6268,133 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [6260] = 16, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, - anon_sym_LPAREN, - ACTIONS(334), 1, - anon_sym_STAR_STAR, - ACTIONS(338), 1, - anon_sym_SLASH_SLASH, - ACTIONS(342), 1, - anon_sym_AMP, - ACTIONS(344), 1, - anon_sym_PIPE, - ACTIONS(346), 1, - anon_sym_CARET, - STATE(23), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(167), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(332), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(336), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(340), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(348), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(350), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(165), 9, - ts_builtin_sym_end, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [6326] = 17, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, - anon_sym_LPAREN, - ACTIONS(334), 1, - anon_sym_STAR_STAR, - ACTIONS(338), 1, - anon_sym_SLASH_SLASH, - ACTIONS(342), 1, - anon_sym_AMP, - ACTIONS(344), 1, - anon_sym_PIPE, - ACTIONS(346), 1, - anon_sym_CARET, - ACTIONS(352), 1, - anon_sym_AMP_AMP, + [3784] = 6, + ACTIONS(244), 1, + sym_unit_quote, + ACTIONS(254), 1, + sym_identifier, STATE(23), 1, - sym_dictionary_construction, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 2, + ACTIONS(240), 9, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, anon_sym_DOT_DOT, + anon_sym_else, anon_sym_EQ, - ACTIONS(332), 2, + ACTIONS(242), 20, + ts_builtin_sym_end, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(340), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(348), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(350), 4, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(165), 8, - ts_builtin_sym_end, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [6394] = 18, - ACTIONS(141), 1, + [3831] = 20, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(248), 1, + anon_sym_EQ, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, + ACTIONS(266), 1, anon_sym_AMP, - ACTIONS(344), 1, + ACTIONS(268), 1, anon_sym_PIPE, - ACTIONS(346), 1, + ACTIONS(270), 1, anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(276), 1, anon_sym_AMP_AMP, - ACTIONS(354), 1, + ACTIONS(278), 1, anon_sym_PIPE_PIPE, - STATE(23), 1, + ACTIONS(280), 1, + anon_sym_DOT_DOT, + ACTIONS(282), 1, + anon_sym_DOT_DOT_EQ, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(332), 2, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, + ACTIONS(264), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(348), 2, + ACTIONS(272), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(350), 4, + ACTIONS(274), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(165), 7, + ACTIONS(250), 5, ts_builtin_sym_end, - anon_sym_DOT_DOT_EQ, + anon_sym_else, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [6464] = 9, - ACTIONS(141), 1, + [3904] = 12, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - STATE(23), 1, + ACTIONS(266), 1, + anon_sym_AMP, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(336), 2, + ACTIONS(256), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(167), 6, - anon_sym_AMP, + ACTIONS(264), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(124), 5, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(165), 18, + ACTIONS(122), 13, ts_builtin_sym_end, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -7672,40 +6403,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [6516] = 7, - ACTIONS(141), 1, + [3961] = 14, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - STATE(23), 1, + ACTIONS(262), 1, + anon_sym_SLASH_SLASH, + ACTIONS(266), 1, + anon_sym_AMP, + ACTIONS(268), 1, + anon_sym_PIPE, + ACTIONS(270), 1, + anon_sym_CARET, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 8, + ACTIONS(256), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(264), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(124), 4, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(165), 19, + ACTIONS(122), 12, ts_builtin_sym_end, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -7713,181 +6450,195 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [6564] = 10, - ACTIONS(141), 1, + [4022] = 16, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - STATE(23), 1, + ACTIONS(266), 1, + anon_sym_AMP, + ACTIONS(268), 1, + anon_sym_PIPE, + ACTIONS(270), 1, + anon_sym_CARET, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(124), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(167), 6, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(165), 16, - ts_builtin_sym_end, + ACTIONS(264), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(272), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(274), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(122), 8, + ts_builtin_sym_end, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [6618] = 11, - ACTIONS(141), 1, + [4087] = 17, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - STATE(23), 1, + ACTIONS(266), 1, + anon_sym_AMP, + ACTIONS(268), 1, + anon_sym_PIPE, + ACTIONS(270), 1, + anon_sym_CARET, + ACTIONS(276), 1, + anon_sym_AMP_AMP, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(124), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, + ACTIONS(264), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(167), 6, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(272), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(165), 14, - ts_builtin_sym_end, - anon_sym_CARET, + ACTIONS(274), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(122), 7, + ts_builtin_sym_end, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [6674] = 13, - ACTIONS(141), 1, + [4154] = 18, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, + ACTIONS(266), 1, anon_sym_AMP, - ACTIONS(346), 1, + ACTIONS(268), 1, + anon_sym_PIPE, + ACTIONS(270), 1, anon_sym_CARET, - STATE(23), 1, + ACTIONS(276), 1, + anon_sym_AMP_AMP, + ACTIONS(278), 1, + anon_sym_PIPE_PIPE, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(124), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, + ACTIONS(264), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(167), 5, - anon_sym_PIPE, + ACTIONS(272), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(165), 13, - ts_builtin_sym_end, + ACTIONS(274), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, + ACTIONS(122), 6, + ts_builtin_sym_end, anon_sym_DOT_DOT_EQ, + anon_sym_else, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [6734] = 12, - ACTIONS(141), 1, + [4223] = 13, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, + ACTIONS(266), 1, anon_sym_AMP, - STATE(23), 1, + ACTIONS(270), 1, + anon_sym_CARET, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, + ACTIONS(264), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(167), 5, + ACTIONS(124), 5, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(165), 14, + ACTIONS(122), 12, ts_builtin_sym_end, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -7895,47 +6646,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [6792] = 14, - ACTIONS(141), 1, + [4282] = 10, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, - anon_sym_AMP, - ACTIONS(344), 1, - anon_sym_PIPE, - ACTIONS(346), 1, - anon_sym_CARET, - STATE(23), 1, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(167), 4, + ACTIONS(124), 6, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(165), 13, + ACTIONS(122), 15, ts_builtin_sym_end, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -7943,26 +6689,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_LBRACE, - anon_sym_SEMI, - [6854] = 8, - ACTIONS(35), 1, - anon_sym_DOT, - ACTIONS(356), 1, - anon_sym_COLON, - ACTIONS(358), 1, - anon_sym_EQ, - STATE(4), 1, - aux_sym_path_repeat1, - STATE(129), 1, - sym_declaration_type, + [4335] = 4, + ACTIONS(284), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(33), 7, + ACTIONS(136), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -7970,8 +6708,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(31), 17, - anon_sym_DASH, + anon_sym_EQ, + ACTIONS(134), 20, + ts_builtin_sym_end, + anon_sym_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -7985,752 +6725,668 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, anon_sym_LPAREN, anon_sym_RPAREN, - anon_sym_LBRACK, - [6902] = 20, - ACTIONS(141), 1, + anon_sym_COMMA, + anon_sym_RBRACK, + [4376] = 7, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, - anon_sym_SLASH_SLASH, - ACTIONS(342), 1, - anon_sym_AMP, - ACTIONS(344), 1, - anon_sym_PIPE, - ACTIONS(346), 1, - anon_sym_CARET, - ACTIONS(352), 1, - anon_sym_AMP_AMP, - ACTIONS(354), 1, - anon_sym_PIPE_PIPE, - ACTIONS(360), 1, - anon_sym_DOT_DOT, - ACTIONS(362), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(366), 1, - anon_sym_EQ, - STATE(23), 1, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(124), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(348), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(364), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - ACTIONS(350), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(122), 18, + ts_builtin_sym_end, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [6972] = 19, - ACTIONS(141), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [4423] = 9, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, - anon_sym_AMP, - ACTIONS(344), 1, - anon_sym_PIPE, - ACTIONS(346), 1, - anon_sym_CARET, - ACTIONS(352), 1, - anon_sym_AMP_AMP, - ACTIONS(354), 1, - anon_sym_PIPE_PIPE, - ACTIONS(360), 1, - anon_sym_DOT_DOT, - ACTIONS(362), 1, - anon_sym_DOT_DOT_EQ, - STATE(23), 1, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(348), 2, + ACTIONS(124), 6, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(368), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - ACTIONS(350), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(122), 17, + ts_builtin_sym_end, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7039] = 20, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [4474] = 11, ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(141), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, - anon_sym_AMP, - ACTIONS(344), 1, - anon_sym_PIPE, - ACTIONS(346), 1, - anon_sym_CARET, - ACTIONS(352), 1, - anon_sym_AMP_AMP, - ACTIONS(354), 1, - anon_sym_PIPE_PIPE, - ACTIONS(360), 1, - anon_sym_DOT_DOT, - ACTIONS(362), 1, - anon_sym_DOT_DOT_EQ, - STATE(12), 1, - sym_procedural_block, - STATE(23), 1, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, + ACTIONS(264), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(348), 2, + ACTIONS(124), 6, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(350), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(122), 13, + ts_builtin_sym_end, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7108] = 20, - ACTIONS(141), 1, - anon_sym_COLON, - ACTIONS(143), 1, - anon_sym_LPAREN, - ACTIONS(334), 1, - anon_sym_STAR_STAR, - ACTIONS(338), 1, - anon_sym_SLASH_SLASH, - ACTIONS(342), 1, - anon_sym_AMP, - ACTIONS(344), 1, - anon_sym_PIPE, - ACTIONS(346), 1, - anon_sym_CARET, - ACTIONS(352), 1, anon_sym_AMP_AMP, - ACTIONS(354), 1, anon_sym_PIPE_PIPE, - ACTIONS(360), 1, - anon_sym_DOT_DOT, - ACTIONS(362), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(370), 1, + anon_sym_else, + anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(372), 1, anon_sym_RBRACK, - STATE(23), 1, - sym_dictionary_construction, + [4529] = 8, + ACTIONS(73), 1, + anon_sym_DOT, + ACTIONS(286), 1, + anon_sym_COLON, + ACTIONS(288), 1, + anon_sym_EQ, + STATE(7), 1, + aux_sym_path_repeat1, + STATE(121), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(71), 8, anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(336), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(348), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(350), 4, + anon_sym_DOT_DOT, + ACTIONS(69), 16, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7177] = 20, - ACTIONS(141), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_DASH_GT, + [4577] = 20, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(294), 1, - anon_sym_RBRACK, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, + ACTIONS(266), 1, anon_sym_AMP, - ACTIONS(344), 1, + ACTIONS(268), 1, anon_sym_PIPE, - ACTIONS(346), 1, + ACTIONS(270), 1, anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(276), 1, anon_sym_AMP_AMP, - ACTIONS(354), 1, + ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(360), 1, + ACTIONS(280), 1, anon_sym_DOT_DOT, - ACTIONS(362), 1, + ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(370), 1, - anon_sym_COMMA, - STATE(23), 1, + ACTIONS(292), 1, + anon_sym_EQ, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, + ACTIONS(264), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(348), 2, + ACTIONS(272), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(350), 4, + ACTIONS(290), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + ACTIONS(274), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7246] = 19, - ACTIONS(141), 1, + [4647] = 19, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, + ACTIONS(266), 1, anon_sym_AMP, - ACTIONS(344), 1, + ACTIONS(268), 1, anon_sym_PIPE, - ACTIONS(346), 1, + ACTIONS(270), 1, anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(276), 1, anon_sym_AMP_AMP, - ACTIONS(354), 1, + ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(360), 1, + ACTIONS(280), 1, anon_sym_DOT_DOT, - ACTIONS(362), 1, + ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - STATE(23), 1, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, + ACTIONS(264), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(348), 2, + ACTIONS(272), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(374), 2, + ACTIONS(294), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(350), 4, + ACTIONS(274), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7313] = 20, + [4714] = 19, ACTIONS(29), 1, - anon_sym_LBRACE, - ACTIONS(141), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, + ACTIONS(266), 1, anon_sym_AMP, - ACTIONS(344), 1, + ACTIONS(268), 1, anon_sym_PIPE, - ACTIONS(346), 1, + ACTIONS(270), 1, anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(276), 1, anon_sym_AMP_AMP, - ACTIONS(354), 1, + ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(360), 1, + ACTIONS(280), 1, anon_sym_DOT_DOT, - ACTIONS(362), 1, + ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - STATE(23), 1, + STATE(25), 1, sym_dictionary_construction, - STATE(120), 1, - sym_procedural_block, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, + ACTIONS(264), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(348), 2, + ACTIONS(272), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(350), 4, + ACTIONS(296), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + ACTIONS(274), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7382] = 19, - ACTIONS(141), 1, + [4781] = 20, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(232), 1, + anon_sym_RBRACK, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, + ACTIONS(266), 1, anon_sym_AMP, - ACTIONS(344), 1, + ACTIONS(268), 1, anon_sym_PIPE, - ACTIONS(346), 1, + ACTIONS(270), 1, anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(276), 1, anon_sym_AMP_AMP, - ACTIONS(354), 1, + ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(360), 1, + ACTIONS(280), 1, anon_sym_DOT_DOT, - ACTIONS(362), 1, + ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(376), 1, - anon_sym_SEMI, - STATE(23), 1, + ACTIONS(298), 1, + anon_sym_COMMA, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, + ACTIONS(264), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(348), 2, + ACTIONS(272), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(350), 4, + ACTIONS(274), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7448] = 19, - ACTIONS(141), 1, + [4850] = 20, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, + ACTIONS(266), 1, anon_sym_AMP, - ACTIONS(344), 1, + ACTIONS(268), 1, anon_sym_PIPE, - ACTIONS(346), 1, + ACTIONS(270), 1, anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(276), 1, anon_sym_AMP_AMP, - ACTIONS(354), 1, + ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(360), 1, + ACTIONS(280), 1, anon_sym_DOT_DOT, - ACTIONS(362), 1, + ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(378), 1, - anon_sym_SEMI, - STATE(23), 1, + ACTIONS(298), 1, + anon_sym_COMMA, + ACTIONS(300), 1, + anon_sym_RBRACK, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, + ACTIONS(264), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(348), 2, + ACTIONS(272), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(350), 4, + ACTIONS(274), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7514] = 19, - ACTIONS(141), 1, + [4919] = 19, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, + ACTIONS(266), 1, anon_sym_AMP, - ACTIONS(344), 1, + ACTIONS(268), 1, anon_sym_PIPE, - ACTIONS(346), 1, + ACTIONS(270), 1, anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(276), 1, anon_sym_AMP_AMP, - ACTIONS(354), 1, + ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(360), 1, + ACTIONS(280), 1, anon_sym_DOT_DOT, - ACTIONS(362), 1, + ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(380), 1, - anon_sym_RPAREN, - STATE(23), 1, + ACTIONS(298), 1, + anon_sym_COMMA, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, + ACTIONS(264), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(348), 2, + ACTIONS(272), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(350), 4, + ACTIONS(274), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7580] = 19, - ACTIONS(141), 1, + [4985] = 19, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, + ACTIONS(266), 1, anon_sym_AMP, - ACTIONS(344), 1, + ACTIONS(268), 1, anon_sym_PIPE, - ACTIONS(346), 1, + ACTIONS(270), 1, anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(276), 1, anon_sym_AMP_AMP, - ACTIONS(354), 1, + ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(360), 1, + ACTIONS(280), 1, anon_sym_DOT_DOT, - ACTIONS(362), 1, + ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(382), 1, - ts_builtin_sym_end, - STATE(23), 1, + ACTIONS(302), 1, + anon_sym_RPAREN, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, + ACTIONS(264), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(348), 2, + ACTIONS(272), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(350), 4, + ACTIONS(274), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7646] = 19, - ACTIONS(141), 1, + [5051] = 19, + ACTIONS(29), 1, anon_sym_COLON, - ACTIONS(143), 1, + ACTIONS(100), 1, anon_sym_LPAREN, - ACTIONS(334), 1, + ACTIONS(258), 1, anon_sym_STAR_STAR, - ACTIONS(338), 1, + ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(342), 1, + ACTIONS(266), 1, anon_sym_AMP, - ACTIONS(344), 1, + ACTIONS(268), 1, anon_sym_PIPE, - ACTIONS(346), 1, + ACTIONS(270), 1, anon_sym_CARET, - ACTIONS(352), 1, + ACTIONS(276), 1, anon_sym_AMP_AMP, - ACTIONS(354), 1, + ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(360), 1, + ACTIONS(280), 1, anon_sym_DOT_DOT, - ACTIONS(362), 1, + ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(370), 1, - anon_sym_COMMA, - STATE(23), 1, + ACTIONS(304), 1, + ts_builtin_sym_end, + STATE(25), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 2, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(336), 2, + ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(340), 2, + ACTIONS(264), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(348), 2, + ACTIONS(272), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(350), 4, + ACTIONS(274), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7712] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(298), 8, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(300), 12, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - [7741] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(384), 8, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(386), 12, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - [7770] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(388), 8, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(390), 12, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - [7799] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(392), 8, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(394), 12, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, + [5117] = 19, + ACTIONS(29), 1, + anon_sym_COLON, + ACTIONS(100), 1, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - [7828] = 3, + ACTIONS(258), 1, + anon_sym_STAR_STAR, + ACTIONS(262), 1, + anon_sym_SLASH_SLASH, + ACTIONS(266), 1, + anon_sym_AMP, + ACTIONS(268), 1, + anon_sym_PIPE, + ACTIONS(270), 1, + anon_sym_CARET, + ACTIONS(276), 1, + anon_sym_AMP_AMP, + ACTIONS(278), 1, + anon_sym_PIPE_PIPE, + ACTIONS(280), 1, + anon_sym_DOT_DOT, + ACTIONS(282), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(306), 1, + anon_sym_else, + STATE(25), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(396), 8, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - anon_sym_for, - ACTIONS(398), 12, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, + ACTIONS(260), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(264), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(272), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(274), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [5183] = 19, + ACTIONS(29), 1, + anon_sym_COLON, + ACTIONS(100), 1, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_RBRACE, - [7857] = 3, + ACTIONS(258), 1, + anon_sym_STAR_STAR, + ACTIONS(262), 1, + anon_sym_SLASH_SLASH, + ACTIONS(266), 1, + anon_sym_AMP, + ACTIONS(268), 1, + anon_sym_PIPE, + ACTIONS(270), 1, + anon_sym_CARET, + ACTIONS(276), 1, + anon_sym_AMP_AMP, + ACTIONS(278), 1, + anon_sym_PIPE_PIPE, + ACTIONS(280), 1, + anon_sym_DOT_DOT, + ACTIONS(282), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(308), 1, + anon_sym_else, + STATE(25), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(400), 6, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - ACTIONS(283), 12, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + ACTIONS(256), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_LBRACE, - [7884] = 3, + ACTIONS(260), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(264), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(272), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(274), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [5249] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(402), 6, + ACTIONS(310), 6, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, - ACTIONS(404), 11, + ACTIONS(230), 11, sym_string, sym_void, aux_sym_octal_token1, @@ -8741,861 +7397,625 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG, anon_sym_LPAREN, anon_sym_LBRACK, - anon_sym_LBRACE, - [7910] = 7, - ACTIONS(121), 1, + anon_sym_RBRACK, + [5275] = 7, + ACTIONS(65), 1, anon_sym_COMMA, - ACTIONS(123), 1, + ACTIONS(67), 1, sym_varadic_dots, - ACTIONS(406), 1, + ACTIONS(312), 1, sym_identifier, - STATE(124), 1, + STATE(114), 1, aux_sym_struct_definition_repeat1, - STATE(143), 1, + STATE(129), 1, sym_struct_member, - STATE(168), 1, + STATE(138), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7933] = 7, - ACTIONS(123), 1, + [5298] = 7, + ACTIONS(67), 1, sym_varadic_dots, - ACTIONS(406), 1, + ACTIONS(312), 1, sym_identifier, - ACTIONS(408), 1, + ACTIONS(314), 1, anon_sym_RPAREN, - STATE(127), 1, + STATE(115), 1, aux_sym_struct_definition_repeat1, - STATE(143), 1, + STATE(129), 1, sym_struct_member, - STATE(166), 1, + STATE(142), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [7956] = 5, - ACTIONS(410), 1, + [5321] = 5, + ACTIONS(316), 1, + sym_identifier, + STATE(115), 1, + aux_sym_struct_definition_repeat1, + STATE(141), 1, + sym_struct_member, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(319), 2, + anon_sym_RPAREN, + sym_varadic_dots, + [5339] = 5, + ACTIONS(321), 1, sym_identifier, - ACTIONS(412), 1, + ACTIONS(323), 1, sym_void, - ACTIONS(414), 1, + ACTIONS(325), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(65), 2, + STATE(44), 2, sym_path, sym_struct_definition, - [7974] = 5, - ACTIONS(410), 1, + [5357] = 5, + ACTIONS(321), 1, sym_identifier, - ACTIONS(414), 1, + ACTIONS(325), 1, anon_sym_LPAREN, - ACTIONS(416), 1, + ACTIONS(327), 1, sym_void, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(88), 2, + STATE(68), 2, sym_path, sym_struct_definition, - [7992] = 5, - ACTIONS(418), 1, + [5375] = 4, + ACTIONS(63), 1, + anon_sym_RPAREN, + ACTIONS(329), 1, sym_identifier, - STATE(127), 1, - aux_sym_struct_definition_repeat1, - STATE(173), 1, - sym_struct_member, + STATE(122), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(421), 2, - anon_sym_RPAREN, - sym_varadic_dots, - [8010] = 4, - ACTIONS(423), 1, + [5389] = 4, + ACTIONS(329), 1, sym_identifier, - ACTIONS(426), 1, - anon_sym_RBRACK, + ACTIONS(331), 1, + anon_sym_RPAREN, STATE(128), 1, - aux_sym_closure_captured_variables_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8024] = 3, - ACTIONS(430), 1, - anon_sym_EQ, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(428), 2, + [5403] = 4, + ACTIONS(333), 1, anon_sym_RPAREN, + ACTIONS(335), 1, anon_sym_COMMA, - [8036] = 4, - ACTIONS(432), 1, - sym_identifier, - ACTIONS(434), 1, - anon_sym_RPAREN, - STATE(140), 1, - sym_dictionary_member_assignment, + STATE(120), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8050] = 4, - ACTIONS(436), 1, - sym_identifier, - ACTIONS(438), 1, - anon_sym_RBRACK, - STATE(132), 1, - aux_sym_closure_captured_variables_repeat1, + [5417] = 3, + ACTIONS(340), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8064] = 4, - ACTIONS(440), 1, - sym_identifier, - ACTIONS(442), 1, - anon_sym_RBRACK, - STATE(128), 1, - aux_sym_closure_captured_variables_repeat1, + ACTIONS(338), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [5429] = 4, + ACTIONS(342), 1, + anon_sym_RPAREN, + ACTIONS(344), 1, + anon_sym_COMMA, + STATE(125), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8078] = 2, + [5443] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(421), 3, + ACTIONS(319), 3, sym_identifier, anon_sym_RPAREN, sym_varadic_dots, - [8088] = 4, - ACTIONS(432), 1, + [5453] = 4, + ACTIONS(329), 1, sym_identifier, - ACTIONS(444), 1, + ACTIONS(346), 1, anon_sym_RPAREN, - STATE(140), 1, + STATE(128), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8102] = 4, - ACTIONS(446), 1, + [5467] = 4, + ACTIONS(346), 1, anon_sym_RPAREN, - ACTIONS(448), 1, + ACTIONS(348), 1, anon_sym_COMMA, - STATE(135), 1, + STATE(120), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8116] = 4, - ACTIONS(451), 1, - anon_sym_RPAREN, - ACTIONS(453), 1, - anon_sym_COMMA, - STATE(137), 1, - aux_sym_dictionary_construction_repeat1, + [5481] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8130] = 4, - ACTIONS(434), 1, + ACTIONS(350), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [5490] = 3, + ACTIONS(352), 1, anon_sym_RPAREN, - ACTIONS(455), 1, + ACTIONS(354), 1, anon_sym_COMMA, - STATE(135), 1, - aux_sym_dictionary_construction_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8144] = 4, - ACTIONS(119), 1, - anon_sym_RPAREN, - ACTIONS(432), 1, - sym_identifier, - STATE(136), 1, - sym_dictionary_member_assignment, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8158] = 3, - ACTIONS(457), 1, - aux_sym_base_ten_token1, - STATE(18), 1, - sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8169] = 2, + [5501] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(333), 2, anon_sym_RPAREN, anon_sym_COMMA, - [8178] = 3, - ACTIONS(459), 1, - anon_sym_RPAREN, - ACTIONS(461), 1, - anon_sym_COMMA, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8189] = 3, - ACTIONS(143), 1, - anon_sym_LPAREN, - STATE(36), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8200] = 3, - ACTIONS(459), 1, + [5510] = 3, + ACTIONS(352), 1, anon_sym_RPAREN, - ACTIONS(463), 1, + ACTIONS(356), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8211] = 3, - ACTIONS(410), 1, - sym_identifier, - STATE(160), 1, - sym_path, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8222] = 2, + [5521] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(465), 2, + ACTIONS(358), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [8231] = 2, + [5530] = 3, + ACTIONS(360), 1, + aux_sym_base_ten_token1, + STATE(16), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(467), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [8240] = 2, + [5541] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(469), 2, + ACTIONS(362), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [8249] = 2, + [5550] = 3, + ACTIONS(100), 1, + anon_sym_LPAREN, + STATE(30), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(471), 2, + [5561] = 3, + ACTIONS(364), 1, aux_sym_signed_integer_token1, + ACTIONS(366), 1, aux_sym_unsigned_integer_token1, - [8258] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(426), 2, - sym_identifier, - anon_sym_RBRACK, - [8267] = 3, - ACTIONS(356), 1, + [5572] = 3, + ACTIONS(286), 1, anon_sym_COLON, - STATE(129), 1, + STATE(121), 1, sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8278] = 3, - ACTIONS(442), 1, - anon_sym_RBRACK, - ACTIONS(473), 1, - anon_sym_COMMA, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8289] = 3, - ACTIONS(473), 1, - anon_sym_COMMA, - ACTIONS(475), 1, - anon_sym_RBRACK, + [5583] = 3, + ACTIONS(329), 1, + sym_identifier, + STATE(128), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8300] = 3, - ACTIONS(29), 1, - anon_sym_LBRACE, - STATE(37), 1, - sym_procedural_block, + [5594] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8311] = 3, - ACTIONS(477), 1, + ACTIONS(368), 2, aux_sym_signed_integer_token1, - ACTIONS(479), 1, aux_sym_unsigned_integer_token1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8322] = 3, - ACTIONS(432), 1, - sym_identifier, - STATE(140), 1, - sym_dictionary_member_assignment, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8333] = 2, - ACTIONS(481), 1, + [5603] = 2, + ACTIONS(370), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8341] = 2, - ACTIONS(483), 1, - anon_sym_DASH_GT, + [5611] = 2, + ACTIONS(372), 1, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8349] = 2, - ACTIONS(485), 1, + [5619] = 2, + ACTIONS(374), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8357] = 2, - ACTIONS(487), 1, - anon_sym_EQ, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8365] = 2, - ACTIONS(489), 1, - anon_sym_EQ, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8373] = 2, - ACTIONS(491), 1, - anon_sym_DASH_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8381] = 2, - ACTIONS(493), 1, - aux_sym_base_ten_token1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8389] = 2, - ACTIONS(495), 1, - sym_identifier, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8397] = 2, - ACTIONS(497), 1, - anon_sym_DASH_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8405] = 2, - ACTIONS(473), 1, + [5627] = 2, + ACTIONS(356), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8413] = 2, - ACTIONS(499), 1, + [5635] = 2, + ACTIONS(376), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8421] = 2, - ACTIONS(501), 1, - anon_sym_DASH_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8429] = 2, - ACTIONS(503), 1, - anon_sym_RPAREN, + [5643] = 2, + ACTIONS(378), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8437] = 2, - ACTIONS(505), 1, + [5651] = 2, + ACTIONS(380), 1, ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8445] = 2, - ACTIONS(507), 1, - anon_sym_in, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8453] = 2, - ACTIONS(509), 1, - aux_sym_binary_token2, + [5659] = 2, + ACTIONS(382), 1, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8461] = 2, - ACTIONS(511), 1, - sym_identifier, + [5667] = 2, + ACTIONS(384), 1, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8469] = 2, - ACTIONS(463), 1, - anon_sym_COMMA, + [5675] = 2, + ACTIONS(386), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8477] = 2, - ACTIONS(513), 1, + [5683] = 2, + ACTIONS(388), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [8485] = 2, - ACTIONS(515), 1, - anon_sym_DASH_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [8493] = 2, - ACTIONS(517), 1, - aux_sym_hex_token2, + [5691] = 2, + ACTIONS(390), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, }; static const uint32_t ts_small_parse_table_map[] = { - [SMALL_STATE(7)] = 0, - [SMALL_STATE(8)] = 107, - [SMALL_STATE(9)] = 214, - [SMALL_STATE(10)] = 321, - [SMALL_STATE(11)] = 428, - [SMALL_STATE(12)] = 487, - [SMALL_STATE(13)] = 545, - [SMALL_STATE(14)] = 607, - [SMALL_STATE(15)] = 663, - [SMALL_STATE(16)] = 719, - [SMALL_STATE(17)] = 775, - [SMALL_STATE(18)] = 833, - [SMALL_STATE(19)] = 889, - [SMALL_STATE(20)] = 951, - [SMALL_STATE(21)] = 1006, - [SMALL_STATE(22)] = 1061, - [SMALL_STATE(23)] = 1116, - [SMALL_STATE(24)] = 1171, - [SMALL_STATE(25)] = 1226, - [SMALL_STATE(26)] = 1281, - [SMALL_STATE(27)] = 1336, - [SMALL_STATE(28)] = 1391, - [SMALL_STATE(29)] = 1446, - [SMALL_STATE(30)] = 1501, - [SMALL_STATE(31)] = 1556, - [SMALL_STATE(32)] = 1611, - [SMALL_STATE(33)] = 1666, - [SMALL_STATE(34)] = 1721, - [SMALL_STATE(35)] = 1776, - [SMALL_STATE(36)] = 1831, - [SMALL_STATE(37)] = 1886, - [SMALL_STATE(38)] = 1941, - [SMALL_STATE(39)] = 1996, - [SMALL_STATE(40)] = 2051, - [SMALL_STATE(41)] = 2107, - [SMALL_STATE(42)] = 2199, - [SMALL_STATE(43)] = 2255, - [SMALL_STATE(44)] = 2347, - [SMALL_STATE(45)] = 2439, - [SMALL_STATE(46)] = 2526, - [SMALL_STATE(47)] = 2581, - [SMALL_STATE(48)] = 2644, - [SMALL_STATE(49)] = 2703, - [SMALL_STATE(50)] = 2768, - [SMALL_STATE(51)] = 2835, - [SMALL_STATE(52)] = 2906, - [SMALL_STATE(53)] = 2975, - [SMALL_STATE(54)] = 3048, - [SMALL_STATE(55)] = 3125, - [SMALL_STATE(56)] = 3204, - [SMALL_STATE(57)] = 3285, - [SMALL_STATE(58)] = 3371, - [SMALL_STATE(59)] = 3457, - [SMALL_STATE(60)] = 3543, - [SMALL_STATE(61)] = 3629, - [SMALL_STATE(62)] = 3715, - [SMALL_STATE(63)] = 3801, - [SMALL_STATE(64)] = 3887, - [SMALL_STATE(65)] = 3973, - [SMALL_STATE(66)] = 4059, - [SMALL_STATE(67)] = 4145, - [SMALL_STATE(68)] = 4231, - [SMALL_STATE(69)] = 4317, - [SMALL_STATE(70)] = 4403, - [SMALL_STATE(71)] = 4489, - [SMALL_STATE(72)] = 4575, - [SMALL_STATE(73)] = 4661, - [SMALL_STATE(74)] = 4747, - [SMALL_STATE(75)] = 4833, - [SMALL_STATE(76)] = 4919, - [SMALL_STATE(77)] = 5005, - [SMALL_STATE(78)] = 5091, - [SMALL_STATE(79)] = 5177, - [SMALL_STATE(80)] = 5263, - [SMALL_STATE(81)] = 5349, - [SMALL_STATE(82)] = 5435, - [SMALL_STATE(83)] = 5521, - [SMALL_STATE(84)] = 5607, - [SMALL_STATE(85)] = 5693, - [SMALL_STATE(86)] = 5779, - [SMALL_STATE(87)] = 5865, - [SMALL_STATE(88)] = 5951, - [SMALL_STATE(89)] = 6037, - [SMALL_STATE(90)] = 6123, - [SMALL_STATE(91)] = 6169, - [SMALL_STATE(92)] = 6215, - [SMALL_STATE(93)] = 6260, - [SMALL_STATE(94)] = 6326, - [SMALL_STATE(95)] = 6394, - [SMALL_STATE(96)] = 6464, - [SMALL_STATE(97)] = 6516, - [SMALL_STATE(98)] = 6564, - [SMALL_STATE(99)] = 6618, - [SMALL_STATE(100)] = 6674, - [SMALL_STATE(101)] = 6734, - [SMALL_STATE(102)] = 6792, - [SMALL_STATE(103)] = 6854, - [SMALL_STATE(104)] = 6902, - [SMALL_STATE(105)] = 6972, - [SMALL_STATE(106)] = 7039, - [SMALL_STATE(107)] = 7108, - [SMALL_STATE(108)] = 7177, - [SMALL_STATE(109)] = 7246, - [SMALL_STATE(110)] = 7313, - [SMALL_STATE(111)] = 7382, - [SMALL_STATE(112)] = 7448, - [SMALL_STATE(113)] = 7514, - [SMALL_STATE(114)] = 7580, - [SMALL_STATE(115)] = 7646, - [SMALL_STATE(116)] = 7712, - [SMALL_STATE(117)] = 7741, - [SMALL_STATE(118)] = 7770, - [SMALL_STATE(119)] = 7799, - [SMALL_STATE(120)] = 7828, - [SMALL_STATE(121)] = 7857, - [SMALL_STATE(122)] = 7884, - [SMALL_STATE(123)] = 7910, - [SMALL_STATE(124)] = 7933, - [SMALL_STATE(125)] = 7956, - [SMALL_STATE(126)] = 7974, - [SMALL_STATE(127)] = 7992, - [SMALL_STATE(128)] = 8010, - [SMALL_STATE(129)] = 8024, - [SMALL_STATE(130)] = 8036, - [SMALL_STATE(131)] = 8050, - [SMALL_STATE(132)] = 8064, - [SMALL_STATE(133)] = 8078, - [SMALL_STATE(134)] = 8088, - [SMALL_STATE(135)] = 8102, - [SMALL_STATE(136)] = 8116, - [SMALL_STATE(137)] = 8130, - [SMALL_STATE(138)] = 8144, - [SMALL_STATE(139)] = 8158, - [SMALL_STATE(140)] = 8169, - [SMALL_STATE(141)] = 8178, - [SMALL_STATE(142)] = 8189, - [SMALL_STATE(143)] = 8200, - [SMALL_STATE(144)] = 8211, - [SMALL_STATE(145)] = 8222, - [SMALL_STATE(146)] = 8231, - [SMALL_STATE(147)] = 8240, - [SMALL_STATE(148)] = 8249, - [SMALL_STATE(149)] = 8258, - [SMALL_STATE(150)] = 8267, - [SMALL_STATE(151)] = 8278, - [SMALL_STATE(152)] = 8289, - [SMALL_STATE(153)] = 8300, - [SMALL_STATE(154)] = 8311, - [SMALL_STATE(155)] = 8322, - [SMALL_STATE(156)] = 8333, - [SMALL_STATE(157)] = 8341, - [SMALL_STATE(158)] = 8349, - [SMALL_STATE(159)] = 8357, - [SMALL_STATE(160)] = 8365, - [SMALL_STATE(161)] = 8373, - [SMALL_STATE(162)] = 8381, - [SMALL_STATE(163)] = 8389, - [SMALL_STATE(164)] = 8397, - [SMALL_STATE(165)] = 8405, - [SMALL_STATE(166)] = 8413, - [SMALL_STATE(167)] = 8421, - [SMALL_STATE(168)] = 8429, - [SMALL_STATE(169)] = 8437, - [SMALL_STATE(170)] = 8445, - [SMALL_STATE(171)] = 8453, - [SMALL_STATE(172)] = 8461, - [SMALL_STATE(173)] = 8469, - [SMALL_STATE(174)] = 8477, - [SMALL_STATE(175)] = 8485, - [SMALL_STATE(176)] = 8493, + [SMALL_STATE(38)] = 0, + [SMALL_STATE(39)] = 82, + [SMALL_STATE(40)] = 164, + [SMALL_STATE(41)] = 246, + [SMALL_STATE(42)] = 328, + [SMALL_STATE(43)] = 410, + [SMALL_STATE(44)] = 492, + [SMALL_STATE(45)] = 574, + [SMALL_STATE(46)] = 656, + [SMALL_STATE(47)] = 738, + [SMALL_STATE(48)] = 820, + [SMALL_STATE(49)] = 902, + [SMALL_STATE(50)] = 984, + [SMALL_STATE(51)] = 1066, + [SMALL_STATE(52)] = 1148, + [SMALL_STATE(53)] = 1230, + [SMALL_STATE(54)] = 1312, + [SMALL_STATE(55)] = 1394, + [SMALL_STATE(56)] = 1446, + [SMALL_STATE(57)] = 1528, + [SMALL_STATE(58)] = 1610, + [SMALL_STATE(59)] = 1692, + [SMALL_STATE(60)] = 1774, + [SMALL_STATE(61)] = 1856, + [SMALL_STATE(62)] = 1938, + [SMALL_STATE(63)] = 2020, + [SMALL_STATE(64)] = 2102, + [SMALL_STATE(65)] = 2184, + [SMALL_STATE(66)] = 2266, + [SMALL_STATE(67)] = 2348, + [SMALL_STATE(68)] = 2430, + [SMALL_STATE(69)] = 2512, + [SMALL_STATE(70)] = 2594, + [SMALL_STATE(71)] = 2676, + [SMALL_STATE(72)] = 2758, + [SMALL_STATE(73)] = 2840, + [SMALL_STATE(74)] = 2915, + [SMALL_STATE(75)] = 2992, + [SMALL_STATE(76)] = 3049, + [SMALL_STATE(77)] = 3114, + [SMALL_STATE(78)] = 3177, + [SMALL_STATE(79)] = 3236, + [SMALL_STATE(80)] = 3291, + [SMALL_STATE(81)] = 3352, + [SMALL_STATE(82)] = 3419, + [SMALL_STATE(83)] = 3492, + [SMALL_STATE(84)] = 3561, + [SMALL_STATE(85)] = 3642, + [SMALL_STATE(86)] = 3691, + [SMALL_STATE(87)] = 3739, + [SMALL_STATE(88)] = 3784, + [SMALL_STATE(89)] = 3831, + [SMALL_STATE(90)] = 3904, + [SMALL_STATE(91)] = 3961, + [SMALL_STATE(92)] = 4022, + [SMALL_STATE(93)] = 4087, + [SMALL_STATE(94)] = 4154, + [SMALL_STATE(95)] = 4223, + [SMALL_STATE(96)] = 4282, + [SMALL_STATE(97)] = 4335, + [SMALL_STATE(98)] = 4376, + [SMALL_STATE(99)] = 4423, + [SMALL_STATE(100)] = 4474, + [SMALL_STATE(101)] = 4529, + [SMALL_STATE(102)] = 4577, + [SMALL_STATE(103)] = 4647, + [SMALL_STATE(104)] = 4714, + [SMALL_STATE(105)] = 4781, + [SMALL_STATE(106)] = 4850, + [SMALL_STATE(107)] = 4919, + [SMALL_STATE(108)] = 4985, + [SMALL_STATE(109)] = 5051, + [SMALL_STATE(110)] = 5117, + [SMALL_STATE(111)] = 5183, + [SMALL_STATE(112)] = 5249, + [SMALL_STATE(113)] = 5275, + [SMALL_STATE(114)] = 5298, + [SMALL_STATE(115)] = 5321, + [SMALL_STATE(116)] = 5339, + [SMALL_STATE(117)] = 5357, + [SMALL_STATE(118)] = 5375, + [SMALL_STATE(119)] = 5389, + [SMALL_STATE(120)] = 5403, + [SMALL_STATE(121)] = 5417, + [SMALL_STATE(122)] = 5429, + [SMALL_STATE(123)] = 5443, + [SMALL_STATE(124)] = 5453, + [SMALL_STATE(125)] = 5467, + [SMALL_STATE(126)] = 5481, + [SMALL_STATE(127)] = 5490, + [SMALL_STATE(128)] = 5501, + [SMALL_STATE(129)] = 5510, + [SMALL_STATE(130)] = 5521, + [SMALL_STATE(131)] = 5530, + [SMALL_STATE(132)] = 5541, + [SMALL_STATE(133)] = 5550, + [SMALL_STATE(134)] = 5561, + [SMALL_STATE(135)] = 5572, + [SMALL_STATE(136)] = 5583, + [SMALL_STATE(137)] = 5594, + [SMALL_STATE(138)] = 5603, + [SMALL_STATE(139)] = 5611, + [SMALL_STATE(140)] = 5619, + [SMALL_STATE(141)] = 5627, + [SMALL_STATE(142)] = 5635, + [SMALL_STATE(143)] = 5643, + [SMALL_STATE(144)] = 5651, + [SMALL_STATE(145)] = 5659, + [SMALL_STATE(146)] = 5667, + [SMALL_STATE(147)] = 5675, + [SMALL_STATE(148)] = 5683, + [SMALL_STATE(149)] = 5691, }; 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 = false}}, SHIFT(2), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(90), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(5), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(24), - [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), - [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(61), - [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), - [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [31] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), - [33] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), - [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(174), - [37] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), - [39] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), - [41] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(174), - [44] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), - [46] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), - [48] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [50] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [52] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), - [54] = {.entry = {.count = 1, .reusable = false}}, SHIFT(122), - [56] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [58] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), - [60] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [62] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [64] = {.entry = {.count = 1, .reusable = false}}, SHIFT(144), - [66] = {.entry = {.count = 1, .reusable = false}}, SHIFT(163), - [68] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [70] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(2), - [73] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(35), - [76] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(35), - [79] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(40), - [82] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(162), - [85] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(176), - [88] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(171), - [91] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(24), - [94] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(68), - [97] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(61), - [100] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [103] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(44), - [106] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(7), - [109] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), - [111] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(144), - [114] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_procedural_block_repeat1, 2, 0, 0), SHIFT_REPEAT(163), - [117] = {.entry = {.count = 1, .reusable = false}}, SHIFT(103), - [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), - [123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), - [125] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [127] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [129] = {.entry = {.count = 1, .reusable = false}}, SHIFT(139), - [131] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 3, 0, 7), - [133] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 3, 0, 7), - [135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(153), - [137] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), - [139] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), - [141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), - [143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), - [145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 2, 0, 0), - [147] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 2, 0, 0), - [149] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_procedural_block, 3, 0, 0), - [151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_procedural_block, 3, 0, 0), - [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), - [155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), - [157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 22), - [159] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 22), - [161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), - [163] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), - [165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 13), - [167] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 13), - [169] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), - [171] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), - [173] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), - [179] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), - [181] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), - [183] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), - [185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [187] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [189] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 0), - [199] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 0), - [201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [203] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), - [207] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), - [209] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 10), - [211] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 10), - [213] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 11), - [215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 11), - [217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 15), - [223] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 15), - [225] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 16), - [227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 16), - [229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 17), - [231] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 17), - [233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 18), - [235] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 18), - [237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [239] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [241] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 20), - [243] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 20), - [245] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), - [247] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(2), - [250] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(35), - [253] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(35), - [256] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(90), - [259] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(162), - [262] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(176), - [265] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(171), - [268] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(24), - [271] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(59), - [274] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(61), - [277] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [280] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(44), - [283] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [285] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(7), - [288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [298] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 1, 0, 0), - [300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 1, 0, 0), - [302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), - [306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(72), - [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(74), - [314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), - [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), - [318] = {.entry = {.count = 1, .reusable = false}}, SHIFT(77), - [320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), - [322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), - [324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), - [326] = {.entry = {.count = 1, .reusable = false}}, SHIFT(80), - [328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), - [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), - [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), - [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [342] = {.entry = {.count = 1, .reusable = false}}, SHIFT(81), - [344] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82), - [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(84), - [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), - [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [358] = {.entry = {.count = 1, .reusable = false}}, SHIFT(89), - [360] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87), - [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), - [366] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), - [368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 14), - [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [374] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 19), - [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), - [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [382] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [384] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let, 5, 0, 23), - [386] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let, 5, 0, 23), - [388] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closed_expression, 2, 0, 0), - [390] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closed_expression, 2, 0, 0), - [392] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assign, 4, 0, 21), - [394] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assign, 4, 0, 21), - [396] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for, 5, 0, 24), - [398] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for, 5, 0, 24), - [400] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [402] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_operator, 1, 0, 3), - [404] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_operator, 1, 0, 3), - [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), - [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [418] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(150), - [421] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [423] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), SHIFT_REPEAT(165), - [426] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_closure_captured_variables_repeat1, 2, 0, 0), - [428] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 8), - [430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), - [434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), - [440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), - [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), - [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [446] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [448] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(155), - [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), - [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), - [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), - [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), - [465] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [469] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), - [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), - [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), - [483] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 3, 0, 0), - [485] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), - [491] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 2, 0, 0), - [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), - [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), - [497] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_captured_variables, 4, 0, 0), - [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), - [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [505] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), - [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), - [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38), + [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(49), + [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), + [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), + [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(61), + [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), + [51] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [55] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), + [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(101), + [63] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [69] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), + [71] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), + [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), + [75] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), + [77] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), + [79] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(143), + [82] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), + [84] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), + [86] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [88] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [90] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), + [92] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 0), + [94] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 0), + [96] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), + [98] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), + [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [102] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 8), + [104] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 8), + [106] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 10), + [108] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 10), + [110] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [112] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 17), + [116] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 17), + [118] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 11), + [120] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 11), + [122] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 12), + [124] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 12), + [126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 15), + [128] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 15), + [130] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [132] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [134] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [136] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [138] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [140] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [142] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [144] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [146] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), + [148] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), + [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [152] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [154] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), + [156] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), + [158] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), + [160] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), + [162] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 14), + [168] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 14), + [170] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [172] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [174] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 16), + [176] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 16), + [178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [180] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [182] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 20), + [184] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 20), + [186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 9), + [188] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 9), + [190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [192] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), + [194] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(5), + [197] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [200] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [203] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(87), + [206] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(146), + [209] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(145), + [212] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(139), + [215] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(24), + [218] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(49), + [221] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(38), + [224] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(4), + [227] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(34), + [230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), + [236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [238] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), + [240] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [248] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 18), + [250] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 18), + [252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [254] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), + [256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), + [262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [266] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), + [268] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), + [270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [272] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), + [274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), + [276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [280] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), + [282] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [284] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [286] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [288] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70), + [290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), + [292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), + [294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 19), + [296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 13), + [298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [310] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), + [314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [316] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(135), + [319] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [333] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [335] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(136), + [338] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 7), + [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [350] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [362] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [374] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [380] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), + [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), + [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), + [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), }; #ifdef __cplusplus @@ -9611,7 +8031,7 @@ extern "C" { TS_PUBLIC const TSLanguage *tree_sitter_command_cad_model(void) { static const TSLanguage language = { - .version = LANGUAGE_VERSION, + .abi_version = LANGUAGE_VERSION, .symbol_count = SYMBOL_COUNT, .alias_count = ALIAS_COUNT, .token_count = TOKEN_COUNT, @@ -9619,6 +8039,7 @@ TS_PUBLIC const TSLanguage *tree_sitter_command_cad_model(void) { .state_count = STATE_COUNT, .large_state_count = LARGE_STATE_COUNT, .production_id_count = PRODUCTION_ID_COUNT, + .supertype_count = SUPERTYPE_COUNT, .field_count = FIELD_COUNT, .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH, .parse_table = &ts_parse_table[0][0], @@ -9633,11 +8054,18 @@ TS_PUBLIC const TSLanguage *tree_sitter_command_cad_model(void) { .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_modes = (const void*)ts_lex_modes, .lex_fn = ts_lex, .keyword_lex_fn = ts_lex_keywords, .keyword_capture_token = sym_identifier, .primary_state_ids = ts_primary_state_ids, + .name = "command_cad_model", + .max_reserved_word_set_size = 0, + .metadata = { + .major_version = 0, + .minor_version = 1, + .patch_version = 0, + }, }; return &language; } diff --git a/crates/tree-sitter-command-cad-model/src/tree_sitter/array.h b/crates/tree-sitter-command-cad-model/src/tree_sitter/array.h index 15a3b23..a17a574 100644 --- a/crates/tree-sitter-command-cad-model/src/tree_sitter/array.h +++ b/crates/tree-sitter-command-cad-model/src/tree_sitter/array.h @@ -14,6 +14,7 @@ extern "C" { #include #ifdef _MSC_VER +#pragma warning(push) #pragma warning(disable : 4101) #elif defined(__GNUC__) || defined(__clang__) #pragma GCC diagnostic push @@ -278,7 +279,7 @@ static inline void _array__splice(Array *self, size_t element_size, #define _compare_int(a, b) ((int)*(a) - (int)(b)) #ifdef _MSC_VER -#pragma warning(default : 4101) +#pragma warning(pop) #elif defined(__GNUC__) || defined(__clang__) #pragma GCC diagnostic pop #endif diff --git a/crates/tree-sitter-command-cad-model/src/tree_sitter/parser.h b/crates/tree-sitter-command-cad-model/src/tree_sitter/parser.h index 799f599..858107d 100644 --- a/crates/tree-sitter-command-cad-model/src/tree_sitter/parser.h +++ b/crates/tree-sitter-command-cad-model/src/tree_sitter/parser.h @@ -18,6 +18,11 @@ typedef uint16_t TSStateId; typedef uint16_t TSSymbol; typedef uint16_t TSFieldId; typedef struct TSLanguage TSLanguage; +typedef struct TSLanguageMetadata { + uint8_t major_version; + uint8_t minor_version; + uint8_t patch_version; +} TSLanguageMetadata; #endif typedef struct { @@ -26,10 +31,11 @@ typedef struct { bool inherited; } TSFieldMapEntry; +// Used to index the field and supertype maps. typedef struct { uint16_t index; uint16_t length; -} TSFieldMapSlice; +} TSMapSlice; typedef struct { bool visible; @@ -79,6 +85,12 @@ typedef struct { uint16_t external_lex_state; } TSLexMode; +typedef struct { + uint16_t lex_state; + uint16_t external_lex_state; + uint16_t reserved_word_set_id; +} TSLexerMode; + typedef union { TSParseAction action; struct { @@ -93,7 +105,7 @@ typedef struct { } TSCharacterRange; struct TSLanguage { - uint32_t version; + uint32_t abi_version; uint32_t symbol_count; uint32_t alias_count; uint32_t token_count; @@ -109,13 +121,13 @@ struct TSLanguage { const TSParseActionEntry *parse_actions; const char * const *symbol_names; const char * const *field_names; - const TSFieldMapSlice *field_map_slices; + const TSMapSlice *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; + const TSLexerMode *lex_modes; bool (*lex_fn)(TSLexer *, TSStateId); bool (*keyword_lex_fn)(TSLexer *, TSStateId); TSSymbol keyword_capture_token; @@ -129,15 +141,23 @@ struct TSLanguage { void (*deserialize)(void *, const char *, unsigned); } external_scanner; const TSStateId *primary_state_ids; + const char *name; + const TSSymbol *reserved_words; + uint16_t max_reserved_word_set_size; + uint32_t supertype_count; + const TSSymbol *supertype_symbols; + const TSMapSlice *supertype_map_slices; + const TSSymbol *supertype_map_entries; + TSLanguageMetadata metadata; }; -static inline bool set_contains(TSCharacterRange *ranges, uint32_t len, int32_t lookahead) { +static inline bool set_contains(const TSCharacterRange *ranges, uint32_t len, int32_t lookahead) { uint32_t index = 0; uint32_t size = len - index; while (size > 1) { uint32_t half_size = size / 2; uint32_t mid_index = index + half_size; - TSCharacterRange *range = &ranges[mid_index]; + const TSCharacterRange *range = &ranges[mid_index]; if (lookahead >= range->start && lookahead <= range->end) { return true; } else if (lookahead > range->end) { @@ -145,7 +165,7 @@ static inline bool set_contains(TSCharacterRange *ranges, uint32_t len, int32_t } size -= half_size; } - TSCharacterRange *range = &ranges[index]; + const TSCharacterRange *range = &ranges[index]; return (lookahead >= range->start && lookahead <= range->end); } diff --git a/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt b/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt deleted file mode 100644 index da88916..0000000 --- a/crates/tree-sitter-command-cad-model/test/corpus/assignment.txt +++ /dev/null @@ -1,39 +0,0 @@ -================== -Assign -================== - - { - test = 5i; - } - ---- - -(source_file - (expression - (procedural_block - (statement - (assign - (path - (identifier)) - (assignment_operator) - (expression - (signed_integer (integer (base_ten))))))))) - -================== -Let -================== - -{ - let test = 5i; -} - ---- - -(source_file - (expression - (procedural_block - (statement - (let - (path (identifier)) - (expression - (signed_integer (integer (base_ten))))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index a7bc220..c293a35 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -2,7 +2,7 @@ Empty ================== -(,)[] -> std.None {} +(,) -> std.None ~ --- @@ -10,18 +10,17 @@ Empty (expression (closure_definition (struct_definition) - (closure_captured_variables) (path (identifier) (identifier)) (expression - (procedural_block))))) + (void))))) ================== With argument ================== -(argument: std.types.UInt)[] -> std.None {} +(argument: std.types.UInt) -> std.None ~ --- @@ -37,18 +36,17 @@ With argument (identifier) (identifier) (identifier)))))) - (closure_captured_variables) (path (identifier) (identifier)) (expression - (procedural_block))))) + (void))))) ================== Path for argument signature ================== -path.to.signature[] -> std.None {} +path.to.signature -> std.None ~ --- @@ -59,84 +57,11 @@ path.to.signature[] -> std.None {} (identifier) (identifier) (identifier)) - (closure_captured_variables) (path (identifier) (identifier)) (expression - (procedural_block))))) - -================== -Capture -================== - -(,)[a, b, c] -> std.None {} - ---- - -(source_file - (expression - (closure_definition - (struct_definition) - (closure_captured_variables - (identifier) - (identifier) - (identifier)) - (path - (identifier) - (identifier)) - (expression - (procedural_block))))) - -================== -Capture, -================== - -(,)[a, b, c,] -> std.None {} - ---- - -(source_file - (expression - (closure_definition - (struct_definition) - (closure_captured_variables - (identifier) - (identifier) - (identifier)) - (path - (identifier) - (identifier)) - (expression - (procedural_block))))) - -================== -With a statement -================== - -(,)[] -> std.None { - value = 5i; -} - ---- - -(source_file - (expression - (closure_definition - (struct_definition) - (closure_captured_variables) - (path - (identifier) - (identifier)) - (expression - (procedural_block - (statement - (assign - (path - (identifier)) - (assignment_operator) - (expression - (signed_integer (integer (base_ten))))))))))) + (void))))) ================== Call function @@ -259,115 +184,3 @@ value.value:value(value=value) (path (identifier)))))))) -================== -Closure as statement. -================== -{ - let types = std.types; - (,)[types] -> std.types.Void {} -} - ---- - -(source_file - (expression - (procedural_block - (statement - (let - (path - (identifier)) - (expression - (path - (identifier) - (identifier))))) - (statement - (expression - (closure_definition - (struct_definition) - (closure_captured_variables - (identifier)) - (path - (identifier) - (identifier) - (identifier)) - (expression - (procedural_block)))))))) - -================== -Closure as statement with path as argument. -================== -{ - let types = std.types; - types.Void[types] -> std.types.Void {} -} - ---- - -(source_file - (expression - (procedural_block - (statement - (let - (path - (identifier)) - (expression - (path - (identifier) - (identifier))))) - (statement - (expression - (closure_definition - (path - (identifier) - (identifier)) - (closure_captured_variables - (identifier)) - (path - (identifier) - (identifier) - (identifier)) - (expression - (procedural_block)))))))) - -================== -Closure as assignment. -================== -{ - let types = std.types; - let closure = (,)[types] -> std.types.Void {}; - - closure -} - ---- - -(source_file - (expression - (procedural_block - (statement - (let - (path - (identifier)) - (expression - (path - (identifier) - (identifier))))) - (statement - (let - (path - (identifier)) - (expression - (closure_definition - (struct_definition) - (closure_captured_variables - (identifier)) - (path - (identifier) - (identifier) - (identifier)) - (expression - (procedural_block)))))) - (statement - (expression - (path - (identifier))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt b/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt deleted file mode 100644 index 32e5256..0000000 --- a/crates/tree-sitter-command-cad-model/test/corpus/code_block.txt +++ /dev/null @@ -1,118 +0,0 @@ -================== -Empty -================== - -{} - ---- - -(source_file - (expression - (procedural_block))) - -================== -Closed statement -================== - -{ - 5i; -} - ---- - -(source_file - (expression - (procedural_block - (statement - (closed_expression - (expression - (signed_integer (integer (base_ten))))))))) - -================== -Closed statement followed by open statement -================== -{ - 5i; 5i -} - ---- - -(source_file - (expression - (procedural_block - (statement - (closed_expression - (expression - (signed_integer - (integer - (base_ten)))))) - (statement - (expression - (signed_integer - (integer - (base_ten)))))))) - -================== -Open statement -================== - -{ - 5i -} - ---- - -(source_file - (expression - (procedural_block - (statement - (expression - (signed_integer (integer (base_ten)))))))) - -================== -Two open statements -================== - -{ - 5i 5i -} - ---- - -(source_file - (expression - (procedural_block - (statement - (expression - (signed_integer (integer (base_ten))))) - (statement - (expression - (signed_integer (integer (base_ten)))))))) - -================== -If statement -================== - -{ - if this { - - } - - 5i -} - ---- - -(source_file - (expression - (procedural_block - (statement - (expression - (if - (expression - (path - (identifier))) - (procedural_block)))) - (statement - (expression - (signed_integer (integer (base_ten)))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt index e7cd292..2c8a42e 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt @@ -17,7 +17,7 @@ Comment before closure ================== # There's a comment before the code. -(,)[]->std.None {} +(,)->std.None ~ --- @@ -26,9 +26,8 @@ Comment before closure (expression (closure_definition (struct_definition) - (closure_captured_variables) (path (identifier) (identifier)) (expression - (procedural_block))))) + (void))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt b/crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt deleted file mode 100644 index e6d1da7..0000000 --- a/crates/tree-sitter-command-cad-model/test/corpus/for_loop.txt +++ /dev/null @@ -1,40 +0,0 @@ -================== -For loop -================== - - { - for x in y {} - } - ---- - -(source_file - (expression - (procedural_block - (statement - (for - (identifier) - (expression - (path - (identifier))) - (procedural_block)))))) - -================== -For with void -================== - - { - for x in ~ {} - } - ---- - -(source_file - (expression - (procedural_block - (statement - (for - (identifier) - (expression - (void)) - (procedural_block)))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/if.txt b/crates/tree-sitter-command-cad-model/test/corpus/if.txt index 7d85bbc..3839b00 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/if.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/if.txt @@ -1,23 +1,8 @@ -================== -If -================== - -if true {} - ---- - -(source_file - (expression - (if - (expression - (boolean (true))) - (procedural_block)))) - ================== If else ================== -if true {} else {} +if true ~ else ~ --- @@ -26,14 +11,16 @@ if true {} else {} (if (expression (boolean (true))) - (procedural_block) - (procedural_block)))) + (expression + (void)) + (expression + (void))))) ================== With other operations ================== -1 + if true {} +1 + if true ~ else ~ --- @@ -47,4 +34,7 @@ With other operations (if (expression (boolean (true))) - (procedural_block)))))) \ No newline at end of file + (expression + (void)) + (expression + (void))))))) From fa3ae3e1b7931ad34ecaeb9aeddbd184b565096b Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 22 Nov 2025 12:36:33 -0500 Subject: [PATCH 025/106] Remove void type --- .../tree-sitter-command-cad-model/grammar.js | 4 +- .../src/grammar.json | 12 - .../src/node-types.json | 12 - .../src/parser.c | 1765 ++++++++--------- .../test/corpus/closure.txt | 12 +- .../test/corpus/comments.txt | 8 +- .../test/corpus/if.txt | 12 +- .../test/corpus/primitives.txt | 12 - 8 files changed, 881 insertions(+), 956 deletions(-) diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 4bfaf69..b7b4f82 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -42,7 +42,6 @@ module.exports = grammar({ identifier: _ => /[a-zA-Z_][a-zA-Z0-9_]*/, string: _ => /\"(\\\"|[^\"])*\"/, default: _ => 'default', - void: _ => '~', base_ten: _ => /[0-9]+/, octal: _ => seq(token.immediate(/0o/), /[0-9]+/), @@ -81,7 +80,6 @@ module.exports = grammar({ ), expression: $ => choice( - $.void, $.parenthesis, $.default, $.signed_integer, @@ -197,7 +195,7 @@ module.exports = grammar({ closure_definition: $ => prec.left(PREC.closure, seq( field('argument', choice($.struct_definition, $.path)), '->', - field('result', choice($.struct_definition, $.path, $.void)), + field('result', choice($.struct_definition, $.path)), field('expression', $.expression), )), } diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index bfec573..9c5fa50 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -39,10 +39,6 @@ "type": "STRING", "value": "default" }, - "void": { - "type": "STRING", - "value": "~" - }, "base_ten": { "type": "PATTERN", "value": "[0-9]+" @@ -345,10 +341,6 @@ "expression": { "type": "CHOICE", "members": [ - { - "type": "SYMBOL", - "name": "void" - }, { "type": "SYMBOL", "name": "parenthesis" @@ -1607,10 +1599,6 @@ { "type": "SYMBOL", "name": "path" - }, - { - "type": "SYMBOL", - "name": "void" } ] } diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 3c7b07f..affb6fa 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -183,10 +183,6 @@ { "type": "struct_definition", "named": true - }, - { - "type": "void", - "named": true } ] } @@ -328,10 +324,6 @@ { "type": "unsigned_integer", "named": true - }, - { - "type": "void", - "named": true } ] } @@ -874,10 +866,6 @@ "type": "varadic_dots", "named": true }, - { - "type": "void", - "named": true - }, { "type": "|", "named": false diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index d9c292c..88d8be8 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -8,10 +8,10 @@ #define LANGUAGE_VERSION 15 #define STATE_COUNT 150 -#define LARGE_STATE_COUNT 38 -#define SYMBOL_COUNT 85 +#define LARGE_STATE_COUNT 34 +#define SYMBOL_COUNT 84 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 52 +#define TOKEN_COUNT 51 #define EXTERNAL_TOKEN_COUNT 0 #define FIELD_COUNT 21 #define MAX_ALIAS_SEQUENCE_LENGTH 5 @@ -25,85 +25,84 @@ enum ts_symbol_identifiers { sym__whitespace = 3, sym_string = 4, sym_default = 5, - sym_void = 6, - aux_sym_base_ten_token1 = 7, - aux_sym_octal_token1 = 8, - aux_sym_hex_token1 = 9, - aux_sym_hex_token2 = 10, - aux_sym_binary_token1 = 11, - aux_sym_binary_token2 = 12, - aux_sym_signed_integer_token1 = 13, - aux_sym_unsigned_integer_token1 = 14, - sym_unit_quote = 15, - anon_sym_DOT = 16, - sym_true = 17, - sym_false = 18, - anon_sym_COLON = 19, - anon_sym_DASH = 20, - anon_sym_PLUS = 21, - anon_sym_BANG = 22, - anon_sym_STAR_STAR = 23, - anon_sym_STAR = 24, - anon_sym_SLASH = 25, - anon_sym_SLASH_SLASH = 26, - anon_sym_LT_LT = 27, - anon_sym_GT_GT = 28, - anon_sym_AMP = 29, - anon_sym_PIPE = 30, - anon_sym_CARET = 31, - anon_sym_GT = 32, - anon_sym_GT_EQ = 33, - anon_sym_EQ_EQ = 34, - anon_sym_LT_EQ = 35, - anon_sym_LT = 36, - anon_sym_BANG_EQ = 37, - anon_sym_AMP_AMP = 38, - anon_sym_PIPE_PIPE = 39, - anon_sym_DOT_DOT = 40, - anon_sym_DOT_DOT_EQ = 41, - anon_sym_if = 42, - anon_sym_else = 43, - anon_sym_LPAREN = 44, - anon_sym_RPAREN = 45, - anon_sym_LBRACK = 46, - anon_sym_COMMA = 47, - anon_sym_RBRACK = 48, - sym_varadic_dots = 49, - anon_sym_EQ = 50, - anon_sym_DASH_GT = 51, - sym_source_file = 52, - sym_base_ten = 53, - sym_octal = 54, - sym_hex = 55, - sym_binary = 56, - sym_integer = 57, - sym_signed_integer = 58, - sym_unsigned_integer = 59, - sym_number = 60, - sym__float = 61, - sym__unit = 62, - sym_scalar = 63, - sym_boolean = 64, - sym_function_call = 65, - sym_method_call = 66, - sym_expression = 67, - sym_unary_expression = 68, - sym_binary_expression = 69, - sym_if = 70, - sym_path = 71, - sym_declaration_type = 72, - sym_parenthesis = 73, - sym_list = 74, - sym_struct_member = 75, - sym__struct_final_element = 76, - sym_struct_definition = 77, - sym_dictionary_member_assignment = 78, - sym_dictionary_construction = 79, - sym_closure_definition = 80, - aux_sym_path_repeat1 = 81, - aux_sym_list_repeat1 = 82, - aux_sym_struct_definition_repeat1 = 83, - aux_sym_dictionary_construction_repeat1 = 84, + aux_sym_base_ten_token1 = 6, + aux_sym_octal_token1 = 7, + aux_sym_hex_token1 = 8, + aux_sym_hex_token2 = 9, + aux_sym_binary_token1 = 10, + aux_sym_binary_token2 = 11, + aux_sym_signed_integer_token1 = 12, + aux_sym_unsigned_integer_token1 = 13, + sym_unit_quote = 14, + anon_sym_DOT = 15, + sym_true = 16, + sym_false = 17, + anon_sym_COLON = 18, + anon_sym_DASH = 19, + anon_sym_PLUS = 20, + anon_sym_BANG = 21, + anon_sym_STAR_STAR = 22, + anon_sym_STAR = 23, + anon_sym_SLASH = 24, + anon_sym_SLASH_SLASH = 25, + anon_sym_LT_LT = 26, + anon_sym_GT_GT = 27, + anon_sym_AMP = 28, + anon_sym_PIPE = 29, + anon_sym_CARET = 30, + anon_sym_GT = 31, + anon_sym_GT_EQ = 32, + anon_sym_EQ_EQ = 33, + anon_sym_LT_EQ = 34, + anon_sym_LT = 35, + anon_sym_BANG_EQ = 36, + anon_sym_AMP_AMP = 37, + anon_sym_PIPE_PIPE = 38, + anon_sym_DOT_DOT = 39, + anon_sym_DOT_DOT_EQ = 40, + anon_sym_if = 41, + anon_sym_else = 42, + anon_sym_LPAREN = 43, + anon_sym_RPAREN = 44, + anon_sym_LBRACK = 45, + anon_sym_COMMA = 46, + anon_sym_RBRACK = 47, + sym_varadic_dots = 48, + anon_sym_EQ = 49, + anon_sym_DASH_GT = 50, + sym_source_file = 51, + sym_base_ten = 52, + sym_octal = 53, + sym_hex = 54, + sym_binary = 55, + sym_integer = 56, + sym_signed_integer = 57, + sym_unsigned_integer = 58, + sym_number = 59, + sym__float = 60, + sym__unit = 61, + sym_scalar = 62, + sym_boolean = 63, + sym_function_call = 64, + sym_method_call = 65, + sym_expression = 66, + sym_unary_expression = 67, + sym_binary_expression = 68, + sym_if = 69, + sym_path = 70, + sym_declaration_type = 71, + sym_parenthesis = 72, + sym_list = 73, + sym_struct_member = 74, + sym__struct_final_element = 75, + sym_struct_definition = 76, + sym_dictionary_member_assignment = 77, + sym_dictionary_construction = 78, + sym_closure_definition = 79, + aux_sym_path_repeat1 = 80, + aux_sym_list_repeat1 = 81, + aux_sym_struct_definition_repeat1 = 82, + aux_sym_dictionary_construction_repeat1 = 83, }; static const char * const ts_symbol_names[] = { @@ -113,7 +112,6 @@ static const char * const ts_symbol_names[] = { [sym__whitespace] = "_whitespace", [sym_string] = "string", [sym_default] = "default", - [sym_void] = "void", [aux_sym_base_ten_token1] = "base_ten_token1", [aux_sym_octal_token1] = "octal_token1", [aux_sym_hex_token1] = "hex_token1", @@ -201,7 +199,6 @@ static const TSSymbol ts_symbol_map[] = { [sym__whitespace] = sym__whitespace, [sym_string] = sym_string, [sym_default] = sym_default, - [sym_void] = sym_void, [aux_sym_base_ten_token1] = aux_sym_base_ten_token1, [aux_sym_octal_token1] = aux_sym_octal_token1, [aux_sym_hex_token1] = aux_sym_hex_token1, @@ -307,10 +304,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [sym_void] = { - .visible = true, - .named = true, - }, [aux_sym_base_ten_token1] = { .visible = false, .named = false, @@ -927,56 +920,54 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { case 0: if (eof) ADVANCE(12); ADVANCE_MAP( - '!', 37, + '!', 36, '"', 2, '#', 13, - '&', 44, + '&', 43, '\'', 7, - '(', 58, - ')', 59, - '*', 39, - '+', 35, - ',', 61, - '-', 34, - '.', 30, - '/', 40, - '0', 19, - '1', 21, - ':', 32, - '<', 51, - '=', 64, - '>', 47, - '[', 60, - ']', 62, - '^', 46, - '|', 45, - '~', 18, + '(', 57, + ')', 58, + '*', 38, + '+', 34, + ',', 60, + '-', 33, + '.', 29, + '/', 39, + '0', 18, + '1', 20, + ':', 31, + '<', 50, + '=', 63, + '>', 46, + '[', 59, + ']', 61, + '^', 45, + '|', 44, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(14); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(22); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(21); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); END_STATE(); case 1: ADVANCE_MAP( - '!', 36, + '!', 35, '"', 2, '#', 13, - '(', 58, - ')', 59, - '+', 35, - ',', 61, - '-', 33, + '(', 57, + ')', 58, + '+', 34, + ',', 60, + '-', 32, '.', 10, - '0', 20, - '[', 60, - '~', 18, + '0', 19, + '[', 59, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(14); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(22); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(21); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); @@ -994,7 +985,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { case 4: if (lookahead == '#') ADVANCE(13); if (lookahead == '0' || - lookahead == '1') ADVANCE(27); + lookahead == '1') ADVANCE(26); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(14); END_STATE(); @@ -1002,7 +993,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '#') ADVANCE(13); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(14); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(21); END_STATE(); case 6: if (lookahead == '#') ADVANCE(13); @@ -1010,20 +1001,20 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { lookahead == ' ') ADVANCE(14); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(25); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(24); END_STATE(); case 7: - if (lookahead == '\'') ADVANCE(28); + if (lookahead == '\'') ADVANCE(27); if (lookahead == '\\') ADVANCE(8); if (lookahead != 0) ADVANCE(7); END_STATE(); case 8: - if (lookahead == '\'') ADVANCE(29); + if (lookahead == '\'') ADVANCE(28); if (lookahead == '\\') ADVANCE(8); if (lookahead != 0) ADVANCE(7); END_STATE(); case 9: - if (lookahead == '.') ADVANCE(63); + if (lookahead == '.') ADVANCE(62); END_STATE(); case 10: if (lookahead == '.') ADVANCE(9); @@ -1031,33 +1022,32 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { case 11: if (eof) ADVANCE(12); ADVANCE_MAP( - '!', 37, + '!', 36, '"', 2, '#', 13, - '&', 44, + '&', 43, '\'', 7, - '(', 58, - ')', 59, - '*', 39, - '+', 35, - ',', 61, - '-', 34, - '.', 31, - '/', 40, - '0', 20, - ':', 32, - '<', 51, - '=', 64, - '>', 47, - '[', 60, - ']', 62, - '^', 46, - '|', 45, - '~', 18, + '(', 57, + ')', 58, + '*', 38, + '+', 34, + ',', 60, + '-', 33, + '.', 30, + '/', 39, + '0', 19, + ':', 31, + '<', 50, + '=', 63, + '>', 46, + '[', 59, + ']', 61, + '^', 45, + '|', 44, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(14); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(22); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(21); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); @@ -1090,185 +1080,182 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead != 0) ADVANCE(2); END_STATE(); case 18: - ACCEPT_TOKEN(sym_void); + ACCEPT_TOKEN(aux_sym_base_ten_token1); + if (lookahead == 'b') ADVANCE(25); + if (lookahead == 'o') ADVANCE(22); + if (lookahead == 'x') ADVANCE(23); + if (lookahead == '0' || + lookahead == '1') ADVANCE(20); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(21); END_STATE(); case 19: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(26); - if (lookahead == 'o') ADVANCE(23); - if (lookahead == 'x') ADVANCE(24); - if (lookahead == '0' || - lookahead == '1') ADVANCE(21); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(22); + if (lookahead == 'b') ADVANCE(25); + if (lookahead == 'o') ADVANCE(22); + if (lookahead == 'x') ADVANCE(23); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(21); END_STATE(); case 20: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(26); - if (lookahead == 'o') ADVANCE(23); - if (lookahead == 'x') ADVANCE(24); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); + if (lookahead == '0' || + lookahead == '1') ADVANCE(20); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(21); END_STATE(); case 21: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == '0' || - lookahead == '1') ADVANCE(21); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(22); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(21); END_STATE(); case 22: - ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); - END_STATE(); - case 23: ACCEPT_TOKEN(aux_sym_octal_token1); END_STATE(); - case 24: + case 23: ACCEPT_TOKEN(aux_sym_hex_token1); END_STATE(); - case 25: + case 24: ACCEPT_TOKEN(aux_sym_hex_token2); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(25); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(24); END_STATE(); - case 26: + case 25: ACCEPT_TOKEN(aux_sym_binary_token1); END_STATE(); - case 27: + case 26: ACCEPT_TOKEN(aux_sym_binary_token2); if (lookahead == '0' || - lookahead == '1') ADVANCE(27); + lookahead == '1') ADVANCE(26); END_STATE(); - case 28: + case 27: ACCEPT_TOKEN(sym_unit_quote); END_STATE(); - case 29: + case 28: ACCEPT_TOKEN(sym_unit_quote); - if (lookahead == '\'') ADVANCE(28); + if (lookahead == '\'') ADVANCE(27); if (lookahead == '\\') ADVANCE(8); if (lookahead != 0) ADVANCE(7); END_STATE(); + case 29: + ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(54); + END_STATE(); case 30: ACCEPT_TOKEN(anon_sym_DOT); if (lookahead == '.') ADVANCE(55); END_STATE(); case 31: - ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(56); + ACCEPT_TOKEN(anon_sym_COLON); END_STATE(); case 32: - ACCEPT_TOKEN(anon_sym_COLON); + ACCEPT_TOKEN(anon_sym_DASH); END_STATE(); case 33: ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '>') ADVANCE(64); END_STATE(); case 34: - ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '>') ADVANCE(65); + ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); case 35: - ACCEPT_TOKEN(anon_sym_PLUS); + ACCEPT_TOKEN(anon_sym_BANG); END_STATE(); case 36: ACCEPT_TOKEN(anon_sym_BANG); + if (lookahead == '=') ADVANCE(51); END_STATE(); case 37: - ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(52); + ACCEPT_TOKEN(anon_sym_STAR_STAR); END_STATE(); case 38: - ACCEPT_TOKEN(anon_sym_STAR_STAR); + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '*') ADVANCE(37); END_STATE(); case 39: - ACCEPT_TOKEN(anon_sym_STAR); - if (lookahead == '*') ADVANCE(38); + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '/') ADVANCE(40); END_STATE(); case 40: - ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '/') ADVANCE(41); + ACCEPT_TOKEN(anon_sym_SLASH_SLASH); END_STATE(); case 41: - ACCEPT_TOKEN(anon_sym_SLASH_SLASH); + ACCEPT_TOKEN(anon_sym_LT_LT); END_STATE(); case 42: - ACCEPT_TOKEN(anon_sym_LT_LT); + ACCEPT_TOKEN(anon_sym_GT_GT); END_STATE(); case 43: - ACCEPT_TOKEN(anon_sym_GT_GT); + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(52); END_STATE(); case 44: - ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(53); + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '|') ADVANCE(53); END_STATE(); case 45: - ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '|') ADVANCE(54); + ACCEPT_TOKEN(anon_sym_CARET); END_STATE(); case 46: - ACCEPT_TOKEN(anon_sym_CARET); + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(47); + if (lookahead == '>') ADVANCE(42); END_STATE(); case 47: - ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(48); - if (lookahead == '>') ADVANCE(43); + ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); case 48: - ACCEPT_TOKEN(anon_sym_GT_EQ); + ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); case 49: - ACCEPT_TOKEN(anon_sym_EQ_EQ); + ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); case 50: - ACCEPT_TOKEN(anon_sym_LT_EQ); + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '<') ADVANCE(41); + if (lookahead == '=') ADVANCE(49); END_STATE(); case 51: - ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(42); - if (lookahead == '=') ADVANCE(50); + ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); case 52: - ACCEPT_TOKEN(anon_sym_BANG_EQ); + ACCEPT_TOKEN(anon_sym_AMP_AMP); END_STATE(); case 53: - ACCEPT_TOKEN(anon_sym_AMP_AMP); + ACCEPT_TOKEN(anon_sym_PIPE_PIPE); END_STATE(); case 54: - ACCEPT_TOKEN(anon_sym_PIPE_PIPE); + ACCEPT_TOKEN(anon_sym_DOT_DOT); + if (lookahead == '.') ADVANCE(62); + if (lookahead == '=') ADVANCE(56); END_STATE(); case 55: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '.') ADVANCE(63); - if (lookahead == '=') ADVANCE(57); + if (lookahead == '=') ADVANCE(56); END_STATE(); case 56: - ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '=') ADVANCE(57); - END_STATE(); - case 57: ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); END_STATE(); - case 58: + case 57: ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); - case 59: + case 58: ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); - case 60: + case 59: ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); - case 61: + case 60: ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); - case 62: + case 61: ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); - case 63: + case 62: ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); - case 64: + case 63: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(49); + if (lookahead == '=') ADVANCE(48); END_STATE(); - case 65: + case 64: ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); default: @@ -1516,9 +1503,9 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [142] = {.lex_state = 0}, [143] = {.lex_state = 0}, [144] = {.lex_state = 0}, - [145] = {.lex_state = 6}, + [145] = {.lex_state = 0}, [146] = {.lex_state = 5}, - [147] = {.lex_state = 0}, + [147] = {.lex_state = 6}, [148] = {.lex_state = 0}, [149] = {.lex_state = 0}, }; @@ -1531,7 +1518,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(1), [sym_default] = ACTIONS(1), - [sym_void] = ACTIONS(1), [aux_sym_base_ten_token1] = ACTIONS(1), [aux_sym_octal_token1] = ACTIONS(1), [aux_sym_hex_token1] = ACTIONS(1), @@ -1607,7 +1593,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), [sym_default] = ACTIONS(9), - [sym_void] = ACTIONS(7), [aux_sym_base_ten_token1] = ACTIONS(11), [aux_sym_octal_token1] = ACTIONS(13), [aux_sym_hex_token1] = ACTIONS(15), @@ -1650,7 +1635,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), [sym_default] = ACTIONS(9), - [sym_void] = ACTIONS(7), [aux_sym_base_ten_token1] = ACTIONS(11), [aux_sym_octal_token1] = ACTIONS(13), [aux_sym_hex_token1] = ACTIONS(15), @@ -1713,7 +1697,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), [sym_default] = ACTIONS(9), - [sym_void] = ACTIONS(7), [aux_sym_base_ten_token1] = ACTIONS(11), [aux_sym_octal_token1] = ACTIONS(13), [aux_sym_hex_token1] = ACTIONS(15), @@ -1780,7 +1763,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), [sym_default] = ACTIONS(9), - [sym_void] = ACTIONS(7), [aux_sym_base_ten_token1] = ACTIONS(11), [aux_sym_octal_token1] = ACTIONS(13), [aux_sym_hex_token1] = ACTIONS(15), @@ -1805,7 +1787,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(69), [sym_default] = ACTIONS(71), - [sym_void] = ACTIONS(69), [aux_sym_base_ten_token1] = ACTIONS(71), [aux_sym_octal_token1] = ACTIONS(69), [aux_sym_hex_token1] = ACTIONS(69), @@ -1854,7 +1835,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(75), [sym_default] = ACTIONS(77), - [sym_void] = ACTIONS(75), [aux_sym_base_ten_token1] = ACTIONS(77), [aux_sym_octal_token1] = ACTIONS(75), [aux_sym_hex_token1] = ACTIONS(75), @@ -1903,7 +1883,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(82), [sym_default] = ACTIONS(84), - [sym_void] = ACTIONS(82), [aux_sym_base_ten_token1] = ACTIONS(84), [aux_sym_octal_token1] = ACTIONS(82), [aux_sym_hex_token1] = ACTIONS(82), @@ -1951,7 +1930,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(75), [sym_default] = ACTIONS(77), - [sym_void] = ACTIONS(75), [aux_sym_base_ten_token1] = ACTIONS(77), [aux_sym_octal_token1] = ACTIONS(75), [aux_sym_hex_token1] = ACTIONS(75), @@ -1999,7 +1977,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(86), [sym_default] = ACTIONS(88), - [sym_void] = ACTIONS(86), [aux_sym_base_ten_token1] = ACTIONS(88), [aux_sym_octal_token1] = ACTIONS(86), [aux_sym_hex_token1] = ACTIONS(86), @@ -2047,7 +2024,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(92), [sym_default] = ACTIONS(94), - [sym_void] = ACTIONS(92), [aux_sym_base_ten_token1] = ACTIONS(94), [aux_sym_octal_token1] = ACTIONS(92), [aux_sym_hex_token1] = ACTIONS(92), @@ -2095,7 +2071,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(96), [sym_default] = ACTIONS(98), - [sym_void] = ACTIONS(96), [aux_sym_base_ten_token1] = ACTIONS(98), [aux_sym_octal_token1] = ACTIONS(96), [aux_sym_hex_token1] = ACTIONS(96), @@ -2141,7 +2116,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(102), [sym_default] = ACTIONS(104), - [sym_void] = ACTIONS(102), [aux_sym_base_ten_token1] = ACTIONS(104), [aux_sym_octal_token1] = ACTIONS(102), [aux_sym_hex_token1] = ACTIONS(102), @@ -2188,7 +2162,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(106), [sym_default] = ACTIONS(108), - [sym_void] = ACTIONS(106), [aux_sym_base_ten_token1] = ACTIONS(108), [aux_sym_octal_token1] = ACTIONS(106), [aux_sym_hex_token1] = ACTIONS(106), @@ -2235,7 +2208,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(110), [sym_default] = ACTIONS(112), - [sym_void] = ACTIONS(110), [aux_sym_base_ten_token1] = ACTIONS(112), [aux_sym_octal_token1] = ACTIONS(110), [aux_sym_hex_token1] = ACTIONS(110), @@ -2283,7 +2255,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(114), [sym_default] = ACTIONS(116), - [sym_void] = ACTIONS(114), [aux_sym_base_ten_token1] = ACTIONS(116), [aux_sym_octal_token1] = ACTIONS(114), [aux_sym_hex_token1] = ACTIONS(114), @@ -2329,7 +2300,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(118), [sym_default] = ACTIONS(120), - [sym_void] = ACTIONS(118), [aux_sym_base_ten_token1] = ACTIONS(120), [aux_sym_octal_token1] = ACTIONS(118), [aux_sym_hex_token1] = ACTIONS(118), @@ -2377,7 +2347,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(122), [sym_default] = ACTIONS(124), - [sym_void] = ACTIONS(122), [aux_sym_base_ten_token1] = ACTIONS(124), [aux_sym_octal_token1] = ACTIONS(122), [aux_sym_hex_token1] = ACTIONS(122), @@ -2423,7 +2392,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(126), [sym_default] = ACTIONS(128), - [sym_void] = ACTIONS(126), [aux_sym_base_ten_token1] = ACTIONS(128), [aux_sym_octal_token1] = ACTIONS(126), [aux_sym_hex_token1] = ACTIONS(126), @@ -2470,7 +2438,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(130), [sym_default] = ACTIONS(132), - [sym_void] = ACTIONS(130), [aux_sym_base_ten_token1] = ACTIONS(132), [aux_sym_octal_token1] = ACTIONS(130), [aux_sym_hex_token1] = ACTIONS(130), @@ -2516,7 +2483,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(134), [sym_default] = ACTIONS(136), - [sym_void] = ACTIONS(134), [aux_sym_base_ten_token1] = ACTIONS(136), [aux_sym_octal_token1] = ACTIONS(134), [aux_sym_hex_token1] = ACTIONS(134), @@ -2562,7 +2528,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(138), [sym_default] = ACTIONS(140), - [sym_void] = ACTIONS(138), [aux_sym_base_ten_token1] = ACTIONS(140), [aux_sym_octal_token1] = ACTIONS(138), [aux_sym_hex_token1] = ACTIONS(138), @@ -2608,7 +2573,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(142), [sym_default] = ACTIONS(144), - [sym_void] = ACTIONS(142), [aux_sym_base_ten_token1] = ACTIONS(144), [aux_sym_octal_token1] = ACTIONS(142), [aux_sym_hex_token1] = ACTIONS(142), @@ -2654,7 +2618,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(146), [sym_default] = ACTIONS(148), - [sym_void] = ACTIONS(146), [aux_sym_base_ten_token1] = ACTIONS(148), [aux_sym_octal_token1] = ACTIONS(146), [aux_sym_hex_token1] = ACTIONS(146), @@ -2700,7 +2663,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(150), [sym_default] = ACTIONS(152), - [sym_void] = ACTIONS(150), [aux_sym_base_ten_token1] = ACTIONS(152), [aux_sym_octal_token1] = ACTIONS(150), [aux_sym_hex_token1] = ACTIONS(150), @@ -2746,7 +2708,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(154), [sym_default] = ACTIONS(156), - [sym_void] = ACTIONS(154), [aux_sym_base_ten_token1] = ACTIONS(156), [aux_sym_octal_token1] = ACTIONS(154), [aux_sym_hex_token1] = ACTIONS(154), @@ -2792,7 +2753,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(158), [sym_default] = ACTIONS(160), - [sym_void] = ACTIONS(158), [aux_sym_base_ten_token1] = ACTIONS(160), [aux_sym_octal_token1] = ACTIONS(158), [aux_sym_hex_token1] = ACTIONS(158), @@ -2838,7 +2798,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(162), [sym_default] = ACTIONS(164), - [sym_void] = ACTIONS(162), [aux_sym_base_ten_token1] = ACTIONS(164), [aux_sym_octal_token1] = ACTIONS(162), [aux_sym_hex_token1] = ACTIONS(162), @@ -2884,7 +2843,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(166), [sym_default] = ACTIONS(168), - [sym_void] = ACTIONS(166), [aux_sym_base_ten_token1] = ACTIONS(168), [aux_sym_octal_token1] = ACTIONS(166), [aux_sym_hex_token1] = ACTIONS(166), @@ -2930,7 +2888,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(170), [sym_default] = ACTIONS(172), - [sym_void] = ACTIONS(170), [aux_sym_base_ten_token1] = ACTIONS(172), [aux_sym_octal_token1] = ACTIONS(170), [aux_sym_hex_token1] = ACTIONS(170), @@ -2976,7 +2933,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(174), [sym_default] = ACTIONS(176), - [sym_void] = ACTIONS(174), [aux_sym_base_ten_token1] = ACTIONS(176), [aux_sym_octal_token1] = ACTIONS(174), [aux_sym_hex_token1] = ACTIONS(174), @@ -3022,7 +2978,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(178), [sym_default] = ACTIONS(180), - [sym_void] = ACTIONS(178), [aux_sym_base_ten_token1] = ACTIONS(180), [aux_sym_octal_token1] = ACTIONS(178), [aux_sym_hex_token1] = ACTIONS(178), @@ -3068,7 +3023,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(182), [sym_default] = ACTIONS(184), - [sym_void] = ACTIONS(182), [aux_sym_base_ten_token1] = ACTIONS(184), [aux_sym_octal_token1] = ACTIONS(182), [aux_sym_hex_token1] = ACTIONS(182), @@ -3114,7 +3068,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(186), [sym_default] = ACTIONS(188), - [sym_void] = ACTIONS(186), [aux_sym_base_ten_token1] = ACTIONS(188), [aux_sym_octal_token1] = ACTIONS(186), [aux_sym_hex_token1] = ACTIONS(186), @@ -3153,192 +3106,256 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_RBRACK] = ACTIONS(186), [anon_sym_EQ] = ACTIONS(188), }, - [STATE(34)] = { - [sym_base_ten] = STATE(130), - [sym_octal] = STATE(130), - [sym_hex] = STATE(130), - [sym_binary] = STATE(130), - [sym_integer] = STATE(134), - [sym_signed_integer] = STATE(20), - [sym_unsigned_integer] = STATE(20), - [sym_number] = STATE(9), - [sym__float] = STATE(88), - [sym_scalar] = STATE(20), - [sym_boolean] = STATE(20), - [sym_function_call] = STATE(20), - [sym_method_call] = STATE(20), - [sym_expression] = STATE(105), - [sym_unary_expression] = STATE(20), - [sym_binary_expression] = STATE(20), - [sym_if] = STATE(20), - [sym_path] = STATE(97), - [sym_parenthesis] = STATE(20), - [sym_list] = STATE(20), - [sym_struct_definition] = STATE(97), - [sym_dictionary_construction] = STATE(20), - [sym_closure_definition] = STATE(20), - [aux_sym_list_repeat1] = STATE(37), - [sym_identifier] = ACTIONS(5), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(7), - [sym_default] = ACTIONS(9), - [sym_void] = ACTIONS(7), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [sym_true] = ACTIONS(19), - [sym_false] = ACTIONS(19), - [anon_sym_DASH] = ACTIONS(21), - [anon_sym_PLUS] = ACTIONS(21), - [anon_sym_BANG] = ACTIONS(21), - [anon_sym_if] = ACTIONS(23), - [anon_sym_LPAREN] = ACTIONS(25), - [anon_sym_LBRACK] = ACTIONS(27), - [anon_sym_RBRACK] = ACTIONS(190), - }, - [STATE(35)] = { - [sym_identifier] = ACTIONS(112), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(110), - [sym_default] = ACTIONS(112), - [sym_void] = ACTIONS(110), - [aux_sym_base_ten_token1] = ACTIONS(112), - [aux_sym_octal_token1] = ACTIONS(110), - [aux_sym_hex_token1] = ACTIONS(110), - [aux_sym_binary_token1] = ACTIONS(110), - [aux_sym_signed_integer_token1] = ACTIONS(192), - [aux_sym_unsigned_integer_token1] = ACTIONS(192), - [sym_unit_quote] = ACTIONS(110), - [anon_sym_DOT] = ACTIONS(112), - [sym_true] = ACTIONS(112), - [sym_false] = ACTIONS(112), - [anon_sym_COLON] = ACTIONS(110), - [anon_sym_DASH] = ACTIONS(110), - [anon_sym_PLUS] = ACTIONS(110), - [anon_sym_BANG] = ACTIONS(112), - [anon_sym_STAR_STAR] = ACTIONS(110), - [anon_sym_STAR] = ACTIONS(112), - [anon_sym_SLASH] = ACTIONS(112), - [anon_sym_SLASH_SLASH] = ACTIONS(110), - [anon_sym_LT_LT] = ACTIONS(110), - [anon_sym_GT_GT] = ACTIONS(110), - [anon_sym_AMP] = ACTIONS(112), - [anon_sym_PIPE] = ACTIONS(112), - [anon_sym_CARET] = ACTIONS(110), - [anon_sym_GT] = ACTIONS(112), - [anon_sym_GT_EQ] = ACTIONS(110), - [anon_sym_EQ_EQ] = ACTIONS(110), - [anon_sym_LT_EQ] = ACTIONS(110), - [anon_sym_LT] = ACTIONS(112), - [anon_sym_BANG_EQ] = ACTIONS(110), - [anon_sym_AMP_AMP] = ACTIONS(110), - [anon_sym_PIPE_PIPE] = ACTIONS(110), - [anon_sym_DOT_DOT] = ACTIONS(112), - [anon_sym_DOT_DOT_EQ] = ACTIONS(110), - [anon_sym_if] = ACTIONS(112), - [anon_sym_else] = ACTIONS(112), - [anon_sym_LPAREN] = ACTIONS(110), - [anon_sym_LBRACK] = ACTIONS(110), - }, - [STATE(36)] = { - [sym_base_ten] = STATE(130), - [sym_octal] = STATE(130), - [sym_hex] = STATE(130), - [sym_binary] = STATE(130), - [sym_integer] = STATE(134), - [sym_signed_integer] = STATE(20), - [sym_unsigned_integer] = STATE(20), - [sym_number] = STATE(9), - [sym__float] = STATE(88), - [sym_scalar] = STATE(20), - [sym_boolean] = STATE(20), - [sym_function_call] = STATE(20), - [sym_method_call] = STATE(20), - [sym_expression] = STATE(107), - [sym_unary_expression] = STATE(20), - [sym_binary_expression] = STATE(20), - [sym_if] = STATE(20), - [sym_path] = STATE(97), - [sym_parenthesis] = STATE(20), - [sym_list] = STATE(20), - [sym_struct_definition] = STATE(97), - [sym_dictionary_construction] = STATE(20), - [sym_closure_definition] = STATE(20), - [aux_sym_list_repeat1] = STATE(36), - [sym_identifier] = ACTIONS(194), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(197), - [sym_default] = ACTIONS(200), - [sym_void] = ACTIONS(197), - [aux_sym_base_ten_token1] = ACTIONS(203), - [aux_sym_octal_token1] = ACTIONS(206), - [aux_sym_hex_token1] = ACTIONS(209), - [aux_sym_binary_token1] = ACTIONS(212), - [sym_true] = ACTIONS(215), - [sym_false] = ACTIONS(215), - [anon_sym_DASH] = ACTIONS(218), - [anon_sym_PLUS] = ACTIONS(218), - [anon_sym_BANG] = ACTIONS(218), - [anon_sym_if] = ACTIONS(221), - [anon_sym_LPAREN] = ACTIONS(224), - [anon_sym_LBRACK] = ACTIONS(227), - [anon_sym_RBRACK] = ACTIONS(230), - }, - [STATE(37)] = { - [sym_base_ten] = STATE(130), - [sym_octal] = STATE(130), - [sym_hex] = STATE(130), - [sym_binary] = STATE(130), - [sym_integer] = STATE(134), - [sym_signed_integer] = STATE(20), - [sym_unsigned_integer] = STATE(20), - [sym_number] = STATE(9), - [sym__float] = STATE(88), - [sym_scalar] = STATE(20), - [sym_boolean] = STATE(20), - [sym_function_call] = STATE(20), - [sym_method_call] = STATE(20), - [sym_expression] = STATE(106), - [sym_unary_expression] = STATE(20), - [sym_binary_expression] = STATE(20), - [sym_if] = STATE(20), - [sym_path] = STATE(97), - [sym_parenthesis] = STATE(20), - [sym_list] = STATE(20), - [sym_struct_definition] = STATE(97), - [sym_dictionary_construction] = STATE(20), - [sym_closure_definition] = STATE(20), - [aux_sym_list_repeat1] = STATE(36), - [sym_identifier] = ACTIONS(5), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(7), - [sym_default] = ACTIONS(9), - [sym_void] = ACTIONS(7), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [sym_true] = ACTIONS(19), - [sym_false] = ACTIONS(19), - [anon_sym_DASH] = ACTIONS(21), - [anon_sym_PLUS] = ACTIONS(21), - [anon_sym_BANG] = ACTIONS(21), - [anon_sym_if] = ACTIONS(23), - [anon_sym_LPAREN] = ACTIONS(25), - [anon_sym_LBRACK] = ACTIONS(27), - [anon_sym_RBRACK] = ACTIONS(232), - }, }; static const uint16_t ts_small_parse_table[] = { - [0] = 20, + [0] = 22, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(190), 1, + anon_sym_RBRACK, + STATE(9), 1, + sym_number, + STATE(37), 1, + aux_sym_list_repeat1, + STATE(88), 1, + sym__float, + STATE(105), 1, + sym_expression, + STATE(134), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + STATE(97), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(130), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 13, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + [87] = 4, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(192), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(112), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + anon_sym_DOT, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(110), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + sym_unit_quote, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + [138] = 22, + ACTIONS(194), 1, + sym_identifier, + ACTIONS(197), 1, + sym_string, + ACTIONS(200), 1, + sym_default, + ACTIONS(203), 1, + aux_sym_base_ten_token1, + ACTIONS(206), 1, + aux_sym_octal_token1, + ACTIONS(209), 1, + aux_sym_hex_token1, + ACTIONS(212), 1, + aux_sym_binary_token1, + ACTIONS(221), 1, + anon_sym_if, + ACTIONS(224), 1, + anon_sym_LPAREN, + ACTIONS(227), 1, + anon_sym_LBRACK, + ACTIONS(230), 1, + anon_sym_RBRACK, + STATE(9), 1, + sym_number, + STATE(36), 1, + aux_sym_list_repeat1, + STATE(88), 1, + sym__float, + STATE(107), 1, + sym_expression, + STATE(134), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(215), 2, + sym_true, + sym_false, + STATE(97), 2, + sym_path, + sym_struct_definition, + ACTIONS(218), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(130), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 13, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + [225] = 22, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(232), 1, + anon_sym_RBRACK, + STATE(9), 1, + sym_number, + STATE(36), 1, + aux_sym_list_repeat1, + STATE(88), 1, + sym__float, + STATE(106), 1, + sym_expression, + STATE(134), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + STATE(97), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(130), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(20), 13, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + [312] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -3366,9 +3383,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -3398,9 +3412,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [82] = 20, + [393] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -3428,9 +3444,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -3460,9 +3473,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [164] = 20, + [474] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -3490,9 +3505,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -3522,9 +3534,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [246] = 20, + [555] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -3552,9 +3566,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -3584,9 +3595,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [328] = 20, + [636] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -3614,9 +3627,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -3646,9 +3656,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [410] = 20, + [717] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -3676,9 +3688,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -3708,9 +3717,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [492] = 20, + [798] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -3738,9 +3749,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -3770,9 +3778,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [574] = 20, + [879] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -3800,9 +3810,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -3832,9 +3839,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [656] = 20, + [960] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -3862,9 +3871,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -3894,9 +3900,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [738] = 20, + [1041] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -3924,9 +3932,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -3956,9 +3961,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [820] = 20, + [1122] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -3986,9 +3993,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4018,9 +4022,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [902] = 20, + [1203] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -4048,9 +4054,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4080,9 +4083,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [984] = 20, + [1284] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -4110,9 +4115,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4142,9 +4144,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1066] = 20, + [1365] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -4172,9 +4176,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4204,9 +4205,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1148] = 20, + [1446] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -4234,9 +4237,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4266,9 +4266,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1230] = 20, + [1527] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -4296,9 +4298,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4328,9 +4327,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1312] = 20, + [1608] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -4358,9 +4359,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4390,7 +4388,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1394] = 5, + [1689] = 5, ACTIONS(244), 1, sym_unit_quote, STATE(23), 1, @@ -4414,9 +4412,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(242), 22, + ACTIONS(242), 21, sym_string, - sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -4437,9 +4434,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_LBRACK, - [1446] = 20, + [1740] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -4467,9 +4466,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4499,9 +4495,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1528] = 20, + [1821] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -4529,9 +4527,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4561,9 +4556,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1610] = 20, + [1902] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -4591,9 +4588,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4623,9 +4617,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1692] = 20, + [1983] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -4653,9 +4649,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4685,9 +4678,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1774] = 20, + [2064] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -4715,9 +4710,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4747,9 +4739,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1856] = 20, + [2145] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -4777,9 +4771,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4809,9 +4800,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1938] = 20, + [2226] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -4839,9 +4832,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4871,9 +4861,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2020] = 20, + [2307] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -4901,9 +4893,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4933,9 +4922,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2102] = 20, + [2388] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -4963,9 +4954,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -4995,9 +4983,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2184] = 20, + [2469] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -5025,9 +5015,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -5057,9 +5044,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2266] = 20, + [2550] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -5087,9 +5076,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -5119,9 +5105,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2348] = 20, + [2631] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -5149,9 +5137,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -5181,9 +5166,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2430] = 20, + [2712] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -5211,9 +5198,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -5243,9 +5227,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2512] = 20, + [2793] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -5273,9 +5259,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -5305,9 +5288,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2594] = 20, + [2874] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(11), 1, @@ -5335,9 +5320,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -5367,9 +5349,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2676] = 20, + [2955] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -5397,9 +5381,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -5429,9 +5410,11 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2758] = 20, + [3036] = 20, ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, ACTIONS(9), 1, sym_default, ACTIONS(13), 1, @@ -5459,9 +5442,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(7), 2, - sym_string, - sym_void, ACTIONS(19), 2, sym_true, sym_false, @@ -5491,7 +5471,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2840] = 17, + [3117] = 17, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(35), 1, @@ -5530,9 +5510,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(122), 8, + ACTIONS(122), 7, sym_string, - sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -5549,7 +5528,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - [2915] = 18, + [3191] = 18, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(35), 1, @@ -5590,9 +5569,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(122), 7, + ACTIONS(122), 6, sym_string, - sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -5608,7 +5586,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - [2992] = 8, + [3267] = 8, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -5618,9 +5596,8 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(122), 6, + ACTIONS(122), 5, sym_string, - sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -5657,7 +5634,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - [3049] = 12, + [3323] = 12, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(35), 1, @@ -5695,9 +5672,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(122), 14, + ACTIONS(122), 13, sym_string, - sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -5710,7 +5686,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - [3114] = 11, + [3387] = 11, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(35), 1, @@ -5733,6 +5709,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(246), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(122), 13, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, ACTIONS(124), 13, sym_identifier, sym_default, @@ -5747,22 +5737,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(122), 14, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - [3177] = 9, + [3449] = 9, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(35), 1, @@ -5793,9 +5768,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(122), 18, + ACTIONS(122), 17, sym_string, - sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -5812,7 +5786,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - [3236] = 7, + [3507] = 7, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(35), 1, @@ -5840,9 +5814,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(122), 19, + ACTIONS(122), 18, sym_string, - sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -5860,7 +5833,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - [3291] = 10, + [3561] = 10, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(35), 1, @@ -5894,9 +5867,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(122), 16, + ACTIONS(122), 15, sym_string, - sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -5911,7 +5883,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - [3352] = 13, + [3621] = 13, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(35), 1, @@ -5938,6 +5910,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(246), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(122), 12, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, ACTIONS(124), 12, sym_identifier, sym_default, @@ -5951,21 +5936,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(122), 13, - sym_string, - sym_void, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - [3419] = 16, + [3687] = 16, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(35), 1, @@ -6002,9 +5973,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(122), 9, + ACTIONS(122), 8, sym_string, - sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -6022,7 +5992,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - [3492] = 14, + [3759] = 14, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(35), 1, @@ -6063,9 +6033,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(122), 13, + ACTIONS(122), 12, sym_string, - sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -6077,7 +6046,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - [3561] = 20, + [3827] = 20, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(35), 1, @@ -6122,9 +6091,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(250), 6, + ACTIONS(250), 5, sym_string, - sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -6138,7 +6106,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG, anon_sym_if, anon_sym_else, - [3642] = 4, + [3907] = 4, ACTIONS(252), 1, anon_sym_DASH_GT, ACTIONS(3), 2, @@ -6161,9 +6129,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(134), 21, + ACTIONS(134), 20, sym_string, - sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -6183,7 +6150,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_LBRACK, - [3691] = 4, + [3955] = 4, ACTIONS(136), 1, anon_sym_else, ACTIONS(3), 2, @@ -6204,9 +6171,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - ACTIONS(154), 22, + ACTIONS(154), 21, sym_string, - sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -6227,7 +6193,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_LBRACK, - [3739] = 4, + [4002] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -6268,7 +6234,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [3784] = 6, + [4047] = 6, ACTIONS(244), 1, sym_unit_quote, ACTIONS(254), 1, @@ -6309,7 +6275,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [3831] = 20, + [4094] = 20, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -6362,7 +6328,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [3904] = 12, + [4167] = 12, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -6407,7 +6373,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [3961] = 14, + [4224] = 14, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -6454,7 +6420,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [4022] = 16, + [4285] = 16, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -6503,7 +6469,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [4087] = 17, + [4350] = 17, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -6553,7 +6519,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [4154] = 18, + [4417] = 18, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -6604,7 +6570,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [4223] = 13, + [4486] = 13, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -6650,7 +6616,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [4282] = 10, + [4545] = 10, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -6693,7 +6659,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [4335] = 4, + [4598] = 4, ACTIONS(284), 1, anon_sym_DASH_GT, ACTIONS(3), 2, @@ -6730,7 +6696,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [4376] = 7, + [4639] = 7, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -6770,7 +6736,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [4423] = 9, + [4686] = 9, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -6812,7 +6778,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [4474] = 11, + [4737] = 11, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -6856,7 +6822,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [4529] = 8, + [4792] = 8, ACTIONS(73), 1, anon_sym_DOT, ACTIONS(286), 1, @@ -6896,7 +6862,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_DASH_GT, - [4577] = 20, + [4840] = 20, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -6946,7 +6912,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [4647] = 19, + [4910] = 19, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -6994,7 +6960,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [4714] = 19, + [4977] = 19, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -7042,7 +7008,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [4781] = 20, + [5044] = 20, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -7091,7 +7057,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [4850] = 20, + [5113] = 20, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -7140,7 +7106,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [4919] = 19, + [5182] = 19, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -7187,7 +7153,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [4985] = 19, + [5248] = 19, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -7234,7 +7200,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5051] = 19, + [5314] = 19, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -7281,7 +7247,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5117] = 19, + [5380] = 19, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -7328,7 +7294,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5183] = 19, + [5446] = 19, ACTIONS(29), 1, anon_sym_COLON, ACTIONS(100), 1, @@ -7375,7 +7341,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5249] = 3, + [5512] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7386,9 +7352,8 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, anon_sym_if, - ACTIONS(230), 11, + ACTIONS(230), 10, sym_string, - sym_void, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, @@ -7398,7 +7363,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_RBRACK, - [5275] = 7, + [5537] = 7, ACTIONS(65), 1, anon_sym_COMMA, ACTIONS(67), 1, @@ -7414,7 +7379,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [5298] = 7, + [5560] = 7, ACTIONS(67), 1, sym_varadic_dots, ACTIONS(312), 1, @@ -7430,7 +7395,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [5321] = 5, + [5583] = 5, ACTIONS(316), 1, sym_identifier, STATE(115), 1, @@ -7443,12 +7408,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(319), 2, anon_sym_RPAREN, sym_varadic_dots, - [5339] = 5, + [5601] = 4, ACTIONS(321), 1, sym_identifier, ACTIONS(323), 1, - sym_void, - ACTIONS(325), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, @@ -7456,69 +7419,67 @@ static const uint16_t ts_small_parse_table[] = { STATE(44), 2, sym_path, sym_struct_definition, - [5357] = 5, + [5616] = 4, ACTIONS(321), 1, sym_identifier, - ACTIONS(325), 1, + ACTIONS(323), 1, anon_sym_LPAREN, - ACTIONS(327), 1, - sym_void, ACTIONS(3), 2, sym_comment, sym__whitespace, STATE(68), 2, sym_path, sym_struct_definition, - [5375] = 4, + [5631] = 4, ACTIONS(63), 1, anon_sym_RPAREN, - ACTIONS(329), 1, + ACTIONS(325), 1, sym_identifier, STATE(122), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5389] = 4, - ACTIONS(329), 1, + [5645] = 4, + ACTIONS(325), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(327), 1, anon_sym_RPAREN, STATE(128), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5403] = 4, - ACTIONS(333), 1, + [5659] = 4, + ACTIONS(329), 1, anon_sym_RPAREN, - ACTIONS(335), 1, + ACTIONS(331), 1, anon_sym_COMMA, STATE(120), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5417] = 3, - ACTIONS(340), 1, + [5673] = 3, + ACTIONS(336), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(338), 2, + ACTIONS(334), 2, anon_sym_RPAREN, anon_sym_COMMA, - [5429] = 4, - ACTIONS(342), 1, + [5685] = 4, + ACTIONS(338), 1, anon_sym_RPAREN, - ACTIONS(344), 1, + ACTIONS(340), 1, anon_sym_COMMA, STATE(125), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5443] = 2, + [5699] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7526,79 +7487,79 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, anon_sym_RPAREN, sym_varadic_dots, - [5453] = 4, - ACTIONS(329), 1, + [5709] = 4, + ACTIONS(325), 1, sym_identifier, - ACTIONS(346), 1, + ACTIONS(342), 1, anon_sym_RPAREN, STATE(128), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5467] = 4, - ACTIONS(346), 1, + [5723] = 4, + ACTIONS(342), 1, anon_sym_RPAREN, - ACTIONS(348), 1, + ACTIONS(344), 1, anon_sym_COMMA, STATE(120), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5481] = 2, + [5737] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(350), 2, + ACTIONS(346), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [5490] = 3, - ACTIONS(352), 1, + [5746] = 3, + ACTIONS(348), 1, anon_sym_RPAREN, - ACTIONS(354), 1, + ACTIONS(350), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5501] = 2, + [5757] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(333), 2, + ACTIONS(329), 2, anon_sym_RPAREN, anon_sym_COMMA, - [5510] = 3, - ACTIONS(352), 1, + [5766] = 3, + ACTIONS(348), 1, anon_sym_RPAREN, - ACTIONS(356), 1, + ACTIONS(352), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5521] = 2, + [5777] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(358), 2, + ACTIONS(354), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [5530] = 3, - ACTIONS(360), 1, + [5786] = 3, + ACTIONS(356), 1, aux_sym_base_ten_token1, STATE(16), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5541] = 2, + [5797] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(362), 2, + ACTIONS(358), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [5550] = 3, + [5806] = 3, ACTIONS(100), 1, anon_sym_LPAREN, STATE(30), 1, @@ -7606,15 +7567,15 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [5561] = 3, - ACTIONS(364), 1, + [5817] = 3, + ACTIONS(360), 1, aux_sym_signed_integer_token1, - ACTIONS(366), 1, + ACTIONS(362), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5572] = 3, + [5828] = 3, ACTIONS(286), 1, anon_sym_COLON, STATE(121), 1, @@ -7622,89 +7583,89 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [5583] = 3, - ACTIONS(329), 1, + [5839] = 3, + ACTIONS(325), 1, sym_identifier, STATE(128), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5594] = 2, + [5850] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(368), 2, + ACTIONS(364), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [5603] = 2, - ACTIONS(370), 1, + [5859] = 2, + ACTIONS(366), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5611] = 2, - ACTIONS(372), 1, + [5867] = 2, + ACTIONS(368), 1, aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5619] = 2, - ACTIONS(374), 1, + [5875] = 2, + ACTIONS(370), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5627] = 2, - ACTIONS(356), 1, + [5883] = 2, + ACTIONS(352), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5635] = 2, - ACTIONS(376), 1, + [5891] = 2, + ACTIONS(372), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5643] = 2, - ACTIONS(378), 1, + [5899] = 2, + ACTIONS(374), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5651] = 2, - ACTIONS(380), 1, + [5907] = 2, + ACTIONS(376), 1, ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5659] = 2, - ACTIONS(382), 1, - aux_sym_hex_token2, + [5915] = 2, + ACTIONS(378), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5667] = 2, - ACTIONS(384), 1, + [5923] = 2, + ACTIONS(380), 1, aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5675] = 2, - ACTIONS(386), 1, - anon_sym_EQ, + [5931] = 2, + ACTIONS(382), 1, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5683] = 2, - ACTIONS(388), 1, + [5939] = 2, + ACTIONS(384), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5691] = 2, - ACTIONS(390), 1, + [5947] = 2, + ACTIONS(386), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, @@ -7712,118 +7673,122 @@ static const uint16_t ts_small_parse_table[] = { }; static const uint32_t ts_small_parse_table_map[] = { - [SMALL_STATE(38)] = 0, - [SMALL_STATE(39)] = 82, - [SMALL_STATE(40)] = 164, - [SMALL_STATE(41)] = 246, - [SMALL_STATE(42)] = 328, - [SMALL_STATE(43)] = 410, - [SMALL_STATE(44)] = 492, - [SMALL_STATE(45)] = 574, - [SMALL_STATE(46)] = 656, - [SMALL_STATE(47)] = 738, - [SMALL_STATE(48)] = 820, - [SMALL_STATE(49)] = 902, - [SMALL_STATE(50)] = 984, - [SMALL_STATE(51)] = 1066, - [SMALL_STATE(52)] = 1148, - [SMALL_STATE(53)] = 1230, - [SMALL_STATE(54)] = 1312, - [SMALL_STATE(55)] = 1394, - [SMALL_STATE(56)] = 1446, - [SMALL_STATE(57)] = 1528, - [SMALL_STATE(58)] = 1610, - [SMALL_STATE(59)] = 1692, - [SMALL_STATE(60)] = 1774, - [SMALL_STATE(61)] = 1856, - [SMALL_STATE(62)] = 1938, - [SMALL_STATE(63)] = 2020, - [SMALL_STATE(64)] = 2102, - [SMALL_STATE(65)] = 2184, - [SMALL_STATE(66)] = 2266, - [SMALL_STATE(67)] = 2348, - [SMALL_STATE(68)] = 2430, - [SMALL_STATE(69)] = 2512, - [SMALL_STATE(70)] = 2594, - [SMALL_STATE(71)] = 2676, - [SMALL_STATE(72)] = 2758, - [SMALL_STATE(73)] = 2840, - [SMALL_STATE(74)] = 2915, - [SMALL_STATE(75)] = 2992, - [SMALL_STATE(76)] = 3049, - [SMALL_STATE(77)] = 3114, - [SMALL_STATE(78)] = 3177, - [SMALL_STATE(79)] = 3236, - [SMALL_STATE(80)] = 3291, - [SMALL_STATE(81)] = 3352, - [SMALL_STATE(82)] = 3419, - [SMALL_STATE(83)] = 3492, - [SMALL_STATE(84)] = 3561, - [SMALL_STATE(85)] = 3642, - [SMALL_STATE(86)] = 3691, - [SMALL_STATE(87)] = 3739, - [SMALL_STATE(88)] = 3784, - [SMALL_STATE(89)] = 3831, - [SMALL_STATE(90)] = 3904, - [SMALL_STATE(91)] = 3961, - [SMALL_STATE(92)] = 4022, - [SMALL_STATE(93)] = 4087, - [SMALL_STATE(94)] = 4154, - [SMALL_STATE(95)] = 4223, - [SMALL_STATE(96)] = 4282, - [SMALL_STATE(97)] = 4335, - [SMALL_STATE(98)] = 4376, - [SMALL_STATE(99)] = 4423, - [SMALL_STATE(100)] = 4474, - [SMALL_STATE(101)] = 4529, - [SMALL_STATE(102)] = 4577, - [SMALL_STATE(103)] = 4647, - [SMALL_STATE(104)] = 4714, - [SMALL_STATE(105)] = 4781, - [SMALL_STATE(106)] = 4850, - [SMALL_STATE(107)] = 4919, - [SMALL_STATE(108)] = 4985, - [SMALL_STATE(109)] = 5051, - [SMALL_STATE(110)] = 5117, - [SMALL_STATE(111)] = 5183, - [SMALL_STATE(112)] = 5249, - [SMALL_STATE(113)] = 5275, - [SMALL_STATE(114)] = 5298, - [SMALL_STATE(115)] = 5321, - [SMALL_STATE(116)] = 5339, - [SMALL_STATE(117)] = 5357, - [SMALL_STATE(118)] = 5375, - [SMALL_STATE(119)] = 5389, - [SMALL_STATE(120)] = 5403, - [SMALL_STATE(121)] = 5417, - [SMALL_STATE(122)] = 5429, - [SMALL_STATE(123)] = 5443, - [SMALL_STATE(124)] = 5453, - [SMALL_STATE(125)] = 5467, - [SMALL_STATE(126)] = 5481, - [SMALL_STATE(127)] = 5490, - [SMALL_STATE(128)] = 5501, - [SMALL_STATE(129)] = 5510, - [SMALL_STATE(130)] = 5521, - [SMALL_STATE(131)] = 5530, - [SMALL_STATE(132)] = 5541, - [SMALL_STATE(133)] = 5550, - [SMALL_STATE(134)] = 5561, - [SMALL_STATE(135)] = 5572, - [SMALL_STATE(136)] = 5583, - [SMALL_STATE(137)] = 5594, - [SMALL_STATE(138)] = 5603, - [SMALL_STATE(139)] = 5611, - [SMALL_STATE(140)] = 5619, - [SMALL_STATE(141)] = 5627, - [SMALL_STATE(142)] = 5635, - [SMALL_STATE(143)] = 5643, - [SMALL_STATE(144)] = 5651, - [SMALL_STATE(145)] = 5659, - [SMALL_STATE(146)] = 5667, - [SMALL_STATE(147)] = 5675, - [SMALL_STATE(148)] = 5683, - [SMALL_STATE(149)] = 5691, + [SMALL_STATE(34)] = 0, + [SMALL_STATE(35)] = 87, + [SMALL_STATE(36)] = 138, + [SMALL_STATE(37)] = 225, + [SMALL_STATE(38)] = 312, + [SMALL_STATE(39)] = 393, + [SMALL_STATE(40)] = 474, + [SMALL_STATE(41)] = 555, + [SMALL_STATE(42)] = 636, + [SMALL_STATE(43)] = 717, + [SMALL_STATE(44)] = 798, + [SMALL_STATE(45)] = 879, + [SMALL_STATE(46)] = 960, + [SMALL_STATE(47)] = 1041, + [SMALL_STATE(48)] = 1122, + [SMALL_STATE(49)] = 1203, + [SMALL_STATE(50)] = 1284, + [SMALL_STATE(51)] = 1365, + [SMALL_STATE(52)] = 1446, + [SMALL_STATE(53)] = 1527, + [SMALL_STATE(54)] = 1608, + [SMALL_STATE(55)] = 1689, + [SMALL_STATE(56)] = 1740, + [SMALL_STATE(57)] = 1821, + [SMALL_STATE(58)] = 1902, + [SMALL_STATE(59)] = 1983, + [SMALL_STATE(60)] = 2064, + [SMALL_STATE(61)] = 2145, + [SMALL_STATE(62)] = 2226, + [SMALL_STATE(63)] = 2307, + [SMALL_STATE(64)] = 2388, + [SMALL_STATE(65)] = 2469, + [SMALL_STATE(66)] = 2550, + [SMALL_STATE(67)] = 2631, + [SMALL_STATE(68)] = 2712, + [SMALL_STATE(69)] = 2793, + [SMALL_STATE(70)] = 2874, + [SMALL_STATE(71)] = 2955, + [SMALL_STATE(72)] = 3036, + [SMALL_STATE(73)] = 3117, + [SMALL_STATE(74)] = 3191, + [SMALL_STATE(75)] = 3267, + [SMALL_STATE(76)] = 3323, + [SMALL_STATE(77)] = 3387, + [SMALL_STATE(78)] = 3449, + [SMALL_STATE(79)] = 3507, + [SMALL_STATE(80)] = 3561, + [SMALL_STATE(81)] = 3621, + [SMALL_STATE(82)] = 3687, + [SMALL_STATE(83)] = 3759, + [SMALL_STATE(84)] = 3827, + [SMALL_STATE(85)] = 3907, + [SMALL_STATE(86)] = 3955, + [SMALL_STATE(87)] = 4002, + [SMALL_STATE(88)] = 4047, + [SMALL_STATE(89)] = 4094, + [SMALL_STATE(90)] = 4167, + [SMALL_STATE(91)] = 4224, + [SMALL_STATE(92)] = 4285, + [SMALL_STATE(93)] = 4350, + [SMALL_STATE(94)] = 4417, + [SMALL_STATE(95)] = 4486, + [SMALL_STATE(96)] = 4545, + [SMALL_STATE(97)] = 4598, + [SMALL_STATE(98)] = 4639, + [SMALL_STATE(99)] = 4686, + [SMALL_STATE(100)] = 4737, + [SMALL_STATE(101)] = 4792, + [SMALL_STATE(102)] = 4840, + [SMALL_STATE(103)] = 4910, + [SMALL_STATE(104)] = 4977, + [SMALL_STATE(105)] = 5044, + [SMALL_STATE(106)] = 5113, + [SMALL_STATE(107)] = 5182, + [SMALL_STATE(108)] = 5248, + [SMALL_STATE(109)] = 5314, + [SMALL_STATE(110)] = 5380, + [SMALL_STATE(111)] = 5446, + [SMALL_STATE(112)] = 5512, + [SMALL_STATE(113)] = 5537, + [SMALL_STATE(114)] = 5560, + [SMALL_STATE(115)] = 5583, + [SMALL_STATE(116)] = 5601, + [SMALL_STATE(117)] = 5616, + [SMALL_STATE(118)] = 5631, + [SMALL_STATE(119)] = 5645, + [SMALL_STATE(120)] = 5659, + [SMALL_STATE(121)] = 5673, + [SMALL_STATE(122)] = 5685, + [SMALL_STATE(123)] = 5699, + [SMALL_STATE(124)] = 5709, + [SMALL_STATE(125)] = 5723, + [SMALL_STATE(126)] = 5737, + [SMALL_STATE(127)] = 5746, + [SMALL_STATE(128)] = 5757, + [SMALL_STATE(129)] = 5766, + [SMALL_STATE(130)] = 5777, + [SMALL_STATE(131)] = 5786, + [SMALL_STATE(132)] = 5797, + [SMALL_STATE(133)] = 5806, + [SMALL_STATE(134)] = 5817, + [SMALL_STATE(135)] = 5828, + [SMALL_STATE(136)] = 5839, + [SMALL_STATE(137)] = 5850, + [SMALL_STATE(138)] = 5859, + [SMALL_STATE(139)] = 5867, + [SMALL_STATE(140)] = 5875, + [SMALL_STATE(141)] = 5883, + [SMALL_STATE(142)] = 5891, + [SMALL_STATE(143)] = 5899, + [SMALL_STATE(144)] = 5907, + [SMALL_STATE(145)] = 5915, + [SMALL_STATE(146)] = 5923, + [SMALL_STATE(147)] = 5931, + [SMALL_STATE(148)] = 5939, + [SMALL_STATE(149)] = 5947, }; static const TSParseActionEntry ts_parse_actions[] = { @@ -7835,7 +7800,7 @@ static const TSParseActionEntry ts_parse_actions[] = { [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87), [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(24), [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), @@ -7929,7 +7894,7 @@ static const TSParseActionEntry ts_parse_actions[] = { [200] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), [203] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(87), [206] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(146), - [209] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(145), + [209] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(147), [212] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(139), [215] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(24), [218] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(49), @@ -7982,40 +7947,38 @@ static const TSParseActionEntry ts_parse_actions[] = { [316] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(135), [319] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), - [327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [333] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [335] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(136), - [338] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 7), - [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), - [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), - [350] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [362] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [374] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), - [380] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [329] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [331] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(136), + [334] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 7), + [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [346] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [348] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [376] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), [382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), - [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), - [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), - [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), + [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index c293a35..f7de24e 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -2,7 +2,7 @@ Empty ================== -(,) -> std.None ~ +(,) -> std.None "" --- @@ -14,13 +14,13 @@ Empty (identifier) (identifier)) (expression - (void))))) + (string))))) ================== With argument ================== -(argument: std.types.UInt) -> std.None ~ +(argument: std.types.UInt) -> std.None "" --- @@ -40,13 +40,13 @@ With argument (identifier) (identifier)) (expression - (void))))) + (string))))) ================== Path for argument signature ================== -path.to.signature -> std.None ~ +path.to.signature -> std.None "" --- @@ -61,7 +61,7 @@ path.to.signature -> std.None ~ (identifier) (identifier)) (expression - (void))))) + (string))))) ================== Call function diff --git a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt index 2c8a42e..451deb9 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt @@ -3,21 +3,21 @@ Comment ================== # There's a comment before the code. -~ +"" --- (source_file (comment) (expression - (void))) + (string))) ================== Comment before closure ================== # There's a comment before the code. -(,)->std.None ~ +(,)->std.None "" --- @@ -30,4 +30,4 @@ Comment before closure (identifier) (identifier)) (expression - (void))))) + (string))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/if.txt b/crates/tree-sitter-command-cad-model/test/corpus/if.txt index 3839b00..912b50d 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/if.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/if.txt @@ -2,7 +2,7 @@ If else ================== -if true ~ else ~ +if true "" else "" --- @@ -12,15 +12,15 @@ if true ~ else ~ (expression (boolean (true))) (expression - (void)) + (string)) (expression - (void))))) + (string))))) ================== With other operations ================== -1 + if true ~ else ~ +1 + if true "" else "" --- @@ -35,6 +35,6 @@ With other operations (expression (boolean (true))) (expression - (void)) + (string)) (expression - (void))))))) + (string))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt b/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt index b4c4389..3d22cf3 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt @@ -1,15 +1,3 @@ -================== -Void -================== - -~ - ---- - -(source_file - (expression - (void))) - ================== String ================== From 9101b224e0a4d641d384748141b8374cd8a8ff76 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 22 Nov 2025 13:59:05 -0500 Subject: [PATCH 026/106] Add formulas to parser --- .../tree-sitter-command-cad-model/grammar.js | 136 +- .../src/grammar.json | 491 +- .../src/node-types.json | 204 + .../src/parser.c | 11710 ++++++++++------ .../test/corpus/closure.txt | 2 +- .../test/corpus/comments.txt | 2 +- .../test/corpus/formulas.txt | 52 + .../test/corpus/struct_definition.txt | 12 + 8 files changed, 8255 insertions(+), 4354 deletions(-) create mode 100644 crates/tree-sitter-command-cad-model/test/corpus/formulas.txt diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index b7b4f82..ba1ed51 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -30,6 +30,64 @@ const PREC = { struct_def: -2, }; +const unary_operator_table = ['-', '+', '!']; +const formula_unary_operator_table = ['-', '+']; + +function make_unary_expression(table, expression) { + return choice(...table.map((operator) => seq( + seq(field('op', operator), expression), + ))); +} + +const binary_operator_table = [ + [PREC.exponential, '**'], + + [PREC.multiplicative, '*'], + [PREC.multiplicative, '/'], + [PREC.multiplicative, '//'], + + [PREC.additive, '+'], + [PREC.additive, '-'], + + [PREC.shift, '<<'], + [PREC.shift, '>>'], + + [PREC.bitand, '&'], + [PREC.bitor, '|'], + [PREC.bitxor, '^'], + + [PREC.comparative, '>'], + [PREC.comparative, '>='], + [PREC.comparative, '=='], + [PREC.comparative, '<='], + [PREC.comparative, '<'], + [PREC.comparative, '!='], + + [PREC.and, '&&'], + [PREC.or, '||'], + + [PREC.range, '..'], + [PREC.range, '..='], +]; + +const formula_binary_operator_table = [ + [PREC.exponential, '**'], + + [PREC.multiplicative, '*'], + [PREC.multiplicative, '/'], + + [PREC.additive, '+'], + [PREC.additive, '-'], +]; + +function make_binary_expression(table, expression) { + return choice(...table.map(([precedence, operator]) => prec.left(precedence, seq( + field('a', expression), + field('op', operator), + field('b', expression), + )))); +} + module.exports = grammar({ name: "command_cad_model", extras: $ => [$.comment, $._whitespace], @@ -97,51 +155,10 @@ module.exports = grammar({ $.binary_expression, $.function_call, $.method_call, + $.formula ), - unary_expression: $ => prec(PREC.unary, choice( - seq(field('op', '-'), $.expression), - seq(field('op', '+'), $.expression), - seq(field('op', '!'), $.expression), - )), - binary_expression: $ => { - const table = [ - [PREC.exponential, '**'], - - [PREC.multiplicative, '*'], - [PREC.multiplicative, '/'], - [PREC.multiplicative, '//'], - - [PREC.additive, '+'], - [PREC.additive, '-'], - - [PREC.shift, '<<'], - [PREC.shift, '>>'], - - [PREC.bitand, '&'], - [PREC.bitor, '|'], - [PREC.bitxor, '^'], - - [PREC.comparative, '>'], - [PREC.comparative, '>='], - [PREC.comparative, '=='], - [PREC.comparative, '<='], - [PREC.comparative, '<'], - [PREC.comparative, '!='], - - [PREC.and, '&&'], - [PREC.or, '||'], - - [PREC.range, '..'], - [PREC.range, '..='], - - ]; - - return choice(...table.map(([precedence, operator]) => prec.left(precedence, seq( - field('a', $.expression), - field('op', operator), - field('b', $.expression), - )))); - }, + unary_expression: $=> make_unary_expression(unary_operator_table, $.expression), + binary_expression: $ => make_binary_expression(binary_operator_table, $.expression), if: $ => seq('if', field('condition', $.expression), field('on_true', $.expression), seq('else', field('on_false', $.expression))), @@ -165,13 +182,9 @@ module.exports = grammar({ seq($.varadic_dots, optional(',')) ), struct_definition: $ => prec.left(PREC.struct_def, seq('(', - choice( - seq( - field('members', repeat1(seq($.struct_member, ','))), - field('final_element', optional($._struct_final_element)), - ), - field('final_element', $._struct_final_element), - ',', // Empty struct. + seq( + optional(field('members', repeat1(seq($.struct_member, ',')))), + field('final_element', optional($._struct_final_element)), ), ')')), @@ -187,16 +200,27 @@ module.exports = grammar({ ')' ), - // closure_captured_variables: $ => seq( - // '[', - // seq(repeat(seq($.identifier, ',')), optional($.identifier)), - // ']' - // ), closure_definition: $ => prec.left(PREC.closure, seq( field('argument', choice($.struct_definition, $.path)), '->', field('result', choice($.struct_definition, $.path)), field('expression', $.expression), )), + + formula: $ => seq('<<<', field('lhs', $.formula_expression), field('relation', choice( + '>', '>=', '==', '<=', '<', '!=' + )), field('rhs', $.formula_expression), '>>>'), + formula_expression: $ => choice( + $.formula_parenthesis, + $.signed_integer, + $.unsigned_integer, + $.scalar, + $.identifier, + $.formula_unary_expression, + $.formula_binary_expression, + ), + formula_parenthesis: $ => seq('(', $.formula_expression, ')'), + formula_unary_expression: $ => make_unary_expression(formula_unary_operator_table, $.formula_expression), + formula_binary_expression: $ => make_binary_expression(formula_binary_operator_table, $.formula_expression), } }); diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 9c5fa50..dc9c26f 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -408,68 +408,83 @@ { "type": "SYMBOL", "name": "method_call" + }, + { + "type": "SYMBOL", + "name": "formula" } ] }, "unary_expression": { - "type": "PREC", - "value": 12, - "content": { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "-" + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "-" + } + }, + { + "type": "SYMBOL", + "name": "expression" } - }, - { - "type": "SYMBOL", - "name": "expression" - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "+" + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "+" + } + }, + { + "type": "SYMBOL", + "name": "expression" } - }, - { - "type": "SYMBOL", - "name": "expression" - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "!" + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "!" + } + }, + { + "type": "SYMBOL", + "name": "expression" } - }, - { - "type": "SYMBOL", - "name": "expression" - } - ] - } - ] - } + ] + } + ] + } + ] }, "binary_expression": { "type": "CHOICE", @@ -1408,10 +1423,10 @@ "value": "(" }, { - "type": "CHOICE", + "type": "SEQ", "members": [ { - "type": "SEQ", + "type": "CHOICE", "members": [ { "type": "FIELD", @@ -1434,20 +1449,7 @@ } }, { - "type": "FIELD", - "name": "final_element", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "_struct_final_element" - }, - { - "type": "BLANK" - } - ] - } + "type": "BLANK" } ] }, @@ -1455,13 +1457,17 @@ "type": "FIELD", "name": "final_element", "content": { - "type": "SYMBOL", - "name": "_struct_final_element" + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "_struct_final_element" + }, + { + "type": "BLANK" + } + ] } - }, - { - "type": "STRING", - "value": "," } ] }, @@ -1613,6 +1619,337 @@ } ] } + }, + "formula": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "<<<" + }, + { + "type": "FIELD", + "name": "lhs", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "FIELD", + "name": "relation", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": ">" + }, + { + "type": "STRING", + "value": ">=" + }, + { + "type": "STRING", + "value": "==" + }, + { + "type": "STRING", + "value": "<=" + }, + { + "type": "STRING", + "value": "<" + }, + { + "type": "STRING", + "value": "!=" + } + ] + } + }, + { + "type": "FIELD", + "name": "rhs", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "STRING", + "value": ">>>" + } + ] + }, + "formula_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "formula_parenthesis" + }, + { + "type": "SYMBOL", + "name": "signed_integer" + }, + { + "type": "SYMBOL", + "name": "unsigned_integer" + }, + { + "type": "SYMBOL", + "name": "scalar" + }, + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "formula_unary_expression" + }, + { + "type": "SYMBOL", + "name": "formula_binary_expression" + } + ] + }, + "formula_parenthesis": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "formula_expression" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "formula_unary_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "-" + } + }, + { + "type": "SYMBOL", + "name": "formula_expression" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "+" + } + }, + { + "type": "SYMBOL", + "name": "formula_expression" + } + ] + } + ] + } + ] + }, + "formula_binary_expression": { + "type": "CHOICE", + "members": [ + { + "type": "PREC_LEFT", + "value": 11, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "**" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "*" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "/" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 9, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "+" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 9, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "-" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + } + ] + } + } + ] } }, "extras": [ diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index affb6fa..8e59f99 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -277,6 +277,10 @@ "type": "dictionary_construction", "named": true }, + { + "type": "formula", + "named": true + }, { "type": "function_call", "named": true @@ -328,6 +332,198 @@ ] } }, + { + "type": "formula", + "named": true, + "fields": { + "lhs": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + }, + "relation": { + "multiple": false, + "required": true, + "types": [ + { + "type": "!=", + "named": false + }, + { + "type": "<", + "named": false + }, + { + "type": "<=", + "named": false + }, + { + "type": "==", + "named": false + }, + { + "type": ">", + "named": false + }, + { + "type": ">=", + "named": false + } + ] + }, + "rhs": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + } + } + }, + { + "type": "formula_binary_expression", + "named": true, + "fields": { + "a": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + }, + "b": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + }, + "op": { + "multiple": false, + "required": true, + "types": [ + { + "type": "*", + "named": false + }, + { + "type": "**", + "named": false + }, + { + "type": "+", + "named": false + }, + { + "type": "-", + "named": false + }, + { + "type": "/", + "named": false + } + ] + } + } + }, + { + "type": "formula_expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_binary_expression", + "named": true + }, + { + "type": "formula_parenthesis", + "named": true + }, + { + "type": "formula_unary_expression", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "scalar", + "named": true + }, + { + "type": "signed_integer", + "named": true + }, + { + "type": "unsigned_integer", + "named": true + } + ] + } + }, + { + "type": "formula_parenthesis", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + } + }, + { + "type": "formula_unary_expression", + "named": true, + "fields": { + "op": { + "multiple": false, + "required": true, + "types": [ + { + "type": "+", + "named": false + }, + { + "type": "-", + "named": false + } + ] + } + }, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + } + }, { "type": "function_call", "named": true, @@ -789,6 +985,10 @@ "type": "<<", "named": false }, + { + "type": "<<<", + "named": false + }, { "type": "<=", "named": false @@ -813,6 +1013,10 @@ "type": ">>", "named": false }, + { + "type": ">>>", + "named": false + }, { "type": "[", "named": false diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 88d8be8..5b31826 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -7,16 +7,16 @@ #endif #define LANGUAGE_VERSION 15 -#define STATE_COUNT 150 -#define LARGE_STATE_COUNT 34 -#define SYMBOL_COUNT 84 +#define STATE_COUNT 238 +#define LARGE_STATE_COUNT 7 +#define SYMBOL_COUNT 91 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 51 +#define TOKEN_COUNT 53 #define EXTERNAL_TOKEN_COUNT 0 -#define FIELD_COUNT 21 +#define FIELD_COUNT 24 #define MAX_ALIAS_SEQUENCE_LENGTH 5 #define MAX_RESERVED_WORD_SET_SIZE 0 -#define PRODUCTION_ID_COUNT 21 +#define PRODUCTION_ID_COUNT 22 #define SUPERTYPE_COUNT 0 enum ts_symbol_identifiers { @@ -70,39 +70,46 @@ enum ts_symbol_identifiers { sym_varadic_dots = 48, anon_sym_EQ = 49, anon_sym_DASH_GT = 50, - sym_source_file = 51, - sym_base_ten = 52, - sym_octal = 53, - sym_hex = 54, - sym_binary = 55, - sym_integer = 56, - sym_signed_integer = 57, - sym_unsigned_integer = 58, - sym_number = 59, - sym__float = 60, - sym__unit = 61, - sym_scalar = 62, - sym_boolean = 63, - sym_function_call = 64, - sym_method_call = 65, - sym_expression = 66, - sym_unary_expression = 67, - sym_binary_expression = 68, - sym_if = 69, - sym_path = 70, - sym_declaration_type = 71, - sym_parenthesis = 72, - sym_list = 73, - sym_struct_member = 74, - sym__struct_final_element = 75, - sym_struct_definition = 76, - sym_dictionary_member_assignment = 77, - sym_dictionary_construction = 78, - sym_closure_definition = 79, - aux_sym_path_repeat1 = 80, - aux_sym_list_repeat1 = 81, - aux_sym_struct_definition_repeat1 = 82, - aux_sym_dictionary_construction_repeat1 = 83, + anon_sym_LT_LT_LT = 51, + anon_sym_GT_GT_GT = 52, + sym_source_file = 53, + sym_base_ten = 54, + sym_octal = 55, + sym_hex = 56, + sym_binary = 57, + sym_integer = 58, + sym_signed_integer = 59, + sym_unsigned_integer = 60, + sym_number = 61, + sym__float = 62, + sym__unit = 63, + sym_scalar = 64, + sym_boolean = 65, + sym_function_call = 66, + sym_method_call = 67, + sym_expression = 68, + sym_unary_expression = 69, + sym_binary_expression = 70, + sym_if = 71, + sym_path = 72, + sym_declaration_type = 73, + sym_parenthesis = 74, + sym_list = 75, + sym_struct_member = 76, + sym__struct_final_element = 77, + sym_struct_definition = 78, + sym_dictionary_member_assignment = 79, + sym_dictionary_construction = 80, + sym_closure_definition = 81, + sym_formula = 82, + sym_formula_expression = 83, + sym_formula_parenthesis = 84, + sym_formula_unary_expression = 85, + sym_formula_binary_expression = 86, + aux_sym_path_repeat1 = 87, + aux_sym_list_repeat1 = 88, + aux_sym_struct_definition_repeat1 = 89, + aux_sym_dictionary_construction_repeat1 = 90, }; static const char * const ts_symbol_names[] = { @@ -157,6 +164,8 @@ static const char * const ts_symbol_names[] = { [sym_varadic_dots] = "varadic_dots", [anon_sym_EQ] = "=", [anon_sym_DASH_GT] = "->", + [anon_sym_LT_LT_LT] = "<<<", + [anon_sym_GT_GT_GT] = ">>>", [sym_source_file] = "source_file", [sym_base_ten] = "base_ten", [sym_octal] = "octal", @@ -186,6 +195,11 @@ static const char * const ts_symbol_names[] = { [sym_dictionary_member_assignment] = "dictionary_member_assignment", [sym_dictionary_construction] = "dictionary_construction", [sym_closure_definition] = "closure_definition", + [sym_formula] = "formula", + [sym_formula_expression] = "formula_expression", + [sym_formula_parenthesis] = "formula_parenthesis", + [sym_formula_unary_expression] = "formula_unary_expression", + [sym_formula_binary_expression] = "formula_binary_expression", [aux_sym_path_repeat1] = "path_repeat1", [aux_sym_list_repeat1] = "list_repeat1", [aux_sym_struct_definition_repeat1] = "struct_definition_repeat1", @@ -244,6 +258,8 @@ static const TSSymbol ts_symbol_map[] = { [sym_varadic_dots] = sym_varadic_dots, [anon_sym_EQ] = anon_sym_EQ, [anon_sym_DASH_GT] = anon_sym_DASH_GT, + [anon_sym_LT_LT_LT] = anon_sym_LT_LT_LT, + [anon_sym_GT_GT_GT] = anon_sym_GT_GT_GT, [sym_source_file] = sym_source_file, [sym_base_ten] = sym_base_ten, [sym_octal] = sym_octal, @@ -273,6 +289,11 @@ static const TSSymbol ts_symbol_map[] = { [sym_dictionary_member_assignment] = sym_dictionary_member_assignment, [sym_dictionary_construction] = sym_dictionary_construction, [sym_closure_definition] = sym_closure_definition, + [sym_formula] = sym_formula, + [sym_formula_expression] = sym_formula_expression, + [sym_formula_parenthesis] = sym_formula_parenthesis, + [sym_formula_unary_expression] = sym_formula_unary_expression, + [sym_formula_binary_expression] = sym_formula_binary_expression, [aux_sym_path_repeat1] = aux_sym_path_repeat1, [aux_sym_list_repeat1] = aux_sym_list_repeat1, [aux_sym_struct_definition_repeat1] = aux_sym_struct_definition_repeat1, @@ -484,6 +505,14 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, + [anon_sym_LT_LT_LT] = { + .visible = true, + .named = false, + }, + [anon_sym_GT_GT_GT] = { + .visible = true, + .named = false, + }, [sym_source_file] = { .visible = true, .named = true, @@ -600,6 +629,26 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym_formula] = { + .visible = true, + .named = true, + }, + [sym_formula_expression] = { + .visible = true, + .named = true, + }, + [sym_formula_parenthesis] = { + .visible = true, + .named = true, + }, + [sym_formula_unary_expression] = { + .visible = true, + .named = true, + }, + [sym_formula_binary_expression] = { + .visible = true, + .named = true, + }, [aux_sym_path_repeat1] = { .visible = false, .named = false, @@ -629,17 +678,20 @@ enum ts_field_identifiers { field_expression = 8, field_final_element = 9, field_fractional = 10, - field_members = 11, - field_name = 12, - field_on_false = 13, - field_on_true = 14, - field_op = 15, - field_result = 16, - field_self_dictionary = 17, - field_to_call = 18, - field_unit = 19, - field_value = 20, - field_whole = 21, + field_lhs = 11, + field_members = 12, + field_name = 13, + field_on_false = 14, + field_on_true = 15, + field_op = 16, + field_relation = 17, + field_result = 18, + field_rhs = 19, + field_self_dictionary = 20, + field_to_call = 21, + field_unit = 22, + field_value = 23, + field_whole = 24, }; static const char * const ts_field_names[] = { @@ -654,12 +706,15 @@ static const char * const ts_field_names[] = { [field_expression] = "expression", [field_final_element] = "final_element", [field_fractional] = "fractional", + [field_lhs] = "lhs", [field_members] = "members", [field_name] = "name", [field_on_false] = "on_false", [field_on_true] = "on_true", [field_op] = "op", + [field_relation] = "relation", [field_result] = "result", + [field_rhs] = "rhs", [field_self_dictionary] = "self_dictionary", [field_to_call] = "to_call", [field_unit] = "unit", @@ -688,6 +743,7 @@ static const TSMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [18] = {.index = 31, .length = 3}, [19] = {.index = 34, .length = 2}, [20] = {.index = 36, .length = 3}, + [21] = {.index = 39, .length = 3}, }; static const TSFieldMapEntry ts_field_map_entries[] = { @@ -750,6 +806,10 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_assignments, 1}, {field_assignments, 2}, {field_assignments, 3}, + [39] = + {field_lhs, 1}, + {field_relation, 2}, + {field_rhs, 3}, }; static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { @@ -766,13 +826,13 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [2] = 2, [3] = 2, [4] = 4, - [5] = 5, - [6] = 6, + [5] = 4, + [6] = 4, [7] = 7, [8] = 8, [9] = 9, - [10] = 10, - [11] = 11, + [10] = 8, + [11] = 9, [12] = 12, [13] = 13, [14] = 14, @@ -781,7 +841,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [17] = 17, [18] = 18, [19] = 19, - [20] = 20, + [20] = 13, [21] = 21, [22] = 22, [23] = 23, @@ -789,7 +849,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [25] = 25, [26] = 26, [27] = 27, - [28] = 28, + [28] = 25, [29] = 29, [30] = 30, [31] = 31, @@ -797,43 +857,43 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [33] = 33, [34] = 34, [35] = 35, - [36] = 36, - [37] = 37, - [38] = 38, + [36] = 14, + [37] = 15, + [38] = 16, [39] = 39, - [40] = 40, - [41] = 41, - [42] = 42, - [43] = 43, - [44] = 44, - [45] = 45, - [46] = 46, - [47] = 47, - [48] = 48, - [49] = 49, + [40] = 21, + [41] = 22, + [42] = 29, + [43] = 30, + [44] = 31, + [45] = 32, + [46] = 33, + [47] = 34, + [48] = 35, + [49] = 26, [50] = 50, [51] = 51, [52] = 52, [53] = 53, [54] = 54, [55] = 55, - [56] = 50, - [57] = 54, - [58] = 40, - [59] = 51, - [60] = 53, - [61] = 39, - [62] = 41, - [63] = 42, - [64] = 43, - [65] = 47, - [66] = 48, + [56] = 56, + [57] = 57, + [58] = 58, + [59] = 59, + [60] = 60, + [61] = 61, + [62] = 62, + [63] = 63, + [64] = 64, + [65] = 65, + [66] = 66, [67] = 67, - [68] = 44, - [69] = 45, + [68] = 68, + [69] = 69, [70] = 70, - [71] = 38, - [72] = 49, + [71] = 71, + [72] = 72, [73] = 73, [74] = 74, [75] = 75, @@ -848,69 +908,157 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [84] = 84, [85] = 85, [86] = 86, - [87] = 35, - [88] = 55, - [89] = 84, - [90] = 76, - [91] = 83, - [92] = 82, - [93] = 73, - [94] = 74, - [95] = 81, - [96] = 80, - [97] = 85, - [98] = 79, - [99] = 78, - [100] = 77, - [101] = 101, - [102] = 102, - [103] = 103, - [104] = 104, - [105] = 105, - [106] = 106, - [107] = 107, - [108] = 108, - [109] = 109, - [110] = 110, - [111] = 110, - [112] = 112, - [113] = 113, - [114] = 114, - [115] = 115, - [116] = 116, - [117] = 116, - [118] = 118, - [119] = 119, - [120] = 120, - [121] = 121, - [122] = 122, - [123] = 123, - [124] = 124, - [125] = 125, + [87] = 87, + [88] = 88, + [89] = 89, + [90] = 90, + [91] = 91, + [92] = 12, + [93] = 52, + [94] = 50, + [95] = 24, + [96] = 62, + [97] = 27, + [98] = 61, + [99] = 39, + [100] = 51, + [101] = 74, + [102] = 69, + [103] = 57, + [104] = 71, + [105] = 72, + [106] = 58, + [107] = 73, + [108] = 56, + [109] = 70, + [110] = 54, + [111] = 60, + [112] = 78, + [113] = 53, + [114] = 76, + [115] = 80, + [116] = 59, + [117] = 63, + [118] = 64, + [119] = 65, + [120] = 66, + [121] = 67, + [122] = 68, + [123] = 82, + [124] = 85, + [125] = 88, [126] = 126, - [127] = 127, - [128] = 128, - [129] = 129, - [130] = 130, - [131] = 131, - [132] = 132, - [133] = 133, - [134] = 134, - [135] = 135, - [136] = 136, + [127] = 91, + [128] = 87, + [129] = 86, + [130] = 89, + [131] = 84, + [132] = 90, + [133] = 79, + [134] = 77, + [135] = 83, + [136] = 75, [137] = 137, [138] = 138, [139] = 139, - [140] = 140, + [140] = 138, [141] = 141, [142] = 142, - [143] = 143, + [143] = 139, [144] = 144, [145] = 145, [146] = 146, [147] = 147, - [148] = 148, - [149] = 149, + [148] = 144, + [149] = 146, + [150] = 150, + [151] = 151, + [152] = 152, + [153] = 152, + [154] = 154, + [155] = 155, + [156] = 150, + [157] = 157, + [158] = 157, + [159] = 154, + [160] = 155, + [161] = 151, + [162] = 162, + [163] = 163, + [164] = 12, + [165] = 165, + [166] = 52, + [167] = 50, + [168] = 168, + [169] = 62, + [170] = 170, + [171] = 61, + [172] = 172, + [173] = 173, + [174] = 174, + [175] = 175, + [176] = 78, + [177] = 76, + [178] = 80, + [179] = 179, + [180] = 179, + [181] = 175, + [182] = 173, + [183] = 174, + [184] = 184, + [185] = 185, + [186] = 186, + [187] = 187, + [188] = 184, + [189] = 187, + [190] = 190, + [191] = 191, + [192] = 191, + [193] = 193, + [194] = 194, + [195] = 195, + [196] = 196, + [197] = 197, + [198] = 194, + [199] = 199, + [200] = 193, + [201] = 201, + [202] = 196, + [203] = 197, + [204] = 204, + [205] = 199, + [206] = 206, + [207] = 207, + [208] = 208, + [209] = 206, + [210] = 206, + [211] = 211, + [212] = 212, + [213] = 207, + [214] = 214, + [215] = 215, + [216] = 216, + [217] = 207, + [218] = 218, + [219] = 216, + [220] = 220, + [221] = 221, + [222] = 222, + [223] = 223, + [224] = 224, + [225] = 225, + [226] = 226, + [227] = 227, + [228] = 228, + [229] = 229, + [230] = 230, + [231] = 231, + [232] = 232, + [233] = 227, + [234] = 228, + [235] = 223, + [236] = 232, + [237] = 237, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -918,346 +1066,485 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(12); + if (eof) ADVANCE(19); ADVANCE_MAP( - '!', 36, - '"', 2, - '#', 13, - '&', 43, + '!', 44, + '"', 5, + '#', 20, + '&', 54, '\'', 7, - '(', 57, - ')', 58, - '*', 38, - '+', 34, - ',', 60, - '-', 33, - '.', 29, - '/', 39, - '0', 18, - '1', 20, - ':', 31, - '<', 50, - '=', 63, - '>', 46, - '[', 59, - ']', 61, - '^', 45, - '|', 44, + '(', 73, + ')', 74, + '*', 46, + '+', 42, + ',', 76, + '-', 41, + '.', 37, + '/', 48, + '0', 25, + '1', 27, + ':', 39, + '<', 64, + '=', 79, + '>', 58, + '[', 75, + ']', 77, + '^', 56, + '|', 55, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(14); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(21); + lookahead == ' ') ADVANCE(21); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(28); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(22); END_STATE(); case 1: ADVANCE_MAP( - '!', 35, - '"', 2, - '#', 13, - '(', 57, - ')', 58, - '+', 34, - ',', 60, - '-', 32, - '.', 10, - '0', 19, - '[', 59, + '!', 44, + '"', 5, + '#', 20, + '&', 54, + '\'', 7, + '(', 73, + '*', 46, + '+', 42, + '-', 41, + '.', 38, + '/', 48, + '0', 26, + ':', 39, + '<', 64, + '=', 14, + '>', 59, + '[', 75, + ']', 77, + '^', 56, + '|', 55, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(14); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(21); + lookahead == ' ') ADVANCE(21); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(28); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(22); END_STATE(); case 2: - if (lookahead == '"') ADVANCE(16); - if (lookahead == '\\') ADVANCE(3); - if (lookahead != 0) ADVANCE(2); + ADVANCE_MAP( + '!', 43, + '"', 5, + '#', 20, + '(', 73, + ')', 74, + '*', 46, + '+', 42, + '-', 40, + '.', 10, + '/', 47, + '0', 26, + '<', 12, + '>', 16, + '[', 75, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(21); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(28); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(22); END_STATE(); case 3: - if (lookahead == '"') ADVANCE(17); - if (lookahead == '\\') ADVANCE(3); - if (lookahead != 0) ADVANCE(2); + ADVANCE_MAP( + '!', 13, + '#', 20, + '\'', 7, + '*', 46, + '+', 42, + '-', 40, + '.', 36, + '/', 47, + '<', 66, + '=', 14, + '>', 57, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(21); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(22); END_STATE(); case 4: - if (lookahead == '#') ADVANCE(13); - if (lookahead == '0' || - lookahead == '1') ADVANCE(26); + ADVANCE_MAP( + '!', 13, + '#', 20, + ')', 74, + '*', 46, + '+', 42, + '-', 40, + '/', 47, + '<', 66, + '=', 14, + '>', 60, + ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(14); + lookahead == ' ') ADVANCE(21); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(31); END_STATE(); case 5: - if (lookahead == '#') ADVANCE(13); - if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(14); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(21); + if (lookahead == '"') ADVANCE(23); + if (lookahead == '\\') ADVANCE(6); + if (lookahead != 0) ADVANCE(5); END_STATE(); case 6: - if (lookahead == '#') ADVANCE(13); - if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(14); - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(24); + if (lookahead == '"') ADVANCE(24); + if (lookahead == '\\') ADVANCE(6); + if (lookahead != 0) ADVANCE(5); END_STATE(); case 7: - if (lookahead == '\'') ADVANCE(27); + if (lookahead == '\'') ADVANCE(34); if (lookahead == '\\') ADVANCE(8); if (lookahead != 0) ADVANCE(7); END_STATE(); case 8: - if (lookahead == '\'') ADVANCE(28); + if (lookahead == '\'') ADVANCE(35); if (lookahead == '\\') ADVANCE(8); if (lookahead != 0) ADVANCE(7); END_STATE(); case 9: - if (lookahead == '.') ADVANCE(62); + if (lookahead == '.') ADVANCE(78); END_STATE(); case 10: if (lookahead == '.') ADVANCE(9); END_STATE(); case 11: - if (eof) ADVANCE(12); + if (lookahead == '<') ADVANCE(81); + END_STATE(); + case 12: + if (lookahead == '<') ADVANCE(11); + END_STATE(); + case 13: + if (lookahead == '=') ADVANCE(67); + END_STATE(); + case 14: + if (lookahead == '=') ADVANCE(62); + END_STATE(); + case 15: + if (lookahead == '>') ADVANCE(82); + END_STATE(); + case 16: + if (lookahead == '>') ADVANCE(15); + END_STATE(); + case 17: + if (eof) ADVANCE(19); ADVANCE_MAP( - '!', 36, - '"', 2, - '#', 13, - '&', 43, + '!', 13, + '#', 20, + '&', 54, '\'', 7, - '(', 57, - ')', 58, - '*', 38, - '+', 34, - ',', 60, - '-', 33, - '.', 30, - '/', 39, - '0', 19, - ':', 31, - '<', 50, - '=', 63, - '>', 46, - '[', 59, - ']', 61, - '^', 45, - '|', 44, + '(', 73, + ')', 74, + '*', 46, + '+', 42, + ',', 76, + '-', 40, + '.', 38, + '/', 48, + ':', 39, + '<', 65, + '=', 79, + '>', 58, + ']', 77, + '^', 56, + '|', 55, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(14); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(21); + lookahead == ' ') ADVANCE(21); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(28); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(22); END_STATE(); - case 12: + case 18: + if (eof) ADVANCE(19); + ADVANCE_MAP( + '!', 13, + '#', 20, + '&', 54, + '(', 73, + ')', 74, + '*', 46, + '+', 42, + ',', 76, + '-', 41, + '.', 38, + '/', 48, + ':', 39, + '<', 65, + '=', 79, + '>', 59, + ']', 77, + '^', 56, + '|', 55, + '0', 33, + '1', 33, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(21); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(22); + END_STATE(); + case 19: ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); - case 13: + case 20: ACCEPT_TOKEN(sym_comment); if (lookahead != 0 && - lookahead != '\n') ADVANCE(13); + lookahead != '\n') ADVANCE(20); END_STATE(); - case 14: + case 21: ACCEPT_TOKEN(sym__whitespace); END_STATE(); - case 15: + case 22: ACCEPT_TOKEN(sym_identifier); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(15); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(22); END_STATE(); - case 16: + case 23: ACCEPT_TOKEN(sym_string); END_STATE(); - case 17: + case 24: ACCEPT_TOKEN(sym_string); - if (lookahead == '"') ADVANCE(16); - if (lookahead == '\\') ADVANCE(3); - if (lookahead != 0) ADVANCE(2); + if (lookahead == '"') ADVANCE(23); + if (lookahead == '\\') ADVANCE(6); + if (lookahead != 0) ADVANCE(5); END_STATE(); - case 18: + case 25: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(25); - if (lookahead == 'o') ADVANCE(22); - if (lookahead == 'x') ADVANCE(23); + if (lookahead == 'b') ADVANCE(32); + if (lookahead == 'o') ADVANCE(29); + if (lookahead == 'x') ADVANCE(30); if (lookahead == '0' || - lookahead == '1') ADVANCE(20); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(21); + lookahead == '1') ADVANCE(27); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(28); END_STATE(); - case 19: + case 26: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(25); - if (lookahead == 'o') ADVANCE(22); - if (lookahead == 'x') ADVANCE(23); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(21); + if (lookahead == 'b') ADVANCE(32); + if (lookahead == 'o') ADVANCE(29); + if (lookahead == 'x') ADVANCE(30); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(28); END_STATE(); - case 20: + case 27: ACCEPT_TOKEN(aux_sym_base_ten_token1); if (lookahead == '0' || - lookahead == '1') ADVANCE(20); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(21); + lookahead == '1') ADVANCE(27); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(28); END_STATE(); - case 21: + case 28: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(21); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(28); END_STATE(); - case 22: + case 29: ACCEPT_TOKEN(aux_sym_octal_token1); END_STATE(); - case 23: + case 30: ACCEPT_TOKEN(aux_sym_hex_token1); END_STATE(); - case 24: + case 31: ACCEPT_TOKEN(aux_sym_hex_token2); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(24); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(31); END_STATE(); - case 25: + case 32: ACCEPT_TOKEN(aux_sym_binary_token1); END_STATE(); - case 26: + case 33: ACCEPT_TOKEN(aux_sym_binary_token2); if (lookahead == '0' || - lookahead == '1') ADVANCE(26); + lookahead == '1') ADVANCE(33); END_STATE(); - case 27: + case 34: ACCEPT_TOKEN(sym_unit_quote); END_STATE(); - case 28: + case 35: ACCEPT_TOKEN(sym_unit_quote); - if (lookahead == '\'') ADVANCE(27); + if (lookahead == '\'') ADVANCE(34); if (lookahead == '\\') ADVANCE(8); if (lookahead != 0) ADVANCE(7); END_STATE(); - case 29: + case 36: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(54); END_STATE(); - case 30: + case 37: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(55); + if (lookahead == '.') ADVANCE(70); END_STATE(); - case 31: + case 38: + ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(71); + END_STATE(); + case 39: ACCEPT_TOKEN(anon_sym_COLON); END_STATE(); - case 32: + case 40: ACCEPT_TOKEN(anon_sym_DASH); END_STATE(); - case 33: + case 41: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '>') ADVANCE(64); + if (lookahead == '>') ADVANCE(80); END_STATE(); - case 34: + case 42: ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); - case 35: + case 43: ACCEPT_TOKEN(anon_sym_BANG); END_STATE(); - case 36: + case 44: ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(51); + if (lookahead == '=') ADVANCE(67); END_STATE(); - case 37: + case 45: ACCEPT_TOKEN(anon_sym_STAR_STAR); END_STATE(); - case 38: + case 46: ACCEPT_TOKEN(anon_sym_STAR); - if (lookahead == '*') ADVANCE(37); + if (lookahead == '*') ADVANCE(45); END_STATE(); - case 39: + case 47: ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '/') ADVANCE(40); END_STATE(); - case 40: + case 48: + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '/') ADVANCE(49); + END_STATE(); + case 49: ACCEPT_TOKEN(anon_sym_SLASH_SLASH); END_STATE(); - case 41: + case 50: ACCEPT_TOKEN(anon_sym_LT_LT); END_STATE(); - case 42: + case 51: + ACCEPT_TOKEN(anon_sym_LT_LT); + if (lookahead == '<') ADVANCE(81); + END_STATE(); + case 52: ACCEPT_TOKEN(anon_sym_GT_GT); END_STATE(); - case 43: + case 53: + ACCEPT_TOKEN(anon_sym_GT_GT); + if (lookahead == '>') ADVANCE(82); + END_STATE(); + case 54: ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(52); + if (lookahead == '&') ADVANCE(68); END_STATE(); - case 44: + case 55: ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '|') ADVANCE(53); + if (lookahead == '|') ADVANCE(69); END_STATE(); - case 45: + case 56: ACCEPT_TOKEN(anon_sym_CARET); END_STATE(); - case 46: + case 57: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(47); - if (lookahead == '>') ADVANCE(42); + if (lookahead == '=') ADVANCE(61); END_STATE(); - case 47: + case 58: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(61); + if (lookahead == '>') ADVANCE(53); + END_STATE(); + case 59: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(61); + if (lookahead == '>') ADVANCE(52); + END_STATE(); + case 60: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(61); + if (lookahead == '>') ADVANCE(15); + END_STATE(); + case 61: ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); - case 48: + case 62: ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); - case 49: + case 63: ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); - case 50: + case 64: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(41); - if (lookahead == '=') ADVANCE(49); + if (lookahead == '<') ADVANCE(51); + if (lookahead == '=') ADVANCE(63); END_STATE(); - case 51: + case 65: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '<') ADVANCE(50); + if (lookahead == '=') ADVANCE(63); + END_STATE(); + case 66: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '=') ADVANCE(63); + END_STATE(); + case 67: ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); - case 52: + case 68: ACCEPT_TOKEN(anon_sym_AMP_AMP); END_STATE(); - case 53: + case 69: ACCEPT_TOKEN(anon_sym_PIPE_PIPE); END_STATE(); - case 54: + case 70: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '.') ADVANCE(62); - if (lookahead == '=') ADVANCE(56); + if (lookahead == '.') ADVANCE(78); + if (lookahead == '=') ADVANCE(72); END_STATE(); - case 55: + case 71: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '=') ADVANCE(56); + if (lookahead == '=') ADVANCE(72); END_STATE(); - case 56: + case 72: ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); END_STATE(); - case 57: + case 73: ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); - case 58: + case 74: ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); - case 59: + case 75: ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); - case 60: + case 76: ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); - case 61: + case 77: ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); - case 62: + case 78: ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); - case 63: + case 79: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(48); + if (lookahead == '=') ADVANCE(62); END_STATE(); - case 64: + case 80: ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); + case 81: + ACCEPT_TOKEN(anon_sym_LT_LT_LT); + END_STATE(); + case 82: + ACCEPT_TOKEN(anon_sym_GT_GT_GT); + END_STATE(); default: return false; } @@ -1359,155 +1646,243 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [0] = {.lex_state = 0}, - [1] = {.lex_state = 11}, - [2] = {.lex_state = 11}, - [3] = {.lex_state = 11}, - [4] = {.lex_state = 1}, - [5] = {.lex_state = 11}, - [6] = {.lex_state = 11}, - [7] = {.lex_state = 11}, - [8] = {.lex_state = 11}, - [9] = {.lex_state = 11}, - [10] = {.lex_state = 11}, - [11] = {.lex_state = 11}, - [12] = {.lex_state = 11}, - [13] = {.lex_state = 11}, - [14] = {.lex_state = 11}, - [15] = {.lex_state = 11}, - [16] = {.lex_state = 11}, - [17] = {.lex_state = 11}, - [18] = {.lex_state = 11}, - [19] = {.lex_state = 11}, - [20] = {.lex_state = 11}, - [21] = {.lex_state = 11}, - [22] = {.lex_state = 11}, - [23] = {.lex_state = 11}, - [24] = {.lex_state = 11}, - [25] = {.lex_state = 11}, - [26] = {.lex_state = 11}, - [27] = {.lex_state = 11}, - [28] = {.lex_state = 11}, - [29] = {.lex_state = 11}, - [30] = {.lex_state = 11}, - [31] = {.lex_state = 11}, - [32] = {.lex_state = 11}, - [33] = {.lex_state = 11}, - [34] = {.lex_state = 11}, - [35] = {.lex_state = 11}, - [36] = {.lex_state = 11}, - [37] = {.lex_state = 11}, - [38] = {.lex_state = 11}, - [39] = {.lex_state = 11}, - [40] = {.lex_state = 11}, - [41] = {.lex_state = 11}, - [42] = {.lex_state = 11}, - [43] = {.lex_state = 11}, - [44] = {.lex_state = 11}, - [45] = {.lex_state = 11}, - [46] = {.lex_state = 11}, - [47] = {.lex_state = 11}, - [48] = {.lex_state = 11}, - [49] = {.lex_state = 11}, - [50] = {.lex_state = 11}, - [51] = {.lex_state = 11}, - [52] = {.lex_state = 11}, - [53] = {.lex_state = 11}, - [54] = {.lex_state = 11}, - [55] = {.lex_state = 11}, - [56] = {.lex_state = 11}, - [57] = {.lex_state = 11}, - [58] = {.lex_state = 11}, - [59] = {.lex_state = 11}, - [60] = {.lex_state = 11}, - [61] = {.lex_state = 11}, - [62] = {.lex_state = 11}, - [63] = {.lex_state = 11}, - [64] = {.lex_state = 11}, - [65] = {.lex_state = 11}, - [66] = {.lex_state = 11}, - [67] = {.lex_state = 11}, - [68] = {.lex_state = 11}, - [69] = {.lex_state = 11}, - [70] = {.lex_state = 11}, - [71] = {.lex_state = 11}, - [72] = {.lex_state = 11}, - [73] = {.lex_state = 11}, - [74] = {.lex_state = 11}, - [75] = {.lex_state = 11}, - [76] = {.lex_state = 11}, - [77] = {.lex_state = 11}, - [78] = {.lex_state = 11}, - [79] = {.lex_state = 11}, - [80] = {.lex_state = 11}, - [81] = {.lex_state = 11}, - [82] = {.lex_state = 11}, - [83] = {.lex_state = 11}, - [84] = {.lex_state = 11}, - [85] = {.lex_state = 11}, - [86] = {.lex_state = 11}, - [87] = {.lex_state = 11}, - [88] = {.lex_state = 11}, - [89] = {.lex_state = 11}, - [90] = {.lex_state = 11}, - [91] = {.lex_state = 11}, - [92] = {.lex_state = 11}, - [93] = {.lex_state = 11}, - [94] = {.lex_state = 11}, - [95] = {.lex_state = 11}, - [96] = {.lex_state = 11}, - [97] = {.lex_state = 11}, - [98] = {.lex_state = 11}, - [99] = {.lex_state = 11}, - [100] = {.lex_state = 11}, - [101] = {.lex_state = 11}, - [102] = {.lex_state = 11}, - [103] = {.lex_state = 11}, - [104] = {.lex_state = 11}, - [105] = {.lex_state = 11}, - [106] = {.lex_state = 11}, - [107] = {.lex_state = 11}, - [108] = {.lex_state = 11}, - [109] = {.lex_state = 11}, - [110] = {.lex_state = 11}, - [111] = {.lex_state = 11}, - [112] = {.lex_state = 11}, - [113] = {.lex_state = 1}, - [114] = {.lex_state = 1}, - [115] = {.lex_state = 1}, - [116] = {.lex_state = 0}, - [117] = {.lex_state = 0}, - [118] = {.lex_state = 0}, - [119] = {.lex_state = 0}, - [120] = {.lex_state = 0}, - [121] = {.lex_state = 0}, - [122] = {.lex_state = 0}, - [123] = {.lex_state = 1}, - [124] = {.lex_state = 0}, - [125] = {.lex_state = 0}, - [126] = {.lex_state = 0}, - [127] = {.lex_state = 0}, - [128] = {.lex_state = 0}, - [129] = {.lex_state = 0}, - [130] = {.lex_state = 0}, - [131] = {.lex_state = 5}, - [132] = {.lex_state = 0}, - [133] = {.lex_state = 0}, - [134] = {.lex_state = 0}, - [135] = {.lex_state = 0}, - [136] = {.lex_state = 0}, - [137] = {.lex_state = 0}, - [138] = {.lex_state = 0}, - [139] = {.lex_state = 4}, - [140] = {.lex_state = 0}, - [141] = {.lex_state = 0}, - [142] = {.lex_state = 0}, - [143] = {.lex_state = 0}, - [144] = {.lex_state = 0}, - [145] = {.lex_state = 0}, - [146] = {.lex_state = 5}, - [147] = {.lex_state = 6}, - [148] = {.lex_state = 0}, - [149] = {.lex_state = 0}, + [1] = {.lex_state = 1}, + [2] = {.lex_state = 1}, + [3] = {.lex_state = 1}, + [4] = {.lex_state = 2}, + [5] = {.lex_state = 2}, + [6] = {.lex_state = 2}, + [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 = 1}, + [29] = {.lex_state = 1}, + [30] = {.lex_state = 1}, + [31] = {.lex_state = 1}, + [32] = {.lex_state = 1}, + [33] = {.lex_state = 1}, + [34] = {.lex_state = 1}, + [35] = {.lex_state = 1}, + [36] = {.lex_state = 1}, + [37] = {.lex_state = 1}, + [38] = {.lex_state = 1}, + [39] = {.lex_state = 1}, + [40] = {.lex_state = 1}, + [41] = {.lex_state = 1}, + [42] = {.lex_state = 1}, + [43] = {.lex_state = 1}, + [44] = {.lex_state = 1}, + [45] = {.lex_state = 1}, + [46] = {.lex_state = 1}, + [47] = {.lex_state = 1}, + [48] = {.lex_state = 1}, + [49] = {.lex_state = 1}, + [50] = {.lex_state = 1}, + [51] = {.lex_state = 1}, + [52] = {.lex_state = 1}, + [53] = {.lex_state = 1}, + [54] = {.lex_state = 1}, + [55] = {.lex_state = 1}, + [56] = {.lex_state = 1}, + [57] = {.lex_state = 1}, + [58] = {.lex_state = 1}, + [59] = {.lex_state = 1}, + [60] = {.lex_state = 1}, + [61] = {.lex_state = 1}, + [62] = {.lex_state = 1}, + [63] = {.lex_state = 1}, + [64] = {.lex_state = 1}, + [65] = {.lex_state = 1}, + [66] = {.lex_state = 1}, + [67] = {.lex_state = 1}, + [68] = {.lex_state = 1}, + [69] = {.lex_state = 1}, + [70] = {.lex_state = 1}, + [71] = {.lex_state = 1}, + [72] = {.lex_state = 1}, + [73] = {.lex_state = 1}, + [74] = {.lex_state = 1}, + [75] = {.lex_state = 1}, + [76] = {.lex_state = 1}, + [77] = {.lex_state = 1}, + [78] = {.lex_state = 1}, + [79] = {.lex_state = 1}, + [80] = {.lex_state = 1}, + [81] = {.lex_state = 1}, + [82] = {.lex_state = 1}, + [83] = {.lex_state = 1}, + [84] = {.lex_state = 1}, + [85] = {.lex_state = 1}, + [86] = {.lex_state = 1}, + [87] = {.lex_state = 1}, + [88] = {.lex_state = 1}, + [89] = {.lex_state = 1}, + [90] = {.lex_state = 1}, + [91] = {.lex_state = 1}, + [92] = {.lex_state = 17}, + [93] = {.lex_state = 17}, + [94] = {.lex_state = 17}, + [95] = {.lex_state = 18}, + [96] = {.lex_state = 17}, + [97] = {.lex_state = 18}, + [98] = {.lex_state = 17}, + [99] = {.lex_state = 18}, + [100] = {.lex_state = 18}, + [101] = {.lex_state = 18}, + [102] = {.lex_state = 18}, + [103] = {.lex_state = 18}, + [104] = {.lex_state = 18}, + [105] = {.lex_state = 18}, + [106] = {.lex_state = 18}, + [107] = {.lex_state = 18}, + [108] = {.lex_state = 18}, + [109] = {.lex_state = 18}, + [110] = {.lex_state = 18}, + [111] = {.lex_state = 18}, + [112] = {.lex_state = 17}, + [113] = {.lex_state = 18}, + [114] = {.lex_state = 17}, + [115] = {.lex_state = 17}, + [116] = {.lex_state = 18}, + [117] = {.lex_state = 18}, + [118] = {.lex_state = 18}, + [119] = {.lex_state = 18}, + [120] = {.lex_state = 18}, + [121] = {.lex_state = 18}, + [122] = {.lex_state = 18}, + [123] = {.lex_state = 18}, + [124] = {.lex_state = 18}, + [125] = {.lex_state = 18}, + [126] = {.lex_state = 18}, + [127] = {.lex_state = 18}, + [128] = {.lex_state = 18}, + [129] = {.lex_state = 18}, + [130] = {.lex_state = 18}, + [131] = {.lex_state = 18}, + [132] = {.lex_state = 18}, + [133] = {.lex_state = 18}, + [134] = {.lex_state = 18}, + [135] = {.lex_state = 18}, + [136] = {.lex_state = 18}, + [137] = {.lex_state = 18}, + [138] = {.lex_state = 18}, + [139] = {.lex_state = 18}, + [140] = {.lex_state = 18}, + [141] = {.lex_state = 18}, + [142] = {.lex_state = 18}, + [143] = {.lex_state = 18}, + [144] = {.lex_state = 18}, + [145] = {.lex_state = 18}, + [146] = {.lex_state = 18}, + [147] = {.lex_state = 18}, + [148] = {.lex_state = 18}, + [149] = {.lex_state = 18}, + [150] = {.lex_state = 1}, + [151] = {.lex_state = 1}, + [152] = {.lex_state = 1}, + [153] = {.lex_state = 1}, + [154] = {.lex_state = 1}, + [155] = {.lex_state = 1}, + [156] = {.lex_state = 1}, + [157] = {.lex_state = 1}, + [158] = {.lex_state = 1}, + [159] = {.lex_state = 1}, + [160] = {.lex_state = 1}, + [161] = {.lex_state = 1}, + [162] = {.lex_state = 1}, + [163] = {.lex_state = 1}, + [164] = {.lex_state = 3}, + [165] = {.lex_state = 1}, + [166] = {.lex_state = 3}, + [167] = {.lex_state = 3}, + [168] = {.lex_state = 4}, + [169] = {.lex_state = 3}, + [170] = {.lex_state = 4}, + [171] = {.lex_state = 3}, + [172] = {.lex_state = 4}, + [173] = {.lex_state = 3}, + [174] = {.lex_state = 3}, + [175] = {.lex_state = 3}, + [176] = {.lex_state = 3}, + [177] = {.lex_state = 3}, + [178] = {.lex_state = 3}, + [179] = {.lex_state = 3}, + [180] = {.lex_state = 3}, + [181] = {.lex_state = 2}, + [182] = {.lex_state = 2}, + [183] = {.lex_state = 2}, + [184] = {.lex_state = 2}, + [185] = {.lex_state = 2}, + [186] = {.lex_state = 0}, + [187] = {.lex_state = 2}, + [188] = {.lex_state = 2}, + [189] = {.lex_state = 2}, + [190] = {.lex_state = 2}, + [191] = {.lex_state = 0}, + [192] = {.lex_state = 0}, + [193] = {.lex_state = 0}, + [194] = {.lex_state = 0}, + [195] = {.lex_state = 0}, + [196] = {.lex_state = 0}, + [197] = {.lex_state = 0}, + [198] = {.lex_state = 0}, + [199] = {.lex_state = 0}, + [200] = {.lex_state = 0}, + [201] = {.lex_state = 2}, + [202] = {.lex_state = 0}, + [203] = {.lex_state = 0}, + [204] = {.lex_state = 0}, + [205] = {.lex_state = 0}, + [206] = {.lex_state = 0}, + [207] = {.lex_state = 17}, + [208] = {.lex_state = 0}, + [209] = {.lex_state = 0}, + [210] = {.lex_state = 0}, + [211] = {.lex_state = 0}, + [212] = {.lex_state = 0}, + [213] = {.lex_state = 17}, + [214] = {.lex_state = 0}, + [215] = {.lex_state = 0}, + [216] = {.lex_state = 0}, + [217] = {.lex_state = 17}, + [218] = {.lex_state = 0}, + [219] = {.lex_state = 0}, + [220] = {.lex_state = 0}, + [221] = {.lex_state = 0}, + [222] = {.lex_state = 0}, + [223] = {.lex_state = 0}, + [224] = {.lex_state = 17}, + [225] = {.lex_state = 4}, + [226] = {.lex_state = 18}, + [227] = {.lex_state = 0}, + [228] = {.lex_state = 0}, + [229] = {.lex_state = 0}, + [230] = {.lex_state = 0}, + [231] = {.lex_state = 0}, + [232] = {.lex_state = 0}, + [233] = {.lex_state = 0}, + [234] = {.lex_state = 0}, + [235] = {.lex_state = 0}, + [236] = {.lex_state = 0}, + [237] = {.lex_state = 0}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -1562,32 +1937,35 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_varadic_dots] = ACTIONS(1), [anon_sym_EQ] = ACTIONS(1), [anon_sym_DASH_GT] = ACTIONS(1), + [anon_sym_LT_LT_LT] = ACTIONS(1), + [anon_sym_GT_GT_GT] = ACTIONS(1), }, [STATE(1)] = { - [sym_source_file] = STATE(144), - [sym_base_ten] = STATE(130), - [sym_octal] = STATE(130), - [sym_hex] = STATE(130), - [sym_binary] = STATE(130), - [sym_integer] = STATE(134), - [sym_signed_integer] = STATE(20), - [sym_unsigned_integer] = STATE(20), - [sym_number] = STATE(9), - [sym__float] = STATE(88), - [sym_scalar] = STATE(20), - [sym_boolean] = STATE(20), - [sym_function_call] = STATE(20), - [sym_method_call] = STATE(20), - [sym_expression] = STATE(109), - [sym_unary_expression] = STATE(20), - [sym_binary_expression] = STATE(20), - [sym_if] = STATE(20), - [sym_path] = STATE(97), - [sym_parenthesis] = STATE(20), - [sym_list] = STATE(20), - [sym_struct_definition] = STATE(97), - [sym_dictionary_construction] = STATE(20), - [sym_closure_definition] = STATE(20), + [sym_source_file] = STATE(237), + [sym_base_ten] = STATE(211), + [sym_octal] = STATE(211), + [sym_hex] = STATE(211), + [sym_binary] = STATE(211), + [sym_integer] = STATE(210), + [sym_signed_integer] = STATE(125), + [sym_unsigned_integer] = STATE(125), + [sym_number] = STATE(93), + [sym__float] = STATE(94), + [sym_scalar] = STATE(125), + [sym_boolean] = STATE(125), + [sym_function_call] = STATE(125), + [sym_method_call] = STATE(125), + [sym_expression] = STATE(145), + [sym_unary_expression] = STATE(125), + [sym_binary_expression] = STATE(125), + [sym_if] = STATE(125), + [sym_path] = STATE(108), + [sym_parenthesis] = STATE(125), + [sym_list] = STATE(125), + [sym_struct_definition] = STATE(108), + [sym_dictionary_construction] = STATE(125), + [sym_closure_definition] = STATE(125), + [sym_formula] = STATE(125), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -1605,31 +1983,33 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_if] = ACTIONS(23), [anon_sym_LPAREN] = ACTIONS(25), [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_LT_LT_LT] = ACTIONS(29), }, [STATE(2)] = { - [sym_base_ten] = STATE(130), - [sym_octal] = STATE(130), - [sym_hex] = STATE(130), - [sym_binary] = STATE(130), - [sym_integer] = STATE(134), - [sym_signed_integer] = STATE(20), - [sym_unsigned_integer] = STATE(20), - [sym_number] = STATE(9), - [sym__float] = STATE(88), - [sym_scalar] = STATE(20), - [sym_boolean] = STATE(20), - [sym_function_call] = STATE(20), - [sym_method_call] = STATE(20), - [sym_expression] = STATE(110), - [sym_unary_expression] = STATE(20), - [sym_binary_expression] = STATE(20), - [sym_if] = STATE(20), - [sym_path] = STATE(97), - [sym_parenthesis] = STATE(20), - [sym_list] = STATE(20), - [sym_struct_definition] = STATE(97), - [sym_dictionary_construction] = STATE(86), - [sym_closure_definition] = STATE(20), + [sym_base_ten] = STATE(211), + [sym_octal] = STATE(211), + [sym_hex] = STATE(211), + [sym_binary] = STATE(211), + [sym_integer] = STATE(210), + [sym_signed_integer] = STATE(125), + [sym_unsigned_integer] = STATE(125), + [sym_number] = STATE(93), + [sym__float] = STATE(94), + [sym_scalar] = STATE(125), + [sym_boolean] = STATE(125), + [sym_function_call] = STATE(125), + [sym_method_call] = STATE(125), + [sym_expression] = STATE(149), + [sym_unary_expression] = STATE(125), + [sym_binary_expression] = STATE(125), + [sym_if] = STATE(125), + [sym_path] = STATE(108), + [sym_parenthesis] = STATE(125), + [sym_list] = STATE(125), + [sym_struct_definition] = STATE(108), + [sym_dictionary_construction] = STATE(81), + [sym_closure_definition] = STATE(125), + [sym_formula] = STATE(125), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -1641,57 +2021,59 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [aux_sym_binary_token1] = ACTIONS(17), [sym_true] = ACTIONS(19), [sym_false] = ACTIONS(19), - [anon_sym_COLON] = ACTIONS(29), - [anon_sym_DASH] = ACTIONS(31), - [anon_sym_PLUS] = ACTIONS(31), - [anon_sym_BANG] = ACTIONS(33), - [anon_sym_STAR_STAR] = ACTIONS(35), - [anon_sym_STAR] = ACTIONS(37), - [anon_sym_SLASH] = ACTIONS(37), - [anon_sym_SLASH_SLASH] = ACTIONS(39), - [anon_sym_LT_LT] = ACTIONS(41), - [anon_sym_GT_GT] = ACTIONS(41), - [anon_sym_AMP] = ACTIONS(43), - [anon_sym_PIPE] = ACTIONS(45), - [anon_sym_CARET] = ACTIONS(47), - [anon_sym_GT] = ACTIONS(49), - [anon_sym_GT_EQ] = ACTIONS(51), - [anon_sym_EQ_EQ] = ACTIONS(51), - [anon_sym_LT_EQ] = ACTIONS(51), - [anon_sym_LT] = ACTIONS(49), - [anon_sym_BANG_EQ] = ACTIONS(51), - [anon_sym_AMP_AMP] = ACTIONS(53), - [anon_sym_PIPE_PIPE] = ACTIONS(55), - [anon_sym_DOT_DOT] = ACTIONS(57), - [anon_sym_DOT_DOT_EQ] = ACTIONS(59), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_DASH] = ACTIONS(33), + [anon_sym_PLUS] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_STAR_STAR] = ACTIONS(37), + [anon_sym_STAR] = ACTIONS(39), + [anon_sym_SLASH] = ACTIONS(39), + [anon_sym_SLASH_SLASH] = ACTIONS(41), + [anon_sym_LT_LT] = ACTIONS(43), + [anon_sym_GT_GT] = ACTIONS(45), + [anon_sym_AMP] = ACTIONS(47), + [anon_sym_PIPE] = ACTIONS(49), + [anon_sym_CARET] = ACTIONS(51), + [anon_sym_GT] = ACTIONS(53), + [anon_sym_GT_EQ] = ACTIONS(55), + [anon_sym_EQ_EQ] = ACTIONS(55), + [anon_sym_LT_EQ] = ACTIONS(55), + [anon_sym_LT] = ACTIONS(53), + [anon_sym_BANG_EQ] = ACTIONS(55), + [anon_sym_AMP_AMP] = ACTIONS(57), + [anon_sym_PIPE_PIPE] = ACTIONS(59), + [anon_sym_DOT_DOT] = ACTIONS(61), + [anon_sym_DOT_DOT_EQ] = ACTIONS(63), [anon_sym_if] = ACTIONS(23), - [anon_sym_LPAREN] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(65), [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_LT_LT_LT] = ACTIONS(29), }, [STATE(3)] = { - [sym_base_ten] = STATE(130), - [sym_octal] = STATE(130), - [sym_hex] = STATE(130), - [sym_binary] = STATE(130), - [sym_integer] = STATE(134), - [sym_signed_integer] = STATE(20), - [sym_unsigned_integer] = STATE(20), - [sym_number] = STATE(9), - [sym__float] = STATE(88), - [sym_scalar] = STATE(20), - [sym_boolean] = STATE(20), - [sym_function_call] = STATE(20), - [sym_method_call] = STATE(20), - [sym_expression] = STATE(111), - [sym_unary_expression] = STATE(20), - [sym_binary_expression] = STATE(20), - [sym_if] = STATE(20), - [sym_path] = STATE(97), - [sym_parenthesis] = STATE(20), - [sym_list] = STATE(20), - [sym_struct_definition] = STATE(97), - [sym_dictionary_construction] = STATE(86), - [sym_closure_definition] = STATE(20), + [sym_base_ten] = STATE(211), + [sym_octal] = STATE(211), + [sym_hex] = STATE(211), + [sym_binary] = STATE(211), + [sym_integer] = STATE(210), + [sym_signed_integer] = STATE(125), + [sym_unsigned_integer] = STATE(125), + [sym_number] = STATE(93), + [sym__float] = STATE(94), + [sym_scalar] = STATE(125), + [sym_boolean] = STATE(125), + [sym_function_call] = STATE(125), + [sym_method_call] = STATE(125), + [sym_expression] = STATE(146), + [sym_unary_expression] = STATE(125), + [sym_binary_expression] = STATE(125), + [sym_if] = STATE(125), + [sym_path] = STATE(108), + [sym_parenthesis] = STATE(125), + [sym_list] = STATE(125), + [sym_struct_definition] = STATE(108), + [sym_dictionary_construction] = STATE(81), + [sym_closure_definition] = STATE(125), + [sym_formula] = STATE(125), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -1703,62 +2085,64 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [aux_sym_binary_token1] = ACTIONS(17), [sym_true] = ACTIONS(19), [sym_false] = ACTIONS(19), - [anon_sym_COLON] = ACTIONS(29), - [anon_sym_DASH] = ACTIONS(31), - [anon_sym_PLUS] = ACTIONS(31), - [anon_sym_BANG] = ACTIONS(33), - [anon_sym_STAR_STAR] = ACTIONS(35), - [anon_sym_STAR] = ACTIONS(37), - [anon_sym_SLASH] = ACTIONS(37), - [anon_sym_SLASH_SLASH] = ACTIONS(39), - [anon_sym_LT_LT] = ACTIONS(41), - [anon_sym_GT_GT] = ACTIONS(41), - [anon_sym_AMP] = ACTIONS(43), - [anon_sym_PIPE] = ACTIONS(45), - [anon_sym_CARET] = ACTIONS(47), - [anon_sym_GT] = ACTIONS(49), - [anon_sym_GT_EQ] = ACTIONS(51), - [anon_sym_EQ_EQ] = ACTIONS(51), - [anon_sym_LT_EQ] = ACTIONS(51), - [anon_sym_LT] = ACTIONS(49), - [anon_sym_BANG_EQ] = ACTIONS(51), - [anon_sym_AMP_AMP] = ACTIONS(53), - [anon_sym_PIPE_PIPE] = ACTIONS(55), - [anon_sym_DOT_DOT] = ACTIONS(57), - [anon_sym_DOT_DOT_EQ] = ACTIONS(59), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_DASH] = ACTIONS(33), + [anon_sym_PLUS] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_STAR_STAR] = ACTIONS(37), + [anon_sym_STAR] = ACTIONS(39), + [anon_sym_SLASH] = ACTIONS(39), + [anon_sym_SLASH_SLASH] = ACTIONS(41), + [anon_sym_LT_LT] = ACTIONS(43), + [anon_sym_GT_GT] = ACTIONS(45), + [anon_sym_AMP] = ACTIONS(47), + [anon_sym_PIPE] = ACTIONS(49), + [anon_sym_CARET] = ACTIONS(51), + [anon_sym_GT] = ACTIONS(53), + [anon_sym_GT_EQ] = ACTIONS(55), + [anon_sym_EQ_EQ] = ACTIONS(55), + [anon_sym_LT_EQ] = ACTIONS(55), + [anon_sym_LT] = ACTIONS(53), + [anon_sym_BANG_EQ] = ACTIONS(55), + [anon_sym_AMP_AMP] = ACTIONS(57), + [anon_sym_PIPE_PIPE] = ACTIONS(59), + [anon_sym_DOT_DOT] = ACTIONS(61), + [anon_sym_DOT_DOT_EQ] = ACTIONS(63), [anon_sym_if] = ACTIONS(23), - [anon_sym_LPAREN] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(65), [anon_sym_LBRACK] = ACTIONS(27), + [anon_sym_LT_LT_LT] = ACTIONS(29), }, [STATE(4)] = { - [sym_base_ten] = STATE(130), - [sym_octal] = STATE(130), - [sym_hex] = STATE(130), - [sym_binary] = STATE(130), - [sym_integer] = STATE(134), - [sym_signed_integer] = STATE(20), - [sym_unsigned_integer] = STATE(20), - [sym_number] = STATE(9), - [sym__float] = STATE(88), - [sym_scalar] = STATE(20), - [sym_boolean] = STATE(20), - [sym_function_call] = STATE(20), - [sym_method_call] = STATE(20), - [sym_expression] = STATE(108), - [sym_unary_expression] = STATE(20), - [sym_binary_expression] = STATE(20), - [sym_if] = STATE(20), - [sym_path] = STATE(97), - [sym_parenthesis] = STATE(20), - [sym_list] = STATE(20), - [sym_struct_member] = STATE(129), - [sym__struct_final_element] = STATE(138), - [sym_struct_definition] = STATE(97), - [sym_dictionary_member_assignment] = STATE(122), - [sym_dictionary_construction] = STATE(20), - [sym_closure_definition] = STATE(20), - [aux_sym_struct_definition_repeat1] = STATE(114), - [sym_identifier] = ACTIONS(61), + [sym_base_ten] = STATE(211), + [sym_octal] = STATE(211), + [sym_hex] = STATE(211), + [sym_binary] = STATE(211), + [sym_integer] = STATE(210), + [sym_signed_integer] = STATE(125), + [sym_unsigned_integer] = STATE(125), + [sym_number] = STATE(93), + [sym__float] = STATE(94), + [sym_scalar] = STATE(125), + [sym_boolean] = STATE(125), + [sym_function_call] = STATE(125), + [sym_method_call] = STATE(125), + [sym_expression] = STATE(148), + [sym_unary_expression] = STATE(125), + [sym_binary_expression] = STATE(125), + [sym_if] = STATE(125), + [sym_path] = STATE(108), + [sym_parenthesis] = STATE(125), + [sym_list] = STATE(125), + [sym_struct_member] = STATE(214), + [sym__struct_final_element] = STATE(227), + [sym_struct_definition] = STATE(108), + [sym_dictionary_member_assignment] = STATE(205), + [sym_dictionary_construction] = STATE(125), + [sym_closure_definition] = STATE(125), + [sym_formula] = STATE(125), + [aux_sym_struct_definition_repeat1] = STATE(188), + [sym_identifier] = ACTIONS(67), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), @@ -1774,1393 +2158,168 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_BANG] = ACTIONS(21), [anon_sym_if] = ACTIONS(23), [anon_sym_LPAREN] = ACTIONS(25), - [anon_sym_RPAREN] = ACTIONS(63), + [anon_sym_RPAREN] = ACTIONS(69), [anon_sym_LBRACK] = ACTIONS(27), - [anon_sym_COMMA] = ACTIONS(65), - [sym_varadic_dots] = ACTIONS(67), + [sym_varadic_dots] = ACTIONS(71), + [anon_sym_LT_LT_LT] = ACTIONS(29), }, [STATE(5)] = { - [aux_sym_path_repeat1] = STATE(7), - [ts_builtin_sym_end] = ACTIONS(69), - [sym_identifier] = ACTIONS(71), + [sym_base_ten] = STATE(211), + [sym_octal] = STATE(211), + [sym_hex] = STATE(211), + [sym_binary] = STATE(211), + [sym_integer] = STATE(210), + [sym_signed_integer] = STATE(125), + [sym_unsigned_integer] = STATE(125), + [sym_number] = STATE(93), + [sym__float] = STATE(94), + [sym_scalar] = STATE(125), + [sym_boolean] = STATE(125), + [sym_function_call] = STATE(125), + [sym_method_call] = STATE(125), + [sym_expression] = STATE(144), + [sym_unary_expression] = STATE(125), + [sym_binary_expression] = STATE(125), + [sym_if] = STATE(125), + [sym_path] = STATE(108), + [sym_parenthesis] = STATE(125), + [sym_list] = STATE(125), + [sym_struct_member] = STATE(214), + [sym__struct_final_element] = STATE(233), + [sym_struct_definition] = STATE(108), + [sym_dictionary_member_assignment] = STATE(205), + [sym_dictionary_construction] = STATE(125), + [sym_closure_definition] = STATE(125), + [sym_formula] = STATE(125), + [aux_sym_struct_definition_repeat1] = STATE(184), + [sym_identifier] = ACTIONS(67), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(69), - [sym_default] = ACTIONS(71), - [aux_sym_base_ten_token1] = ACTIONS(71), - [aux_sym_octal_token1] = ACTIONS(69), - [aux_sym_hex_token1] = ACTIONS(69), - [aux_sym_binary_token1] = ACTIONS(69), - [anon_sym_DOT] = ACTIONS(73), - [sym_true] = ACTIONS(71), - [sym_false] = ACTIONS(71), - [anon_sym_COLON] = ACTIONS(69), - [anon_sym_DASH] = ACTIONS(71), - [anon_sym_PLUS] = ACTIONS(69), - [anon_sym_BANG] = ACTIONS(71), - [anon_sym_STAR_STAR] = ACTIONS(69), - [anon_sym_STAR] = ACTIONS(71), - [anon_sym_SLASH] = ACTIONS(71), - [anon_sym_SLASH_SLASH] = ACTIONS(69), - [anon_sym_LT_LT] = ACTIONS(69), - [anon_sym_GT_GT] = ACTIONS(69), - [anon_sym_AMP] = ACTIONS(71), - [anon_sym_PIPE] = ACTIONS(71), - [anon_sym_CARET] = ACTIONS(69), - [anon_sym_GT] = ACTIONS(71), - [anon_sym_GT_EQ] = ACTIONS(69), - [anon_sym_EQ_EQ] = ACTIONS(69), - [anon_sym_LT_EQ] = ACTIONS(69), - [anon_sym_LT] = ACTIONS(71), - [anon_sym_BANG_EQ] = ACTIONS(69), - [anon_sym_AMP_AMP] = ACTIONS(69), - [anon_sym_PIPE_PIPE] = ACTIONS(69), - [anon_sym_DOT_DOT] = ACTIONS(71), - [anon_sym_DOT_DOT_EQ] = ACTIONS(69), - [anon_sym_if] = ACTIONS(71), - [anon_sym_else] = ACTIONS(71), - [anon_sym_LPAREN] = ACTIONS(69), + [sym_string] = ACTIONS(7), + [sym_default] = ACTIONS(9), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_DASH] = ACTIONS(21), + [anon_sym_PLUS] = ACTIONS(21), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_if] = ACTIONS(23), + [anon_sym_LPAREN] = ACTIONS(25), [anon_sym_RPAREN] = ACTIONS(69), - [anon_sym_LBRACK] = ACTIONS(69), - [anon_sym_COMMA] = ACTIONS(69), - [anon_sym_RBRACK] = ACTIONS(69), - [anon_sym_EQ] = ACTIONS(71), - [anon_sym_DASH_GT] = ACTIONS(69), + [anon_sym_LBRACK] = ACTIONS(27), + [sym_varadic_dots] = ACTIONS(71), + [anon_sym_LT_LT_LT] = ACTIONS(29), }, [STATE(6)] = { - [aux_sym_path_repeat1] = STATE(6), - [ts_builtin_sym_end] = ACTIONS(75), - [sym_identifier] = ACTIONS(77), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(75), - [sym_default] = ACTIONS(77), - [aux_sym_base_ten_token1] = ACTIONS(77), - [aux_sym_octal_token1] = ACTIONS(75), - [aux_sym_hex_token1] = ACTIONS(75), - [aux_sym_binary_token1] = ACTIONS(75), - [anon_sym_DOT] = ACTIONS(79), - [sym_true] = ACTIONS(77), - [sym_false] = ACTIONS(77), - [anon_sym_COLON] = ACTIONS(75), - [anon_sym_DASH] = ACTIONS(77), - [anon_sym_PLUS] = ACTIONS(75), - [anon_sym_BANG] = ACTIONS(77), - [anon_sym_STAR_STAR] = ACTIONS(75), - [anon_sym_STAR] = ACTIONS(77), - [anon_sym_SLASH] = ACTIONS(77), - [anon_sym_SLASH_SLASH] = ACTIONS(75), - [anon_sym_LT_LT] = ACTIONS(75), - [anon_sym_GT_GT] = ACTIONS(75), - [anon_sym_AMP] = ACTIONS(77), - [anon_sym_PIPE] = ACTIONS(77), - [anon_sym_CARET] = ACTIONS(75), - [anon_sym_GT] = ACTIONS(77), - [anon_sym_GT_EQ] = ACTIONS(75), - [anon_sym_EQ_EQ] = ACTIONS(75), - [anon_sym_LT_EQ] = ACTIONS(75), - [anon_sym_LT] = ACTIONS(77), - [anon_sym_BANG_EQ] = ACTIONS(75), - [anon_sym_AMP_AMP] = ACTIONS(75), - [anon_sym_PIPE_PIPE] = ACTIONS(75), - [anon_sym_DOT_DOT] = ACTIONS(77), - [anon_sym_DOT_DOT_EQ] = ACTIONS(75), - [anon_sym_if] = ACTIONS(77), - [anon_sym_else] = ACTIONS(77), - [anon_sym_LPAREN] = ACTIONS(75), - [anon_sym_RPAREN] = ACTIONS(75), - [anon_sym_LBRACK] = ACTIONS(75), - [anon_sym_COMMA] = ACTIONS(75), - [anon_sym_RBRACK] = ACTIONS(75), - [anon_sym_EQ] = ACTIONS(77), - [anon_sym_DASH_GT] = ACTIONS(75), - }, - [STATE(7)] = { - [aux_sym_path_repeat1] = STATE(6), - [ts_builtin_sym_end] = ACTIONS(82), - [sym_identifier] = ACTIONS(84), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(82), - [sym_default] = ACTIONS(84), - [aux_sym_base_ten_token1] = ACTIONS(84), - [aux_sym_octal_token1] = ACTIONS(82), - [aux_sym_hex_token1] = ACTIONS(82), - [aux_sym_binary_token1] = ACTIONS(82), - [anon_sym_DOT] = ACTIONS(73), - [sym_true] = ACTIONS(84), - [sym_false] = ACTIONS(84), - [anon_sym_COLON] = ACTIONS(82), - [anon_sym_DASH] = ACTIONS(84), - [anon_sym_PLUS] = ACTIONS(82), - [anon_sym_BANG] = ACTIONS(84), - [anon_sym_STAR_STAR] = ACTIONS(82), - [anon_sym_STAR] = ACTIONS(84), - [anon_sym_SLASH] = ACTIONS(84), - [anon_sym_SLASH_SLASH] = ACTIONS(82), - [anon_sym_LT_LT] = ACTIONS(82), - [anon_sym_GT_GT] = ACTIONS(82), - [anon_sym_AMP] = ACTIONS(84), - [anon_sym_PIPE] = ACTIONS(84), - [anon_sym_CARET] = ACTIONS(82), - [anon_sym_GT] = ACTIONS(84), - [anon_sym_GT_EQ] = ACTIONS(82), - [anon_sym_EQ_EQ] = ACTIONS(82), - [anon_sym_LT_EQ] = ACTIONS(82), - [anon_sym_LT] = ACTIONS(84), - [anon_sym_BANG_EQ] = ACTIONS(82), - [anon_sym_AMP_AMP] = ACTIONS(82), - [anon_sym_PIPE_PIPE] = ACTIONS(82), - [anon_sym_DOT_DOT] = ACTIONS(84), - [anon_sym_DOT_DOT_EQ] = ACTIONS(82), - [anon_sym_if] = ACTIONS(84), - [anon_sym_else] = ACTIONS(84), - [anon_sym_LPAREN] = ACTIONS(82), - [anon_sym_RPAREN] = ACTIONS(82), - [anon_sym_LBRACK] = ACTIONS(82), - [anon_sym_COMMA] = ACTIONS(82), - [anon_sym_RBRACK] = ACTIONS(82), - [anon_sym_EQ] = ACTIONS(84), - [anon_sym_DASH_GT] = ACTIONS(82), - }, - [STATE(8)] = { - [ts_builtin_sym_end] = ACTIONS(75), - [sym_identifier] = ACTIONS(77), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(75), - [sym_default] = ACTIONS(77), - [aux_sym_base_ten_token1] = ACTIONS(77), - [aux_sym_octal_token1] = ACTIONS(75), - [aux_sym_hex_token1] = ACTIONS(75), - [aux_sym_binary_token1] = ACTIONS(75), - [anon_sym_DOT] = ACTIONS(77), - [sym_true] = ACTIONS(77), - [sym_false] = ACTIONS(77), - [anon_sym_COLON] = ACTIONS(75), - [anon_sym_DASH] = ACTIONS(77), - [anon_sym_PLUS] = ACTIONS(75), - [anon_sym_BANG] = ACTIONS(77), - [anon_sym_STAR_STAR] = ACTIONS(75), - [anon_sym_STAR] = ACTIONS(77), - [anon_sym_SLASH] = ACTIONS(77), - [anon_sym_SLASH_SLASH] = ACTIONS(75), - [anon_sym_LT_LT] = ACTIONS(75), - [anon_sym_GT_GT] = ACTIONS(75), - [anon_sym_AMP] = ACTIONS(77), - [anon_sym_PIPE] = ACTIONS(77), - [anon_sym_CARET] = ACTIONS(75), - [anon_sym_GT] = ACTIONS(77), - [anon_sym_GT_EQ] = ACTIONS(75), - [anon_sym_EQ_EQ] = ACTIONS(75), - [anon_sym_LT_EQ] = ACTIONS(75), - [anon_sym_LT] = ACTIONS(77), - [anon_sym_BANG_EQ] = ACTIONS(75), - [anon_sym_AMP_AMP] = ACTIONS(75), - [anon_sym_PIPE_PIPE] = ACTIONS(75), - [anon_sym_DOT_DOT] = ACTIONS(77), - [anon_sym_DOT_DOT_EQ] = ACTIONS(75), - [anon_sym_if] = ACTIONS(77), - [anon_sym_else] = ACTIONS(77), - [anon_sym_LPAREN] = ACTIONS(75), - [anon_sym_RPAREN] = ACTIONS(75), - [anon_sym_LBRACK] = ACTIONS(75), - [anon_sym_COMMA] = ACTIONS(75), - [anon_sym_RBRACK] = ACTIONS(75), - [anon_sym_EQ] = ACTIONS(77), - [anon_sym_DASH_GT] = ACTIONS(75), - }, - [STATE(9)] = { - [ts_builtin_sym_end] = ACTIONS(86), - [sym_identifier] = ACTIONS(88), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(86), - [sym_default] = ACTIONS(88), - [aux_sym_base_ten_token1] = ACTIONS(88), - [aux_sym_octal_token1] = ACTIONS(86), - [aux_sym_hex_token1] = ACTIONS(86), - [aux_sym_binary_token1] = ACTIONS(86), - [sym_unit_quote] = ACTIONS(86), - [anon_sym_DOT] = ACTIONS(90), - [sym_true] = ACTIONS(88), - [sym_false] = ACTIONS(88), - [anon_sym_COLON] = ACTIONS(86), - [anon_sym_DASH] = ACTIONS(86), - [anon_sym_PLUS] = ACTIONS(86), - [anon_sym_BANG] = ACTIONS(88), - [anon_sym_STAR_STAR] = ACTIONS(86), - [anon_sym_STAR] = ACTIONS(88), - [anon_sym_SLASH] = ACTIONS(88), - [anon_sym_SLASH_SLASH] = ACTIONS(86), - [anon_sym_LT_LT] = ACTIONS(86), - [anon_sym_GT_GT] = ACTIONS(86), - [anon_sym_AMP] = ACTIONS(88), - [anon_sym_PIPE] = ACTIONS(88), - [anon_sym_CARET] = ACTIONS(86), - [anon_sym_GT] = ACTIONS(88), - [anon_sym_GT_EQ] = ACTIONS(86), - [anon_sym_EQ_EQ] = ACTIONS(86), - [anon_sym_LT_EQ] = ACTIONS(86), - [anon_sym_LT] = ACTIONS(88), - [anon_sym_BANG_EQ] = ACTIONS(86), - [anon_sym_AMP_AMP] = ACTIONS(86), - [anon_sym_PIPE_PIPE] = ACTIONS(86), - [anon_sym_DOT_DOT] = ACTIONS(88), - [anon_sym_DOT_DOT_EQ] = ACTIONS(86), - [anon_sym_if] = ACTIONS(88), - [anon_sym_else] = ACTIONS(88), - [anon_sym_LPAREN] = ACTIONS(86), - [anon_sym_RPAREN] = ACTIONS(86), - [anon_sym_LBRACK] = ACTIONS(86), - [anon_sym_COMMA] = ACTIONS(86), - [anon_sym_RBRACK] = ACTIONS(86), - [anon_sym_EQ] = ACTIONS(88), - }, - [STATE(10)] = { - [ts_builtin_sym_end] = ACTIONS(92), - [sym_identifier] = ACTIONS(94), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(92), - [sym_default] = ACTIONS(94), - [aux_sym_base_ten_token1] = ACTIONS(94), - [aux_sym_octal_token1] = ACTIONS(92), - [aux_sym_hex_token1] = ACTIONS(92), - [aux_sym_binary_token1] = ACTIONS(92), - [sym_true] = ACTIONS(94), - [sym_false] = ACTIONS(94), - [anon_sym_COLON] = ACTIONS(92), - [anon_sym_DASH] = ACTIONS(94), - [anon_sym_PLUS] = ACTIONS(92), - [anon_sym_BANG] = ACTIONS(94), - [anon_sym_STAR_STAR] = ACTIONS(92), - [anon_sym_STAR] = ACTIONS(94), - [anon_sym_SLASH] = ACTIONS(94), - [anon_sym_SLASH_SLASH] = ACTIONS(92), - [anon_sym_LT_LT] = ACTIONS(92), - [anon_sym_GT_GT] = ACTIONS(92), - [anon_sym_AMP] = ACTIONS(94), - [anon_sym_PIPE] = ACTIONS(94), - [anon_sym_CARET] = ACTIONS(92), - [anon_sym_GT] = ACTIONS(94), - [anon_sym_GT_EQ] = ACTIONS(92), - [anon_sym_EQ_EQ] = ACTIONS(92), - [anon_sym_LT_EQ] = ACTIONS(92), - [anon_sym_LT] = ACTIONS(94), - [anon_sym_BANG_EQ] = ACTIONS(92), - [anon_sym_AMP_AMP] = ACTIONS(92), - [anon_sym_PIPE_PIPE] = ACTIONS(92), - [anon_sym_DOT_DOT] = ACTIONS(94), - [anon_sym_DOT_DOT_EQ] = ACTIONS(92), - [anon_sym_if] = ACTIONS(94), - [anon_sym_else] = ACTIONS(94), - [anon_sym_LPAREN] = ACTIONS(92), - [anon_sym_RPAREN] = ACTIONS(92), - [anon_sym_LBRACK] = ACTIONS(92), - [anon_sym_COMMA] = ACTIONS(92), - [anon_sym_RBRACK] = ACTIONS(92), - [anon_sym_EQ] = ACTIONS(94), - [anon_sym_DASH_GT] = ACTIONS(92), - }, - [STATE(11)] = { - [sym_dictionary_construction] = STATE(25), - [ts_builtin_sym_end] = ACTIONS(96), - [sym_identifier] = ACTIONS(98), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(96), - [sym_default] = ACTIONS(98), - [aux_sym_base_ten_token1] = ACTIONS(98), - [aux_sym_octal_token1] = ACTIONS(96), - [aux_sym_hex_token1] = ACTIONS(96), - [aux_sym_binary_token1] = ACTIONS(96), - [sym_true] = ACTIONS(98), - [sym_false] = ACTIONS(98), - [anon_sym_COLON] = ACTIONS(29), - [anon_sym_DASH] = ACTIONS(96), - [anon_sym_PLUS] = ACTIONS(96), - [anon_sym_BANG] = ACTIONS(98), - [anon_sym_STAR_STAR] = ACTIONS(96), - [anon_sym_STAR] = ACTIONS(98), - [anon_sym_SLASH] = ACTIONS(98), - [anon_sym_SLASH_SLASH] = ACTIONS(96), - [anon_sym_LT_LT] = ACTIONS(96), - [anon_sym_GT_GT] = ACTIONS(96), - [anon_sym_AMP] = ACTIONS(98), - [anon_sym_PIPE] = ACTIONS(98), - [anon_sym_CARET] = ACTIONS(96), - [anon_sym_GT] = ACTIONS(98), - [anon_sym_GT_EQ] = ACTIONS(96), - [anon_sym_EQ_EQ] = ACTIONS(96), - [anon_sym_LT_EQ] = ACTIONS(96), - [anon_sym_LT] = ACTIONS(98), - [anon_sym_BANG_EQ] = ACTIONS(96), - [anon_sym_AMP_AMP] = ACTIONS(96), - [anon_sym_PIPE_PIPE] = ACTIONS(96), - [anon_sym_DOT_DOT] = ACTIONS(98), - [anon_sym_DOT_DOT_EQ] = ACTIONS(96), - [anon_sym_if] = ACTIONS(98), - [anon_sym_else] = ACTIONS(98), - [anon_sym_LPAREN] = ACTIONS(100), - [anon_sym_RPAREN] = ACTIONS(96), - [anon_sym_LBRACK] = ACTIONS(96), - [anon_sym_COMMA] = ACTIONS(96), - [anon_sym_RBRACK] = ACTIONS(96), - [anon_sym_EQ] = ACTIONS(98), - }, - [STATE(12)] = { - [ts_builtin_sym_end] = ACTIONS(102), - [sym_identifier] = ACTIONS(104), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(102), - [sym_default] = ACTIONS(104), - [aux_sym_base_ten_token1] = ACTIONS(104), - [aux_sym_octal_token1] = ACTIONS(102), - [aux_sym_hex_token1] = ACTIONS(102), - [aux_sym_binary_token1] = ACTIONS(102), - [sym_true] = ACTIONS(104), - [sym_false] = ACTIONS(104), - [anon_sym_COLON] = ACTIONS(102), - [anon_sym_DASH] = ACTIONS(104), - [anon_sym_PLUS] = ACTIONS(102), - [anon_sym_BANG] = ACTIONS(104), - [anon_sym_STAR_STAR] = ACTIONS(102), - [anon_sym_STAR] = ACTIONS(104), - [anon_sym_SLASH] = ACTIONS(104), - [anon_sym_SLASH_SLASH] = ACTIONS(102), - [anon_sym_LT_LT] = ACTIONS(102), - [anon_sym_GT_GT] = ACTIONS(102), - [anon_sym_AMP] = ACTIONS(104), - [anon_sym_PIPE] = ACTIONS(104), - [anon_sym_CARET] = ACTIONS(102), - [anon_sym_GT] = ACTIONS(104), - [anon_sym_GT_EQ] = ACTIONS(102), - [anon_sym_EQ_EQ] = ACTIONS(102), - [anon_sym_LT_EQ] = ACTIONS(102), - [anon_sym_LT] = ACTIONS(104), - [anon_sym_BANG_EQ] = ACTIONS(102), - [anon_sym_AMP_AMP] = ACTIONS(102), - [anon_sym_PIPE_PIPE] = ACTIONS(102), - [anon_sym_DOT_DOT] = ACTIONS(104), - [anon_sym_DOT_DOT_EQ] = ACTIONS(102), - [anon_sym_if] = ACTIONS(104), - [anon_sym_else] = ACTIONS(104), - [anon_sym_LPAREN] = ACTIONS(102), - [anon_sym_RPAREN] = ACTIONS(102), - [anon_sym_LBRACK] = ACTIONS(102), - [anon_sym_COMMA] = ACTIONS(102), - [anon_sym_RBRACK] = ACTIONS(102), - [anon_sym_EQ] = ACTIONS(104), - [anon_sym_DASH_GT] = ACTIONS(102), - }, - [STATE(13)] = { - [ts_builtin_sym_end] = ACTIONS(106), - [sym_identifier] = ACTIONS(108), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(106), - [sym_default] = ACTIONS(108), - [aux_sym_base_ten_token1] = ACTIONS(108), - [aux_sym_octal_token1] = ACTIONS(106), - [aux_sym_hex_token1] = ACTIONS(106), - [aux_sym_binary_token1] = ACTIONS(106), - [sym_true] = ACTIONS(108), - [sym_false] = ACTIONS(108), - [anon_sym_COLON] = ACTIONS(106), - [anon_sym_DASH] = ACTIONS(108), - [anon_sym_PLUS] = ACTIONS(106), - [anon_sym_BANG] = ACTIONS(108), - [anon_sym_STAR_STAR] = ACTIONS(106), - [anon_sym_STAR] = ACTIONS(108), - [anon_sym_SLASH] = ACTIONS(108), - [anon_sym_SLASH_SLASH] = ACTIONS(106), - [anon_sym_LT_LT] = ACTIONS(106), - [anon_sym_GT_GT] = ACTIONS(106), - [anon_sym_AMP] = ACTIONS(108), - [anon_sym_PIPE] = ACTIONS(108), - [anon_sym_CARET] = ACTIONS(106), - [anon_sym_GT] = ACTIONS(108), - [anon_sym_GT_EQ] = ACTIONS(106), - [anon_sym_EQ_EQ] = ACTIONS(106), - [anon_sym_LT_EQ] = ACTIONS(106), - [anon_sym_LT] = ACTIONS(108), - [anon_sym_BANG_EQ] = ACTIONS(106), - [anon_sym_AMP_AMP] = ACTIONS(106), - [anon_sym_PIPE_PIPE] = ACTIONS(106), - [anon_sym_DOT_DOT] = ACTIONS(108), - [anon_sym_DOT_DOT_EQ] = ACTIONS(106), - [anon_sym_if] = ACTIONS(108), - [anon_sym_else] = ACTIONS(108), - [anon_sym_LPAREN] = ACTIONS(106), - [anon_sym_RPAREN] = ACTIONS(106), - [anon_sym_LBRACK] = ACTIONS(106), - [anon_sym_COMMA] = ACTIONS(106), - [anon_sym_RBRACK] = ACTIONS(106), - [anon_sym_EQ] = ACTIONS(108), - [anon_sym_DASH_GT] = ACTIONS(106), - }, - [STATE(14)] = { - [ts_builtin_sym_end] = ACTIONS(110), - [sym_identifier] = ACTIONS(112), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(110), - [sym_default] = ACTIONS(112), - [aux_sym_base_ten_token1] = ACTIONS(112), - [aux_sym_octal_token1] = ACTIONS(110), - [aux_sym_hex_token1] = ACTIONS(110), - [aux_sym_binary_token1] = ACTIONS(110), - [sym_unit_quote] = ACTIONS(110), - [sym_true] = ACTIONS(112), - [sym_false] = ACTIONS(112), - [anon_sym_COLON] = ACTIONS(110), - [anon_sym_DASH] = ACTIONS(110), - [anon_sym_PLUS] = ACTIONS(110), - [anon_sym_BANG] = ACTIONS(112), - [anon_sym_STAR_STAR] = ACTIONS(110), - [anon_sym_STAR] = ACTIONS(112), - [anon_sym_SLASH] = ACTIONS(112), - [anon_sym_SLASH_SLASH] = ACTIONS(110), - [anon_sym_LT_LT] = ACTIONS(110), - [anon_sym_GT_GT] = ACTIONS(110), - [anon_sym_AMP] = ACTIONS(112), - [anon_sym_PIPE] = ACTIONS(112), - [anon_sym_CARET] = ACTIONS(110), - [anon_sym_GT] = ACTIONS(112), - [anon_sym_GT_EQ] = ACTIONS(110), - [anon_sym_EQ_EQ] = ACTIONS(110), - [anon_sym_LT_EQ] = ACTIONS(110), - [anon_sym_LT] = ACTIONS(112), - [anon_sym_BANG_EQ] = ACTIONS(110), - [anon_sym_AMP_AMP] = ACTIONS(110), - [anon_sym_PIPE_PIPE] = ACTIONS(110), - [anon_sym_DOT_DOT] = ACTIONS(112), - [anon_sym_DOT_DOT_EQ] = ACTIONS(110), - [anon_sym_if] = ACTIONS(112), - [anon_sym_else] = ACTIONS(112), - [anon_sym_LPAREN] = ACTIONS(110), - [anon_sym_RPAREN] = ACTIONS(110), - [anon_sym_LBRACK] = ACTIONS(110), - [anon_sym_COMMA] = ACTIONS(110), - [anon_sym_RBRACK] = ACTIONS(110), - [anon_sym_EQ] = ACTIONS(112), - }, - [STATE(15)] = { - [sym_dictionary_construction] = STATE(25), - [ts_builtin_sym_end] = ACTIONS(114), - [sym_identifier] = ACTIONS(116), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(114), - [sym_default] = ACTIONS(116), - [aux_sym_base_ten_token1] = ACTIONS(116), - [aux_sym_octal_token1] = ACTIONS(114), - [aux_sym_hex_token1] = ACTIONS(114), - [aux_sym_binary_token1] = ACTIONS(114), - [sym_true] = ACTIONS(116), - [sym_false] = ACTIONS(116), - [anon_sym_COLON] = ACTIONS(114), - [anon_sym_DASH] = ACTIONS(114), - [anon_sym_PLUS] = ACTIONS(114), - [anon_sym_BANG] = ACTIONS(116), - [anon_sym_STAR_STAR] = ACTIONS(114), - [anon_sym_STAR] = ACTIONS(116), - [anon_sym_SLASH] = ACTIONS(116), - [anon_sym_SLASH_SLASH] = ACTIONS(114), - [anon_sym_LT_LT] = ACTIONS(114), - [anon_sym_GT_GT] = ACTIONS(114), - [anon_sym_AMP] = ACTIONS(116), - [anon_sym_PIPE] = ACTIONS(116), - [anon_sym_CARET] = ACTIONS(114), - [anon_sym_GT] = ACTIONS(116), - [anon_sym_GT_EQ] = ACTIONS(114), - [anon_sym_EQ_EQ] = ACTIONS(114), - [anon_sym_LT_EQ] = ACTIONS(114), - [anon_sym_LT] = ACTIONS(116), - [anon_sym_BANG_EQ] = ACTIONS(114), - [anon_sym_AMP_AMP] = ACTIONS(114), - [anon_sym_PIPE_PIPE] = ACTIONS(114), - [anon_sym_DOT_DOT] = ACTIONS(116), - [anon_sym_DOT_DOT_EQ] = ACTIONS(114), - [anon_sym_if] = ACTIONS(116), - [anon_sym_else] = ACTIONS(116), - [anon_sym_LPAREN] = ACTIONS(114), - [anon_sym_RPAREN] = ACTIONS(114), - [anon_sym_LBRACK] = ACTIONS(114), - [anon_sym_COMMA] = ACTIONS(114), - [anon_sym_RBRACK] = ACTIONS(114), - [anon_sym_EQ] = ACTIONS(116), - }, - [STATE(16)] = { - [ts_builtin_sym_end] = ACTIONS(118), - [sym_identifier] = ACTIONS(120), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(118), - [sym_default] = ACTIONS(120), - [aux_sym_base_ten_token1] = ACTIONS(120), - [aux_sym_octal_token1] = ACTIONS(118), - [aux_sym_hex_token1] = ACTIONS(118), - [aux_sym_binary_token1] = ACTIONS(118), - [sym_unit_quote] = ACTIONS(118), - [sym_true] = ACTIONS(120), - [sym_false] = ACTIONS(120), - [anon_sym_COLON] = ACTIONS(118), - [anon_sym_DASH] = ACTIONS(118), - [anon_sym_PLUS] = ACTIONS(118), - [anon_sym_BANG] = ACTIONS(120), - [anon_sym_STAR_STAR] = ACTIONS(118), - [anon_sym_STAR] = ACTIONS(120), - [anon_sym_SLASH] = ACTIONS(120), - [anon_sym_SLASH_SLASH] = ACTIONS(118), - [anon_sym_LT_LT] = ACTIONS(118), - [anon_sym_GT_GT] = ACTIONS(118), - [anon_sym_AMP] = ACTIONS(120), - [anon_sym_PIPE] = ACTIONS(120), - [anon_sym_CARET] = ACTIONS(118), - [anon_sym_GT] = ACTIONS(120), - [anon_sym_GT_EQ] = ACTIONS(118), - [anon_sym_EQ_EQ] = ACTIONS(118), - [anon_sym_LT_EQ] = ACTIONS(118), - [anon_sym_LT] = ACTIONS(120), - [anon_sym_BANG_EQ] = ACTIONS(118), - [anon_sym_AMP_AMP] = ACTIONS(118), - [anon_sym_PIPE_PIPE] = ACTIONS(118), - [anon_sym_DOT_DOT] = ACTIONS(120), - [anon_sym_DOT_DOT_EQ] = ACTIONS(118), - [anon_sym_if] = ACTIONS(120), - [anon_sym_else] = ACTIONS(120), - [anon_sym_LPAREN] = ACTIONS(118), - [anon_sym_RPAREN] = ACTIONS(118), - [anon_sym_LBRACK] = ACTIONS(118), - [anon_sym_COMMA] = ACTIONS(118), - [anon_sym_RBRACK] = ACTIONS(118), - [anon_sym_EQ] = ACTIONS(120), - }, - [STATE(17)] = { - [sym_dictionary_construction] = STATE(25), - [ts_builtin_sym_end] = ACTIONS(122), - [sym_identifier] = ACTIONS(124), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(122), - [sym_default] = ACTIONS(124), - [aux_sym_base_ten_token1] = ACTIONS(124), - [aux_sym_octal_token1] = ACTIONS(122), - [aux_sym_hex_token1] = ACTIONS(122), - [aux_sym_binary_token1] = ACTIONS(122), - [sym_true] = ACTIONS(124), - [sym_false] = ACTIONS(124), - [anon_sym_COLON] = ACTIONS(29), - [anon_sym_DASH] = ACTIONS(122), - [anon_sym_PLUS] = ACTIONS(122), - [anon_sym_BANG] = ACTIONS(124), - [anon_sym_STAR_STAR] = ACTIONS(122), - [anon_sym_STAR] = ACTIONS(124), - [anon_sym_SLASH] = ACTIONS(124), - [anon_sym_SLASH_SLASH] = ACTIONS(122), - [anon_sym_LT_LT] = ACTIONS(122), - [anon_sym_GT_GT] = ACTIONS(122), - [anon_sym_AMP] = ACTIONS(124), - [anon_sym_PIPE] = ACTIONS(124), - [anon_sym_CARET] = ACTIONS(122), - [anon_sym_GT] = ACTIONS(124), - [anon_sym_GT_EQ] = ACTIONS(122), - [anon_sym_EQ_EQ] = ACTIONS(122), - [anon_sym_LT_EQ] = ACTIONS(122), - [anon_sym_LT] = ACTIONS(124), - [anon_sym_BANG_EQ] = ACTIONS(122), - [anon_sym_AMP_AMP] = ACTIONS(122), - [anon_sym_PIPE_PIPE] = ACTIONS(122), - [anon_sym_DOT_DOT] = ACTIONS(124), - [anon_sym_DOT_DOT_EQ] = ACTIONS(122), - [anon_sym_if] = ACTIONS(124), - [anon_sym_else] = ACTIONS(124), - [anon_sym_LPAREN] = ACTIONS(100), - [anon_sym_RPAREN] = ACTIONS(122), - [anon_sym_LBRACK] = ACTIONS(122), - [anon_sym_COMMA] = ACTIONS(122), - [anon_sym_RBRACK] = ACTIONS(122), - [anon_sym_EQ] = ACTIONS(124), - }, - [STATE(18)] = { - [ts_builtin_sym_end] = ACTIONS(126), - [sym_identifier] = ACTIONS(128), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(126), - [sym_default] = ACTIONS(128), - [aux_sym_base_ten_token1] = ACTIONS(128), - [aux_sym_octal_token1] = ACTIONS(126), - [aux_sym_hex_token1] = ACTIONS(126), - [aux_sym_binary_token1] = ACTIONS(126), - [sym_true] = ACTIONS(128), - [sym_false] = ACTIONS(128), - [anon_sym_COLON] = ACTIONS(126), - [anon_sym_DASH] = ACTIONS(128), - [anon_sym_PLUS] = ACTIONS(126), - [anon_sym_BANG] = ACTIONS(128), - [anon_sym_STAR_STAR] = ACTIONS(126), - [anon_sym_STAR] = ACTIONS(128), - [anon_sym_SLASH] = ACTIONS(128), - [anon_sym_SLASH_SLASH] = ACTIONS(126), - [anon_sym_LT_LT] = ACTIONS(126), - [anon_sym_GT_GT] = ACTIONS(126), - [anon_sym_AMP] = ACTIONS(128), - [anon_sym_PIPE] = ACTIONS(128), - [anon_sym_CARET] = ACTIONS(126), - [anon_sym_GT] = ACTIONS(128), - [anon_sym_GT_EQ] = ACTIONS(126), - [anon_sym_EQ_EQ] = ACTIONS(126), - [anon_sym_LT_EQ] = ACTIONS(126), - [anon_sym_LT] = ACTIONS(128), - [anon_sym_BANG_EQ] = ACTIONS(126), - [anon_sym_AMP_AMP] = ACTIONS(126), - [anon_sym_PIPE_PIPE] = ACTIONS(126), - [anon_sym_DOT_DOT] = ACTIONS(128), - [anon_sym_DOT_DOT_EQ] = ACTIONS(126), - [anon_sym_if] = ACTIONS(128), - [anon_sym_else] = ACTIONS(128), - [anon_sym_LPAREN] = ACTIONS(126), - [anon_sym_RPAREN] = ACTIONS(126), - [anon_sym_LBRACK] = ACTIONS(126), - [anon_sym_COMMA] = ACTIONS(126), - [anon_sym_RBRACK] = ACTIONS(126), - [anon_sym_EQ] = ACTIONS(128), - [anon_sym_DASH_GT] = ACTIONS(126), - }, - [STATE(19)] = { - [ts_builtin_sym_end] = ACTIONS(130), - [sym_identifier] = ACTIONS(132), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(130), - [sym_default] = ACTIONS(132), - [aux_sym_base_ten_token1] = ACTIONS(132), - [aux_sym_octal_token1] = ACTIONS(130), - [aux_sym_hex_token1] = ACTIONS(130), - [aux_sym_binary_token1] = ACTIONS(130), - [sym_true] = ACTIONS(132), - [sym_false] = ACTIONS(132), - [anon_sym_COLON] = ACTIONS(130), - [anon_sym_DASH] = ACTIONS(130), - [anon_sym_PLUS] = ACTIONS(130), - [anon_sym_BANG] = ACTIONS(132), - [anon_sym_STAR_STAR] = ACTIONS(130), - [anon_sym_STAR] = ACTIONS(132), - [anon_sym_SLASH] = ACTIONS(132), - [anon_sym_SLASH_SLASH] = ACTIONS(130), - [anon_sym_LT_LT] = ACTIONS(130), - [anon_sym_GT_GT] = ACTIONS(130), - [anon_sym_AMP] = ACTIONS(132), - [anon_sym_PIPE] = ACTIONS(132), - [anon_sym_CARET] = ACTIONS(130), - [anon_sym_GT] = ACTIONS(132), - [anon_sym_GT_EQ] = ACTIONS(130), - [anon_sym_EQ_EQ] = ACTIONS(130), - [anon_sym_LT_EQ] = ACTIONS(130), - [anon_sym_LT] = ACTIONS(132), - [anon_sym_BANG_EQ] = ACTIONS(130), - [anon_sym_AMP_AMP] = ACTIONS(130), - [anon_sym_PIPE_PIPE] = ACTIONS(130), - [anon_sym_DOT_DOT] = ACTIONS(132), - [anon_sym_DOT_DOT_EQ] = ACTIONS(130), - [anon_sym_if] = ACTIONS(132), - [anon_sym_else] = ACTIONS(132), - [anon_sym_LPAREN] = ACTIONS(130), - [anon_sym_RPAREN] = ACTIONS(130), - [anon_sym_LBRACK] = ACTIONS(130), - [anon_sym_COMMA] = ACTIONS(130), - [anon_sym_RBRACK] = ACTIONS(130), - [anon_sym_EQ] = ACTIONS(132), - }, - [STATE(20)] = { - [ts_builtin_sym_end] = ACTIONS(134), - [sym_identifier] = ACTIONS(136), + [sym_base_ten] = STATE(211), + [sym_octal] = STATE(211), + [sym_hex] = STATE(211), + [sym_binary] = STATE(211), + [sym_integer] = STATE(210), + [sym_signed_integer] = STATE(125), + [sym_unsigned_integer] = STATE(125), + [sym_number] = STATE(93), + [sym__float] = STATE(94), + [sym_scalar] = STATE(125), + [sym_boolean] = STATE(125), + [sym_function_call] = STATE(125), + [sym_method_call] = STATE(125), + [sym_expression] = STATE(144), + [sym_unary_expression] = STATE(125), + [sym_binary_expression] = STATE(125), + [sym_if] = STATE(125), + [sym_path] = STATE(108), + [sym_parenthesis] = STATE(125), + [sym_list] = STATE(125), + [sym_struct_member] = STATE(214), + [sym__struct_final_element] = STATE(233), + [sym_struct_definition] = STATE(108), + [sym_dictionary_member_assignment] = STATE(199), + [sym_dictionary_construction] = STATE(125), + [sym_closure_definition] = STATE(125), + [sym_formula] = STATE(125), + [aux_sym_struct_definition_repeat1] = STATE(184), + [sym_identifier] = ACTIONS(67), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(134), - [sym_default] = ACTIONS(136), - [aux_sym_base_ten_token1] = ACTIONS(136), - [aux_sym_octal_token1] = ACTIONS(134), - [aux_sym_hex_token1] = ACTIONS(134), - [aux_sym_binary_token1] = ACTIONS(134), - [sym_true] = ACTIONS(136), - [sym_false] = ACTIONS(136), - [anon_sym_COLON] = ACTIONS(134), - [anon_sym_DASH] = ACTIONS(134), - [anon_sym_PLUS] = ACTIONS(134), - [anon_sym_BANG] = ACTIONS(136), - [anon_sym_STAR_STAR] = ACTIONS(134), - [anon_sym_STAR] = ACTIONS(136), - [anon_sym_SLASH] = ACTIONS(136), - [anon_sym_SLASH_SLASH] = ACTIONS(134), - [anon_sym_LT_LT] = ACTIONS(134), - [anon_sym_GT_GT] = ACTIONS(134), - [anon_sym_AMP] = ACTIONS(136), - [anon_sym_PIPE] = ACTIONS(136), - [anon_sym_CARET] = ACTIONS(134), - [anon_sym_GT] = ACTIONS(136), - [anon_sym_GT_EQ] = ACTIONS(134), - [anon_sym_EQ_EQ] = ACTIONS(134), - [anon_sym_LT_EQ] = ACTIONS(134), - [anon_sym_LT] = ACTIONS(136), - [anon_sym_BANG_EQ] = ACTIONS(134), - [anon_sym_AMP_AMP] = ACTIONS(134), - [anon_sym_PIPE_PIPE] = ACTIONS(134), - [anon_sym_DOT_DOT] = ACTIONS(136), - [anon_sym_DOT_DOT_EQ] = ACTIONS(134), - [anon_sym_if] = ACTIONS(136), - [anon_sym_else] = ACTIONS(136), - [anon_sym_LPAREN] = ACTIONS(134), - [anon_sym_RPAREN] = ACTIONS(134), - [anon_sym_LBRACK] = ACTIONS(134), - [anon_sym_COMMA] = ACTIONS(134), - [anon_sym_RBRACK] = ACTIONS(134), - [anon_sym_EQ] = ACTIONS(136), - }, - [STATE(21)] = { - [ts_builtin_sym_end] = ACTIONS(138), - [sym_identifier] = ACTIONS(140), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(138), - [sym_default] = ACTIONS(140), - [aux_sym_base_ten_token1] = ACTIONS(140), - [aux_sym_octal_token1] = ACTIONS(138), - [aux_sym_hex_token1] = ACTIONS(138), - [aux_sym_binary_token1] = ACTIONS(138), - [sym_true] = ACTIONS(140), - [sym_false] = ACTIONS(140), - [anon_sym_COLON] = ACTIONS(138), - [anon_sym_DASH] = ACTIONS(138), - [anon_sym_PLUS] = ACTIONS(138), - [anon_sym_BANG] = ACTIONS(140), - [anon_sym_STAR_STAR] = ACTIONS(138), - [anon_sym_STAR] = ACTIONS(140), - [anon_sym_SLASH] = ACTIONS(140), - [anon_sym_SLASH_SLASH] = ACTIONS(138), - [anon_sym_LT_LT] = ACTIONS(138), - [anon_sym_GT_GT] = ACTIONS(138), - [anon_sym_AMP] = ACTIONS(140), - [anon_sym_PIPE] = ACTIONS(140), - [anon_sym_CARET] = ACTIONS(138), - [anon_sym_GT] = ACTIONS(140), - [anon_sym_GT_EQ] = ACTIONS(138), - [anon_sym_EQ_EQ] = ACTIONS(138), - [anon_sym_LT_EQ] = ACTIONS(138), - [anon_sym_LT] = ACTIONS(140), - [anon_sym_BANG_EQ] = ACTIONS(138), - [anon_sym_AMP_AMP] = ACTIONS(138), - [anon_sym_PIPE_PIPE] = ACTIONS(138), - [anon_sym_DOT_DOT] = ACTIONS(140), - [anon_sym_DOT_DOT_EQ] = ACTIONS(138), - [anon_sym_if] = ACTIONS(140), - [anon_sym_else] = ACTIONS(140), - [anon_sym_LPAREN] = ACTIONS(138), - [anon_sym_RPAREN] = ACTIONS(138), - [anon_sym_LBRACK] = ACTIONS(138), - [anon_sym_COMMA] = ACTIONS(138), - [anon_sym_RBRACK] = ACTIONS(138), - [anon_sym_EQ] = ACTIONS(140), - }, - [STATE(22)] = { - [ts_builtin_sym_end] = ACTIONS(142), - [sym_identifier] = ACTIONS(144), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(142), - [sym_default] = ACTIONS(144), - [aux_sym_base_ten_token1] = ACTIONS(144), - [aux_sym_octal_token1] = ACTIONS(142), - [aux_sym_hex_token1] = ACTIONS(142), - [aux_sym_binary_token1] = ACTIONS(142), - [sym_true] = ACTIONS(144), - [sym_false] = ACTIONS(144), - [anon_sym_COLON] = ACTIONS(142), - [anon_sym_DASH] = ACTIONS(142), - [anon_sym_PLUS] = ACTIONS(142), - [anon_sym_BANG] = ACTIONS(144), - [anon_sym_STAR_STAR] = ACTIONS(142), - [anon_sym_STAR] = ACTIONS(144), - [anon_sym_SLASH] = ACTIONS(144), - [anon_sym_SLASH_SLASH] = ACTIONS(142), - [anon_sym_LT_LT] = ACTIONS(142), - [anon_sym_GT_GT] = ACTIONS(142), - [anon_sym_AMP] = ACTIONS(144), - [anon_sym_PIPE] = ACTIONS(144), - [anon_sym_CARET] = ACTIONS(142), - [anon_sym_GT] = ACTIONS(144), - [anon_sym_GT_EQ] = ACTIONS(142), - [anon_sym_EQ_EQ] = ACTIONS(142), - [anon_sym_LT_EQ] = ACTIONS(142), - [anon_sym_LT] = ACTIONS(144), - [anon_sym_BANG_EQ] = ACTIONS(142), - [anon_sym_AMP_AMP] = ACTIONS(142), - [anon_sym_PIPE_PIPE] = ACTIONS(142), - [anon_sym_DOT_DOT] = ACTIONS(144), - [anon_sym_DOT_DOT_EQ] = ACTIONS(142), - [anon_sym_if] = ACTIONS(144), - [anon_sym_else] = ACTIONS(144), - [anon_sym_LPAREN] = ACTIONS(142), - [anon_sym_RPAREN] = ACTIONS(142), - [anon_sym_LBRACK] = ACTIONS(142), - [anon_sym_COMMA] = ACTIONS(142), - [anon_sym_RBRACK] = ACTIONS(142), - [anon_sym_EQ] = ACTIONS(144), - }, - [STATE(23)] = { - [ts_builtin_sym_end] = ACTIONS(146), - [sym_identifier] = ACTIONS(148), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(146), - [sym_default] = ACTIONS(148), - [aux_sym_base_ten_token1] = ACTIONS(148), - [aux_sym_octal_token1] = ACTIONS(146), - [aux_sym_hex_token1] = ACTIONS(146), - [aux_sym_binary_token1] = ACTIONS(146), - [sym_true] = ACTIONS(148), - [sym_false] = ACTIONS(148), - [anon_sym_COLON] = ACTIONS(146), - [anon_sym_DASH] = ACTIONS(146), - [anon_sym_PLUS] = ACTIONS(146), - [anon_sym_BANG] = ACTIONS(148), - [anon_sym_STAR_STAR] = ACTIONS(146), - [anon_sym_STAR] = ACTIONS(148), - [anon_sym_SLASH] = ACTIONS(148), - [anon_sym_SLASH_SLASH] = ACTIONS(146), - [anon_sym_LT_LT] = ACTIONS(146), - [anon_sym_GT_GT] = ACTIONS(146), - [anon_sym_AMP] = ACTIONS(148), - [anon_sym_PIPE] = ACTIONS(148), - [anon_sym_CARET] = ACTIONS(146), - [anon_sym_GT] = ACTIONS(148), - [anon_sym_GT_EQ] = ACTIONS(146), - [anon_sym_EQ_EQ] = ACTIONS(146), - [anon_sym_LT_EQ] = ACTIONS(146), - [anon_sym_LT] = ACTIONS(148), - [anon_sym_BANG_EQ] = ACTIONS(146), - [anon_sym_AMP_AMP] = ACTIONS(146), - [anon_sym_PIPE_PIPE] = ACTIONS(146), - [anon_sym_DOT_DOT] = ACTIONS(148), - [anon_sym_DOT_DOT_EQ] = ACTIONS(146), - [anon_sym_if] = ACTIONS(148), - [anon_sym_else] = ACTIONS(148), - [anon_sym_LPAREN] = ACTIONS(146), - [anon_sym_RPAREN] = ACTIONS(146), - [anon_sym_LBRACK] = ACTIONS(146), - [anon_sym_COMMA] = ACTIONS(146), - [anon_sym_RBRACK] = ACTIONS(146), - [anon_sym_EQ] = ACTIONS(148), - }, - [STATE(24)] = { - [ts_builtin_sym_end] = ACTIONS(150), - [sym_identifier] = ACTIONS(152), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(150), - [sym_default] = ACTIONS(152), - [aux_sym_base_ten_token1] = ACTIONS(152), - [aux_sym_octal_token1] = ACTIONS(150), - [aux_sym_hex_token1] = ACTIONS(150), - [aux_sym_binary_token1] = ACTIONS(150), - [sym_true] = ACTIONS(152), - [sym_false] = ACTIONS(152), - [anon_sym_COLON] = ACTIONS(150), - [anon_sym_DASH] = ACTIONS(150), - [anon_sym_PLUS] = ACTIONS(150), - [anon_sym_BANG] = ACTIONS(152), - [anon_sym_STAR_STAR] = ACTIONS(150), - [anon_sym_STAR] = ACTIONS(152), - [anon_sym_SLASH] = ACTIONS(152), - [anon_sym_SLASH_SLASH] = ACTIONS(150), - [anon_sym_LT_LT] = ACTIONS(150), - [anon_sym_GT_GT] = ACTIONS(150), - [anon_sym_AMP] = ACTIONS(152), - [anon_sym_PIPE] = ACTIONS(152), - [anon_sym_CARET] = ACTIONS(150), - [anon_sym_GT] = ACTIONS(152), - [anon_sym_GT_EQ] = ACTIONS(150), - [anon_sym_EQ_EQ] = ACTIONS(150), - [anon_sym_LT_EQ] = ACTIONS(150), - [anon_sym_LT] = ACTIONS(152), - [anon_sym_BANG_EQ] = ACTIONS(150), - [anon_sym_AMP_AMP] = ACTIONS(150), - [anon_sym_PIPE_PIPE] = ACTIONS(150), - [anon_sym_DOT_DOT] = ACTIONS(152), - [anon_sym_DOT_DOT_EQ] = ACTIONS(150), - [anon_sym_if] = ACTIONS(152), - [anon_sym_else] = ACTIONS(152), - [anon_sym_LPAREN] = ACTIONS(150), - [anon_sym_RPAREN] = ACTIONS(150), - [anon_sym_LBRACK] = ACTIONS(150), - [anon_sym_COMMA] = ACTIONS(150), - [anon_sym_RBRACK] = ACTIONS(150), - [anon_sym_EQ] = ACTIONS(152), - }, - [STATE(25)] = { - [ts_builtin_sym_end] = ACTIONS(154), - [sym_identifier] = ACTIONS(156), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(154), - [sym_default] = ACTIONS(156), - [aux_sym_base_ten_token1] = ACTIONS(156), - [aux_sym_octal_token1] = ACTIONS(154), - [aux_sym_hex_token1] = ACTIONS(154), - [aux_sym_binary_token1] = ACTIONS(154), - [sym_true] = ACTIONS(156), - [sym_false] = ACTIONS(156), - [anon_sym_COLON] = ACTIONS(154), - [anon_sym_DASH] = ACTIONS(154), - [anon_sym_PLUS] = ACTIONS(154), - [anon_sym_BANG] = ACTIONS(156), - [anon_sym_STAR_STAR] = ACTIONS(154), - [anon_sym_STAR] = ACTIONS(156), - [anon_sym_SLASH] = ACTIONS(156), - [anon_sym_SLASH_SLASH] = ACTIONS(154), - [anon_sym_LT_LT] = ACTIONS(154), - [anon_sym_GT_GT] = ACTIONS(154), - [anon_sym_AMP] = ACTIONS(156), - [anon_sym_PIPE] = ACTIONS(156), - [anon_sym_CARET] = ACTIONS(154), - [anon_sym_GT] = ACTIONS(156), - [anon_sym_GT_EQ] = ACTIONS(154), - [anon_sym_EQ_EQ] = ACTIONS(154), - [anon_sym_LT_EQ] = ACTIONS(154), - [anon_sym_LT] = ACTIONS(156), - [anon_sym_BANG_EQ] = ACTIONS(154), - [anon_sym_AMP_AMP] = ACTIONS(154), - [anon_sym_PIPE_PIPE] = ACTIONS(154), - [anon_sym_DOT_DOT] = ACTIONS(156), - [anon_sym_DOT_DOT_EQ] = ACTIONS(154), - [anon_sym_if] = ACTIONS(156), - [anon_sym_else] = ACTIONS(156), - [anon_sym_LPAREN] = ACTIONS(154), - [anon_sym_RPAREN] = ACTIONS(154), - [anon_sym_LBRACK] = ACTIONS(154), - [anon_sym_COMMA] = ACTIONS(154), - [anon_sym_RBRACK] = ACTIONS(154), - [anon_sym_EQ] = ACTIONS(156), - }, - [STATE(26)] = { - [ts_builtin_sym_end] = ACTIONS(158), - [sym_identifier] = ACTIONS(160), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(158), - [sym_default] = ACTIONS(160), - [aux_sym_base_ten_token1] = ACTIONS(160), - [aux_sym_octal_token1] = ACTIONS(158), - [aux_sym_hex_token1] = ACTIONS(158), - [aux_sym_binary_token1] = ACTIONS(158), - [sym_true] = ACTIONS(160), - [sym_false] = ACTIONS(160), - [anon_sym_COLON] = ACTIONS(158), - [anon_sym_DASH] = ACTIONS(158), - [anon_sym_PLUS] = ACTIONS(158), - [anon_sym_BANG] = ACTIONS(160), - [anon_sym_STAR_STAR] = ACTIONS(158), - [anon_sym_STAR] = ACTIONS(160), - [anon_sym_SLASH] = ACTIONS(160), - [anon_sym_SLASH_SLASH] = ACTIONS(158), - [anon_sym_LT_LT] = ACTIONS(158), - [anon_sym_GT_GT] = ACTIONS(158), - [anon_sym_AMP] = ACTIONS(160), - [anon_sym_PIPE] = ACTIONS(160), - [anon_sym_CARET] = ACTIONS(158), - [anon_sym_GT] = ACTIONS(160), - [anon_sym_GT_EQ] = ACTIONS(158), - [anon_sym_EQ_EQ] = ACTIONS(158), - [anon_sym_LT_EQ] = ACTIONS(158), - [anon_sym_LT] = ACTIONS(160), - [anon_sym_BANG_EQ] = ACTIONS(158), - [anon_sym_AMP_AMP] = ACTIONS(158), - [anon_sym_PIPE_PIPE] = ACTIONS(158), - [anon_sym_DOT_DOT] = ACTIONS(160), - [anon_sym_DOT_DOT_EQ] = ACTIONS(158), - [anon_sym_if] = ACTIONS(160), - [anon_sym_else] = ACTIONS(160), - [anon_sym_LPAREN] = ACTIONS(158), - [anon_sym_RPAREN] = ACTIONS(158), - [anon_sym_LBRACK] = ACTIONS(158), - [anon_sym_COMMA] = ACTIONS(158), - [anon_sym_RBRACK] = ACTIONS(158), - [anon_sym_EQ] = ACTIONS(160), - }, - [STATE(27)] = { - [ts_builtin_sym_end] = ACTIONS(162), - [sym_identifier] = ACTIONS(164), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(162), - [sym_default] = ACTIONS(164), - [aux_sym_base_ten_token1] = ACTIONS(164), - [aux_sym_octal_token1] = ACTIONS(162), - [aux_sym_hex_token1] = ACTIONS(162), - [aux_sym_binary_token1] = ACTIONS(162), - [sym_true] = ACTIONS(164), - [sym_false] = ACTIONS(164), - [anon_sym_COLON] = ACTIONS(162), - [anon_sym_DASH] = ACTIONS(162), - [anon_sym_PLUS] = ACTIONS(162), - [anon_sym_BANG] = ACTIONS(164), - [anon_sym_STAR_STAR] = ACTIONS(162), - [anon_sym_STAR] = ACTIONS(164), - [anon_sym_SLASH] = ACTIONS(164), - [anon_sym_SLASH_SLASH] = ACTIONS(162), - [anon_sym_LT_LT] = ACTIONS(162), - [anon_sym_GT_GT] = ACTIONS(162), - [anon_sym_AMP] = ACTIONS(164), - [anon_sym_PIPE] = ACTIONS(164), - [anon_sym_CARET] = ACTIONS(162), - [anon_sym_GT] = ACTIONS(164), - [anon_sym_GT_EQ] = ACTIONS(162), - [anon_sym_EQ_EQ] = ACTIONS(162), - [anon_sym_LT_EQ] = ACTIONS(162), - [anon_sym_LT] = ACTIONS(164), - [anon_sym_BANG_EQ] = ACTIONS(162), - [anon_sym_AMP_AMP] = ACTIONS(162), - [anon_sym_PIPE_PIPE] = ACTIONS(162), - [anon_sym_DOT_DOT] = ACTIONS(164), - [anon_sym_DOT_DOT_EQ] = ACTIONS(162), - [anon_sym_if] = ACTIONS(164), - [anon_sym_else] = ACTIONS(164), - [anon_sym_LPAREN] = ACTIONS(162), - [anon_sym_RPAREN] = ACTIONS(162), - [anon_sym_LBRACK] = ACTIONS(162), - [anon_sym_COMMA] = ACTIONS(162), - [anon_sym_RBRACK] = ACTIONS(162), - [anon_sym_EQ] = ACTIONS(164), - }, - [STATE(28)] = { - [ts_builtin_sym_end] = ACTIONS(166), - [sym_identifier] = ACTIONS(168), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(166), - [sym_default] = ACTIONS(168), - [aux_sym_base_ten_token1] = ACTIONS(168), - [aux_sym_octal_token1] = ACTIONS(166), - [aux_sym_hex_token1] = ACTIONS(166), - [aux_sym_binary_token1] = ACTIONS(166), - [sym_true] = ACTIONS(168), - [sym_false] = ACTIONS(168), - [anon_sym_COLON] = ACTIONS(166), - [anon_sym_DASH] = ACTIONS(166), - [anon_sym_PLUS] = ACTIONS(166), - [anon_sym_BANG] = ACTIONS(168), - [anon_sym_STAR_STAR] = ACTIONS(166), - [anon_sym_STAR] = ACTIONS(168), - [anon_sym_SLASH] = ACTIONS(168), - [anon_sym_SLASH_SLASH] = ACTIONS(166), - [anon_sym_LT_LT] = ACTIONS(166), - [anon_sym_GT_GT] = ACTIONS(166), - [anon_sym_AMP] = ACTIONS(168), - [anon_sym_PIPE] = ACTIONS(168), - [anon_sym_CARET] = ACTIONS(166), - [anon_sym_GT] = ACTIONS(168), - [anon_sym_GT_EQ] = ACTIONS(166), - [anon_sym_EQ_EQ] = ACTIONS(166), - [anon_sym_LT_EQ] = ACTIONS(166), - [anon_sym_LT] = ACTIONS(168), - [anon_sym_BANG_EQ] = ACTIONS(166), - [anon_sym_AMP_AMP] = ACTIONS(166), - [anon_sym_PIPE_PIPE] = ACTIONS(166), - [anon_sym_DOT_DOT] = ACTIONS(168), - [anon_sym_DOT_DOT_EQ] = ACTIONS(166), - [anon_sym_if] = ACTIONS(168), - [anon_sym_else] = ACTIONS(168), - [anon_sym_LPAREN] = ACTIONS(166), - [anon_sym_RPAREN] = ACTIONS(166), - [anon_sym_LBRACK] = ACTIONS(166), - [anon_sym_COMMA] = ACTIONS(166), - [anon_sym_RBRACK] = ACTIONS(166), - [anon_sym_EQ] = ACTIONS(168), - }, - [STATE(29)] = { - [ts_builtin_sym_end] = ACTIONS(170), - [sym_identifier] = ACTIONS(172), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(170), - [sym_default] = ACTIONS(172), - [aux_sym_base_ten_token1] = ACTIONS(172), - [aux_sym_octal_token1] = ACTIONS(170), - [aux_sym_hex_token1] = ACTIONS(170), - [aux_sym_binary_token1] = ACTIONS(170), - [sym_true] = ACTIONS(172), - [sym_false] = ACTIONS(172), - [anon_sym_COLON] = ACTIONS(170), - [anon_sym_DASH] = ACTIONS(170), - [anon_sym_PLUS] = ACTIONS(170), - [anon_sym_BANG] = ACTIONS(172), - [anon_sym_STAR_STAR] = ACTIONS(170), - [anon_sym_STAR] = ACTIONS(172), - [anon_sym_SLASH] = ACTIONS(172), - [anon_sym_SLASH_SLASH] = ACTIONS(170), - [anon_sym_LT_LT] = ACTIONS(170), - [anon_sym_GT_GT] = ACTIONS(170), - [anon_sym_AMP] = ACTIONS(172), - [anon_sym_PIPE] = ACTIONS(172), - [anon_sym_CARET] = ACTIONS(170), - [anon_sym_GT] = ACTIONS(172), - [anon_sym_GT_EQ] = ACTIONS(170), - [anon_sym_EQ_EQ] = ACTIONS(170), - [anon_sym_LT_EQ] = ACTIONS(170), - [anon_sym_LT] = ACTIONS(172), - [anon_sym_BANG_EQ] = ACTIONS(170), - [anon_sym_AMP_AMP] = ACTIONS(170), - [anon_sym_PIPE_PIPE] = ACTIONS(170), - [anon_sym_DOT_DOT] = ACTIONS(172), - [anon_sym_DOT_DOT_EQ] = ACTIONS(170), - [anon_sym_if] = ACTIONS(172), - [anon_sym_else] = ACTIONS(172), - [anon_sym_LPAREN] = ACTIONS(170), - [anon_sym_RPAREN] = ACTIONS(170), - [anon_sym_LBRACK] = ACTIONS(170), - [anon_sym_COMMA] = ACTIONS(170), - [anon_sym_RBRACK] = ACTIONS(170), - [anon_sym_EQ] = ACTIONS(172), - }, - [STATE(30)] = { - [ts_builtin_sym_end] = ACTIONS(174), - [sym_identifier] = ACTIONS(176), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(174), - [sym_default] = ACTIONS(176), - [aux_sym_base_ten_token1] = ACTIONS(176), - [aux_sym_octal_token1] = ACTIONS(174), - [aux_sym_hex_token1] = ACTIONS(174), - [aux_sym_binary_token1] = ACTIONS(174), - [sym_true] = ACTIONS(176), - [sym_false] = ACTIONS(176), - [anon_sym_COLON] = ACTIONS(174), - [anon_sym_DASH] = ACTIONS(174), - [anon_sym_PLUS] = ACTIONS(174), - [anon_sym_BANG] = ACTIONS(176), - [anon_sym_STAR_STAR] = ACTIONS(174), - [anon_sym_STAR] = ACTIONS(176), - [anon_sym_SLASH] = ACTIONS(176), - [anon_sym_SLASH_SLASH] = ACTIONS(174), - [anon_sym_LT_LT] = ACTIONS(174), - [anon_sym_GT_GT] = ACTIONS(174), - [anon_sym_AMP] = ACTIONS(176), - [anon_sym_PIPE] = ACTIONS(176), - [anon_sym_CARET] = ACTIONS(174), - [anon_sym_GT] = ACTIONS(176), - [anon_sym_GT_EQ] = ACTIONS(174), - [anon_sym_EQ_EQ] = ACTIONS(174), - [anon_sym_LT_EQ] = ACTIONS(174), - [anon_sym_LT] = ACTIONS(176), - [anon_sym_BANG_EQ] = ACTIONS(174), - [anon_sym_AMP_AMP] = ACTIONS(174), - [anon_sym_PIPE_PIPE] = ACTIONS(174), - [anon_sym_DOT_DOT] = ACTIONS(176), - [anon_sym_DOT_DOT_EQ] = ACTIONS(174), - [anon_sym_if] = ACTIONS(176), - [anon_sym_else] = ACTIONS(176), - [anon_sym_LPAREN] = ACTIONS(174), - [anon_sym_RPAREN] = ACTIONS(174), - [anon_sym_LBRACK] = ACTIONS(174), - [anon_sym_COMMA] = ACTIONS(174), - [anon_sym_RBRACK] = ACTIONS(174), - [anon_sym_EQ] = ACTIONS(176), - }, - [STATE(31)] = { - [ts_builtin_sym_end] = ACTIONS(178), - [sym_identifier] = ACTIONS(180), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(178), - [sym_default] = ACTIONS(180), - [aux_sym_base_ten_token1] = ACTIONS(180), - [aux_sym_octal_token1] = ACTIONS(178), - [aux_sym_hex_token1] = ACTIONS(178), - [aux_sym_binary_token1] = ACTIONS(178), - [sym_true] = ACTIONS(180), - [sym_false] = ACTIONS(180), - [anon_sym_COLON] = ACTIONS(178), - [anon_sym_DASH] = ACTIONS(178), - [anon_sym_PLUS] = ACTIONS(178), - [anon_sym_BANG] = ACTIONS(180), - [anon_sym_STAR_STAR] = ACTIONS(178), - [anon_sym_STAR] = ACTIONS(180), - [anon_sym_SLASH] = ACTIONS(180), - [anon_sym_SLASH_SLASH] = ACTIONS(178), - [anon_sym_LT_LT] = ACTIONS(178), - [anon_sym_GT_GT] = ACTIONS(178), - [anon_sym_AMP] = ACTIONS(180), - [anon_sym_PIPE] = ACTIONS(180), - [anon_sym_CARET] = ACTIONS(178), - [anon_sym_GT] = ACTIONS(180), - [anon_sym_GT_EQ] = ACTIONS(178), - [anon_sym_EQ_EQ] = ACTIONS(178), - [anon_sym_LT_EQ] = ACTIONS(178), - [anon_sym_LT] = ACTIONS(180), - [anon_sym_BANG_EQ] = ACTIONS(178), - [anon_sym_AMP_AMP] = ACTIONS(178), - [anon_sym_PIPE_PIPE] = ACTIONS(178), - [anon_sym_DOT_DOT] = ACTIONS(180), - [anon_sym_DOT_DOT_EQ] = ACTIONS(178), - [anon_sym_if] = ACTIONS(180), - [anon_sym_else] = ACTIONS(180), - [anon_sym_LPAREN] = ACTIONS(178), - [anon_sym_RPAREN] = ACTIONS(178), - [anon_sym_LBRACK] = ACTIONS(178), - [anon_sym_COMMA] = ACTIONS(178), - [anon_sym_RBRACK] = ACTIONS(178), - [anon_sym_EQ] = ACTIONS(180), - }, - [STATE(32)] = { - [ts_builtin_sym_end] = ACTIONS(182), - [sym_identifier] = ACTIONS(184), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(182), - [sym_default] = ACTIONS(184), - [aux_sym_base_ten_token1] = ACTIONS(184), - [aux_sym_octal_token1] = ACTIONS(182), - [aux_sym_hex_token1] = ACTIONS(182), - [aux_sym_binary_token1] = ACTIONS(182), - [sym_true] = ACTIONS(184), - [sym_false] = ACTIONS(184), - [anon_sym_COLON] = ACTIONS(182), - [anon_sym_DASH] = ACTIONS(182), - [anon_sym_PLUS] = ACTIONS(182), - [anon_sym_BANG] = ACTIONS(184), - [anon_sym_STAR_STAR] = ACTIONS(182), - [anon_sym_STAR] = ACTIONS(184), - [anon_sym_SLASH] = ACTIONS(184), - [anon_sym_SLASH_SLASH] = ACTIONS(182), - [anon_sym_LT_LT] = ACTIONS(182), - [anon_sym_GT_GT] = ACTIONS(182), - [anon_sym_AMP] = ACTIONS(184), - [anon_sym_PIPE] = ACTIONS(184), - [anon_sym_CARET] = ACTIONS(182), - [anon_sym_GT] = ACTIONS(184), - [anon_sym_GT_EQ] = ACTIONS(182), - [anon_sym_EQ_EQ] = ACTIONS(182), - [anon_sym_LT_EQ] = ACTIONS(182), - [anon_sym_LT] = ACTIONS(184), - [anon_sym_BANG_EQ] = ACTIONS(182), - [anon_sym_AMP_AMP] = ACTIONS(182), - [anon_sym_PIPE_PIPE] = ACTIONS(182), - [anon_sym_DOT_DOT] = ACTIONS(184), - [anon_sym_DOT_DOT_EQ] = ACTIONS(182), - [anon_sym_if] = ACTIONS(184), - [anon_sym_else] = ACTIONS(184), - [anon_sym_LPAREN] = ACTIONS(182), - [anon_sym_RPAREN] = ACTIONS(182), - [anon_sym_LBRACK] = ACTIONS(182), - [anon_sym_COMMA] = ACTIONS(182), - [anon_sym_RBRACK] = ACTIONS(182), - [anon_sym_EQ] = ACTIONS(184), - }, - [STATE(33)] = { - [ts_builtin_sym_end] = ACTIONS(186), - [sym_identifier] = ACTIONS(188), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(186), - [sym_default] = ACTIONS(188), - [aux_sym_base_ten_token1] = ACTIONS(188), - [aux_sym_octal_token1] = ACTIONS(186), - [aux_sym_hex_token1] = ACTIONS(186), - [aux_sym_binary_token1] = ACTIONS(186), - [sym_true] = ACTIONS(188), - [sym_false] = ACTIONS(188), - [anon_sym_COLON] = ACTIONS(186), - [anon_sym_DASH] = ACTIONS(186), - [anon_sym_PLUS] = ACTIONS(186), - [anon_sym_BANG] = ACTIONS(188), - [anon_sym_STAR_STAR] = ACTIONS(186), - [anon_sym_STAR] = ACTIONS(188), - [anon_sym_SLASH] = ACTIONS(188), - [anon_sym_SLASH_SLASH] = ACTIONS(186), - [anon_sym_LT_LT] = ACTIONS(186), - [anon_sym_GT_GT] = ACTIONS(186), - [anon_sym_AMP] = ACTIONS(188), - [anon_sym_PIPE] = ACTIONS(188), - [anon_sym_CARET] = ACTIONS(186), - [anon_sym_GT] = ACTIONS(188), - [anon_sym_GT_EQ] = ACTIONS(186), - [anon_sym_EQ_EQ] = ACTIONS(186), - [anon_sym_LT_EQ] = ACTIONS(186), - [anon_sym_LT] = ACTIONS(188), - [anon_sym_BANG_EQ] = ACTIONS(186), - [anon_sym_AMP_AMP] = ACTIONS(186), - [anon_sym_PIPE_PIPE] = ACTIONS(186), - [anon_sym_DOT_DOT] = ACTIONS(188), - [anon_sym_DOT_DOT_EQ] = ACTIONS(186), - [anon_sym_if] = ACTIONS(188), - [anon_sym_else] = ACTIONS(188), - [anon_sym_LPAREN] = ACTIONS(186), - [anon_sym_RPAREN] = ACTIONS(186), - [anon_sym_LBRACK] = ACTIONS(186), - [anon_sym_COMMA] = ACTIONS(186), - [anon_sym_RBRACK] = ACTIONS(186), - [anon_sym_EQ] = ACTIONS(188), + [sym_string] = ACTIONS(7), + [sym_default] = ACTIONS(9), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_DASH] = ACTIONS(21), + [anon_sym_PLUS] = ACTIONS(21), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_if] = ACTIONS(23), + [anon_sym_LPAREN] = ACTIONS(25), + [anon_sym_RPAREN] = ACTIONS(73), + [anon_sym_LBRACK] = ACTIONS(27), + [sym_varadic_dots] = ACTIONS(71), + [anon_sym_LT_LT_LT] = ACTIONS(29), }, }; static const uint16_t ts_small_parse_table[] = { - [0] = 22, - ACTIONS(5), 1, + [0] = 23, + ACTIONS(75), 1, sym_identifier, - ACTIONS(7), 1, + ACTIONS(78), 1, sym_string, - ACTIONS(9), 1, + ACTIONS(81), 1, sym_default, - ACTIONS(11), 1, + ACTIONS(84), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(87), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(90), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(93), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(102), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(105), 1, anon_sym_LPAREN, - ACTIONS(27), 1, + ACTIONS(108), 1, anon_sym_LBRACK, - ACTIONS(190), 1, + ACTIONS(111), 1, anon_sym_RBRACK, - STATE(9), 1, - sym_number, - STATE(37), 1, + ACTIONS(113), 1, + anon_sym_LT_LT_LT, + STATE(7), 1, aux_sym_list_repeat1, - STATE(88), 1, + STATE(93), 1, + sym_number, + STATE(94), 1, sym__float, - STATE(105), 1, + STATE(147), 1, sym_expression, - STATE(134), 1, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(96), 2, sym_true, sym_false, - STATE(97), 2, + STATE(108), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(99), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3174,105 +2333,61 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [87] = 4, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(192), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(112), 16, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - anon_sym_DOT, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - ACTIONS(110), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - sym_unit_quote, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - [138] = 22, - ACTIONS(194), 1, + sym_formula, + [91] = 23, + ACTIONS(5), 1, sym_identifier, - ACTIONS(197), 1, + ACTIONS(7), 1, sym_string, - ACTIONS(200), 1, + ACTIONS(9), 1, sym_default, - ACTIONS(203), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(206), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(209), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(212), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(221), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(224), 1, + ACTIONS(25), 1, anon_sym_LPAREN, - ACTIONS(227), 1, + ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(230), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + ACTIONS(116), 1, anon_sym_RBRACK, - STATE(9), 1, - sym_number, - STATE(36), 1, + STATE(7), 1, aux_sym_list_repeat1, - STATE(88), 1, + STATE(93), 1, + sym_number, + STATE(94), 1, sym__float, - STATE(107), 1, + STATE(139), 1, sym_expression, - STATE(134), 1, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(215), 2, + ACTIONS(19), 2, sym_true, sym_false, - STATE(97), 2, + STATE(108), 2, sym_path, sym_struct_definition, - ACTIONS(218), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3286,7 +2401,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [225] = 22, + sym_formula, + [182] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3307,17 +2423,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(232), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + ACTIONS(118), 1, anon_sym_RBRACK, - STATE(9), 1, - sym_number, - STATE(36), 1, + STATE(10), 1, aux_sym_list_repeat1, - STATE(88), 1, + STATE(93), 1, + sym_number, + STATE(94), 1, sym__float, - STATE(106), 1, + STATE(138), 1, sym_expression, - STATE(134), 1, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3325,19 +2443,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(97), 2, + STATE(108), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3351,34 +2469,41 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [312] = 20, + sym_formula, + [273] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, + ACTIONS(23), 1, + anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(234), 1, - aux_sym_base_ten_token1, - ACTIONS(238), 1, - anon_sym_if, - STATE(3), 1, - sym_expression, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + ACTIONS(120), 1, + anon_sym_RBRACK, + STATE(7), 1, + aux_sym_list_repeat1, + STATE(93), 1, sym_number, - STATE(55), 1, + STATE(94), 1, sym__float, - STATE(134), 1, + STATE(143), 1, + sym_expression, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3386,19 +2511,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(85), 2, + STATE(108), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3412,7 +2537,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [393] = 20, + sym_formula, + [364] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3433,13 +2559,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + ACTIONS(122), 1, + anon_sym_RBRACK, + STATE(8), 1, + aux_sym_list_repeat1, + STATE(93), 1, sym_number, - STATE(88), 1, + STATE(94), 1, sym__float, - STATE(95), 1, + STATE(140), 1, sym_expression, - STATE(134), 1, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3447,19 +2579,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(97), 2, + STATE(108), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3473,54 +2605,105 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [474] = 20, - ACTIONS(5), 1, + sym_formula, + [455] = 4, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(128), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(124), 17, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, aux_sym_base_ten_token1, + anon_sym_DOT, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(126), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + sym_unit_quote, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [507] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, + aux_sym_base_ten_token1, + ACTIONS(142), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(144), 1, anon_sym_LPAREN, - ACTIONS(27), 1, + ACTIONS(146), 1, anon_sym_LBRACK, - STATE(9), 1, - sym_number, - STATE(88), 1, - sym__float, - STATE(98), 1, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(2), 1, sym_expression, - STATE(134), 1, + STATE(50), 1, + sym__float, + STATE(52), 1, + sym_number, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(97), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3534,7 +2717,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [555] = 20, + sym_formula, + [592] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3555,13 +2739,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, sym_number, - STATE(88), 1, + STATE(94), 1, sym__float, - STATE(90), 1, + STATE(104), 1, sym_expression, - STATE(134), 1, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3569,19 +2755,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(97), 2, + STATE(108), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3595,7 +2781,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [636] = 20, + sym_formula, + [677] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3616,13 +2803,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, sym_number, - STATE(88), 1, + STATE(94), 1, sym__float, - STATE(91), 1, + STATE(105), 1, sym_expression, - STATE(134), 1, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3630,19 +2819,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(97), 2, + STATE(108), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3656,7 +2845,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [717] = 20, + sym_formula, + [762] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3677,13 +2867,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, sym_number, - STATE(88), 1, + STATE(94), 1, sym__float, - STATE(92), 1, + STATE(107), 1, sym_expression, - STATE(134), 1, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3691,19 +2883,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(97), 2, + STATE(108), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3717,54 +2909,57 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [798] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_formula, + [847] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, + aux_sym_base_ten_token1, + ACTIONS(142), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(144), 1, anon_sym_LPAREN, - ACTIONS(27), 1, + ACTIONS(146), 1, anon_sym_LBRACK, - STATE(9), 1, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, + sym__float, + STATE(52), 1, sym_number, - STATE(15), 1, + STATE(55), 1, sym_expression, - STATE(88), 1, - sym__float, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(97), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3778,7 +2973,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [879] = 20, + sym_formula, + [932] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3799,13 +2995,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, sym_number, - STATE(88), 1, + STATE(94), 1, sym__float, - STATE(89), 1, + STATE(137), 1, sym_expression, - STATE(134), 1, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3813,19 +3011,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(97), 2, + STATE(108), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3839,7 +3037,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [960] = 20, + sym_formula, + [1017] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3860,13 +3059,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, sym_number, - STATE(88), 1, + STATE(94), 1, sym__float, - STATE(103), 1, + STATE(141), 1, sym_expression, - STATE(134), 1, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3874,19 +3075,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(97), 2, + STATE(108), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3900,54 +3101,57 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1041] = 20, - ACTIONS(5), 1, + sym_formula, + [1102] = 21, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(130), 1, sym_identifier, - ACTIONS(7), 1, + ACTIONS(132), 1, sym_string, - ACTIONS(9), 1, + ACTIONS(134), 1, sym_default, - ACTIONS(11), 1, + ACTIONS(136), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(142), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(144), 1, anon_sym_LPAREN, - ACTIONS(27), 1, + ACTIONS(146), 1, anon_sym_LBRACK, - STATE(9), 1, - sym_number, - STATE(88), 1, - sym__float, - STATE(93), 1, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(3), 1, sym_expression, - STATE(134), 1, + STATE(50), 1, + sym__float, + STATE(52), 1, + sym_number, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(97), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3961,7 +3165,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1122] = 20, + sym_formula, + [1187] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3982,13 +3187,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, sym_number, - STATE(88), 1, - sym__float, STATE(94), 1, + sym__float, + STATE(113), 1, sym_expression, - STATE(134), 1, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3996,19 +3203,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(97), 2, + STATE(108), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4022,7 +3229,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1203] = 20, + sym_formula, + [1272] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4043,13 +3251,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, sym_number, - STATE(11), 1, - sym_expression, - STATE(88), 1, + STATE(94), 1, sym__float, - STATE(134), 1, + STATE(110), 1, + sym_expression, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4057,19 +3267,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(97), 2, + STATE(108), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4083,7 +3293,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1284] = 20, + sym_formula, + [1357] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4104,13 +3315,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, sym_number, - STATE(88), 1, + STATE(94), 1, sym__float, - STATE(99), 1, + STATE(142), 1, sym_expression, - STATE(134), 1, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4118,19 +3331,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(97), 2, + STATE(108), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4144,129 +3357,56 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1365] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - STATE(9), 1, - sym_number, - STATE(88), 1, - sym__float, - STATE(96), 1, - sym_expression, - STATE(134), 1, - sym_integer, + sym_formula, + [1442] = 5, + ACTIONS(154), 1, + anon_sym_DOT, + STATE(27), 1, + aux_sym_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(150), 17, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, sym_true, sym_false, - STATE(97), 2, - sym_path, - sym_struct_definition, - ACTIONS(21), 3, anon_sym_DASH, - anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(20), 13, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - [1446] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(152), 21, sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(234), 1, - aux_sym_base_ten_token1, - ACTIONS(238), 1, - anon_sym_if, - STATE(9), 1, - sym_number, - STATE(55), 1, - sym__float, - STATE(75), 1, - sym_expression, - STATE(134), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - STATE(85), 2, - sym_path, - sym_struct_definition, - ACTIONS(236), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(130), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(20), 13, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - [1527] = 20, + anon_sym_DASH_GT, + anon_sym_LT_LT_LT, + [1495] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4287,13 +3427,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, sym_number, - STATE(88), 1, + STATE(94), 1, sym__float, - STATE(100), 1, + STATE(117), 1, sym_expression, - STATE(134), 1, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4301,19 +3443,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(97), 2, + STATE(108), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4327,54 +3469,57 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1608] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_formula, + [1580] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, + aux_sym_base_ten_token1, + ACTIONS(142), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(144), 1, anon_sym_LPAREN, - ACTIONS(27), 1, + ACTIONS(146), 1, anon_sym_LBRACK, - STATE(9), 1, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, + sym__float, + STATE(52), 1, sym_number, - STATE(17), 1, + STATE(57), 1, sym_expression, - STATE(88), 1, - sym__float, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(97), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4388,23 +3533,26 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1689] = 5, - ACTIONS(244), 1, - sym_unit_quote, - STATE(23), 1, - sym__unit, + sym_formula, + [1665] = 5, + ACTIONS(154), 1, + anon_sym_DOT, + STATE(39), 1, + aux_sym_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(240), 15, + ACTIONS(156), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, + anon_sym_DASH, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, + anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, @@ -4412,17 +3560,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(242), 21, + ACTIONS(158), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -4434,54 +3580,58 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_LBRACK, - [1740] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, + anon_sym_DASH_GT, + anon_sym_LT_LT_LT, + [1718] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(234), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, aux_sym_base_ten_token1, - ACTIONS(238), 1, + ACTIONS(142), 1, anon_sym_if, - STATE(9), 1, - sym_number, - STATE(55), 1, + ACTIONS(144), 1, + anon_sym_LPAREN, + ACTIONS(146), 1, + anon_sym_LBRACK, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, sym__float, - STATE(78), 1, + STATE(52), 1, + sym_number, + STATE(63), 1, sym_expression, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(85), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4495,54 +3645,57 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1821] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, + sym_formula, + [1803] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(234), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, aux_sym_base_ten_token1, - ACTIONS(238), 1, + ACTIONS(142), 1, anon_sym_if, - STATE(9), 1, + ACTIONS(144), 1, + anon_sym_LPAREN, + ACTIONS(146), 1, + anon_sym_LBRACK, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, + sym__float, + STATE(52), 1, sym_number, - STATE(17), 1, + STATE(64), 1, sym_expression, - STATE(55), 1, - sym__float, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(85), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4556,54 +3709,57 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1902] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, + sym_formula, + [1888] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(234), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, aux_sym_base_ten_token1, - ACTIONS(238), 1, + ACTIONS(142), 1, anon_sym_if, - STATE(9), 1, - sym_number, - STATE(55), 1, + ACTIONS(144), 1, + anon_sym_LPAREN, + ACTIONS(146), 1, + anon_sym_LBRACK, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, sym__float, - STATE(79), 1, + STATE(52), 1, + sym_number, + STATE(65), 1, sym_expression, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(85), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4617,54 +3773,57 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [1983] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, + sym_formula, + [1973] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(234), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, aux_sym_base_ten_token1, - ACTIONS(238), 1, + ACTIONS(142), 1, anon_sym_if, - STATE(9), 1, - sym_number, - STATE(55), 1, + ACTIONS(144), 1, + anon_sym_LPAREN, + ACTIONS(146), 1, + anon_sym_LBRACK, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, sym__float, - STATE(80), 1, + STATE(52), 1, + sym_number, + STATE(66), 1, sym_expression, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(85), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4678,54 +3837,57 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2064] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, + sym_formula, + [2058] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(234), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, aux_sym_base_ten_token1, - ACTIONS(238), 1, + ACTIONS(142), 1, anon_sym_if, - STATE(9), 1, - sym_number, - STATE(55), 1, + ACTIONS(144), 1, + anon_sym_LPAREN, + ACTIONS(146), 1, + anon_sym_LBRACK, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, sym__float, - STATE(77), 1, + STATE(52), 1, + sym_number, + STATE(67), 1, sym_expression, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(85), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4739,54 +3901,57 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2145] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, + sym_formula, + [2143] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(234), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, aux_sym_base_ten_token1, - ACTIONS(238), 1, + ACTIONS(142), 1, anon_sym_if, - STATE(9), 1, - sym_number, - STATE(55), 1, + ACTIONS(144), 1, + anon_sym_LPAREN, + ACTIONS(146), 1, + anon_sym_LBRACK, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, sym__float, - STATE(81), 1, + STATE(52), 1, + sym_number, + STATE(68), 1, sym_expression, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(85), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4800,54 +3965,57 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2226] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, + sym_formula, + [2228] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(234), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, aux_sym_base_ten_token1, - ACTIONS(238), 1, + ACTIONS(142), 1, anon_sym_if, - STATE(9), 1, - sym_number, - STATE(55), 1, + ACTIONS(144), 1, + anon_sym_LPAREN, + ACTIONS(146), 1, + anon_sym_LBRACK, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, sym__float, - STATE(76), 1, + STATE(52), 1, + sym_number, + STATE(69), 1, sym_expression, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(85), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4861,54 +4029,57 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2307] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, + sym_formula, + [2313] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(234), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, aux_sym_base_ten_token1, - ACTIONS(238), 1, + ACTIONS(142), 1, anon_sym_if, - STATE(9), 1, - sym_number, - STATE(55), 1, + ACTIONS(144), 1, + anon_sym_LPAREN, + ACTIONS(146), 1, + anon_sym_LBRACK, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, sym__float, - STATE(83), 1, + STATE(52), 1, + sym_number, + STATE(70), 1, sym_expression, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(85), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4922,54 +4093,57 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2388] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, + sym_formula, + [2398] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(234), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, aux_sym_base_ten_token1, - ACTIONS(238), 1, + ACTIONS(142), 1, anon_sym_if, - STATE(9), 1, - sym_number, - STATE(55), 1, + ACTIONS(144), 1, + anon_sym_LPAREN, + ACTIONS(146), 1, + anon_sym_LBRACK, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, sym__float, - STATE(82), 1, + STATE(52), 1, + sym_number, + STATE(71), 1, sym_expression, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(85), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4983,54 +4157,57 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2469] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, + sym_formula, + [2483] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(234), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, aux_sym_base_ten_token1, - ACTIONS(238), 1, + ACTIONS(142), 1, anon_sym_if, - STATE(9), 1, - sym_number, - STATE(55), 1, + ACTIONS(144), 1, + anon_sym_LPAREN, + ACTIONS(146), 1, + anon_sym_LBRACK, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, sym__float, - STATE(73), 1, + STATE(52), 1, + sym_number, + STATE(72), 1, sym_expression, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(85), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5044,54 +4221,57 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2550] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, + sym_formula, + [2568] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(234), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, aux_sym_base_ten_token1, - ACTIONS(238), 1, + ACTIONS(142), 1, anon_sym_if, - STATE(9), 1, - sym_number, - STATE(55), 1, + ACTIONS(144), 1, + anon_sym_LPAREN, + ACTIONS(146), 1, + anon_sym_LBRACK, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, sym__float, - STATE(74), 1, + STATE(52), 1, + sym_number, + STATE(73), 1, sym_expression, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(85), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5105,54 +4285,105 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2631] = 20, - ACTIONS(5), 1, + sym_formula, + [2653] = 5, + ACTIONS(164), 1, + anon_sym_DOT, + STATE(39), 1, + aux_sym_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(160), 17, sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, sym_default, - ACTIONS(11), 1, aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_DASH, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(162), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_DASH_GT, + anon_sym_LT_LT_LT, + [2706] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, + aux_sym_base_ten_token1, + ACTIONS(142), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(144), 1, anon_sym_LPAREN, - ACTIONS(27), 1, + ACTIONS(146), 1, anon_sym_LBRACK, - STATE(9), 1, - sym_number, - STATE(88), 1, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, sym__float, - STATE(102), 1, + STATE(52), 1, + sym_number, + STATE(53), 1, sym_expression, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(97), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5166,54 +4397,57 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2712] = 20, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, + sym_formula, + [2791] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, - anon_sym_LPAREN, - ACTIONS(27), 1, - anon_sym_LBRACK, - ACTIONS(234), 1, + ACTIONS(130), 1, + sym_identifier, + ACTIONS(132), 1, + sym_string, + ACTIONS(134), 1, + sym_default, + ACTIONS(136), 1, aux_sym_base_ten_token1, - ACTIONS(238), 1, + ACTIONS(142), 1, anon_sym_if, - STATE(9), 1, + ACTIONS(144), 1, + anon_sym_LPAREN, + ACTIONS(146), 1, + anon_sym_LBRACK, + ACTIONS(148), 1, + anon_sym_LT_LT_LT, + STATE(50), 1, + sym__float, + STATE(52), 1, sym_number, - STATE(15), 1, + STATE(54), 1, sym_expression, - STATE(55), 1, - sym__float, - STATE(134), 1, + STATE(209), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(138), 2, sym_true, sym_false, - STATE(85), 2, + STATE(56), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(140), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(88), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5227,34 +4461,37 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2793] = 20, + sym_formula, + [2876] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, + ACTIONS(23), 1, + anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(234), 1, - aux_sym_base_ten_token1, - ACTIONS(238), 1, - anon_sym_if, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, sym_number, - STATE(55), 1, + STATE(94), 1, sym__float, - STATE(84), 1, + STATE(118), 1, sym_expression, - STATE(134), 1, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5262,19 +4499,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(85), 2, + STATE(108), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5288,7 +4525,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2874] = 20, + sym_formula, + [2961] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5309,13 +4547,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, sym_number, - STATE(88), 1, + STATE(94), 1, sym__float, - STATE(104), 1, + STATE(119), 1, sym_expression, - STATE(134), 1, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5323,19 +4563,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(97), 2, + STATE(108), 2, sym_path, sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5349,34 +4589,37 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [2955] = 20, + sym_formula, + [3046] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, + ACTIONS(23), 1, + anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(234), 1, - aux_sym_base_ten_token1, - ACTIONS(238), 1, - anon_sym_if, - STATE(2), 1, - sym_expression, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, sym_number, - STATE(55), 1, + STATE(94), 1, sym__float, - STATE(134), 1, + STATE(120), 1, + sym_expression, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5384,19 +4627,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(85), 2, + STATE(108), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5410,34 +4653,37 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [3036] = 20, + sym_formula, + [3131] = 21, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, + ACTIONS(23), 1, + anon_sym_if, ACTIONS(25), 1, anon_sym_LPAREN, ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(234), 1, - aux_sym_base_ten_token1, - ACTIONS(238), 1, - anon_sym_if, - STATE(9), 1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, sym_number, - STATE(11), 1, - sym_expression, - STATE(55), 1, + STATE(94), 1, sym__float, - STATE(134), 1, + STATE(121), 1, + sym_expression, + STATE(210), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5445,19 +4691,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(85), 2, + STATE(108), 2, sym_path, sym_struct_definition, - ACTIONS(236), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(130), 4, + STATE(211), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(20), 13, + STATE(125), 14, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5471,296 +4717,281 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - [3117] = 17, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(35), 1, - anon_sym_STAR_STAR, - ACTIONS(39), 1, - anon_sym_SLASH_SLASH, - ACTIONS(43), 1, - anon_sym_AMP, - ACTIONS(45), 1, - anon_sym_PIPE, - ACTIONS(47), 1, - anon_sym_CARET, - ACTIONS(53), 1, - anon_sym_AMP_AMP, - ACTIONS(100), 1, - anon_sym_LPAREN, - STATE(25), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(37), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(41), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(49), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(246), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(51), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(122), 7, + sym_formula, + [3216] = 21, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, aux_sym_octal_token1, + ACTIONS(15), 1, aux_sym_hex_token1, + ACTIONS(17), 1, aux_sym_binary_token1, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - ACTIONS(124), 9, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_DOT_DOT, + ACTIONS(23), 1, anon_sym_if, - anon_sym_else, - [3191] = 18, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(35), 1, - anon_sym_STAR_STAR, - ACTIONS(39), 1, - anon_sym_SLASH_SLASH, - ACTIONS(43), 1, - anon_sym_AMP, - ACTIONS(45), 1, - anon_sym_PIPE, - ACTIONS(47), 1, - anon_sym_CARET, - ACTIONS(53), 1, - anon_sym_AMP_AMP, - ACTIONS(55), 1, - anon_sym_PIPE_PIPE, - ACTIONS(100), 1, + ACTIONS(25), 1, anon_sym_LPAREN, - STATE(25), 1, - sym_dictionary_construction, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, + sym_number, + STATE(94), 1, + sym__float, + STATE(122), 1, + sym_expression, + STATE(210), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(37), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(41), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(49), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(246), 2, + ACTIONS(19), 2, + sym_true, + sym_false, + STATE(108), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(51), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(122), 6, + anon_sym_BANG, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(125), 14, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [3301] = 21, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, aux_sym_octal_token1, + ACTIONS(15), 1, aux_sym_hex_token1, + ACTIONS(17), 1, aux_sym_binary_token1, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - ACTIONS(124), 9, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_DOT_DOT, + ACTIONS(23), 1, anon_sym_if, - anon_sym_else, - [3267] = 8, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(100), 1, + ACTIONS(25), 1, anon_sym_LPAREN, - STATE(25), 1, - sym_dictionary_construction, + ACTIONS(27), 1, + anon_sym_LBRACK, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, + sym_number, + STATE(94), 1, + sym__float, + STATE(102), 1, + sym_expression, + STATE(210), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(122), 5, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LBRACK, - ACTIONS(124), 7, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, + ACTIONS(19), 2, sym_true, sym_false, - anon_sym_BANG, - anon_sym_if, - ACTIONS(98), 8, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_else, - ACTIONS(96), 14, + STATE(108), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [3323] = 12, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(35), 1, - anon_sym_STAR_STAR, - ACTIONS(39), 1, - anon_sym_SLASH_SLASH, - ACTIONS(43), 1, - anon_sym_AMP, - ACTIONS(100), 1, - anon_sym_LPAREN, - STATE(25), 1, + anon_sym_BANG, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(125), 14, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(37), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(41), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(124), 12, + sym_closure_definition, + sym_formula, + [3386] = 21, + ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - ACTIONS(122), 13, - sym_string, + ACTIONS(13), 1, aux_sym_octal_token1, + ACTIONS(15), 1, aux_sym_hex_token1, + ACTIONS(17), 1, aux_sym_binary_token1, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, anon_sym_LBRACK, - [3387] = 11, ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(35), 1, - anon_sym_STAR_STAR, - ACTIONS(39), 1, - anon_sym_SLASH_SLASH, - ACTIONS(100), 1, - anon_sym_LPAREN, - STATE(25), 1, - sym_dictionary_construction, + anon_sym_LT_LT_LT, + STATE(93), 1, + sym_number, + STATE(94), 1, + sym__float, + STATE(109), 1, + sym_expression, + STATE(210), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(37), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(41), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(19), 2, + sym_true, + sym_false, + STATE(108), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(122), 13, + anon_sym_BANG, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(125), 14, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [3471] = 21, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, aux_sym_octal_token1, + ACTIONS(15), 1, aux_sym_hex_token1, + ACTIONS(17), 1, aux_sym_binary_token1, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, anon_sym_LBRACK, - ACTIONS(124), 13, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, + ACTIONS(29), 1, + anon_sym_LT_LT_LT, + STATE(93), 1, + sym_number, + STATE(94), 1, + sym__float, + STATE(103), 1, + sym_expression, + STATE(210), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, sym_true, sym_false, + STATE(108), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - [3449] = 9, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(35), 1, - anon_sym_STAR_STAR, - ACTIONS(39), 1, - anon_sym_SLASH_SLASH, - ACTIONS(100), 1, - anon_sym_LPAREN, - STATE(25), 1, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(125), 14, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_parenthesis, + sym_list, sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [3556] = 5, + ACTIONS(171), 1, + sym_unit_quote, + STATE(80), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(37), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(124), 13, + ACTIONS(167), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, @@ -5768,14 +4999,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(122), 17, + ACTIONS(169), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_LT_LT, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -5785,28 +5018,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - [3507] = 7, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(35), 1, - anon_sym_STAR_STAR, - ACTIONS(100), 1, anon_sym_LPAREN, - STATE(25), 1, - sym_dictionary_construction, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [3608] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(124), 15, + ACTIONS(160), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, + anon_sym_DOT, sym_true, sym_false, + anon_sym_DASH, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, + anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, @@ -5814,15 +5044,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(122), 18, + ACTIONS(162), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - anon_sym_DASH, + anon_sym_COLON, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -5832,34 +5062,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - [3561] = 10, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(35), 1, - anon_sym_STAR_STAR, - ACTIONS(39), 1, - anon_sym_SLASH_SLASH, - ACTIONS(100), 1, anon_sym_LPAREN, - STATE(25), 1, - sym_dictionary_construction, + anon_sym_LBRACK, + anon_sym_DASH_GT, + anon_sym_LT_LT_LT, + [3656] = 4, + ACTIONS(177), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(37), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(246), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(124), 13, + ACTIONS(173), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, @@ -5867,12 +5089,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(122), 15, + ACTIONS(175), 22, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - anon_sym_LT_LT, + sym_unit_quote, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -5882,39 +5109,44 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - [3621] = 13, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(35), 1, - anon_sym_STAR_STAR, - ACTIONS(39), 1, - anon_sym_SLASH_SLASH, - ACTIONS(43), 1, - anon_sym_AMP, - ACTIONS(47), 1, - anon_sym_CARET, - ACTIONS(100), 1, anon_sym_LPAREN, - STATE(25), 1, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [3706] = 4, + STATE(79), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(37), 2, + ACTIONS(179), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(41), 2, anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(122), 12, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(181), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -5922,182 +5154,221 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, anon_sym_LBRACK, - ACTIONS(124), 12, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - [3687] = 16, - ACTIONS(29), 1, + anon_sym_LT_LT_LT, + [3755] = 21, + ACTIONS(31), 1, anon_sym_COLON, - ACTIONS(35), 1, + ACTIONS(37), 1, anon_sym_STAR_STAR, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_SLASH_SLASH, ACTIONS(43), 1, - anon_sym_AMP, + anon_sym_LT_LT, ACTIONS(45), 1, - anon_sym_PIPE, + anon_sym_GT_GT, ACTIONS(47), 1, + anon_sym_AMP, + ACTIONS(49), 1, + anon_sym_PIPE, + ACTIONS(51), 1, anon_sym_CARET, - ACTIONS(100), 1, + ACTIONS(57), 1, + anon_sym_AMP_AMP, + ACTIONS(59), 1, + anon_sym_PIPE_PIPE, + ACTIONS(61), 1, + anon_sym_DOT_DOT, + ACTIONS(63), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(189), 1, anon_sym_LPAREN, - STATE(25), 1, + STATE(79), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(37), 2, + ACTIONS(39), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(41), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(49), 2, + ACTIONS(53), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(246), 2, + ACTIONS(187), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(51), 4, + ACTIONS(55), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(122), 8, + ACTIONS(185), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - ACTIONS(124), 9, + anon_sym_LT_LT_LT, + ACTIONS(183), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, - anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - [3759] = 14, - ACTIONS(29), 1, + [3838] = 10, + ACTIONS(31), 1, anon_sym_COLON, - ACTIONS(35), 1, + ACTIONS(37), 1, anon_sym_STAR_STAR, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_SLASH_SLASH, - ACTIONS(43), 1, - anon_sym_AMP, - ACTIONS(45), 1, - anon_sym_PIPE, - ACTIONS(47), 1, - anon_sym_CARET, - ACTIONS(100), 1, + ACTIONS(189), 1, anon_sym_LPAREN, - STATE(25), 1, + ACTIONS(195), 1, + anon_sym_else, + STATE(79), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(37), 2, + ACTIONS(39), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(41), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(124), 11, + ACTIONS(191), 13, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - anon_sym_else, - ACTIONS(122), 12, + ACTIONS(193), 17, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, - [3827] = 20, - ACTIONS(29), 1, + anon_sym_LT_LT_LT, + [3899] = 4, + ACTIONS(201), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(197), 17, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_DASH, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(199), 20, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [3948] = 21, + ACTIONS(31), 1, anon_sym_COLON, - ACTIONS(35), 1, + ACTIONS(37), 1, anon_sym_STAR_STAR, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_SLASH_SLASH, ACTIONS(43), 1, - anon_sym_AMP, + anon_sym_LT_LT, ACTIONS(45), 1, - anon_sym_PIPE, + anon_sym_GT_GT, ACTIONS(47), 1, + anon_sym_AMP, + ACTIONS(49), 1, + anon_sym_PIPE, + ACTIONS(51), 1, anon_sym_CARET, - ACTIONS(53), 1, + ACTIONS(57), 1, anon_sym_AMP_AMP, - ACTIONS(55), 1, + ACTIONS(59), 1, anon_sym_PIPE_PIPE, - ACTIONS(57), 1, + ACTIONS(61), 1, anon_sym_DOT_DOT, - ACTIONS(59), 1, + ACTIONS(63), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(100), 1, + ACTIONS(189), 1, anon_sym_LPAREN, - STATE(25), 1, + STATE(79), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(37), 2, + ACTIONS(39), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(41), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(49), 2, + ACTIONS(53), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(246), 2, + ACTIONS(187), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(51), 4, + ACTIONS(55), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(250), 5, + ACTIONS(203), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, - ACTIONS(248), 8, + anon_sym_LT_LT_LT, + ACTIONS(195), 8, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6106,13 +5377,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG, anon_sym_if, anon_sym_else, - [3907] = 4, - ACTIONS(252), 1, + [4031] = 4, + ACTIONS(209), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(136), 16, + ACTIONS(205), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6122,6 +5393,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, + anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, @@ -6129,7 +5401,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(134), 20, + ACTIONS(207), 20, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6138,7 +5410,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -6150,38 +5421,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_LBRACK, - [3955] = 4, - ACTIONS(136), 1, - anon_sym_else, + anon_sym_LT_LT_LT, + [4080] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(156), 14, + ACTIONS(211), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, + anon_sym_DASH, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, + anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - ACTIONS(154), 21, + anon_sym_else, + ACTIONS(213), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -6193,34 +5464,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_LBRACK, - [4002] = 4, + anon_sym_DASH_GT, + anon_sym_LT_LT_LT, + [4127] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(192), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(112), 11, + ACTIONS(215), 17, sym_identifier, - anon_sym_DOT, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_DASH, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, + anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, + anon_sym_if, anon_sym_else, - anon_sym_EQ, - ACTIONS(110), 21, - ts_builtin_sym_end, - sym_unit_quote, + ACTIONS(217), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -6231,37 +5507,41 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [4047] = 6, - ACTIONS(244), 1, - sym_unit_quote, - ACTIONS(254), 1, - sym_identifier, - STATE(23), 1, - sym__unit, + anon_sym_LBRACK, + anon_sym_DASH_GT, + anon_sym_LT_LT_LT, + [4174] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(240), 9, + ACTIONS(124), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, + anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, + anon_sym_if, anon_sym_else, - anon_sym_EQ, - ACTIONS(242), 20, - ts_builtin_sym_end, + ACTIONS(126), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -6272,95 +5552,92 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [4094] = 20, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(248), 1, - anon_sym_EQ, - ACTIONS(258), 1, - anon_sym_STAR_STAR, - ACTIONS(262), 1, - anon_sym_SLASH_SLASH, - ACTIONS(266), 1, - anon_sym_AMP, - ACTIONS(268), 1, - anon_sym_PIPE, - ACTIONS(270), 1, - anon_sym_CARET, - ACTIONS(276), 1, - anon_sym_AMP_AMP, - ACTIONS(278), 1, - anon_sym_PIPE_PIPE, - ACTIONS(280), 1, - anon_sym_DOT_DOT, - ACTIONS(282), 1, - anon_sym_DOT_DOT_EQ, - STATE(25), 1, - sym_dictionary_construction, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4221] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(219), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(264), 2, anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(272), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(274), 4, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(221), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + sym_unit_quote, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(250), 5, - ts_builtin_sym_end, - anon_sym_else, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [4167] = 12, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(100), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - ACTIONS(258), 1, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4268] = 9, + ACTIONS(31), 1, + anon_sym_COLON, + ACTIONS(37), 1, anon_sym_STAR_STAR, - ACTIONS(262), 1, + ACTIONS(41), 1, anon_sym_SLASH_SLASH, - ACTIONS(266), 1, - anon_sym_AMP, - STATE(25), 1, + ACTIONS(189), 1, + anon_sym_LPAREN, + STATE(79), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(39), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(264), 2, + ACTIONS(191), 14, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(124), 5, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(122), 13, - ts_builtin_sym_end, + anon_sym_if, + anon_sym_else, + ACTIONS(193), 17, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -6369,46 +5646,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [4224] = 14, - ACTIONS(29), 1, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4327] = 6, + ACTIONS(31), 1, anon_sym_COLON, - ACTIONS(100), 1, + ACTIONS(189), 1, anon_sym_LPAREN, - ACTIONS(258), 1, - anon_sym_STAR_STAR, - ACTIONS(262), 1, - anon_sym_SLASH_SLASH, - ACTIONS(266), 1, - anon_sym_AMP, - ACTIONS(268), 1, - anon_sym_PIPE, - ACTIONS(270), 1, - anon_sym_CARET, - STATE(25), 1, + STATE(79), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(191), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(264), 2, anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(124), 4, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(122), 12, - ts_builtin_sym_end, + anon_sym_if, + anon_sym_else, + ACTIONS(193), 19, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -6416,195 +5693,206 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [4285] = 16, - ACTIONS(29), 1, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4380] = 7, + ACTIONS(31), 1, anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, + ACTIONS(37), 1, anon_sym_STAR_STAR, - ACTIONS(262), 1, - anon_sym_SLASH_SLASH, - ACTIONS(266), 1, - anon_sym_AMP, - ACTIONS(268), 1, - anon_sym_PIPE, - ACTIONS(270), 1, - anon_sym_CARET, - STATE(25), 1, + ACTIONS(189), 1, + anon_sym_LPAREN, + STATE(79), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(124), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(264), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(272), 2, + ACTIONS(191), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(274), 4, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(193), 18, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(122), 8, - ts_builtin_sym_end, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [4350] = 17, - ACTIONS(29), 1, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4435] = 10, + ACTIONS(31), 1, anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, + ACTIONS(37), 1, anon_sym_STAR_STAR, - ACTIONS(262), 1, + ACTIONS(41), 1, anon_sym_SLASH_SLASH, - ACTIONS(266), 1, - anon_sym_AMP, - ACTIONS(268), 1, - anon_sym_PIPE, - ACTIONS(270), 1, - anon_sym_CARET, - ACTIONS(276), 1, - anon_sym_AMP_AMP, - STATE(25), 1, + ACTIONS(189), 1, + anon_sym_LPAREN, + STATE(79), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(124), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(39), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(264), 2, + ACTIONS(187), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(191), 14, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(272), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(274), 4, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(193), 15, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(122), 7, - ts_builtin_sym_end, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [4417] = 18, - ACTIONS(29), 1, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4496] = 12, + ACTIONS(31), 1, anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, + ACTIONS(37), 1, anon_sym_STAR_STAR, - ACTIONS(262), 1, + ACTIONS(41), 1, anon_sym_SLASH_SLASH, - ACTIONS(266), 1, - anon_sym_AMP, - ACTIONS(268), 1, - anon_sym_PIPE, - ACTIONS(270), 1, - anon_sym_CARET, - ACTIONS(276), 1, - anon_sym_AMP_AMP, - ACTIONS(278), 1, - anon_sym_PIPE_PIPE, - STATE(25), 1, + ACTIONS(43), 1, + anon_sym_LT_LT, + ACTIONS(45), 1, + anon_sym_GT_GT, + ACTIONS(189), 1, + anon_sym_LPAREN, + STATE(79), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(124), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(39), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(264), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(272), 2, + ACTIONS(187), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(191), 13, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(274), 4, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(193), 14, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(122), 6, - ts_builtin_sym_end, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [4486] = 13, - ACTIONS(29), 1, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4561] = 14, + ACTIONS(31), 1, anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, + ACTIONS(37), 1, anon_sym_STAR_STAR, - ACTIONS(262), 1, + ACTIONS(41), 1, anon_sym_SLASH_SLASH, - ACTIONS(266), 1, + ACTIONS(43), 1, + anon_sym_LT_LT, + ACTIONS(45), 1, + anon_sym_GT_GT, + ACTIONS(47), 1, anon_sym_AMP, - ACTIONS(270), 1, + ACTIONS(51), 1, anon_sym_CARET, - STATE(25), 1, + ACTIONS(189), 1, + anon_sym_LPAREN, + STATE(79), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(39), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(264), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(124), 5, + ACTIONS(187), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(191), 12, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(122), 12, - ts_builtin_sym_end, + anon_sym_if, + anon_sym_else, + ACTIONS(193), 13, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -6612,41 +5900,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [4545] = 10, - ACTIONS(29), 1, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4630] = 13, + ACTIONS(31), 1, anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, + ACTIONS(37), 1, anon_sym_STAR_STAR, - ACTIONS(262), 1, + ACTIONS(41), 1, anon_sym_SLASH_SLASH, - STATE(25), 1, + ACTIONS(43), 1, + anon_sym_LT_LT, + ACTIONS(45), 1, + anon_sym_GT_GT, + ACTIONS(47), 1, + anon_sym_AMP, + ACTIONS(189), 1, + anon_sym_LPAREN, + STATE(79), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(39), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(124), 6, - anon_sym_AMP, + ACTIONS(187), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(191), 12, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(122), 15, - ts_builtin_sym_end, - anon_sym_LT_LT, - anon_sym_GT_GT, + anon_sym_if, + anon_sym_else, + ACTIONS(193), 14, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -6655,35 +5954,55 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [4598] = 4, - ACTIONS(284), 1, - anon_sym_DASH_GT, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4697] = 15, + ACTIONS(31), 1, + anon_sym_COLON, + ACTIONS(37), 1, + anon_sym_STAR_STAR, + ACTIONS(41), 1, + anon_sym_SLASH_SLASH, + ACTIONS(43), 1, + anon_sym_LT_LT, + ACTIONS(45), 1, + anon_sym_GT_GT, + ACTIONS(47), 1, + anon_sym_AMP, + ACTIONS(49), 1, + anon_sym_PIPE, + ACTIONS(51), 1, + anon_sym_CARET, + ACTIONS(189), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(136), 9, - anon_sym_DASH, + ACTIONS(39), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(187), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(191), 11, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(134), 20, - ts_builtin_sym_end, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, + anon_sym_if, + anon_sym_else, + ACTIONS(193), 13, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -6691,165 +6010,216 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [4639] = 7, - ACTIONS(29), 1, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4768] = 17, + ACTIONS(31), 1, anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, + ACTIONS(37), 1, anon_sym_STAR_STAR, - STATE(25), 1, + ACTIONS(41), 1, + anon_sym_SLASH_SLASH, + ACTIONS(43), 1, + anon_sym_LT_LT, + ACTIONS(45), 1, + anon_sym_GT_GT, + ACTIONS(47), 1, + anon_sym_AMP, + ACTIONS(49), 1, + anon_sym_PIPE, + ACTIONS(51), 1, + anon_sym_CARET, + ACTIONS(189), 1, + anon_sym_LPAREN, + STATE(79), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(124), 8, + ACTIONS(39), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(53), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(122), 18, - ts_builtin_sym_end, + ACTIONS(187), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(55), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [4686] = 9, - ACTIONS(29), 1, + ACTIONS(191), 9, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(193), 9, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4843] = 18, + ACTIONS(31), 1, anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, + ACTIONS(37), 1, anon_sym_STAR_STAR, - ACTIONS(262), 1, + ACTIONS(41), 1, anon_sym_SLASH_SLASH, - STATE(25), 1, + ACTIONS(43), 1, + anon_sym_LT_LT, + ACTIONS(45), 1, + anon_sym_GT_GT, + ACTIONS(47), 1, + anon_sym_AMP, + ACTIONS(49), 1, + anon_sym_PIPE, + ACTIONS(51), 1, + anon_sym_CARET, + ACTIONS(57), 1, + anon_sym_AMP_AMP, + ACTIONS(189), 1, + anon_sym_LPAREN, + STATE(79), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(260), 2, + ACTIONS(39), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(124), 6, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(53), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(122), 17, - ts_builtin_sym_end, + ACTIONS(187), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(55), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(193), 8, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + ACTIONS(191), 9, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, anon_sym_else, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [4737] = 11, - ACTIONS(29), 1, + [4920] = 19, + ACTIONS(31), 1, anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, + ACTIONS(37), 1, anon_sym_STAR_STAR, - ACTIONS(262), 1, + ACTIONS(41), 1, anon_sym_SLASH_SLASH, - STATE(25), 1, + ACTIONS(43), 1, + anon_sym_LT_LT, + ACTIONS(45), 1, + anon_sym_GT_GT, + ACTIONS(47), 1, + anon_sym_AMP, + ACTIONS(49), 1, + anon_sym_PIPE, + ACTIONS(51), 1, + anon_sym_CARET, + ACTIONS(57), 1, + anon_sym_AMP_AMP, + ACTIONS(59), 1, + anon_sym_PIPE_PIPE, + ACTIONS(189), 1, + anon_sym_LPAREN, + STATE(79), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(39), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(264), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(124), 6, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(53), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(122), 13, - ts_builtin_sym_end, - anon_sym_CARET, + ACTIONS(187), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(55), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, + ACTIONS(193), 7, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + ACTIONS(191), 9, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, anon_sym_else, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [4792] = 8, - ACTIONS(73), 1, - anon_sym_DOT, - ACTIONS(286), 1, - anon_sym_COLON, - ACTIONS(288), 1, - anon_sym_EQ, - STATE(7), 1, - aux_sym_path_repeat1, - STATE(121), 1, - sym_declaration_type, + [4999] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(71), 8, + ACTIONS(223), 17, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, anon_sym_DASH, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, + anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(69), 16, + anon_sym_if, + anon_sym_else, + ACTIONS(225), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -6860,1125 +6230,5027 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_RPAREN, + anon_sym_LBRACK, anon_sym_DASH_GT, - [4840] = 20, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, - anon_sym_STAR_STAR, - ACTIONS(262), 1, - anon_sym_SLASH_SLASH, - ACTIONS(266), 1, - anon_sym_AMP, - ACTIONS(268), 1, - anon_sym_PIPE, - ACTIONS(270), 1, - anon_sym_CARET, - ACTIONS(276), 1, - anon_sym_AMP_AMP, - ACTIONS(278), 1, - anon_sym_PIPE_PIPE, - ACTIONS(280), 1, - anon_sym_DOT_DOT, - ACTIONS(282), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(292), 1, - anon_sym_EQ, - STATE(25), 1, - sym_dictionary_construction, + anon_sym_LT_LT_LT, + [5046] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(227), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(264), 2, anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(272), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(290), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - ACTIONS(274), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [4910] = 19, - ACTIONS(29), 1, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(229), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(266), 1, - anon_sym_AMP, - ACTIONS(268), 1, - anon_sym_PIPE, - ACTIONS(270), 1, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(276), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(280), 1, - anon_sym_DOT_DOT, - ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - STATE(25), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5092] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(231), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(264), 2, anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(272), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(294), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - ACTIONS(274), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [4977] = 19, - ACTIONS(29), 1, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(233), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(266), 1, - anon_sym_AMP, - ACTIONS(268), 1, - anon_sym_PIPE, - ACTIONS(270), 1, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(276), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(280), 1, - anon_sym_DOT_DOT, - ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - STATE(25), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5138] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(235), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(264), 2, anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(272), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(296), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - ACTIONS(274), 4, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(237), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5044] = 20, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(100), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_RBRACK, - ACTIONS(258), 1, - anon_sym_STAR_STAR, - ACTIONS(262), 1, - anon_sym_SLASH_SLASH, - ACTIONS(266), 1, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5184] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(239), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, anon_sym_AMP, - ACTIONS(268), 1, anon_sym_PIPE, - ACTIONS(270), 1, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(241), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(276), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(280), 1, - anon_sym_DOT_DOT, - ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(298), 1, - anon_sym_COMMA, - STATE(25), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5230] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(243), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(264), 2, anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(272), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(274), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [5113] = 20, - ACTIONS(29), 1, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(245), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(266), 1, - anon_sym_AMP, - ACTIONS(268), 1, - anon_sym_PIPE, - ACTIONS(270), 1, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(276), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(280), 1, - anon_sym_DOT_DOT, - ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(298), 1, - anon_sym_COMMA, - ACTIONS(300), 1, - anon_sym_RBRACK, - STATE(25), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5276] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(247), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(264), 2, anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(272), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(274), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [5182] = 19, - ACTIONS(29), 1, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(249), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(262), 1, anon_sym_SLASH_SLASH, - ACTIONS(266), 1, - anon_sym_AMP, - ACTIONS(268), 1, - anon_sym_PIPE, - ACTIONS(270), 1, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(276), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(280), 1, - anon_sym_DOT_DOT, - ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(298), 1, - anon_sym_COMMA, - STATE(25), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5322] = 4, + ACTIONS(197), 1, + anon_sym_else, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(243), 15, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(264), 2, anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(272), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(274), 4, + anon_sym_DOT_DOT, + anon_sym_if, + ACTIONS(245), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5248] = 19, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(100), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - ACTIONS(258), 1, - anon_sym_STAR_STAR, - ACTIONS(262), 1, - anon_sym_SLASH_SLASH, - ACTIONS(266), 1, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5370] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(251), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, anon_sym_AMP, - ACTIONS(268), 1, anon_sym_PIPE, - ACTIONS(270), 1, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(253), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(276), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(280), 1, - anon_sym_DOT_DOT, - ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(302), 1, - anon_sym_RPAREN, - STATE(25), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5416] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(260), 2, + ACTIONS(255), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(264), 2, anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(272), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(274), 4, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(257), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5314] = 19, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(100), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - ACTIONS(258), 1, - anon_sym_STAR_STAR, - ACTIONS(262), 1, - anon_sym_SLASH_SLASH, - ACTIONS(266), 1, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5462] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(259), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, anon_sym_AMP, - ACTIONS(268), 1, anon_sym_PIPE, - ACTIONS(270), 1, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(261), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(276), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(278), 1, anon_sym_PIPE_PIPE, - ACTIONS(280), 1, - anon_sym_DOT_DOT, - ACTIONS(282), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(304), 1, - ts_builtin_sym_end, - STATE(25), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5508] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(263), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(265), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5554] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(205), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(207), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5600] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(267), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(269), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5646] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(197), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(199), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5692] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(271), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(273), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5738] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(275), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(277), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5784] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(279), 16, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + ACTIONS(281), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5830] = 4, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(128), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(124), 12, + sym_identifier, + anon_sym_DOT, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_else, + anon_sym_EQ, + ACTIONS(126), 21, + ts_builtin_sym_end, + sym_unit_quote, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [5876] = 4, + ACTIONS(283), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(173), 11, + sym_identifier, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_else, + anon_sym_EQ, + ACTIONS(175), 21, + ts_builtin_sym_end, + sym_unit_quote, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [5920] = 6, + ACTIONS(285), 1, + sym_identifier, + ACTIONS(287), 1, + sym_unit_quote, + STATE(115), 1, + sym__unit, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(167), 10, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_else, + anon_sym_EQ, + ACTIONS(169), 20, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [5968] = 5, + ACTIONS(289), 1, + anon_sym_DOT, + STATE(97), 1, + aux_sym_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(150), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(152), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [6013] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(219), 11, + sym_identifier, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_else, + anon_sym_EQ, + ACTIONS(221), 21, + ts_builtin_sym_end, + sym_unit_quote, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [6054] = 5, + ACTIONS(289), 1, + anon_sym_DOT, + STATE(99), 1, + aux_sym_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(156), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(158), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [6099] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(124), 11, + sym_identifier, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_else, + anon_sym_EQ, + ACTIONS(126), 21, + ts_builtin_sym_end, + sym_unit_quote, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [6140] = 5, + ACTIONS(291), 1, + anon_sym_DOT, + STATE(99), 1, + aux_sym_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(160), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(162), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [6185] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(160), 10, + anon_sym_DOT, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(162), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [6225] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(223), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(225), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [6264] = 12, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(191), 5, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(193), 13, + ts_builtin_sym_end, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [6321] = 20, + ACTIONS(195), 1, + anon_sym_EQ, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(203), 5, + ts_builtin_sym_end, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [6394] = 16, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(191), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(193), 8, + ts_builtin_sym_end, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [6459] = 17, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(191), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(193), 7, + ts_builtin_sym_end, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [6526] = 4, + ACTIONS(209), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(205), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(207), 20, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [6567] = 18, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(191), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(193), 6, + ts_builtin_sym_end, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [6636] = 4, + ACTIONS(326), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(197), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(199), 20, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [6677] = 14, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(191), 4, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(193), 12, + ts_builtin_sym_end, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [6738] = 20, + ACTIONS(183), 1, + anon_sym_EQ, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(185), 5, + ts_builtin_sym_end, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [6811] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(215), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(217), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [6850] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(239), 9, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(241), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [6889] = 4, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(179), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(181), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [6930] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(231), 9, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(233), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [6969] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(247), 9, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(249), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [7008] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(211), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(213), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [7047] = 9, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(308), 1, + anon_sym_LPAREN, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(191), 6, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(193), 17, + ts_builtin_sym_end, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7098] = 6, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(308), 1, + anon_sym_LPAREN, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(191), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(193), 19, + ts_builtin_sym_end, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7143] = 7, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(308), 1, + anon_sym_LPAREN, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(191), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(193), 18, + ts_builtin_sym_end, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7190] = 10, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(308), 1, + anon_sym_LPAREN, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(191), 6, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(193), 15, + ts_builtin_sym_end, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7243] = 11, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(308), 1, + anon_sym_LPAREN, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(191), 6, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(193), 13, + ts_builtin_sym_end, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7298] = 13, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(312), 1, + anon_sym_CARET, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(191), 5, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(193), 12, + ts_builtin_sym_end, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7357] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(251), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(253), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7395] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(263), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(265), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7433] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(197), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(199), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7471] = 8, + ACTIONS(289), 1, + anon_sym_DOT, + ACTIONS(328), 1, + anon_sym_COLON, + ACTIONS(330), 1, + anon_sym_EQ, + STATE(97), 1, + aux_sym_path_repeat1, + STATE(204), 1, + sym_declaration_type, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(150), 8, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(152), 16, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_DASH_GT, + [7519] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(279), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(281), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7557] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(267), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(269), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7595] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(205), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(207), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7633] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(271), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(273), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7671] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(259), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(261), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7709] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(275), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(277), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7747] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(243), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(245), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7785] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(235), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(237), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7823] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(255), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(257), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7861] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(227), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(229), 21, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7899] = 20, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(334), 1, + anon_sym_EQ, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(332), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [7969] = 20, + ACTIONS(120), 1, + anon_sym_RBRACK, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(336), 1, + anon_sym_COMMA, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [8038] = 20, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(336), 1, + anon_sym_COMMA, + ACTIONS(338), 1, + anon_sym_RBRACK, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [8107] = 20, + ACTIONS(116), 1, + anon_sym_RBRACK, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(336), 1, + anon_sym_COMMA, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [8176] = 19, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(340), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [8243] = 19, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(342), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [8310] = 20, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(336), 1, + anon_sym_COMMA, + ACTIONS(344), 1, + anon_sym_RBRACK, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [8379] = 19, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(346), 1, + anon_sym_RPAREN, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [8445] = 19, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(348), 1, + ts_builtin_sym_end, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [8511] = 19, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(350), 1, + anon_sym_else, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [8577] = 19, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(336), 1, + anon_sym_COMMA, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [8643] = 19, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(352), 1, + anon_sym_RPAREN, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [8709] = 19, + ACTIONS(294), 1, + anon_sym_COLON, + ACTIONS(298), 1, + anon_sym_STAR_STAR, + ACTIONS(302), 1, + anon_sym_SLASH_SLASH, + ACTIONS(306), 1, + anon_sym_AMP, + ACTIONS(308), 1, + anon_sym_LPAREN, + ACTIONS(310), 1, + anon_sym_PIPE, + ACTIONS(312), 1, + anon_sym_CARET, + ACTIONS(318), 1, + anon_sym_AMP_AMP, + ACTIONS(320), 1, + anon_sym_PIPE_PIPE, + ACTIONS(322), 1, + anon_sym_DOT_DOT, + ACTIONS(324), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(354), 1, + anon_sym_else, + STATE(133), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(300), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(304), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(314), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(316), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [8775] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(360), 1, + anon_sym_LPAREN, + STATE(93), 1, + sym_number, + STATE(94), 1, + sym__float, + STATE(189), 1, + sym_formula_expression, + STATE(210), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(358), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(170), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [8828] = 14, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(360), 1, + anon_sym_LPAREN, + ACTIONS(362), 1, + aux_sym_base_ten_token1, + STATE(166), 1, + sym_number, + STATE(167), 1, + sym__float, + STATE(179), 1, + sym_formula_expression, + STATE(206), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(364), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(170), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [8881] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(360), 1, + anon_sym_LPAREN, + STATE(93), 1, + sym_number, + STATE(94), 1, + sym__float, + STATE(182), 1, + sym_formula_expression, + STATE(210), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(358), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(170), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [8934] = 14, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(360), 1, + anon_sym_LPAREN, + ACTIONS(362), 1, + aux_sym_base_ten_token1, + STATE(166), 1, + sym_number, + STATE(167), 1, + sym__float, + STATE(173), 1, + sym_formula_expression, + STATE(206), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(364), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(170), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [8987] = 14, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(360), 1, + anon_sym_LPAREN, + ACTIONS(362), 1, + aux_sym_base_ten_token1, + STATE(166), 1, + sym_number, + STATE(167), 1, + sym__float, + STATE(168), 1, + sym_formula_expression, + STATE(206), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(364), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(170), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [9040] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(360), 1, + anon_sym_LPAREN, + STATE(93), 1, + sym_number, + STATE(94), 1, + sym__float, + STATE(183), 1, + sym_formula_expression, + STATE(210), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(358), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(170), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [9093] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(360), 1, + anon_sym_LPAREN, + STATE(93), 1, + sym_number, + STATE(94), 1, + sym__float, + STATE(187), 1, + sym_formula_expression, + STATE(210), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(358), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(170), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [9146] = 14, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(360), 1, + anon_sym_LPAREN, + ACTIONS(362), 1, + aux_sym_base_ten_token1, + STATE(166), 1, + sym_number, + STATE(167), 1, + sym__float, + STATE(175), 1, + sym_formula_expression, + STATE(206), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(364), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(170), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [9199] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(360), 1, + anon_sym_LPAREN, + STATE(93), 1, + sym_number, + STATE(94), 1, + sym__float, + STATE(181), 1, + sym_formula_expression, + STATE(210), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(358), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(170), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [9252] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(360), 1, + anon_sym_LPAREN, + STATE(93), 1, + sym_number, + STATE(94), 1, + sym__float, + STATE(168), 1, + sym_formula_expression, + STATE(210), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(358), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(170), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [9305] = 14, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(360), 1, + anon_sym_LPAREN, + ACTIONS(362), 1, + aux_sym_base_ten_token1, + STATE(166), 1, + sym_number, + STATE(167), 1, + sym__float, + STATE(174), 1, + sym_formula_expression, + STATE(206), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(364), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(170), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [9358] = 14, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(360), 1, + anon_sym_LPAREN, + ACTIONS(362), 1, + aux_sym_base_ten_token1, + STATE(166), 1, + sym_number, + STATE(167), 1, + sym__float, + STATE(180), 1, + sym_formula_expression, + STATE(206), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(364), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(170), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [9411] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(356), 1, + sym_identifier, + ACTIONS(360), 1, + anon_sym_LPAREN, + STATE(93), 1, + sym_number, + STATE(94), 1, + sym__float, + STATE(186), 1, + sym_formula_expression, + STATE(210), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(358), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(211), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(170), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [9464] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(366), 6, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_if, + ACTIONS(111), 11, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_LT_LT_LT, + [9490] = 4, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(128), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(124), 4, + sym_identifier, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(126), 10, + sym_unit_quote, + anon_sym_DOT, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9517] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(368), 6, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_if, + ACTIONS(209), 10, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [9542] = 4, + ACTIONS(370), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(173), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(175), 10, + sym_identifier, + sym_unit_quote, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9567] = 5, + STATE(178), 1, + sym__unit, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(372), 2, + sym_identifier, + sym_unit_quote, + ACTIONS(167), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(169), 8, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9594] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(376), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(374), 10, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [9616] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(219), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(221), 10, + sym_identifier, + sym_unit_quote, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9638] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(380), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(378), 10, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [9660] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(124), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(126), 10, + sym_identifier, + sym_unit_quote, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9682] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(384), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(382), 10, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [9704] = 6, + ACTIONS(386), 1, + anon_sym_STAR_STAR, + ACTIONS(388), 1, + anon_sym_STAR, + ACTIONS(390), 1, + anon_sym_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(376), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(374), 6, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9730] = 7, + ACTIONS(386), 1, + anon_sym_STAR_STAR, + ACTIONS(388), 1, + anon_sym_STAR, + ACTIONS(390), 1, + anon_sym_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(392), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(394), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(396), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9758] = 4, + ACTIONS(386), 1, + anon_sym_STAR_STAR, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(376), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(374), 7, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9780] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(239), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(241), 8, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9800] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(231), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(233), 8, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9820] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(247), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(249), 8, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9840] = 7, + ACTIONS(386), 1, + anon_sym_STAR_STAR, + ACTIONS(388), 1, + anon_sym_STAR, + ACTIONS(390), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, + ACTIONS(392), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(260), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(264), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(272), 2, + ACTIONS(398), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(274), 4, + ACTIONS(400), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5380] = 19, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, + [9868] = 7, + ACTIONS(386), 1, anon_sym_STAR_STAR, - ACTIONS(262), 1, - anon_sym_SLASH_SLASH, - ACTIONS(266), 1, - anon_sym_AMP, - ACTIONS(268), 1, - anon_sym_PIPE, - ACTIONS(270), 1, - anon_sym_CARET, - ACTIONS(276), 1, - anon_sym_AMP_AMP, - ACTIONS(278), 1, - anon_sym_PIPE_PIPE, - ACTIONS(280), 1, - anon_sym_DOT_DOT, - ACTIONS(282), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(306), 1, - anon_sym_else, - STATE(25), 1, - sym_dictionary_construction, + ACTIONS(388), 1, + anon_sym_STAR, + ACTIONS(390), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, + ACTIONS(392), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(260), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(264), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(272), 2, + ACTIONS(402), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(274), 4, + ACTIONS(404), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [5446] = 19, - ACTIONS(29), 1, - anon_sym_COLON, - ACTIONS(100), 1, - anon_sym_LPAREN, - ACTIONS(258), 1, + [9896] = 4, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(406), 1, anon_sym_STAR_STAR, - ACTIONS(262), 1, - anon_sym_SLASH_SLASH, - ACTIONS(266), 1, - anon_sym_AMP, - ACTIONS(268), 1, - anon_sym_PIPE, - ACTIONS(270), 1, - anon_sym_CARET, - ACTIONS(276), 1, - anon_sym_AMP_AMP, - ACTIONS(278), 1, - anon_sym_PIPE_PIPE, - ACTIONS(280), 1, - anon_sym_DOT_DOT, - ACTIONS(282), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(308), 1, - anon_sym_else, - STATE(25), 1, - sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(256), 2, + ACTIONS(374), 5, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(260), 2, + anon_sym_SLASH, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [9914] = 5, + ACTIONS(406), 1, + anon_sym_STAR_STAR, + ACTIONS(408), 1, anon_sym_STAR, + ACTIONS(410), 1, anon_sym_SLASH, - ACTIONS(264), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(272), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(274), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [5512] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(310), 6, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - ACTIONS(230), 10, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + ACTIONS(374), 4, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_RBRACK, - [5537] = 7, - ACTIONS(65), 1, - anon_sym_COMMA, - ACTIONS(67), 1, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [9934] = 6, + ACTIONS(406), 1, + anon_sym_STAR_STAR, + ACTIONS(408), 1, + anon_sym_STAR, + ACTIONS(410), 1, + anon_sym_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(396), 2, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + ACTIONS(412), 2, + anon_sym_DASH, + anon_sym_PLUS, + [9956] = 7, + ACTIONS(71), 1, sym_varadic_dots, - ACTIONS(312), 1, + ACTIONS(414), 1, sym_identifier, - STATE(114), 1, + ACTIONS(416), 1, + anon_sym_RPAREN, + STATE(190), 1, aux_sym_struct_definition_repeat1, - STATE(129), 1, + STATE(214), 1, sym_struct_member, - STATE(138), 1, + STATE(228), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5560] = 7, - ACTIONS(67), 1, + [9979] = 7, + ACTIONS(71), 1, sym_varadic_dots, - ACTIONS(312), 1, + ACTIONS(414), 1, sym_identifier, - ACTIONS(314), 1, + ACTIONS(418), 1, anon_sym_RPAREN, - STATE(115), 1, + STATE(188), 1, aux_sym_struct_definition_repeat1, - STATE(129), 1, + STATE(214), 1, sym_struct_member, - STATE(142), 1, + STATE(227), 1, + sym__struct_final_element, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [10002] = 6, + ACTIONS(406), 1, + anon_sym_STAR_STAR, + ACTIONS(408), 1, + anon_sym_STAR, + ACTIONS(410), 1, + anon_sym_SLASH, + ACTIONS(420), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(412), 2, + anon_sym_DASH, + anon_sym_PLUS, + [10023] = 6, + ACTIONS(406), 1, + anon_sym_STAR_STAR, + ACTIONS(408), 1, + anon_sym_STAR, + ACTIONS(410), 1, + anon_sym_SLASH, + ACTIONS(422), 1, + anon_sym_GT_GT_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(412), 2, + anon_sym_DASH, + anon_sym_PLUS, + [10044] = 7, + ACTIONS(71), 1, + sym_varadic_dots, + ACTIONS(414), 1, + sym_identifier, + ACTIONS(424), 1, + anon_sym_RPAREN, + STATE(190), 1, + aux_sym_struct_definition_repeat1, + STATE(214), 1, + sym_struct_member, + STATE(234), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5583] = 5, - ACTIONS(316), 1, + [10067] = 6, + ACTIONS(406), 1, + anon_sym_STAR_STAR, + ACTIONS(408), 1, + anon_sym_STAR, + ACTIONS(410), 1, + anon_sym_SLASH, + ACTIONS(426), 1, + anon_sym_GT_GT_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(412), 2, + anon_sym_DASH, + anon_sym_PLUS, + [10088] = 5, + ACTIONS(428), 1, sym_identifier, - STATE(115), 1, + STATE(190), 1, aux_sym_struct_definition_repeat1, - STATE(141), 1, + STATE(230), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(319), 2, + ACTIONS(431), 2, anon_sym_RPAREN, sym_varadic_dots, - [5601] = 4, - ACTIONS(321), 1, + [10106] = 4, + ACTIONS(433), 1, sym_identifier, - ACTIONS(323), 1, + ACTIONS(435), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(44), 2, + STATE(40), 2, sym_path, sym_struct_definition, - [5616] = 4, - ACTIONS(321), 1, + [10121] = 4, + ACTIONS(433), 1, sym_identifier, - ACTIONS(323), 1, + ACTIONS(435), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(68), 2, + STATE(21), 2, sym_path, sym_struct_definition, - [5631] = 4, - ACTIONS(63), 1, - anon_sym_RPAREN, - ACTIONS(325), 1, + [10136] = 4, + ACTIONS(437), 1, sym_identifier, - STATE(122), 1, + ACTIONS(439), 1, + anon_sym_RPAREN, + STATE(215), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5645] = 4, - ACTIONS(325), 1, + [10150] = 4, + ACTIONS(437), 1, sym_identifier, - ACTIONS(327), 1, + ACTIONS(441), 1, anon_sym_RPAREN, - STATE(128), 1, + STATE(205), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5659] = 4, - ACTIONS(329), 1, + [10164] = 4, + ACTIONS(443), 1, anon_sym_RPAREN, - ACTIONS(331), 1, + ACTIONS(445), 1, anon_sym_COMMA, - STATE(120), 1, + STATE(195), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5673] = 3, - ACTIONS(336), 1, - anon_sym_EQ, + [10178] = 4, + ACTIONS(437), 1, + sym_identifier, + ACTIONS(448), 1, + anon_sym_RPAREN, + STATE(215), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(334), 2, + [10192] = 4, + ACTIONS(448), 1, anon_sym_RPAREN, + ACTIONS(450), 1, anon_sym_COMMA, - [5685] = 4, - ACTIONS(338), 1, + STATE(195), 1, + aux_sym_dictionary_construction_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [10206] = 4, + ACTIONS(437), 1, + sym_identifier, + ACTIONS(452), 1, + anon_sym_RPAREN, + STATE(199), 1, + sym_dictionary_member_assignment, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [10220] = 4, + ACTIONS(454), 1, anon_sym_RPAREN, - ACTIONS(340), 1, + ACTIONS(456), 1, anon_sym_COMMA, - STATE(125), 1, + STATE(203), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5699] = 2, + [10234] = 4, + ACTIONS(437), 1, + sym_identifier, + ACTIONS(458), 1, + anon_sym_RPAREN, + STATE(215), 1, + sym_dictionary_member_assignment, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [10248] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(319), 3, + ACTIONS(431), 3, sym_identifier, anon_sym_RPAREN, sym_varadic_dots, - [5709] = 4, - ACTIONS(325), 1, + [10258] = 4, + ACTIONS(437), 1, sym_identifier, - ACTIONS(342), 1, + ACTIONS(460), 1, anon_sym_RPAREN, - STATE(128), 1, + STATE(215), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5723] = 4, - ACTIONS(342), 1, + [10272] = 4, + ACTIONS(460), 1, anon_sym_RPAREN, - ACTIONS(344), 1, + ACTIONS(462), 1, anon_sym_COMMA, - STATE(120), 1, + STATE(195), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5737] = 2, + [10286] = 3, + ACTIONS(466), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(346), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [5746] = 3, - ACTIONS(348), 1, + ACTIONS(464), 2, anon_sym_RPAREN, - ACTIONS(350), 1, anon_sym_COMMA, + [10298] = 4, + ACTIONS(468), 1, + anon_sym_RPAREN, + ACTIONS(470), 1, + anon_sym_COMMA, + STATE(197), 1, + aux_sym_dictionary_construction_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [10312] = 3, + ACTIONS(472), 1, + aux_sym_signed_integer_token1, + ACTIONS(474), 1, + aux_sym_unsigned_integer_token1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [10323] = 3, + ACTIONS(476), 1, + aux_sym_base_ten_token1, + STATE(96), 1, + sym_number, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [10334] = 3, + ACTIONS(437), 1, + sym_identifier, + STATE(215), 1, + sym_dictionary_member_assignment, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [10345] = 3, + ACTIONS(478), 1, + aux_sym_signed_integer_token1, + ACTIONS(480), 1, + aux_sym_unsigned_integer_token1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [10356] = 3, + ACTIONS(482), 1, + aux_sym_signed_integer_token1, + ACTIONS(484), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5757] = 2, + [10367] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(329), 2, + ACTIONS(486), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [10376] = 3, + ACTIONS(488), 1, anon_sym_RPAREN, + ACTIONS(490), 1, anon_sym_COMMA, - [5766] = 3, - ACTIONS(348), 1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [10387] = 3, + ACTIONS(492), 1, + aux_sym_base_ten_token1, + STATE(62), 1, + sym_number, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [10398] = 3, + ACTIONS(488), 1, anon_sym_RPAREN, - ACTIONS(352), 1, + ACTIONS(494), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5777] = 2, + [10409] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(354), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [5786] = 3, - ACTIONS(356), 1, + ACTIONS(443), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [10418] = 3, + ACTIONS(308), 1, + anon_sym_LPAREN, + STATE(131), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [10429] = 3, + ACTIONS(496), 1, aux_sym_base_ten_token1, - STATE(16), 1, + STATE(169), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5797] = 2, + [10440] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(358), 2, + ACTIONS(498), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [5806] = 3, - ACTIONS(100), 1, + [10449] = 3, + ACTIONS(189), 1, anon_sym_LPAREN, - STATE(30), 1, + STATE(84), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5817] = 3, - ACTIONS(360), 1, - aux_sym_signed_integer_token1, - ACTIONS(362), 1, - aux_sym_unsigned_integer_token1, + [10460] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5828] = 3, - ACTIONS(286), 1, + ACTIONS(500), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [10469] = 3, + ACTIONS(328), 1, anon_sym_COLON, - STATE(121), 1, + STATE(204), 1, sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5839] = 3, - ACTIONS(325), 1, + [10480] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(502), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [10489] = 2, + ACTIONS(504), 1, sym_identifier, - STATE(128), 1, - sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5850] = 2, + [10497] = 2, + ACTIONS(506), 1, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(364), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [5859] = 2, - ACTIONS(366), 1, - anon_sym_RPAREN, + [10505] = 2, + ACTIONS(508), 1, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5867] = 2, - ACTIONS(368), 1, + [10513] = 2, + ACTIONS(510), 1, aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5875] = 2, - ACTIONS(370), 1, + [10521] = 2, + ACTIONS(512), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5883] = 2, - ACTIONS(352), 1, - anon_sym_COMMA, + [10529] = 2, + ACTIONS(514), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5891] = 2, - ACTIONS(372), 1, + [10537] = 2, + ACTIONS(516), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5899] = 2, - ACTIONS(374), 1, - sym_identifier, + [10545] = 2, + ACTIONS(494), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5907] = 2, - ACTIONS(376), 1, - ts_builtin_sym_end, + [10553] = 2, + ACTIONS(518), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5915] = 2, - ACTIONS(378), 1, - anon_sym_EQ, + [10561] = 2, + ACTIONS(520), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5923] = 2, - ACTIONS(380), 1, - aux_sym_base_ten_token1, + [10569] = 2, + ACTIONS(522), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5931] = 2, - ACTIONS(382), 1, - aux_sym_hex_token2, + [10577] = 2, + ACTIONS(524), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5939] = 2, - ACTIONS(384), 1, + [10585] = 2, + ACTIONS(526), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [5947] = 2, - ACTIONS(386), 1, - anon_sym_RPAREN, + [10593] = 2, + ACTIONS(528), 1, + sym_identifier, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [10601] = 2, + ACTIONS(530), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, }; static const uint32_t ts_small_parse_table_map[] = { - [SMALL_STATE(34)] = 0, - [SMALL_STATE(35)] = 87, - [SMALL_STATE(36)] = 138, - [SMALL_STATE(37)] = 225, - [SMALL_STATE(38)] = 312, - [SMALL_STATE(39)] = 393, - [SMALL_STATE(40)] = 474, - [SMALL_STATE(41)] = 555, - [SMALL_STATE(42)] = 636, - [SMALL_STATE(43)] = 717, - [SMALL_STATE(44)] = 798, - [SMALL_STATE(45)] = 879, - [SMALL_STATE(46)] = 960, - [SMALL_STATE(47)] = 1041, - [SMALL_STATE(48)] = 1122, - [SMALL_STATE(49)] = 1203, - [SMALL_STATE(50)] = 1284, - [SMALL_STATE(51)] = 1365, - [SMALL_STATE(52)] = 1446, - [SMALL_STATE(53)] = 1527, - [SMALL_STATE(54)] = 1608, - [SMALL_STATE(55)] = 1689, - [SMALL_STATE(56)] = 1740, - [SMALL_STATE(57)] = 1821, - [SMALL_STATE(58)] = 1902, - [SMALL_STATE(59)] = 1983, - [SMALL_STATE(60)] = 2064, - [SMALL_STATE(61)] = 2145, - [SMALL_STATE(62)] = 2226, - [SMALL_STATE(63)] = 2307, - [SMALL_STATE(64)] = 2388, - [SMALL_STATE(65)] = 2469, - [SMALL_STATE(66)] = 2550, - [SMALL_STATE(67)] = 2631, - [SMALL_STATE(68)] = 2712, - [SMALL_STATE(69)] = 2793, - [SMALL_STATE(70)] = 2874, - [SMALL_STATE(71)] = 2955, - [SMALL_STATE(72)] = 3036, - [SMALL_STATE(73)] = 3117, - [SMALL_STATE(74)] = 3191, - [SMALL_STATE(75)] = 3267, - [SMALL_STATE(76)] = 3323, - [SMALL_STATE(77)] = 3387, - [SMALL_STATE(78)] = 3449, - [SMALL_STATE(79)] = 3507, - [SMALL_STATE(80)] = 3561, - [SMALL_STATE(81)] = 3621, - [SMALL_STATE(82)] = 3687, - [SMALL_STATE(83)] = 3759, - [SMALL_STATE(84)] = 3827, - [SMALL_STATE(85)] = 3907, - [SMALL_STATE(86)] = 3955, - [SMALL_STATE(87)] = 4002, - [SMALL_STATE(88)] = 4047, - [SMALL_STATE(89)] = 4094, - [SMALL_STATE(90)] = 4167, - [SMALL_STATE(91)] = 4224, - [SMALL_STATE(92)] = 4285, - [SMALL_STATE(93)] = 4350, - [SMALL_STATE(94)] = 4417, - [SMALL_STATE(95)] = 4486, - [SMALL_STATE(96)] = 4545, - [SMALL_STATE(97)] = 4598, - [SMALL_STATE(98)] = 4639, - [SMALL_STATE(99)] = 4686, - [SMALL_STATE(100)] = 4737, - [SMALL_STATE(101)] = 4792, - [SMALL_STATE(102)] = 4840, - [SMALL_STATE(103)] = 4910, - [SMALL_STATE(104)] = 4977, - [SMALL_STATE(105)] = 5044, - [SMALL_STATE(106)] = 5113, - [SMALL_STATE(107)] = 5182, - [SMALL_STATE(108)] = 5248, - [SMALL_STATE(109)] = 5314, - [SMALL_STATE(110)] = 5380, - [SMALL_STATE(111)] = 5446, - [SMALL_STATE(112)] = 5512, - [SMALL_STATE(113)] = 5537, - [SMALL_STATE(114)] = 5560, - [SMALL_STATE(115)] = 5583, - [SMALL_STATE(116)] = 5601, - [SMALL_STATE(117)] = 5616, - [SMALL_STATE(118)] = 5631, - [SMALL_STATE(119)] = 5645, - [SMALL_STATE(120)] = 5659, - [SMALL_STATE(121)] = 5673, - [SMALL_STATE(122)] = 5685, - [SMALL_STATE(123)] = 5699, - [SMALL_STATE(124)] = 5709, - [SMALL_STATE(125)] = 5723, - [SMALL_STATE(126)] = 5737, - [SMALL_STATE(127)] = 5746, - [SMALL_STATE(128)] = 5757, - [SMALL_STATE(129)] = 5766, - [SMALL_STATE(130)] = 5777, - [SMALL_STATE(131)] = 5786, - [SMALL_STATE(132)] = 5797, - [SMALL_STATE(133)] = 5806, - [SMALL_STATE(134)] = 5817, - [SMALL_STATE(135)] = 5828, - [SMALL_STATE(136)] = 5839, - [SMALL_STATE(137)] = 5850, - [SMALL_STATE(138)] = 5859, - [SMALL_STATE(139)] = 5867, - [SMALL_STATE(140)] = 5875, - [SMALL_STATE(141)] = 5883, - [SMALL_STATE(142)] = 5891, - [SMALL_STATE(143)] = 5899, - [SMALL_STATE(144)] = 5907, - [SMALL_STATE(145)] = 5915, - [SMALL_STATE(146)] = 5923, - [SMALL_STATE(147)] = 5931, - [SMALL_STATE(148)] = 5939, - [SMALL_STATE(149)] = 5947, + [SMALL_STATE(7)] = 0, + [SMALL_STATE(8)] = 91, + [SMALL_STATE(9)] = 182, + [SMALL_STATE(10)] = 273, + [SMALL_STATE(11)] = 364, + [SMALL_STATE(12)] = 455, + [SMALL_STATE(13)] = 507, + [SMALL_STATE(14)] = 592, + [SMALL_STATE(15)] = 677, + [SMALL_STATE(16)] = 762, + [SMALL_STATE(17)] = 847, + [SMALL_STATE(18)] = 932, + [SMALL_STATE(19)] = 1017, + [SMALL_STATE(20)] = 1102, + [SMALL_STATE(21)] = 1187, + [SMALL_STATE(22)] = 1272, + [SMALL_STATE(23)] = 1357, + [SMALL_STATE(24)] = 1442, + [SMALL_STATE(25)] = 1495, + [SMALL_STATE(26)] = 1580, + [SMALL_STATE(27)] = 1665, + [SMALL_STATE(28)] = 1718, + [SMALL_STATE(29)] = 1803, + [SMALL_STATE(30)] = 1888, + [SMALL_STATE(31)] = 1973, + [SMALL_STATE(32)] = 2058, + [SMALL_STATE(33)] = 2143, + [SMALL_STATE(34)] = 2228, + [SMALL_STATE(35)] = 2313, + [SMALL_STATE(36)] = 2398, + [SMALL_STATE(37)] = 2483, + [SMALL_STATE(38)] = 2568, + [SMALL_STATE(39)] = 2653, + [SMALL_STATE(40)] = 2706, + [SMALL_STATE(41)] = 2791, + [SMALL_STATE(42)] = 2876, + [SMALL_STATE(43)] = 2961, + [SMALL_STATE(44)] = 3046, + [SMALL_STATE(45)] = 3131, + [SMALL_STATE(46)] = 3216, + [SMALL_STATE(47)] = 3301, + [SMALL_STATE(48)] = 3386, + [SMALL_STATE(49)] = 3471, + [SMALL_STATE(50)] = 3556, + [SMALL_STATE(51)] = 3608, + [SMALL_STATE(52)] = 3656, + [SMALL_STATE(53)] = 3706, + [SMALL_STATE(54)] = 3755, + [SMALL_STATE(55)] = 3838, + [SMALL_STATE(56)] = 3899, + [SMALL_STATE(57)] = 3948, + [SMALL_STATE(58)] = 4031, + [SMALL_STATE(59)] = 4080, + [SMALL_STATE(60)] = 4127, + [SMALL_STATE(61)] = 4174, + [SMALL_STATE(62)] = 4221, + [SMALL_STATE(63)] = 4268, + [SMALL_STATE(64)] = 4327, + [SMALL_STATE(65)] = 4380, + [SMALL_STATE(66)] = 4435, + [SMALL_STATE(67)] = 4496, + [SMALL_STATE(68)] = 4561, + [SMALL_STATE(69)] = 4630, + [SMALL_STATE(70)] = 4697, + [SMALL_STATE(71)] = 4768, + [SMALL_STATE(72)] = 4843, + [SMALL_STATE(73)] = 4920, + [SMALL_STATE(74)] = 4999, + [SMALL_STATE(75)] = 5046, + [SMALL_STATE(76)] = 5092, + [SMALL_STATE(77)] = 5138, + [SMALL_STATE(78)] = 5184, + [SMALL_STATE(79)] = 5230, + [SMALL_STATE(80)] = 5276, + [SMALL_STATE(81)] = 5322, + [SMALL_STATE(82)] = 5370, + [SMALL_STATE(83)] = 5416, + [SMALL_STATE(84)] = 5462, + [SMALL_STATE(85)] = 5508, + [SMALL_STATE(86)] = 5554, + [SMALL_STATE(87)] = 5600, + [SMALL_STATE(88)] = 5646, + [SMALL_STATE(89)] = 5692, + [SMALL_STATE(90)] = 5738, + [SMALL_STATE(91)] = 5784, + [SMALL_STATE(92)] = 5830, + [SMALL_STATE(93)] = 5876, + [SMALL_STATE(94)] = 5920, + [SMALL_STATE(95)] = 5968, + [SMALL_STATE(96)] = 6013, + [SMALL_STATE(97)] = 6054, + [SMALL_STATE(98)] = 6099, + [SMALL_STATE(99)] = 6140, + [SMALL_STATE(100)] = 6185, + [SMALL_STATE(101)] = 6225, + [SMALL_STATE(102)] = 6264, + [SMALL_STATE(103)] = 6321, + [SMALL_STATE(104)] = 6394, + [SMALL_STATE(105)] = 6459, + [SMALL_STATE(106)] = 6526, + [SMALL_STATE(107)] = 6567, + [SMALL_STATE(108)] = 6636, + [SMALL_STATE(109)] = 6677, + [SMALL_STATE(110)] = 6738, + [SMALL_STATE(111)] = 6811, + [SMALL_STATE(112)] = 6850, + [SMALL_STATE(113)] = 6889, + [SMALL_STATE(114)] = 6930, + [SMALL_STATE(115)] = 6969, + [SMALL_STATE(116)] = 7008, + [SMALL_STATE(117)] = 7047, + [SMALL_STATE(118)] = 7098, + [SMALL_STATE(119)] = 7143, + [SMALL_STATE(120)] = 7190, + [SMALL_STATE(121)] = 7243, + [SMALL_STATE(122)] = 7298, + [SMALL_STATE(123)] = 7357, + [SMALL_STATE(124)] = 7395, + [SMALL_STATE(125)] = 7433, + [SMALL_STATE(126)] = 7471, + [SMALL_STATE(127)] = 7519, + [SMALL_STATE(128)] = 7557, + [SMALL_STATE(129)] = 7595, + [SMALL_STATE(130)] = 7633, + [SMALL_STATE(131)] = 7671, + [SMALL_STATE(132)] = 7709, + [SMALL_STATE(133)] = 7747, + [SMALL_STATE(134)] = 7785, + [SMALL_STATE(135)] = 7823, + [SMALL_STATE(136)] = 7861, + [SMALL_STATE(137)] = 7899, + [SMALL_STATE(138)] = 7969, + [SMALL_STATE(139)] = 8038, + [SMALL_STATE(140)] = 8107, + [SMALL_STATE(141)] = 8176, + [SMALL_STATE(142)] = 8243, + [SMALL_STATE(143)] = 8310, + [SMALL_STATE(144)] = 8379, + [SMALL_STATE(145)] = 8445, + [SMALL_STATE(146)] = 8511, + [SMALL_STATE(147)] = 8577, + [SMALL_STATE(148)] = 8643, + [SMALL_STATE(149)] = 8709, + [SMALL_STATE(150)] = 8775, + [SMALL_STATE(151)] = 8828, + [SMALL_STATE(152)] = 8881, + [SMALL_STATE(153)] = 8934, + [SMALL_STATE(154)] = 8987, + [SMALL_STATE(155)] = 9040, + [SMALL_STATE(156)] = 9093, + [SMALL_STATE(157)] = 9146, + [SMALL_STATE(158)] = 9199, + [SMALL_STATE(159)] = 9252, + [SMALL_STATE(160)] = 9305, + [SMALL_STATE(161)] = 9358, + [SMALL_STATE(162)] = 9411, + [SMALL_STATE(163)] = 9464, + [SMALL_STATE(164)] = 9490, + [SMALL_STATE(165)] = 9517, + [SMALL_STATE(166)] = 9542, + [SMALL_STATE(167)] = 9567, + [SMALL_STATE(168)] = 9594, + [SMALL_STATE(169)] = 9616, + [SMALL_STATE(170)] = 9638, + [SMALL_STATE(171)] = 9660, + [SMALL_STATE(172)] = 9682, + [SMALL_STATE(173)] = 9704, + [SMALL_STATE(174)] = 9730, + [SMALL_STATE(175)] = 9758, + [SMALL_STATE(176)] = 9780, + [SMALL_STATE(177)] = 9800, + [SMALL_STATE(178)] = 9820, + [SMALL_STATE(179)] = 9840, + [SMALL_STATE(180)] = 9868, + [SMALL_STATE(181)] = 9896, + [SMALL_STATE(182)] = 9914, + [SMALL_STATE(183)] = 9934, + [SMALL_STATE(184)] = 9956, + [SMALL_STATE(185)] = 9979, + [SMALL_STATE(186)] = 10002, + [SMALL_STATE(187)] = 10023, + [SMALL_STATE(188)] = 10044, + [SMALL_STATE(189)] = 10067, + [SMALL_STATE(190)] = 10088, + [SMALL_STATE(191)] = 10106, + [SMALL_STATE(192)] = 10121, + [SMALL_STATE(193)] = 10136, + [SMALL_STATE(194)] = 10150, + [SMALL_STATE(195)] = 10164, + [SMALL_STATE(196)] = 10178, + [SMALL_STATE(197)] = 10192, + [SMALL_STATE(198)] = 10206, + [SMALL_STATE(199)] = 10220, + [SMALL_STATE(200)] = 10234, + [SMALL_STATE(201)] = 10248, + [SMALL_STATE(202)] = 10258, + [SMALL_STATE(203)] = 10272, + [SMALL_STATE(204)] = 10286, + [SMALL_STATE(205)] = 10298, + [SMALL_STATE(206)] = 10312, + [SMALL_STATE(207)] = 10323, + [SMALL_STATE(208)] = 10334, + [SMALL_STATE(209)] = 10345, + [SMALL_STATE(210)] = 10356, + [SMALL_STATE(211)] = 10367, + [SMALL_STATE(212)] = 10376, + [SMALL_STATE(213)] = 10387, + [SMALL_STATE(214)] = 10398, + [SMALL_STATE(215)] = 10409, + [SMALL_STATE(216)] = 10418, + [SMALL_STATE(217)] = 10429, + [SMALL_STATE(218)] = 10440, + [SMALL_STATE(219)] = 10449, + [SMALL_STATE(220)] = 10460, + [SMALL_STATE(221)] = 10469, + [SMALL_STATE(222)] = 10480, + [SMALL_STATE(223)] = 10489, + [SMALL_STATE(224)] = 10497, + [SMALL_STATE(225)] = 10505, + [SMALL_STATE(226)] = 10513, + [SMALL_STATE(227)] = 10521, + [SMALL_STATE(228)] = 10529, + [SMALL_STATE(229)] = 10537, + [SMALL_STATE(230)] = 10545, + [SMALL_STATE(231)] = 10553, + [SMALL_STATE(232)] = 10561, + [SMALL_STATE(233)] = 10569, + [SMALL_STATE(234)] = 10577, + [SMALL_STATE(235)] = 10585, + [SMALL_STATE(236)] = 10593, + [SMALL_STATE(237)] = 10601, }; 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 = false}}, SHIFT(5), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), - [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(24), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(95), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(132), [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), - [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38), - [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), - [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), - [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(49), - [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), - [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), - [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), - [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), - [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(61), - [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), - [51] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [55] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), - [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(101), - [63] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), - [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), - [69] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), - [71] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), - [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), - [75] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), - [77] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), - [79] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(143), - [82] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), - [84] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), - [86] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [88] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [90] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), - [92] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 0), - [94] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 0), - [96] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), - [98] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), - [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), - [102] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 8), - [104] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 8), - [106] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 10), - [108] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 10), - [110] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), - [112] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), - [114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 17), - [116] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 17), - [118] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 11), - [120] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 11), - [122] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 12), - [124] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 12), - [126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 15), - [128] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 15), - [130] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [132] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [134] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [136] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [138] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [140] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [142] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [144] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [146] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), - [148] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), - [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [152] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [154] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), - [156] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), - [158] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), - [160] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), - [162] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 14), - [168] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 14), - [170] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [172] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [174] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 16), - [176] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 16), - [178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [180] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [182] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 20), - [184] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 20), - [186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 9), - [188] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 9), - [190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [192] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), - [194] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(5), - [197] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [200] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [203] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(87), - [206] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(146), - [209] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(147), - [212] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(139), - [215] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(24), - [218] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(49), - [221] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(38), - [224] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(4), - [227] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(34), - [230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), - [236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [238] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), - [240] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), - [248] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 18), - [250] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 18), - [252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [254] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), - [256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), - [260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), - [262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), - [264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [266] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), - [268] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), - [270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), - [272] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), - [274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), - [276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), - [280] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), - [282] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), - [284] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), - [286] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [288] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70), - [290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), - [292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), - [294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 19), - [296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 13), - [298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), - [300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), - [304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [310] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), - [314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [316] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(135), - [319] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), - [325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), - [327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [329] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [331] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(136), - [334] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 7), - [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), - [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), - [346] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [348] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), - [376] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), - [382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), - [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), - [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), + [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(49), + [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(31), + [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), + [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(33), + [51] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), + [55] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [57] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38), + [63] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [67] = {.entry = {.count = 1, .reusable = false}}, SHIFT(126), + [69] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(212), + [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), + [75] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(95), + [78] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(125), + [81] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(125), + [84] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(92), + [87] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(224), + [90] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(225), + [93] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(226), + [96] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(132), + [99] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(49), + [102] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), + [105] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(6), + [108] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(11), + [111] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [113] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(151), + [116] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [120] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [122] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [124] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [128] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), + [130] = {.entry = {.count = 1, .reusable = false}}, SHIFT(24), + [132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [134] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88), + [136] = {.entry = {.count = 1, .reusable = false}}, SHIFT(12), + [138] = {.entry = {.count = 1, .reusable = false}}, SHIFT(90), + [140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [142] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), + [144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), + [150] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), + [152] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), + [154] = {.entry = {.count = 1, .reusable = false}}, SHIFT(223), + [156] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), + [158] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), + [160] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), + [162] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), + [164] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(223), + [167] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [169] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [171] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [173] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [175] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [177] = {.entry = {.count = 1, .reusable = false}}, SHIFT(213), + [179] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 17), + [181] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 17), + [183] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 18), + [185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 18), + [187] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), + [191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 12), + [193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 12), + [195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), + [197] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [201] = {.entry = {.count = 1, .reusable = true}}, SHIFT(191), + [203] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), + [205] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [207] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [209] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), + [211] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 8), + [213] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 8), + [215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 10), + [217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 10), + [219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 11), + [221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 11), + [223] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 15), + [225] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 15), + [227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [231] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [235] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [239] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), + [241] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), + [243] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), + [245] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), + [247] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), + [249] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), + [251] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [253] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [255] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 9), + [257] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 9), + [259] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 16), + [261] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 16), + [263] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 21), + [265] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 21), + [267] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 14), + [269] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 14), + [271] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [273] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [275] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [277] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [279] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 20), + [281] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 20), + [283] = {.entry = {.count = 1, .reusable = false}}, SHIFT(207), + [285] = {.entry = {.count = 1, .reusable = false}}, SHIFT(115), + [287] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), + [289] = {.entry = {.count = 1, .reusable = false}}, SHIFT(235), + [291] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(235), + [294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), + [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), + [300] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), + [302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(45), + [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), + [310] = {.entry = {.count = 1, .reusable = false}}, SHIFT(46), + [312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), + [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [322] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), + [324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), + [328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [330] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), + [332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), + [334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), + [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), + [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), + [340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 13), + [342] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 19), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [348] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), + [362] = {.entry = {.count = 1, .reusable = false}}, SHIFT(164), + [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), + [366] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [368] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), + [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), + [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), + [374] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 12), + [376] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 12), + [378] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), + [380] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), + [382] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [384] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), + [388] = {.entry = {.count = 1, .reusable = false}}, SHIFT(157), + [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [394] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), + [396] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), + [398] = {.entry = {.count = 1, .reusable = false}}, SHIFT(156), + [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), + [402] = {.entry = {.count = 1, .reusable = false}}, SHIFT(150), + [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [408] = {.entry = {.count = 1, .reusable = false}}, SHIFT(158), + [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), + [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), + [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [428] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(221), + [431] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), + [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), + [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [443] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [445] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(208), + [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), + [452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), + [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), + [464] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 7), + [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), + [472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), + [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), + [478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [486] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [488] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), + [492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), + [494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), + [496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [498] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [500] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [502] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218), + [508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), + [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), + [512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [516] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), + [522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), + [530] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index f7de24e..5d9a701 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -2,7 +2,7 @@ Empty ================== -(,) -> std.None "" +() -> std.None "" --- diff --git a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt index 451deb9..5d0adf6 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt @@ -17,7 +17,7 @@ Comment before closure ================== # There's a comment before the code. -(,)->std.None "" +()->std.None "" --- diff --git a/crates/tree-sitter-command-cad-model/test/corpus/formulas.txt b/crates/tree-sitter-command-cad-model/test/corpus/formulas.txt new file mode 100644 index 0000000..e8e9f8a --- /dev/null +++ b/crates/tree-sitter-command-cad-model/test/corpus/formulas.txt @@ -0,0 +1,52 @@ +================== +Equal +================== + +<<<1 == 1>>> + +--- + +(source_file + (expression + (formula + (formula_expression + (scalar + (number))) + (formula_expression + (scalar + (number)))))) + +================== +Precedence +================== + +<<<(a + b * c ** d) + c == 1>>> + +--- + +(source_file + (expression + (formula + (formula_expression + (formula_binary_expression + (formula_expression + (formula_parenthesis + (formula_expression + (formula_binary_expression + (formula_expression + (identifier)) + (formula_expression + (formula_binary_expression + (formula_expression + (identifier)) + (formula_expression + (formula_binary_expression + (formula_expression + (identifier)) + (formula_expression + (identifier)))))))))) + (formula_expression + (identifier)))) + (formula_expression + (scalar + (number)))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt b/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt index 500d560..7b5367d 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt @@ -1,3 +1,15 @@ +================== +Empty +================== + +() + +--- + +(source_file + (expression + (dictionary_construction))) + ================== One ================== From d024ea8846ed6a7ef7d38e97a08db87a321540e5 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 22 Nov 2025 14:04:49 -0500 Subject: [PATCH 027/106] Upate .gitignore to ignore .direnv --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c001898..eb2dda0 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ *~ *#*# .*#* +.direnv From 528c07b83169b5177e2925ff53a5d4c2bd76dd07 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 22 Nov 2025 14:05:01 -0500 Subject: [PATCH 028/106] WIP update to new parser --- crates/interpreter/src/compile/mod.rs | 2 - crates/interpreter/src/compile/statements.rs | 459 ------------------- 2 files changed, 461 deletions(-) delete mode 100644 crates/interpreter/src/compile/statements.rs diff --git a/crates/interpreter/src/compile/mod.rs b/crates/interpreter/src/compile/mod.rs index be42b94..77f380d 100644 --- a/crates/interpreter/src/compile/mod.rs +++ b/crates/interpreter/src/compile/mod.rs @@ -1,11 +1,9 @@ mod expressions; -mod statements; use std::{path::PathBuf, sync::Arc}; use type_sitter::{IncorrectKind, Node}; pub use expressions::*; -pub use statements::*; mod nodes { include!(concat!(env!("OUT_DIR"), "/nodes.rs")); diff --git a/crates/interpreter/src/compile/statements.rs b/crates/interpreter/src/compile/statements.rs deleted file mode 100644 index 20521cd..0000000 --- a/crates/interpreter/src/compile/statements.rs +++ /dev/null @@ -1,459 +0,0 @@ -use std::{path::PathBuf, sync::Arc}; - -use type_sitter::HasChild; -use unwrap_enum::EnumAs; - -use super::{nodes, AstNode, Expression, IdentityPath, Parse, ProceduralBlock}; - -#[derive(Debug, Hash, Eq, PartialEq, EnumAs)] -pub enum Statement { - Assign(AstNode), - Let(AstNode), - For(AstNode), - Expression(AstNode), - ClosedExpression(AstNode), -} - -impl<'t> Parse<'t, nodes::Statement<'t>> for Statement { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::Statement<'t>, - ) -> Result, super::Error<'t, 'i>> { - type ChildType<'t> = as HasChild<'t>>::Child; - let statement = match value.child()? { - ChildType::Assign(value) => Self::Assign(Assign::parse(file, input, value)?), - ChildType::ClosedExpression(value) => { - Self::ClosedExpression(ClosedExpression::parse(file, input, value)?) - } - ChildType::Expression(value) => { - Self::Expression(Expression::parse(file, input, value)?) - } - ChildType::For(value) => Self::For(For::parse(file, input, value)?), - ChildType::Let(value) => Self::Let(Let::parse(file, input, value)?), - }; - - Ok(AstNode::new(file, &value, statement)) - } -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct Assign { - pub to_assign: AstNode, - pub assignment_type: AstNode, - pub value: AstNode, -} - -impl<'t> Parse<'t, nodes::Assign<'t>> for Assign { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::Assign<'t>, - ) -> Result, super::Error<'t, 'i>> { - let to_assign = IdentityPath::parse(file, input, value.to_assign()?)?; - let assignment_type = AssignmentType::parse(file, input, value.assignment_operator()?)?; - let assigned_value = Expression::parse(file, input, value.value()?)?; - - Ok(AstNode::new( - file, - &value, - Self { - to_assign, - assignment_type, - value: assigned_value, - }, - )) - } -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct Let { - pub to_assign: AstNode, - pub value: AstNode, -} - -impl<'t> Parse<'t, nodes::Let<'t>> for Let { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::Let<'t>, - ) -> Result, super::Error<'t, 'i>> { - let to_assign = IdentityPath::parse(file, input, value.to_assign()?)?; - let assigned_value = Expression::parse(file, input, value.value()?)?; - - Ok(AstNode::new( - file, - &value, - Self { - to_assign, - value: assigned_value, - }, - )) - } -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub enum AssignmentType { - /// = - Direct, - /// &= - BitAnd, - /// |= - BitOr, - /// ^= - BitXor, - /// &&= - LogicAnd, - /// ||= - LogicOr, - /// ^^= - LogicXor, - /// += - Add, - /// -= - Sub, - /// **= - Exponent, - /// *= - Multiply, - /// //= - IntegerDivision, - /// /= - Division, - /// <<= - LeftShift, - /// >>= - RightShift, -} - -impl<'t> Parse<'t, nodes::AssignmentOperator<'t>> for AssignmentType { - fn parse<'i>( - file: &Arc, - _input: &'i str, - value: nodes::AssignmentOperator<'t>, - ) -> Result, super::Error<'t, 'i>> { - use nodes::anon_unions::AndAndEq_AndEq_MulMulEq_MulEq_AddEq_SubEq_DivDivEq_DivEq_LtLtEq_Eq_GtGtEq_BitXorEq_BitXorBitXorEq_OrEq_OrOrEq as Operators; - let operator = value.op()?; - - let operation = match operator { - Operators::AndAndEq(_) => Self::LogicAnd, - Operators::AndEq(_) => Self::BitAnd, - Operators::MulMulEq(_) => Self::Exponent, - Operators::MulEq(_) => Self::Multiply, - Operators::AddEq(_) => Self::Add, - Operators::SubEq(_) => Self::Sub, - Operators::DivDivEq(_) => Self::IntegerDivision, - Operators::DivEq(_) => Self::Division, - Operators::LtLtEq(_) => Self::LeftShift, - Operators::Eq(_) => Self::Direct, - Operators::GtGtEq(_) => Self::RightShift, - Operators::BitXorEq(_) => Self::BitXor, - Operators::BitXorBitXorEq(_) => Self::LogicXor, - Operators::OrEq(_) => Self::BitOr, - Operators::OrOrEq(_) => Self::LogicOr, - }; - - Ok(AstNode::new(file, &operator, operation)) - } -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct For { - pub to_assign: AstNode, - pub to_iterate: AstNode, - pub to_run: AstNode, -} - -impl<'t> Parse<'t, nodes::For<'t>> for For { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::For<'t>, - ) -> Result, super::Error<'t, 'i>> { - let to_assign = String::parse(file, input, value.to_assign()?)?; - let to_iterate = Expression::parse(file, input, value.to_iterate()?)?; - let to_run = ProceduralBlock::parse(file, input, value.to_run()?)?; - - Ok(AstNode::new( - file, - &value, - Self { - to_assign, - to_iterate, - to_run, - }, - )) - } -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct ClosedExpression { - pub expression: AstNode, -} - -impl<'t> Parse<'t, nodes::ClosedExpression<'t>> for ClosedExpression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::ClosedExpression<'t>, - ) -> Result, super::Error<'t, 'i>> { - let expression = Expression::parse(file, input, value.expression()?)?; - - Ok(AstNode::new(file, &value, Self { expression })) - } -} - -#[cfg(test)] -mod test { - use crate::compile::full_compile; - - use super::*; - - #[test] - fn assign() { - let root = full_compile("{ my_value.sub_value = ~; }"); - let block = root.node.as_proceduralblock().unwrap(); - let statement = &block.node.statements[0]; - let assign = statement.node.as_assign().unwrap(); - assert_eq!( - root, - AstNode { - reference: root.reference.clone(), - node: Expression::ProceduralBlock(AstNode { - reference: block.reference.clone(), - node: ProceduralBlock { - statements: vec![AstNode { - reference: statement.reference.clone(), - node: Statement::Assign(AstNode { - reference: assign.reference.clone(), - node: Assign { - to_assign: AstNode { - reference: assign.node.to_assign.reference.clone(), - node: IdentityPath { - path: vec![ - AstNode { - reference: assign.node.to_assign.node.path[0] - .reference - .clone(), - node: "my_value".to_string() - }, - AstNode { - reference: assign.node.to_assign.node.path[1] - .reference - .clone(), - node: "sub_value".to_string() - } - ] - } - }, - assignment_type: AstNode { - reference: assign.node.assignment_type.reference.clone(), - node: AssignmentType::Direct - }, - value: AstNode { - reference: assign.node.value.reference.clone(), - node: Expression::Void(AstNode { - reference: assign - .node - .value - .node - .as_void() - .unwrap() - .reference - .clone(), - node: () - }) - } - } - }) - }] - } - }) - } - ); - } - - #[test] - fn assign_let() { - let root = full_compile("{ let my_value.sub_value = ~; }"); - let block = root.node.as_proceduralblock().unwrap(); - let statement = &block.node.statements[0]; - let let_assign = statement.node.as_let().unwrap(); - assert_eq!( - root, - AstNode { - reference: root.reference.clone(), - node: Expression::ProceduralBlock(AstNode { - reference: block.reference.clone(), - node: ProceduralBlock { - statements: vec![AstNode { - reference: statement.reference.clone(), - node: Statement::Let(AstNode { - reference: let_assign.reference.clone(), - node: Let { - to_assign: AstNode { - reference: let_assign.node.to_assign.reference.clone(), - node: IdentityPath { - path: vec![ - AstNode { - reference: let_assign.node.to_assign.node.path - [0] - .reference - .clone(), - node: "my_value".to_string() - }, - AstNode { - reference: let_assign.node.to_assign.node.path - [1] - .reference - .clone(), - node: "sub_value".to_string() - } - ] - } - }, - value: AstNode { - reference: let_assign.node.value.reference.clone(), - node: Expression::Void(AstNode { - reference: let_assign - .node - .value - .node - .as_void() - .unwrap() - .reference - .clone(), - node: () - }) - } - } - }) - }] - } - }) - } - ); - } - - #[test] - fn for_statement() { - let root = full_compile("{ for i in ~ {} }"); - let block = root.node.as_proceduralblock().unwrap(); - let statement = &block.node.statements[0]; - let for_loop = statement.node.as_for().unwrap(); - let to_assign = &for_loop.node.to_assign; - let to_iterate = &for_loop.node.to_iterate; - let to_run = &for_loop.node.to_run; - - assert_eq!( - root, - AstNode { - reference: root.reference.clone(), - node: Expression::ProceduralBlock(AstNode { - reference: block.reference.clone(), - node: ProceduralBlock { - statements: vec![AstNode { - reference: statement.reference.clone(), - node: Statement::For(AstNode { - reference: for_loop.reference.clone(), - node: For { - to_assign: AstNode { - reference: to_assign.reference.clone(), - node: "i".to_string() - }, - to_iterate: AstNode { - reference: to_iterate.reference.clone(), - node: Expression::Void(AstNode { - reference: to_iterate - .node - .as_void() - .unwrap() - .reference - .clone(), - node: () - }) - }, - to_run: AstNode { - reference: to_run.reference.clone(), - node: ProceduralBlock { statements: vec![] } - } - } - }) - }] - } - }) - } - ); - } - - #[test] - fn expression() { - let root = full_compile("{ ~ }"); - let block = root.node.as_proceduralblock().unwrap(); - let statement = &block.node.statements[0]; - let expression = statement.node.as_expression().unwrap(); - - assert_eq!( - root, - AstNode { - reference: root.reference.clone(), - node: Expression::ProceduralBlock(AstNode { - reference: block.reference.clone(), - node: ProceduralBlock { - statements: vec![AstNode { - reference: statement.reference.clone(), - node: Statement::Expression(AstNode { - reference: expression.reference.clone(), - node: Expression::Void(AstNode { - reference: expression.node.as_void().unwrap().reference.clone(), - node: () - }) - }) - }] - } - }) - } - ); - } - - #[test] - fn closed_expression() { - let root = full_compile("{ ~; }"); - let block = root.node.as_proceduralblock().unwrap(); - let statement = &block.node.statements[0]; - let closed_expression = statement.node.as_closedexpression().unwrap(); - let expression = &closed_expression.node.expression; - - assert_eq!( - root, - AstNode { - reference: root.reference.clone(), - node: Expression::ProceduralBlock(AstNode { - reference: block.reference.clone(), - node: ProceduralBlock { - statements: vec![AstNode { - reference: statement.reference.clone(), - node: Statement::ClosedExpression(AstNode { - reference: closed_expression.reference.clone(), - node: ClosedExpression { - expression: AstNode { - reference: expression.reference.clone(), - node: Expression::Void(AstNode { - reference: expression - .node - .as_void() - .unwrap() - .reference - .clone(), - node: () - }) - } - } - }) - }] - } - }) - } - ); - } -} From e33cb8400aa3673a31b34535245fbb33329d297d Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 22 Nov 2025 16:40:01 -0500 Subject: [PATCH 029/106] Add let-in syntax --- .../tree-sitter-command-cad-model/grammar.js | 6 +- .../src/grammar.json | 49 + .../src/node-types.json | 54 + .../src/parser.c | 8194 ++++++++++------- .../test/corpus/let_in.txt | 65 + 5 files changed, 4789 insertions(+), 3579 deletions(-) create mode 100644 crates/tree-sitter-command-cad-model/test/corpus/let_in.txt diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index ba1ed51..098bdbd 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -155,13 +155,17 @@ module.exports = grammar({ $.binary_expression, $.function_call, $.method_call, - $.formula + $.formula, + $.let_in ), unary_expression: $=> make_unary_expression(unary_operator_table, $.expression), binary_expression: $ => make_binary_expression(binary_operator_table, $.expression), if: $ => seq('if', field('condition', $.expression), field('on_true', $.expression), seq('else', field('on_false', $.expression))), + let_in: $ => seq('let', repeat($.let_in_assignment), 'in', $.expression), + let_in_assignment: $ => seq($.identifier, '=', $.expression, ';'), + path: $ => seq($.identifier, repeat(seq('.', $.identifier))), declaration_type: $ => seq(':', $.expression), diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index dc9c26f..65fb88e 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -412,6 +412,10 @@ { "type": "SYMBOL", "name": "formula" + }, + { + "type": "SYMBOL", + "name": "let_in" } ] }, @@ -1226,6 +1230,51 @@ } ] }, + "let_in": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "let" + }, + { + "type": "REPEAT", + "content": { + "type": "SYMBOL", + "name": "let_in_assignment" + } + }, + { + "type": "STRING", + "value": "in" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + "let_in_assignment": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ";" + } + ] + }, "path": { "type": "SEQ", "members": [ diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 8e59f99..7f25027 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -289,6 +289,10 @@ "type": "if", "named": true }, + { + "type": "let_in", + "named": true + }, { "type": "list", "named": true @@ -618,6 +622,44 @@ ] } }, + { + "type": "let_in", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "let_in_assignment", + "named": true + } + ] + } + }, + { + "type": "let_in_assignment", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "identifier", + "named": true + } + ] + } + }, { "type": "list", "named": true, @@ -977,6 +1019,10 @@ "type": ":", "named": false }, + { + "type": ";", + "named": false + }, { "type": "<", "named": false @@ -1054,6 +1100,14 @@ "type": "if", "named": false }, + { + "type": "in", + "named": false + }, + { + "type": "let", + "named": false + }, { "type": "string", "named": true diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 5b31826..1ce2289 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -7,11 +7,11 @@ #endif #define LANGUAGE_VERSION 15 -#define STATE_COUNT 238 +#define STATE_COUNT 255 #define LARGE_STATE_COUNT 7 -#define SYMBOL_COUNT 91 +#define SYMBOL_COUNT 97 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 53 +#define TOKEN_COUNT 56 #define EXTERNAL_TOKEN_COUNT 0 #define FIELD_COUNT 24 #define MAX_ALIAS_SEQUENCE_LENGTH 5 @@ -62,54 +62,60 @@ enum ts_symbol_identifiers { anon_sym_DOT_DOT_EQ = 40, anon_sym_if = 41, anon_sym_else = 42, - anon_sym_LPAREN = 43, - anon_sym_RPAREN = 44, - anon_sym_LBRACK = 45, - anon_sym_COMMA = 46, - anon_sym_RBRACK = 47, - sym_varadic_dots = 48, - anon_sym_EQ = 49, - anon_sym_DASH_GT = 50, - anon_sym_LT_LT_LT = 51, - anon_sym_GT_GT_GT = 52, - sym_source_file = 53, - sym_base_ten = 54, - sym_octal = 55, - sym_hex = 56, - sym_binary = 57, - sym_integer = 58, - sym_signed_integer = 59, - sym_unsigned_integer = 60, - sym_number = 61, - sym__float = 62, - sym__unit = 63, - sym_scalar = 64, - sym_boolean = 65, - sym_function_call = 66, - sym_method_call = 67, - sym_expression = 68, - sym_unary_expression = 69, - sym_binary_expression = 70, - sym_if = 71, - sym_path = 72, - sym_declaration_type = 73, - sym_parenthesis = 74, - sym_list = 75, - sym_struct_member = 76, - sym__struct_final_element = 77, - sym_struct_definition = 78, - sym_dictionary_member_assignment = 79, - sym_dictionary_construction = 80, - sym_closure_definition = 81, - sym_formula = 82, - sym_formula_expression = 83, - sym_formula_parenthesis = 84, - sym_formula_unary_expression = 85, - sym_formula_binary_expression = 86, - aux_sym_path_repeat1 = 87, - aux_sym_list_repeat1 = 88, - aux_sym_struct_definition_repeat1 = 89, - aux_sym_dictionary_construction_repeat1 = 90, + anon_sym_let = 43, + anon_sym_in = 44, + anon_sym_EQ = 45, + anon_sym_SEMI = 46, + anon_sym_LPAREN = 47, + anon_sym_RPAREN = 48, + anon_sym_LBRACK = 49, + anon_sym_COMMA = 50, + anon_sym_RBRACK = 51, + sym_varadic_dots = 52, + anon_sym_DASH_GT = 53, + anon_sym_LT_LT_LT = 54, + anon_sym_GT_GT_GT = 55, + sym_source_file = 56, + sym_base_ten = 57, + sym_octal = 58, + sym_hex = 59, + sym_binary = 60, + sym_integer = 61, + sym_signed_integer = 62, + sym_unsigned_integer = 63, + sym_number = 64, + sym__float = 65, + sym__unit = 66, + sym_scalar = 67, + sym_boolean = 68, + sym_function_call = 69, + sym_method_call = 70, + sym_expression = 71, + sym_unary_expression = 72, + sym_binary_expression = 73, + sym_if = 74, + sym_let_in = 75, + sym_let_in_assignment = 76, + sym_path = 77, + sym_declaration_type = 78, + sym_parenthesis = 79, + sym_list = 80, + sym_struct_member = 81, + sym__struct_final_element = 82, + sym_struct_definition = 83, + sym_dictionary_member_assignment = 84, + sym_dictionary_construction = 85, + sym_closure_definition = 86, + sym_formula = 87, + sym_formula_expression = 88, + sym_formula_parenthesis = 89, + sym_formula_unary_expression = 90, + sym_formula_binary_expression = 91, + aux_sym_let_in_repeat1 = 92, + aux_sym_path_repeat1 = 93, + aux_sym_list_repeat1 = 94, + aux_sym_struct_definition_repeat1 = 95, + aux_sym_dictionary_construction_repeat1 = 96, }; static const char * const ts_symbol_names[] = { @@ -156,13 +162,16 @@ static const char * const ts_symbol_names[] = { [anon_sym_DOT_DOT_EQ] = "..=", [anon_sym_if] = "if", [anon_sym_else] = "else", + [anon_sym_let] = "let", + [anon_sym_in] = "in", + [anon_sym_EQ] = "=", + [anon_sym_SEMI] = ";", [anon_sym_LPAREN] = "(", [anon_sym_RPAREN] = ")", [anon_sym_LBRACK] = "[", [anon_sym_COMMA] = ",", [anon_sym_RBRACK] = "]", [sym_varadic_dots] = "varadic_dots", - [anon_sym_EQ] = "=", [anon_sym_DASH_GT] = "->", [anon_sym_LT_LT_LT] = "<<<", [anon_sym_GT_GT_GT] = ">>>", @@ -185,6 +194,8 @@ static const char * const ts_symbol_names[] = { [sym_unary_expression] = "unary_expression", [sym_binary_expression] = "binary_expression", [sym_if] = "if", + [sym_let_in] = "let_in", + [sym_let_in_assignment] = "let_in_assignment", [sym_path] = "path", [sym_declaration_type] = "declaration_type", [sym_parenthesis] = "parenthesis", @@ -200,6 +211,7 @@ static const char * const ts_symbol_names[] = { [sym_formula_parenthesis] = "formula_parenthesis", [sym_formula_unary_expression] = "formula_unary_expression", [sym_formula_binary_expression] = "formula_binary_expression", + [aux_sym_let_in_repeat1] = "let_in_repeat1", [aux_sym_path_repeat1] = "path_repeat1", [aux_sym_list_repeat1] = "list_repeat1", [aux_sym_struct_definition_repeat1] = "struct_definition_repeat1", @@ -250,13 +262,16 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_DOT_DOT_EQ] = anon_sym_DOT_DOT_EQ, [anon_sym_if] = anon_sym_if, [anon_sym_else] = anon_sym_else, + [anon_sym_let] = anon_sym_let, + [anon_sym_in] = anon_sym_in, + [anon_sym_EQ] = anon_sym_EQ, + [anon_sym_SEMI] = anon_sym_SEMI, [anon_sym_LPAREN] = anon_sym_LPAREN, [anon_sym_RPAREN] = anon_sym_RPAREN, [anon_sym_LBRACK] = anon_sym_LBRACK, [anon_sym_COMMA] = anon_sym_COMMA, [anon_sym_RBRACK] = anon_sym_RBRACK, [sym_varadic_dots] = sym_varadic_dots, - [anon_sym_EQ] = anon_sym_EQ, [anon_sym_DASH_GT] = anon_sym_DASH_GT, [anon_sym_LT_LT_LT] = anon_sym_LT_LT_LT, [anon_sym_GT_GT_GT] = anon_sym_GT_GT_GT, @@ -279,6 +294,8 @@ static const TSSymbol ts_symbol_map[] = { [sym_unary_expression] = sym_unary_expression, [sym_binary_expression] = sym_binary_expression, [sym_if] = sym_if, + [sym_let_in] = sym_let_in, + [sym_let_in_assignment] = sym_let_in_assignment, [sym_path] = sym_path, [sym_declaration_type] = sym_declaration_type, [sym_parenthesis] = sym_parenthesis, @@ -294,6 +311,7 @@ static const TSSymbol ts_symbol_map[] = { [sym_formula_parenthesis] = sym_formula_parenthesis, [sym_formula_unary_expression] = sym_formula_unary_expression, [sym_formula_binary_expression] = sym_formula_binary_expression, + [aux_sym_let_in_repeat1] = aux_sym_let_in_repeat1, [aux_sym_path_repeat1] = aux_sym_path_repeat1, [aux_sym_list_repeat1] = aux_sym_list_repeat1, [aux_sym_struct_definition_repeat1] = aux_sym_struct_definition_repeat1, @@ -473,6 +491,22 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, + [anon_sym_let] = { + .visible = true, + .named = false, + }, + [anon_sym_in] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_SEMI] = { + .visible = true, + .named = false, + }, [anon_sym_LPAREN] = { .visible = true, .named = false, @@ -497,10 +531,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [anon_sym_EQ] = { - .visible = true, - .named = false, - }, [anon_sym_DASH_GT] = { .visible = true, .named = false, @@ -589,6 +619,14 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym_let_in] = { + .visible = true, + .named = true, + }, + [sym_let_in_assignment] = { + .visible = true, + .named = true, + }, [sym_path] = { .visible = true, .named = true, @@ -649,6 +687,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [aux_sym_let_in_repeat1] = { + .visible = false, + .named = false, + }, [aux_sym_path_repeat1] = { .visible = false, .named = false, @@ -840,8 +882,8 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [16] = 16, [17] = 17, [18] = 18, - [19] = 19, - [20] = 13, + [19] = 12, + [20] = 20, [21] = 21, [22] = 22, [23] = 23, @@ -849,30 +891,30 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [25] = 25, [26] = 26, [27] = 27, - [28] = 25, - [29] = 29, + [28] = 28, + [29] = 22, [30] = 30, [31] = 31, [32] = 32, [33] = 33, [34] = 34, [35] = 35, - [36] = 14, - [37] = 15, - [38] = 16, - [39] = 39, - [40] = 21, - [41] = 22, - [42] = 29, + [36] = 28, + [37] = 13, + [38] = 14, + [39] = 15, + [40] = 16, + [41] = 41, + [42] = 26, [43] = 30, - [44] = 31, - [45] = 32, - [46] = 33, - [47] = 34, - [48] = 35, - [49] = 26, - [50] = 50, - [51] = 51, + [44] = 23, + [45] = 24, + [46] = 31, + [47] = 32, + [48] = 33, + [49] = 34, + [50] = 35, + [51] = 41, [52] = 52, [53] = 53, [54] = 54, @@ -913,135 +955,135 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [89] = 89, [90] = 90, [91] = 91, - [92] = 12, - [93] = 52, - [94] = 50, - [95] = 24, - [96] = 62, - [97] = 27, - [98] = 61, - [99] = 39, - [100] = 51, - [101] = 74, - [102] = 69, - [103] = 57, - [104] = 71, - [105] = 72, - [106] = 58, - [107] = 73, - [108] = 56, - [109] = 70, - [110] = 54, - [111] = 60, - [112] = 78, - [113] = 53, - [114] = 76, - [115] = 80, - [116] = 59, - [117] = 63, - [118] = 64, - [119] = 65, - [120] = 66, - [121] = 67, - [122] = 68, - [123] = 82, - [124] = 85, - [125] = 88, - [126] = 126, - [127] = 91, - [128] = 87, - [129] = 86, - [130] = 89, - [131] = 84, - [132] = 90, - [133] = 79, - [134] = 77, - [135] = 83, - [136] = 75, - [137] = 137, - [138] = 138, - [139] = 139, - [140] = 138, - [141] = 141, - [142] = 142, - [143] = 139, - [144] = 144, + [92] = 92, + [93] = 93, + [94] = 94, + [95] = 95, + [96] = 96, + [97] = 97, + [98] = 98, + [99] = 27, + [100] = 56, + [101] = 55, + [102] = 53, + [103] = 52, + [104] = 67, + [105] = 66, + [106] = 54, + [107] = 57, + [108] = 60, + [109] = 68, + [110] = 69, + [111] = 80, + [112] = 71, + [113] = 70, + [114] = 75, + [115] = 72, + [116] = 73, + [117] = 76, + [118] = 58, + [119] = 74, + [120] = 59, + [121] = 61, + [122] = 81, + [123] = 63, + [124] = 62, + [125] = 64, + [126] = 77, + [127] = 92, + [128] = 65, + [129] = 95, + [130] = 78, + [131] = 96, + [132] = 82, + [133] = 97, + [134] = 94, + [135] = 86, + [136] = 91, + [137] = 85, + [138] = 98, + [139] = 84, + [140] = 90, + [141] = 88, + [142] = 89, + [143] = 83, + [144] = 93, [145] = 145, [146] = 146, [147] = 147, - [148] = 144, - [149] = 146, - [150] = 150, + [148] = 148, + [149] = 149, + [150] = 149, [151] = 151, - [152] = 152, - [153] = 152, + [152] = 147, + [153] = 153, [154] = 154, [155] = 155, - [156] = 150, + [156] = 154, [157] = 157, - [158] = 157, - [159] = 154, - [160] = 155, - [161] = 151, + [158] = 158, + [159] = 153, + [160] = 160, + [161] = 161, [162] = 162, [163] = 163, - [164] = 12, + [164] = 160, [165] = 165, - [166] = 52, - [167] = 50, - [168] = 168, - [169] = 62, - [170] = 170, - [171] = 61, - [172] = 172, + [166] = 166, + [167] = 167, + [168] = 162, + [169] = 166, + [170] = 165, + [171] = 163, + [172] = 167, [173] = 173, [174] = 174, - [175] = 175, - [176] = 78, - [177] = 76, - [178] = 80, - [179] = 179, - [180] = 179, - [181] = 175, - [182] = 173, - [183] = 174, + [175] = 27, + [176] = 55, + [177] = 56, + [178] = 66, + [179] = 67, + [180] = 180, + [181] = 181, + [182] = 182, + [183] = 95, [184] = 184, - [185] = 185, + [185] = 96, [186] = 186, [187] = 187, - [188] = 184, - [189] = 187, - [190] = 190, - [191] = 191, - [192] = 191, - [193] = 193, + [188] = 188, + [189] = 188, + [190] = 92, + [191] = 187, + [192] = 186, + [193] = 184, [194] = 194, - [195] = 195, + [195] = 194, [196] = 196, [197] = 197, - [198] = 194, + [198] = 196, [199] = 199, - [200] = 193, + [200] = 200, [201] = 201, - [202] = 196, - [203] = 197, - [204] = 204, - [205] = 199, + [202] = 202, + [203] = 203, + [204] = 202, + [205] = 203, [206] = 206, - [207] = 207, + [207] = 206, [208] = 208, - [209] = 206, - [210] = 206, + [209] = 209, + [210] = 210, [211] = 211, - [212] = 212, - [213] = 207, - [214] = 214, + [212] = 210, + [213] = 213, + [214] = 213, [215] = 215, [216] = 216, - [217] = 207, - [218] = 218, - [219] = 216, - [220] = 220, + [217] = 217, + [218] = 209, + [219] = 215, + [220] = 216, [221] = 221, [222] = 222, [223] = 223, @@ -1054,11 +1096,28 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [230] = 230, [231] = 231, [232] = 232, - [233] = 227, - [234] = 228, - [235] = 223, - [236] = 232, - [237] = 237, + [233] = 233, + [234] = 229, + [235] = 229, + [236] = 230, + [237] = 231, + [238] = 231, + [239] = 239, + [240] = 240, + [241] = 241, + [242] = 242, + [243] = 243, + [244] = 244, + [245] = 245, + [246] = 246, + [247] = 239, + [248] = 248, + [249] = 241, + [250] = 250, + [251] = 251, + [252] = 252, + [253] = 250, + [254] = 252, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1073,22 +1132,23 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '#', 20, '&', 54, '\'', 7, - '(', 73, - ')', 74, + '(', 75, + ')', 76, '*', 46, '+', 42, - ',', 76, + ',', 78, '-', 41, '.', 37, '/', 48, '0', 25, '1', 27, ':', 39, + ';', 74, '<', 64, - '=', 79, + '=', 73, '>', 58, - '[', 75, - ']', 77, + '[', 77, + ']', 79, '^', 56, '|', 55, ); @@ -1106,7 +1166,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '#', 20, '&', 54, '\'', 7, - '(', 73, + '(', 75, '*', 46, '+', 42, '-', 41, @@ -1117,8 +1177,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '<', 64, '=', 14, '>', 59, - '[', 75, - ']', 77, + '[', 77, + ']', 79, '^', 56, '|', 55, ); @@ -1134,8 +1194,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '!', 43, '"', 5, '#', 20, - '(', 73, - ')', 74, + '(', 75, + ')', 76, '*', 46, '+', 42, '-', 40, @@ -1144,7 +1204,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '0', 26, '<', 12, '>', 16, - '[', 75, + '[', 77, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(21); @@ -1177,7 +1237,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ADVANCE_MAP( '!', 13, '#', 20, - ')', 74, + ')', 76, '*', 46, '+', 42, '-', 40, @@ -1213,13 +1273,13 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead != 0) ADVANCE(7); END_STATE(); case 9: - if (lookahead == '.') ADVANCE(78); + if (lookahead == '.') ADVANCE(80); END_STATE(); case 10: if (lookahead == '.') ADVANCE(9); END_STATE(); case 11: - if (lookahead == '<') ADVANCE(81); + if (lookahead == '<') ADVANCE(82); END_STATE(); case 12: if (lookahead == '<') ADVANCE(11); @@ -1231,7 +1291,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '=') ADVANCE(62); END_STATE(); case 15: - if (lookahead == '>') ADVANCE(82); + if (lookahead == '>') ADVANCE(83); END_STATE(); case 16: if (lookahead == '>') ADVANCE(15); @@ -1243,19 +1303,20 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '#', 20, '&', 54, '\'', 7, - '(', 73, - ')', 74, + '(', 75, + ')', 76, '*', 46, '+', 42, - ',', 76, + ',', 78, '-', 40, '.', 38, '/', 48, ':', 39, + ';', 74, '<', 65, - '=', 79, + '=', 73, '>', 58, - ']', 77, + ']', 79, '^', 56, '|', 55, ); @@ -1272,19 +1333,20 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '!', 13, '#', 20, '&', 54, - '(', 73, - ')', 74, + '(', 75, + ')', 76, '*', 46, '+', 42, - ',', 76, + ',', 78, '-', 41, '.', 38, '/', 48, ':', 39, + ';', 74, '<', 65, - '=', 79, + '=', 73, '>', 59, - ']', 77, + ']', 79, '^', 56, '|', 55, '0', 33, @@ -1397,7 +1459,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 41: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '>') ADVANCE(80); + if (lookahead == '>') ADVANCE(81); END_STATE(); case 42: ACCEPT_TOKEN(anon_sym_PLUS); @@ -1431,14 +1493,14 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 51: ACCEPT_TOKEN(anon_sym_LT_LT); - if (lookahead == '<') ADVANCE(81); + if (lookahead == '<') ADVANCE(82); END_STATE(); case 52: ACCEPT_TOKEN(anon_sym_GT_GT); END_STATE(); case 53: ACCEPT_TOKEN(anon_sym_GT_GT); - if (lookahead == '>') ADVANCE(82); + if (lookahead == '>') ADVANCE(83); END_STATE(); case 54: ACCEPT_TOKEN(anon_sym_AMP); @@ -1504,7 +1566,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 70: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '.') ADVANCE(78); + if (lookahead == '.') ADVANCE(80); if (lookahead == '=') ADVANCE(72); END_STATE(); case 71: @@ -1515,34 +1577,37 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); END_STATE(); case 73: - ACCEPT_TOKEN(anon_sym_LPAREN); + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '=') ADVANCE(62); END_STATE(); case 74: - ACCEPT_TOKEN(anon_sym_RPAREN); + ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); case 75: - ACCEPT_TOKEN(anon_sym_LBRACK); + ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); case 76: - ACCEPT_TOKEN(anon_sym_COMMA); + ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); case 77: - ACCEPT_TOKEN(anon_sym_RBRACK); + ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); case 78: - ACCEPT_TOKEN(sym_varadic_dots); + ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); case 79: - ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(62); + ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); case 80: - ACCEPT_TOKEN(anon_sym_DASH_GT); + ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); case 81: - ACCEPT_TOKEN(anon_sym_LT_LT_LT); + ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); case 82: + ACCEPT_TOKEN(anon_sym_LT_LT_LT); + END_STATE(); + case 83: ACCEPT_TOKEN(anon_sym_GT_GT_GT); END_STATE(); default: @@ -1561,82 +1626,96 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { 'e', 3, 'f', 4, 'i', 5, - 't', 6, - 'U', 7, - 'u', 7, + 'l', 6, + 't', 7, + 'U', 8, + 'u', 8, ); END_STATE(); case 1: ACCEPT_TOKEN(aux_sym_signed_integer_token1); END_STATE(); case 2: - if (lookahead == 'e') ADVANCE(8); + if (lookahead == 'e') ADVANCE(9); END_STATE(); case 3: - if (lookahead == 'l') ADVANCE(9); + if (lookahead == 'l') ADVANCE(10); END_STATE(); case 4: - if (lookahead == 'a') ADVANCE(10); + if (lookahead == 'a') ADVANCE(11); END_STATE(); case 5: ACCEPT_TOKEN(aux_sym_signed_integer_token1); - if (lookahead == 'f') ADVANCE(11); + if (lookahead == 'f') ADVANCE(12); + if (lookahead == 'n') ADVANCE(13); END_STATE(); case 6: - if (lookahead == 'r') ADVANCE(12); + if (lookahead == 'e') ADVANCE(14); END_STATE(); case 7: - ACCEPT_TOKEN(aux_sym_unsigned_integer_token1); + if (lookahead == 'r') ADVANCE(15); END_STATE(); case 8: - if (lookahead == 'f') ADVANCE(13); + ACCEPT_TOKEN(aux_sym_unsigned_integer_token1); END_STATE(); case 9: - if (lookahead == 's') ADVANCE(14); + if (lookahead == 'f') ADVANCE(16); END_STATE(); case 10: - if (lookahead == 'l') ADVANCE(15); + if (lookahead == 's') ADVANCE(17); END_STATE(); case 11: - ACCEPT_TOKEN(anon_sym_if); + if (lookahead == 'l') ADVANCE(18); END_STATE(); case 12: - if (lookahead == 'u') ADVANCE(16); + ACCEPT_TOKEN(anon_sym_if); END_STATE(); case 13: - if (lookahead == 'a') ADVANCE(17); + ACCEPT_TOKEN(anon_sym_in); END_STATE(); case 14: - if (lookahead == 'e') ADVANCE(18); + if (lookahead == 't') ADVANCE(19); END_STATE(); case 15: - if (lookahead == 's') ADVANCE(19); + if (lookahead == 'u') ADVANCE(20); END_STATE(); case 16: - if (lookahead == 'e') ADVANCE(20); + if (lookahead == 'a') ADVANCE(21); END_STATE(); case 17: - if (lookahead == 'u') ADVANCE(21); + if (lookahead == 'e') ADVANCE(22); END_STATE(); case 18: - ACCEPT_TOKEN(anon_sym_else); + if (lookahead == 's') ADVANCE(23); END_STATE(); case 19: - if (lookahead == 'e') ADVANCE(22); + ACCEPT_TOKEN(anon_sym_let); END_STATE(); case 20: - ACCEPT_TOKEN(sym_true); + if (lookahead == 'e') ADVANCE(24); END_STATE(); case 21: - if (lookahead == 'l') ADVANCE(23); + if (lookahead == 'u') ADVANCE(25); END_STATE(); case 22: - ACCEPT_TOKEN(sym_false); + ACCEPT_TOKEN(anon_sym_else); END_STATE(); case 23: - if (lookahead == 't') ADVANCE(24); + if (lookahead == 'e') ADVANCE(26); END_STATE(); case 24: + ACCEPT_TOKEN(sym_true); + END_STATE(); + case 25: + if (lookahead == 'l') ADVANCE(27); + END_STATE(); + case 26: + ACCEPT_TOKEN(sym_false); + END_STATE(); + case 27: + if (lookahead == 't') ADVANCE(28); + END_STATE(); + case 28: ACCEPT_TOKEN(sym_default); END_STATE(); default: @@ -1737,30 +1816,30 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [89] = {.lex_state = 1}, [90] = {.lex_state = 1}, [91] = {.lex_state = 1}, - [92] = {.lex_state = 17}, - [93] = {.lex_state = 17}, - [94] = {.lex_state = 17}, - [95] = {.lex_state = 18}, - [96] = {.lex_state = 17}, - [97] = {.lex_state = 18}, - [98] = {.lex_state = 17}, - [99] = {.lex_state = 18}, - [100] = {.lex_state = 18}, - [101] = {.lex_state = 18}, + [92] = {.lex_state = 1}, + [93] = {.lex_state = 1}, + [94] = {.lex_state = 1}, + [95] = {.lex_state = 1}, + [96] = {.lex_state = 1}, + [97] = {.lex_state = 1}, + [98] = {.lex_state = 1}, + [99] = {.lex_state = 17}, + [100] = {.lex_state = 17}, + [101] = {.lex_state = 17}, [102] = {.lex_state = 18}, [103] = {.lex_state = 18}, - [104] = {.lex_state = 18}, - [105] = {.lex_state = 18}, + [104] = {.lex_state = 17}, + [105] = {.lex_state = 17}, [106] = {.lex_state = 18}, [107] = {.lex_state = 18}, [108] = {.lex_state = 18}, [109] = {.lex_state = 18}, [110] = {.lex_state = 18}, [111] = {.lex_state = 18}, - [112] = {.lex_state = 17}, + [112] = {.lex_state = 18}, [113] = {.lex_state = 18}, - [114] = {.lex_state = 17}, - [115] = {.lex_state = 17}, + [114] = {.lex_state = 18}, + [115] = {.lex_state = 18}, [116] = {.lex_state = 18}, [117] = {.lex_state = 18}, [118] = {.lex_state = 18}, @@ -1772,11 +1851,11 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [124] = {.lex_state = 18}, [125] = {.lex_state = 18}, [126] = {.lex_state = 18}, - [127] = {.lex_state = 18}, + [127] = {.lex_state = 17}, [128] = {.lex_state = 18}, - [129] = {.lex_state = 18}, + [129] = {.lex_state = 17}, [130] = {.lex_state = 18}, - [131] = {.lex_state = 18}, + [131] = {.lex_state = 17}, [132] = {.lex_state = 18}, [133] = {.lex_state = 18}, [134] = {.lex_state = 18}, @@ -1795,94 +1874,111 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [147] = {.lex_state = 18}, [148] = {.lex_state = 18}, [149] = {.lex_state = 18}, - [150] = {.lex_state = 1}, - [151] = {.lex_state = 1}, - [152] = {.lex_state = 1}, - [153] = {.lex_state = 1}, - [154] = {.lex_state = 1}, - [155] = {.lex_state = 1}, - [156] = {.lex_state = 1}, - [157] = {.lex_state = 1}, - [158] = {.lex_state = 1}, - [159] = {.lex_state = 1}, + [150] = {.lex_state = 18}, + [151] = {.lex_state = 18}, + [152] = {.lex_state = 18}, + [153] = {.lex_state = 18}, + [154] = {.lex_state = 18}, + [155] = {.lex_state = 18}, + [156] = {.lex_state = 18}, + [157] = {.lex_state = 18}, + [158] = {.lex_state = 18}, + [159] = {.lex_state = 18}, [160] = {.lex_state = 1}, [161] = {.lex_state = 1}, [162] = {.lex_state = 1}, [163] = {.lex_state = 1}, - [164] = {.lex_state = 3}, + [164] = {.lex_state = 1}, [165] = {.lex_state = 1}, - [166] = {.lex_state = 3}, - [167] = {.lex_state = 3}, - [168] = {.lex_state = 4}, - [169] = {.lex_state = 3}, - [170] = {.lex_state = 4}, - [171] = {.lex_state = 3}, - [172] = {.lex_state = 4}, - [173] = {.lex_state = 3}, - [174] = {.lex_state = 3}, + [166] = {.lex_state = 1}, + [167] = {.lex_state = 1}, + [168] = {.lex_state = 1}, + [169] = {.lex_state = 1}, + [170] = {.lex_state = 1}, + [171] = {.lex_state = 1}, + [172] = {.lex_state = 1}, + [173] = {.lex_state = 1}, + [174] = {.lex_state = 1}, [175] = {.lex_state = 3}, [176] = {.lex_state = 3}, [177] = {.lex_state = 3}, [178] = {.lex_state = 3}, [179] = {.lex_state = 3}, - [180] = {.lex_state = 3}, - [181] = {.lex_state = 2}, - [182] = {.lex_state = 2}, - [183] = {.lex_state = 2}, - [184] = {.lex_state = 2}, - [185] = {.lex_state = 2}, - [186] = {.lex_state = 0}, - [187] = {.lex_state = 2}, - [188] = {.lex_state = 2}, - [189] = {.lex_state = 2}, - [190] = {.lex_state = 2}, - [191] = {.lex_state = 0}, - [192] = {.lex_state = 0}, - [193] = {.lex_state = 0}, - [194] = {.lex_state = 0}, - [195] = {.lex_state = 0}, - [196] = {.lex_state = 0}, - [197] = {.lex_state = 0}, - [198] = {.lex_state = 0}, + [180] = {.lex_state = 4}, + [181] = {.lex_state = 4}, + [182] = {.lex_state = 4}, + [183] = {.lex_state = 3}, + [184] = {.lex_state = 3}, + [185] = {.lex_state = 3}, + [186] = {.lex_state = 3}, + [187] = {.lex_state = 3}, + [188] = {.lex_state = 3}, + [189] = {.lex_state = 3}, + [190] = {.lex_state = 3}, + [191] = {.lex_state = 2}, + [192] = {.lex_state = 2}, + [193] = {.lex_state = 2}, + [194] = {.lex_state = 2}, + [195] = {.lex_state = 2}, + [196] = {.lex_state = 2}, + [197] = {.lex_state = 2}, + [198] = {.lex_state = 2}, [199] = {.lex_state = 0}, - [200] = {.lex_state = 0}, - [201] = {.lex_state = 2}, + [200] = {.lex_state = 2}, + [201] = {.lex_state = 0}, [202] = {.lex_state = 0}, [203] = {.lex_state = 0}, [204] = {.lex_state = 0}, [205] = {.lex_state = 0}, [206] = {.lex_state = 0}, - [207] = {.lex_state = 17}, + [207] = {.lex_state = 0}, [208] = {.lex_state = 0}, [209] = {.lex_state = 0}, [210] = {.lex_state = 0}, [211] = {.lex_state = 0}, [212] = {.lex_state = 0}, - [213] = {.lex_state = 17}, + [213] = {.lex_state = 0}, [214] = {.lex_state = 0}, [215] = {.lex_state = 0}, [216] = {.lex_state = 0}, - [217] = {.lex_state = 17}, + [217] = {.lex_state = 2}, [218] = {.lex_state = 0}, [219] = {.lex_state = 0}, [220] = {.lex_state = 0}, [221] = {.lex_state = 0}, [222] = {.lex_state = 0}, [223] = {.lex_state = 0}, - [224] = {.lex_state = 17}, - [225] = {.lex_state = 4}, - [226] = {.lex_state = 18}, + [224] = {.lex_state = 0}, + [225] = {.lex_state = 0}, + [226] = {.lex_state = 0}, [227] = {.lex_state = 0}, [228] = {.lex_state = 0}, [229] = {.lex_state = 0}, [230] = {.lex_state = 0}, - [231] = {.lex_state = 0}, + [231] = {.lex_state = 17}, [232] = {.lex_state = 0}, [233] = {.lex_state = 0}, [234] = {.lex_state = 0}, [235] = {.lex_state = 0}, [236] = {.lex_state = 0}, - [237] = {.lex_state = 0}, + [237] = {.lex_state = 17}, + [238] = {.lex_state = 17}, + [239] = {.lex_state = 0}, + [240] = {.lex_state = 18}, + [241] = {.lex_state = 0}, + [242] = {.lex_state = 17}, + [243] = {.lex_state = 0}, + [244] = {.lex_state = 0}, + [245] = {.lex_state = 0}, + [246] = {.lex_state = 0}, + [247] = {.lex_state = 0}, + [248] = {.lex_state = 0}, + [249] = {.lex_state = 0}, + [250] = {.lex_state = 0}, + [251] = {.lex_state = 4}, + [252] = {.lex_state = 0}, + [253] = {.lex_state = 0}, + [254] = {.lex_state = 0}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -1929,43 +2025,47 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_DOT_DOT_EQ] = ACTIONS(1), [anon_sym_if] = ACTIONS(1), [anon_sym_else] = ACTIONS(1), + [anon_sym_let] = ACTIONS(1), + [anon_sym_in] = ACTIONS(1), + [anon_sym_EQ] = ACTIONS(1), + [anon_sym_SEMI] = ACTIONS(1), [anon_sym_LPAREN] = ACTIONS(1), [anon_sym_RPAREN] = ACTIONS(1), [anon_sym_LBRACK] = ACTIONS(1), [anon_sym_COMMA] = ACTIONS(1), [anon_sym_RBRACK] = ACTIONS(1), [sym_varadic_dots] = ACTIONS(1), - [anon_sym_EQ] = ACTIONS(1), [anon_sym_DASH_GT] = ACTIONS(1), [anon_sym_LT_LT_LT] = ACTIONS(1), [anon_sym_GT_GT_GT] = ACTIONS(1), }, [STATE(1)] = { - [sym_source_file] = STATE(237), - [sym_base_ten] = STATE(211), - [sym_octal] = STATE(211), - [sym_hex] = STATE(211), - [sym_binary] = STATE(211), - [sym_integer] = STATE(210), - [sym_signed_integer] = STATE(125), - [sym_unsigned_integer] = STATE(125), - [sym_number] = STATE(93), - [sym__float] = STATE(94), - [sym_scalar] = STATE(125), - [sym_boolean] = STATE(125), - [sym_function_call] = STATE(125), - [sym_method_call] = STATE(125), - [sym_expression] = STATE(145), - [sym_unary_expression] = STATE(125), - [sym_binary_expression] = STATE(125), - [sym_if] = STATE(125), + [sym_source_file] = STATE(243), + [sym_base_ten] = STATE(227), + [sym_octal] = STATE(227), + [sym_hex] = STATE(227), + [sym_binary] = STATE(227), + [sym_integer] = STATE(234), + [sym_signed_integer] = STATE(143), + [sym_unsigned_integer] = STATE(143), + [sym_number] = STATE(101), + [sym__float] = STATE(100), + [sym_scalar] = STATE(143), + [sym_boolean] = STATE(143), + [sym_function_call] = STATE(143), + [sym_method_call] = STATE(143), + [sym_expression] = STATE(158), + [sym_unary_expression] = STATE(143), + [sym_binary_expression] = STATE(143), + [sym_if] = STATE(143), + [sym_let_in] = STATE(143), [sym_path] = STATE(108), - [sym_parenthesis] = STATE(125), - [sym_list] = STATE(125), + [sym_parenthesis] = STATE(143), + [sym_list] = STATE(143), [sym_struct_definition] = STATE(108), - [sym_dictionary_construction] = STATE(125), - [sym_closure_definition] = STATE(125), - [sym_formula] = STATE(125), + [sym_dictionary_construction] = STATE(143), + [sym_closure_definition] = STATE(143), + [sym_formula] = STATE(143), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -1981,35 +2081,37 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_PLUS] = ACTIONS(21), [anon_sym_BANG] = ACTIONS(21), [anon_sym_if] = ACTIONS(23), - [anon_sym_LPAREN] = ACTIONS(25), - [anon_sym_LBRACK] = ACTIONS(27), - [anon_sym_LT_LT_LT] = ACTIONS(29), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(27), + [anon_sym_LBRACK] = ACTIONS(29), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(2)] = { - [sym_base_ten] = STATE(211), - [sym_octal] = STATE(211), - [sym_hex] = STATE(211), - [sym_binary] = STATE(211), - [sym_integer] = STATE(210), - [sym_signed_integer] = STATE(125), - [sym_unsigned_integer] = STATE(125), - [sym_number] = STATE(93), - [sym__float] = STATE(94), - [sym_scalar] = STATE(125), - [sym_boolean] = STATE(125), - [sym_function_call] = STATE(125), - [sym_method_call] = STATE(125), - [sym_expression] = STATE(149), - [sym_unary_expression] = STATE(125), - [sym_binary_expression] = STATE(125), - [sym_if] = STATE(125), + [sym_base_ten] = STATE(227), + [sym_octal] = STATE(227), + [sym_hex] = STATE(227), + [sym_binary] = STATE(227), + [sym_integer] = STATE(234), + [sym_signed_integer] = STATE(143), + [sym_unsigned_integer] = STATE(143), + [sym_number] = STATE(101), + [sym__float] = STATE(100), + [sym_scalar] = STATE(143), + [sym_boolean] = STATE(143), + [sym_function_call] = STATE(143), + [sym_method_call] = STATE(143), + [sym_expression] = STATE(159), + [sym_unary_expression] = STATE(143), + [sym_binary_expression] = STATE(143), + [sym_if] = STATE(143), + [sym_let_in] = STATE(143), [sym_path] = STATE(108), - [sym_parenthesis] = STATE(125), - [sym_list] = STATE(125), + [sym_parenthesis] = STATE(143), + [sym_list] = STATE(143), [sym_struct_definition] = STATE(108), - [sym_dictionary_construction] = STATE(81), - [sym_closure_definition] = STATE(125), - [sym_formula] = STATE(125), + [sym_dictionary_construction] = STATE(87), + [sym_closure_definition] = STATE(143), + [sym_formula] = STATE(143), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2021,59 +2123,61 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [aux_sym_binary_token1] = ACTIONS(17), [sym_true] = ACTIONS(19), [sym_false] = ACTIONS(19), - [anon_sym_COLON] = ACTIONS(31), - [anon_sym_DASH] = ACTIONS(33), - [anon_sym_PLUS] = ACTIONS(33), - [anon_sym_BANG] = ACTIONS(35), - [anon_sym_STAR_STAR] = ACTIONS(37), - [anon_sym_STAR] = ACTIONS(39), - [anon_sym_SLASH] = ACTIONS(39), - [anon_sym_SLASH_SLASH] = ACTIONS(41), - [anon_sym_LT_LT] = ACTIONS(43), - [anon_sym_GT_GT] = ACTIONS(45), - [anon_sym_AMP] = ACTIONS(47), - [anon_sym_PIPE] = ACTIONS(49), - [anon_sym_CARET] = ACTIONS(51), - [anon_sym_GT] = ACTIONS(53), - [anon_sym_GT_EQ] = ACTIONS(55), - [anon_sym_EQ_EQ] = ACTIONS(55), - [anon_sym_LT_EQ] = ACTIONS(55), - [anon_sym_LT] = ACTIONS(53), - [anon_sym_BANG_EQ] = ACTIONS(55), - [anon_sym_AMP_AMP] = ACTIONS(57), - [anon_sym_PIPE_PIPE] = ACTIONS(59), - [anon_sym_DOT_DOT] = ACTIONS(61), - [anon_sym_DOT_DOT_EQ] = ACTIONS(63), + [anon_sym_COLON] = ACTIONS(33), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_BANG] = ACTIONS(37), + [anon_sym_STAR_STAR] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_SLASH] = ACTIONS(41), + [anon_sym_SLASH_SLASH] = ACTIONS(43), + [anon_sym_LT_LT] = ACTIONS(45), + [anon_sym_GT_GT] = ACTIONS(47), + [anon_sym_AMP] = ACTIONS(49), + [anon_sym_PIPE] = ACTIONS(51), + [anon_sym_CARET] = ACTIONS(53), + [anon_sym_GT] = ACTIONS(55), + [anon_sym_GT_EQ] = ACTIONS(57), + [anon_sym_EQ_EQ] = ACTIONS(57), + [anon_sym_LT_EQ] = ACTIONS(57), + [anon_sym_LT] = ACTIONS(55), + [anon_sym_BANG_EQ] = ACTIONS(57), + [anon_sym_AMP_AMP] = ACTIONS(59), + [anon_sym_PIPE_PIPE] = ACTIONS(61), + [anon_sym_DOT_DOT] = ACTIONS(63), + [anon_sym_DOT_DOT_EQ] = ACTIONS(65), [anon_sym_if] = ACTIONS(23), - [anon_sym_LPAREN] = ACTIONS(65), - [anon_sym_LBRACK] = ACTIONS(27), - [anon_sym_LT_LT_LT] = ACTIONS(29), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(67), + [anon_sym_LBRACK] = ACTIONS(29), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(3)] = { - [sym_base_ten] = STATE(211), - [sym_octal] = STATE(211), - [sym_hex] = STATE(211), - [sym_binary] = STATE(211), - [sym_integer] = STATE(210), - [sym_signed_integer] = STATE(125), - [sym_unsigned_integer] = STATE(125), - [sym_number] = STATE(93), - [sym__float] = STATE(94), - [sym_scalar] = STATE(125), - [sym_boolean] = STATE(125), - [sym_function_call] = STATE(125), - [sym_method_call] = STATE(125), - [sym_expression] = STATE(146), - [sym_unary_expression] = STATE(125), - [sym_binary_expression] = STATE(125), - [sym_if] = STATE(125), + [sym_base_ten] = STATE(227), + [sym_octal] = STATE(227), + [sym_hex] = STATE(227), + [sym_binary] = STATE(227), + [sym_integer] = STATE(234), + [sym_signed_integer] = STATE(143), + [sym_unsigned_integer] = STATE(143), + [sym_number] = STATE(101), + [sym__float] = STATE(100), + [sym_scalar] = STATE(143), + [sym_boolean] = STATE(143), + [sym_function_call] = STATE(143), + [sym_method_call] = STATE(143), + [sym_expression] = STATE(153), + [sym_unary_expression] = STATE(143), + [sym_binary_expression] = STATE(143), + [sym_if] = STATE(143), + [sym_let_in] = STATE(143), [sym_path] = STATE(108), - [sym_parenthesis] = STATE(125), - [sym_list] = STATE(125), + [sym_parenthesis] = STATE(143), + [sym_list] = STATE(143), [sym_struct_definition] = STATE(108), - [sym_dictionary_construction] = STATE(81), - [sym_closure_definition] = STATE(125), - [sym_formula] = STATE(125), + [sym_dictionary_construction] = STATE(87), + [sym_closure_definition] = STATE(143), + [sym_formula] = STATE(143), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2085,64 +2189,66 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [aux_sym_binary_token1] = ACTIONS(17), [sym_true] = ACTIONS(19), [sym_false] = ACTIONS(19), - [anon_sym_COLON] = ACTIONS(31), - [anon_sym_DASH] = ACTIONS(33), - [anon_sym_PLUS] = ACTIONS(33), - [anon_sym_BANG] = ACTIONS(35), - [anon_sym_STAR_STAR] = ACTIONS(37), - [anon_sym_STAR] = ACTIONS(39), - [anon_sym_SLASH] = ACTIONS(39), - [anon_sym_SLASH_SLASH] = ACTIONS(41), - [anon_sym_LT_LT] = ACTIONS(43), - [anon_sym_GT_GT] = ACTIONS(45), - [anon_sym_AMP] = ACTIONS(47), - [anon_sym_PIPE] = ACTIONS(49), - [anon_sym_CARET] = ACTIONS(51), - [anon_sym_GT] = ACTIONS(53), - [anon_sym_GT_EQ] = ACTIONS(55), - [anon_sym_EQ_EQ] = ACTIONS(55), - [anon_sym_LT_EQ] = ACTIONS(55), - [anon_sym_LT] = ACTIONS(53), - [anon_sym_BANG_EQ] = ACTIONS(55), - [anon_sym_AMP_AMP] = ACTIONS(57), - [anon_sym_PIPE_PIPE] = ACTIONS(59), - [anon_sym_DOT_DOT] = ACTIONS(61), - [anon_sym_DOT_DOT_EQ] = ACTIONS(63), + [anon_sym_COLON] = ACTIONS(33), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_BANG] = ACTIONS(37), + [anon_sym_STAR_STAR] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_SLASH] = ACTIONS(41), + [anon_sym_SLASH_SLASH] = ACTIONS(43), + [anon_sym_LT_LT] = ACTIONS(45), + [anon_sym_GT_GT] = ACTIONS(47), + [anon_sym_AMP] = ACTIONS(49), + [anon_sym_PIPE] = ACTIONS(51), + [anon_sym_CARET] = ACTIONS(53), + [anon_sym_GT] = ACTIONS(55), + [anon_sym_GT_EQ] = ACTIONS(57), + [anon_sym_EQ_EQ] = ACTIONS(57), + [anon_sym_LT_EQ] = ACTIONS(57), + [anon_sym_LT] = ACTIONS(55), + [anon_sym_BANG_EQ] = ACTIONS(57), + [anon_sym_AMP_AMP] = ACTIONS(59), + [anon_sym_PIPE_PIPE] = ACTIONS(61), + [anon_sym_DOT_DOT] = ACTIONS(63), + [anon_sym_DOT_DOT_EQ] = ACTIONS(65), [anon_sym_if] = ACTIONS(23), - [anon_sym_LPAREN] = ACTIONS(65), - [anon_sym_LBRACK] = ACTIONS(27), - [anon_sym_LT_LT_LT] = ACTIONS(29), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(67), + [anon_sym_LBRACK] = ACTIONS(29), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(4)] = { - [sym_base_ten] = STATE(211), - [sym_octal] = STATE(211), - [sym_hex] = STATE(211), - [sym_binary] = STATE(211), - [sym_integer] = STATE(210), - [sym_signed_integer] = STATE(125), - [sym_unsigned_integer] = STATE(125), - [sym_number] = STATE(93), - [sym__float] = STATE(94), - [sym_scalar] = STATE(125), - [sym_boolean] = STATE(125), - [sym_function_call] = STATE(125), - [sym_method_call] = STATE(125), - [sym_expression] = STATE(148), - [sym_unary_expression] = STATE(125), - [sym_binary_expression] = STATE(125), - [sym_if] = STATE(125), + [sym_base_ten] = STATE(227), + [sym_octal] = STATE(227), + [sym_hex] = STATE(227), + [sym_binary] = STATE(227), + [sym_integer] = STATE(234), + [sym_signed_integer] = STATE(143), + [sym_unsigned_integer] = STATE(143), + [sym_number] = STATE(101), + [sym__float] = STATE(100), + [sym_scalar] = STATE(143), + [sym_boolean] = STATE(143), + [sym_function_call] = STATE(143), + [sym_method_call] = STATE(143), + [sym_expression] = STATE(156), + [sym_unary_expression] = STATE(143), + [sym_binary_expression] = STATE(143), + [sym_if] = STATE(143), + [sym_let_in] = STATE(143), [sym_path] = STATE(108), - [sym_parenthesis] = STATE(125), - [sym_list] = STATE(125), - [sym_struct_member] = STATE(214), - [sym__struct_final_element] = STATE(227), + [sym_parenthesis] = STATE(143), + [sym_list] = STATE(143), + [sym_struct_member] = STATE(225), + [sym__struct_final_element] = STATE(239), [sym_struct_definition] = STATE(108), - [sym_dictionary_member_assignment] = STATE(205), - [sym_dictionary_construction] = STATE(125), - [sym_closure_definition] = STATE(125), - [sym_formula] = STATE(125), - [aux_sym_struct_definition_repeat1] = STATE(188), - [sym_identifier] = ACTIONS(67), + [sym_dictionary_member_assignment] = STATE(212), + [sym_dictionary_construction] = STATE(143), + [sym_closure_definition] = STATE(143), + [sym_formula] = STATE(143), + [aux_sym_struct_definition_repeat1] = STATE(196), + [sym_identifier] = ACTIONS(69), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), @@ -2157,42 +2263,44 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_PLUS] = ACTIONS(21), [anon_sym_BANG] = ACTIONS(21), [anon_sym_if] = ACTIONS(23), - [anon_sym_LPAREN] = ACTIONS(25), - [anon_sym_RPAREN] = ACTIONS(69), - [anon_sym_LBRACK] = ACTIONS(27), - [sym_varadic_dots] = ACTIONS(71), - [anon_sym_LT_LT_LT] = ACTIONS(29), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(27), + [anon_sym_RPAREN] = ACTIONS(71), + [anon_sym_LBRACK] = ACTIONS(29), + [sym_varadic_dots] = ACTIONS(73), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(5)] = { - [sym_base_ten] = STATE(211), - [sym_octal] = STATE(211), - [sym_hex] = STATE(211), - [sym_binary] = STATE(211), - [sym_integer] = STATE(210), - [sym_signed_integer] = STATE(125), - [sym_unsigned_integer] = STATE(125), - [sym_number] = STATE(93), - [sym__float] = STATE(94), - [sym_scalar] = STATE(125), - [sym_boolean] = STATE(125), - [sym_function_call] = STATE(125), - [sym_method_call] = STATE(125), - [sym_expression] = STATE(144), - [sym_unary_expression] = STATE(125), - [sym_binary_expression] = STATE(125), - [sym_if] = STATE(125), + [sym_base_ten] = STATE(227), + [sym_octal] = STATE(227), + [sym_hex] = STATE(227), + [sym_binary] = STATE(227), + [sym_integer] = STATE(234), + [sym_signed_integer] = STATE(143), + [sym_unsigned_integer] = STATE(143), + [sym_number] = STATE(101), + [sym__float] = STATE(100), + [sym_scalar] = STATE(143), + [sym_boolean] = STATE(143), + [sym_function_call] = STATE(143), + [sym_method_call] = STATE(143), + [sym_expression] = STATE(154), + [sym_unary_expression] = STATE(143), + [sym_binary_expression] = STATE(143), + [sym_if] = STATE(143), + [sym_let_in] = STATE(143), [sym_path] = STATE(108), - [sym_parenthesis] = STATE(125), - [sym_list] = STATE(125), - [sym_struct_member] = STATE(214), - [sym__struct_final_element] = STATE(233), + [sym_parenthesis] = STATE(143), + [sym_list] = STATE(143), + [sym_struct_member] = STATE(225), + [sym__struct_final_element] = STATE(247), [sym_struct_definition] = STATE(108), - [sym_dictionary_member_assignment] = STATE(205), - [sym_dictionary_construction] = STATE(125), - [sym_closure_definition] = STATE(125), - [sym_formula] = STATE(125), - [aux_sym_struct_definition_repeat1] = STATE(184), - [sym_identifier] = ACTIONS(67), + [sym_dictionary_member_assignment] = STATE(210), + [sym_dictionary_construction] = STATE(143), + [sym_closure_definition] = STATE(143), + [sym_formula] = STATE(143), + [aux_sym_struct_definition_repeat1] = STATE(198), + [sym_identifier] = ACTIONS(69), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), @@ -2207,42 +2315,44 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_PLUS] = ACTIONS(21), [anon_sym_BANG] = ACTIONS(21), [anon_sym_if] = ACTIONS(23), - [anon_sym_LPAREN] = ACTIONS(25), - [anon_sym_RPAREN] = ACTIONS(69), - [anon_sym_LBRACK] = ACTIONS(27), - [sym_varadic_dots] = ACTIONS(71), - [anon_sym_LT_LT_LT] = ACTIONS(29), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(27), + [anon_sym_RPAREN] = ACTIONS(75), + [anon_sym_LBRACK] = ACTIONS(29), + [sym_varadic_dots] = ACTIONS(73), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(6)] = { - [sym_base_ten] = STATE(211), - [sym_octal] = STATE(211), - [sym_hex] = STATE(211), - [sym_binary] = STATE(211), - [sym_integer] = STATE(210), - [sym_signed_integer] = STATE(125), - [sym_unsigned_integer] = STATE(125), - [sym_number] = STATE(93), - [sym__float] = STATE(94), - [sym_scalar] = STATE(125), - [sym_boolean] = STATE(125), - [sym_function_call] = STATE(125), - [sym_method_call] = STATE(125), - [sym_expression] = STATE(144), - [sym_unary_expression] = STATE(125), - [sym_binary_expression] = STATE(125), - [sym_if] = STATE(125), + [sym_base_ten] = STATE(227), + [sym_octal] = STATE(227), + [sym_hex] = STATE(227), + [sym_binary] = STATE(227), + [sym_integer] = STATE(234), + [sym_signed_integer] = STATE(143), + [sym_unsigned_integer] = STATE(143), + [sym_number] = STATE(101), + [sym__float] = STATE(100), + [sym_scalar] = STATE(143), + [sym_boolean] = STATE(143), + [sym_function_call] = STATE(143), + [sym_method_call] = STATE(143), + [sym_expression] = STATE(154), + [sym_unary_expression] = STATE(143), + [sym_binary_expression] = STATE(143), + [sym_if] = STATE(143), + [sym_let_in] = STATE(143), [sym_path] = STATE(108), - [sym_parenthesis] = STATE(125), - [sym_list] = STATE(125), - [sym_struct_member] = STATE(214), - [sym__struct_final_element] = STATE(233), + [sym_parenthesis] = STATE(143), + [sym_list] = STATE(143), + [sym_struct_member] = STATE(225), + [sym__struct_final_element] = STATE(247), [sym_struct_definition] = STATE(108), - [sym_dictionary_member_assignment] = STATE(199), - [sym_dictionary_construction] = STATE(125), - [sym_closure_definition] = STATE(125), - [sym_formula] = STATE(125), - [aux_sym_struct_definition_repeat1] = STATE(184), - [sym_identifier] = ACTIONS(67), + [sym_dictionary_member_assignment] = STATE(212), + [sym_dictionary_construction] = STATE(143), + [sym_closure_definition] = STATE(143), + [sym_formula] = STATE(143), + [aux_sym_struct_definition_repeat1] = STATE(198), + [sym_identifier] = ACTIONS(69), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), @@ -2257,69 +2367,72 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_PLUS] = ACTIONS(21), [anon_sym_BANG] = ACTIONS(21), [anon_sym_if] = ACTIONS(23), - [anon_sym_LPAREN] = ACTIONS(25), - [anon_sym_RPAREN] = ACTIONS(73), - [anon_sym_LBRACK] = ACTIONS(27), - [sym_varadic_dots] = ACTIONS(71), - [anon_sym_LT_LT_LT] = ACTIONS(29), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(27), + [anon_sym_RPAREN] = ACTIONS(71), + [anon_sym_LBRACK] = ACTIONS(29), + [sym_varadic_dots] = ACTIONS(73), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, }; static const uint16_t ts_small_parse_table[] = { - [0] = 23, - ACTIONS(75), 1, + [0] = 24, + ACTIONS(77), 1, sym_identifier, - ACTIONS(78), 1, + ACTIONS(80), 1, sym_string, - ACTIONS(81), 1, + ACTIONS(83), 1, sym_default, - ACTIONS(84), 1, + ACTIONS(86), 1, aux_sym_base_ten_token1, - ACTIONS(87), 1, + ACTIONS(89), 1, aux_sym_octal_token1, - ACTIONS(90), 1, + ACTIONS(92), 1, aux_sym_hex_token1, - ACTIONS(93), 1, + ACTIONS(95), 1, aux_sym_binary_token1, - ACTIONS(102), 1, + ACTIONS(104), 1, anon_sym_if, - ACTIONS(105), 1, + ACTIONS(107), 1, + anon_sym_let, + ACTIONS(110), 1, anon_sym_LPAREN, - ACTIONS(108), 1, + ACTIONS(113), 1, anon_sym_LBRACK, - ACTIONS(111), 1, + ACTIONS(116), 1, anon_sym_RBRACK, - ACTIONS(113), 1, + ACTIONS(118), 1, anon_sym_LT_LT_LT, STATE(7), 1, aux_sym_list_repeat1, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(147), 1, + STATE(101), 1, + sym_number, + STATE(155), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(96), 2, + ACTIONS(98), 2, sym_true, sym_false, STATE(108), 2, sym_path, sym_struct_definition, - ACTIONS(99), 3, + ACTIONS(101), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2329,12 +2442,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [91] = 23, + [95] = 24, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2352,22 +2466,24 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(116), 1, + ACTIONS(121), 1, anon_sym_RBRACK, - STATE(7), 1, + STATE(9), 1, aux_sym_list_repeat1, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(139), 1, + STATE(101), 1, + sym_number, + STATE(147), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2382,12 +2498,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2397,12 +2513,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [182] = 23, + [190] = 24, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2420,22 +2537,24 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(118), 1, + ACTIONS(123), 1, anon_sym_RBRACK, - STATE(10), 1, + STATE(7), 1, aux_sym_list_repeat1, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(138), 1, + STATE(101), 1, + sym_number, + STATE(149), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2450,12 +2569,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2465,12 +2584,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [273] = 23, + [285] = 24, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2488,22 +2608,24 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(120), 1, + ACTIONS(125), 1, anon_sym_RBRACK, - STATE(7), 1, + STATE(11), 1, aux_sym_list_repeat1, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(143), 1, + STATE(101), 1, + sym_number, + STATE(152), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2518,12 +2640,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2533,12 +2655,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [364] = 23, + [380] = 24, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2556,22 +2679,24 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(122), 1, + ACTIONS(127), 1, anon_sym_RBRACK, - STATE(8), 1, + STATE(7), 1, aux_sym_list_repeat1, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(140), 1, + STATE(101), 1, + sym_number, + STATE(150), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2586,12 +2711,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2601,109 +2726,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [455] = 4, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(128), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(124), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - anon_sym_DOT, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - ACTIONS(126), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - sym_unit_quote, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [507] = 21, + [475] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(132), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(134), 1, + ACTIONS(133), 1, sym_default, - ACTIONS(136), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(2), 1, - sym_expression, - STATE(50), 1, - sym__float, - STATE(52), 1, + STATE(55), 1, sym_number, - STATE(209), 1, + STATE(56), 1, + sym__float, + STATE(78), 1, + sym_expression, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(56), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2713,12 +2793,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [592] = 21, + [564] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2736,18 +2817,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(104), 1, + STATE(101), 1, + sym_number, + STATE(114), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2762,12 +2845,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2777,12 +2860,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [677] = 21, + [653] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2800,18 +2884,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(105), 1, + STATE(101), 1, + sym_number, + STATE(117), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2826,12 +2912,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2841,12 +2927,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [762] = 21, + [742] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2864,18 +2951,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(107), 1, + STATE(101), 1, + sym_number, + STATE(118), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2890,12 +2979,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2905,61 +2994,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [847] = 21, + [831] = 22, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, - sym_identifier, - ACTIONS(132), 1, - sym_string, - ACTIONS(134), 1, - sym_default, - ACTIONS(136), 1, - aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(25), 1, + anon_sym_let, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(50), 1, + STATE(100), 1, sym__float, - STATE(52), 1, + STATE(101), 1, sym_number, - STATE(55), 1, + STATE(126), 1, sym_expression, - STATE(209), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(19), 2, sym_true, sym_false, - STATE(56), 2, + STATE(108), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2969,61 +3061,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [932] = 21, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [920] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(129), 1, + sym_identifier, + ACTIONS(131), 1, + sym_string, + ACTIONS(133), 1, + sym_default, + ACTIONS(135), 1, + aux_sym_base_ten_token1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(27), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(29), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(93), 1, + STATE(55), 1, sym_number, - STATE(94), 1, + STATE(56), 1, sym__float, - STATE(137), 1, + STATE(79), 1, sym_expression, - STATE(210), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(108), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3033,12 +3128,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1017] = 21, + [1009] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3056,18 +3152,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(141), 1, + STATE(101), 1, + sym_number, + STATE(157), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3082,12 +3180,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3097,61 +3195,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1102] = 21, + [1098] = 22, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, - sym_identifier, - ACTIONS(132), 1, - sym_string, - ACTIONS(134), 1, - sym_default, - ACTIONS(136), 1, - aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(25), 1, + anon_sym_let, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(3), 1, - sym_expression, - STATE(50), 1, + STATE(100), 1, sym__float, - STATE(52), 1, + STATE(101), 1, sym_number, - STATE(209), 1, + STATE(130), 1, + sym_expression, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(19), 2, sym_true, sym_false, - STATE(56), 2, + STATE(108), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3161,12 +3262,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1187] = 21, + [1187] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3184,18 +3286,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(113), 1, + STATE(101), 1, + sym_number, + STATE(146), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3210,12 +3314,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3225,12 +3329,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1272] = 21, + [1276] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3248,18 +3353,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(110), 1, + STATE(101), 1, + sym_number, + STATE(151), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3274,12 +3381,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3289,12 +3396,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1357] = 21, + [1365] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3312,18 +3420,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(142), 1, + STATE(101), 1, + sym_number, + STATE(123), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3338,12 +3448,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3353,60 +3463,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1442] = 5, - ACTIONS(154), 1, - anon_sym_DOT, - STATE(27), 1, - aux_sym_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(150), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_DASH, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - ACTIONS(152), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_DASH_GT, - anon_sym_LT_LT_LT, - [1495] = 21, + [1454] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3424,18 +3487,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(117), 1, + STATE(101), 1, + sym_number, + STATE(122), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3450,12 +3515,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3465,61 +3530,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1580] = 21, + [1543] = 22, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, - sym_identifier, - ACTIONS(132), 1, - sym_string, - ACTIONS(134), 1, - sym_default, - ACTIONS(136), 1, - aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(25), 1, + anon_sym_let, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(50), 1, + STATE(100), 1, sym__float, - STATE(52), 1, + STATE(101), 1, sym_number, - STATE(57), 1, + STATE(120), 1, sym_expression, - STATE(209), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(19), 2, sym_true, sym_false, - STATE(56), 2, + STATE(108), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3529,109 +3597,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1665] = 5, - ACTIONS(154), 1, - anon_sym_DOT, - STATE(39), 1, - aux_sym_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(156), 17, + [1632] = 22, + ACTIONS(5), 1, sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, sym_default, + ACTIONS(11), 1, aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_DASH, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - ACTIONS(158), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_DASH_GT, - anon_sym_LT_LT_LT, - [1718] = 21, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, - sym_identifier, - ACTIONS(132), 1, - sym_string, - ACTIONS(134), 1, - sym_default, - ACTIONS(136), 1, - aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(25), 1, + anon_sym_let, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(50), 1, + STATE(100), 1, sym__float, - STATE(52), 1, + STATE(101), 1, sym_number, - STATE(63), 1, + STATE(148), 1, sym_expression, - STATE(209), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(19), 2, sym_true, sym_false, - STATE(56), 2, + STATE(108), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3641,61 +3664,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1803] = 21, + [1721] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(132), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(134), 1, + ACTIONS(133), 1, sym_default, - ACTIONS(136), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(50), 1, - sym__float, - STATE(52), 1, - sym_number, - STATE(64), 1, + STATE(3), 1, sym_expression, - STATE(209), 1, + STATE(55), 1, + sym_number, + STATE(56), 1, + sym__float, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(56), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3705,125 +3731,113 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1888] = 21, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(130), 1, - sym_identifier, - ACTIONS(132), 1, - sym_string, - ACTIONS(134), 1, - sym_default, - ACTIONS(136), 1, - aux_sym_base_ten_token1, - ACTIONS(142), 1, - anon_sym_if, - ACTIONS(144), 1, - anon_sym_LPAREN, - ACTIONS(146), 1, - anon_sym_LBRACK, - ACTIONS(148), 1, - anon_sym_LT_LT_LT, - STATE(50), 1, - sym__float, - STATE(52), 1, - sym_number, - STATE(65), 1, - sym_expression, - STATE(209), 1, - sym_integer, + [1810] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(155), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(151), 18, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + anon_sym_DOT, sym_true, sym_false, - STATE(56), 2, - sym_path, - sym_struct_definition, - ACTIONS(140), 3, - anon_sym_DASH, - anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(88), 14, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [1973] = 21, - ACTIONS(13), 1, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(153), 22, + sym_string, aux_sym_octal_token1, - ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, + sym_unit_quote, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [1863] = 22, + ACTIONS(5), 1, sym_identifier, - ACTIONS(132), 1, + ACTIONS(7), 1, sym_string, - ACTIONS(134), 1, + ACTIONS(9), 1, sym_default, - ACTIONS(136), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(25), 1, + anon_sym_let, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(50), 1, + STATE(100), 1, sym__float, - STATE(52), 1, + STATE(101), 1, sym_number, - STATE(66), 1, + STATE(119), 1, sym_expression, - STATE(209), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(19), 2, sym_true, sym_false, - STATE(56), 2, + STATE(108), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3833,61 +3847,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2058] = 21, + [1952] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(132), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(134), 1, + ACTIONS(133), 1, sym_default, - ACTIONS(136), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(50), 1, - sym__float, - STATE(52), 1, + STATE(55), 1, sym_number, - STATE(67), 1, + STATE(56), 1, + sym__float, + STATE(63), 1, sym_expression, - STATE(209), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(56), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3897,61 +3914,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2143] = 21, + [2041] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(132), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(134), 1, + ACTIONS(133), 1, sym_default, - ACTIONS(136), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(50), 1, - sym__float, - STATE(52), 1, + STATE(55), 1, sym_number, + STATE(56), 1, + sym__float, STATE(68), 1, sym_expression, - STATE(209), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(56), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3961,61 +3981,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2228] = 21, + [2130] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(132), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(134), 1, + ACTIONS(133), 1, sym_default, - ACTIONS(136), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(50), 1, - sym__float, - STATE(52), 1, + STATE(55), 1, sym_number, + STATE(56), 1, + sym__float, STATE(69), 1, sym_expression, - STATE(209), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(56), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4025,61 +4048,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2313] = 21, + [2219] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(132), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(134), 1, + ACTIONS(133), 1, sym_default, - ACTIONS(136), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(50), 1, - sym__float, - STATE(52), 1, + STATE(55), 1, sym_number, + STATE(56), 1, + sym__float, STATE(70), 1, sym_expression, - STATE(209), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(56), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4089,61 +4115,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2398] = 21, + [2308] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(132), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(134), 1, + ACTIONS(133), 1, sym_default, - ACTIONS(136), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(50), 1, - sym__float, - STATE(52), 1, + STATE(55), 1, sym_number, + STATE(56), 1, + sym__float, STATE(71), 1, sym_expression, - STATE(209), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(56), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4153,61 +4182,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2483] = 21, + [2397] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(132), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(134), 1, + ACTIONS(133), 1, sym_default, - ACTIONS(136), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(50), 1, - sym__float, - STATE(52), 1, + STATE(55), 1, sym_number, + STATE(56), 1, + sym__float, STATE(72), 1, sym_expression, - STATE(209), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(56), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4217,61 +4249,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2568] = 21, + [2486] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(132), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(134), 1, + ACTIONS(133), 1, sym_default, - ACTIONS(136), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(50), 1, - sym__float, - STATE(52), 1, + STATE(55), 1, sym_number, + STATE(56), 1, + sym__float, STATE(73), 1, sym_expression, - STATE(209), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(56), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4281,109 +4316,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2653] = 5, - ACTIONS(164), 1, - anon_sym_DOT, - STATE(39), 1, - aux_sym_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(160), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_DASH, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - ACTIONS(162), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_DASH_GT, - anon_sym_LT_LT_LT, - [2706] = 21, + [2575] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(132), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(134), 1, + ACTIONS(133), 1, sym_default, - ACTIONS(136), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(50), 1, - sym__float, - STATE(52), 1, + STATE(55), 1, sym_number, - STATE(53), 1, + STATE(56), 1, + sym__float, + STATE(74), 1, sym_expression, - STATE(209), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(56), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4393,61 +4383,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2791] = 21, + [2664] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(130), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(132), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(134), 1, + ACTIONS(133), 1, sym_default, - ACTIONS(136), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(142), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(144), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(146), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(148), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(50), 1, - sym__float, - STATE(52), 1, + STATE(55), 1, sym_number, - STATE(54), 1, + STATE(56), 1, + sym__float, + STATE(75), 1, sym_expression, - STATE(209), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(138), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(56), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(140), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(88), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4457,61 +4450,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2876] = 21, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [2753] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(129), 1, + sym_identifier, + ACTIONS(131), 1, + sym_string, + ACTIONS(133), 1, + sym_default, + ACTIONS(135), 1, + aux_sym_base_ten_token1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(27), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(29), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(93), 1, + STATE(55), 1, sym_number, - STATE(94), 1, + STATE(56), 1, sym__float, - STATE(118), 1, + STATE(76), 1, sym_expression, - STATE(210), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(108), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4521,61 +4517,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2961] = 21, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [2842] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(129), 1, + sym_identifier, + ACTIONS(131), 1, + sym_string, + ACTIONS(133), 1, + sym_default, + ACTIONS(135), 1, + aux_sym_base_ten_token1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(27), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(29), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(93), 1, + STATE(55), 1, sym_number, - STATE(94), 1, + STATE(56), 1, sym__float, - STATE(119), 1, + STATE(58), 1, sym_expression, - STATE(210), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(108), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4585,61 +4584,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3046] = 21, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [2931] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(129), 1, + sym_identifier, + ACTIONS(131), 1, + sym_string, + ACTIONS(133), 1, + sym_default, + ACTIONS(135), 1, + aux_sym_base_ten_token1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(27), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(29), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(93), 1, + STATE(55), 1, sym_number, - STATE(94), 1, + STATE(56), 1, sym__float, - STATE(120), 1, + STATE(77), 1, sym_expression, - STATE(210), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(108), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4649,12 +4651,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3131] = 21, + [3020] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4672,18 +4675,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, + STATE(101), 1, + sym_number, STATE(121), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4698,12 +4703,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4713,61 +4718,64 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3216] = 21, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [3109] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(129), 1, + sym_identifier, + ACTIONS(131), 1, + sym_string, + ACTIONS(133), 1, + sym_default, + ACTIONS(135), 1, + aux_sym_base_ten_token1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(27), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(29), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(93), 1, + STATE(2), 1, + sym_expression, + STATE(55), 1, sym_number, - STATE(94), 1, + STATE(56), 1, sym__float, - STATE(122), 1, - sym_expression, - STATE(210), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(108), 2, + STATE(60), 2, sym_path, sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(83), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4777,12 +4785,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3301] = 21, + [3198] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4800,18 +4809,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(102), 1, + STATE(101), 1, + sym_number, + STATE(109), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4826,12 +4837,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4841,12 +4852,147 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3386] = 21, + [3287] = 22, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(129), 1, + sym_identifier, + ACTIONS(131), 1, + sym_string, + ACTIONS(133), 1, + sym_default, + ACTIONS(135), 1, + aux_sym_base_ten_token1, + ACTIONS(141), 1, + anon_sym_if, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, + anon_sym_LPAREN, + ACTIONS(147), 1, + anon_sym_LBRACK, + ACTIONS(149), 1, + anon_sym_LT_LT_LT, + STATE(55), 1, + sym_number, + STATE(56), 1, + sym__float, + STATE(81), 1, + sym_expression, + STATE(229), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(137), 2, + sym_true, + sym_false, + STATE(60), 2, + sym_path, + sym_struct_definition, + ACTIONS(139), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(227), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(83), 15, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [3376] = 22, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(129), 1, + sym_identifier, + ACTIONS(131), 1, + sym_string, + ACTIONS(133), 1, + sym_default, + ACTIONS(135), 1, + aux_sym_base_ten_token1, + ACTIONS(141), 1, + anon_sym_if, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, + anon_sym_LPAREN, + ACTIONS(147), 1, + anon_sym_LBRACK, + ACTIONS(149), 1, + anon_sym_LT_LT_LT, + STATE(55), 1, + sym_number, + STATE(56), 1, + sym__float, + STATE(59), 1, + sym_expression, + STATE(229), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(137), 2, + sym_true, + sym_false, + STATE(60), 2, + sym_path, + sym_struct_definition, + ACTIONS(139), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(227), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(83), 15, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [3465] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4864,18 +5010,20 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(27), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(109), 1, + STATE(101), 1, + sym_number, + STATE(110), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4890,12 +5038,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4905,12 +5053,13 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3471] = 21, + [3554] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4928,18 +5077,221 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(23), 1, anon_sym_if, ACTIONS(25), 1, + anon_sym_let, + ACTIONS(27), 1, anon_sym_LPAREN, + ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, + anon_sym_LT_LT_LT, + STATE(100), 1, + sym__float, + STATE(101), 1, + sym_number, + STATE(113), 1, + sym_expression, + STATE(234), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + STATE(108), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(227), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(143), 15, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [3643] = 22, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_let, ACTIONS(27), 1, + anon_sym_LPAREN, + ACTIONS(29), 1, anon_sym_LBRACK, + ACTIONS(31), 1, + anon_sym_LT_LT_LT, + STATE(100), 1, + sym__float, + STATE(101), 1, + sym_number, + STATE(112), 1, + sym_expression, + STATE(234), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + STATE(108), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(227), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(143), 15, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [3732] = 22, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_let, + ACTIONS(27), 1, + anon_sym_LPAREN, ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(93), 1, + STATE(100), 1, + sym__float, + STATE(101), 1, sym_number, - STATE(94), 1, + STATE(115), 1, + sym_expression, + STATE(234), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + STATE(108), 2, + sym_path, + sym_struct_definition, + ACTIONS(21), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(227), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(143), 15, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [3821] = 22, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_let, + ACTIONS(27), 1, + anon_sym_LPAREN, + ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, + anon_sym_LT_LT_LT, + STATE(100), 1, sym__float, - STATE(103), 1, + STATE(101), 1, + sym_number, + STATE(116), 1, sym_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4954,12 +5306,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(125), 14, + STATE(143), 15, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4969,25 +5321,192 @@ static const uint16_t ts_small_parse_table[] = { sym_unary_expression, sym_binary_expression, sym_if, + sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3556] = 5, - ACTIONS(171), 1, - sym_unit_quote, - STATE(80), 1, - sym__unit, + [3910] = 22, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(129), 1, + sym_identifier, + ACTIONS(131), 1, + sym_string, + ACTIONS(133), 1, + sym_default, + ACTIONS(135), 1, + aux_sym_base_ten_token1, + ACTIONS(141), 1, + anon_sym_if, + ACTIONS(143), 1, + anon_sym_let, + ACTIONS(145), 1, + anon_sym_LPAREN, + ACTIONS(147), 1, + anon_sym_LBRACK, + ACTIONS(149), 1, + anon_sym_LT_LT_LT, + STATE(55), 1, + sym_number, + STATE(56), 1, + sym__float, + STATE(61), 1, + sym_expression, + STATE(229), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(137), 2, + sym_true, + sym_false, + STATE(60), 2, + sym_path, + sym_struct_definition, + ACTIONS(139), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(227), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(83), 15, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [3999] = 5, + ACTIONS(161), 1, + anon_sym_DOT, + STATE(52), 1, + aux_sym_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 18, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_DASH, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(159), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_DASH_GT, + anon_sym_LT_LT_LT, + [4053] = 5, + ACTIONS(168), 1, + anon_sym_DOT, + STATE(54), 1, + aux_sym_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(164), 18, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_DASH, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(166), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_DASH_GT, + anon_sym_LT_LT_LT, + [4107] = 5, + ACTIONS(168), 1, + anon_sym_DOT, + STATE(52), 1, + aux_sym_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 16, + ACTIONS(170), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, + anon_sym_DASH, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -4999,13 +5518,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(169), 21, + anon_sym_let, + ACTIONS(172), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -5020,19 +5539,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_LBRACK, + anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [3608] = 3, + [4161] = 4, + ACTIONS(178), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(160), 18, + ACTIONS(174), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, - anon_sym_DOT, sym_true, sym_false, - anon_sym_DASH, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -5044,12 +5564,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(162), 21, + anon_sym_let, + ACTIONS(176), 22, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + sym_unit_quote, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -5064,15 +5587,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_LBRACK, - anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [3656] = 4, - ACTIONS(177), 1, - anon_sym_DOT, + [4212] = 5, + ACTIONS(184), 1, + sym_unit_quote, + STATE(96), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(173), 16, + ACTIONS(180), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5089,12 +5613,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(175), 22, + anon_sym_let, + ACTIONS(182), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -5112,18 +5636,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [3706] = 4, - STATE(79), 1, - sym_dictionary_construction, + [4265] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(179), 16, + ACTIONS(157), 19, sym_identifier, sym_default, aux_sym_base_ten_token1, + anon_sym_DOT, sym_true, sym_false, + anon_sym_DASH, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -5135,13 +5659,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(181), 21, + anon_sym_let, + ACTIONS(159), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -5156,127 +5680,138 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_LBRACK, + anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [3755] = 21, - ACTIONS(31), 1, + [4314] = 18, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(37), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(41), 1, - anon_sym_SLASH_SLASH, ACTIONS(43), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(47), 1, - anon_sym_AMP, + anon_sym_GT_GT, ACTIONS(49), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(51), 1, + anon_sym_PIPE, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(57), 1, - anon_sym_AMP_AMP, ACTIONS(59), 1, - anon_sym_PIPE_PIPE, - ACTIONS(61), 1, - anon_sym_DOT_DOT, - ACTIONS(63), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(189), 1, + anon_sym_AMP_AMP, + ACTIONS(192), 1, anon_sym_LPAREN, - STATE(79), 1, + STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(39), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(53), 2, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(187), 2, + ACTIONS(190), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(55), 4, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(185), 6, + ACTIONS(188), 8, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(183), 8, + ACTIONS(186), 10, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, + anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - [3838] = 10, - ACTIONS(31), 1, + anon_sym_let, + [4392] = 21, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(37), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(41), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(189), 1, + ACTIONS(45), 1, + anon_sym_LT_LT, + ACTIONS(47), 1, + anon_sym_GT_GT, + ACTIONS(49), 1, + anon_sym_AMP, + ACTIONS(51), 1, + anon_sym_PIPE, + ACTIONS(53), 1, + anon_sym_CARET, + ACTIONS(59), 1, + anon_sym_AMP_AMP, + ACTIONS(61), 1, + anon_sym_PIPE_PIPE, + ACTIONS(63), 1, + anon_sym_DOT_DOT, + ACTIONS(65), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(192), 1, anon_sym_LPAREN, - ACTIONS(195), 1, - anon_sym_else, - STATE(79), 1, + STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(39), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(191), 13, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - ACTIONS(193), 17, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + ACTIONS(190), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(196), 6, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [3899] = 4, - ACTIONS(201), 1, + ACTIONS(194), 9, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_else, + anon_sym_let, + [4476] = 4, + ACTIONS(202), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(197), 17, + ACTIONS(198), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5294,7 +5829,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(199), 20, + anon_sym_let, + ACTIONS(200), 20, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5315,60 +5851,60 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [3948] = 21, - ACTIONS(31), 1, + [4526] = 21, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(37), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(41), 1, - anon_sym_SLASH_SLASH, ACTIONS(43), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(47), 1, - anon_sym_AMP, + anon_sym_GT_GT, ACTIONS(49), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(51), 1, + anon_sym_PIPE, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(57), 1, - anon_sym_AMP_AMP, ACTIONS(59), 1, - anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, ACTIONS(61), 1, - anon_sym_DOT_DOT, + anon_sym_PIPE_PIPE, ACTIONS(63), 1, + anon_sym_DOT_DOT, + ACTIONS(65), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(189), 1, + ACTIONS(192), 1, anon_sym_LPAREN, - STATE(79), 1, + STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(39), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(53), 2, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(187), 2, + ACTIONS(190), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(55), 4, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(203), 6, + ACTIONS(206), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(195), 8, + ACTIONS(204), 9, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5377,13 +5913,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG, anon_sym_if, anon_sym_else, - [4031] = 4, - ACTIONS(209), 1, + anon_sym_let, + [4610] = 4, + ACTIONS(212), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(205), 17, + ACTIONS(208), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5401,7 +5938,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(207), 20, + anon_sym_let, + ACTIONS(210), 20, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5422,11 +5960,74 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4080] = 3, + [4660] = 21, + ACTIONS(33), 1, + anon_sym_COLON, + ACTIONS(39), 1, + anon_sym_STAR_STAR, + ACTIONS(43), 1, + anon_sym_SLASH_SLASH, + ACTIONS(45), 1, + anon_sym_LT_LT, + ACTIONS(47), 1, + anon_sym_GT_GT, + ACTIONS(49), 1, + anon_sym_AMP, + ACTIONS(51), 1, + anon_sym_PIPE, + ACTIONS(53), 1, + anon_sym_CARET, + ACTIONS(59), 1, + anon_sym_AMP_AMP, + ACTIONS(61), 1, + anon_sym_PIPE_PIPE, + ACTIONS(63), 1, + anon_sym_DOT_DOT, + ACTIONS(65), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(192), 1, + anon_sym_LPAREN, + STATE(86), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(41), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(55), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(190), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(57), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(216), 6, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + ACTIONS(214), 9, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_else, + anon_sym_let, + [4744] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(211), 17, + ACTIONS(218), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5444,7 +6045,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(213), 21, + anon_sym_let, + ACTIONS(220), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5466,11 +6068,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [4127] = 3, + [4792] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(215), 17, + ACTIONS(222), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5488,7 +6090,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(217), 21, + anon_sym_let, + ACTIONS(224), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5510,11 +6113,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [4174] = 3, + [4840] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(124), 16, + ACTIONS(151), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5531,7 +6134,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(126), 22, + anon_sym_let, + ACTIONS(153), 22, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5554,11 +6158,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4221] = 3, + [4888] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 16, + ACTIONS(226), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5575,7 +6179,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(221), 22, + anon_sym_let, + ACTIONS(228), 22, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5598,24 +6203,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4268] = 9, - ACTIONS(31), 1, + [4936] = 9, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(37), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(41), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(189), 1, + ACTIONS(192), 1, anon_sym_LPAREN, - STATE(79), 1, + STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(39), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(191), 14, + ACTIONS(186), 15, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5630,7 +6235,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(193), 17, + anon_sym_let, + ACTIONS(188), 17, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5648,17 +6254,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4327] = 6, - ACTIONS(31), 1, + [4996] = 6, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(189), 1, + ACTIONS(192), 1, anon_sym_LPAREN, - STATE(79), 1, + STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 16, + ACTIONS(186), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5675,7 +6281,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(193), 19, + anon_sym_let, + ACTIONS(188), 19, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5695,19 +6302,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4380] = 7, - ACTIONS(31), 1, + [5050] = 7, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(37), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(189), 1, + ACTIONS(192), 1, anon_sym_LPAREN, - STATE(79), 1, + STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 16, + ACTIONS(186), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5724,7 +6331,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(193), 18, + anon_sym_let, + ACTIONS(188), 18, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5743,27 +6351,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4435] = 10, - ACTIONS(31), 1, + [5106] = 10, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(37), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(41), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(189), 1, + ACTIONS(192), 1, anon_sym_LPAREN, - STATE(79), 1, + STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(39), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(187), 2, + ACTIONS(190), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(191), 14, + ACTIONS(186), 15, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5778,7 +6386,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(193), 15, + anon_sym_let, + ACTIONS(188), 15, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5794,31 +6403,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4496] = 12, - ACTIONS(31), 1, + [5168] = 12, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(37), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(41), 1, - anon_sym_SLASH_SLASH, ACTIONS(43), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(45), 1, + anon_sym_LT_LT, + ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(189), 1, + ACTIONS(192), 1, anon_sym_LPAREN, - STATE(79), 1, + STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(39), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(187), 2, + ACTIONS(190), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(191), 13, + ACTIONS(186), 14, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5832,7 +6441,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(193), 14, + anon_sym_let, + ACTIONS(188), 14, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5847,35 +6457,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4561] = 14, - ACTIONS(31), 1, + [5234] = 14, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(37), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(41), 1, - anon_sym_SLASH_SLASH, ACTIONS(43), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(47), 1, + anon_sym_GT_GT, + ACTIONS(49), 1, anon_sym_AMP, - ACTIONS(51), 1, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(189), 1, + ACTIONS(192), 1, anon_sym_LPAREN, - STATE(79), 1, + STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(39), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(187), 2, + ACTIONS(190), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(191), 12, + ACTIONS(186), 13, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5888,7 +6498,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(193), 13, + anon_sym_let, + ACTIONS(188), 13, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5902,33 +6513,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4630] = 13, - ACTIONS(31), 1, + [5304] = 13, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(37), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(41), 1, - anon_sym_SLASH_SLASH, ACTIONS(43), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(47), 1, + anon_sym_GT_GT, + ACTIONS(49), 1, anon_sym_AMP, - ACTIONS(189), 1, + ACTIONS(192), 1, anon_sym_LPAREN, - STATE(79), 1, + STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(39), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(187), 2, + ACTIONS(190), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(191), 12, + ACTIONS(186), 13, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5941,7 +6552,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(193), 14, + anon_sym_let, + ACTIONS(188), 14, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5956,37 +6568,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4697] = 15, - ACTIONS(31), 1, + [5372] = 15, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(37), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(41), 1, - anon_sym_SLASH_SLASH, ACTIONS(43), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(47), 1, - anon_sym_AMP, + anon_sym_GT_GT, ACTIONS(49), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(51), 1, + anon_sym_PIPE, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(189), 1, + ACTIONS(192), 1, anon_sym_LPAREN, - STATE(79), 1, + STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(39), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(187), 2, + ACTIONS(190), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(191), 11, + ACTIONS(186), 12, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5998,7 +6610,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(193), 13, + anon_sym_let, + ACTIONS(188), 13, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6012,45 +6625,116 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4768] = 17, - ACTIONS(31), 1, + [5444] = 17, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(37), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(41), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, + ACTIONS(45), 1, + anon_sym_LT_LT, + ACTIONS(47), 1, + anon_sym_GT_GT, + ACTIONS(49), 1, + anon_sym_AMP, + ACTIONS(51), 1, + anon_sym_PIPE, + ACTIONS(53), 1, + anon_sym_CARET, + ACTIONS(192), 1, + anon_sym_LPAREN, + STATE(86), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(41), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(55), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(190), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(57), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(188), 9, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + ACTIONS(186), 10, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + [5520] = 19, + ACTIONS(33), 1, + anon_sym_COLON, + ACTIONS(39), 1, + anon_sym_STAR_STAR, ACTIONS(43), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(47), 1, - anon_sym_AMP, + anon_sym_GT_GT, ACTIONS(49), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(51), 1, + anon_sym_PIPE, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(189), 1, + ACTIONS(59), 1, + anon_sym_AMP_AMP, + ACTIONS(61), 1, + anon_sym_PIPE_PIPE, + ACTIONS(192), 1, anon_sym_LPAREN, - STATE(79), 1, + STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(39), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(53), 2, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(187), 2, + ACTIONS(190), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(55), 4, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(191), 9, + ACTIONS(188), 7, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + ACTIONS(186), 10, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6060,146 +6744,179 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(193), 9, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4843] = 18, - ACTIONS(31), 1, + anon_sym_let, + [5600] = 21, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(37), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(41), 1, - anon_sym_SLASH_SLASH, ACTIONS(43), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(47), 1, - anon_sym_AMP, + anon_sym_GT_GT, ACTIONS(49), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(51), 1, + anon_sym_PIPE, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(57), 1, + ACTIONS(59), 1, anon_sym_AMP_AMP, - ACTIONS(189), 1, + ACTIONS(61), 1, + anon_sym_PIPE_PIPE, + ACTIONS(63), 1, + anon_sym_DOT_DOT, + ACTIONS(65), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(192), 1, anon_sym_LPAREN, - STATE(79), 1, + STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(39), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(53), 2, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(187), 2, + ACTIONS(190), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(55), 4, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(193), 8, + ACTIONS(232), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(191), 9, + ACTIONS(230), 9, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, - anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - [4920] = 19, - ACTIONS(31), 1, + anon_sym_let, + [5684] = 10, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(37), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(41), 1, - anon_sym_SLASH_SLASH, ACTIONS(43), 1, - anon_sym_LT_LT, - ACTIONS(45), 1, - anon_sym_GT_GT, - ACTIONS(47), 1, - anon_sym_AMP, - ACTIONS(49), 1, - anon_sym_PIPE, - ACTIONS(51), 1, - anon_sym_CARET, - ACTIONS(57), 1, - anon_sym_AMP_AMP, - ACTIONS(59), 1, - anon_sym_PIPE_PIPE, - ACTIONS(189), 1, + anon_sym_SLASH_SLASH, + ACTIONS(192), 1, anon_sym_LPAREN, - STATE(79), 1, + ACTIONS(204), 1, + anon_sym_else, + STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(39), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(53), 2, + ACTIONS(186), 14, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(187), 2, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + ACTIONS(188), 17, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(55), 4, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(193), 7, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(191), 9, + [5746] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(234), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, + anon_sym_DASH, anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - [4999] = 3, + anon_sym_let, + ACTIONS(236), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_DASH_GT, + anon_sym_LT_LT_LT, + [5794] = 4, + STATE(86), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(223), 17, + ACTIONS(238), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, - anon_sym_DASH, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -6211,12 +6928,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(225), 21, + anon_sym_let, + ACTIONS(240), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -6231,13 +6950,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_LBRACK, - anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [5046] = 3, + [5844] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(227), 16, + ACTIONS(242), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6254,7 +6972,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(229), 21, + anon_sym_let, + ACTIONS(244), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6276,11 +6995,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5092] = 3, + [5891] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(231), 16, + ACTIONS(198), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6297,7 +7016,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(233), 21, + anon_sym_let, + ACTIONS(200), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6319,11 +7039,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5138] = 3, + [5938] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(235), 16, + ACTIONS(246), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6340,7 +7060,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(237), 21, + anon_sym_let, + ACTIONS(248), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6362,11 +7083,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5184] = 3, + [5985] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(239), 16, + ACTIONS(250), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6383,7 +7104,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(241), 21, + anon_sym_let, + ACTIONS(252), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6405,11 +7127,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5230] = 3, + [6032] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(243), 16, + ACTIONS(254), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6426,7 +7148,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(245), 21, + anon_sym_let, + ACTIONS(256), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6448,11 +7171,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5276] = 3, + [6079] = 4, + ACTIONS(198), 1, + anon_sym_else, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(247), 16, + ACTIONS(254), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6468,8 +7193,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - anon_sym_else, - ACTIONS(249), 21, + anon_sym_let, + ACTIONS(256), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6491,13 +7216,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5322] = 4, - ACTIONS(197), 1, - anon_sym_else, + [6128] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(243), 15, + ACTIONS(258), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6513,7 +7236,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - ACTIONS(245), 21, + anon_sym_else, + anon_sym_let, + ACTIONS(260), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6535,11 +7260,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5370] = 3, + [6175] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(251), 16, + ACTIONS(208), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6556,7 +7281,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(253), 21, + anon_sym_let, + ACTIONS(210), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6578,11 +7304,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5416] = 3, + [6222] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(255), 16, + ACTIONS(262), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6599,7 +7325,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(257), 21, + anon_sym_let, + ACTIONS(264), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6621,11 +7348,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5462] = 3, + [6269] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(259), 16, + ACTIONS(266), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6642,7 +7369,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(261), 21, + anon_sym_let, + ACTIONS(268), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6664,11 +7392,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5508] = 3, + [6316] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(263), 16, + ACTIONS(270), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6685,7 +7413,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(265), 21, + anon_sym_let, + ACTIONS(272), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6707,11 +7436,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5554] = 3, + [6363] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(205), 16, + ACTIONS(274), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6728,7 +7457,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(207), 21, + anon_sym_let, + ACTIONS(276), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6750,11 +7480,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5600] = 3, + [6410] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(267), 16, + ACTIONS(278), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6771,7 +7501,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(269), 21, + anon_sym_let, + ACTIONS(280), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6793,11 +7524,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5646] = 3, + [6457] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(197), 16, + ACTIONS(282), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6814,7 +7545,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(199), 21, + anon_sym_let, + ACTIONS(284), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6836,11 +7568,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5692] = 3, + [6504] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(271), 16, + ACTIONS(286), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6857,7 +7589,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(273), 21, + anon_sym_let, + ACTIONS(288), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6879,11 +7612,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5738] = 3, + [6551] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(275), 16, + ACTIONS(290), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6900,7 +7633,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(277), 21, + anon_sym_let, + ACTIONS(292), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6922,11 +7656,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5784] = 3, + [6598] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(279), 16, + ACTIONS(294), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6943,7 +7677,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, - ACTIONS(281), 21, + anon_sym_let, + ACTIONS(296), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6965,14 +7700,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5830] = 4, + [6645] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(128), 2, + ACTIONS(155), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(124), 12, + ACTIONS(151), 12, sym_identifier, anon_sym_DOT, anon_sym_STAR, @@ -6985,7 +7720,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(126), 21, + ACTIONS(153), 22, ts_builtin_sym_end, sym_unit_quote, anon_sym_COLON, @@ -7002,19 +7737,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [5876] = 4, - ACTIONS(283), 1, - anon_sym_DOT, + [6692] = 6, + ACTIONS(298), 1, + sym_identifier, + ACTIONS(300), 1, + sym_unit_quote, + STATE(131), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(173), 11, - sym_identifier, + ACTIONS(180), 10, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -7025,9 +7764,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(175), 21, + ACTIONS(182), 21, ts_builtin_sym_end, - sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -7042,22 +7780,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [5920] = 6, - ACTIONS(285), 1, - sym_identifier, - ACTIONS(287), 1, - sym_unit_quote, - STATE(115), 1, - sym__unit, + [6741] = 4, + ACTIONS(302), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 10, + ACTIONS(174), 11, + sym_identifier, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -7068,8 +7804,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(169), 20, + ACTIONS(176), 22, ts_builtin_sym_end, + sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -7084,20 +7821,62 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [5968] = 5, - ACTIONS(289), 1, + [6786] = 5, + ACTIONS(304), 1, + anon_sym_DOT, + STATE(106), 1, + aux_sym_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(164), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(166), 22, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [6832] = 5, + ACTIONS(306), 1, anon_sym_DOT, - STATE(97), 1, + STATE(103), 1, aux_sym_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 9, + ACTIONS(157), 9, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -7107,7 +7886,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(152), 21, + ACTIONS(159), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_PLUS, @@ -7124,36 +7903,116 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [6013] = 3, + [6878] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(226), 11, + sym_identifier, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_else, + anon_sym_EQ, + ACTIONS(228), 22, + ts_builtin_sym_end, + sym_unit_quote, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [6920] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 11, + ACTIONS(151), 11, sym_identifier, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_else, + anon_sym_EQ, + ACTIONS(153), 22, + ts_builtin_sym_end, + sym_unit_quote, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [6962] = 5, + ACTIONS(304), 1, + anon_sym_DOT, + STATE(103), 1, + aux_sym_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(170), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_else, anon_sym_EQ, - ACTIONS(221), 21, + ACTIONS(172), 22, ts_builtin_sym_end, - sym_unit_quote, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -7162,20 +8021,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [6054] = 5, - ACTIONS(289), 1, - anon_sym_DOT, - STATE(99), 1, - aux_sym_path_repeat1, + anon_sym_DASH_GT, + [7008] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(156), 9, + ACTIONS(157), 10, + anon_sym_DOT, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -7185,7 +8043,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(158), 21, + ACTIONS(159), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_PLUS, @@ -7202,36 +8060,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [6099] = 3, + [7049] = 4, + ACTIONS(309), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(124), 11, - sym_identifier, + ACTIONS(198), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_else, anon_sym_EQ, - ACTIONS(126), 21, + ACTIONS(200), 21, ts_builtin_sym_end, - sym_unit_quote, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -7240,35 +8098,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [6140] = 5, - ACTIONS(291), 1, - anon_sym_DOT, - STATE(99), 1, - aux_sym_path_repeat1, + [7091] = 9, + ACTIONS(311), 1, + anon_sym_COLON, + ACTIONS(313), 1, + anon_sym_STAR_STAR, + ACTIONS(317), 1, + anon_sym_SLASH_SLASH, + ACTIONS(319), 1, + anon_sym_LPAREN, + STATE(135), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(160), 9, - anon_sym_DASH, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(186), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(162), 21, + ACTIONS(188), 18, ts_builtin_sym_end, - anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -7280,18 +8143,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, - anon_sym_LPAREN, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_DASH_GT, - [6185] = 3, + [7143] = 6, + ACTIONS(311), 1, + anon_sym_COLON, + ACTIONS(319), 1, + anon_sym_LPAREN, + STATE(135), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(160), 10, - anon_sym_DOT, - anon_sym_DASH, + ACTIONS(186), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -7300,9 +8166,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(162), 21, + ACTIONS(188), 20, ts_builtin_sym_end, - anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -7317,16 +8183,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, - anon_sym_LPAREN, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_DASH_GT, - [6225] = 3, + [7189] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(223), 9, + ACTIONS(234), 9, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -7336,7 +8201,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(225), 21, + ACTIONS(236), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_PLUS, @@ -7353,44 +8218,43 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [6264] = 12, - ACTIONS(294), 1, + [7229] = 10, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - STATE(133), 1, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(191), 5, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(186), 6, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(193), 13, + ACTIONS(188), 16, ts_builtin_sym_end, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -7400,186 +8264,179 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [6321] = 20, - ACTIONS(195), 1, - anon_sym_EQ, - ACTIONS(294), 1, + [7283] = 7, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, - anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, - anon_sym_PIPE, - ACTIONS(312), 1, - anon_sym_CARET, - ACTIONS(318), 1, - anon_sym_AMP_AMP, - ACTIONS(320), 1, - anon_sym_PIPE_PIPE, - ACTIONS(322), 1, - anon_sym_DOT_DOT, - ACTIONS(324), 1, - anon_sym_DOT_DOT_EQ, - STATE(133), 1, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(186), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(314), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(188), 19, + ts_builtin_sym_end, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(203), 5, - ts_builtin_sym_end, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [6394] = 16, - ACTIONS(294), 1, + [7331] = 14, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - STATE(133), 1, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(186), 4, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(188), 13, + ts_builtin_sym_end, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(193), 8, - ts_builtin_sym_end, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [6459] = 17, - ACTIONS(294), 1, + [7393] = 11, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, - anon_sym_PIPE, - ACTIONS(312), 1, - anon_sym_CARET, - ACTIONS(318), 1, - anon_sym_AMP_AMP, - STATE(133), 1, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(186), 6, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(188), 14, + ts_builtin_sym_end, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(193), 7, - ts_builtin_sym_end, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [6526] = 4, - ACTIONS(209), 1, - anon_sym_DASH_GT, + [7449] = 13, + ACTIONS(311), 1, + anon_sym_COLON, + ACTIONS(313), 1, + anon_sym_STAR_STAR, + ACTIONS(317), 1, + anon_sym_SLASH_SLASH, + ACTIONS(319), 1, + anon_sym_LPAREN, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(329), 1, + anon_sym_CARET, + STATE(135), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(205), 9, - anon_sym_DASH, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(186), 5, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(207), 20, + ACTIONS(188), 13, ts_builtin_sym_end, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -7588,134 +8445,145 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, - anon_sym_LPAREN, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [6567] = 18, - ACTIONS(294), 1, + [7509] = 16, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, - anon_sym_AMP_AMP, - ACTIONS(320), 1, - anon_sym_PIPE_PIPE, - STATE(133), 1, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 2, + ACTIONS(186), 2, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(193), 6, + ACTIONS(188), 9, ts_builtin_sym_end, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [6636] = 4, - ACTIONS(326), 1, - anon_sym_DASH_GT, + [7575] = 17, + ACTIONS(311), 1, + anon_sym_COLON, + ACTIONS(313), 1, + anon_sym_STAR_STAR, + ACTIONS(317), 1, + anon_sym_SLASH_SLASH, + ACTIONS(319), 1, + anon_sym_LPAREN, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, + anon_sym_PIPE, + ACTIONS(329), 1, + anon_sym_CARET, + ACTIONS(335), 1, + anon_sym_AMP_AMP, + STATE(135), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(197), 9, - anon_sym_DASH, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, + ACTIONS(186), 2, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(199), 20, - ts_builtin_sym_end, - anon_sym_COLON, + ACTIONS(315), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(321), 2, + anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(331), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(188), 8, + ts_builtin_sym_end, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, - anon_sym_LPAREN, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [6677] = 14, - ACTIONS(294), 1, + [7643] = 12, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, - anon_sym_PIPE, - ACTIONS(312), 1, - anon_sym_CARET, - STATE(133), 1, + ACTIONS(325), 1, + anon_sym_AMP, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(191), 4, + ACTIONS(186), 5, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(193), 12, + ACTIONS(188), 14, ts_builtin_sym_end, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -7724,141 +8592,125 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [6738] = 20, - ACTIONS(183), 1, + [7701] = 20, + ACTIONS(194), 1, anon_sym_EQ, - ACTIONS(294), 1, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, + ACTIONS(335), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - STATE(133), 1, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(185), 5, + ACTIONS(196), 6, ts_builtin_sym_end, anon_sym_else, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [6811] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(215), 9, - anon_sym_DASH, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, + [7775] = 20, + ACTIONS(204), 1, anon_sym_EQ, - ACTIONS(217), 21, - ts_builtin_sym_end, + ACTIONS(311), 1, anon_sym_COLON, - anon_sym_PLUS, + ACTIONS(313), 1, anon_sym_STAR_STAR, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_else, + ACTIONS(319), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_DASH_GT, - [6850] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(239), 9, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_GT_GT, + ACTIONS(325), 1, anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, + ACTIONS(329), 1, + anon_sym_CARET, + ACTIONS(335), 1, + anon_sym_AMP_AMP, + ACTIONS(337), 1, + anon_sym_PIPE_PIPE, + ACTIONS(339), 1, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(241), 21, - ts_builtin_sym_end, - anon_sym_COLON, + ACTIONS(341), 1, + anon_sym_DOT_DOT_EQ, + STATE(135), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(315), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(321), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(323), 2, anon_sym_LT_LT, - anon_sym_CARET, + anon_sym_GT_GT, + ACTIONS(331), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(206), 6, + ts_builtin_sym_end, anon_sym_else, - anon_sym_LPAREN, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [6889] = 4, - STATE(133), 1, + [7849] = 4, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(179), 8, + ACTIONS(238), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -7867,7 +8719,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(181), 21, + ACTIONS(240), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -7885,68 +8737,89 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [6930] = 3, + [7891] = 20, + ACTIONS(214), 1, + anon_sym_EQ, + ACTIONS(311), 1, + anon_sym_COLON, + ACTIONS(313), 1, + anon_sym_STAR_STAR, + ACTIONS(317), 1, + anon_sym_SLASH_SLASH, + ACTIONS(319), 1, + anon_sym_LPAREN, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, + anon_sym_PIPE, + ACTIONS(329), 1, + anon_sym_CARET, + ACTIONS(335), 1, + anon_sym_AMP_AMP, + ACTIONS(337), 1, + anon_sym_PIPE_PIPE, + ACTIONS(339), 1, + anon_sym_DOT_DOT, + ACTIONS(341), 1, + anon_sym_DOT_DOT_EQ, + STATE(135), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(231), 9, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(233), 21, - ts_builtin_sym_end, - anon_sym_COLON, + ACTIONS(321), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(323), 2, anon_sym_LT_LT, - anon_sym_CARET, + anon_sym_GT_GT, + ACTIONS(331), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(216), 6, + ts_builtin_sym_end, anon_sym_else, - anon_sym_LPAREN, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [6969] = 3, + [7965] = 4, + ACTIONS(212), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(247), 9, + ACTIONS(208), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(249), 21, + ACTIONS(210), 21, ts_builtin_sym_end, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -7956,16 +8829,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7008] = 3, + [8007] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(211), 9, + ACTIONS(218), 9, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -7975,7 +8848,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(213), 21, + ACTIONS(220), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_PLUS, @@ -7992,80 +8865,86 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [7047] = 9, - ACTIONS(294), 1, + [8047] = 18, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - STATE(133), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, + anon_sym_PIPE, + ACTIONS(329), 1, + anon_sym_CARET, + ACTIONS(335), 1, + anon_sym_AMP_AMP, + ACTIONS(337), 1, + anon_sym_PIPE_PIPE, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(300), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(191), 6, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, + ACTIONS(186), 2, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(193), 17, - ts_builtin_sym_end, + ACTIONS(315), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(321), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(331), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, + ACTIONS(188), 7, + ts_builtin_sym_end, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7098] = 6, - ACTIONS(294), 1, - anon_sym_COLON, - ACTIONS(308), 1, - anon_sym_LPAREN, - STATE(133), 1, - sym_dictionary_construction, + [8117] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 8, + ACTIONS(270), 9, anon_sym_STAR, anon_sym_SLASH, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(193), 19, + ACTIONS(272), 22, ts_builtin_sym_end, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8075,22 +8954,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7143] = 7, - ACTIONS(294), 1, - anon_sym_COLON, - ACTIONS(298), 1, - anon_sym_STAR_STAR, - ACTIONS(308), 1, - anon_sym_LPAREN, - STATE(133), 1, - sym_dictionary_construction, + anon_sym_GT_GT_GT, + [8157] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 8, + ACTIONS(222), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8099,10 +8974,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(193), 18, + ACTIONS(224), 22, ts_builtin_sym_end, - anon_sym_DASH, + anon_sym_COLON, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -8115,40 +8991,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7190] = 10, - ACTIONS(294), 1, - anon_sym_COLON, - ACTIONS(298), 1, - anon_sym_STAR_STAR, - ACTIONS(302), 1, - anon_sym_SLASH_SLASH, - ACTIONS(308), 1, - anon_sym_LPAREN, - STATE(133), 1, - sym_dictionary_construction, + anon_sym_DASH_GT, + [8197] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(282), 9, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(191), 6, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(193), 15, + ACTIONS(284), 22, ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8158,88 +9028,89 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7243] = 11, - ACTIONS(294), 1, + anon_sym_GT_GT_GT, + [8237] = 20, + ACTIONS(230), 1, + anon_sym_EQ, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - STATE(133), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, + anon_sym_PIPE, + ACTIONS(329), 1, + anon_sym_CARET, + ACTIONS(335), 1, + anon_sym_AMP_AMP, + ACTIONS(337), 1, + anon_sym_PIPE_PIPE, + ACTIONS(339), 1, + anon_sym_DOT_DOT, + ACTIONS(341), 1, + anon_sym_DOT_DOT_EQ, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(191), 6, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(193), 13, - ts_builtin_sym_end, - anon_sym_CARET, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(232), 6, + ts_builtin_sym_end, anon_sym_else, + anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7298] = 13, - ACTIONS(294), 1, - anon_sym_COLON, - ACTIONS(298), 1, - anon_sym_STAR_STAR, - ACTIONS(302), 1, - anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, - anon_sym_LPAREN, - ACTIONS(312), 1, - anon_sym_CARET, - STATE(133), 1, - sym_dictionary_construction, + [8311] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(286), 9, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, - anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(191), 5, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(193), 12, + ACTIONS(288), 22, ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8248,14 +9119,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7357] = 3, + anon_sym_GT_GT_GT, + [8351] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(251), 8, + ACTIONS(242), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8264,7 +9138,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(253), 21, + ACTIONS(244), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8282,15 +9156,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7395] = 3, + [8390] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(263), 8, + ACTIONS(290), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8299,7 +9174,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(265), 21, + ACTIONS(292), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8317,15 +9192,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7433] = 3, + [8429] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(197), 8, + ACTIONS(278), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8334,7 +9210,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(199), 21, + ACTIONS(280), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8352,26 +9228,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7471] = 8, - ACTIONS(289), 1, - anon_sym_DOT, - ACTIONS(328), 1, - anon_sym_COLON, - ACTIONS(330), 1, - anon_sym_EQ, - STATE(97), 1, - aux_sym_path_repeat1, - STATE(204), 1, - sym_declaration_type, + [8468] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 8, - anon_sym_DASH, + ACTIONS(254), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8379,7 +9245,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(152), 16, + anon_sym_EQ, + ACTIONS(256), 22, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -8393,14 +9263,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, - anon_sym_DASH_GT, - [7519] = 3, + anon_sym_COMMA, + anon_sym_RBRACK, + [8507] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(279), 8, + ACTIONS(266), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8409,7 +9282,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(281), 21, + ACTIONS(268), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8427,15 +9300,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7557] = 3, + [8546] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(267), 8, + ACTIONS(250), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8444,7 +9318,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(269), 21, + ACTIONS(252), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8462,15 +9336,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7595] = 3, + [8585] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(205), 8, + ACTIONS(294), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8479,7 +9354,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(207), 21, + ACTIONS(296), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8497,15 +9372,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7633] = 3, + [8624] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(271), 8, + ACTIONS(246), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8514,7 +9390,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(273), 21, + ACTIONS(248), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8532,15 +9408,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7671] = 3, + [8663] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(259), 8, + ACTIONS(262), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8549,7 +9426,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(261), 21, + ACTIONS(264), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8567,15 +9444,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7709] = 3, + [8702] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(275), 8, + ACTIONS(258), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8584,7 +9462,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(277), 21, + ACTIONS(260), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8602,15 +9480,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7747] = 3, + [8741] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(243), 8, + ACTIONS(208), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8619,7 +9498,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(245), 21, + ACTIONS(210), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8637,15 +9516,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7785] = 3, + [8780] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(235), 8, + ACTIONS(198), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8654,7 +9534,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(237), 21, + ACTIONS(200), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8672,15 +9552,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7823] = 3, + [8819] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(255), 8, + ACTIONS(274), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8689,7 +9570,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(257), 21, + ACTIONS(276), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8707,15 +9588,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7861] = 3, + [8858] = 8, + ACTIONS(304), 1, + anon_sym_DOT, + ACTIONS(343), 1, + anon_sym_COLON, + ACTIONS(345), 1, + anon_sym_EQ, + STATE(106), 1, + aux_sym_path_repeat1, + STATE(211), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(227), 8, + ACTIONS(164), 8, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8723,11 +9616,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(229), 21, - ts_builtin_sym_end, - anon_sym_COLON, - anon_sym_DASH, + ACTIONS(166), 16, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -8741,636 +9630,681 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, anon_sym_LPAREN, anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [7899] = 20, - ACTIONS(294), 1, + anon_sym_DASH_GT, + [8906] = 20, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, + ACTIONS(335), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(334), 1, + ACTIONS(347), 1, anon_sym_EQ, - STATE(133), 1, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 2, + ACTIONS(349), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(316), 4, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [7969] = 20, - ACTIONS(120), 1, + [8976] = 20, + ACTIONS(123), 1, anon_sym_RBRACK, - ACTIONS(294), 1, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, + ACTIONS(335), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(336), 1, + ACTIONS(351), 1, anon_sym_COMMA, - STATE(133), 1, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, + ACTIONS(315), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(321), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(323), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(331), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(333), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9045] = 19, + ACTIONS(311), 1, + anon_sym_COLON, + ACTIONS(313), 1, + anon_sym_STAR_STAR, + ACTIONS(317), 1, + anon_sym_SLASH_SLASH, + ACTIONS(319), 1, + anon_sym_LPAREN, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, + anon_sym_PIPE, + ACTIONS(329), 1, + anon_sym_CARET, + ACTIONS(335), 1, + anon_sym_AMP_AMP, + ACTIONS(337), 1, + anon_sym_PIPE_PIPE, + ACTIONS(339), 1, + anon_sym_DOT_DOT, + ACTIONS(341), 1, + anon_sym_DOT_DOT_EQ, + STATE(135), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(353), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [8038] = 20, - ACTIONS(294), 1, + [9112] = 20, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, + ACTIONS(335), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(336), 1, + ACTIONS(351), 1, anon_sym_COMMA, - ACTIONS(338), 1, + ACTIONS(355), 1, anon_sym_RBRACK, - STATE(133), 1, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [8107] = 20, - ACTIONS(116), 1, - anon_sym_RBRACK, - ACTIONS(294), 1, + [9181] = 20, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, + ACTIONS(335), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(336), 1, + ACTIONS(351), 1, anon_sym_COMMA, - STATE(133), 1, + ACTIONS(357), 1, + anon_sym_RBRACK, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, - sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + sym__whitespace, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [8176] = 19, - ACTIONS(294), 1, + [9250] = 19, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, + ACTIONS(335), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - STATE(133), 1, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(340), 2, + ACTIONS(359), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(316), 4, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [8243] = 19, - ACTIONS(294), 1, + [9317] = 20, + ACTIONS(127), 1, + anon_sym_RBRACK, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, + ACTIONS(335), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - STATE(133), 1, + ACTIONS(351), 1, + anon_sym_COMMA, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(342), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - ACTIONS(316), 4, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [8310] = 20, - ACTIONS(294), 1, + [9386] = 19, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, + ACTIONS(335), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(336), 1, - anon_sym_COMMA, - ACTIONS(344), 1, - anon_sym_RBRACK, - STATE(133), 1, + ACTIONS(361), 1, + anon_sym_else, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [8379] = 19, - ACTIONS(294), 1, + [9452] = 19, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, + ACTIONS(335), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(346), 1, + ACTIONS(363), 1, anon_sym_RPAREN, - STATE(133), 1, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [8445] = 19, - ACTIONS(294), 1, + [9518] = 19, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, + ACTIONS(335), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(348), 1, - ts_builtin_sym_end, - STATE(133), 1, + ACTIONS(351), 1, + anon_sym_COMMA, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [8511] = 19, - ACTIONS(294), 1, + [9584] = 19, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, + ACTIONS(335), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(350), 1, - anon_sym_else, - STATE(133), 1, + ACTIONS(365), 1, + anon_sym_RPAREN, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [8577] = 19, - ACTIONS(294), 1, + [9650] = 19, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, + ACTIONS(335), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(336), 1, - anon_sym_COMMA, - STATE(133), 1, + ACTIONS(367), 1, + anon_sym_SEMI, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [8643] = 19, - ACTIONS(294), 1, + [9716] = 19, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, + ACTIONS(335), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(352), 1, - anon_sym_RPAREN, - STATE(133), 1, + ACTIONS(369), 1, + ts_builtin_sym_end, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [8709] = 19, - ACTIONS(294), 1, + [9782] = 19, + ACTIONS(311), 1, anon_sym_COLON, - ACTIONS(298), 1, + ACTIONS(313), 1, anon_sym_STAR_STAR, - ACTIONS(302), 1, + ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(306), 1, - anon_sym_AMP, - ACTIONS(308), 1, + ACTIONS(319), 1, anon_sym_LPAREN, - ACTIONS(310), 1, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, anon_sym_PIPE, - ACTIONS(312), 1, + ACTIONS(329), 1, anon_sym_CARET, - ACTIONS(318), 1, + ACTIONS(335), 1, anon_sym_AMP_AMP, - ACTIONS(320), 1, + ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(322), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT, - ACTIONS(324), 1, + ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(354), 1, + ACTIONS(371), 1, anon_sym_else, - STATE(133), 1, + STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(300), 2, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(304), 2, + ACTIONS(321), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(314), 2, + ACTIONS(331), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 4, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [8775] = 14, + [9848] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -9379,76 +10313,76 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(356), 1, + ACTIONS(373), 1, sym_identifier, - ACTIONS(360), 1, + ACTIONS(377), 1, anon_sym_LPAREN, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(189), 1, + STATE(101), 1, + sym_number, + STATE(193), 1, sym_formula_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(358), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(170), 6, + STATE(181), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [8828] = 14, + [9901] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(356), 1, + ACTIONS(373), 1, sym_identifier, - ACTIONS(360), 1, + ACTIONS(377), 1, anon_sym_LPAREN, - ACTIONS(362), 1, - aux_sym_base_ten_token1, - STATE(166), 1, - sym_number, - STATE(167), 1, + STATE(100), 1, sym__float, - STATE(179), 1, + STATE(101), 1, + sym_number, + STATE(199), 1, sym_formula_expression, - STATE(206), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(364), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(170), 6, + STATE(181), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [8881] = 14, + [9954] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -9457,154 +10391,154 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(356), 1, + ACTIONS(373), 1, sym_identifier, - ACTIONS(360), 1, + ACTIONS(377), 1, anon_sym_LPAREN, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(182), 1, + STATE(101), 1, + sym_number, + STATE(192), 1, sym_formula_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(358), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(170), 6, + STATE(181), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [8934] = 14, + [10007] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(356), 1, + ACTIONS(373), 1, sym_identifier, - ACTIONS(360), 1, + ACTIONS(377), 1, anon_sym_LPAREN, - ACTIONS(362), 1, + ACTIONS(379), 1, aux_sym_base_ten_token1, - STATE(166), 1, + STATE(176), 1, sym_number, - STATE(167), 1, + STATE(177), 1, sym__float, - STATE(173), 1, + STATE(180), 1, sym_formula_expression, - STATE(206), 1, + STATE(235), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(364), 2, + ACTIONS(381), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(170), 6, + STATE(181), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [8987] = 14, + [10060] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(356), 1, + ACTIONS(373), 1, sym_identifier, - ACTIONS(360), 1, + ACTIONS(377), 1, anon_sym_LPAREN, - ACTIONS(362), 1, + ACTIONS(379), 1, aux_sym_base_ten_token1, - STATE(166), 1, + STATE(176), 1, sym_number, - STATE(167), 1, + STATE(177), 1, sym__float, - STATE(168), 1, + STATE(184), 1, sym_formula_expression, - STATE(206), 1, + STATE(235), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(364), 2, + ACTIONS(381), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(170), 6, + STATE(181), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [9040] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [10113] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(356), 1, + ACTIONS(373), 1, sym_identifier, - ACTIONS(360), 1, + ACTIONS(377), 1, anon_sym_LPAREN, - STATE(93), 1, + ACTIONS(379), 1, + aux_sym_base_ten_token1, + STATE(176), 1, sym_number, - STATE(94), 1, + STATE(177), 1, sym__float, - STATE(183), 1, + STATE(187), 1, sym_formula_expression, - STATE(210), 1, + STATE(235), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(358), 2, + ACTIONS(381), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(170), 6, + STATE(181), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [9093] = 14, + [10166] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -9613,115 +10547,115 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(356), 1, + ACTIONS(373), 1, sym_identifier, - ACTIONS(360), 1, + ACTIONS(377), 1, anon_sym_LPAREN, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(187), 1, + STATE(101), 1, + sym_number, + STATE(195), 1, sym_formula_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(358), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(170), 6, + STATE(181), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [9146] = 14, + [10219] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(356), 1, + ACTIONS(373), 1, sym_identifier, - ACTIONS(360), 1, + ACTIONS(377), 1, anon_sym_LPAREN, - ACTIONS(362), 1, + ACTIONS(379), 1, aux_sym_base_ten_token1, - STATE(166), 1, + STATE(176), 1, sym_number, - STATE(167), 1, + STATE(177), 1, sym__float, - STATE(175), 1, + STATE(188), 1, sym_formula_expression, - STATE(206), 1, + STATE(235), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(364), 2, + ACTIONS(381), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(170), 6, + STATE(181), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [9199] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [10272] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(356), 1, + ACTIONS(373), 1, sym_identifier, - ACTIONS(360), 1, + ACTIONS(377), 1, anon_sym_LPAREN, - STATE(93), 1, + ACTIONS(379), 1, + aux_sym_base_ten_token1, + STATE(176), 1, sym_number, - STATE(94), 1, + STATE(177), 1, sym__float, - STATE(181), 1, + STATE(186), 1, sym_formula_expression, - STATE(210), 1, + STATE(235), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(358), 2, + ACTIONS(381), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(170), 6, + STATE(181), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [9252] = 14, + [10325] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -9730,165 +10664,166 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(356), 1, + ACTIONS(373), 1, sym_identifier, - ACTIONS(360), 1, + ACTIONS(377), 1, anon_sym_LPAREN, - STATE(93), 1, - sym_number, - STATE(94), 1, + STATE(100), 1, sym__float, - STATE(168), 1, + STATE(101), 1, + sym_number, + STATE(194), 1, sym_formula_expression, - STATE(210), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(358), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(170), 6, + STATE(181), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [9305] = 14, + [10378] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(356), 1, + ACTIONS(373), 1, sym_identifier, - ACTIONS(360), 1, + ACTIONS(377), 1, anon_sym_LPAREN, - ACTIONS(362), 1, - aux_sym_base_ten_token1, - STATE(166), 1, - sym_number, - STATE(167), 1, + STATE(100), 1, sym__float, - STATE(174), 1, + STATE(101), 1, + sym_number, + STATE(191), 1, sym_formula_expression, - STATE(206), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(364), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(170), 6, + STATE(181), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [9358] = 14, + [10431] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(356), 1, + ACTIONS(373), 1, sym_identifier, - ACTIONS(360), 1, + ACTIONS(377), 1, anon_sym_LPAREN, - ACTIONS(362), 1, - aux_sym_base_ten_token1, - STATE(166), 1, - sym_number, - STATE(167), 1, + STATE(100), 1, sym__float, + STATE(101), 1, + sym_number, STATE(180), 1, sym_formula_expression, - STATE(206), 1, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(364), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(170), 6, + STATE(181), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [9411] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [10484] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(356), 1, + ACTIONS(373), 1, sym_identifier, - ACTIONS(360), 1, + ACTIONS(377), 1, anon_sym_LPAREN, - STATE(93), 1, + ACTIONS(379), 1, + aux_sym_base_ten_token1, + STATE(176), 1, sym_number, - STATE(94), 1, + STATE(177), 1, sym__float, - STATE(186), 1, + STATE(189), 1, sym_formula_expression, - STATE(210), 1, + STATE(235), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(358), 2, + ACTIONS(381), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(211), 4, + STATE(227), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(170), 6, + STATE(181), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [9464] = 3, + [10537] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(366), 6, + ACTIONS(383), 7, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, - ACTIONS(111), 11, + anon_sym_let, + ACTIONS(116), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -9900,41 +10835,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LT_LT_LT, - [9490] = 4, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(128), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(124), 4, - sym_identifier, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(126), 10, - sym_unit_quote, - anon_sym_DOT, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [9517] = 3, + [10564] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(368), 6, + ACTIONS(385), 7, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, - ACTIONS(209), 10, + anon_sym_let, + ACTIONS(212), 10, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -9945,17 +10858,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [9542] = 4, - ACTIONS(370), 1, + [10590] = 4, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(155), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(151), 4, + sym_identifier, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(153), 10, + sym_unit_quote, + anon_sym_DOT, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [10617] = 4, + ACTIONS(387), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(173), 3, + ACTIONS(174), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(175), 10, + ACTIONS(176), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -9966,20 +10902,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9567] = 5, - STATE(178), 1, + [10642] = 5, + STATE(185), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(372), 2, + ACTIONS(389), 2, sym_identifier, sym_unit_quote, - ACTIONS(167), 3, + ACTIONS(180), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(169), 8, + ACTIONS(182), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9988,15 +10924,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9594] = 3, + [10669] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(376), 3, + ACTIONS(151), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(374), 10, + ACTIONS(153), 10, + sym_identifier, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10005,17 +10943,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [9616] = 3, + [10691] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 3, + ACTIONS(226), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(221), 10, + ACTIONS(228), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -10026,15 +10962,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9638] = 3, + [10713] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(380), 3, + ACTIONS(393), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(378), 10, + ACTIONS(391), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10045,17 +10981,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [9660] = 3, + [10735] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(124), 3, + ACTIONS(397), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(126), 10, - sym_identifier, - sym_unit_quote, + ACTIONS(395), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10064,15 +10998,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9682] = 3, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [10757] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(384), 3, + ACTIONS(401), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(382), 10, + ACTIONS(399), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10083,108 +11019,150 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [9704] = 6, - ACTIONS(386), 1, + [10779] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(282), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(284), 8, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(388), 1, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [10799] = 4, + ACTIONS(403), 1, + anon_sym_STAR_STAR, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(393), 3, anon_sym_STAR, - ACTIONS(390), 1, + anon_sym_GT, + anon_sym_LT, + ACTIONS(391), 7, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [10821] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(376), 2, + ACTIONS(286), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(374), 6, + ACTIONS(288), 8, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9730] = 7, - ACTIONS(386), 1, + [10841] = 7, + ACTIONS(403), 1, anon_sym_STAR_STAR, - ACTIONS(388), 1, + ACTIONS(407), 1, anon_sym_STAR, - ACTIONS(390), 1, + ACTIONS(409), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(392), 2, + ACTIONS(405), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(394), 2, + ACTIONS(411), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(396), 4, + ACTIONS(413), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9758] = 4, - ACTIONS(386), 1, + [10869] = 6, + ACTIONS(403), 1, anon_sym_STAR_STAR, + ACTIONS(407), 1, + anon_sym_STAR, + ACTIONS(409), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(376), 3, - anon_sym_STAR, + ACTIONS(393), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(374), 7, + ACTIONS(391), 6, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9780] = 3, + [10895] = 7, + ACTIONS(403), 1, + anon_sym_STAR_STAR, + ACTIONS(407), 1, + anon_sym_STAR, + ACTIONS(409), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(239), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(241), 8, + ACTIONS(405), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(415), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(417), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9800] = 3, + [10923] = 7, + ACTIONS(403), 1, + anon_sym_STAR_STAR, + ACTIONS(407), 1, + anon_sym_STAR, + ACTIONS(409), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(231), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(233), 8, + ACTIONS(405), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(419), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(421), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9820] = 3, + [10951] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(247), 3, + ACTIONS(270), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(249), 8, + ACTIONS(272), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10193,566 +11171,592 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9840] = 7, - ACTIONS(386), 1, + [10971] = 5, + ACTIONS(423), 1, anon_sym_STAR_STAR, - ACTIONS(388), 1, + ACTIONS(425), 1, anon_sym_STAR, - ACTIONS(390), 1, + ACTIONS(427), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(392), 2, + ACTIONS(391), 4, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(398), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(400), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [9868] = 7, - ACTIONS(386), 1, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [10991] = 6, + ACTIONS(423), 1, anon_sym_STAR_STAR, - ACTIONS(388), 1, + ACTIONS(425), 1, anon_sym_STAR, - ACTIONS(390), 1, + ACTIONS(427), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(392), 2, + ACTIONS(413), 2, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + ACTIONS(429), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(402), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(404), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [9896] = 4, - ACTIONS(376), 1, + [11013] = 4, + ACTIONS(393), 1, anon_sym_STAR, - ACTIONS(406), 1, + ACTIONS(423), 1, anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 5, + ACTIONS(391), 5, anon_sym_DASH, anon_sym_PLUS, anon_sym_SLASH, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [9914] = 5, - ACTIONS(406), 1, + [11031] = 6, + ACTIONS(423), 1, anon_sym_STAR_STAR, - ACTIONS(408), 1, + ACTIONS(425), 1, anon_sym_STAR, - ACTIONS(410), 1, + ACTIONS(427), 1, anon_sym_SLASH, + ACTIONS(431), 1, + anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 4, + ACTIONS(429), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [9934] = 6, - ACTIONS(406), 1, + [11052] = 6, + ACTIONS(423), 1, anon_sym_STAR_STAR, - ACTIONS(408), 1, + ACTIONS(425), 1, anon_sym_STAR, - ACTIONS(410), 1, + ACTIONS(427), 1, anon_sym_SLASH, + ACTIONS(433), 1, + anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(396), 2, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - ACTIONS(412), 2, + ACTIONS(429), 2, anon_sym_DASH, anon_sym_PLUS, - [9956] = 7, - ACTIONS(71), 1, + [11073] = 7, + ACTIONS(73), 1, sym_varadic_dots, - ACTIONS(414), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(416), 1, + ACTIONS(437), 1, anon_sym_RPAREN, - STATE(190), 1, + STATE(200), 1, aux_sym_struct_definition_repeat1, - STATE(214), 1, + STATE(225), 1, sym_struct_member, - STATE(228), 1, + STATE(254), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [9979] = 7, - ACTIONS(71), 1, + [11096] = 7, + ACTIONS(73), 1, sym_varadic_dots, - ACTIONS(414), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(418), 1, + ACTIONS(439), 1, anon_sym_RPAREN, - STATE(188), 1, + STATE(196), 1, aux_sym_struct_definition_repeat1, - STATE(214), 1, + STATE(225), 1, sym_struct_member, - STATE(227), 1, + STATE(239), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10002] = 6, - ACTIONS(406), 1, - anon_sym_STAR_STAR, - ACTIONS(408), 1, - anon_sym_STAR, - ACTIONS(410), 1, - anon_sym_SLASH, - ACTIONS(420), 1, - anon_sym_RPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(412), 2, - anon_sym_DASH, - anon_sym_PLUS, - [10023] = 6, - ACTIONS(406), 1, - anon_sym_STAR_STAR, - ACTIONS(408), 1, - anon_sym_STAR, - ACTIONS(410), 1, - anon_sym_SLASH, - ACTIONS(422), 1, - anon_sym_GT_GT_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(412), 2, - anon_sym_DASH, - anon_sym_PLUS, - [10044] = 7, - ACTIONS(71), 1, + [11119] = 7, + ACTIONS(73), 1, sym_varadic_dots, - ACTIONS(414), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(424), 1, + ACTIONS(441), 1, anon_sym_RPAREN, - STATE(190), 1, + STATE(200), 1, aux_sym_struct_definition_repeat1, - STATE(214), 1, + STATE(225), 1, sym_struct_member, - STATE(234), 1, + STATE(252), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10067] = 6, - ACTIONS(406), 1, + [11142] = 6, + ACTIONS(423), 1, anon_sym_STAR_STAR, - ACTIONS(408), 1, + ACTIONS(425), 1, anon_sym_STAR, - ACTIONS(410), 1, + ACTIONS(427), 1, anon_sym_SLASH, - ACTIONS(426), 1, - anon_sym_GT_GT_GT, + ACTIONS(443), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(412), 2, + ACTIONS(429), 2, anon_sym_DASH, anon_sym_PLUS, - [10088] = 5, - ACTIONS(428), 1, + [11163] = 5, + ACTIONS(445), 1, sym_identifier, - STATE(190), 1, + STATE(200), 1, aux_sym_struct_definition_repeat1, - STATE(230), 1, + STATE(245), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(431), 2, + ACTIONS(448), 2, anon_sym_RPAREN, sym_varadic_dots, - [10106] = 4, - ACTIONS(433), 1, + [11181] = 4, + ACTIONS(450), 1, sym_identifier, - ACTIONS(435), 1, + ACTIONS(453), 1, + anon_sym_in, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + STATE(201), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [11196] = 4, + ACTIONS(455), 1, + sym_identifier, + ACTIONS(457), 1, + anon_sym_in, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + STATE(201), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [11211] = 4, + ACTIONS(455), 1, + sym_identifier, + ACTIONS(459), 1, + anon_sym_in, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + STATE(204), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [11226] = 4, + ACTIONS(455), 1, + sym_identifier, + ACTIONS(461), 1, + anon_sym_in, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + STATE(201), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [11241] = 4, + ACTIONS(455), 1, + sym_identifier, + ACTIONS(463), 1, + anon_sym_in, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + STATE(202), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [11256] = 4, + ACTIONS(465), 1, + sym_identifier, + ACTIONS(467), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(40), 2, + STATE(44), 2, sym_path, sym_struct_definition, - [10121] = 4, - ACTIONS(433), 1, + [11271] = 4, + ACTIONS(465), 1, sym_identifier, - ACTIONS(435), 1, + ACTIONS(467), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(21), 2, + STATE(23), 2, sym_path, sym_struct_definition, - [10136] = 4, - ACTIONS(437), 1, - sym_identifier, - ACTIONS(439), 1, + [11286] = 4, + ACTIONS(469), 1, anon_sym_RPAREN, - STATE(215), 1, - sym_dictionary_member_assignment, + ACTIONS(471), 1, + anon_sym_COMMA, + STATE(208), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10150] = 4, - ACTIONS(437), 1, + [11300] = 4, + ACTIONS(474), 1, sym_identifier, - ACTIONS(441), 1, + ACTIONS(476), 1, anon_sym_RPAREN, - STATE(205), 1, + STATE(222), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10164] = 4, - ACTIONS(443), 1, + [11314] = 4, + ACTIONS(478), 1, anon_sym_RPAREN, - ACTIONS(445), 1, + ACTIONS(480), 1, anon_sym_COMMA, - STATE(195), 1, + STATE(220), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10178] = 4, - ACTIONS(437), 1, - sym_identifier, - ACTIONS(448), 1, - anon_sym_RPAREN, - STATE(215), 1, - sym_dictionary_member_assignment, + [11328] = 3, + ACTIONS(482), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10192] = 4, - ACTIONS(448), 1, + ACTIONS(484), 2, anon_sym_RPAREN, - ACTIONS(450), 1, anon_sym_COMMA, - STATE(195), 1, + [11340] = 4, + ACTIONS(486), 1, + anon_sym_RPAREN, + ACTIONS(488), 1, + anon_sym_COMMA, + STATE(216), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10206] = 4, - ACTIONS(437), 1, + [11354] = 4, + ACTIONS(474), 1, sym_identifier, - ACTIONS(452), 1, + ACTIONS(490), 1, anon_sym_RPAREN, - STATE(199), 1, + STATE(212), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10220] = 4, - ACTIONS(454), 1, + [11368] = 4, + ACTIONS(474), 1, + sym_identifier, + ACTIONS(492), 1, anon_sym_RPAREN, - ACTIONS(456), 1, - anon_sym_COMMA, - STATE(203), 1, - aux_sym_dictionary_construction_repeat1, + STATE(210), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10234] = 4, - ACTIONS(437), 1, + [11382] = 4, + ACTIONS(474), 1, sym_identifier, - ACTIONS(458), 1, + ACTIONS(494), 1, anon_sym_RPAREN, - STATE(215), 1, + STATE(222), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10248] = 2, + [11396] = 4, + ACTIONS(494), 1, + anon_sym_RPAREN, + ACTIONS(496), 1, + anon_sym_COMMA, + STATE(208), 1, + aux_sym_dictionary_construction_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [11410] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(431), 3, + ACTIONS(448), 3, sym_identifier, anon_sym_RPAREN, sym_varadic_dots, - [10258] = 4, - ACTIONS(437), 1, + [11420] = 4, + ACTIONS(474), 1, + sym_identifier, + ACTIONS(498), 1, + anon_sym_RPAREN, + STATE(222), 1, + sym_dictionary_member_assignment, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [11434] = 4, + ACTIONS(474), 1, sym_identifier, - ACTIONS(460), 1, + ACTIONS(500), 1, anon_sym_RPAREN, - STATE(215), 1, + STATE(222), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10272] = 4, - ACTIONS(460), 1, + [11448] = 4, + ACTIONS(500), 1, anon_sym_RPAREN, - ACTIONS(462), 1, + ACTIONS(502), 1, anon_sym_COMMA, - STATE(195), 1, + STATE(208), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10286] = 3, - ACTIONS(466), 1, - anon_sym_EQ, + [11462] = 3, + ACTIONS(343), 1, + anon_sym_COLON, + STATE(211), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(464), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [10298] = 4, - ACTIONS(468), 1, + [11473] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(469), 2, anon_sym_RPAREN, - ACTIONS(470), 1, anon_sym_COMMA, - STATE(197), 1, - aux_sym_dictionary_construction_repeat1, + [11482] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10312] = 3, - ACTIONS(472), 1, + ACTIONS(504), 2, aux_sym_signed_integer_token1, - ACTIONS(474), 1, aux_sym_unsigned_integer_token1, + [11491] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10323] = 3, - ACTIONS(476), 1, - aux_sym_base_ten_token1, - STATE(96), 1, - sym_number, + ACTIONS(506), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [11500] = 3, + ACTIONS(508), 1, + anon_sym_RPAREN, + ACTIONS(510), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10334] = 3, - ACTIONS(437), 1, - sym_identifier, - STATE(215), 1, - sym_dictionary_member_assignment, + [11511] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10345] = 3, - ACTIONS(478), 1, + ACTIONS(512), 2, aux_sym_signed_integer_token1, - ACTIONS(480), 1, aux_sym_unsigned_integer_token1, + [11520] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10356] = 3, - ACTIONS(482), 1, + ACTIONS(514), 2, aux_sym_signed_integer_token1, - ACTIONS(484), 1, aux_sym_unsigned_integer_token1, + [11529] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10367] = 2, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(486), 2, + ACTIONS(516), 2, + sym_identifier, + anon_sym_in, + [11538] = 3, + ACTIONS(518), 1, aux_sym_signed_integer_token1, + ACTIONS(520), 1, aux_sym_unsigned_integer_token1, - [10376] = 3, - ACTIONS(488), 1, - anon_sym_RPAREN, - ACTIONS(490), 1, - anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10387] = 3, - ACTIONS(492), 1, - aux_sym_base_ten_token1, - STATE(62), 1, - sym_number, + [11549] = 3, + ACTIONS(319), 1, + anon_sym_LPAREN, + STATE(134), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10398] = 3, - ACTIONS(488), 1, - anon_sym_RPAREN, - ACTIONS(494), 1, - anon_sym_COMMA, + [11560] = 3, + ACTIONS(522), 1, + aux_sym_base_ten_token1, + STATE(67), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10409] = 2, + [11571] = 3, + ACTIONS(474), 1, + sym_identifier, + STATE(222), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(443), 2, + [11582] = 3, + ACTIONS(508), 1, anon_sym_RPAREN, + ACTIONS(524), 1, anon_sym_COMMA, - [10418] = 3, - ACTIONS(308), 1, - anon_sym_LPAREN, - STATE(131), 1, - sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10429] = 3, - ACTIONS(496), 1, - aux_sym_base_ten_token1, - STATE(169), 1, - sym_number, + [11593] = 3, + ACTIONS(526), 1, + aux_sym_signed_integer_token1, + ACTIONS(528), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10440] = 2, + [11604] = 3, + ACTIONS(530), 1, + aux_sym_signed_integer_token1, + ACTIONS(532), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(498), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [10449] = 3, - ACTIONS(189), 1, + [11615] = 3, + ACTIONS(192), 1, anon_sym_LPAREN, - STATE(84), 1, + STATE(94), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10460] = 2, + [11626] = 3, + ACTIONS(534), 1, + aux_sym_base_ten_token1, + STATE(179), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(500), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [10469] = 3, - ACTIONS(328), 1, - anon_sym_COLON, - STATE(204), 1, - sym_declaration_type, + [11637] = 3, + ACTIONS(536), 1, + aux_sym_base_ten_token1, + STATE(104), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10480] = 2, + [11648] = 2, + ACTIONS(538), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(502), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [10489] = 2, - ACTIONS(504), 1, - sym_identifier, + [11656] = 2, + ACTIONS(540), 1, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10497] = 2, - ACTIONS(506), 1, - aux_sym_base_ten_token1, + [11664] = 2, + ACTIONS(542), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10505] = 2, - ACTIONS(508), 1, - aux_sym_hex_token2, + [11672] = 2, + ACTIONS(544), 1, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10513] = 2, - ACTIONS(510), 1, - aux_sym_binary_token2, + [11680] = 2, + ACTIONS(546), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10521] = 2, - ACTIONS(512), 1, + [11688] = 2, + ACTIONS(548), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10529] = 2, - ACTIONS(514), 1, - anon_sym_RPAREN, + [11696] = 2, + ACTIONS(510), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10537] = 2, - ACTIONS(516), 1, - anon_sym_RPAREN, + [11704] = 2, + ACTIONS(550), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10545] = 2, - ACTIONS(494), 1, - anon_sym_COMMA, + [11712] = 2, + ACTIONS(552), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10553] = 2, - ACTIONS(518), 1, + [11720] = 2, + ACTIONS(554), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10561] = 2, - ACTIONS(520), 1, + [11728] = 2, + ACTIONS(556), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10569] = 2, - ACTIONS(522), 1, - anon_sym_RPAREN, + [11736] = 2, + ACTIONS(558), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10577] = 2, - ACTIONS(524), 1, - anon_sym_RPAREN, + [11744] = 2, + ACTIONS(560), 1, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10585] = 2, - ACTIONS(526), 1, - sym_identifier, + [11752] = 2, + ACTIONS(562), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10593] = 2, - ACTIONS(528), 1, + [11760] = 2, + ACTIONS(564), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [10601] = 2, - ACTIONS(530), 1, - ts_builtin_sym_end, + [11768] = 2, + ACTIONS(566), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10760,497 +11764,531 @@ static const uint16_t ts_small_parse_table[] = { static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(7)] = 0, - [SMALL_STATE(8)] = 91, - [SMALL_STATE(9)] = 182, - [SMALL_STATE(10)] = 273, - [SMALL_STATE(11)] = 364, - [SMALL_STATE(12)] = 455, - [SMALL_STATE(13)] = 507, - [SMALL_STATE(14)] = 592, - [SMALL_STATE(15)] = 677, - [SMALL_STATE(16)] = 762, - [SMALL_STATE(17)] = 847, - [SMALL_STATE(18)] = 932, - [SMALL_STATE(19)] = 1017, - [SMALL_STATE(20)] = 1102, - [SMALL_STATE(21)] = 1187, - [SMALL_STATE(22)] = 1272, - [SMALL_STATE(23)] = 1357, - [SMALL_STATE(24)] = 1442, - [SMALL_STATE(25)] = 1495, - [SMALL_STATE(26)] = 1580, - [SMALL_STATE(27)] = 1665, - [SMALL_STATE(28)] = 1718, - [SMALL_STATE(29)] = 1803, - [SMALL_STATE(30)] = 1888, - [SMALL_STATE(31)] = 1973, - [SMALL_STATE(32)] = 2058, - [SMALL_STATE(33)] = 2143, - [SMALL_STATE(34)] = 2228, - [SMALL_STATE(35)] = 2313, - [SMALL_STATE(36)] = 2398, - [SMALL_STATE(37)] = 2483, - [SMALL_STATE(38)] = 2568, - [SMALL_STATE(39)] = 2653, - [SMALL_STATE(40)] = 2706, - [SMALL_STATE(41)] = 2791, - [SMALL_STATE(42)] = 2876, - [SMALL_STATE(43)] = 2961, - [SMALL_STATE(44)] = 3046, - [SMALL_STATE(45)] = 3131, - [SMALL_STATE(46)] = 3216, - [SMALL_STATE(47)] = 3301, - [SMALL_STATE(48)] = 3386, - [SMALL_STATE(49)] = 3471, - [SMALL_STATE(50)] = 3556, - [SMALL_STATE(51)] = 3608, - [SMALL_STATE(52)] = 3656, - [SMALL_STATE(53)] = 3706, - [SMALL_STATE(54)] = 3755, - [SMALL_STATE(55)] = 3838, - [SMALL_STATE(56)] = 3899, - [SMALL_STATE(57)] = 3948, - [SMALL_STATE(58)] = 4031, - [SMALL_STATE(59)] = 4080, - [SMALL_STATE(60)] = 4127, - [SMALL_STATE(61)] = 4174, - [SMALL_STATE(62)] = 4221, - [SMALL_STATE(63)] = 4268, - [SMALL_STATE(64)] = 4327, - [SMALL_STATE(65)] = 4380, - [SMALL_STATE(66)] = 4435, - [SMALL_STATE(67)] = 4496, - [SMALL_STATE(68)] = 4561, - [SMALL_STATE(69)] = 4630, - [SMALL_STATE(70)] = 4697, - [SMALL_STATE(71)] = 4768, - [SMALL_STATE(72)] = 4843, - [SMALL_STATE(73)] = 4920, - [SMALL_STATE(74)] = 4999, - [SMALL_STATE(75)] = 5046, - [SMALL_STATE(76)] = 5092, - [SMALL_STATE(77)] = 5138, - [SMALL_STATE(78)] = 5184, - [SMALL_STATE(79)] = 5230, - [SMALL_STATE(80)] = 5276, - [SMALL_STATE(81)] = 5322, - [SMALL_STATE(82)] = 5370, - [SMALL_STATE(83)] = 5416, - [SMALL_STATE(84)] = 5462, - [SMALL_STATE(85)] = 5508, - [SMALL_STATE(86)] = 5554, - [SMALL_STATE(87)] = 5600, - [SMALL_STATE(88)] = 5646, - [SMALL_STATE(89)] = 5692, - [SMALL_STATE(90)] = 5738, - [SMALL_STATE(91)] = 5784, - [SMALL_STATE(92)] = 5830, - [SMALL_STATE(93)] = 5876, - [SMALL_STATE(94)] = 5920, - [SMALL_STATE(95)] = 5968, - [SMALL_STATE(96)] = 6013, - [SMALL_STATE(97)] = 6054, - [SMALL_STATE(98)] = 6099, - [SMALL_STATE(99)] = 6140, - [SMALL_STATE(100)] = 6185, - [SMALL_STATE(101)] = 6225, - [SMALL_STATE(102)] = 6264, - [SMALL_STATE(103)] = 6321, - [SMALL_STATE(104)] = 6394, - [SMALL_STATE(105)] = 6459, - [SMALL_STATE(106)] = 6526, - [SMALL_STATE(107)] = 6567, - [SMALL_STATE(108)] = 6636, - [SMALL_STATE(109)] = 6677, - [SMALL_STATE(110)] = 6738, - [SMALL_STATE(111)] = 6811, - [SMALL_STATE(112)] = 6850, - [SMALL_STATE(113)] = 6889, - [SMALL_STATE(114)] = 6930, - [SMALL_STATE(115)] = 6969, - [SMALL_STATE(116)] = 7008, - [SMALL_STATE(117)] = 7047, - [SMALL_STATE(118)] = 7098, - [SMALL_STATE(119)] = 7143, - [SMALL_STATE(120)] = 7190, - [SMALL_STATE(121)] = 7243, - [SMALL_STATE(122)] = 7298, - [SMALL_STATE(123)] = 7357, - [SMALL_STATE(124)] = 7395, - [SMALL_STATE(125)] = 7433, - [SMALL_STATE(126)] = 7471, - [SMALL_STATE(127)] = 7519, - [SMALL_STATE(128)] = 7557, - [SMALL_STATE(129)] = 7595, - [SMALL_STATE(130)] = 7633, - [SMALL_STATE(131)] = 7671, - [SMALL_STATE(132)] = 7709, - [SMALL_STATE(133)] = 7747, - [SMALL_STATE(134)] = 7785, - [SMALL_STATE(135)] = 7823, - [SMALL_STATE(136)] = 7861, - [SMALL_STATE(137)] = 7899, - [SMALL_STATE(138)] = 7969, - [SMALL_STATE(139)] = 8038, - [SMALL_STATE(140)] = 8107, - [SMALL_STATE(141)] = 8176, - [SMALL_STATE(142)] = 8243, - [SMALL_STATE(143)] = 8310, - [SMALL_STATE(144)] = 8379, - [SMALL_STATE(145)] = 8445, - [SMALL_STATE(146)] = 8511, - [SMALL_STATE(147)] = 8577, - [SMALL_STATE(148)] = 8643, - [SMALL_STATE(149)] = 8709, - [SMALL_STATE(150)] = 8775, - [SMALL_STATE(151)] = 8828, - [SMALL_STATE(152)] = 8881, - [SMALL_STATE(153)] = 8934, - [SMALL_STATE(154)] = 8987, - [SMALL_STATE(155)] = 9040, - [SMALL_STATE(156)] = 9093, - [SMALL_STATE(157)] = 9146, - [SMALL_STATE(158)] = 9199, - [SMALL_STATE(159)] = 9252, - [SMALL_STATE(160)] = 9305, - [SMALL_STATE(161)] = 9358, - [SMALL_STATE(162)] = 9411, - [SMALL_STATE(163)] = 9464, - [SMALL_STATE(164)] = 9490, - [SMALL_STATE(165)] = 9517, - [SMALL_STATE(166)] = 9542, - [SMALL_STATE(167)] = 9567, - [SMALL_STATE(168)] = 9594, - [SMALL_STATE(169)] = 9616, - [SMALL_STATE(170)] = 9638, - [SMALL_STATE(171)] = 9660, - [SMALL_STATE(172)] = 9682, - [SMALL_STATE(173)] = 9704, - [SMALL_STATE(174)] = 9730, - [SMALL_STATE(175)] = 9758, - [SMALL_STATE(176)] = 9780, - [SMALL_STATE(177)] = 9800, - [SMALL_STATE(178)] = 9820, - [SMALL_STATE(179)] = 9840, - [SMALL_STATE(180)] = 9868, - [SMALL_STATE(181)] = 9896, - [SMALL_STATE(182)] = 9914, - [SMALL_STATE(183)] = 9934, - [SMALL_STATE(184)] = 9956, - [SMALL_STATE(185)] = 9979, - [SMALL_STATE(186)] = 10002, - [SMALL_STATE(187)] = 10023, - [SMALL_STATE(188)] = 10044, - [SMALL_STATE(189)] = 10067, - [SMALL_STATE(190)] = 10088, - [SMALL_STATE(191)] = 10106, - [SMALL_STATE(192)] = 10121, - [SMALL_STATE(193)] = 10136, - [SMALL_STATE(194)] = 10150, - [SMALL_STATE(195)] = 10164, - [SMALL_STATE(196)] = 10178, - [SMALL_STATE(197)] = 10192, - [SMALL_STATE(198)] = 10206, - [SMALL_STATE(199)] = 10220, - [SMALL_STATE(200)] = 10234, - [SMALL_STATE(201)] = 10248, - [SMALL_STATE(202)] = 10258, - [SMALL_STATE(203)] = 10272, - [SMALL_STATE(204)] = 10286, - [SMALL_STATE(205)] = 10298, - [SMALL_STATE(206)] = 10312, - [SMALL_STATE(207)] = 10323, - [SMALL_STATE(208)] = 10334, - [SMALL_STATE(209)] = 10345, - [SMALL_STATE(210)] = 10356, - [SMALL_STATE(211)] = 10367, - [SMALL_STATE(212)] = 10376, - [SMALL_STATE(213)] = 10387, - [SMALL_STATE(214)] = 10398, - [SMALL_STATE(215)] = 10409, - [SMALL_STATE(216)] = 10418, - [SMALL_STATE(217)] = 10429, - [SMALL_STATE(218)] = 10440, - [SMALL_STATE(219)] = 10449, - [SMALL_STATE(220)] = 10460, - [SMALL_STATE(221)] = 10469, - [SMALL_STATE(222)] = 10480, - [SMALL_STATE(223)] = 10489, - [SMALL_STATE(224)] = 10497, - [SMALL_STATE(225)] = 10505, - [SMALL_STATE(226)] = 10513, - [SMALL_STATE(227)] = 10521, - [SMALL_STATE(228)] = 10529, - [SMALL_STATE(229)] = 10537, - [SMALL_STATE(230)] = 10545, - [SMALL_STATE(231)] = 10553, - [SMALL_STATE(232)] = 10561, - [SMALL_STATE(233)] = 10569, - [SMALL_STATE(234)] = 10577, - [SMALL_STATE(235)] = 10585, - [SMALL_STATE(236)] = 10593, - [SMALL_STATE(237)] = 10601, + [SMALL_STATE(8)] = 95, + [SMALL_STATE(9)] = 190, + [SMALL_STATE(10)] = 285, + [SMALL_STATE(11)] = 380, + [SMALL_STATE(12)] = 475, + [SMALL_STATE(13)] = 564, + [SMALL_STATE(14)] = 653, + [SMALL_STATE(15)] = 742, + [SMALL_STATE(16)] = 831, + [SMALL_STATE(17)] = 920, + [SMALL_STATE(18)] = 1009, + [SMALL_STATE(19)] = 1098, + [SMALL_STATE(20)] = 1187, + [SMALL_STATE(21)] = 1276, + [SMALL_STATE(22)] = 1365, + [SMALL_STATE(23)] = 1454, + [SMALL_STATE(24)] = 1543, + [SMALL_STATE(25)] = 1632, + [SMALL_STATE(26)] = 1721, + [SMALL_STATE(27)] = 1810, + [SMALL_STATE(28)] = 1863, + [SMALL_STATE(29)] = 1952, + [SMALL_STATE(30)] = 2041, + [SMALL_STATE(31)] = 2130, + [SMALL_STATE(32)] = 2219, + [SMALL_STATE(33)] = 2308, + [SMALL_STATE(34)] = 2397, + [SMALL_STATE(35)] = 2486, + [SMALL_STATE(36)] = 2575, + [SMALL_STATE(37)] = 2664, + [SMALL_STATE(38)] = 2753, + [SMALL_STATE(39)] = 2842, + [SMALL_STATE(40)] = 2931, + [SMALL_STATE(41)] = 3020, + [SMALL_STATE(42)] = 3109, + [SMALL_STATE(43)] = 3198, + [SMALL_STATE(44)] = 3287, + [SMALL_STATE(45)] = 3376, + [SMALL_STATE(46)] = 3465, + [SMALL_STATE(47)] = 3554, + [SMALL_STATE(48)] = 3643, + [SMALL_STATE(49)] = 3732, + [SMALL_STATE(50)] = 3821, + [SMALL_STATE(51)] = 3910, + [SMALL_STATE(52)] = 3999, + [SMALL_STATE(53)] = 4053, + [SMALL_STATE(54)] = 4107, + [SMALL_STATE(55)] = 4161, + [SMALL_STATE(56)] = 4212, + [SMALL_STATE(57)] = 4265, + [SMALL_STATE(58)] = 4314, + [SMALL_STATE(59)] = 4392, + [SMALL_STATE(60)] = 4476, + [SMALL_STATE(61)] = 4526, + [SMALL_STATE(62)] = 4610, + [SMALL_STATE(63)] = 4660, + [SMALL_STATE(64)] = 4744, + [SMALL_STATE(65)] = 4792, + [SMALL_STATE(66)] = 4840, + [SMALL_STATE(67)] = 4888, + [SMALL_STATE(68)] = 4936, + [SMALL_STATE(69)] = 4996, + [SMALL_STATE(70)] = 5050, + [SMALL_STATE(71)] = 5106, + [SMALL_STATE(72)] = 5168, + [SMALL_STATE(73)] = 5234, + [SMALL_STATE(74)] = 5304, + [SMALL_STATE(75)] = 5372, + [SMALL_STATE(76)] = 5444, + [SMALL_STATE(77)] = 5520, + [SMALL_STATE(78)] = 5600, + [SMALL_STATE(79)] = 5684, + [SMALL_STATE(80)] = 5746, + [SMALL_STATE(81)] = 5794, + [SMALL_STATE(82)] = 5844, + [SMALL_STATE(83)] = 5891, + [SMALL_STATE(84)] = 5938, + [SMALL_STATE(85)] = 5985, + [SMALL_STATE(86)] = 6032, + [SMALL_STATE(87)] = 6079, + [SMALL_STATE(88)] = 6128, + [SMALL_STATE(89)] = 6175, + [SMALL_STATE(90)] = 6222, + [SMALL_STATE(91)] = 6269, + [SMALL_STATE(92)] = 6316, + [SMALL_STATE(93)] = 6363, + [SMALL_STATE(94)] = 6410, + [SMALL_STATE(95)] = 6457, + [SMALL_STATE(96)] = 6504, + [SMALL_STATE(97)] = 6551, + [SMALL_STATE(98)] = 6598, + [SMALL_STATE(99)] = 6645, + [SMALL_STATE(100)] = 6692, + [SMALL_STATE(101)] = 6741, + [SMALL_STATE(102)] = 6786, + [SMALL_STATE(103)] = 6832, + [SMALL_STATE(104)] = 6878, + [SMALL_STATE(105)] = 6920, + [SMALL_STATE(106)] = 6962, + [SMALL_STATE(107)] = 7008, + [SMALL_STATE(108)] = 7049, + [SMALL_STATE(109)] = 7091, + [SMALL_STATE(110)] = 7143, + [SMALL_STATE(111)] = 7189, + [SMALL_STATE(112)] = 7229, + [SMALL_STATE(113)] = 7283, + [SMALL_STATE(114)] = 7331, + [SMALL_STATE(115)] = 7393, + [SMALL_STATE(116)] = 7449, + [SMALL_STATE(117)] = 7509, + [SMALL_STATE(118)] = 7575, + [SMALL_STATE(119)] = 7643, + [SMALL_STATE(120)] = 7701, + [SMALL_STATE(121)] = 7775, + [SMALL_STATE(122)] = 7849, + [SMALL_STATE(123)] = 7891, + [SMALL_STATE(124)] = 7965, + [SMALL_STATE(125)] = 8007, + [SMALL_STATE(126)] = 8047, + [SMALL_STATE(127)] = 8117, + [SMALL_STATE(128)] = 8157, + [SMALL_STATE(129)] = 8197, + [SMALL_STATE(130)] = 8237, + [SMALL_STATE(131)] = 8311, + [SMALL_STATE(132)] = 8351, + [SMALL_STATE(133)] = 8390, + [SMALL_STATE(134)] = 8429, + [SMALL_STATE(135)] = 8468, + [SMALL_STATE(136)] = 8507, + [SMALL_STATE(137)] = 8546, + [SMALL_STATE(138)] = 8585, + [SMALL_STATE(139)] = 8624, + [SMALL_STATE(140)] = 8663, + [SMALL_STATE(141)] = 8702, + [SMALL_STATE(142)] = 8741, + [SMALL_STATE(143)] = 8780, + [SMALL_STATE(144)] = 8819, + [SMALL_STATE(145)] = 8858, + [SMALL_STATE(146)] = 8906, + [SMALL_STATE(147)] = 8976, + [SMALL_STATE(148)] = 9045, + [SMALL_STATE(149)] = 9112, + [SMALL_STATE(150)] = 9181, + [SMALL_STATE(151)] = 9250, + [SMALL_STATE(152)] = 9317, + [SMALL_STATE(153)] = 9386, + [SMALL_STATE(154)] = 9452, + [SMALL_STATE(155)] = 9518, + [SMALL_STATE(156)] = 9584, + [SMALL_STATE(157)] = 9650, + [SMALL_STATE(158)] = 9716, + [SMALL_STATE(159)] = 9782, + [SMALL_STATE(160)] = 9848, + [SMALL_STATE(161)] = 9901, + [SMALL_STATE(162)] = 9954, + [SMALL_STATE(163)] = 10007, + [SMALL_STATE(164)] = 10060, + [SMALL_STATE(165)] = 10113, + [SMALL_STATE(166)] = 10166, + [SMALL_STATE(167)] = 10219, + [SMALL_STATE(168)] = 10272, + [SMALL_STATE(169)] = 10325, + [SMALL_STATE(170)] = 10378, + [SMALL_STATE(171)] = 10431, + [SMALL_STATE(172)] = 10484, + [SMALL_STATE(173)] = 10537, + [SMALL_STATE(174)] = 10564, + [SMALL_STATE(175)] = 10590, + [SMALL_STATE(176)] = 10617, + [SMALL_STATE(177)] = 10642, + [SMALL_STATE(178)] = 10669, + [SMALL_STATE(179)] = 10691, + [SMALL_STATE(180)] = 10713, + [SMALL_STATE(181)] = 10735, + [SMALL_STATE(182)] = 10757, + [SMALL_STATE(183)] = 10779, + [SMALL_STATE(184)] = 10799, + [SMALL_STATE(185)] = 10821, + [SMALL_STATE(186)] = 10841, + [SMALL_STATE(187)] = 10869, + [SMALL_STATE(188)] = 10895, + [SMALL_STATE(189)] = 10923, + [SMALL_STATE(190)] = 10951, + [SMALL_STATE(191)] = 10971, + [SMALL_STATE(192)] = 10991, + [SMALL_STATE(193)] = 11013, + [SMALL_STATE(194)] = 11031, + [SMALL_STATE(195)] = 11052, + [SMALL_STATE(196)] = 11073, + [SMALL_STATE(197)] = 11096, + [SMALL_STATE(198)] = 11119, + [SMALL_STATE(199)] = 11142, + [SMALL_STATE(200)] = 11163, + [SMALL_STATE(201)] = 11181, + [SMALL_STATE(202)] = 11196, + [SMALL_STATE(203)] = 11211, + [SMALL_STATE(204)] = 11226, + [SMALL_STATE(205)] = 11241, + [SMALL_STATE(206)] = 11256, + [SMALL_STATE(207)] = 11271, + [SMALL_STATE(208)] = 11286, + [SMALL_STATE(209)] = 11300, + [SMALL_STATE(210)] = 11314, + [SMALL_STATE(211)] = 11328, + [SMALL_STATE(212)] = 11340, + [SMALL_STATE(213)] = 11354, + [SMALL_STATE(214)] = 11368, + [SMALL_STATE(215)] = 11382, + [SMALL_STATE(216)] = 11396, + [SMALL_STATE(217)] = 11410, + [SMALL_STATE(218)] = 11420, + [SMALL_STATE(219)] = 11434, + [SMALL_STATE(220)] = 11448, + [SMALL_STATE(221)] = 11462, + [SMALL_STATE(222)] = 11473, + [SMALL_STATE(223)] = 11482, + [SMALL_STATE(224)] = 11491, + [SMALL_STATE(225)] = 11500, + [SMALL_STATE(226)] = 11511, + [SMALL_STATE(227)] = 11520, + [SMALL_STATE(228)] = 11529, + [SMALL_STATE(229)] = 11538, + [SMALL_STATE(230)] = 11549, + [SMALL_STATE(231)] = 11560, + [SMALL_STATE(232)] = 11571, + [SMALL_STATE(233)] = 11582, + [SMALL_STATE(234)] = 11593, + [SMALL_STATE(235)] = 11604, + [SMALL_STATE(236)] = 11615, + [SMALL_STATE(237)] = 11626, + [SMALL_STATE(238)] = 11637, + [SMALL_STATE(239)] = 11648, + [SMALL_STATE(240)] = 11656, + [SMALL_STATE(241)] = 11664, + [SMALL_STATE(242)] = 11672, + [SMALL_STATE(243)] = 11680, + [SMALL_STATE(244)] = 11688, + [SMALL_STATE(245)] = 11696, + [SMALL_STATE(246)] = 11704, + [SMALL_STATE(247)] = 11712, + [SMALL_STATE(248)] = 11720, + [SMALL_STATE(249)] = 11728, + [SMALL_STATE(250)] = 11736, + [SMALL_STATE(251)] = 11744, + [SMALL_STATE(252)] = 11752, + [SMALL_STATE(253)] = 11760, + [SMALL_STATE(254)] = 11768, }; 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 = false}}, SHIFT(95), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), - [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(132), - [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), - [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), - [25] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), - [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), - [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(49), - [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), - [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(31), - [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), - [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(33), - [51] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), - [55] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [57] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38), - [63] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [67] = {.entry = {.count = 1, .reusable = false}}, SHIFT(126), - [69] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(212), - [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), - [75] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(95), - [78] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(125), - [81] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(125), - [84] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(92), - [87] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(224), - [90] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(225), - [93] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(226), - [96] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(132), - [99] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(49), - [102] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(20), - [105] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(6), - [108] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(11), - [111] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [113] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(151), - [116] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), - [118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), - [120] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), - [122] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), - [124] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), - [126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), - [128] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), - [130] = {.entry = {.count = 1, .reusable = false}}, SHIFT(24), - [132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [134] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88), - [136] = {.entry = {.count = 1, .reusable = false}}, SHIFT(12), - [138] = {.entry = {.count = 1, .reusable = false}}, SHIFT(90), - [140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [142] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), - [144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), - [148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), - [150] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), - [152] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), - [154] = {.entry = {.count = 1, .reusable = false}}, SHIFT(223), - [156] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), - [158] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), - [160] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), - [162] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), - [164] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(223), - [167] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [169] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [171] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), - [173] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [175] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [177] = {.entry = {.count = 1, .reusable = false}}, SHIFT(213), - [179] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 17), - [181] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 17), - [183] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 18), - [185] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 18), - [187] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), - [191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 12), - [193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 12), - [195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), - [197] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [201] = {.entry = {.count = 1, .reusable = true}}, SHIFT(191), - [203] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), - [205] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [207] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [209] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), - [211] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 8), - [213] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 8), - [215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 10), - [217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 10), - [219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 11), - [221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 11), - [223] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 15), - [225] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 15), - [227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [231] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [235] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [239] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), - [241] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), - [243] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), - [245] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), - [247] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), - [249] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), - [251] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [253] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [255] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 9), - [257] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 9), - [259] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 16), - [261] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 16), - [263] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 21), - [265] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 21), - [267] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 14), - [269] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 14), - [271] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [273] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [275] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [277] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [279] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 20), - [281] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 20), - [283] = {.entry = {.count = 1, .reusable = false}}, SHIFT(207), - [285] = {.entry = {.count = 1, .reusable = false}}, SHIFT(115), - [287] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), - [289] = {.entry = {.count = 1, .reusable = false}}, SHIFT(235), - [291] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(235), - [294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), - [296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), - [300] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), - [302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(45), - [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), - [310] = {.entry = {.count = 1, .reusable = false}}, SHIFT(46), - [312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), - [314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), - [316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), - [318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [322] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), - [324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), - [328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [330] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), - [332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), - [334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), - [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), - [338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), - [340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 13), - [342] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 19), - [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [348] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), - [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), - [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), - [358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), - [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), - [362] = {.entry = {.count = 1, .reusable = false}}, SHIFT(164), - [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), - [366] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [368] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), - [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), - [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), - [374] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 12), - [376] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 12), - [378] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), - [380] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), - [382] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [384] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), - [388] = {.entry = {.count = 1, .reusable = false}}, SHIFT(157), - [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), - [392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), - [394] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), - [396] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), - [398] = {.entry = {.count = 1, .reusable = false}}, SHIFT(156), - [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), - [402] = {.entry = {.count = 1, .reusable = false}}, SHIFT(150), - [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), - [408] = {.entry = {.count = 1, .reusable = false}}, SHIFT(158), - [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), - [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), - [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), - [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), - [418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), - [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), - [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), - [424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [428] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(221), - [431] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), - [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), - [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), - [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [443] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [445] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(208), - [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), - [452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), - [454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), - [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), - [458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), - [460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), - [462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), - [464] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 7), - [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), - [472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), - [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), - [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), - [478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), - [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), - [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), - [484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), - [486] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [488] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), - [492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), - [496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), - [498] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [500] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [502] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218), - [508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), - [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), - [512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), - [514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), - [516] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), - [522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), - [524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), - [526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), - [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), - [530] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(102), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(99), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(141), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(205), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), + [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), + [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), + [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(33), + [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(34), + [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), + [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(37), + [57] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), + [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(145), + [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), + [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [77] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(102), + [80] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(143), + [83] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(143), + [86] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(99), + [89] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(242), + [92] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(251), + [95] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(240), + [98] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(141), + [101] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(41), + [104] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(26), + [107] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(205), + [110] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(5), + [113] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(8), + [116] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [118] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(167), + [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [129] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), + [131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(83), + [135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), + [137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88), + [139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), + [143] = {.entry = {.count = 1, .reusable = false}}, SHIFT(203), + [145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), + [157] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), + [159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), + [161] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(249), + [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), + [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), + [168] = {.entry = {.count = 1, .reusable = false}}, SHIFT(249), + [170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), + [172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), + [174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [178] = {.entry = {.count = 1, .reusable = false}}, SHIFT(231), + [180] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [182] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 12), + [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 12), + [190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), + [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 18), + [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 18), + [198] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [202] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), + [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), + [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), + [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [210] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), + [214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 0), + [216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 0), + [218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 8), + [220] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 8), + [222] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 10), + [224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 10), + [226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 11), + [228] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 11), + [230] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 0), + [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 0), + [234] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 15), + [236] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 15), + [238] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 17), + [240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 17), + [242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 14), + [244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 14), + [246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 9), + [248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 9), + [250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [254] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), + [256] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), + [258] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), + [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), + [274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 16), + [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 16), + [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), + [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), + [290] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 20), + [292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 20), + [294] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 21), + [296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 21), + [298] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), + [300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), + [302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(238), + [304] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), + [306] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(241), + [309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), + [311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), + [313] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [315] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), + [317] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), + [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [325] = {.entry = {.count = 1, .reusable = false}}, SHIFT(49), + [327] = {.entry = {.count = 1, .reusable = false}}, SHIFT(50), + [329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [331] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), + [333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [339] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), + [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [345] = {.entry = {.count = 1, .reusable = false}}, SHIFT(21), + [347] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), + [349] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), + [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), + [353] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 19), + [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [359] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 13), + [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), + [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), + [369] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181), + [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), + [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), + [379] = {.entry = {.count = 1, .reusable = false}}, SHIFT(175), + [381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [383] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [385] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), + [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237), + [389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), + [391] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 12), + [393] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 12), + [395] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), + [397] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), + [399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [401] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), + [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), + [407] = {.entry = {.count = 1, .reusable = false}}, SHIFT(164), + [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), + [411] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), + [413] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), + [415] = {.entry = {.count = 1, .reusable = false}}, SHIFT(166), + [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), + [419] = {.entry = {.count = 1, .reusable = false}}, SHIFT(169), + [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), + [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [425] = {.entry = {.count = 1, .reusable = false}}, SHIFT(160), + [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), + [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), + [445] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(221), + [448] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [450] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(246), + [453] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), + [455] = {.entry = {.count = 1, .reusable = false}}, SHIFT(246), + [457] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), + [459] = {.entry = {.count = 1, .reusable = false}}, SHIFT(29), + [461] = {.entry = {.count = 1, .reusable = false}}, SHIFT(12), + [463] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), + [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), + [469] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [471] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(232), + [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), + [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), + [478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), + [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), + [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [484] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 7), + [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), + [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218), + [498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), + [502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(209), + [504] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [506] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [508] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), + [512] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [514] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [516] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 0), + [518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), + [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), + [526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), + [532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(183), + [534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), + [536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), + [538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), + [542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), + [546] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [548] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), + [560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), + [562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), + [566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/let_in.txt b/crates/tree-sitter-command-cad-model/test/corpus/let_in.txt new file mode 100644 index 0000000..2561590 --- /dev/null +++ b/crates/tree-sitter-command-cad-model/test/corpus/let_in.txt @@ -0,0 +1,65 @@ +================== +Empty +================== + +let +in +"" + +--- + +(source_file + (expression + (let_in + (expression + (string))))) + +================== +1 Assignment +================== + +let + first = 1; +in +"" + +--- + +(source_file + (expression + (let_in + (let_in_assignment + (identifier) + (expression + (scalar + (number)))) + (expression + (string))))) + +================== +2 Assignments +================== + +let + first = 1; + second = 2; +in +"" + +--- + +(source_file + (expression + (let_in + (let_in_assignment + (identifier) + (expression + (scalar + (number)))) + (let_in_assignment + (identifier) + (expression + (scalar + (number)))) + (expression + (string))))) From 9019bcf4d17a45f09cd1564a61d3f9eba7709258 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 23 Nov 2025 11:37:48 -0500 Subject: [PATCH 030/106] Include Rust analyzier --- flake.lock | 39 +++++++++++++++++++++++++++++++++++++++ flake.nix | 51 +++++++++++++++++++++++++++++++++------------------ 2 files changed, 72 insertions(+), 18 deletions(-) diff --git a/flake.lock b/flake.lock index cbf0f57..383acef 100644 --- a/flake.lock +++ b/flake.lock @@ -15,6 +15,27 @@ "type": "github" } }, + "fenix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1763880175, + "narHash": "sha256-WfItZn6duisxCxyltbu7Hs7kxzNeylgZGOwCYwHe26g=", + "owner": "nix-community", + "repo": "fenix", + "rev": "a563f057979806c59da53070297502eb7af22f62", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, "flake-utils": { "inputs": { "systems": "systems" @@ -52,10 +73,28 @@ "root": { "inputs": { "crane": "crane", + "fenix": "fenix", "flake-utils": "flake-utils", "nixpkgs": "nixpkgs" } }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1763846202, + "narHash": "sha256-f5PvQONttEQCjnQ52zAEVJvXDZ5l2gbItLfDyfcyGgk=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "50621856a594a357c3aff0c5176ba8db4118133d", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, "systems": { "locked": { "lastModified": 1681028828, diff --git a/flake.nix b/flake.nix index 399be79..1682609 100644 --- a/flake.nix +++ b/flake.nix @@ -5,6 +5,10 @@ nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; crane.url = "github:ipetkov/crane"; + fenix = { + url = "github:nix-community/fenix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = { @@ -12,6 +16,7 @@ nixpkgs, flake-utils, crane, + fenix, ... }: flake-utils.lib.eachDefaultSystem (system: @@ -19,26 +24,18 @@ pkgs = import nixpkgs { inherit system; }; - craneLib = crane.mkLib pkgs; - in + fenix-pkgs = fenix.packages.${system}; + fenix-channel = (fenix-pkgs.stable); + + craneLib = (crane.mkLib pkgs).overrideScope (final: prev: { + cargo = fenix-channel.cargo; + rustc = fenix-channel.rustc; + }); + in rec { - devShells.default = with pkgs; craneLib.devShell { - buildInputs = [ - bashInteractive - nodejs_24 - tree-sitter - openssl - pkg-config - ]; - - shellHook = '' - export SHELL=${pkgs.bashInteractive}/bin/bash - ''; - }; - - packages.default = with pkgs; - craneLib.buildPackage { + packages.default = with pkgs; craneLib.buildPackage { nativeBuildInputs = [ + openssl pkg-config ]; @@ -49,6 +46,24 @@ src = craneLib.cleanCargoSource ./.; strictDeps = true; }; + + devShells.default = with pkgs; pkgs.mkShell { + inputsFrom = [ packages.default ]; + buildInputs = [ + bashInteractive + nodejs_24 + tree-sitter + fenix-pkgs.rust-analyzer + fenix-channel.rustfmt + fenix-channel.rustc + fenix-channel.cargo + ]; + + shellHook = '' + export SHELL=${pkgs.bashInteractive}/bin/bash + ''; + }; + } ); } From 6a85e29a9464375baad66e15531a2a93b36334be Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 23 Nov 2025 11:38:02 -0500 Subject: [PATCH 031/106] Update for new parser (as much as possible without the new syntax) --- Cargo.lock | 44 ++- crates/interpreter/Cargo.toml | 6 +- crates/interpreter/src/compile/expressions.rs | 310 +++++------------- crates/interpreter/src/compile/mod.rs | 2 +- crates/interpreter/src/execution/mod.rs | 237 +------------ .../src/execution/standard_environment.rs | 18 +- .../src/execution/values/closure.rs | 48 +-- .../src/execution/values/dictionary.rs | 8 +- .../interpreter/src/execution/values/mod.rs | 6 +- .../src/execution/values/value_type.rs | 6 +- .../interpreter/src/execution/values/void.rs | 8 +- crates/interpreter/src/lib.rs | 4 +- flake.lock | 12 +- 13 files changed, 162 insertions(+), 547 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 06c9b4b..0ae1a08 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -218,9 +218,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "check_keyword" -version = "0.3.1" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3678a4fc14c47dce76127d66f9b2637ff497af665d5618f1f756f4ad1b4a5b1" +checksum = "0dcba1e35fcf6c9350d9fb4863d87c66e5e37f1583f883560dca2c9320840bcc" dependencies = [ "phf", ] @@ -371,9 +371,9 @@ checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" [[package]] name = "convert_case" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" dependencies = [ "unicode-segmentation", ] @@ -462,6 +462,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "either" version = "1.15.0" @@ -1685,6 +1691,12 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +[[package]] +name = "rustc-stable-hash" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "781442f29170c5c93b7185ad559492601acdc71d5bb0706f5868094f45cfcd08" + [[package]] name = "rustc_version" version = "0.4.1" @@ -1778,6 +1790,7 @@ version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ + "indexmap", "itoa", "memchr", "ryu", @@ -2059,13 +2072,14 @@ dependencies = [ [[package]] name = "tree-sitter" -version = "0.24.7" +version = "0.25.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5387dffa7ffc7d2dae12b50c6f7aab8ff79d6210147c6613561fc3d474c6f75" +checksum = "78f873475d258561b06f1c595d93308a7ed124d9977cb26b148c2084a4a3cc87" dependencies = [ "cc", "regex", "regex-syntax", + "serde_json", "streaming-iterator", "tree-sitter-language", ] @@ -2095,9 +2109,9 @@ dependencies = [ [[package]] name = "type-sitter" -version = "0.6.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07c6b4142a07c6940da2617c3c595728ec5b5df640c5545e980d90c1352abe57" +checksum = "41d7b6c3bc4c60ecee2147ecb3cd7820fe9ee1df4251e1b2b8b5a214fe0084ba" dependencies = [ "type-sitter-lib", "type-sitter-proc", @@ -2105,13 +2119,14 @@ dependencies = [ [[package]] name = "type-sitter-gen" -version = "0.6.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b928ec2e0630b379a3b17c69a37d70baef172ad9fbbeb61dc1e516b1d915686" +checksum = "95ad6a9e8aa527b2c037cd5016d6291e197c98eb6160ff09b25f2398374a3003" dependencies = [ "cc", "check_keyword", "convert_case", + "dunce", "enum-map", "join-lazy-fmt", "libc", @@ -2120,6 +2135,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", + "rustc-stable-hash", "serde", "serde_json", "slice-group-by", @@ -2131,9 +2147,9 @@ dependencies = [ [[package]] name = "type-sitter-lib" -version = "0.6.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "286d4544ef134483a555889f5d67c8a98bab5fe6c1718871eaac80a00c99d088" +checksum = "092e2a9b5f4eb14bdd2246eb1557b2b99e67fe43be3e0411535d9483e73236b7" dependencies = [ "streaming-iterator", "tree-sitter", @@ -2141,9 +2157,9 @@ dependencies = [ [[package]] name = "type-sitter-proc" -version = "0.6.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad28647e19d26aac03d091758449d4ef30913145bbec602ce8fdd9e287d81802" +checksum = "4240aa23c38a18dc53f8422374fac3d7514654ec28258ef173b53ba9bee37a6e" dependencies = [ "syn 2.0.100", "type-sitter-gen", diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index d7e742f..8152319 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -6,9 +6,9 @@ edition = "2021" [dependencies] common_data_types = { path = "../common_data_types" } units = { path = "../units" } -tree-sitter = "0.24.4" +tree-sitter = "0.25" tree-sitter-command-cad-model = { path = "../tree-sitter-command-cad-model" } -type-sitter = "0.6" +type-sitter = "0.8" unwrap-enum = "0.1.0" file-guard = "0.2.0" enum_dispatch = "0.3" @@ -19,5 +19,5 @@ fortuples = "0.9" hashable-map = "0.4.0" [build-dependencies] -type-sitter-gen = "0.6" +type-sitter-gen = "0.8" tree-sitter-command-cad-model = { path = "../tree-sitter-command-cad-model" } diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 6f993d6..b4dfaf7 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -6,7 +6,7 @@ use tree_sitter::Range; use type_sitter::{HasChild, Node}; use unwrap_enum::EnumAs; -use super::{nodes, AstNode, Error, Parse, Statement}; +use super::{nodes, AstNode, Error, Parse}; #[derive(Debug, Eq, PartialEq)] pub struct InvalidUnitError<'t, 'i> { @@ -43,14 +43,12 @@ pub enum Expression { List(AstNode>>), Parenthesis(Box>), Path(AstNode), - ProceduralBlock(AstNode), Scalar(AstNode), SignedInteger(AstNode), String(AstNode), StructDefinition(AstNode), UnaryExpression(AstNode>), UnsignedInteger(AstNode), - Void(AstNode<()>), FunctionCall(AstNode), MethodCall(AstNode), } @@ -82,38 +80,6 @@ impl<'t> Parse<'t, nodes::anon_unions::Path_StructDefinition<'t>> for Expression } } -impl<'t> Parse<'t, nodes::anon_unions::Path_StructDefinition_Void<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::anon_unions::Path_StructDefinition_Void<'t>, - ) -> Result, Error<'t, 'i>> { - match value { - nodes::anon_unions::Path_StructDefinition_Void::Path(path) => Ok(AstNode::new( - file, - &path, - Self::Path(IdentityPath::parse(file, input, path)?), - )), - nodes::anon_unions::Path_StructDefinition_Void::StructDefinition(struct_definition) => { - Ok(AstNode::new( - file, - &struct_definition, - Self::StructDefinition(StructDefinition::parse( - file, - input, - struct_definition, - )?), - )) - } - nodes::anon_unions::Path_StructDefinition_Void::Void(void) => Ok(AstNode::new( - file, - &value, - Expression::Void(AstNode::new(file, &void, ())), - )), - } - } -} - impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for Expression { fn parse<'i>( file: &Arc, @@ -245,20 +211,6 @@ impl<'t> Parse<'t, nodes::Path<'t>> for Expression { } } -impl<'t> Parse<'t, nodes::ProceduralBlock<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::ProceduralBlock<'t>, - ) -> Result, Error<'t, 'i>> { - Ok(AstNode::new( - file, - &value, - Self::ProceduralBlock(ProceduralBlock::parse(file, input, value)?), - )) - } -} - impl<'t> Parse<'t, nodes::Scalar<'t>> for Expression { fn parse<'i>( file: &Arc, @@ -462,9 +414,6 @@ impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { ChildType::List(list) => Self::parse(file, input, list), ChildType::Parenthesis(parenthesis) => Self::parse(file, input, parenthesis), ChildType::Path(path) => Self::parse(file, input, path), - ChildType::ProceduralBlock(procedural_block) => { - Self::parse(file, input, procedural_block) - } ChildType::Scalar(scalar) => Self::parse(file, input, scalar), ChildType::SignedInteger(signed_integer) => Self::parse(file, input, signed_integer), ChildType::String(string) => Self::parse(file, input, string), @@ -477,13 +426,13 @@ impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { ChildType::UnsignedInteger(unsigned_integer) => { Self::parse(file, input, unsigned_integer) } - ChildType::Void(void) => Ok(AstNode::new( - file, - &value, - Self::Void(AstNode::new(file, &void, ())), - )), ChildType::FunctionCall(function_call) => Self::parse(file, input, function_call), ChildType::MethodCall(method_call) => Self::parse(file, input, method_call), + _ => { + // TODO we need to add formula types. + let remember_me = 0; + todo!() + } } } } @@ -572,7 +521,7 @@ impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for BinaryExpression { input: &'i str, value: nodes::BinaryExpression<'t>, ) -> Result, Error<'t, 'i>> { - use nodes::anon_unions::NotEq_And_AndAnd_Mul_MulMul_Add_Sub_DotDot_DotDotEq_Div_DivDiv_Lt_LtLt_LtEq_EqEq_Gt_GtEq_GtGt_BitXor_Or_OrOr as Operation; + type Operation<'t> = nodes::anon_unions::Anon40940481278423458606720242092326701826<'t>; let operation = value.op()?; @@ -734,36 +683,11 @@ impl<'t> Parse<'t, nodes::Scalar<'t>> for Scalar { } } -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct ProceduralBlock { - pub statements: Vec>, -} - -impl<'t> Parse<'t, nodes::ProceduralBlock<'t>> for ProceduralBlock { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::ProceduralBlock<'t>, - ) -> Result, Error<'t, 'i>> { - let mut cursor = value.walk(); - let mut statements = Vec::new(); - - for statement in value.statements(&mut cursor) { - let statement = statement?; - let statement = Statement::parse(file, input, statement)?; - - statements.push(statement); - } - - Ok(AstNode::new(file, &value, Self { statements })) - } -} - #[derive(Debug, Hash, Eq, PartialEq)] pub struct IfExpression { pub condition: AstNode>, - pub on_true: AstNode, - pub on_false: Option>, + pub on_true: AstNode>, + pub on_false: AstNode>, } impl<'t> Parse<'t, nodes::If<'t>> for IfExpression { @@ -775,15 +699,8 @@ impl<'t> Parse<'t, nodes::If<'t>> for IfExpression { let condition = value.condition()?; let condition = Expression::parse(file, input, condition)?.into_box(); - let on_true = ProceduralBlock::parse(file, input, value.on_true()?)?; - - let on_false = if let Some(on_false) = value.on_false() { - let on_false = on_false?; - let on_false = ProceduralBlock::parse(file, input, on_false)?; - Some(on_false) - } else { - None - }; + let on_true = Expression::parse(file, input, value.on_true()?)?.into_box(); + let on_false = Expression::parse(file, input, value.on_false()?)?.into_box(); Ok(AstNode::new( file, @@ -850,7 +767,6 @@ impl<'t> Parse<'t, nodes::DictionaryConstruction<'t>> for DictionaryConstruction #[derive(Debug, Hash, Eq, PartialEq)] pub struct ClosureDefinition { pub argument_type: AstNode, - pub captures: Vec>, pub return_type: AstNode, pub expression: AstNode>, } @@ -864,18 +780,6 @@ impl<'t> Parse<'t, nodes::ClosureDefinition<'t>> for ClosureDefinition { let argument = value.argument()?; let argument = Expression::parse(file, input, argument)?; - let captures = value.captured_variables()?; - let mut cursor = captures.walk(); - let mut identities = Vec::new(); - - for identity in captures.identifiers(&mut cursor) { - let identity = identity?; - - let text = String::parse(file, input, identity)?; - - identities.push(text); - } - let returns = value.result()?; let returns = Expression::parse(file, input, returns)?; @@ -891,7 +795,6 @@ impl<'t> Parse<'t, nodes::ClosureDefinition<'t>> for ClosureDefinition { &value, Self { argument_type: argument, - captures: identities, return_type: returns, expression, }, @@ -956,9 +859,8 @@ impl<'t> Parse<'t, nodes::StructDefinition<'t>> for StructDefinition { // There can only ever be one. let final_member = value.final_elements(&mut cursor).next(); - let variadic = match final_member { - Some(member) => { + Option::Some(member) => { let member = member?; match member { nodes::anon_unions::Comma_StructMember_VaradicDots::Comma(_comma) => false, @@ -970,7 +872,7 @@ impl<'t> Parse<'t, nodes::StructDefinition<'t>> for StructDefinition { nodes::anon_unions::Comma_StructMember_VaradicDots::VaradicDots(_) => true, } } - None => false, + Option::None => false, }; Ok(AstNode::new(file, &value, Self { members, variadic })) @@ -1122,28 +1024,20 @@ mod test { #[test] fn closure_definition() { - let root = full_compile("(,)[this, that] -> ~ {}"); + let root = full_compile("() -> std.None \"\""); let closure = root.node.as_closuredefinition().unwrap(); let closure_reference = closure.reference.clone(); let argument = &closure.node.argument_type; let argument_reference = argument.reference.clone(); - let captures = &closure.node.captures; - let this_reference = captures[0].reference.clone(); - let that_reference = captures[1].reference.clone(); - let returns = &closure.node.return_type; let returns_reference = returns.reference.clone(); - let returns_void_reference = returns.node.as_void().unwrap().reference.clone(); + let returns_path = returns.node.as_path().unwrap(); + let returns_path_reference = returns_path.reference.clone(); let expression = &closure.node.expression; let expression_reference = expression.reference.clone(); - let block_reference = expression - .node - .as_proceduralblock() - .unwrap() - .reference - .clone(); + let string_reference = expression.node.as_string().unwrap().reference.clone(); assert_eq!( root, @@ -1167,28 +1061,29 @@ mod test { } }) }, - captures: vec![ - AstNode { - reference: this_reference, - node: "this".to_string() - }, - AstNode { - reference: that_reference, - node: "that".to_string() - } - ], return_type: AstNode { reference: returns_reference, - node: Expression::Void(AstNode { - reference: returns_void_reference, - node: () + node: Expression::Path(AstNode { + reference: returns_path_reference, + node: IdentityPath { + path: vec![ + AstNode { + reference: returns_path.node.path[0].reference.clone(), + node: "std".into() + }, + AstNode { + reference: returns_path.node.path[1].reference.clone(), + node: "None".into() + } + ] + } }) }, expression: AstNode { reference: expression_reference, - node: Arc::new(Expression::ProceduralBlock(AstNode { - reference: block_reference, - node: ProceduralBlock { statements: vec![] } + node: Arc::new(Expression::String(AstNode { + reference: string_reference, + node: String::new() })) } }) @@ -1257,55 +1152,29 @@ mod test { ); } - #[test] - fn if_expression() { - let root = full_compile("if true {}"); - let if_expression = root.node.as_if().unwrap(); - let if_reference = if_expression.reference.clone(); - let condition = &if_expression.node.condition; - let condition_reference = condition.reference.clone(); - let boolean_reference = condition.node.as_boolean().unwrap().reference.clone(); - let true_block_reference = if_expression.node.on_true.reference.clone(); - - assert_eq!( - root, - AstNode { - reference: root.reference.clone(), - node: Expression::If(AstNode { - reference: if_reference, - node: IfExpression { - condition: AstNode { - reference: condition_reference, - node: Expression::Boolean(AstNode { - reference: boolean_reference, - node: true - }) - } - .into_box(), - on_true: AstNode { - reference: true_block_reference, - node: ProceduralBlock { statements: vec![] } - }, - on_false: None, - } - }) - } - ); - } - #[test] fn if_else_expression() { - let root = full_compile("if true {} else {}"); + let root = full_compile("if true \"true\" else \"false\""); let if_expression = root.node.as_if().unwrap(); let if_reference = if_expression.reference.clone(); let condition = &if_expression.node.condition; let condition_reference = condition.reference.clone(); let boolean_reference = condition.node.as_boolean().unwrap().reference.clone(); - let true_block_reference = if_expression.node.on_true.reference.clone(); - let false_block_reference = if_expression + let true_expression_reference = if_expression.node.on_true.reference.clone(); + let true_string_reference = if_expression + .node + .on_true + .node + .as_string() + .unwrap() + .reference + .clone(); + let false_expression_reference = if_expression.node.on_false.reference.clone(); + let false_string_reference = if_expression .node .on_false - .as_ref() + .node + .as_string() .unwrap() .reference .clone(); @@ -1326,13 +1195,21 @@ mod test { } .into_box(), on_true: AstNode { - reference: true_block_reference, - node: ProceduralBlock { statements: vec![] } - }, - on_false: Some(AstNode { - reference: false_block_reference, - node: ProceduralBlock { statements: vec![] } - }), + reference: true_expression_reference, + node: Expression::String(AstNode { + reference: true_string_reference, + node: String::from("true") + }) + } + .into_box(), + on_false: AstNode { + reference: false_expression_reference, + node: Expression::String(AstNode { + reference: false_string_reference, + node: String::from("false") + }) + } + .into_box(), } }) } @@ -1510,22 +1387,6 @@ mod test { ); } - #[test] - fn procedural_block() { - // An unimpressive test. The more in-depth testing gets done in statements.rs - let root = full_compile("{}"); - assert_eq!( - root, - AstNode { - reference: root.reference.clone(), - node: Expression::ProceduralBlock(AstNode { - reference: root.node.as_proceduralblock().unwrap().reference.clone(), - node: ProceduralBlock { statements: vec![] } - }) - } - ); - } - #[test] fn scalar_no_decimal() { let root = full_compile("0"); @@ -1885,21 +1746,6 @@ mod test { ); } - #[test] - fn void() { - let root = full_compile("~"); - assert_eq!( - root, - AstNode { - reference: root.reference.clone(), - node: Expression::Void(AstNode { - reference: root.node.as_void().unwrap().reference.clone(), - node: () - }) - } - ); - } - #[test] fn function_call_no_arguments() { let root = full_compile("a.b()"); @@ -1944,7 +1790,7 @@ mod test { #[test] fn function_call_with_arguments() { - let root = full_compile("a.b(value = ~)"); + let root = full_compile("a.b(value = 24u)"); let call = root.node.as_functioncall().unwrap(); let to_call = call.node.to_call.node.as_path().unwrap(); let dict = &call.node.argument.node; @@ -1990,16 +1836,16 @@ mod test { .assignment .reference .clone(), - node: Expression::Void(AstNode { + node: Expression::UnsignedInteger(AstNode { reference: dict_assignment .node .assignment .node - .as_void() + .as_unsignedinteger() .unwrap() .reference .clone(), - node: () + node: 24u64 }) } } @@ -2014,7 +1860,7 @@ mod test { #[test] fn method_call_no_arguments() { - let root = full_compile("~:c()"); + let root = full_compile("5u:c()"); let call = root.node.as_methodcall().unwrap(); let to_call = &call.node.to_call; assert_eq!( @@ -2026,16 +1872,16 @@ mod test { node: MethodCall { self_dictionary: AstNode { reference: call.node.self_dictionary.reference.clone(), - node: Box::new(Expression::Void(AstNode { + node: Box::new(Expression::UnsignedInteger(AstNode { reference: call .node .self_dictionary .node - .as_void() + .as_unsignedinteger() .unwrap() .reference .clone(), - node: () + node: 5u64 })) }, to_call: AstNode { @@ -2056,7 +1902,7 @@ mod test { #[test] fn method_call_with_arguments() { - let root = full_compile("~:c(value = ~)"); + let root = full_compile("83u:c(value = 95u)"); let call = root.node.as_methodcall().unwrap(); let to_call = &call.node.to_call; let dict = &call.node.argument.node; @@ -2070,16 +1916,16 @@ mod test { node: MethodCall { self_dictionary: AstNode { reference: call.node.self_dictionary.reference.clone(), - node: Box::new(Expression::Void(AstNode { + node: Box::new(Expression::UnsignedInteger(AstNode { reference: call .node .self_dictionary .node - .as_void() + .as_unsignedinteger() .unwrap() .reference .clone(), - node: () + node: 83u64 })) }, to_call: AstNode { @@ -2102,16 +1948,16 @@ mod test { .assignment .reference .clone(), - node: Expression::Void(AstNode { + node: Expression::UnsignedInteger(AstNode { reference: dict_assignment .node .assignment .node - .as_void() + .as_unsignedinteger() .unwrap() .reference .clone(), - node: () + node: 95u64 }) } } diff --git a/crates/interpreter/src/compile/mod.rs b/crates/interpreter/src/compile/mod.rs index 77f380d..8547c37 100644 --- a/crates/interpreter/src/compile/mod.rs +++ b/crates/interpreter/src/compile/mod.rs @@ -5,7 +5,7 @@ use type_sitter::{IncorrectKind, Node}; pub use expressions::*; -mod nodes { +pub mod nodes { include!(concat!(env!("OUT_DIR"), "/nodes.rs")); } diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 8618bff..bae8800 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -18,10 +18,7 @@ use std::{cmp::Ordering, fmt::Display}; -use crate::compile::{ - self, AssignmentType, BinaryExpressionOperation, SourceReference, StructDefinition, - UnaryExpressionOperation, -}; +use crate::compile::{self, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation}; mod errors; mod formatting; @@ -29,9 +26,9 @@ mod logging; mod stack; mod standard_environment; pub mod values; -use errors::{ErrorType, ExpressionResult, Raise}; +use errors::{ErrorType, ExpressionResult}; use logging::{LocatedStr, RuntimeLog, StackScope}; -use stack::{ScopeType, Stack}; +use stack::Stack; use values::{Object, StoredValue, Value, ValueType}; fn find_value<'p, 's>( @@ -130,9 +127,6 @@ pub fn execute_expression( .into()) } - compile::Expression::ProceduralBlock(ast_node) => { - execute_procedural_block(log, stack, stack_trace, ast_node) - } compile::Expression::Scalar(ast_node) => Ok(values::Scalar { dimension: ast_node.node.dimension, value: ast_node.node.value, @@ -152,7 +146,6 @@ pub fn execute_expression( compile::Expression::UnsignedInteger(ast_node) => { Ok(values::UnsignedInteger::from(ast_node.node).into()) } - compile::Expression::Void(_ast_node) => Ok(values::Void.into()), compile::Expression::FunctionCall(ast_node) => todo!(), compile::Expression::MethodCall(ast_node) => todo!(), }, @@ -241,50 +234,6 @@ fn execute_binary_expression( ) } -fn execute_procedural_block( - log: &mut dyn RuntimeLog, - stack: &mut Stack, - stack_trace: &mut Vec, - block: &compile::AstNode, -) -> ExpressionResult { - stack_trace.stack_scope(block.reference.clone(), |stack_trace| { - stack.scope(stack_trace, ScopeType::Inherited, |stack, stack_trace| { - let mut last_value = Value::Void(values::Void); - - let mut statements = block.node.statements.iter().peekable(); - - while let Some(statement) = statements.next() { - last_value = execute_statement(log, stack, stack_trace, statement)?; - - if statements.peek().is_some() { - // This was not the last statement, which means it needs to produce a void - // value. - - match last_value { - Value::Void(_) => { - // Not a problem. - continue; - } - _ => { - return Err(stack_trace.stack_scope( - statement.reference.clone(), - |stack_trace| { - MissingSemicolon { - actual_value_type: last_value.get_type(), - } - .to_error(stack_trace.iter()) - }, - )); - } - } - } - } - - Ok(last_value) - })? - }) -} - #[derive(Debug, Eq, PartialEq)] struct MissingSemicolon { actual_value_type: ValueType, @@ -302,114 +251,6 @@ impl Display for MissingSemicolon { } } -fn execute_statement( - log: &mut dyn RuntimeLog, - stack: &mut Stack, - stack_trace: &mut Vec, - statement: &compile::AstNode, -) -> ExpressionResult { - stack_trace.stack_scope( - statement.reference.clone(), - |stack_trace| match &statement.node { - compile::Statement::Assign(ast_node) => { - let value = execute_expression(log, stack_trace, stack, &ast_node.node.value)?; - - let path = &ast_node.node.to_assign.node.path; - - let original_value_storage = find_value(log, stack_trace, stack, path)?; - let original_value = original_value_storage.take(stack_trace)?; - // Start with a type check. - if value.get_type() == original_value.get_type() { - // Okay, we're good to assign the value. - - // TODO we should use a builtin function for assignment operators. - let mut new_value = match ast_node.node.assignment_type.node { - AssignmentType::Direct => value, - AssignmentType::BitAnd => { - original_value.bit_and(log, stack_trace, value)? - } - AssignmentType::BitOr => original_value.bit_or(log, stack_trace, value)?, - AssignmentType::BitXor => { - original_value.bit_xor(log, stack_trace, value)? - } - AssignmentType::LogicAnd => original_value.and(log, stack_trace, value)?, - AssignmentType::LogicOr => original_value.or(log, stack_trace, value)?, - AssignmentType::LogicXor => original_value.xor(log, stack_trace, value)?, - AssignmentType::Add => original_value.addition(log, stack_trace, value)?, - AssignmentType::Sub => { - original_value.subtraction(log, stack_trace, value)? - } - AssignmentType::Exponent => { - original_value.exponent(log, stack_trace, value)? - } - AssignmentType::Multiply => { - original_value.multiply(log, stack_trace, value)? - } - AssignmentType::IntegerDivision => { - original_value.floor_divide(log, stack_trace, value)? - } - AssignmentType::Division => { - original_value.divide(log, stack_trace, value)? - } - AssignmentType::LeftShift => { - original_value.left_shift(log, stack_trace, value)? - } - AssignmentType::RightShift => { - original_value.right_shift(log, stack_trace, value)? - } - }; - - original_value_storage.replace(new_value); - - Ok(values::Void.into()) - } else { - Err(AssignmentTypeMissmatch { - expected: original_value.get_type(), - got: value.get_type(), - } - .to_error(stack_trace.iter())) - } - } - compile::Statement::Let(ast_node) => { - let value = execute_expression(log, stack_trace, stack, &ast_node.node.value)?; - - let path = &ast_node.node.to_assign.node.path; - - if path.len() == 1 { - // We're just going to insert onto the stack. - let name = &path[0].node; - stack.insert_value(name, value); - } else { - // We are inserting the value into another value (like a dictionary). - let (parent_path, name) = path.split_at(path.len() - 1); - let name = &name[0]; - - let parent = find_value(log, stack_trace, stack, parent_path)?; - - parent.access_mut(stack_trace)?.insert_attribute( - log, - stack_trace, - &name.node, - value, - )?; - } - - Ok(values::Void.into()) - } - compile::Statement::For(ast_node) => todo!(), - compile::Statement::Expression(ast_node) => { - execute_expression(log, stack_trace, stack, ast_node) - } - compile::Statement::ClosedExpression(ast_node) => { - // It's the same as a normal statement, but we eat the result instead of returning - // it. - execute_expression(log, stack_trace, stack, &ast_node.node.expression) - .map(|_value| values::Void.into()) - } - }, - ) -} - #[derive(Debug, Eq, PartialEq)] struct AssignmentTypeMissmatch { expected: ValueType, @@ -444,12 +285,6 @@ mod test { use super::*; - #[test] - fn none_type() { - let product = test_run("~").unwrap(); - assert_eq!(product, values::Void.into()); - } - #[test] fn default_type() { let product = test_run("default").unwrap(); @@ -474,48 +309,6 @@ mod test { assert_eq!(product, values::UnsignedInteger::from(5).into()); } - #[test] - fn empty_block() { - let product = test_run("{}").unwrap(); - assert_eq!(product, values::Void.into()); - } - - #[test] - fn block_open_expression_statement() { - let product = test_run("{ 5u }").unwrap(); - assert_eq!(product, values::UnsignedInteger::from(5).into()); - } - - #[test] - fn block_closed_expression_statement() { - let product = test_run("{ 5u; }").unwrap(); - assert_eq!(product, values::Void.into()); - } - - #[test] - fn block_recursive_blocks() { - let product = test_run("{ { 5u } }").unwrap(); - assert_eq!(product, values::UnsignedInteger::from(5).into()); - } - - #[test] - fn let_statement() { - let product = test_run("{ let value = 5u; value }").unwrap(); - assert_eq!(product, values::UnsignedInteger::from(5).into()); - } - - #[test] - fn assign_statement() { - let product = test_run("{ let value = 5u; value = 4u; value }").unwrap(); - assert_eq!(product, values::UnsignedInteger::from(4).into()); - } - - #[test] - fn assign_statement_with_wrong_type() { - // Fails because of a type mismatch. - test_run("{ let value = 5u; value = 4i; value }").unwrap_err(); - } - #[test] fn parenthesis() { // Fails because of a type mismatch. @@ -525,14 +318,14 @@ mod test { #[test] fn struct_definition() { - let product = test_run("(name: std.types.Void = ~, ...)").unwrap(); + let product = test_run("(name: std.types.None = std.consts.None, ...)").unwrap(); assert_eq!( product, values::ValueType::Dictionary(values::StructDefinition { members: Arc::new(vec![values::StructMember { name: "name".into(), - ty: ValueType::Void, - default: Some(Value::Void(values::Void)) + ty: ValueType::TypeNone, + default: Some(Value::ValueNone(values::ValueNone)) }]), variadic: true }) @@ -542,23 +335,9 @@ mod test { #[test] fn nested_value_access() { + // FIXME we can't update this test to the new parser until after we've added the `let in` + // syntax. let product = test_run("{ let dictionary = (a = (b = 23u)); dictionary.a.b }").unwrap(); assert_eq!(product, values::UnsignedInteger::from(23).into()); } - - #[test] - fn nested_value_assignment() { - let product = - test_run("{ let dictionary = (a = (b = 23u)); dictionary.a.b = 32u; dictionary.a.b }") - .unwrap(); - assert_eq!(product, values::UnsignedInteger::from(32).into()); - } - - #[test] - fn nested_value_creation() { - let product = - test_run("{ let dictionary = (a = ()); let dictionary.a.b = 32u; dictionary.a.b }") - .unwrap(); - assert_eq!(product, values::UnsignedInteger::from(32).into()); - } } diff --git a/crates/interpreter/src/execution/standard_environment.rs b/crates/interpreter/src/execution/standard_environment.rs index b826491..0f0d7a1 100644 --- a/crates/interpreter/src/execution/standard_environment.rs +++ b/crates/interpreter/src/execution/standard_environment.rs @@ -1,5 +1,7 @@ use std::collections::HashMap; +use crate::execution::values::ValueNone; + use super::values::{Dictionary, StoredValue, Value, ValueType}; /// Builds standard library. @@ -10,15 +12,27 @@ pub fn build_prelude() -> HashMap { } fn build_std() -> Dictionary { - let std = HashMap::from([("types".into(), build_types().into())]); + let std = HashMap::from([ + ("types".into(), build_types().into()), + ("consts".into(), build_consts().into()), + ]); Dictionary::from(std) } +/// Adds library for constants. +fn build_consts() -> Dictionary { + let types: HashMap = HashMap::from_iter([( + "None".into(), + StoredValue::Value(Value::ValueNone(ValueNone)), + )]); + Dictionary::from(types) +} + /// Adds library for type safety. fn build_types() -> Dictionary { let types: HashMap = HashMap::from_iter( [ - ("Void".into(), ValueType::Void.into()), + ("None".into(), ValueType::TypeNone.into()), ("Bool".into(), ValueType::Boolean.into()), ("SInt".into(), ValueType::SignedInteger.into()), ("UInt".into(), ValueType::UnsignedInteger.into()), diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index f9b47c6..f67beb7 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -18,14 +18,12 @@ use std::{fmt::Display, sync::Arc}; -use fortuples::fortuples; - use crate::{ compile::{AstNode, ClosureDefinition, Expression, SourceReference}, execute_expression, execution::{ errors::{ExpressionResult, Raise}, - logging::{LocatedStr, RuntimeLog, StackScope}, + logging::{RuntimeLog, StackScope}, stack::Stack, values::DowncastError, }, @@ -33,12 +31,6 @@ use crate::{ use super::{Object, ObjectCopy, StaticTypeName, StructDefinition, Value, ValueType}; -#[derive(Debug, Eq, PartialEq)] -pub struct CapturedValue { - pub name: String, - pub value: Value, -} - /// Signature of a closure, used for type comparison. #[derive(Debug, Eq, PartialEq)] pub struct Signature { @@ -57,7 +49,6 @@ impl Display for Signature { #[derive(Debug, Eq, PartialEq)] struct UserClosureInternals { signature: Arc, - captured_values: Vec, expression: Arc, } @@ -103,37 +94,11 @@ impl UserClosure { return_type, }); - let mut captured_values = Vec::new(); - - for to_capture in source.node.captures.iter() { - let value = stack_trace.stack_scope( - to_capture.reference.clone(), - |stack_trace: &mut Vec| { - stack - .get_variable_mut( - stack_trace, - LocatedStr { - // TODO should actually point to the variable name. - location: stack_trace.last().unwrap().clone(), - string: to_capture.node.as_str(), - }, - )? - .take(stack_trace) - }, - )?; - - captured_values.push(CapturedValue { - name: to_capture.node.clone(), - value, - }); - } - let expression = source.node.expression.node.clone(); Ok(Self { data: Arc::new(UserClosureInternals { signature, - captured_values, expression, }), }) @@ -463,10 +428,9 @@ mod test { #[test] fn define_closure() { - let product = - test_run("{ let value_to_capture = 5i; (,) [value_to_capture] -> std.types.Void {} }") - .unwrap(); + let product = test_run("() -> std.types.None std.consts.None").unwrap(); + dbg!(&product); let expression = product.as_userclosure().unwrap().data.expression.clone(); assert_eq!( @@ -478,12 +442,8 @@ mod test { members: vec![].into(), variadic: false, }, - return_type: ValueType::Void, + return_type: ValueType::TypeNone, }), - captured_values: vec![CapturedValue { - name: "value_to_capture".into(), - value: super::super::SignedInteger::from(5).into() - }], expression }) } diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index 8d4bfed..aaf1820 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -157,14 +157,14 @@ impl Display for DuplicateMemberError { #[cfg(test)] mod test { use super::*; - use crate::execution::{test_run, values::Void}; + use crate::execution::{test_run, values::ValueNone}; #[test] fn build_dictionary() { - let product = test_run("(void = ~)").unwrap(); + let product = test_run("(none = std.consts.None)").unwrap(); let expected = HashableMap::from(HashMap::from_iter([( - "void".to_string(), - StoredValue::Value(Void.into()), + "none".to_string(), + StoredValue::Value(ValueNone.into()), )])); assert_eq!(product.as_dictionary().unwrap().members, expected); diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index e00ebd8..83f4bce 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -30,7 +30,7 @@ use super::{ }; mod void; -pub use void::Void; +pub use void::ValueNone; mod default; pub use default::DefaultValue; @@ -442,7 +442,7 @@ impl Display for ValueMovedError { #[enum_dispatch(Object, ObjectCopy)] #[derive(Debug, Eq, PartialEq, EnumDowncast, EnumAs)] pub enum Value { - Void, + ValueNone, Default(DefaultValue), SignedInteger, UnsignedInteger, @@ -534,7 +534,7 @@ impl Value { Self: IntoVariant, { match self { - Self::Void(_) => Ok(None), + Self::ValueNone(_) => Ok(None), this => Ok(Some(this.downcast::(stack_trace)?)), } } diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index eecea30..fa81a67 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -21,7 +21,7 @@ use common_data_types::Dimension; use super::{ closure::Signature as ClosureSignature, Boolean, DefaultValue, Object, ObjectCopy, - SignedInteger, StaticTypeName, UnsignedInteger, Value, Void, + SignedInteger, StaticTypeName, UnsignedInteger, Value, ValueNone, }; use crate::{ @@ -32,7 +32,7 @@ use crate::{ #[derive(Debug, Eq, Clone, PartialEq)] pub enum ValueType { - Void, + TypeNone, Default, Boolean, SignedInteger, @@ -52,7 +52,7 @@ impl From for ValueType { impl ValueType { pub fn name(&self) -> Cow<'static, str> { match self { - Self::Void => Void::static_type_name().into(), + Self::TypeNone => ValueNone::static_type_name().into(), Self::Default => DefaultValue::static_type_name().into(), Self::Boolean => Boolean::static_type_name().into(), Self::SignedInteger => SignedInteger::static_type_name().into(), diff --git a/crates/interpreter/src/execution/values/void.rs b/crates/interpreter/src/execution/values/void.rs index 20fbc02..46d3953 100644 --- a/crates/interpreter/src/execution/values/void.rs +++ b/crates/interpreter/src/execution/values/void.rs @@ -19,15 +19,15 @@ use super::{value_type::ValueType, Object, StaticTypeName}; #[derive(Debug, Hash, Clone, Copy, Eq, PartialEq)] -pub struct Void; +pub struct ValueNone; -impl Object for Void { +impl Object for ValueNone { fn get_type(&self) -> ValueType { - ValueType::Void + ValueType::TypeNone } } -impl StaticTypeName for Void { +impl StaticTypeName for ValueNone { fn static_type_name() -> &'static str { "Void" } diff --git a/crates/interpreter/src/lib.rs b/crates/interpreter/src/lib.rs index 7d14400..a436236 100644 --- a/crates/interpreter/src/lib.rs +++ b/crates/interpreter/src/lib.rs @@ -16,8 +16,8 @@ * program. If not, see . */ -mod compile; -mod execution; +pub mod compile; +pub mod execution; pub use compile::{compile, new_parser}; pub use execution::execute_expression; diff --git a/flake.lock b/flake.lock index 383acef..54ef702 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "crane": { "locked": { - "lastModified": 1763511871, - "narHash": "sha256-KKZWi+ij7oT0Ag8yC6MQkzfHGcytyjMJDD+47ZV1YNU=", + "lastModified": 1763938834, + "narHash": "sha256-j8iB0Yr4zAvQLueCZ5abxfk6fnG/SJ5JnGUziETjwfg=", "owner": "ipetkov", "repo": "crane", - "rev": "099f9014bc8d0cd6e445470ea1df0fd691d5a548", + "rev": "d9e753122e51cee64eb8d2dddfe11148f339f5a2", "type": "github" }, "original": { @@ -56,11 +56,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1763421233, - "narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=", + "lastModified": 1763966396, + "narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=", "owner": "nixos", "repo": "nixpkgs", - "rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648", + "rev": "5ae3b07d8d6527c42f17c876e404993199144b6a", "type": "github" }, "original": { From 797d41b55bffe9bd9e3b69d5f704edd97c8f8d10 Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 28 Nov 2025 15:39:59 -0500 Subject: [PATCH 032/106] Add let in parsing --- Cargo.lock | 17 ++ crates/interpreter/Cargo.toml | 4 + crates/interpreter/src/compile/expressions.rs | 149 +++++++++++++++- crates/interpreter/src/execution/mod.rs | 1 + .../tree-sitter-command-cad-model/grammar.js | 4 +- .../src/grammar.json | 34 +++- .../src/node-types.json | 70 +++++--- .../src/parser.c | 163 ++++++++++-------- 8 files changed, 326 insertions(+), 116 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0ae1a08..178c5ab 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -445,6 +445,12 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + [[package]] name = "displaydoc" version = "0.2.5" @@ -952,6 +958,7 @@ dependencies = [ "fortuples", "hashable-map", "num-traits", + "pretty_assertions", "tree-sitter", "tree-sitter-command-cad-model", "type-sitter", @@ -1524,6 +1531,16 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi", +] + [[package]] name = "prettyplease" version = "0.2.31" diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index 8152319..3401aee 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -21,3 +21,7 @@ hashable-map = "0.4.0" [build-dependencies] type-sitter-gen = "0.8" tree-sitter-command-cad-model = { path = "../tree-sitter-command-cad-model" } + +[dev-dependencies] +pretty_assertions = "1.4" + diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index b4dfaf7..0c06762 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -51,6 +51,7 @@ pub enum Expression { UnsignedInteger(AstNode), FunctionCall(AstNode), MethodCall(AstNode), + LetIn(AstNode), } impl<'t> Parse<'t, nodes::anon_unions::Path_StructDefinition<'t>> for Expression { @@ -386,6 +387,20 @@ impl<'t> Parse<'t, nodes::MethodCall<'t>> for Expression { } } +impl<'t> Parse<'t, nodes::LetIn<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + node: nodes::LetIn<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &node, + Self::LetIn(LetIn::parse(file, input, node)?), + )) + } +} + impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { fn parse<'i>( file: &Arc, @@ -428,11 +443,11 @@ impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { } ChildType::FunctionCall(function_call) => Self::parse(file, input, function_call), ChildType::MethodCall(method_call) => Self::parse(file, input, method_call), - _ => { + ChildType::Formula(formula) => { // TODO we need to add formula types. - let remember_me = 0; todo!() } + ChildType::LetIn(let_in) => Self::parse(file, input, let_in), } } } @@ -927,6 +942,60 @@ impl<'t> Parse<'t, nodes::MethodCall<'t>> for MethodCall { } } +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct LetInAssignment { + pub ident: AstNode, + pub value: AstNode>, +} + +impl<'t> Parse<'t, nodes::LetInAssignment<'t>> for LetInAssignment { + fn parse<'i>( + file: &Arc, + input: &'i str, + node: nodes::LetInAssignment<'t>, + ) -> Result, Error<'t, 'i>> { + let ident = String::parse(file, input, node.ident()?)?; + + let value = Expression::parse(file, input, node.value()?)?.into_box(); + + Ok(AstNode::new(file, &node, Self { ident, value })) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct LetIn { + pub assignments: Vec>, + pub expression: AstNode>, +} + +impl<'t> Parse<'t, nodes::LetIn<'t>> for LetIn { + fn parse<'i>( + file: &Arc, + input: &'i str, + node: nodes::LetIn<'t>, + ) -> Result, Error<'t, 'i>> { + let mut cursor = node.walk(); + let mut assignments = Vec::new(); + + for assignment in node.assignments(&mut cursor) { + let assignment = assignment?; + let assignment = LetInAssignment::parse(file, input, assignment)?; + assignments.push(assignment); + } + + let expression = Expression::parse(file, input, node.expression()?)?.into_box(); + + Ok(AstNode::new( + file, + &node, + Self { + assignments, + expression, + }, + )) + } +} + pub fn new_parser() -> type_sitter::Parser> { type_sitter::Parser::new(&tree_sitter_command_cad_model::language()) .expect("Error loading CommandCadModel grammar") @@ -945,6 +1014,7 @@ pub fn compile<'t, 'i>( #[cfg(test)] mod test { use crate::compile::full_compile; + use pretty_assertions::{assert_eq, assert_ne}; use super::*; @@ -1969,4 +2039,79 @@ mod test { } ); } + + #[test] + fn let_in() { + let root = full_compile("let value1 = 1u; value2 = 2u; in 3u"); + + let let_in = root.node.as_letin().unwrap(); + + let value1 = &let_in.node.assignments[0]; + let value1_ident = &value1.node.ident; + let value1_value = &value1.node.value; + let value1_value_uint = &value1.node.value.node.as_unsignedinteger().unwrap(); + + let value2 = &let_in.node.assignments[1]; + let value2_ident = &value2.node.ident; + let value2_value = &value2.node.value; + let value2_value_uint = &value2.node.value.node.as_unsignedinteger().unwrap(); + + let expression = &let_in.node.expression; + let expression_uint = &let_in.node.expression.node.as_unsignedinteger().unwrap(); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::LetIn(AstNode { + reference: let_in.reference.clone(), + node: LetIn { + assignments: vec![ + AstNode { + reference: value1.reference.clone(), + node: LetInAssignment { + ident: AstNode { + reference: value1_ident.reference.clone(), + node: "value1".into(), + }, + value: AstNode { + reference: value1_value.reference.clone(), + node: Expression::UnsignedInteger(AstNode { + reference: value1_value_uint.reference.clone(), + node: 1 + }), + } + .into_box() + } + }, + AstNode { + reference: value2.reference.clone(), + node: LetInAssignment { + ident: AstNode { + reference: value2_ident.reference.clone(), + node: "value2".into(), + }, + value: AstNode { + reference: value2_value.reference.clone(), + node: Expression::UnsignedInteger(AstNode { + reference: value2_value_uint.reference.clone(), + node: 2 + }), + } + .into_box() + } + } + ], + expression: AstNode { + reference: expression.reference.clone(), + node: Box::new(Expression::UnsignedInteger(AstNode { + reference: expression_uint.reference.clone(), + node: 3 + })) + } + } + }) + } + ); + } } diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index bae8800..c38198f 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -148,6 +148,7 @@ pub fn execute_expression( } compile::Expression::FunctionCall(ast_node) => todo!(), compile::Expression::MethodCall(ast_node) => todo!(), + compile::Expression::LetIn(ast_node) => todo!(), }, ) } diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 098bdbd..b9c1589 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -163,8 +163,8 @@ module.exports = grammar({ if: $ => seq('if', field('condition', $.expression), field('on_true', $.expression), seq('else', field('on_false', $.expression))), - let_in: $ => seq('let', repeat($.let_in_assignment), 'in', $.expression), - let_in_assignment: $ => seq($.identifier, '=', $.expression, ';'), + let_in: $ => seq('let', field('assignment', repeat($.let_in_assignment)), 'in', field('expression', $.expression)), + let_in_assignment: $ => seq(field('ident', $.identifier), '=', field('value', $.expression), ';'), path: $ => seq($.identifier, repeat(seq('.', $.identifier))), diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 65fb88e..92e2bf5 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -1238,10 +1238,14 @@ "value": "let" }, { - "type": "REPEAT", + "type": "FIELD", + "name": "assignment", "content": { - "type": "SYMBOL", - "name": "let_in_assignment" + "type": "REPEAT", + "content": { + "type": "SYMBOL", + "name": "let_in_assignment" + } } }, { @@ -1249,8 +1253,12 @@ "value": "in" }, { - "type": "SYMBOL", - "name": "expression" + "type": "FIELD", + "name": "expression", + "content": { + "type": "SYMBOL", + "name": "expression" + } } ] }, @@ -1258,16 +1266,24 @@ "type": "SEQ", "members": [ { - "type": "SYMBOL", - "name": "identifier" + "type": "FIELD", + "name": "ident", + "content": { + "type": "SYMBOL", + "name": "identifier" + } }, { "type": "STRING", "value": "=" }, { - "type": "SYMBOL", - "name": "expression" + "type": "FIELD", + "name": "value", + "content": { + "type": "SYMBOL", + "name": "expression" + } }, { "type": "STRING", diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 7f25027..f40d31a 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -625,39 +625,53 @@ { "type": "let_in", "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": true, - "types": [ - { - "type": "expression", - "named": true - }, - { - "type": "let_in_assignment", - "named": true - } - ] + "fields": { + "assignment": { + "multiple": true, + "required": false, + "types": [ + { + "type": "let_in_assignment", + "named": true + } + ] + }, + "expression": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } } }, { "type": "let_in_assignment", "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": true, - "types": [ - { - "type": "expression", - "named": true - }, - { - "type": "identifier", - "named": true - } - ] + "fields": { + "ident": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "value": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } } }, { diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 1ce2289..aaae2e9 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -13,10 +13,10 @@ #define ALIAS_COUNT 0 #define TOKEN_COUNT 56 #define EXTERNAL_TOKEN_COUNT 0 -#define FIELD_COUNT 24 +#define FIELD_COUNT 25 #define MAX_ALIAS_SEQUENCE_LENGTH 5 #define MAX_RESERVED_WORD_SET_SIZE 0 -#define PRODUCTION_ID_COUNT 22 +#define PRODUCTION_ID_COUNT 25 #define SUPERTYPE_COUNT 0 enum ts_symbol_identifiers { @@ -720,20 +720,21 @@ enum ts_field_identifiers { field_expression = 8, field_final_element = 9, field_fractional = 10, - field_lhs = 11, - field_members = 12, - field_name = 13, - field_on_false = 14, - field_on_true = 15, - field_op = 16, - field_relation = 17, - field_result = 18, - field_rhs = 19, - field_self_dictionary = 20, - field_to_call = 21, - field_unit = 22, - field_value = 23, - field_whole = 24, + field_ident = 11, + field_lhs = 12, + field_members = 13, + field_name = 14, + field_on_false = 15, + field_on_true = 16, + field_op = 17, + field_relation = 18, + field_result = 19, + field_rhs = 20, + field_self_dictionary = 21, + field_to_call = 22, + field_unit = 23, + field_value = 24, + field_whole = 25, }; static const char * const ts_field_names[] = { @@ -748,6 +749,7 @@ static const char * const ts_field_names[] = { [field_expression] = "expression", [field_final_element] = "final_element", [field_fractional] = "fractional", + [field_ident] = "ident", [field_lhs] = "lhs", [field_members] = "members", [field_name] = "name", @@ -775,17 +777,20 @@ static const TSMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [8] = {.index = 11, .length = 1}, [9] = {.index = 12, .length = 1}, [10] = {.index = 13, .length = 1}, - [11] = {.index = 14, .length = 2}, - [12] = {.index = 16, .length = 3}, - [13] = {.index = 19, .length = 2}, - [14] = {.index = 21, .length = 2}, - [15] = {.index = 23, .length = 2}, - [16] = {.index = 25, .length = 3}, - [17] = {.index = 28, .length = 3}, - [18] = {.index = 31, .length = 3}, - [19] = {.index = 34, .length = 2}, - [20] = {.index = 36, .length = 3}, - [21] = {.index = 39, .length = 3}, + [11] = {.index = 14, .length = 1}, + [12] = {.index = 15, .length = 2}, + [13] = {.index = 17, .length = 3}, + [14] = {.index = 20, .length = 2}, + [15] = {.index = 22, .length = 2}, + [16] = {.index = 24, .length = 2}, + [17] = {.index = 26, .length = 2}, + [18] = {.index = 28, .length = 3}, + [19] = {.index = 31, .length = 3}, + [20] = {.index = 34, .length = 3}, + [21] = {.index = 37, .length = 2}, + [22] = {.index = 39, .length = 2}, + [23] = {.index = 41, .length = 3}, + [24] = {.index = 44, .length = 3}, }; static const TSFieldMapEntry ts_field_map_entries[] = { @@ -806,49 +811,57 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_argument, 1}, {field_to_call, 0}, [10] = - {field_name, 0}, + {field_expression, 2}, [11] = - {field_final_element, 1}, + {field_name, 0}, [12] = - {field_assignments, 1}, + {field_final_element, 1}, [13] = - {field_members, 1}, + {field_assignments, 1}, [14] = + {field_members, 1}, + [15] = {field_fractional, 2}, {field_whole, 0}, - [16] = + [17] = {field_a, 0}, {field_b, 2}, {field_op, 1}, - [19] = + [20] = + {field_assignment, 1}, + {field_expression, 3}, + [22] = {field_assignment, 2}, {field_name, 0}, - [21] = + [24] = {field_assignments, 1}, {field_assignments, 2}, - [23] = + [26] = {field_final_element, 2}, {field_members, 1}, - [25] = + [28] = {field_argument, 3}, {field_self_dictionary, 0}, {field_to_call, 2}, - [28] = + [31] = {field_argument, 0}, {field_expression, 3}, {field_result, 2}, - [31] = + [34] = {field_condition, 1}, {field_on_false, 4}, {field_on_true, 2}, - [34] = + [37] = + {field_ident, 0}, + {field_value, 2}, + [39] = {field_default, 3}, {field_name, 0}, - [36] = + [41] = {field_assignments, 1}, {field_assignments, 2}, {field_assignments, 3}, - [39] = + [44] = {field_lhs, 1}, {field_relation, 2}, {field_rhs, 3}, @@ -12100,12 +12113,12 @@ static const TSParseActionEntry ts_parse_actions[] = { [180] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), [182] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), [184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), - [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 12), - [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 12), + [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 13), + [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 13), [190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), [192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), - [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 18), - [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 18), + [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 20), + [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 20), [198] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), [200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), [202] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), @@ -12114,24 +12127,24 @@ static const TSParseActionEntry ts_parse_actions[] = { [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), [210] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), [212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), - [214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 0), - [216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 0), - [218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 8), - [220] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 8), - [222] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 10), - [224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 10), - [226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 11), - [228] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 11), - [230] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 0), - [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 0), - [234] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 15), - [236] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 15), - [238] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 17), - [240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 17), - [242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 14), - [244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 14), - [246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 9), - [248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 9), + [214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 7), + [216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 7), + [218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), + [220] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), + [222] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 11), + [224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 11), + [226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), + [228] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), + [230] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 14), + [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 14), + [234] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 17), + [236] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 17), + [238] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 19), + [240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 19), + [242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 16), + [244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 16), + [246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 10), + [248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 10), [250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), [252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), [254] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), @@ -12146,16 +12159,16 @@ static const TSParseActionEntry ts_parse_actions[] = { [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), [274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 16), - [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 16), + [278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 18), + [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 18), [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), - [290] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 20), - [292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 20), - [294] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 21), - [296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 21), + [290] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 23), + [292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 23), + [294] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 24), + [296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 24), [298] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), [300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), [302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(238), @@ -12183,10 +12196,10 @@ static const TSParseActionEntry ts_parse_actions[] = { [347] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), [349] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), - [353] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 19), + [353] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 22), [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), [357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [359] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 13), + [359] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 15), [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), @@ -12202,8 +12215,8 @@ static const TSParseActionEntry ts_parse_actions[] = { [385] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237), [389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), - [391] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 12), - [393] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 12), + [391] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 13), + [393] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 13), [395] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), [397] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), [399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), @@ -12247,7 +12260,7 @@ static const TSParseActionEntry ts_parse_actions[] = { [478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [484] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 7), + [484] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 8), [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), [488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), @@ -12263,7 +12276,7 @@ static const TSParseActionEntry ts_parse_actions[] = { [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), [512] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), [514] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [516] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 0), + [516] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 21), [518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), [522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), From 9e55742b0ff7ddfdc170091374a435fc9b4ad1a3 Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 28 Nov 2025 21:50:41 -0500 Subject: [PATCH 033/106] Implement let in expression --- crates/interpreter/src/compile/expressions.rs | 99 ++++++++++--------- crates/interpreter/src/execution/mod.rs | 31 +++++- 2 files changed, 77 insertions(+), 53 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 0c06762..4e89c94 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -51,7 +51,7 @@ pub enum Expression { UnsignedInteger(AstNode), FunctionCall(AstNode), MethodCall(AstNode), - LetIn(AstNode), + LetIn(AstNode>), } impl<'t> Parse<'t, nodes::anon_unions::Path_StructDefinition<'t>> for Expression { @@ -396,7 +396,7 @@ impl<'t> Parse<'t, nodes::LetIn<'t>> for Expression { Ok(AstNode::new( file, &node, - Self::LetIn(LetIn::parse(file, input, node)?), + Self::LetIn(LetIn::parse(file, input, node)?.into_box()), )) } } @@ -945,7 +945,7 @@ impl<'t> Parse<'t, nodes::MethodCall<'t>> for MethodCall { #[derive(Debug, Hash, Eq, PartialEq)] pub struct LetInAssignment { pub ident: AstNode, - pub value: AstNode>, + pub value: AstNode, } impl<'t> Parse<'t, nodes::LetInAssignment<'t>> for LetInAssignment { @@ -956,7 +956,7 @@ impl<'t> Parse<'t, nodes::LetInAssignment<'t>> for LetInAssignment { ) -> Result, Error<'t, 'i>> { let ident = String::parse(file, input, node.ident()?)?; - let value = Expression::parse(file, input, node.value()?)?.into_box(); + let value = Expression::parse(file, input, node.value()?)?; Ok(AstNode::new(file, &node, Self { ident, value })) } @@ -965,7 +965,7 @@ impl<'t> Parse<'t, nodes::LetInAssignment<'t>> for LetInAssignment { #[derive(Debug, Hash, Eq, PartialEq)] pub struct LetIn { pub assignments: Vec>, - pub expression: AstNode>, + pub expression: AstNode, } impl<'t> Parse<'t, nodes::LetIn<'t>> for LetIn { @@ -983,7 +983,7 @@ impl<'t> Parse<'t, nodes::LetIn<'t>> for LetIn { assignments.push(assignment); } - let expression = Expression::parse(file, input, node.expression()?)?.into_box(); + let expression = Expression::parse(file, input, node.expression()?)?; Ok(AstNode::new( file, @@ -1014,7 +1014,7 @@ pub fn compile<'t, 'i>( #[cfg(test)] mod test { use crate::compile::full_compile; - use pretty_assertions::{assert_eq, assert_ne}; + use pretty_assertions::assert_eq; use super::*; @@ -2063,54 +2063,55 @@ mod test { root, AstNode { reference: root.reference.clone(), - node: Expression::LetIn(AstNode { - reference: let_in.reference.clone(), - node: LetIn { - assignments: vec![ - AstNode { - reference: value1.reference.clone(), - node: LetInAssignment { - ident: AstNode { - reference: value1_ident.reference.clone(), - node: "value1".into(), - }, - value: AstNode { - reference: value1_value.reference.clone(), - node: Expression::UnsignedInteger(AstNode { - reference: value1_value_uint.reference.clone(), - node: 1 - }), + node: Expression::LetIn( + AstNode { + reference: let_in.reference.clone(), + node: LetIn { + assignments: vec![ + AstNode { + reference: value1.reference.clone(), + node: LetInAssignment { + ident: AstNode { + reference: value1_ident.reference.clone(), + node: "value1".into(), + }, + value: AstNode { + reference: value1_value.reference.clone(), + node: Expression::UnsignedInteger(AstNode { + reference: value1_value_uint.reference.clone(), + node: 1 + }), + } } - .into_box() - } - }, - AstNode { - reference: value2.reference.clone(), - node: LetInAssignment { - ident: AstNode { - reference: value2_ident.reference.clone(), - node: "value2".into(), - }, - value: AstNode { - reference: value2_value.reference.clone(), - node: Expression::UnsignedInteger(AstNode { - reference: value2_value_uint.reference.clone(), - node: 2 - }), + }, + AstNode { + reference: value2.reference.clone(), + node: LetInAssignment { + ident: AstNode { + reference: value2_ident.reference.clone(), + node: "value2".into(), + }, + value: AstNode { + reference: value2_value.reference.clone(), + node: Expression::UnsignedInteger(AstNode { + reference: value2_value_uint.reference.clone(), + node: 2 + }), + } } - .into_box() } + ], + expression: AstNode { + reference: expression.reference.clone(), + node: Expression::UnsignedInteger(AstNode { + reference: expression_uint.reference.clone(), + node: 3 + }) } - ], - expression: AstNode { - reference: expression.reference.clone(), - node: Box::new(Expression::UnsignedInteger(AstNode { - reference: expression_uint.reference.clone(), - node: 3 - })) } } - }) + .into_box() + ) } ); } diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index c38198f..5528863 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -148,7 +148,9 @@ pub fn execute_expression( } compile::Expression::FunctionCall(ast_node) => todo!(), compile::Expression::MethodCall(ast_node) => todo!(), - compile::Expression::LetIn(ast_node) => todo!(), + compile::Expression::LetIn(ast_node) => { + execute_let_in(log, stack_trace, stack, ast_node) + } }, ) } @@ -170,6 +172,23 @@ fn execute_unary_expression( }) } +fn execute_let_in( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + expression: &compile::AstNode>, +) -> ExpressionResult { + stack_trace.stack_scope(expression.reference.clone(), |stack_trace| { + for assignment in expression.node.assignments.iter() { + let value = execute_expression(log, stack_trace, stack, &assignment.node.value)?; + stack.insert_value(assignment.node.ident.node.clone(), value); + } + + let node = &expression.node; + execute_expression(log, stack_trace, stack, &node.expression) + }) +} + fn execute_binary_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, @@ -336,9 +355,13 @@ mod test { #[test] fn nested_value_access() { - // FIXME we can't update this test to the new parser until after we've added the `let in` - // syntax. - let product = test_run("{ let dictionary = (a = (b = 23u)); dictionary.a.b }").unwrap(); + let product = test_run("let dictionary = (a = (b = 23u)); in dictionary.a.b").unwrap(); + assert_eq!(product, values::UnsignedInteger::from(23).into()); + } + + #[test] + fn let_in() { + let product = test_run("let value = 23u; in value").unwrap(); assert_eq!(product, values::UnsignedInteger::from(23).into()); } } From a07c53023f5af1244037d8db3a3e4577fdef3943 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 29 Nov 2025 12:12:45 -0500 Subject: [PATCH 034/106] Remove the last of the mutable features --- crates/interpreter/src/execution/mod.rs | 22 ++- crates/interpreter/src/execution/stack.rs | 35 +---- .../src/execution/standard_environment.rs | 13 +- .../src/execution/values/closure.rs | 8 +- .../src/execution/values/dictionary.rs | 54 ++------ .../interpreter/src/execution/values/mod.rs | 131 +----------------- .../src/execution/values/value_type.rs | 11 +- 7 files changed, 40 insertions(+), 234 deletions(-) diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 5528863..5910ec0 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -29,18 +29,18 @@ pub mod values; use errors::{ErrorType, ExpressionResult}; use logging::{LocatedStr, RuntimeLog, StackScope}; use stack::Stack; -use values::{Object, StoredValue, Value, ValueType}; +use values::{Object, Value, ValueType}; fn find_value<'p, 's>( log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], stack: &'s mut Stack, path_iter: impl IntoIterator>, -) -> ExpressionResult<&'s mut StoredValue> { +) -> ExpressionResult { let mut path_iter = path_iter.into_iter().peekable(); let root = path_iter.next().expect("Path is empty"); - let stack_value = stack.get_variable_mut( + let stack_value = stack.get_variable( stack_trace, LocatedStr { location: root.reference.clone(), @@ -51,7 +51,7 @@ fn find_value<'p, 's>( if let Some(sub_path) = path_iter.next() { // We need the value off the heap. - let mut value = stack_value.access_mut(stack_trace)?.get_attribute_mut( + let mut value = stack_value.get_attribute( log, stack_trace, &LocatedStr { @@ -66,7 +66,7 @@ fn find_value<'p, 's>( // That's the last element of the path. We break out early because the // last one needs to be a mutable borrow. - let final_value = value.access_mut(stack_trace)?.get_attribute_mut( + let final_value = value.get_attribute( log, stack_trace, &LocatedStr { @@ -75,9 +75,9 @@ fn find_value<'p, 's>( }, )?; - return Ok(final_value); + return Ok(final_value.clone()); } else { - value = value.access_mut(stack_trace)?.get_attribute_mut( + value = value.get_attribute( log, stack_trace, &LocatedStr { @@ -88,10 +88,10 @@ fn find_value<'p, 's>( } } - Ok(value) + Ok(value.clone()) } else { // We just needed the value off the stack. - Ok(stack_value) + Ok(stack_value.clone()) } } @@ -122,9 +122,7 @@ pub fn execute_expression( } compile::Expression::Path(ast_node) => { let path_iter = ast_node.node.path.iter(); - Ok(find_value(log, stack_trace, stack, path_iter)? - .take(stack_trace)? - .into()) + Ok(find_value(log, stack_trace, stack, path_iter)?) } compile::Expression::Scalar(ast_node) => Ok(values::Scalar { diff --git a/crates/interpreter/src/execution/stack.rs b/crates/interpreter/src/execution/stack.rs index ae10171..680a41b 100644 --- a/crates/interpreter/src/execution/stack.rs +++ b/crates/interpreter/src/execution/stack.rs @@ -21,7 +21,7 @@ use crate::compile::SourceReference; use super::{ errors::{ErrorType, ExpressionResult, Raise}, logging::LocatedStr, - values::{StoredValue, Value}, + values::Value, }; use compact_str::CompactString; use std::{collections::HashMap, fmt::Display}; @@ -35,13 +35,13 @@ pub enum ScopeType { #[derive(Debug)] struct Scope { ty: ScopeType, - variables: HashMap, + variables: HashMap, } #[derive(Debug)] pub struct Stack { scopes: Vec, - prelude: HashMap, + prelude: HashMap, active_scope: usize, } @@ -89,7 +89,7 @@ impl Display for NotInScopeError { } impl Stack { - pub fn new(prelude: HashMap) -> Self { + pub fn new(prelude: HashMap) -> Self { Self { scopes: vec![Scope { ty: ScopeType::Isolated, @@ -138,7 +138,7 @@ impl Stack { pub fn insert_value(&mut self, name: impl Into, value: Value) { self.scopes[self.active_scope] .variables - .insert(name.into(), StoredValue::Value(value)); + .insert(name.into(), value); } /// Gets a reference to a variable on the stack. @@ -148,7 +148,7 @@ impl Stack { &self, stack_trace: &[SourceReference], name: S, - ) -> ExpressionResult<&StoredValue> { + ) -> ExpressionResult<&Value> { let name = name.into(); if let Some(value) = generate_variable_getter!(self, stack_trace, name, iter, get) { Ok(value) @@ -165,27 +165,4 @@ impl Stack { .to_error(stack_trace.iter().chain([&name.location]))) } } - - /// Gets a mutable reference to a variable on the stack. - pub fn get_variable_mut<'s, S: Into>>( - &mut self, - stack_trace: &[SourceReference], - name: S, - ) -> ExpressionResult<&mut StoredValue> { - let name = name.into(); - if let Some(value) = generate_variable_getter!(self, stack_trace, name, iter_mut, get_mut) { - Ok(value) - } else { - // See if we can find it in the prelude. - if let Some(value) = self.prelude.get_mut(name.string) { - Ok(value) - } else { - // We couldn't find it. - Err(NotInScopeError { - variable_name: name.string.to_string(), - } - .to_error(stack_trace.iter().chain([&name.location]))) - } - } - } } diff --git a/crates/interpreter/src/execution/standard_environment.rs b/crates/interpreter/src/execution/standard_environment.rs index 0f0d7a1..3f2a59e 100644 --- a/crates/interpreter/src/execution/standard_environment.rs +++ b/crates/interpreter/src/execution/standard_environment.rs @@ -2,10 +2,10 @@ use std::collections::HashMap; use crate::execution::values::ValueNone; -use super::values::{Dictionary, StoredValue, Value, ValueType}; +use super::values::{Dictionary, Value, ValueType}; /// Builds standard library. -pub fn build_prelude() -> HashMap { +pub fn build_prelude() -> HashMap { let global = HashMap::from([("std".into(), build_std().into())]); global @@ -21,16 +21,13 @@ fn build_std() -> Dictionary { /// Adds library for constants. fn build_consts() -> Dictionary { - let types: HashMap = HashMap::from_iter([( - "None".into(), - StoredValue::Value(Value::ValueNone(ValueNone)), - )]); + let types: HashMap = HashMap::from_iter([("None".into(), ValueNone.into())]); Dictionary::from(types) } /// Adds library for type safety. fn build_types() -> Dictionary { - let types: HashMap = HashMap::from_iter( + let types: HashMap = HashMap::from_iter( [ ("None".into(), ValueType::TypeNone.into()), ("Bool".into(), ValueType::Boolean.into()), @@ -48,7 +45,7 @@ fn build_types() -> Dictionary { Dictionary::from(types) } -fn build_dimension_types() -> impl Iterator { +fn build_dimension_types() -> impl Iterator { units::list_named_dimensions() .map(|(name, dimension)| (name.into(), ValueType::Scalar(dimension).into())) } diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index f67beb7..99a1f6f 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -29,7 +29,7 @@ use crate::{ }, }; -use super::{Object, ObjectCopy, StaticTypeName, StructDefinition, Value, ValueType}; +use super::{Object, StaticTypeName, StructDefinition, ValueType}; /// Signature of a closure, used for type comparison. #[derive(Debug, Eq, PartialEq)] @@ -117,12 +117,6 @@ impl StaticTypeName for UserClosure { } } -impl ObjectCopy for UserClosure { - fn object_copy(&self) -> Option { - Some(self.clone().into()) - } -} - // impl std::fmt::Debug for UserClosure { // fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { // f.debug_struct("UserClosure") diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index aaf1820..068ea71 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -31,13 +31,12 @@ use crate::{ }; use super::{ - MissingAttributeError, Object, ObjectCopy, StaticTypeName, StoredValue, StructDefinition, - StructMember, Value, ValueType, + MissingAttributeError, Object, StaticTypeName, StructDefinition, StructMember, Value, ValueType, }; -#[derive(Debug, Eq, PartialEq)] +#[derive(Debug, Eq, PartialEq, Clone)] pub struct Dictionary { - members: HashableMap, + members: Arc>, } impl Object for Dictionary { @@ -50,12 +49,12 @@ impl Object for Dictionary { }) } - fn get_attribute_ref( + fn get_attribute( &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], attribute: &str, - ) -> ExpressionResult<&StoredValue> { + ) -> ExpressionResult<&Value> { if let Some(member) = self.members.get(attribute) { Ok(member) } else { @@ -65,47 +64,18 @@ impl Object for Dictionary { .to_error(stack_trace)) } } - fn get_attribute_mut( - &mut self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - attribute: &str, - ) -> ExpressionResult<&mut StoredValue> { - if let Some(member) = self.members.get_mut(attribute) { - Ok(member) - } else { - Err(MissingAttributeError { - name: attribute.into(), - } - .to_error(stack_trace)) - } - } - fn insert_attribute( - &mut self, - _log: &mut dyn RuntimeLog, - _stack_trace: &[SourceReference], - attribute: impl Into, - new_value: Value, - ) -> ExpressionResult<()> { - self.members - .insert(attribute.into(), StoredValue::Value(new_value)); - Ok(()) - } } -// Default implementation, cannot be moved by copy. -impl ObjectCopy for Dictionary {} - impl StaticTypeName for Dictionary { fn static_type_name() -> &'static str { "Dictionary" } } -impl From> for Dictionary { - fn from(map: HashMap) -> Self { +impl From> for Dictionary { + fn from(map: HashMap) -> Self { // HashableMap is just a wrapper around HashMap, so this has no additional cost. - let members = HashableMap::from(map); + let members = Arc::new(HashableMap::from(map)); Self { members } } @@ -124,7 +94,7 @@ impl Dictionary { let name = assignment.node.name.node.clone(); let value = execute_expression(log, stack_trace, stack, &assignment.node.assignment)?; - if members.insert(name, StoredValue::Value(value)).is_some() { + if members.insert(name, value).is_some() { // That's a duplicate member. return Err(DuplicateMemberError { name: assignment.node.name.node.clone(), @@ -162,10 +132,10 @@ mod test { #[test] fn build_dictionary() { let product = test_run("(none = std.consts.None)").unwrap(); - let expected = HashableMap::from(HashMap::from_iter([( + let expected = Arc::new(HashableMap::from(HashMap::from_iter([( "none".to_string(), - StoredValue::Value(ValueNone.into()), - )])); + ValueNone.into(), + )]))); assert_eq!(product.as_dictionary().unwrap().members, expected); } diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 83f4bce..4534430 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -105,7 +105,7 @@ impl Display for MissingAttributeError { } #[enum_dispatch] -pub trait Object: StaticTypeName + Sized + Eq + PartialEq + ObjectCopy { +pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { fn get_type(&self) -> ValueType; // fn format( @@ -251,34 +251,17 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + ObjectCopy { ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "right shift") } - fn get_attribute_ref( + fn get_attribute( &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], attribute: &str, - ) -> ExpressionResult<&StoredValue> { + ) -> ExpressionResult<&Value> { Err(MissingAttributeError { name: attribute.into(), } .to_error(stack_trace)) } - fn get_attribute_mut( - &mut self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _attribute: &str, - ) -> ExpressionResult<&mut StoredValue> { - UnsupportedOperationError::raise(self, stack_trace, "set attribute") - } - fn insert_attribute( - &mut self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _attribute: impl Into, - _new_value: Value, - ) -> ExpressionResult<()> { - UnsupportedOperationError::raise(self, stack_trace, "insert attribute") - } fn call( &self, _log: &mut dyn RuntimeLog, @@ -333,114 +316,8 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + ObjectCopy { // } } -/// Implements and indicates the copy rules of an object. -#[enum_dispatch] -pub trait ObjectCopy { - /// Creates a copy of the object. Returning None indicates that the object should not be - /// passed by copy, and instead should be moved. - fn object_copy(&self) -> Option { - None - } -} - -impl ObjectCopy for O -where - O: Object + Copy + Into, -{ - fn object_copy(&self) -> Option { - Some(self.clone().into()) - } -} - -#[derive(Debug, Eq, PartialEq)] -pub enum StoredValue { - Value(Value), - Moved { - /// Where in the source code it was moved. - location: SourceReference, - }, -} - -impl StoredValue { - pub fn replace(&mut self, new: Value) { - *self = Self::Value(new); - } - - pub fn take(&mut self, stack_trace: &[SourceReference]) -> ExpressionResult { - if let Self::Value(value) = &self { - if let Some(value) = value.object_copy() { - // No need to move if it's a copy type. - return Ok(value); - } - } - - let mut old_self = Self::Moved { - location: stack_trace.last().expect("Stack trace was empty").clone(), - }; - std::mem::swap(self, &mut old_self); - - match old_self { - StoredValue::Value(value) => Ok(value), - StoredValue::Moved { location } => { - Err(ValueMovedError { location }.to_error(stack_trace)) - } - } - } - - pub fn access(&self, stack_trace: &[SourceReference]) -> ExpressionResult<&Value> { - match self { - StoredValue::Value(value) => Ok(value), - StoredValue::Moved { location } => Err(ValueMovedError { - location: location.clone(), - } - .to_error(stack_trace)), - } - } - - pub fn access_mut(&mut self, stack_trace: &[SourceReference]) -> ExpressionResult<&mut Value> { - match self { - StoredValue::Value(value) => Ok(value), - StoredValue::Moved { location } => Err(ValueMovedError { - location: location.clone(), - } - .to_error(stack_trace)), - } - } -} - -impl std::hash::Hash for StoredValue { - fn hash(&self, state: &mut H) { - // We only contribute to the hash if we actually contain a value. - if let Self::Value(value) = self { - core::mem::discriminant(value).hash(state); - } - } -} - -impl From for StoredValue -where - V: Into, -{ - fn from(value: V) -> Self { - Self::Value(value.into()) - } -} - -#[derive(Debug, Eq, PartialEq)] -struct ValueMovedError { - location: SourceReference, -} - -impl ErrorType for ValueMovedError {} - -impl Display for ValueMovedError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "value has was moved at {}", self.location) - } -} - #[enum_dispatch(Object, ObjectCopy)] -#[derive(Debug, Eq, PartialEq, EnumDowncast, EnumAs)] +#[derive(Debug, Eq, PartialEq, EnumDowncast, EnumAs, Clone)] pub enum Value { ValueNone, Default(DefaultValue), diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index fa81a67..95b492c 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -20,8 +20,8 @@ use std::{borrow::Cow, fmt::Display, sync::Arc}; use common_data_types::Dimension; use super::{ - closure::Signature as ClosureSignature, Boolean, DefaultValue, Object, ObjectCopy, - SignedInteger, StaticTypeName, UnsignedInteger, Value, ValueNone, + closure::Signature as ClosureSignature, Boolean, DefaultValue, Object, SignedInteger, + StaticTypeName, UnsignedInteger, Value, ValueNone, }; use crate::{ @@ -90,13 +90,6 @@ impl StaticTypeName for ValueType { } } -impl ObjectCopy for ValueType { - fn object_copy(&self) -> Option { - // It's not quite as cheap as a copy but it's still cheap enough. - Some(self.clone().into()) - } -} - #[derive(Debug, Eq, PartialEq)] pub struct StructMember { pub name: String, From 4034bb23ed15e8436ce7cd2bb678e367d13b448b Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 29 Nov 2025 12:29:14 -0500 Subject: [PATCH 035/106] Minimal implementation of strings --- Cargo.lock | 9 ++- crates/interpreter/Cargo.toml | 1 + crates/interpreter/src/execution/mod.rs | 13 +++- .../interpreter/src/execution/values/mod.rs | 5 +- .../src/execution/values/string.rs | 59 +++++++++++++++++++ 5 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 crates/interpreter/src/execution/values/string.rs diff --git a/Cargo.lock b/Cargo.lock index 178c5ab..10a5d7c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -307,7 +307,7 @@ dependencies = [ "fortuples", "git2", "glam", - "imstr", + "imstr 0.2.0 (git+https://github.com/IamTheCarl/imstr)", "lazy_static", "log", "macros", @@ -928,6 +928,12 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "imstr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d3441deb04ea9c6b472f313be54d585428cd6a68cdb8dcf40cf43744bec78fe" + [[package]] name = "imstr" version = "0.2.0" @@ -957,6 +963,7 @@ dependencies = [ "file-guard", "fortuples", "hashable-map", + "imstr 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits", "pretty_assertions", "tree-sitter", diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index 3401aee..1d3e22e 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -17,6 +17,7 @@ compact_str = "0.9" num-traits = "0.2" fortuples = "0.9" hashable-map = "0.4.0" +imstr = "0.2.0" [build-dependencies] type-sitter-gen = "0.8" diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 5910ec0..fdddeba 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -133,7 +133,9 @@ pub fn execute_expression( compile::Expression::SignedInteger(ast_node) => { Ok(values::SignedInteger::from(ast_node.node).into()) } - compile::Expression::String(ast_node) => todo!(), + compile::Expression::String(ast_node) => { + Ok(values::IString::from(ast_node.node.clone()).into()) + } compile::Expression::StructDefinition(ast_node) => Ok(ValueType::from( values::StructDefinition::new(log, stack_trace, stack, ast_node)?, ) @@ -362,4 +364,13 @@ mod test { let product = test_run("let value = 23u; in value").unwrap(); assert_eq!(product, values::UnsignedInteger::from(23).into()); } + + #[test] + fn string() { + let product = test_run("\"a simple string of text\"").unwrap(); + assert_eq!( + product, + values::IString::from("a simple string of text").into() + ); + } } diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 4534430..6ad94b4 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -50,6 +50,9 @@ pub use closure::UserClosure; mod dictionary; pub use dictionary::Dictionary; +mod string; +pub use string::IString; + mod value_type; pub use value_type::{StructDefinition, StructMember, ValueType}; @@ -329,7 +332,7 @@ pub enum Value { ValueType, Dictionary(Dictionary), // List(List), - // String(SString), + String(IString), // Range(Range), // Closure(Closure), // Vector2(Vector2), diff --git a/crates/interpreter/src/execution/values/string.rs b/crates/interpreter/src/execution/values/string.rs new file mode 100644 index 0000000..e85de78 --- /dev/null +++ b/crates/interpreter/src/execution/values/string.rs @@ -0,0 +1,59 @@ +/* + * Copyright 2024 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use imstr::ImString; + +use crate::{compile::SourceReference, execution::logging::RuntimeLog}; + +use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; + +#[derive(Debug, Hash, Clone, Eq, PartialEq)] +pub struct IString(pub ImString); + +impl Object for IString { + fn get_type(&self) -> ValueType { + ValueType::Boolean + } + + fn eq( + self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(self.0 == rhs.0) + } + + // TODO we need to add a bunch of manipulation methods to this. +} + +impl StaticTypeName for IString { + fn static_type_name() -> &'static str { + "String" + } +} + +impl From for IString +where + S: Into, +{ + fn from(value: S) -> Self { + Self(value.into()) + } +} From b606bfdf2bffc8a51f9fade5bfd9b04caa773f23 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 29 Nov 2025 14:07:18 -0500 Subject: [PATCH 036/106] Implement function calls --- crates/interpreter/src/compile/expressions.rs | 36 +- crates/interpreter/src/execution/mod.rs | 16 +- .../src/execution/values/closure.rs | 38 +- .../src/execution/values/dictionary.rs | 4 + .../interpreter/src/execution/values/mod.rs | 7 +- .../tree-sitter-command-cad-model/grammar.js | 2 +- .../src/grammar.json | 2 +- .../src/parser.c | 817 +++++++++--------- .../test/corpus/closure.txt | 32 + 9 files changed, 532 insertions(+), 422 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 4e89c94..54c4a9f 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -783,7 +783,7 @@ impl<'t> Parse<'t, nodes::DictionaryConstruction<'t>> for DictionaryConstruction pub struct ClosureDefinition { pub argument_type: AstNode, pub return_type: AstNode, - pub expression: AstNode>, + pub expression: Arc>, } impl<'t> Parse<'t, nodes::ClosureDefinition<'t>> for ClosureDefinition { @@ -800,10 +800,10 @@ impl<'t> Parse<'t, nodes::ClosureDefinition<'t>> for ClosureDefinition { let expression = value.expression()?; let expression = Expression::parse(file, input, expression)?; - let expression = AstNode { + let expression = Arc::new(AstNode { reference: expression.reference, - node: Arc::new(expression.node), - }; + node: expression.node, + }); Ok(AstNode::new( file, @@ -896,7 +896,7 @@ impl<'t> Parse<'t, nodes::StructDefinition<'t>> for StructDefinition { #[derive(Debug, Hash, Eq, PartialEq)] pub struct FunctionCall { - pub to_call: AstNode>, + pub to_call: AstNode, pub argument: AstNode, } @@ -906,7 +906,7 @@ impl<'t> Parse<'t, nodes::FunctionCall<'t>> for FunctionCall { input: &'i str, value: nodes::FunctionCall<'t>, ) -> Result, Error<'t, 'i>> { - let to_call = Expression::parse(file, input, value.to_call()?)?.into_box(); + let to_call = Expression::parse(file, input, value.to_call()?)?; let argument = DictionaryConstruction::parse(file, input, value.argument()?)?; Ok(AstNode::new(file, &value, Self { to_call, argument })) @@ -1149,13 +1149,13 @@ mod test { } }) }, - expression: AstNode { + expression: Arc::new(AstNode { reference: expression_reference, - node: Arc::new(Expression::String(AstNode { + node: Expression::String(AstNode { reference: string_reference, node: String::new() - })) - } + }) + }) }) }) } @@ -1827,10 +1827,10 @@ mod test { reference: root.reference.clone(), node: Expression::FunctionCall(AstNode { reference: call.reference.clone(), - node: FunctionCall { + node: Box::new(FunctionCall { to_call: AstNode { reference: call.node.to_call.reference.clone(), - node: Box::new(Expression::Path(AstNode { + node: Expression::Path(AstNode { reference: to_call.reference.clone(), node: IdentityPath { path: vec![ @@ -1844,7 +1844,7 @@ mod test { } ] } - })) + }) }, argument: AstNode { reference: call.node.argument.reference.clone(), @@ -1852,7 +1852,7 @@ mod test { assignments: vec![] } } - } + }) }) } ); @@ -1871,10 +1871,10 @@ mod test { reference: root.reference.clone(), node: Expression::FunctionCall(AstNode { reference: call.reference.clone(), - node: FunctionCall { + node: Box::new(FunctionCall { to_call: AstNode { reference: call.node.to_call.reference.clone(), - node: Box::new(Expression::Path(AstNode { + node: Expression::Path(AstNode { reference: to_call.reference.clone(), node: IdentityPath { path: vec![ @@ -1888,7 +1888,7 @@ mod test { } ] } - })) + }) }, argument: AstNode { reference: call.node.argument.reference.clone(), @@ -1922,7 +1922,7 @@ mod test { }] } } - } + }) }) } ); diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index fdddeba..d9ffefb 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -146,7 +146,9 @@ pub fn execute_expression( compile::Expression::UnsignedInteger(ast_node) => { Ok(values::UnsignedInteger::from(ast_node.node).into()) } - compile::Expression::FunctionCall(ast_node) => todo!(), + compile::Expression::FunctionCall(ast_node) => { + execute_function_call(log, stack_trace, stack, ast_node) + } compile::Expression::MethodCall(ast_node) => todo!(), compile::Expression::LetIn(ast_node) => { execute_let_in(log, stack_trace, stack, ast_node) @@ -172,6 +174,18 @@ fn execute_unary_expression( }) } +fn execute_function_call( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + call: &compile::AstNode>, +) -> ExpressionResult { + let to_call = execute_expression(log, stack_trace, stack, &call.node.to_call)?; + let argument = values::Dictionary::from_ast(log, stack_trace, stack, &call.node.argument)?; + + to_call.call(log, stack_trace, stack, argument) +} + fn execute_let_in( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 99a1f6f..e9e7596 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -24,8 +24,8 @@ use crate::{ execution::{ errors::{ExpressionResult, Raise}, logging::{RuntimeLog, StackScope}, - stack::Stack, - values::DowncastError, + stack::{ScopeType, Stack}, + values::{Dictionary, DowncastError, Value}, }, }; @@ -40,7 +40,7 @@ pub struct Signature { impl Display for Signature { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}[...] -> {}", self.argument_type, self.return_type) + write!(f, "{} -> {}", self.argument_type, self.return_type) } } @@ -49,7 +49,7 @@ impl Display for Signature { #[derive(Debug, Eq, PartialEq)] struct UserClosureInternals { signature: Arc, - expression: Arc, + expression: Arc>, } #[derive(Debug, Eq, PartialEq, Clone)] @@ -94,7 +94,7 @@ impl UserClosure { return_type, }); - let expression = source.node.expression.node.clone(); + let expression = source.node.expression.clone(); Ok(Self { data: Arc::new(UserClosureInternals { @@ -109,6 +109,22 @@ impl Object for UserClosure { fn get_type(&self) -> ValueType { ValueType::Closure(self.data.signature.clone()) } + + fn call( + &self, + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + argument: Dictionary, + ) -> ExpressionResult { + stack.scope(stack_trace, ScopeType::Isolated, |stack, stack_trace| { + for (name, value) in argument.iter() { + stack.insert_value(name, value.clone()); + } + + execute_expression(log, stack_trace, stack, &self.data.expression) + })? + } } impl StaticTypeName for UserClosure { @@ -418,7 +434,8 @@ impl StaticTypeName for UserClosure { #[cfg(test)] mod test { use super::*; - use crate::execution::test_run; + use crate::execution::{test_run, values, values::UnsignedInteger}; + use pretty_assertions::assert_eq; #[test] fn define_closure() { @@ -444,4 +461,13 @@ mod test { .into() ); } + + #[test] + fn call_closure() { + let product = test_run( + "let my_function = (a: std.types.UInt) -> std.types.UInt: a + 2u; in my_function(a = 3u)", + ) + .unwrap(); + assert_eq!(product, values::UnsignedInteger::from(5).into()); + } } diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index 068ea71..59a8da6 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -105,6 +105,10 @@ impl Dictionary { Ok(Self::from(members)) } + + pub fn iter(&self) -> impl Iterator { + self.members.iter() + } } #[derive(Debug, Eq, PartialEq)] diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 6ad94b4..1080378 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -22,7 +22,7 @@ use enum_dispatch::enum_dispatch; use enum_downcast::{AsVariant, EnumDowncast, IntoVariant}; use unwrap_enum::EnumAs; -use crate::compile::SourceReference; +use crate::{compile::SourceReference, execution::stack::Stack}; use super::{ errors::{ErrorType, ExpressionResult, Raise as _}, @@ -268,8 +268,9 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { fn call( &self, _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _argument: Value, + stack_trace: &mut Vec, + _stack: &mut Stack, + _argument: Dictionary, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "call") } diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index b9c1589..989317d 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -8,7 +8,6 @@ // @ts-check const PREC = { - closure: 19, struct_member: 18, unit: 17, method_call: 16, @@ -27,6 +26,7 @@ const PREC = { or: 2, range: 1, assign: 0, + closure: -1, struct_def: -2, }; diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 92e2bf5..ae6a917 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -1632,7 +1632,7 @@ }, "closure_definition": { "type": "PREC_LEFT", - "value": 19, + "value": -1, "content": { "type": "SEQ", "members": [ diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index aaae2e9..f661504 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -6918,53 +6918,70 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [5794] = 4, + [5794] = 21, + ACTIONS(33), 1, + anon_sym_COLON, + ACTIONS(39), 1, + anon_sym_STAR_STAR, + ACTIONS(43), 1, + anon_sym_SLASH_SLASH, + ACTIONS(45), 1, + anon_sym_LT_LT, + ACTIONS(47), 1, + anon_sym_GT_GT, + ACTIONS(49), 1, + anon_sym_AMP, + ACTIONS(51), 1, + anon_sym_PIPE, + ACTIONS(53), 1, + anon_sym_CARET, + ACTIONS(59), 1, + anon_sym_AMP_AMP, + ACTIONS(61), 1, + anon_sym_PIPE_PIPE, + ACTIONS(63), 1, + anon_sym_DOT_DOT, + ACTIONS(65), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(192), 1, + anon_sym_LPAREN, STATE(86), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(238), 17, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(240), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, + ACTIONS(190), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, + ACTIONS(240), 6, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5844] = 3, + ACTIONS(238), 9, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_else, + anon_sym_let, + [5878] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7008,7 +7025,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5891] = 3, + [5925] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7052,7 +7069,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5938] = 3, + [5972] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7096,7 +7113,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5985] = 3, + [6019] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7140,7 +7157,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6032] = 3, + [6066] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7184,7 +7201,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6079] = 4, + [6113] = 4, ACTIONS(198), 1, anon_sym_else, ACTIONS(3), 2, @@ -7229,7 +7246,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6128] = 3, + [6162] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7273,7 +7290,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6175] = 3, + [6209] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7317,7 +7334,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6222] = 3, + [6256] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7361,7 +7378,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6269] = 3, + [6303] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7405,7 +7422,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6316] = 3, + [6350] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7449,7 +7466,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6363] = 3, + [6397] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7493,7 +7510,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6410] = 3, + [6444] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7537,7 +7554,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6457] = 3, + [6491] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7581,7 +7598,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6504] = 3, + [6538] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7625,7 +7642,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6551] = 3, + [6585] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7669,7 +7686,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6598] = 3, + [6632] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7713,7 +7730,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6645] = 4, + [6679] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7756,7 +7773,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6692] = 6, + [6726] = 6, ACTIONS(298), 1, sym_identifier, ACTIONS(300), 1, @@ -7799,7 +7816,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6741] = 4, + [6775] = 4, ACTIONS(302), 1, anon_sym_DOT, ACTIONS(3), 2, @@ -7840,7 +7857,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6786] = 5, + [6820] = 5, ACTIONS(304), 1, anon_sym_DOT, STATE(106), 1, @@ -7881,7 +7898,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [6832] = 5, + [6866] = 5, ACTIONS(306), 1, anon_sym_DOT, STATE(103), 1, @@ -7922,7 +7939,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [6878] = 3, + [6912] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7961,7 +7978,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6920] = 3, + [6954] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -8000,7 +8017,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6962] = 5, + [6996] = 5, ACTIONS(304), 1, anon_sym_DOT, STATE(103), 1, @@ -8041,7 +8058,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [7008] = 3, + [7042] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -8079,7 +8096,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [7049] = 4, + [7083] = 4, ACTIONS(309), 1, anon_sym_DASH_GT, ACTIONS(3), 2, @@ -8117,7 +8134,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7091] = 9, + [7125] = 9, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -8160,7 +8177,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7143] = 6, + [7177] = 6, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(319), 1, @@ -8200,7 +8217,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7189] = 3, + [7223] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -8237,7 +8254,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [7229] = 10, + [7263] = 10, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -8281,7 +8298,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7283] = 7, + [7317] = 7, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -8322,7 +8339,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7331] = 14, + [7365] = 14, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -8370,7 +8387,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7393] = 11, + [7427] = 11, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -8415,7 +8432,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7449] = 13, + [7483] = 13, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -8462,7 +8479,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7509] = 16, + [7543] = 16, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -8512,7 +8529,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7575] = 17, + [7609] = 17, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -8563,7 +8580,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7643] = 12, + [7677] = 12, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -8609,7 +8626,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7701] = 20, + [7735] = 20, ACTIONS(194), 1, anon_sym_EQ, ACTIONS(311), 1, @@ -8663,7 +8680,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7775] = 20, + [7809] = 20, ACTIONS(204), 1, anon_sym_EQ, ACTIONS(311), 1, @@ -8717,45 +8734,61 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7849] = 4, + [7883] = 20, + ACTIONS(238), 1, + anon_sym_EQ, + ACTIONS(311), 1, + anon_sym_COLON, + ACTIONS(313), 1, + anon_sym_STAR_STAR, + ACTIONS(317), 1, + anon_sym_SLASH_SLASH, + ACTIONS(319), 1, + anon_sym_LPAREN, + ACTIONS(325), 1, + anon_sym_AMP, + ACTIONS(327), 1, + anon_sym_PIPE, + ACTIONS(329), 1, + anon_sym_CARET, + ACTIONS(335), 1, + anon_sym_AMP_AMP, + ACTIONS(337), 1, + anon_sym_PIPE_PIPE, + ACTIONS(339), 1, + anon_sym_DOT_DOT, + ACTIONS(341), 1, + anon_sym_DOT_DOT_EQ, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(238), 8, + ACTIONS(315), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(240), 22, - ts_builtin_sym_end, - anon_sym_COLON, + ACTIONS(321), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(331), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(333), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(240), 6, + ts_builtin_sym_end, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7891] = 20, + [7957] = 20, ACTIONS(214), 1, anon_sym_EQ, ACTIONS(311), 1, @@ -8809,7 +8842,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7965] = 4, + [8031] = 4, ACTIONS(212), 1, anon_sym_DASH_GT, ACTIONS(3), 2, @@ -8847,7 +8880,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8007] = 3, + [8073] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -8884,7 +8917,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [8047] = 18, + [8113] = 18, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -8936,7 +8969,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8117] = 3, + [8183] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -8973,7 +9006,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [8157] = 3, + [8223] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9010,7 +9043,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [8197] = 3, + [8263] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9047,7 +9080,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [8237] = 20, + [8303] = 20, ACTIONS(230), 1, anon_sym_EQ, ACTIONS(311), 1, @@ -9101,7 +9134,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8311] = 3, + [8377] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9138,7 +9171,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [8351] = 3, + [8417] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9174,7 +9207,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8390] = 3, + [8456] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9210,7 +9243,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8429] = 3, + [8495] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9246,7 +9279,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8468] = 3, + [8534] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9282,7 +9315,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8507] = 3, + [8573] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9318,7 +9351,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8546] = 3, + [8612] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9354,7 +9387,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8585] = 3, + [8651] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9390,7 +9423,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8624] = 3, + [8690] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9426,7 +9459,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8663] = 3, + [8729] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9462,7 +9495,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8702] = 3, + [8768] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9498,7 +9531,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8741] = 3, + [8807] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9534,7 +9567,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8780] = 3, + [8846] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9570,7 +9603,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8819] = 3, + [8885] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9606,7 +9639,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8858] = 8, + [8924] = 8, ACTIONS(304), 1, anon_sym_DOT, ACTIONS(343), 1, @@ -9646,7 +9679,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_DASH_GT, - [8906] = 20, + [8972] = 20, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -9696,7 +9729,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [8976] = 20, + [9042] = 20, ACTIONS(123), 1, anon_sym_RBRACK, ACTIONS(311), 1, @@ -9745,7 +9778,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9045] = 19, + [9111] = 19, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -9793,7 +9826,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9112] = 20, + [9178] = 20, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -9842,7 +9875,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9181] = 20, + [9247] = 20, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -9891,7 +9924,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9250] = 19, + [9316] = 19, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -9939,7 +9972,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9317] = 20, + [9383] = 20, ACTIONS(127), 1, anon_sym_RBRACK, ACTIONS(311), 1, @@ -9988,7 +10021,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9386] = 19, + [9452] = 19, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -10035,7 +10068,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9452] = 19, + [9518] = 19, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -10082,7 +10115,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9518] = 19, + [9584] = 19, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -10129,7 +10162,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9584] = 19, + [9650] = 19, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -10176,7 +10209,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9650] = 19, + [9716] = 19, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -10223,7 +10256,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9716] = 19, + [9782] = 19, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -10270,7 +10303,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9782] = 19, + [9848] = 19, ACTIONS(311), 1, anon_sym_COLON, ACTIONS(313), 1, @@ -10317,7 +10350,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9848] = 14, + [9914] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10356,7 +10389,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [9901] = 14, + [9967] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10395,7 +10428,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [9954] = 14, + [10020] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10434,7 +10467,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10007] = 14, + [10073] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -10473,7 +10506,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10060] = 14, + [10126] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -10512,7 +10545,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10113] = 14, + [10179] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -10551,7 +10584,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10166] = 14, + [10232] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10590,7 +10623,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10219] = 14, + [10285] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -10629,7 +10662,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10272] = 14, + [10338] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -10668,7 +10701,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10325] = 14, + [10391] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10707,7 +10740,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10378] = 14, + [10444] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10746,7 +10779,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10431] = 14, + [10497] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10785,7 +10818,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10484] = 14, + [10550] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -10824,7 +10857,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10537] = 3, + [10603] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10848,7 +10881,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LT_LT_LT, - [10564] = 3, + [10630] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10871,7 +10904,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [10590] = 4, + [10656] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10894,7 +10927,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10617] = 4, + [10683] = 4, ACTIONS(387), 1, anon_sym_DOT, ACTIONS(3), 2, @@ -10915,7 +10948,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10642] = 5, + [10708] = 5, STATE(185), 1, sym__unit, ACTIONS(3), 2, @@ -10937,7 +10970,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10669] = 3, + [10735] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10956,7 +10989,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10691] = 3, + [10757] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10975,7 +11008,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10713] = 3, + [10779] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10994,7 +11027,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [10735] = 3, + [10801] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11013,7 +11046,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [10757] = 3, + [10823] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11032,7 +11065,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [10779] = 3, + [10845] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11049,7 +11082,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10799] = 4, + [10865] = 4, ACTIONS(403), 1, anon_sym_STAR_STAR, ACTIONS(3), 2, @@ -11067,7 +11100,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10821] = 3, + [10887] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11084,7 +11117,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10841] = 7, + [10907] = 7, ACTIONS(403), 1, anon_sym_STAR_STAR, ACTIONS(407), 1, @@ -11105,7 +11138,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10869] = 6, + [10935] = 6, ACTIONS(403), 1, anon_sym_STAR_STAR, ACTIONS(407), 1, @@ -11125,7 +11158,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10895] = 7, + [10961] = 7, ACTIONS(403), 1, anon_sym_STAR_STAR, ACTIONS(407), 1, @@ -11146,7 +11179,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10923] = 7, + [10989] = 7, ACTIONS(403), 1, anon_sym_STAR_STAR, ACTIONS(407), 1, @@ -11167,7 +11200,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10951] = 3, + [11017] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11184,7 +11217,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10971] = 5, + [11037] = 5, ACTIONS(423), 1, anon_sym_STAR_STAR, ACTIONS(425), 1, @@ -11199,7 +11232,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [10991] = 6, + [11057] = 6, ACTIONS(423), 1, anon_sym_STAR_STAR, ACTIONS(425), 1, @@ -11215,7 +11248,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(429), 2, anon_sym_DASH, anon_sym_PLUS, - [11013] = 4, + [11079] = 4, ACTIONS(393), 1, anon_sym_STAR, ACTIONS(423), 1, @@ -11229,7 +11262,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SLASH, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [11031] = 6, + [11097] = 6, ACTIONS(423), 1, anon_sym_STAR_STAR, ACTIONS(425), 1, @@ -11244,7 +11277,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(429), 2, anon_sym_DASH, anon_sym_PLUS, - [11052] = 6, + [11118] = 6, ACTIONS(423), 1, anon_sym_STAR_STAR, ACTIONS(425), 1, @@ -11259,7 +11292,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(429), 2, anon_sym_DASH, anon_sym_PLUS, - [11073] = 7, + [11139] = 7, ACTIONS(73), 1, sym_varadic_dots, ACTIONS(435), 1, @@ -11275,7 +11308,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11096] = 7, + [11162] = 7, ACTIONS(73), 1, sym_varadic_dots, ACTIONS(435), 1, @@ -11291,7 +11324,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11119] = 7, + [11185] = 7, ACTIONS(73), 1, sym_varadic_dots, ACTIONS(435), 1, @@ -11307,7 +11340,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11142] = 6, + [11208] = 6, ACTIONS(423), 1, anon_sym_STAR_STAR, ACTIONS(425), 1, @@ -11322,7 +11355,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(429), 2, anon_sym_DASH, anon_sym_PLUS, - [11163] = 5, + [11229] = 5, ACTIONS(445), 1, sym_identifier, STATE(200), 1, @@ -11335,7 +11368,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(448), 2, anon_sym_RPAREN, sym_varadic_dots, - [11181] = 4, + [11247] = 4, ACTIONS(450), 1, sym_identifier, ACTIONS(453), 1, @@ -11346,7 +11379,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(201), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11196] = 4, + [11262] = 4, ACTIONS(455), 1, sym_identifier, ACTIONS(457), 1, @@ -11357,7 +11390,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(201), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11211] = 4, + [11277] = 4, ACTIONS(455), 1, sym_identifier, ACTIONS(459), 1, @@ -11368,7 +11401,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(204), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11226] = 4, + [11292] = 4, ACTIONS(455), 1, sym_identifier, ACTIONS(461), 1, @@ -11379,7 +11412,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(201), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11241] = 4, + [11307] = 4, ACTIONS(455), 1, sym_identifier, ACTIONS(463), 1, @@ -11390,7 +11423,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(202), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11256] = 4, + [11322] = 4, ACTIONS(465), 1, sym_identifier, ACTIONS(467), 1, @@ -11401,7 +11434,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(44), 2, sym_path, sym_struct_definition, - [11271] = 4, + [11337] = 4, ACTIONS(465), 1, sym_identifier, ACTIONS(467), 1, @@ -11412,7 +11445,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(23), 2, sym_path, sym_struct_definition, - [11286] = 4, + [11352] = 4, ACTIONS(469), 1, anon_sym_RPAREN, ACTIONS(471), 1, @@ -11422,7 +11455,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11300] = 4, + [11366] = 4, ACTIONS(474), 1, sym_identifier, ACTIONS(476), 1, @@ -11432,7 +11465,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11314] = 4, + [11380] = 4, ACTIONS(478), 1, anon_sym_RPAREN, ACTIONS(480), 1, @@ -11442,7 +11475,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11328] = 3, + [11394] = 3, ACTIONS(482), 1, anon_sym_EQ, ACTIONS(3), 2, @@ -11451,7 +11484,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(484), 2, anon_sym_RPAREN, anon_sym_COMMA, - [11340] = 4, + [11406] = 4, ACTIONS(486), 1, anon_sym_RPAREN, ACTIONS(488), 1, @@ -11461,7 +11494,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11354] = 4, + [11420] = 4, ACTIONS(474), 1, sym_identifier, ACTIONS(490), 1, @@ -11471,7 +11504,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11368] = 4, + [11434] = 4, ACTIONS(474), 1, sym_identifier, ACTIONS(492), 1, @@ -11481,7 +11514,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11382] = 4, + [11448] = 4, ACTIONS(474), 1, sym_identifier, ACTIONS(494), 1, @@ -11491,7 +11524,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11396] = 4, + [11462] = 4, ACTIONS(494), 1, anon_sym_RPAREN, ACTIONS(496), 1, @@ -11501,7 +11534,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11410] = 2, + [11476] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11509,7 +11542,7 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, anon_sym_RPAREN, sym_varadic_dots, - [11420] = 4, + [11486] = 4, ACTIONS(474), 1, sym_identifier, ACTIONS(498), 1, @@ -11519,7 +11552,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11434] = 4, + [11500] = 4, ACTIONS(474), 1, sym_identifier, ACTIONS(500), 1, @@ -11529,7 +11562,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11448] = 4, + [11514] = 4, ACTIONS(500), 1, anon_sym_RPAREN, ACTIONS(502), 1, @@ -11539,7 +11572,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11462] = 3, + [11528] = 3, ACTIONS(343), 1, anon_sym_COLON, STATE(211), 1, @@ -11547,28 +11580,28 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11473] = 2, + [11539] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(469), 2, anon_sym_RPAREN, anon_sym_COMMA, - [11482] = 2, + [11548] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(504), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [11491] = 2, + [11557] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(506), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [11500] = 3, + [11566] = 3, ACTIONS(508), 1, anon_sym_RPAREN, ACTIONS(510), 1, @@ -11576,28 +11609,28 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11511] = 2, + [11577] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(512), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [11520] = 2, + [11586] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(514), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [11529] = 2, + [11595] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(516), 2, sym_identifier, anon_sym_in, - [11538] = 3, + [11604] = 3, ACTIONS(518), 1, aux_sym_signed_integer_token1, ACTIONS(520), 1, @@ -11605,7 +11638,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11549] = 3, + [11615] = 3, ACTIONS(319), 1, anon_sym_LPAREN, STATE(134), 1, @@ -11613,7 +11646,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11560] = 3, + [11626] = 3, ACTIONS(522), 1, aux_sym_base_ten_token1, STATE(67), 1, @@ -11621,7 +11654,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11571] = 3, + [11637] = 3, ACTIONS(474), 1, sym_identifier, STATE(222), 1, @@ -11629,7 +11662,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11582] = 3, + [11648] = 3, ACTIONS(508), 1, anon_sym_RPAREN, ACTIONS(524), 1, @@ -11637,7 +11670,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11593] = 3, + [11659] = 3, ACTIONS(526), 1, aux_sym_signed_integer_token1, ACTIONS(528), 1, @@ -11645,7 +11678,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11604] = 3, + [11670] = 3, ACTIONS(530), 1, aux_sym_signed_integer_token1, ACTIONS(532), 1, @@ -11653,7 +11686,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11615] = 3, + [11681] = 3, ACTIONS(192), 1, anon_sym_LPAREN, STATE(94), 1, @@ -11661,7 +11694,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11626] = 3, + [11692] = 3, ACTIONS(534), 1, aux_sym_base_ten_token1, STATE(179), 1, @@ -11669,7 +11702,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11637] = 3, + [11703] = 3, ACTIONS(536), 1, aux_sym_base_ten_token1, STATE(104), 1, @@ -11677,97 +11710,97 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11648] = 2, + [11714] = 2, ACTIONS(538), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11656] = 2, + [11722] = 2, ACTIONS(540), 1, aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11664] = 2, + [11730] = 2, ACTIONS(542), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11672] = 2, + [11738] = 2, ACTIONS(544), 1, aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11680] = 2, + [11746] = 2, ACTIONS(546), 1, ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11688] = 2, + [11754] = 2, ACTIONS(548), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11696] = 2, + [11762] = 2, ACTIONS(510), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11704] = 2, + [11770] = 2, ACTIONS(550), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11712] = 2, + [11778] = 2, ACTIONS(552), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11720] = 2, + [11786] = 2, ACTIONS(554), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11728] = 2, + [11794] = 2, ACTIONS(556), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11736] = 2, + [11802] = 2, ACTIONS(558), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11744] = 2, + [11810] = 2, ACTIONS(560), 1, aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11752] = 2, + [11818] = 2, ACTIONS(562), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11760] = 2, + [11826] = 2, ACTIONS(564), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11768] = 2, + [11834] = 2, ACTIONS(566), 1, anon_sym_RPAREN, ACTIONS(3), 2, @@ -11851,179 +11884,179 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(79)] = 5684, [SMALL_STATE(80)] = 5746, [SMALL_STATE(81)] = 5794, - [SMALL_STATE(82)] = 5844, - [SMALL_STATE(83)] = 5891, - [SMALL_STATE(84)] = 5938, - [SMALL_STATE(85)] = 5985, - [SMALL_STATE(86)] = 6032, - [SMALL_STATE(87)] = 6079, - [SMALL_STATE(88)] = 6128, - [SMALL_STATE(89)] = 6175, - [SMALL_STATE(90)] = 6222, - [SMALL_STATE(91)] = 6269, - [SMALL_STATE(92)] = 6316, - [SMALL_STATE(93)] = 6363, - [SMALL_STATE(94)] = 6410, - [SMALL_STATE(95)] = 6457, - [SMALL_STATE(96)] = 6504, - [SMALL_STATE(97)] = 6551, - [SMALL_STATE(98)] = 6598, - [SMALL_STATE(99)] = 6645, - [SMALL_STATE(100)] = 6692, - [SMALL_STATE(101)] = 6741, - [SMALL_STATE(102)] = 6786, - [SMALL_STATE(103)] = 6832, - [SMALL_STATE(104)] = 6878, - [SMALL_STATE(105)] = 6920, - [SMALL_STATE(106)] = 6962, - [SMALL_STATE(107)] = 7008, - [SMALL_STATE(108)] = 7049, - [SMALL_STATE(109)] = 7091, - [SMALL_STATE(110)] = 7143, - [SMALL_STATE(111)] = 7189, - [SMALL_STATE(112)] = 7229, - [SMALL_STATE(113)] = 7283, - [SMALL_STATE(114)] = 7331, - [SMALL_STATE(115)] = 7393, - [SMALL_STATE(116)] = 7449, - [SMALL_STATE(117)] = 7509, - [SMALL_STATE(118)] = 7575, - [SMALL_STATE(119)] = 7643, - [SMALL_STATE(120)] = 7701, - [SMALL_STATE(121)] = 7775, - [SMALL_STATE(122)] = 7849, - [SMALL_STATE(123)] = 7891, - [SMALL_STATE(124)] = 7965, - [SMALL_STATE(125)] = 8007, - [SMALL_STATE(126)] = 8047, - [SMALL_STATE(127)] = 8117, - [SMALL_STATE(128)] = 8157, - [SMALL_STATE(129)] = 8197, - [SMALL_STATE(130)] = 8237, - [SMALL_STATE(131)] = 8311, - [SMALL_STATE(132)] = 8351, - [SMALL_STATE(133)] = 8390, - [SMALL_STATE(134)] = 8429, - [SMALL_STATE(135)] = 8468, - [SMALL_STATE(136)] = 8507, - [SMALL_STATE(137)] = 8546, - [SMALL_STATE(138)] = 8585, - [SMALL_STATE(139)] = 8624, - [SMALL_STATE(140)] = 8663, - [SMALL_STATE(141)] = 8702, - [SMALL_STATE(142)] = 8741, - [SMALL_STATE(143)] = 8780, - [SMALL_STATE(144)] = 8819, - [SMALL_STATE(145)] = 8858, - [SMALL_STATE(146)] = 8906, - [SMALL_STATE(147)] = 8976, - [SMALL_STATE(148)] = 9045, - [SMALL_STATE(149)] = 9112, - [SMALL_STATE(150)] = 9181, - [SMALL_STATE(151)] = 9250, - [SMALL_STATE(152)] = 9317, - [SMALL_STATE(153)] = 9386, - [SMALL_STATE(154)] = 9452, - [SMALL_STATE(155)] = 9518, - [SMALL_STATE(156)] = 9584, - [SMALL_STATE(157)] = 9650, - [SMALL_STATE(158)] = 9716, - [SMALL_STATE(159)] = 9782, - [SMALL_STATE(160)] = 9848, - [SMALL_STATE(161)] = 9901, - [SMALL_STATE(162)] = 9954, - [SMALL_STATE(163)] = 10007, - [SMALL_STATE(164)] = 10060, - [SMALL_STATE(165)] = 10113, - [SMALL_STATE(166)] = 10166, - [SMALL_STATE(167)] = 10219, - [SMALL_STATE(168)] = 10272, - [SMALL_STATE(169)] = 10325, - [SMALL_STATE(170)] = 10378, - [SMALL_STATE(171)] = 10431, - [SMALL_STATE(172)] = 10484, - [SMALL_STATE(173)] = 10537, - [SMALL_STATE(174)] = 10564, - [SMALL_STATE(175)] = 10590, - [SMALL_STATE(176)] = 10617, - [SMALL_STATE(177)] = 10642, - [SMALL_STATE(178)] = 10669, - [SMALL_STATE(179)] = 10691, - [SMALL_STATE(180)] = 10713, - [SMALL_STATE(181)] = 10735, - [SMALL_STATE(182)] = 10757, - [SMALL_STATE(183)] = 10779, - [SMALL_STATE(184)] = 10799, - [SMALL_STATE(185)] = 10821, - [SMALL_STATE(186)] = 10841, - [SMALL_STATE(187)] = 10869, - [SMALL_STATE(188)] = 10895, - [SMALL_STATE(189)] = 10923, - [SMALL_STATE(190)] = 10951, - [SMALL_STATE(191)] = 10971, - [SMALL_STATE(192)] = 10991, - [SMALL_STATE(193)] = 11013, - [SMALL_STATE(194)] = 11031, - [SMALL_STATE(195)] = 11052, - [SMALL_STATE(196)] = 11073, - [SMALL_STATE(197)] = 11096, - [SMALL_STATE(198)] = 11119, - [SMALL_STATE(199)] = 11142, - [SMALL_STATE(200)] = 11163, - [SMALL_STATE(201)] = 11181, - [SMALL_STATE(202)] = 11196, - [SMALL_STATE(203)] = 11211, - [SMALL_STATE(204)] = 11226, - [SMALL_STATE(205)] = 11241, - [SMALL_STATE(206)] = 11256, - [SMALL_STATE(207)] = 11271, - [SMALL_STATE(208)] = 11286, - [SMALL_STATE(209)] = 11300, - [SMALL_STATE(210)] = 11314, - [SMALL_STATE(211)] = 11328, - [SMALL_STATE(212)] = 11340, - [SMALL_STATE(213)] = 11354, - [SMALL_STATE(214)] = 11368, - [SMALL_STATE(215)] = 11382, - [SMALL_STATE(216)] = 11396, - [SMALL_STATE(217)] = 11410, - [SMALL_STATE(218)] = 11420, - [SMALL_STATE(219)] = 11434, - [SMALL_STATE(220)] = 11448, - [SMALL_STATE(221)] = 11462, - [SMALL_STATE(222)] = 11473, - [SMALL_STATE(223)] = 11482, - [SMALL_STATE(224)] = 11491, - [SMALL_STATE(225)] = 11500, - [SMALL_STATE(226)] = 11511, - [SMALL_STATE(227)] = 11520, - [SMALL_STATE(228)] = 11529, - [SMALL_STATE(229)] = 11538, - [SMALL_STATE(230)] = 11549, - [SMALL_STATE(231)] = 11560, - [SMALL_STATE(232)] = 11571, - [SMALL_STATE(233)] = 11582, - [SMALL_STATE(234)] = 11593, - [SMALL_STATE(235)] = 11604, - [SMALL_STATE(236)] = 11615, - [SMALL_STATE(237)] = 11626, - [SMALL_STATE(238)] = 11637, - [SMALL_STATE(239)] = 11648, - [SMALL_STATE(240)] = 11656, - [SMALL_STATE(241)] = 11664, - [SMALL_STATE(242)] = 11672, - [SMALL_STATE(243)] = 11680, - [SMALL_STATE(244)] = 11688, - [SMALL_STATE(245)] = 11696, - [SMALL_STATE(246)] = 11704, - [SMALL_STATE(247)] = 11712, - [SMALL_STATE(248)] = 11720, - [SMALL_STATE(249)] = 11728, - [SMALL_STATE(250)] = 11736, - [SMALL_STATE(251)] = 11744, - [SMALL_STATE(252)] = 11752, - [SMALL_STATE(253)] = 11760, - [SMALL_STATE(254)] = 11768, + [SMALL_STATE(82)] = 5878, + [SMALL_STATE(83)] = 5925, + [SMALL_STATE(84)] = 5972, + [SMALL_STATE(85)] = 6019, + [SMALL_STATE(86)] = 6066, + [SMALL_STATE(87)] = 6113, + [SMALL_STATE(88)] = 6162, + [SMALL_STATE(89)] = 6209, + [SMALL_STATE(90)] = 6256, + [SMALL_STATE(91)] = 6303, + [SMALL_STATE(92)] = 6350, + [SMALL_STATE(93)] = 6397, + [SMALL_STATE(94)] = 6444, + [SMALL_STATE(95)] = 6491, + [SMALL_STATE(96)] = 6538, + [SMALL_STATE(97)] = 6585, + [SMALL_STATE(98)] = 6632, + [SMALL_STATE(99)] = 6679, + [SMALL_STATE(100)] = 6726, + [SMALL_STATE(101)] = 6775, + [SMALL_STATE(102)] = 6820, + [SMALL_STATE(103)] = 6866, + [SMALL_STATE(104)] = 6912, + [SMALL_STATE(105)] = 6954, + [SMALL_STATE(106)] = 6996, + [SMALL_STATE(107)] = 7042, + [SMALL_STATE(108)] = 7083, + [SMALL_STATE(109)] = 7125, + [SMALL_STATE(110)] = 7177, + [SMALL_STATE(111)] = 7223, + [SMALL_STATE(112)] = 7263, + [SMALL_STATE(113)] = 7317, + [SMALL_STATE(114)] = 7365, + [SMALL_STATE(115)] = 7427, + [SMALL_STATE(116)] = 7483, + [SMALL_STATE(117)] = 7543, + [SMALL_STATE(118)] = 7609, + [SMALL_STATE(119)] = 7677, + [SMALL_STATE(120)] = 7735, + [SMALL_STATE(121)] = 7809, + [SMALL_STATE(122)] = 7883, + [SMALL_STATE(123)] = 7957, + [SMALL_STATE(124)] = 8031, + [SMALL_STATE(125)] = 8073, + [SMALL_STATE(126)] = 8113, + [SMALL_STATE(127)] = 8183, + [SMALL_STATE(128)] = 8223, + [SMALL_STATE(129)] = 8263, + [SMALL_STATE(130)] = 8303, + [SMALL_STATE(131)] = 8377, + [SMALL_STATE(132)] = 8417, + [SMALL_STATE(133)] = 8456, + [SMALL_STATE(134)] = 8495, + [SMALL_STATE(135)] = 8534, + [SMALL_STATE(136)] = 8573, + [SMALL_STATE(137)] = 8612, + [SMALL_STATE(138)] = 8651, + [SMALL_STATE(139)] = 8690, + [SMALL_STATE(140)] = 8729, + [SMALL_STATE(141)] = 8768, + [SMALL_STATE(142)] = 8807, + [SMALL_STATE(143)] = 8846, + [SMALL_STATE(144)] = 8885, + [SMALL_STATE(145)] = 8924, + [SMALL_STATE(146)] = 8972, + [SMALL_STATE(147)] = 9042, + [SMALL_STATE(148)] = 9111, + [SMALL_STATE(149)] = 9178, + [SMALL_STATE(150)] = 9247, + [SMALL_STATE(151)] = 9316, + [SMALL_STATE(152)] = 9383, + [SMALL_STATE(153)] = 9452, + [SMALL_STATE(154)] = 9518, + [SMALL_STATE(155)] = 9584, + [SMALL_STATE(156)] = 9650, + [SMALL_STATE(157)] = 9716, + [SMALL_STATE(158)] = 9782, + [SMALL_STATE(159)] = 9848, + [SMALL_STATE(160)] = 9914, + [SMALL_STATE(161)] = 9967, + [SMALL_STATE(162)] = 10020, + [SMALL_STATE(163)] = 10073, + [SMALL_STATE(164)] = 10126, + [SMALL_STATE(165)] = 10179, + [SMALL_STATE(166)] = 10232, + [SMALL_STATE(167)] = 10285, + [SMALL_STATE(168)] = 10338, + [SMALL_STATE(169)] = 10391, + [SMALL_STATE(170)] = 10444, + [SMALL_STATE(171)] = 10497, + [SMALL_STATE(172)] = 10550, + [SMALL_STATE(173)] = 10603, + [SMALL_STATE(174)] = 10630, + [SMALL_STATE(175)] = 10656, + [SMALL_STATE(176)] = 10683, + [SMALL_STATE(177)] = 10708, + [SMALL_STATE(178)] = 10735, + [SMALL_STATE(179)] = 10757, + [SMALL_STATE(180)] = 10779, + [SMALL_STATE(181)] = 10801, + [SMALL_STATE(182)] = 10823, + [SMALL_STATE(183)] = 10845, + [SMALL_STATE(184)] = 10865, + [SMALL_STATE(185)] = 10887, + [SMALL_STATE(186)] = 10907, + [SMALL_STATE(187)] = 10935, + [SMALL_STATE(188)] = 10961, + [SMALL_STATE(189)] = 10989, + [SMALL_STATE(190)] = 11017, + [SMALL_STATE(191)] = 11037, + [SMALL_STATE(192)] = 11057, + [SMALL_STATE(193)] = 11079, + [SMALL_STATE(194)] = 11097, + [SMALL_STATE(195)] = 11118, + [SMALL_STATE(196)] = 11139, + [SMALL_STATE(197)] = 11162, + [SMALL_STATE(198)] = 11185, + [SMALL_STATE(199)] = 11208, + [SMALL_STATE(200)] = 11229, + [SMALL_STATE(201)] = 11247, + [SMALL_STATE(202)] = 11262, + [SMALL_STATE(203)] = 11277, + [SMALL_STATE(204)] = 11292, + [SMALL_STATE(205)] = 11307, + [SMALL_STATE(206)] = 11322, + [SMALL_STATE(207)] = 11337, + [SMALL_STATE(208)] = 11352, + [SMALL_STATE(209)] = 11366, + [SMALL_STATE(210)] = 11380, + [SMALL_STATE(211)] = 11394, + [SMALL_STATE(212)] = 11406, + [SMALL_STATE(213)] = 11420, + [SMALL_STATE(214)] = 11434, + [SMALL_STATE(215)] = 11448, + [SMALL_STATE(216)] = 11462, + [SMALL_STATE(217)] = 11476, + [SMALL_STATE(218)] = 11486, + [SMALL_STATE(219)] = 11500, + [SMALL_STATE(220)] = 11514, + [SMALL_STATE(221)] = 11528, + [SMALL_STATE(222)] = 11539, + [SMALL_STATE(223)] = 11548, + [SMALL_STATE(224)] = 11557, + [SMALL_STATE(225)] = 11566, + [SMALL_STATE(226)] = 11577, + [SMALL_STATE(227)] = 11586, + [SMALL_STATE(228)] = 11595, + [SMALL_STATE(229)] = 11604, + [SMALL_STATE(230)] = 11615, + [SMALL_STATE(231)] = 11626, + [SMALL_STATE(232)] = 11637, + [SMALL_STATE(233)] = 11648, + [SMALL_STATE(234)] = 11659, + [SMALL_STATE(235)] = 11670, + [SMALL_STATE(236)] = 11681, + [SMALL_STATE(237)] = 11692, + [SMALL_STATE(238)] = 11703, + [SMALL_STATE(239)] = 11714, + [SMALL_STATE(240)] = 11722, + [SMALL_STATE(241)] = 11730, + [SMALL_STATE(242)] = 11738, + [SMALL_STATE(243)] = 11746, + [SMALL_STATE(244)] = 11754, + [SMALL_STATE(245)] = 11762, + [SMALL_STATE(246)] = 11770, + [SMALL_STATE(247)] = 11778, + [SMALL_STATE(248)] = 11786, + [SMALL_STATE(249)] = 11794, + [SMALL_STATE(250)] = 11802, + [SMALL_STATE(251)] = 11810, + [SMALL_STATE(252)] = 11818, + [SMALL_STATE(253)] = 11826, + [SMALL_STATE(254)] = 11834, }; static const TSParseActionEntry ts_parse_actions[] = { diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index 5d9a701..f3f0301 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -42,6 +42,38 @@ With argument (expression (string))))) +================== +With Binary Expression +================== + +(argument: std.types.UInt) -> std.None a + b + +--- + +(source_file + (expression + (closure_definition + (struct_definition + (struct_member + (identifier) + (declaration_type + (expression + (path + (identifier) + (identifier) + (identifier)))))) + (path + (identifier) + (identifier)) + (expression + (binary_expression + (expression + (path + (identifier))) + (expression + (path + (identifier)))))))) + ================== Path for argument signature ================== From b0eb5b6a5ccf71af1385fe071f990065f939e3a0 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 30 Nov 2025 22:25:19 +0000 Subject: [PATCH 037/106] Fix warnings about Nix fortification. --- flake.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/flake.nix b/flake.nix index 1682609..815fdab 100644 --- a/flake.nix +++ b/flake.nix @@ -61,6 +61,7 @@ shellHook = '' export SHELL=${pkgs.bashInteractive}/bin/bash + export NIX_HARDENING_ENABLE="" ''; }; From 59fad1a780bf3bca96b5f0b5987b8c55ccdff30e Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 29 Nov 2025 14:15:15 -0500 Subject: [PATCH 038/106] WIP builtin functions --- crates/interpreter/src/compile/expressions.rs | 4 +- .../src/execution/values/closure.rs | 215 +++++++----------- .../interpreter/src/execution/values/mod.rs | 3 +- 3 files changed, 83 insertions(+), 139 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 54c4a9f..1541c88 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -49,7 +49,7 @@ pub enum Expression { StructDefinition(AstNode), UnaryExpression(AstNode>), UnsignedInteger(AstNode), - FunctionCall(AstNode), + FunctionCall(AstNode>), MethodCall(AstNode), LetIn(AstNode>), } @@ -368,7 +368,7 @@ impl<'t> Parse<'t, nodes::FunctionCall<'t>> for Expression { Ok(AstNode::new( file, &value, - Self::FunctionCall(FunctionCall::parse(file, input, value)?), + Self::FunctionCall(FunctionCall::parse(file, input, value)?.into_box()), )) } } diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index e9e7596..f9620fe 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -133,142 +133,61 @@ impl StaticTypeName for UserClosure { } } -// impl std::fmt::Debug for UserClosure { -// fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { -// f.debug_struct("UserClosure") -// .field("address", &Rc::as_ptr(&self.source)) -// .finish() -// } -// } -// -// impl From<&'_ Rc>> for UserFunction { -// fn from(value: &'_ Rc>) -> Self { -// Self { -// source: Rc::clone(value), -// } -// } -// } -// -// impl UserFunction { -// pub fn new(source: Function) -> Self { -// Self { -// source: Rc::new(source), -// } -// } -// } -// -// impl Object for UserFunction { -// fn matches_type( -// &self, -// _ty: &VariableType, -// _log: &mut dyn RuntimeLog, -// _variable_name_span: &S, -// ) -> OperatorResult { -// Ok(false) -// } -// -// fn call( -// &self, -// context: &mut ExecutionContext, -// span: &S, -// arguments: Vec>, -// spans: &[Expression], -// ) -> OperatorResult> { -// context.new_isolated_scope(|context| { -// run_callable_block( -// context, -// &self.source.named_block.callable, -// arguments, -// spans, -// span, -// ) -// }) -// } -// } -// -// impl PartialEq for UserFunction { -// fn eq(&self, _other: &Self) -> bool { -// false -// } -// } -// -// impl NamedObject for UserFunction { -// fn static_type_name() -> &'static str { -// "Function" -// } -// } -// -// pub type BuiltinFunction = dyn Fn( -// &mut ExecutionContext, -// &S, -// Vec>, -// &[Expression], -// ) -> OperatorResult>; -// -// pub struct BuiltinFunctionRef(Rc>); -// -// impl std::ops::Deref for BuiltinFunctionRef { -// type Target = BuiltinFunction; -// -// fn deref(&self) -> &Self::Target { -// &*self.0 -// } -// } -// -// impl std::cmp::Eq for BuiltinFunctionRef {} -// impl std::cmp::PartialEq for BuiltinFunctionRef { -// fn eq(&self, other: &Self) -> bool { -// std::ptr::addr_eq(Rc::as_ptr(&self.0), Rc::as_ptr(&other.0)) -// } -// } -// -// impl Clone for BuiltinFunctionRef { -// fn clone(&self) -> Self { -// Self(Rc::clone(&self.0)) -// } -// } -// -// impl std::fmt::Debug for BuiltinFunctionRef { -// fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { -// let mut debug_struct = f.debug_struct("BuiltinFunction"); -// debug_struct.field("address", &Rc::as_ptr(&self.0)); -// debug_struct.finish() -// } -// } -// -// impl From>> for BuiltinFunctionRef { -// fn from(value: Box>) -> Self { -// Self(value.into()) -// } -// } -// -// impl Object for BuiltinFunctionRef { -// fn matches_type( -// &self, -// _ty: &VariableType, -// _log: &mut dyn RuntimeLog, -// _variable_name_span: &S, -// ) -> OperatorResult { -// Ok(false) -// } -// -// fn call( -// &self, -// context: &mut ExecutionContext, -// span: &S, -// arguments: Vec>, -// expressions: &[Expression], -// ) -> OperatorResult> { -// (*self)(context, span, arguments, expressions) -// } -// } -// -// impl NamedObject for BuiltinFunctionRef { -// fn static_type_name() -> &'static str { -// "BuiltinFunction" -// } -// } -// +pub type BuiltinFunctionPointer = fn( + &mut dyn RuntimeLog, + &mut Vec, + &mut Stack, + Dictionary, +) -> ExpressionResult; + +#[derive(Debug, Eq, Clone)] +pub struct BuiltinFunction { + name: &'static str, + function: BuiltinFunctionPointer, + signature: Arc, +} + +impl PartialEq for BuiltinFunction { + fn eq(&self, other: &Self) -> bool { + self.name == other.name && self.signature == other.signature + } +} + +impl BuiltinFunction { + pub fn new( + name: &'static str, + signature: Arc, + function: BuiltinFunctionPointer, + ) -> BuiltinFunction { + BuiltinFunction { + name, + function, + signature, + } + } +} + +impl Object for BuiltinFunction { + fn get_type(&self) -> ValueType { + ValueType::Closure(self.signature.clone()) + } + + fn call( + &self, + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + argument: Dictionary, + ) -> ExpressionResult { + (self.function)(log, stack_trace, stack, argument) + } +} + +impl StaticTypeName for BuiltinFunction { + fn static_type_name() -> &'static str { + "Builtin Function" + } +} // pub trait UnpackArguments { // fn unpack_arguments( // span: &S, @@ -470,4 +389,28 @@ mod test { .unwrap(); assert_eq!(product, values::UnsignedInteger::from(5).into()); } + + #[test] + fn builtin_function() { + let test_function = BuiltinFunction::new( + "test_function", + todo!(), + |log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + argument: Dictionary| Ok(UnsignedInteger::from(846).into()), + ); + + use crate::execution::standard_environment::build_prelude; + + let root = crate::compile::full_compile("test_function()"); + let prelude = build_prelude(); + let mut stack = Stack::new(prelude); + stack.insert_value("test_function", test_function.into()); + + let product = + execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root).unwrap(); + + assert_eq!(product, values::UnsignedInteger::from(846).into()); + } } diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 1080378..c5b4f90 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -45,7 +45,7 @@ mod scalar; pub use scalar::Scalar; mod closure; -pub use closure::UserClosure; +pub use closure::{BuiltinFunction, UserClosure}; mod dictionary; pub use dictionary::Dictionary; @@ -330,6 +330,7 @@ pub enum Value { Boolean, Scalar, UserClosure, + BuiltinFunction, ValueType, Dictionary(Dictionary), // List(List), From b9227e085bdf4d7089e95629074c36703a4a2eed Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 30 Nov 2025 11:33:06 -0500 Subject: [PATCH 039/106] Type checking --- crates/interpreter/src/execution/mod.rs | 15 +- .../src/execution/values/closure.rs | 40 +- .../src/execution/values/dictionary.rs | 76 +++- .../src/execution/values/value_type.rs | 397 +++++++++++++++++- .../interpreter/src/execution/values/void.rs | 2 +- 5 files changed, 479 insertions(+), 51 deletions(-) diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index d9ffefb..67004df 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -315,7 +315,8 @@ pub(crate) fn test_run(input: &str) -> ExpressionResult { #[cfg(test)] mod test { - use std::sync::Arc; + use hashable_map::HashableMap; + use std::{collections::HashMap, sync::Arc}; use super::*; @@ -356,11 +357,13 @@ mod test { assert_eq!( product, values::ValueType::Dictionary(values::StructDefinition { - members: Arc::new(vec![values::StructMember { - name: "name".into(), - ty: ValueType::TypeNone, - default: Some(Value::ValueNone(values::ValueNone)) - }]), + members: Arc::new(HashableMap::from(HashMap::from([( + "name".into(), + values::StructMember { + ty: ValueType::TypeNone, + default: Some(Value::ValueNone(values::ValueNone)) + } + )]))), variadic: true }) .into() diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index f9620fe..50e1872 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -34,8 +34,8 @@ use super::{Object, StaticTypeName, StructDefinition, ValueType}; /// Signature of a closure, used for type comparison. #[derive(Debug, Eq, PartialEq)] pub struct Signature { - argument_type: StructDefinition, - return_type: ValueType, + pub argument_type: StructDefinition, + pub return_type: ValueType, } impl Display for Signature { @@ -117,12 +117,26 @@ impl Object for UserClosure { stack: &mut Stack, argument: Dictionary, ) -> ExpressionResult { + self.data + .signature + .argument_type + .check_other_qualifies(argument.struct_def()) + .map_err(|error| error.to_error(stack_trace.iter()))?; + stack.scope(stack_trace, ScopeType::Isolated, |stack, stack_trace| { for (name, value) in argument.iter() { stack.insert_value(name, value.clone()); } - execute_expression(log, stack_trace, stack, &self.data.expression) + let result = execute_expression(log, stack_trace, stack, &self.data.expression)?; + + self.data + .signature + .return_type + .check_other_qualifies(&result.get_type()) + .map_err(|error| error.to_error(stack_trace.iter()))?; + + Ok(result) })? } } @@ -354,13 +368,13 @@ impl StaticTypeName for BuiltinFunction { mod test { use super::*; use crate::execution::{test_run, values, values::UnsignedInteger}; + use hashable_map::HashableMap; use pretty_assertions::assert_eq; #[test] fn define_closure() { let product = test_run("() -> std.types.None std.consts.None").unwrap(); - dbg!(&product); let expression = product.as_userclosure().unwrap().data.expression.clone(); assert_eq!( @@ -369,7 +383,7 @@ mod test { data: Arc::new(UserClosureInternals { signature: Arc::new(Signature { argument_type: StructDefinition { - members: vec![].into(), + members: HashableMap::new().into(), variadic: false, }, return_type: ValueType::TypeNone, @@ -390,6 +404,22 @@ mod test { assert_eq!(product, values::UnsignedInteger::from(5).into()); } + #[test] + fn call_closure_bad_args() { + test_run( + "let my_function = (a: std.types.UInt) -> std.types.UInt: a + 2u; in my_function(a = 3i)", + ) + .unwrap_err(); + } + + #[test] + fn call_closure_bad_result() { + test_run( + "let my_function = (a: std.types.UInt) -> std.types.UInt: \"test\"; in my_function(a = 3u)", + ) + .unwrap_err(); + } + #[test] fn builtin_function() { let test_function = BuiltinFunction::new( diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index 59a8da6..957abc8 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -34,19 +34,26 @@ use super::{ MissingAttributeError, Object, StaticTypeName, StructDefinition, StructMember, Value, ValueType, }; +#[derive(Debug, Eq)] +struct DictionaryData { + members: HashableMap, + struct_def: StructDefinition, +} + +impl PartialEq for DictionaryData { + fn eq(&self, other: &Self) -> bool { + self.members == other.members + } +} + #[derive(Debug, Eq, PartialEq, Clone)] pub struct Dictionary { - members: Arc>, + data: Arc, } impl Object for Dictionary { fn get_type(&self) -> ValueType { - static MEMBERS: std::sync::OnceLock>> = std::sync::OnceLock::new(); - - ValueType::Dictionary(StructDefinition { - members: MEMBERS.get_or_init(|| Arc::new(vec![])).clone(), - variadic: true, - }) + self.data.struct_def.clone().into() } fn get_attribute( @@ -55,7 +62,7 @@ impl Object for Dictionary { stack_trace: &[SourceReference], attribute: &str, ) -> ExpressionResult<&Value> { - if let Some(member) = self.members.get(attribute) { + if let Some(member) = self.data.members.get(attribute) { Ok(member) } else { Err(MissingAttributeError { @@ -74,14 +81,35 @@ impl StaticTypeName for Dictionary { impl From> for Dictionary { fn from(map: HashMap) -> Self { - // HashableMap is just a wrapper around HashMap, so this has no additional cost. - let members = Arc::new(HashableMap::from(map)); + let mut struct_members = HashMap::with_capacity(map.len()); - Self { members } + for (name, value) in map.iter() { + let member = StructMember { + ty: value.get_type(), + default: None, + }; + + struct_members.insert(name.clone(), member); + } + + // HashableMap is just a wrapper around HashMap, so this has no additional cost. + let data = Arc::new(DictionaryData { + members: HashableMap::from(map), + struct_def: StructDefinition { + members: Arc::new(HashableMap::from(struct_members)), + variadic: false, + }, + }); + + Self { data } } } impl Dictionary { + pub fn struct_def(&self) -> &StructDefinition { + &self.data.struct_def + } + pub fn from_ast( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, @@ -107,7 +135,7 @@ impl Dictionary { } pub fn iter(&self) -> impl Iterator { - self.members.iter() + self.data.members.iter() } } @@ -136,12 +164,24 @@ mod test { #[test] fn build_dictionary() { let product = test_run("(none = std.consts.None)").unwrap(); - let expected = Arc::new(HashableMap::from(HashMap::from_iter([( - "none".to_string(), - ValueNone.into(), - )]))); - - assert_eq!(product.as_dictionary().unwrap().members, expected); + let expected = Arc::new(DictionaryData { + members: HashableMap::from(HashMap::from_iter([( + "none".to_string(), + ValueNone.into(), + )])), + struct_def: StructDefinition { + members: Arc::new(HashableMap::from(HashMap::from([( + "none".into(), + StructMember { + ty: ValueType::TypeNone, + default: None, + }, + )]))), + variadic: false, + }, + }); + + assert_eq!(product.as_dictionary().unwrap().data, expected); } #[test] diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 95b492c..008855e 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -15,9 +15,10 @@ * You should have received a copy of the GNU Affero General Public License along with this * program. If not, see . */ -use std::{borrow::Cow, fmt::Display, sync::Arc}; +use std::{borrow::Cow, collections::HashMap, fmt::Display, sync::Arc}; use common_data_types::Dimension; +use hashable_map::HashableMap; use super::{ closure::Signature as ClosureSignature, Boolean, DefaultValue, Object, SignedInteger, @@ -27,7 +28,11 @@ use super::{ use crate::{ compile::{self, AstNode, SourceReference}, execute_expression, - execution::{errors::ExpressionResult, logging::RuntimeLog, stack::Stack}, + execution::{ + errors::{ErrorType, ExpressionResult}, + logging::RuntimeLog, + stack::Stack, + }, }; #[derive(Debug, Eq, Clone, PartialEq)] @@ -41,6 +46,7 @@ pub enum ValueType { Closure(Arc), Dictionary(StructDefinition), ValueType, + MultiType(Box, Box), } impl From for ValueType { @@ -58,13 +64,61 @@ impl ValueType { Self::SignedInteger => SignedInteger::static_type_name().into(), Self::UnsignedInteger => UnsignedInteger::static_type_name().into(), Self::Scalar(dimension) => units::get_dimension_name(dimension).into(), - Self::Closure(signature) => format!("{}", signature).into(), - Self::Dictionary(definition) => format!("{}", definition).into(), - Self::ValueType => "ValueType".into(), + _ => format!("{}", self).into(), } } - // TODO we need a method to validate types, and then provide that to the user as a method. + // TODO we need to expose this method to the user. + pub fn check_other_qualifies( + &self, + value_type: &ValueType, + ) -> Result<(), TypeQualificationError> { + match (self, value_type) { + (Self::TypeNone, Self::TypeNone) => Ok(()), + (Self::Boolean, Self::Boolean) => Ok(()), + (Self::SignedInteger, Self::SignedInteger) => Ok(()), + (Self::UnsignedInteger, Self::UnsignedInteger) => Ok(()), + (Self::Scalar(our_dimension), Self::Scalar(their_dimension)) => { + if our_dimension == their_dimension { + Ok(()) + } else { + Err(TypeQualificationError::This { + expected: self.clone(), + got: value_type.clone(), + }) + } + } + (Self::Closure(our_signature), Self::Closure(their_signature)) => { + our_signature + .argument_type + .check_other_qualifies(&their_signature.argument_type)?; + + our_signature + .return_type + .check_other_qualifies(&their_signature.return_type) + } + (Self::Dictionary(our_definition), Self::Dictionary(their_definition)) => { + our_definition.check_other_qualifies(their_definition) + } + (Self::ValueType, Self::ValueType) => Ok(()), + (Self::MultiType(left, right), value_type) => { + match ( + left.check_other_qualifies(value_type), + right.check_other_qualifies(value_type), + ) { + (Ok(_), _) | (_, Ok(_)) => Ok(()), + _ => Err(TypeQualificationError::This { + expected: self.clone(), + got: value_type.clone(), + }), + } + } + (expected, got) => Err(TypeQualificationError::This { + expected: expected.clone(), + got: got.clone(), + }), + } + } } impl Display for ValueType { @@ -73,6 +127,7 @@ impl Display for ValueType { // We can avoid a copy operation if we write directly into the formatter. Self::Closure(signature) => write!(f, "{}", signature), Self::Dictionary(definition) => write!(f, "{}", definition), + Self::MultiType(left, right) => write!(f, "{left} | {right}"), _ => write!(f, "{}", self.name()), } } @@ -82,6 +137,17 @@ impl Object for ValueType { fn get_type(&self) -> ValueType { ValueType::ValueType } + + fn bit_or( + self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: Value, + ) -> ExpressionResult { + let rhs: Self = rhs.downcast(stack_trace)?; + + Ok(Self::MultiType(Box::new(self), Box::new(rhs)).into()) + } } impl StaticTypeName for ValueType { @@ -92,7 +158,6 @@ impl StaticTypeName for ValueType { #[derive(Debug, Eq, PartialEq)] pub struct StructMember { - pub name: String, pub ty: ValueType, pub default: Option, } @@ -104,7 +169,6 @@ impl StructMember { stack: &mut Stack, source: &AstNode, ) -> ExpressionResult { - let name = source.node.name.node.clone(); let ty = execute_expression(log, stack_trace, stack, &source.node.ty)? .downcast::(stack_trace)?; let default = if let Some(default) = source.node.default.as_ref() { @@ -113,23 +177,23 @@ impl StructMember { None }; - Ok(Self { name, ty, default }) + Ok(Self { ty, default }) } } impl Display for StructMember { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { if let Some(_default) = self.default.as_ref() { - write!(f, "{}: {} (optional)", self.name, self.ty) + write!(f, "{} (optional)", self.ty) } else { - write!(f, "{}: {}", self.name, self.ty) + write!(f, "{}", self.ty) } } } #[derive(Debug, Clone, Eq, PartialEq)] pub struct StructDefinition { - pub members: Arc>, + pub members: Arc>, pub variadic: bool, } @@ -140,15 +204,67 @@ impl StructDefinition { stack: &mut Stack, source: &AstNode, ) -> ExpressionResult { - let mut members = Vec::new(); + let mut members = HashMap::new(); for member in source.node.members.iter() { - members.push(StructMember::new(log, stack_trace, stack, member)?); + let name = member.node.name.node.clone(); + members.insert(name, StructMember::new(log, stack_trace, stack, member)?); } - let members = Arc::new(members); + let members = Arc::new(HashableMap::from(members)); let variadic = source.node.variadic; Ok(Self { members, variadic }) } + + pub fn check_other_qualifies( + &self, + other: &StructDefinition, + ) -> Result<(), TypeQualificationError> { + let mut errors = Vec::new(); + + // Check that all fields are present and correct. + for (name, member) in self.members.iter() { + if let Some(other_member) = other.members.get(name) { + if let Err(error) = member.ty.check_other_qualifies(&other_member.ty) { + errors.push(MissmatchedField { + name: name.clone(), + error, + }); + } + } else { + errors.push(MissmatchedField { + name: name.clone(), + error: TypeQualificationError::This { + expected: member.ty.clone(), + got: ValueType::TypeNone, + }, + }); + } + } + + // Checkt that there are no extra fields (unless of course, we're supposed to have extra + // fields) + if !self.variadic { + for (name, member) in other.members.iter() { + if self.members.get(name).is_none() { + errors.push(MissmatchedField { + name: name.clone(), + error: TypeQualificationError::This { + expected: ValueType::TypeNone, + got: member.ty.clone(), + }, + }); + } + } + } + + if errors.is_empty() { + Ok(()) + } else { + Err(TypeQualificationError::Fields { + failed_feilds: errors, + }) + } + } } impl Display for StructDefinition { @@ -158,20 +274,18 @@ impl Display for StructDefinition { if self.members.is_empty() { if self.variadic { write!(f, "...")?; - } else { - write!(f, "~")?; } } else { let mut member_iter = self.members.iter(); // The first member should not have a comma before it. - if let Some(first_member) = member_iter.next() { - write!(f, "{}", first_member)?; + if let Some((name, member)) = member_iter.next() { + write!(f, "{name}: {member}")?; } // All other members get a comma before them. - for member in member_iter { - write!(f, ", {}", member)?; + for (name, member) in member_iter { + write!(f, ", {name}: {member}")?; } // This struct is variadic. @@ -191,3 +305,244 @@ impl StaticTypeName for StructDefinition { "Struct Definition" } } + +#[derive(Debug, Eq, PartialEq)] +pub struct MissmatchedField { + pub name: String, + pub error: TypeQualificationError, +} + +#[derive(Debug, Eq, PartialEq)] +pub enum TypeQualificationError { + This { + expected: ValueType, + got: ValueType, + }, + Fields { + failed_feilds: Vec, + }, +} + +impl TypeQualificationError { + fn write_failure(&self, tab_depth: usize, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let tabs = " ".repeat(tab_depth); + + match self { + TypeQualificationError::This { expected, got } => { + write!(f, "{tabs}Expected {expected}, got {got}") + } + TypeQualificationError::Fields { failed_feilds } => { + writeln!(f, "{tabs}Dictionary did not meet requirements:")?; + + for field in failed_feilds { + write!(f, "{tabs} {}: ", field.name)?; + field.error.write_failure(tab_depth + 2, f)?; + } + + Ok(()) + } + } + } +} + +impl ErrorType for TypeQualificationError {} + +impl Display for TypeQualificationError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.write_failure(0, f) + } +} + +#[cfg(test)] +mod test { + use crate::execution::test_run; + + use super::*; + + #[test] + fn type_none() { + ValueType::TypeNone + .check_other_qualifies(&ValueType::TypeNone) + .unwrap(); + + ValueType::TypeNone + .check_other_qualifies(&ValueType::UnsignedInteger) + .unwrap_err(); + } + + #[test] + fn type_boolean() { + ValueType::Boolean + .check_other_qualifies(&ValueType::Boolean) + .unwrap(); + + ValueType::Boolean + .check_other_qualifies(&ValueType::TypeNone) + .unwrap_err(); + } + + #[test] + fn type_signed_integer() { + ValueType::SignedInteger + .check_other_qualifies(&ValueType::SignedInteger) + .unwrap(); + + ValueType::SignedInteger + .check_other_qualifies(&ValueType::TypeNone) + .unwrap_err(); + } + + #[test] + fn type_unsigned_integer() { + ValueType::UnsignedInteger + .check_other_qualifies(&ValueType::UnsignedInteger) + .unwrap(); + + ValueType::UnsignedInteger + .check_other_qualifies(&ValueType::TypeNone) + .unwrap_err(); + } + + #[test] + fn type_scalar() { + ValueType::Scalar(Dimension::length()) + .check_other_qualifies(&ValueType::Scalar(Dimension::length())) + .unwrap(); + + ValueType::Scalar(Dimension::length()) + .check_other_qualifies(&ValueType::Scalar(Dimension::area())) + .unwrap_err(); + + ValueType::Scalar(Dimension::length()) + .check_other_qualifies(&ValueType::TypeNone) + .unwrap_err(); + } + + #[test] + fn type_closure() { + let closure = test_run("() -> std.types.None std.consts.None").unwrap(); + let closure = closure.as_userclosure().unwrap(); + + closure + .get_type() + .check_other_qualifies(&closure.get_type()) + .unwrap(); + } + + #[test] + fn type_empty_dictionary() { + let structure = test_run("()").unwrap(); + let structure = structure.as_dictionary().unwrap(); + + let dictionary = test_run("()").unwrap(); + let dictionary = dictionary.as_dictionary().unwrap(); + + structure + .get_type() + .check_other_qualifies(&dictionary.get_type()) + .unwrap(); + } + + #[test] + fn type_dictionary_with_value() { + let structure = test_run("(a: std.types.None)").unwrap(); + let structure = structure.as_valuetype().unwrap(); + + let dictionary = test_run("(a = std.consts.None)").unwrap(); + let dictionary = dictionary.as_dictionary().unwrap(); + + structure + .check_other_qualifies(&dictionary.get_type()) + .unwrap(); + } + + #[test] + fn type_dictionary_with_extra_value() { + let structure = test_run("(a: std.types.None)").unwrap(); + let structure = structure.as_valuetype().unwrap(); + + let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); + let dictionary = dictionary.as_dictionary().unwrap(); + + structure + .check_other_qualifies(&dictionary.get_type()) + .unwrap_err(); + } + + #[test] + fn type_dictionary_varadic() { + let structure = test_run("(a: std.types.None, ...)").unwrap(); + let structure = structure.as_valuetype().unwrap(); + + let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); + let dictionary = dictionary.as_dictionary().unwrap(); + + structure + .check_other_qualifies(&dictionary.get_type()) + .unwrap(); + } + + #[test] + fn type_dictionary_nested() { + let structure = test_run("(a: (b: std.types.None))").unwrap(); + let structure = structure.as_valuetype().unwrap(); + + let dictionary = test_run("(a = (b = std.consts.None))").unwrap(); + let dictionary = dictionary.as_dictionary().unwrap(); + + structure + .check_other_qualifies(&dictionary.get_type()) + .unwrap(); + } + + #[test] + fn type_value_type() { + ValueType::ValueType + .check_other_qualifies(&ValueType::ValueType) + .unwrap(); + + ValueType::UnsignedInteger + .check_other_qualifies(&ValueType::TypeNone) + .unwrap_err(); + } + + #[test] + fn combined_type() { + let value_type = test_run("std.types.None | std.types.UInt").unwrap(); + let value_type = value_type.as_valuetype().unwrap(); + + value_type + .check_other_qualifies(&ValueType::TypeNone) + .unwrap(); + + value_type + .check_other_qualifies(&ValueType::UnsignedInteger) + .unwrap(); + + value_type + .check_other_qualifies(&ValueType::SignedInteger) + .unwrap_err(); + } + + #[test] + fn triple_combined_type() { + let value_type = test_run("std.types.None | std.types.UInt | std.types.SInt").unwrap(); + let value_type = value_type.as_valuetype().unwrap(); + + value_type + .check_other_qualifies(&ValueType::TypeNone) + .unwrap(); + + value_type + .check_other_qualifies(&ValueType::UnsignedInteger) + .unwrap(); + + value_type + .check_other_qualifies(&ValueType::SignedInteger) + .unwrap(); + + value_type + .check_other_qualifies(&ValueType::Boolean) + .unwrap_err(); + } +} diff --git a/crates/interpreter/src/execution/values/void.rs b/crates/interpreter/src/execution/values/void.rs index 46d3953..e16bc57 100644 --- a/crates/interpreter/src/execution/values/void.rs +++ b/crates/interpreter/src/execution/values/void.rs @@ -29,6 +29,6 @@ impl Object for ValueNone { impl StaticTypeName for ValueNone { fn static_type_name() -> &'static str { - "Void" + "None" } } From ce07e76298757030fdbe17e8614242cfbd109bd1 Mon Sep 17 00:00:00 2001 From: James Carl Date: Mon, 1 Dec 2025 17:49:51 -0500 Subject: [PATCH 040/106] Implement builtin functions --- crates/interpreter/src/execution/values/closure.rs | 14 +++++++++----- .../interpreter/src/execution/values/value_type.rs | 9 +++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 50e1872..1911a6c 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -370,6 +370,7 @@ mod test { use crate::execution::{test_run, values, values::UnsignedInteger}; use hashable_map::HashableMap; use pretty_assertions::assert_eq; + use std::collections::HashMap; #[test] fn define_closure() { @@ -424,11 +425,14 @@ mod test { fn builtin_function() { let test_function = BuiltinFunction::new( "test_function", - todo!(), - |log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - argument: Dictionary| Ok(UnsignedInteger::from(846).into()), + Arc::new(Signature { + argument_type: StructDefinition::from(HashMap::new()), + return_type: ValueType::UnsignedInteger, + }), + |_log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _argument: Dictionary| Ok(UnsignedInteger::from(846).into()), ); use crate::execution::standard_environment::build_prelude; diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 008855e..a93971a 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -306,6 +306,15 @@ impl StaticTypeName for StructDefinition { } } +impl From> for StructDefinition { + fn from(map: HashMap) -> Self { + Self { + members: Arc::new(HashableMap::from(map)), + variadic: false, + } + } +} + #[derive(Debug, Eq, PartialEq)] pub struct MissmatchedField { pub name: String, From 39a0efe4558190a434ad7db347c980a9e1977f2f Mon Sep 17 00:00:00 2001 From: James Carl Date: Mon, 1 Dec 2025 18:23:18 -0500 Subject: [PATCH 041/106] Implement default values --- .../src/execution/values/closure.rs | 11 +++++ .../src/execution/values/dictionary.rs | 10 ++-- .../src/execution/values/value_type.rs | 46 +++++++++++++++---- 3 files changed, 54 insertions(+), 13 deletions(-) diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 1911a6c..dc330a5 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -123,6 +123,8 @@ impl Object for UserClosure { .check_other_qualifies(argument.struct_def()) .map_err(|error| error.to_error(stack_trace.iter()))?; + let argument = self.data.signature.argument_type.fill_defaults(argument); + stack.scope(stack_trace, ScopeType::Isolated, |stack, stack_trace| { for (name, value) in argument.iter() { stack.insert_value(name, value.clone()); @@ -421,6 +423,15 @@ mod test { .unwrap_err(); } + #[test] + fn call_closure_default_value() { + let product = test_run( + "let my_function = (a: std.types.UInt = 3u) -> std.types.UInt: a + 2u; in my_function()", + ) + .unwrap(); + assert_eq!(product, values::UnsignedInteger::from(5).into()); + } + #[test] fn builtin_function() { let test_function = BuiltinFunction::new( diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index 957abc8..0fcd056 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -34,10 +34,10 @@ use super::{ MissingAttributeError, Object, StaticTypeName, StructDefinition, StructMember, Value, ValueType, }; -#[derive(Debug, Eq)] -struct DictionaryData { - members: HashableMap, - struct_def: StructDefinition, +#[derive(Clone, Debug, Eq)] +pub(crate) struct DictionaryData { + pub members: HashableMap, + pub struct_def: StructDefinition, } impl PartialEq for DictionaryData { @@ -48,7 +48,7 @@ impl PartialEq for DictionaryData { #[derive(Debug, Eq, PartialEq, Clone)] pub struct Dictionary { - data: Arc, + pub(crate) data: Arc, } impl Object for Dictionary { diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index a93971a..204eaad 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -32,6 +32,7 @@ use crate::{ errors::{ErrorType, ExpressionResult}, logging::RuntimeLog, stack::Stack, + values::{dictionary::DictionaryData, Dictionary}, }, }; @@ -156,7 +157,7 @@ impl StaticTypeName for ValueType { } } -#[derive(Debug, Eq, PartialEq)] +#[derive(Debug, Eq, Clone, PartialEq)] pub struct StructMember { pub ty: ValueType, pub default: Option, @@ -215,6 +216,33 @@ impl StructDefinition { Ok(Self { members, variadic }) } + pub fn fill_defaults(&self, dictionary: Dictionary) -> Dictionary { + let data = Arc::unwrap_or_clone(dictionary.data); + + let mut members = data.members; + let struct_def_variadic = data.struct_def.variadic; + let mut struct_def_members = Arc::unwrap_or_clone(data.struct_def.members); + + for (name, member) in self.members.iter() { + if let Some(default_value) = &member.default { + if members.get(name).is_none() { + members.insert(name.clone(), default_value.clone()); + struct_def_members.insert(name.clone(), member.clone()); + } + } + } + + Dictionary { + data: Arc::new(DictionaryData { + members, + struct_def: StructDefinition { + members: Arc::new(struct_def_members), + variadic: struct_def_variadic, + }, + }), + } + } + pub fn check_other_qualifies( &self, other: &StructDefinition, @@ -231,13 +259,15 @@ impl StructDefinition { }); } } else { - errors.push(MissmatchedField { - name: name.clone(), - error: TypeQualificationError::This { - expected: member.ty.clone(), - got: ValueType::TypeNone, - }, - }); + if member.default.is_none() { + errors.push(MissmatchedField { + name: name.clone(), + error: TypeQualificationError::This { + expected: member.ty.clone(), + got: ValueType::TypeNone, + }, + }); + } } } From 47c3f423efff03da659337f44107369e5f805b04 Mon Sep 17 00:00:00 2001 From: James Carl Date: Tue, 2 Dec 2025 19:50:49 -0500 Subject: [PATCH 042/106] Implement builtin functions --- Cargo.lock | 1 - crates/interpreter/Cargo.toml | 1 - .../src/execution/values/closure.rs | 492 +++++++++++------- flake.nix | 1 + 4 files changed, 293 insertions(+), 202 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 10a5d7c..c5865c4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -961,7 +961,6 @@ dependencies = [ "enum_dispatch", "enum_downcast", "file-guard", - "fortuples", "hashable-map", "imstr 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits", diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index 1d3e22e..b2b8d34 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -15,7 +15,6 @@ enum_dispatch = "0.3" enum_downcast = { version = "0.1", features = [ "derive" ] } compact_str = "0.9" num-traits = "0.2" -fortuples = "0.9" hashable-map = "0.4.0" imstr = "0.2.0" diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index dc330a5..fa04c95 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -149,43 +149,139 @@ impl StaticTypeName for UserClosure { } } -pub type BuiltinFunctionPointer = fn( - &mut dyn RuntimeLog, - &mut Vec, - &mut Stack, - Dictionary, -) -> ExpressionResult; - -#[derive(Debug, Eq, Clone)] +pub trait Callable { + fn call( + &self, + runtime: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + argument: Dictionary, + ) -> ExpressionResult; + + fn name(&self) -> &str; + + fn signature(&self) -> &Arc; +} + +macro_rules! build_member_from_sig { + ($name:ident: $ty:ident) => { + ( + String::from(stringify!($name)), + crate::execution::values::value_type::StructMember { + ty: ValueType::$ty, + default: None, + }, + ) + }; + ($name:ident: $ty:ident = $default:expr) => { + ( + String::from(stringify!($name)), + crate::execution::values::value_type::StructMember { + ty: ValueType::$ty, + default: Some($default), + }, + ) + }; +} + +macro_rules! build_argument_signature_list { + ($($arg:ident: $ty:ident $(= $default:expr)?),*) => {{ + let list: [(String, crate::execution::values::value_type::StructMember); _] = [$(build_member_from_sig!($arg: $ty $(= $default)?),)*]; + list + }}; +} + +macro_rules! build_function { + ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack $(, $($arg:ident: $ty:ident $(= $default:expr)?),+)?) $code:block) => { + build_function!($name ($log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack $(, $($arg: $ty $(= $default)?),*)?) -> ValueType::TypeNone $code) + }; + ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack $(, $($arg:ident: $ty:ident $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ + struct BuiltFunction, &mut Stack $(, $($ty),*)?) -> ExpressionResult> { + function: F, + signature: Arc, + } + + impl, &mut Stack $(, $($ty),*)?) -> ExpressionResult> Callable for BuiltFunction { + fn call( + &self, + runtime: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + argument: Dictionary, + ) -> ExpressionResult { + self.signature + .argument_type + .check_other_qualifies(argument.struct_def()) + .map_err(|error| error.to_error(stack_trace.iter()))?; + + // Argument is potentially unused if we take no arguments. + let mut _argument = self.signature.argument_type.fill_defaults(argument); + + let _data = Arc::make_mut(&mut _argument.data); + $($(let $arg: $ty = _data.members.remove(stringify!($arg)) + .expect("Argument was not present after argument check.").downcast(stack_trace)?;)*)? + + (self.function)(runtime, stack_trace, stack $(, $($arg),*)?) + } + + fn name(&self) -> &str { + stringify!($name) + } + + fn signature(&self) -> &Arc { + &self.signature + } + } + + let members = std::sync::Arc::new(hashable_map::HashableMap::from(std::collections::HashMap::from(build_argument_signature_list!($($($arg: $ty $(= $default)?),*)?)))); + + crate::execution::values::closure::BuiltinFunction { + callable: Arc::new(BuiltFunction { + function: move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack $(, $($arg: $ty),*)?| -> ExpressionResult { $code }, + signature: std::sync::Arc::new(Signature { + argument_type: StructDefinition { + members, + variadic: false, + }, + return_type: $return_type + }), + }) + } + }}; +} + +#[derive(Clone)] pub struct BuiltinFunction { - name: &'static str, - function: BuiltinFunctionPointer, - signature: Arc, + callable: Arc, } -impl PartialEq for BuiltinFunction { - fn eq(&self, other: &Self) -> bool { - self.name == other.name && self.signature == other.signature +impl std::fmt::Debug for BuiltinFunction { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("BuiltinFunction") + .field("name", &self.callable.name()) + .field("signature", self.callable.signature()) + .finish() } } impl BuiltinFunction { - pub fn new( - name: &'static str, - signature: Arc, - function: BuiltinFunctionPointer, - ) -> BuiltinFunction { - BuiltinFunction { - name, - function, - signature, - } + pub fn new(function: Arc) -> BuiltinFunction { + BuiltinFunction { callable: function } + } +} + +impl Eq for BuiltinFunction {} + +impl PartialEq for BuiltinFunction { + fn eq(&self, other: &Self) -> bool { + self.callable.signature() == other.callable.signature() + && self.callable.name() == other.callable.name() } } impl Object for BuiltinFunction { fn get_type(&self) -> ValueType { - ValueType::Closure(self.signature.clone()) + ValueType::Closure(self.callable.signature().clone()) } fn call( @@ -195,7 +291,7 @@ impl Object for BuiltinFunction { stack: &mut Stack, argument: Dictionary, ) -> ExpressionResult { - (self.function)(log, stack_trace, stack, argument) + self.callable.call(log, stack_trace, stack, argument) } } @@ -204,175 +300,16 @@ impl StaticTypeName for BuiltinFunction { "Builtin Function" } } -// pub trait UnpackArguments { -// fn unpack_arguments( -// span: &S, -// arguments: Vec>, -// expressions: &[Expression], -// ) -> OperatorResult; -// -// fn unpack_arguments_optional( -// _span: &S, -// arguments: Vec>, -// expressions: &[Expression], -// ) -> OperatorResult; -// } -// -// #[rustfmt::skip] -// fortuples! { -// impl UnpackArguments for #Tuple -// where -// S: Span, -// #(#Member: NamedObject),* -// #(Value: TryInto<#Member>),* -// { -// fn unpack_arguments( -// _span: &S, -// mut arguments: Vec>, -// expressions: &[Expression], -// ) -> OperatorResult { -// arguments.reverse(); -// let mut expression_iter = expressions.iter(); -// -// #(let casey::lower!(#Member) = { -// if let Some(value) = arguments.pop() { -// value.downcast(expression_iter.next().unwrap().get_span()).map_err(|f| f.make_from_function_call())? -// } else { -// return Err(Failure::MissingArguments(_span.clone()).make_from_function_call()); -// } -// };)* -// -// if let Some(extra_expression) = expression_iter.next() { -// Err(Failure::TooManyArguments(extra_expression.get_span().clone()).make_from_function_call()) -// } else { -// Ok((#(casey::lower!(#Member)),*)) -// } -// } -// -// fn unpack_arguments_optional( -// _span: &S, -// mut arguments: Vec>, -// expressions: &[Expression], -// ) -> OperatorResult { -// arguments.reverse(); -// let mut expression_iter = expressions.iter(); -// -// #(let casey::lower!(#Member) = { -// if let Some(value) = arguments.pop() { -// value.downcast(expression_iter.next().unwrap().get_span()).map_err(|f| f.make_from_function_call())? -// } else { -// Value::::from(NoneType).downcast(_span)? -// } -// };)* -// -// if let Some(extra_expression) = expression_iter.next() { -// Err(Failure::TooManyArguments(extra_expression.get_span().clone()).make_from_function_call()) -// } else { -// Ok((#(casey::lower!(#Member)),*)) -// } -// } -// } -// } -// -// pub trait AutoCall -// where -// S: Span, -// { -// type Unpacker: UnpackArguments; -// -// fn auto_call( -// self, -// context: &mut ExecutionContext, -// span: &S, -// arguments: Vec>, -// expressions: &[Expression], -// ) -> OperatorResult>; -// -// fn auto_call_optional( -// self, -// context: &mut ExecutionContext, -// span: &S, -// arguments: Vec>, -// expressions: &[Expression], -// ) -> OperatorResult>; -// } -// -// #[rustfmt::skip] -// fortuples! { -// impl AutoCall for F -// where -// S: Span, -// #(#Member: NamedObject),* -// #(Value: TryInto<#Member>),* -// F: FnOnce(&mut ExecutionContext, &S, #(#Member),*) -> OperatorResult>, -// { -// type Unpacker = #Tuple; -// -// fn auto_call( -// self, -// context: &mut ExecutionContext, -// span: &S, -// arguments: Vec>, -// expressions: &[Expression], -// ) -> OperatorResult> { -// let (#(casey::lower!(#Member)),*) = Self::Unpacker::unpack_arguments(span, arguments, expressions)?; -// -// (self)(context, span, #(casey::lower!(#Member)),*) -// } -// -// fn auto_call_optional( -// self, -// context: &mut ExecutionContext, -// span: &S, -// arguments: Vec>, -// expressions: &[Expression], -// ) -> OperatorResult> { -// let (#(casey::lower!(#Member)),*) = Self::Unpacker::unpack_arguments_optional(span, arguments, expressions)?; -// -// (self)(context, span, #(casey::lower!(#Member)),*) -// } -// } -// } -// -// pub trait IntoBuiltinFunction: AutoCall { -// fn into_builtin_function(self) -> BuiltinFunctionRef; -// fn into_builtin_function_optional(self) -> BuiltinFunctionRef; -// } -// -// #[rustfmt::skip] -// fortuples! { -// impl IntoBuiltinFunction for F -// where -// S: Span, -// F: Fn(&mut ExecutionContext, &S, #(#Member),*) -> OperatorResult> + Clone + 'static, -// #(#Member: NamedObject),* -// #(Value: TryInto<#Member>),* -// { -// fn into_builtin_function(self) -> BuiltinFunctionRef { -// let function: Box> = Box::new(move |context: &mut ExecutionContext, span: &S, arguments: Vec>, expressions: &[Expression]| -> OperatorResult> { -// self.clone().auto_call(context, span, arguments, expressions) -// }); -// -// BuiltinFunctionRef::from(function) -// } -// -// fn into_builtin_function_optional(self) -> BuiltinFunctionRef { -// let function: Box> = Box::new(move |context: &mut ExecutionContext, span: &S, arguments: Vec>, expressions: &[Expression]| -> OperatorResult> { -// self.clone().auto_call_optional(context, span, arguments, expressions) -// }); -// -// BuiltinFunctionRef::from(function) -// } -// } -// } #[cfg(test)] mod test { use super::*; - use crate::execution::{test_run, values, values::UnsignedInteger}; + use crate::execution::{ + test_run, + values::{self, StructMember, UnsignedInteger, ValueNone}, + }; use hashable_map::HashableMap; use pretty_assertions::assert_eq; - use std::collections::HashMap; #[test] fn define_closure() { @@ -433,17 +370,107 @@ mod test { } #[test] - fn builtin_function() { - let test_function = BuiltinFunction::new( - "test_function", - Arc::new(Signature { - argument_type: StructDefinition::from(HashMap::new()), - return_type: ValueType::UnsignedInteger, - }), - |_log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _argument: Dictionary| Ok(UnsignedInteger::from(846).into()), + fn build_argument_signature() { + assert_eq!(build_argument_signature_list!(), []); + assert_eq!( + build_argument_signature_list!(value: SignedInteger), + [( + String::from("value"), + StructMember { + ty: ValueType::SignedInteger, + default: None + } + )] + ); + assert_eq!( + build_argument_signature_list!(value: UnsignedInteger), + [( + String::from("value"), + StructMember { + ty: ValueType::UnsignedInteger, + default: None + } + )] + ); + assert_eq!( + build_argument_signature_list!(value: UnsignedInteger = UnsignedInteger::from(23).into()), + [( + String::from("value"), + StructMember { + ty: ValueType::UnsignedInteger, + default: Some(Value::UnsignedInteger(23.into())) + } + )] + ); + + assert_eq!( + build_argument_signature_list!(value: UnsignedInteger, value1: SignedInteger), + [ + ( + String::from("value"), + StructMember { + ty: ValueType::UnsignedInteger, + default: None + } + ), + ( + String::from("value1"), + StructMember { + ty: ValueType::SignedInteger, + default: None + } + ) + ] + ); + + assert_eq!( + build_argument_signature_list!(value: UnsignedInteger = UnsignedInteger::from(32).into(), value1: SignedInteger), + [ + ( + String::from("value"), + StructMember { + ty: ValueType::UnsignedInteger, + default: Some(UnsignedInteger::from(32).into()) + } + ), + ( + String::from("value1"), + StructMember { + ty: ValueType::SignedInteger, + default: None + } + ) + ] + ); + } + + #[test] + fn builtin_function_no_args_no_result() { + let test_function = build_function!( + test_function(_log: &mut dyn RuntimeLog, _stack_trace: &mut Vec, _stack: &mut Stack) { + Ok(ValueNone.into()) + } + ); + + use crate::execution::standard_environment::build_prelude; + + let root = crate::compile::full_compile("test_function()"); + let prelude = build_prelude(); + let mut stack = Stack::new(prelude); + stack.insert_value("test_function", test_function.into()); + + let product = + execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root).unwrap(); + + assert_eq!(product, values::ValueNone.into()); + } + + #[test] + fn builtin_function_no_args() { + let test_function = build_function!( + test_function(_log: &mut dyn RuntimeLog, _stack_trace: &mut Vec, _stack: &mut Stack) -> ValueType::UnsignedInteger { + Ok(values::UnsignedInteger::from(846).into()) + } ); use crate::execution::standard_environment::build_prelude; @@ -458,4 +485,69 @@ mod test { assert_eq!(product, values::UnsignedInteger::from(846).into()); } + + #[test] + fn builtin_function_with_args() { + let test_function = build_function!( + test_function(_log: &mut dyn RuntimeLog, _stack_trace: &mut Vec, _stack: &mut Stack, a: UnsignedInteger, b: UnsignedInteger) -> ValueType::UnsignedInteger { + Ok(values::UnsignedInteger::from(a.0 + b.0).into()) + } + ); + + use crate::execution::standard_environment::build_prelude; + + let root = crate::compile::full_compile("test_function(a = 1u, b = 2u)"); + let prelude = build_prelude(); + let mut stack = Stack::new(prelude); + stack.insert_value("test_function", test_function.into()); + + let product = + execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root).unwrap(); + + assert_eq!(product, values::UnsignedInteger::from(3).into()); + } + + #[test] + fn builtin_function_with_default_value() { + let test_function = build_function!( + test_function(_log: &mut dyn RuntimeLog, _stack_trace: &mut Vec, _stack: &mut Stack, a: UnsignedInteger, b: UnsignedInteger = UnsignedInteger::from(2).into()) -> ValueType::UnsignedInteger { + Ok(values::UnsignedInteger::from(a.0 + b.0).into()) + } + ); + + use crate::execution::standard_environment::build_prelude; + + let root = crate::compile::full_compile("test_function(a = 1u)"); + let prelude = build_prelude(); + let mut stack = Stack::new(prelude); + stack.insert_value("test_function", test_function.into()); + + let product = + execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root).unwrap(); + + assert_eq!(product, values::UnsignedInteger::from(3).into()); + } + + #[test] + fn builtin_function_captured_value() { + let b = 2; + + let test_function = build_function!( + test_function(_log: &mut dyn RuntimeLog, _stack_trace: &mut Vec, _stack: &mut Stack, a: UnsignedInteger) -> ValueType::UnsignedInteger { + Ok(values::UnsignedInteger::from(a.0 + b).into()) + } + ); + + use crate::execution::standard_environment::build_prelude; + + let root = crate::compile::full_compile("test_function(a = 1u)"); + let prelude = build_prelude(); + let mut stack = Stack::new(prelude); + stack.insert_value("test_function", test_function.into()); + + let product = + execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root).unwrap(); + + assert_eq!(product, values::UnsignedInteger::from(3).into()); + } } diff --git a/flake.nix b/flake.nix index 815fdab..5519900 100644 --- a/flake.nix +++ b/flake.nix @@ -57,6 +57,7 @@ fenix-channel.rustfmt fenix-channel.rustc fenix-channel.cargo + cargo-expand ]; shellHook = '' From 6c9e16355370ab2487ff42cd030124d148db8f62 Mon Sep 17 00:00:00 2001 From: James Carl Date: Wed, 3 Dec 2025 03:38:02 -0500 Subject: [PATCH 043/106] Add test to make sure let in statement can reference its own variables. --- crates/interpreter/src/execution/mod.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 67004df..b1269c9 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -382,6 +382,12 @@ mod test { assert_eq!(product, values::UnsignedInteger::from(23).into()); } + #[test] + fn let_in_self_ref() { + let product = test_run("let value = 23u; value2 = value + 2u; in value2").unwrap(); + assert_eq!(product, values::UnsignedInteger::from(25).into()); + } + #[test] fn string() { let product = test_run("\"a simple string of text\"").unwrap(); From b1a5857f549a802eb7f05c1080ea9775a39fbe7f Mon Sep 17 00:00:00 2001 From: James Carl Date: Wed, 3 Dec 2025 03:39:00 -0500 Subject: [PATCH 044/106] Remove obsolete error types --- crates/interpreter/src/execution/mod.rs | 38 ++----------------------- 1 file changed, 2 insertions(+), 36 deletions(-) diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index b1269c9..d0edb18 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -16,7 +16,7 @@ * program. If not, see . */ -use std::{cmp::Ordering, fmt::Display}; +use std::cmp::Ordering; use crate::compile::{self, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation}; @@ -26,7 +26,7 @@ mod logging; mod stack; mod standard_environment; pub mod values; -use errors::{ErrorType, ExpressionResult}; +use errors::ExpressionResult; use logging::{LocatedStr, RuntimeLog, StackScope}; use stack::Stack; use values::{Object, Value, ValueType}; @@ -268,40 +268,6 @@ fn execute_binary_expression( ) } -#[derive(Debug, Eq, PartialEq)] -struct MissingSemicolon { - actual_value_type: ValueType, -} - -impl ErrorType for MissingSemicolon {} - -impl Display for MissingSemicolon { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!( - f, - "Expected void type, found `{}`. Are you missing a semicolon?", - self.actual_value_type - ) - } -} - -#[derive(Debug, Eq, PartialEq)] -struct AssignmentTypeMissmatch { - expected: ValueType, - got: ValueType, -} - -impl ErrorType for AssignmentTypeMissmatch {} - -impl Display for AssignmentTypeMissmatch { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!( - f, - "When assigning a new value to an already defined variable, you cannot change the variable's type. This variable's type was `{}`, but you tried to assign it a value with a `{}` typing.", self.expected, self.got - ) - } -} - #[cfg(test)] pub(crate) fn test_run(input: &str) -> ExpressionResult { use standard_environment::build_prelude; From 8b09b539b700a1d5b8eea01eef6e741f130ad181 Mon Sep 17 00:00:00 2001 From: James Carl Date: Wed, 3 Dec 2025 17:30:48 -0500 Subject: [PATCH 045/106] Implement closure capture --- crates/interpreter/src/compile/expressions.rs | 20 +- crates/interpreter/src/execution/mod.rs | 2 +- .../src/execution/values/closure.rs | 210 +- .../tree-sitter-command-cad-model/grammar.js | 2 +- .../src/grammar.json | 13 +- .../src/node-types.json | 4 - .../src/parser.c | 4005 ++++++++--------- .../test/corpus/closure.txt | 21 - 8 files changed, 2203 insertions(+), 2074 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 1541c88..56bb894 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -781,7 +781,7 @@ impl<'t> Parse<'t, nodes::DictionaryConstruction<'t>> for DictionaryConstruction #[derive(Debug, Hash, Eq, PartialEq)] pub struct ClosureDefinition { - pub argument_type: AstNode, + pub argument_type: AstNode, pub return_type: AstNode, pub expression: Arc>, } @@ -793,7 +793,7 @@ impl<'t> Parse<'t, nodes::ClosureDefinition<'t>> for ClosureDefinition { value: nodes::ClosureDefinition<'t>, ) -> Result, Error<'t, 'i>> { let argument = value.argument()?; - let argument = Expression::parse(file, input, argument)?; + let argument = StructDefinition::parse(file, input, argument)?; let returns = value.result()?; let returns = Expression::parse(file, input, returns)?; @@ -1118,18 +1118,10 @@ mod test { node: Box::new(ClosureDefinition { argument_type: AstNode { reference: argument_reference, - node: Expression::StructDefinition(AstNode { - reference: argument - .node - .as_structdefinition() - .unwrap() - .reference - .clone(), - node: StructDefinition { - members: vec![], - variadic: false - } - }) + node: StructDefinition { + members: vec![], + variadic: false + } }, return_type: AstNode { reference: returns_reference, diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index d0edb18..ffbe3f9 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -31,7 +31,7 @@ use logging::{LocatedStr, RuntimeLog, StackScope}; use stack::Stack; use values::{Object, Value, ValueType}; -fn find_value<'p, 's>( +pub fn find_value<'p, 's>( log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], stack: &'s mut Stack, diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index fa04c95..e3edbb2 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -18,14 +18,17 @@ use std::{fmt::Display, sync::Arc}; +use hashable_map::HashableMap; + use crate::{ compile::{AstNode, ClosureDefinition, Expression, SourceReference}, execute_expression, execution::{ errors::{ExpressionResult, Raise}, + find_value, logging::{RuntimeLog, StackScope}, stack::{ScopeType, Stack}, - values::{Dictionary, DowncastError, Value}, + values::{Dictionary, Value}, }, }; @@ -44,11 +47,174 @@ impl Display for Signature { } } +fn find_all_variable_accesses_in_closure_capture( + closure: &crate::compile::ClosureDefinition, + mut access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, +) -> ExpressionResult<()> { + let argument_names: Vec<&String> = { + let mut argument_names = Vec::with_capacity(closure.argument_type.node.members.len()); + + for argument in closure.argument_type.node.members.iter() { + argument_names.push(&argument.node.name.node); + } + + // We typically won't have more than 6 arguments, so a binary search will typically + // outperform a hashset. + argument_names.sort(); + + argument_names + }; + + find_all_variable_accesses_in_expression( + &closure.expression.node, + &mut move |variable_name| { + if argument_names.binary_search(&&variable_name.node).is_err() { + // This is not an argument, which means it must be captured from the environment. + access_collector(variable_name)?; + } + + Ok(()) + }, + )?; + + Ok(()) +} + +fn find_all_variable_accesses_in_dictionary_construction( + dictionary_construction: &crate::compile::DictionaryConstruction, + access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, +) -> ExpressionResult<()> { + for assignment in dictionary_construction.assignments.iter() { + find_all_variable_accesses_in_expression( + &assignment.node.assignment.node, + access_collector, + )?; + } + + Ok(()) +} + +fn find_all_variable_accesses_in_expression( + expression: &Expression, + access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, +) -> ExpressionResult<()> { + match expression { + Expression::BinaryExpression(ast_node) => { + find_all_variable_accesses_in_expression(&ast_node.node.a.node, access_collector)?; + find_all_variable_accesses_in_expression(&ast_node.node.b.node, access_collector)?; + + Ok(()) + } + Expression::ClosureDefinition(ast_node) => { + find_all_variable_accesses_in_expression( + &ast_node.node.return_type.node, + access_collector, + )?; + find_all_variable_accesses_in_closure_capture(&ast_node.node, access_collector)?; + + Ok(()) + } + Expression::DictionaryConstruction(ast_node) => { + find_all_variable_accesses_in_dictionary_construction(&ast_node.node, access_collector) + } + Expression::If(ast_node) => { + find_all_variable_accesses_in_expression( + &ast_node.node.condition.node, + access_collector, + )?; + find_all_variable_accesses_in_expression( + &ast_node.node.on_true.node, + access_collector, + )?; + find_all_variable_accesses_in_expression( + &ast_node.node.on_false.node, + access_collector, + )?; + + Ok(()) + } + Expression::List(ast_node) => { + for expression in ast_node.node.iter() { + find_all_variable_accesses_in_expression(&expression.node, access_collector)?; + } + + Ok(()) + } + Expression::Parenthesis(ast_node) => { + find_all_variable_accesses_in_expression(&ast_node.node, access_collector) + } + Expression::Path(ast_node) => { + // Only the top most parent matters. + access_collector(&ast_node.node.path[0]) + } + Expression::StructDefinition(ast_node) => { + for member in ast_node.node.members.iter() { + find_all_variable_accesses_in_expression(&member.node.ty.node, access_collector)?; + if let Some(default) = member.node.default.as_ref() { + find_all_variable_accesses_in_expression(&default.node, access_collector)?; + } + } + + Ok(()) + } + Expression::UnaryExpression(ast_node) => find_all_variable_accesses_in_expression( + &ast_node.node.expression.node, + access_collector, + ), + Expression::FunctionCall(ast_node) => { + find_all_variable_accesses_in_expression( + &ast_node.node.to_call.node, + access_collector, + )?; + find_all_variable_accesses_in_dictionary_construction( + &ast_node.node.argument.node, + access_collector, + )?; + + Ok(()) + } + Expression::MethodCall(ast_node) => { + find_all_variable_accesses_in_expression( + &ast_node.node.self_dictionary.node, + access_collector, + )?; + find_all_variable_accesses_in_dictionary_construction( + &ast_node.node.argument.node, + access_collector, + )?; + + Ok(()) + } + Expression::LetIn(ast_node) => { + for assignment in ast_node.node.assignments.iter() { + find_all_variable_accesses_in_expression( + &assignment.node.value.node, + access_collector, + )?; + } + + find_all_variable_accesses_in_expression( + &ast_node.node.expression.node, + access_collector, + )?; + + Ok(()) + } + Expression::Boolean(_) + | Expression::Default(_) + | Expression::Scalar(_) + | Expression::SignedInteger(_) + | Expression::String(_) + | Expression::UnsignedInteger(_) => Ok(()), + } +} + /// Closures are immutable, meaning that all copies can reference the same data. /// This is that common data. #[derive(Debug, Eq, PartialEq)] struct UserClosureInternals { signature: Arc, + captured_values: HashableMap, expression: Arc>, } @@ -68,18 +234,9 @@ impl UserClosure { source.node.argument_type.reference.clone(), |stack_trace| { let argument_type = - execute_expression(log, stack_trace, stack, &source.node.argument_type)? - .downcast::(stack_trace)?; - - if let ValueType::Dictionary(argument_type) = argument_type { - Ok(argument_type) - } else { - Err(DowncastError { - expected: StructDefinition::static_type_name().into(), - got: argument_type.name(), - } - .to_error(stack_trace.as_slice())) - } + StructDefinition::new(log, stack_trace, stack, &source.node.argument_type)?; + + Ok(argument_type) }, )?; @@ -96,9 +253,19 @@ impl UserClosure { let expression = source.node.expression.clone(); + let mut captured_values = HashableMap::new(); + find_all_variable_accesses_in_closure_capture(&source.node, &mut |field_name| { + let value = find_value(log, stack_trace, stack, [field_name])?; + + captured_values.insert(field_name.node.clone(), value); + + Ok(()) + })?; + Ok(Self { data: Arc::new(UserClosureInternals { signature, + captured_values, expression, }), }) @@ -130,6 +297,10 @@ impl Object for UserClosure { stack.insert_value(name, value.clone()); } + for (name, value) in self.data.captured_values.iter() { + stack.insert_value(name, value.clone()); + } + let result = execute_expression(log, stack_trace, stack, &self.data.expression)?; self.data @@ -313,7 +484,7 @@ mod test { #[test] fn define_closure() { - let product = test_run("() -> std.types.None std.consts.None").unwrap(); + let product = test_run("() -> std.types.UInt 1u").unwrap(); let expression = product.as_userclosure().unwrap().data.expression.clone(); @@ -326,8 +497,9 @@ mod test { members: HashableMap::new().into(), variadic: false, }, - return_type: ValueType::TypeNone, + return_type: ValueType::UnsignedInteger, }), + captured_values: HashableMap::new(), expression }) } @@ -369,6 +541,14 @@ mod test { assert_eq!(product, values::UnsignedInteger::from(5).into()); } + #[test] + fn call_closure_captured_variable() { + let product = + test_run("let value = 3u; my_function = (input: std.types.UInt) -> std.types.UInt: value + input; in my_function(input = 4u)") + .unwrap(); + assert_eq!(product, values::UnsignedInteger::from(7).into()); + } + #[test] fn build_argument_signature() { assert_eq!(build_argument_signature_list!(), []); diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 989317d..cd5dbab 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -205,7 +205,7 @@ module.exports = grammar({ ), closure_definition: $ => prec.left(PREC.closure, seq( - field('argument', choice($.struct_definition, $.path)), + field('argument', $.struct_definition), '->', field('result', choice($.struct_definition, $.path)), field('expression', $.expression), diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index ae6a917..c7da932 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -1640,17 +1640,8 @@ "type": "FIELD", "name": "argument", "content": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "struct_definition" - }, - { - "type": "SYMBOL", - "name": "path" - } - ] + "type": "SYMBOL", + "name": "struct_definition" } }, { diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index f40d31a..1d7b2fd 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -152,10 +152,6 @@ "multiple": false, "required": true, "types": [ - { - "type": "path", - "named": true - }, { "type": "struct_definition", "named": true diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index f661504..b348c23 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -885,9 +885,9 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [6] = 4, [7] = 7, [8] = 8, - [9] = 9, + [9] = 7, [10] = 8, - [11] = 9, + [11] = 11, [12] = 12, [13] = 13, [14] = 14, @@ -895,7 +895,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [16] = 16, [17] = 17, [18] = 18, - [19] = 12, + [19] = 19, [20] = 20, [21] = 21, [22] = 22, @@ -905,29 +905,29 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [26] = 26, [27] = 27, [28] = 28, - [29] = 22, - [30] = 30, + [29] = 25, + [30] = 23, [31] = 31, [32] = 32, [33] = 33, [34] = 34, [35] = 35, - [36] = 28, + [36] = 36, [37] = 13, [38] = 14, [39] = 15, [40] = 16, - [41] = 41, - [42] = 26, - [43] = 30, - [44] = 23, - [45] = 24, + [41] = 17, + [42] = 20, + [43] = 27, + [44] = 24, + [45] = 12, [46] = 31, [47] = 32, [48] = 33, [49] = 34, [50] = 35, - [51] = 41, + [51] = 36, [52] = 52, [53] = 53, [54] = 54, @@ -975,51 +975,51 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [96] = 96, [97] = 97, [98] = 98, - [99] = 27, - [100] = 56, - [101] = 55, - [102] = 53, - [103] = 52, - [104] = 67, - [105] = 66, - [106] = 54, - [107] = 57, - [108] = 60, - [109] = 68, - [110] = 69, - [111] = 80, - [112] = 71, - [113] = 70, - [114] = 75, - [115] = 72, - [116] = 73, - [117] = 76, - [118] = 58, - [119] = 74, - [120] = 59, - [121] = 61, - [122] = 81, - [123] = 63, - [124] = 62, - [125] = 64, - [126] = 77, - [127] = 92, - [128] = 65, - [129] = 95, - [130] = 78, - [131] = 96, - [132] = 82, + [99] = 28, + [100] = 55, + [101] = 54, + [102] = 66, + [103] = 67, + [104] = 52, + [105] = 56, + [106] = 53, + [107] = 79, + [108] = 69, + [109] = 80, + [110] = 70, + [111] = 71, + [112] = 74, + [113] = 68, + [114] = 81, + [115] = 75, + [116] = 76, + [117] = 72, + [118] = 62, + [119] = 73, + [120] = 60, + [121] = 59, + [122] = 61, + [123] = 64, + [124] = 63, + [125] = 95, + [126] = 57, + [127] = 77, + [128] = 92, + [129] = 65, + [130] = 90, + [131] = 78, + [132] = 96, [133] = 97, - [134] = 94, - [135] = 86, + [134] = 82, + [135] = 83, [136] = 91, - [137] = 85, + [137] = 87, [138] = 98, - [139] = 84, - [140] = 90, + [139] = 86, + [140] = 84, [141] = 88, - [142] = 89, - [143] = 83, + [142] = 94, + [143] = 85, [144] = 93, [145] = 145, [146] = 146, @@ -1051,17 +1051,17 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [172] = 167, [173] = 173, [174] = 174, - [175] = 27, - [176] = 55, - [177] = 56, + [175] = 28, + [176] = 54, + [177] = 55, [178] = 66, [179] = 67, [180] = 180, [181] = 181, [182] = 182, - [183] = 95, + [183] = 90, [184] = 184, - [185] = 96, + [185] = 95, [186] = 186, [187] = 187, [188] = 188, @@ -1839,10 +1839,10 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [99] = {.lex_state = 17}, [100] = {.lex_state = 17}, [101] = {.lex_state = 17}, - [102] = {.lex_state = 18}, - [103] = {.lex_state = 18}, - [104] = {.lex_state = 17}, - [105] = {.lex_state = 17}, + [102] = {.lex_state = 17}, + [103] = {.lex_state = 17}, + [104] = {.lex_state = 18}, + [105] = {.lex_state = 18}, [106] = {.lex_state = 18}, [107] = {.lex_state = 18}, [108] = {.lex_state = 18}, @@ -1862,13 +1862,13 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [122] = {.lex_state = 18}, [123] = {.lex_state = 18}, [124] = {.lex_state = 18}, - [125] = {.lex_state = 18}, + [125] = {.lex_state = 17}, [126] = {.lex_state = 18}, - [127] = {.lex_state = 17}, - [128] = {.lex_state = 18}, - [129] = {.lex_state = 17}, - [130] = {.lex_state = 18}, - [131] = {.lex_state = 17}, + [127] = {.lex_state = 18}, + [128] = {.lex_state = 17}, + [129] = {.lex_state = 18}, + [130] = {.lex_state = 17}, + [131] = {.lex_state = 18}, [132] = {.lex_state = 18}, [133] = {.lex_state = 18}, [134] = {.lex_state = 18}, @@ -2072,10 +2072,10 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_binary_expression] = STATE(143), [sym_if] = STATE(143), [sym_let_in] = STATE(143), - [sym_path] = STATE(108), + [sym_path] = STATE(143), [sym_parenthesis] = STATE(143), [sym_list] = STATE(143), - [sym_struct_definition] = STATE(108), + [sym_struct_definition] = STATE(121), [sym_dictionary_construction] = STATE(143), [sym_closure_definition] = STATE(143), [sym_formula] = STATE(143), @@ -2113,16 +2113,16 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_boolean] = STATE(143), [sym_function_call] = STATE(143), [sym_method_call] = STATE(143), - [sym_expression] = STATE(159), + [sym_expression] = STATE(153), [sym_unary_expression] = STATE(143), [sym_binary_expression] = STATE(143), [sym_if] = STATE(143), [sym_let_in] = STATE(143), - [sym_path] = STATE(108), + [sym_path] = STATE(143), [sym_parenthesis] = STATE(143), [sym_list] = STATE(143), - [sym_struct_definition] = STATE(108), - [sym_dictionary_construction] = STATE(87), + [sym_struct_definition] = STATE(121), + [sym_dictionary_construction] = STATE(89), [sym_closure_definition] = STATE(143), [sym_formula] = STATE(143), [sym_identifier] = ACTIONS(5), @@ -2179,16 +2179,16 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_boolean] = STATE(143), [sym_function_call] = STATE(143), [sym_method_call] = STATE(143), - [sym_expression] = STATE(153), + [sym_expression] = STATE(159), [sym_unary_expression] = STATE(143), [sym_binary_expression] = STATE(143), [sym_if] = STATE(143), [sym_let_in] = STATE(143), - [sym_path] = STATE(108), + [sym_path] = STATE(143), [sym_parenthesis] = STATE(143), [sym_list] = STATE(143), - [sym_struct_definition] = STATE(108), - [sym_dictionary_construction] = STATE(87), + [sym_struct_definition] = STATE(121), + [sym_dictionary_construction] = STATE(89), [sym_closure_definition] = STATE(143), [sym_formula] = STATE(143), [sym_identifier] = ACTIONS(5), @@ -2245,22 +2245,22 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_boolean] = STATE(143), [sym_function_call] = STATE(143), [sym_method_call] = STATE(143), - [sym_expression] = STATE(156), + [sym_expression] = STATE(154), [sym_unary_expression] = STATE(143), [sym_binary_expression] = STATE(143), [sym_if] = STATE(143), [sym_let_in] = STATE(143), - [sym_path] = STATE(108), + [sym_path] = STATE(143), [sym_parenthesis] = STATE(143), [sym_list] = STATE(143), [sym_struct_member] = STATE(225), - [sym__struct_final_element] = STATE(239), - [sym_struct_definition] = STATE(108), + [sym__struct_final_element] = STATE(247), + [sym_struct_definition] = STATE(121), [sym_dictionary_member_assignment] = STATE(212), [sym_dictionary_construction] = STATE(143), [sym_closure_definition] = STATE(143), [sym_formula] = STATE(143), - [aux_sym_struct_definition_repeat1] = STATE(196), + [aux_sym_struct_definition_repeat1] = STATE(198), [sym_identifier] = ACTIONS(69), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2302,12 +2302,12 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_binary_expression] = STATE(143), [sym_if] = STATE(143), [sym_let_in] = STATE(143), - [sym_path] = STATE(108), + [sym_path] = STATE(143), [sym_parenthesis] = STATE(143), [sym_list] = STATE(143), [sym_struct_member] = STATE(225), [sym__struct_final_element] = STATE(247), - [sym_struct_definition] = STATE(108), + [sym_struct_definition] = STATE(121), [sym_dictionary_member_assignment] = STATE(210), [sym_dictionary_construction] = STATE(143), [sym_closure_definition] = STATE(143), @@ -2349,22 +2349,22 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_boolean] = STATE(143), [sym_function_call] = STATE(143), [sym_method_call] = STATE(143), - [sym_expression] = STATE(154), + [sym_expression] = STATE(156), [sym_unary_expression] = STATE(143), [sym_binary_expression] = STATE(143), [sym_if] = STATE(143), [sym_let_in] = STATE(143), - [sym_path] = STATE(108), + [sym_path] = STATE(143), [sym_parenthesis] = STATE(143), [sym_list] = STATE(143), [sym_struct_member] = STATE(225), - [sym__struct_final_element] = STATE(247), - [sym_struct_definition] = STATE(108), + [sym__struct_final_element] = STATE(239), + [sym_struct_definition] = STATE(121), [sym_dictionary_member_assignment] = STATE(212), [sym_dictionary_construction] = STATE(143), [sym_closure_definition] = STATE(143), [sym_formula] = STATE(143), - [aux_sym_struct_definition_repeat1] = STATE(198), + [aux_sym_struct_definition_repeat1] = STATE(196), [sym_identifier] = ACTIONS(69), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2391,52 +2391,51 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { static const uint16_t ts_small_parse_table[] = { [0] = 24, - ACTIONS(77), 1, + ACTIONS(5), 1, sym_identifier, - ACTIONS(80), 1, + ACTIONS(7), 1, sym_string, - ACTIONS(83), 1, + ACTIONS(9), 1, sym_default, - ACTIONS(86), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(89), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(92), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(95), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(104), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(107), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(110), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(113), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(116), 1, - anon_sym_RBRACK, - ACTIONS(118), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(7), 1, + ACTIONS(77), 1, + anon_sym_RBRACK, + STATE(8), 1, aux_sym_list_repeat1, STATE(100), 1, sym__float, STATE(101), 1, sym_number, - STATE(155), 1, + STATE(121), 1, + sym_struct_definition, + STATE(147), 1, sym_expression, STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(98), 2, + ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, - ACTIONS(101), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -2445,7 +2444,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2456,6 +2455,7 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, @@ -2486,15 +2486,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(121), 1, + ACTIONS(79), 1, anon_sym_RBRACK, - STATE(9), 1, + STATE(11), 1, aux_sym_list_repeat1, STATE(100), 1, sym__float, STATE(101), 1, sym_number, - STATE(147), 1, + STATE(121), 1, + sym_struct_definition, + STATE(149), 1, sym_expression, STATE(234), 1, sym_integer, @@ -2504,9 +2506,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -2516,7 +2515,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2527,6 +2526,7 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, @@ -2557,15 +2557,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(123), 1, + ACTIONS(81), 1, anon_sym_RBRACK, - STATE(7), 1, + STATE(10), 1, aux_sym_list_repeat1, STATE(100), 1, sym__float, STATE(101), 1, sym_number, - STATE(149), 1, + STATE(121), 1, + sym_struct_definition, + STATE(152), 1, sym_expression, STATE(234), 1, sym_integer, @@ -2575,9 +2577,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -2587,7 +2586,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2598,6 +2597,7 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, @@ -2628,7 +2628,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(125), 1, + ACTIONS(83), 1, anon_sym_RBRACK, STATE(11), 1, aux_sym_list_repeat1, @@ -2636,7 +2636,9 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, - STATE(152), 1, + STATE(121), 1, + sym_struct_definition, + STATE(150), 1, sym_expression, STATE(234), 1, sym_integer, @@ -2646,9 +2648,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -2658,7 +2657,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2669,12 +2668,84 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, [380] = 24, + ACTIONS(85), 1, + sym_identifier, + ACTIONS(88), 1, + sym_string, + ACTIONS(91), 1, + sym_default, + ACTIONS(94), 1, + aux_sym_base_ten_token1, + ACTIONS(97), 1, + aux_sym_octal_token1, + ACTIONS(100), 1, + aux_sym_hex_token1, + ACTIONS(103), 1, + aux_sym_binary_token1, + ACTIONS(112), 1, + anon_sym_if, + ACTIONS(115), 1, + anon_sym_let, + ACTIONS(118), 1, + anon_sym_LPAREN, + ACTIONS(121), 1, + anon_sym_LBRACK, + ACTIONS(124), 1, + anon_sym_RBRACK, + ACTIONS(126), 1, + anon_sym_LT_LT_LT, + STATE(11), 1, + aux_sym_list_repeat1, + STATE(100), 1, + sym__float, + STATE(101), 1, + sym_number, + STATE(121), 1, + sym_struct_definition, + STATE(155), 1, + sym_expression, + STATE(234), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(106), 2, + sym_true, + sym_false, + ACTIONS(109), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(227), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(143), 16, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [475] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2699,16 +2770,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(127), 1, - anon_sym_RBRACK, - STATE(7), 1, - aux_sym_list_repeat1, STATE(100), 1, sym__float, STATE(101), 1, sym_number, - STATE(150), 1, + STATE(114), 1, sym_expression, + STATE(121), 1, + sym_struct_definition, STATE(234), 1, sym_integer, ACTIONS(3), 2, @@ -2717,9 +2786,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -2729,7 +2795,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2740,54 +2806,54 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [475] = 22, + [564] = 22, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, - sym_identifier, - ACTIONS(131), 1, - sym_string, - ACTIONS(133), 1, - sym_default, - ACTIONS(135), 1, - aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(55), 1, - sym_number, - STATE(56), 1, + STATE(100), 1, sym__float, - STATE(78), 1, + STATE(101), 1, + sym_number, + STATE(112), 1, sym_expression, - STATE(229), 1, + STATE(121), 1, + sym_struct_definition, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(19), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, - ACTIONS(139), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -2796,7 +2862,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2807,12 +2873,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [564] = 22, + [653] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2841,8 +2908,10 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, - STATE(114), 1, + STATE(115), 1, sym_expression, + STATE(121), 1, + sym_struct_definition, STATE(234), 1, sym_integer, ACTIONS(3), 2, @@ -2851,9 +2920,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -2863,7 +2929,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2874,12 +2940,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [653] = 22, + [742] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2908,8 +2975,10 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, - STATE(117), 1, + STATE(116), 1, sym_expression, + STATE(121), 1, + sym_struct_definition, STATE(234), 1, sym_integer, ACTIONS(3), 2, @@ -2918,9 +2987,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -2930,7 +2996,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2941,12 +3007,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [742] = 22, + [831] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2975,7 +3042,9 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, - STATE(118), 1, + STATE(121), 1, + sym_struct_definition, + STATE(126), 1, sym_expression, STATE(234), 1, sym_integer, @@ -2985,9 +3054,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -2997,7 +3063,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3008,12 +3074,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [831] = 22, + [920] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3042,7 +3109,9 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, - STATE(126), 1, + STATE(121), 1, + sym_struct_definition, + STATE(127), 1, sym_expression, STATE(234), 1, sym_integer, @@ -3052,9 +3121,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -3064,7 +3130,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3075,12 +3141,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [920] = 22, + [1009] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -3105,12 +3172,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, - STATE(79), 1, + STATE(58), 1, sym_expression, + STATE(59), 1, + sym_struct_definition, STATE(229), 1, sym_integer, ACTIONS(3), 2, @@ -3119,9 +3188,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -3131,7 +3197,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3142,12 +3208,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1009] = 22, + [1098] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3176,6 +3243,8 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, + STATE(121), 1, + sym_struct_definition, STATE(157), 1, sym_expression, STATE(234), 1, @@ -3186,9 +3255,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -3198,7 +3264,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3209,12 +3275,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1098] = 22, + [1187] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3243,7 +3310,9 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, - STATE(130), 1, + STATE(121), 1, + sym_struct_definition, + STATE(131), 1, sym_expression, STATE(234), 1, sym_integer, @@ -3253,9 +3322,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -3265,7 +3331,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3276,12 +3342,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1187] = 22, + [1276] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3310,6 +3377,8 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, + STATE(121), 1, + sym_struct_definition, STATE(146), 1, sym_expression, STATE(234), 1, @@ -3320,9 +3389,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -3332,7 +3398,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3343,12 +3409,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1276] = 22, + [1365] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3377,6 +3444,8 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, + STATE(121), 1, + sym_struct_definition, STATE(151), 1, sym_expression, STATE(234), 1, @@ -3387,9 +3456,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -3399,7 +3465,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3410,12 +3476,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1365] = 22, + [1454] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3444,7 +3511,9 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, - STATE(123), 1, + STATE(121), 1, + sym_struct_definition, + STATE(124), 1, sym_expression, STATE(234), 1, sym_integer, @@ -3454,9 +3523,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -3466,7 +3532,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3477,12 +3543,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1454] = 22, + [1543] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3511,8 +3578,10 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, - STATE(122), 1, + STATE(109), 1, sym_expression, + STATE(121), 1, + sym_struct_definition, STATE(234), 1, sym_integer, ACTIONS(3), 2, @@ -3521,9 +3590,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -3533,7 +3599,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3544,12 +3610,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1543] = 22, + [1632] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3580,6 +3647,8 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(120), 1, sym_expression, + STATE(121), 1, + sym_struct_definition, STATE(234), 1, sym_integer, ACTIONS(3), 2, @@ -3588,9 +3657,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -3600,7 +3666,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3611,12 +3677,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1632] = 22, + [1721] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3645,6 +3712,8 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, + STATE(121), 1, + sym_struct_definition, STATE(148), 1, sym_expression, STATE(234), 1, @@ -3655,9 +3724,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -3667,7 +3733,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3678,12 +3744,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1721] = 22, + [1810] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -3708,12 +3775,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(3), 1, + STATE(2), 1, sym_expression, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, + STATE(59), 1, + sym_struct_definition, STATE(229), 1, sym_integer, ACTIONS(3), 2, @@ -3722,9 +3791,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -3734,7 +3800,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3745,12 +3811,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1810] = 4, + [1899] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -3799,49 +3866,48 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [1863] = 22, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [1952] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(129), 1, + sym_identifier, + ACTIONS(131), 1, + sym_string, + ACTIONS(133), 1, + sym_default, + ACTIONS(135), 1, + aux_sym_base_ten_token1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(54), 1, sym_number, - STATE(119), 1, + STATE(55), 1, + sym__float, + STATE(59), 1, + sym_struct_definition, + STATE(60), 1, sym_expression, - STATE(234), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3850,7 +3916,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3861,12 +3927,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1952] = 22, + [2041] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -3891,10 +3958,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, + STATE(59), 1, + sym_struct_definition, STATE(63), 1, sym_expression, STATE(229), 1, @@ -3905,9 +3974,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -3917,7 +3983,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3928,12 +3994,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2041] = 22, + [2130] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -3958,10 +4025,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, + STATE(59), 1, + sym_struct_definition, STATE(68), 1, sym_expression, STATE(229), 1, @@ -3972,9 +4041,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -3984,7 +4050,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3995,12 +4061,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2130] = 22, + [2219] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4025,10 +4092,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, + STATE(59), 1, + sym_struct_definition, STATE(69), 1, sym_expression, STATE(229), 1, @@ -4039,9 +4108,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -4051,7 +4117,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4062,12 +4128,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2219] = 22, + [2308] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4092,10 +4159,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, + STATE(59), 1, + sym_struct_definition, STATE(70), 1, sym_expression, STATE(229), 1, @@ -4106,9 +4175,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -4118,7 +4184,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4129,12 +4195,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2308] = 22, + [2397] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4159,10 +4226,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, + STATE(59), 1, + sym_struct_definition, STATE(71), 1, sym_expression, STATE(229), 1, @@ -4173,9 +4242,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -4185,7 +4251,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4196,12 +4262,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2397] = 22, + [2486] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4226,10 +4293,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, + STATE(59), 1, + sym_struct_definition, STATE(72), 1, sym_expression, STATE(229), 1, @@ -4240,9 +4309,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -4252,7 +4318,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4263,12 +4329,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2486] = 22, + [2575] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4293,10 +4360,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, + STATE(59), 1, + sym_struct_definition, STATE(73), 1, sym_expression, STATE(229), 1, @@ -4307,9 +4376,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -4319,7 +4385,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4330,12 +4396,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2575] = 22, + [2664] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4360,10 +4427,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, + STATE(59), 1, + sym_struct_definition, STATE(74), 1, sym_expression, STATE(229), 1, @@ -4374,9 +4443,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -4386,7 +4452,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4397,12 +4463,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2664] = 22, + [2753] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4427,10 +4494,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, + STATE(59), 1, + sym_struct_definition, STATE(75), 1, sym_expression, STATE(229), 1, @@ -4441,9 +4510,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -4453,7 +4519,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4464,12 +4530,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2753] = 22, + [2842] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4494,10 +4561,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, + STATE(59), 1, + sym_struct_definition, STATE(76), 1, sym_expression, STATE(229), 1, @@ -4508,9 +4577,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -4520,7 +4586,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4531,12 +4597,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2842] = 22, + [2931] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4561,12 +4628,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, - STATE(58), 1, + STATE(57), 1, sym_expression, + STATE(59), 1, + sym_struct_definition, STATE(229), 1, sym_integer, ACTIONS(3), 2, @@ -4575,9 +4644,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -4587,7 +4653,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4598,12 +4664,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2931] = 22, + [3020] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4628,10 +4695,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, + STATE(59), 1, + sym_struct_definition, STATE(77), 1, sym_expression, STATE(229), 1, @@ -4642,9 +4711,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -4654,7 +4720,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4665,54 +4731,54 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3020] = 22, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [3109] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(129), 1, + sym_identifier, + ACTIONS(131), 1, + sym_string, + ACTIONS(133), 1, + sym_default, + ACTIONS(135), 1, + aux_sym_base_ten_token1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(54), 1, sym_number, - STATE(121), 1, + STATE(55), 1, + sym__float, + STATE(59), 1, + sym_struct_definition, + STATE(78), 1, sym_expression, - STATE(234), 1, + STATE(229), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(137), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, - ACTIONS(21), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4721,7 +4787,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4732,12 +4798,13 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3109] = 22, + [3198] = 22, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4762,12 +4829,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(2), 1, + STATE(3), 1, sym_expression, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, + STATE(59), 1, + sym_struct_definition, STATE(229), 1, sym_integer, ACTIONS(3), 2, @@ -4776,9 +4845,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -4788,7 +4854,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4799,73 +4865,7 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [3198] = 22, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_let, - ACTIONS(27), 1, - anon_sym_LPAREN, - ACTIONS(29), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, - sym_number, - STATE(109), 1, - sym_expression, - STATE(234), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - STATE(108), 2, sym_path, - sym_struct_definition, - ACTIONS(21), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(227), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(143), 15, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_let_in, sym_parenthesis, sym_list, sym_dictionary_construction, @@ -4896,11 +4896,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, - STATE(81), 1, + STATE(59), 1, + sym_struct_definition, + STATE(80), 1, sym_expression, STATE(229), 1, sym_integer, @@ -4910,9 +4912,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -4922,7 +4921,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4933,6 +4932,7 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, @@ -4963,11 +4963,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(149), 1, anon_sym_LT_LT_LT, - STATE(55), 1, + STATE(54), 1, sym_number, - STATE(56), 1, + STATE(55), 1, sym__float, STATE(59), 1, + sym_struct_definition, + STATE(81), 1, sym_expression, STATE(229), 1, sym_integer, @@ -4977,9 +4979,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(137), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, @@ -4989,7 +4988,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(85), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5000,6 +4999,7 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, @@ -5034,8 +5034,10 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, - STATE(110), 1, + STATE(113), 1, sym_expression, + STATE(121), 1, + sym_struct_definition, STATE(234), 1, sym_integer, ACTIONS(3), 2, @@ -5044,9 +5046,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -5056,7 +5055,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5067,6 +5066,7 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, @@ -5101,8 +5101,10 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, - STATE(113), 1, + STATE(108), 1, sym_expression, + STATE(121), 1, + sym_struct_definition, STATE(234), 1, sym_integer, ACTIONS(3), 2, @@ -5111,9 +5113,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -5123,7 +5122,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5134,6 +5133,7 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, @@ -5168,8 +5168,10 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, - STATE(112), 1, + STATE(110), 1, sym_expression, + STATE(121), 1, + sym_struct_definition, STATE(234), 1, sym_integer, ACTIONS(3), 2, @@ -5178,9 +5180,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -5190,7 +5189,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5201,6 +5200,7 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, @@ -5235,8 +5235,10 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, - STATE(115), 1, + STATE(111), 1, sym_expression, + STATE(121), 1, + sym_struct_definition, STATE(234), 1, sym_integer, ACTIONS(3), 2, @@ -5245,9 +5247,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -5257,7 +5256,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5268,6 +5267,7 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, @@ -5302,8 +5302,10 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(101), 1, sym_number, - STATE(116), 1, + STATE(117), 1, sym_expression, + STATE(121), 1, + sym_struct_definition, STATE(234), 1, sym_integer, ACTIONS(3), 2, @@ -5312,9 +5314,6 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - STATE(108), 2, - sym_path, - sym_struct_definition, ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, @@ -5324,7 +5323,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(143), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5335,54 +5334,54 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, [3910] = 22, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_default, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, - sym_identifier, - ACTIONS(131), 1, - sym_string, - ACTIONS(133), 1, - sym_default, - ACTIONS(135), 1, - aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(55), 1, - sym_number, - STATE(56), 1, + STATE(100), 1, sym__float, - STATE(61), 1, + STATE(101), 1, + sym_number, + STATE(119), 1, sym_expression, - STATE(229), 1, + STATE(121), 1, + sym_struct_definition, + STATE(234), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(19), 2, sym_true, sym_false, - STATE(60), 2, - sym_path, - sym_struct_definition, - ACTIONS(139), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -5391,7 +5390,7 @@ static const uint16_t ts_small_parse_table[] = { sym_octal, sym_hex, sym_binary, - STATE(83), 15, + STATE(143), 16, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5402,6 +5401,7 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, + sym_path, sym_parenthesis, sym_list, sym_dictionary_construction, @@ -5415,13 +5415,12 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 18, + ACTIONS(157), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, - anon_sym_DASH, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -5440,6 +5439,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -5454,23 +5454,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_LBRACK, - anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [4053] = 5, + [4052] = 5, ACTIONS(168), 1, anon_sym_DOT, - STATE(54), 1, + STATE(56), 1, aux_sym_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 18, + ACTIONS(164), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, - anon_sym_DASH, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -5489,55 +5487,7 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_DASH_GT, - anon_sym_LT_LT_LT, - [4107] = 5, - ACTIONS(168), 1, - anon_sym_DOT, - STATE(52), 1, - aux_sym_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(170), 18, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, anon_sym_DASH, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(172), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -5552,15 +5502,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_LBRACK, - anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [4161] = 4, - ACTIONS(178), 1, + [4105] = 4, + ACTIONS(174), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 17, + ACTIONS(170), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5578,7 +5527,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(176), 22, + ACTIONS(172), 22, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5601,15 +5550,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4212] = 5, - ACTIONS(184), 1, + [4156] = 5, + ACTIONS(180), 1, sym_unit_quote, - STATE(96), 1, + STATE(95), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(180), 17, + ACTIONS(176), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5627,7 +5576,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(182), 21, + ACTIONS(178), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5649,18 +5598,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4265] = 3, + [4209] = 5, + ACTIONS(168), 1, + anon_sym_DOT, + STATE(52), 1, + aux_sym_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 19, + ACTIONS(182), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, - anon_sym_DOT, sym_true, sym_false, - anon_sym_DASH, anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, @@ -5673,12 +5624,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(159), 21, + ACTIONS(184), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -5693,9 +5645,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_LBRACK, - anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [4314] = 18, + [4262] = 18, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, @@ -5716,7 +5667,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -5755,34 +5706,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [4392] = 21, + [4340] = 10, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, anon_sym_STAR_STAR, ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(45), 1, - anon_sym_LT_LT, - ACTIONS(47), 1, - anon_sym_GT_GT, - ACTIONS(49), 1, - anon_sym_AMP, - ACTIONS(51), 1, - anon_sym_PIPE, - ACTIONS(53), 1, - anon_sym_CARET, - ACTIONS(59), 1, - anon_sym_AMP_AMP, - ACTIONS(61), 1, - anon_sym_PIPE_PIPE, - ACTIONS(63), 1, - anon_sym_DOT_DOT, - ACTIONS(65), 1, - anon_sym_DOT_DOT_EQ, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + ACTIONS(194), 1, + anon_sym_else, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -5790,41 +5725,46 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + ACTIONS(186), 14, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(190), 2, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + ACTIONS(188), 17, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(57), 4, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(196), 6, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(194), 9, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, - anon_sym_else, - anon_sym_let, - [4476] = 4, - ACTIONS(202), 1, + [4402] = 4, + ACTIONS(200), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(198), 18, + ACTIONS(196), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5843,7 +5783,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(200), 20, + ACTIONS(198), 20, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5864,7 +5804,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4526] = 21, + [4452] = 21, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, @@ -5891,7 +5831,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -5910,14 +5850,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(206), 6, + ACTIONS(202), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(204), 9, + ACTIONS(194), 9, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5927,13 +5867,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [4610] = 4, - ACTIONS(212), 1, + [4536] = 4, + ACTIONS(208), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(208), 18, + ACTIONS(204), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -5952,12 +5892,57 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(210), 20, + ACTIONS(206), 20, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4586] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 18, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + anon_sym_DOT, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(159), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -5973,7 +5958,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4660] = 21, + [4634] = 21, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, @@ -6000,7 +5985,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -6019,14 +6004,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(216), 6, + ACTIONS(212), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(214), 9, + ACTIONS(210), 9, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6036,11 +6021,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [4744] = 3, + [4718] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(218), 18, + ACTIONS(214), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6059,7 +6044,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(220), 21, + ACTIONS(216), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6081,11 +6066,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [4792] = 3, + [4766] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(222), 18, + ACTIONS(218), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6104,7 +6089,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(224), 21, + ACTIONS(220), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6126,7 +6111,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [4840] = 3, + [4814] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -6171,11 +6156,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4888] = 3, + [4862] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(226), 17, + ACTIONS(222), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6193,7 +6178,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(228), 22, + ACTIONS(224), 22, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6216,7 +6201,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4936] = 9, + [4910] = 9, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, @@ -6225,7 +6210,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SLASH_SLASH, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -6267,12 +6252,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4996] = 6, + [4970] = 6, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -6315,14 +6300,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5050] = 7, + [5024] = 7, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, anon_sym_STAR_STAR, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -6364,7 +6349,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5106] = 10, + [5080] = 10, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, @@ -6373,7 +6358,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SLASH_SLASH, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -6416,7 +6401,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5168] = 12, + [5142] = 12, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, @@ -6429,7 +6414,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_GT, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -6470,7 +6455,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5234] = 14, + [5208] = 14, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, @@ -6487,7 +6472,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -6526,7 +6511,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5304] = 13, + [5278] = 13, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, @@ -6541,7 +6526,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -6581,7 +6566,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5372] = 15, + [5346] = 15, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, @@ -6600,7 +6585,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -6638,7 +6623,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5444] = 17, + [5418] = 17, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, @@ -6657,7 +6642,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -6697,7 +6682,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5520] = 19, + [5494] = 19, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, @@ -6720,7 +6705,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -6758,7 +6743,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5600] = 21, + [5574] = 21, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, @@ -6785,7 +6770,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -6804,14 +6789,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(232), 6, + ACTIONS(228), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(230), 9, + ACTIONS(226), 9, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -6821,32 +6806,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5684] = 10, - ACTIONS(33), 1, - anon_sym_COLON, - ACTIONS(39), 1, - anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, - ACTIONS(192), 1, - anon_sym_LPAREN, - ACTIONS(204), 1, - anon_sym_else, - STATE(86), 1, - sym_dictionary_construction, + [5658] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(186), 14, + ACTIONS(230), 18, sym_identifier, sym_default, aux_sym_base_ten_token1, sym_true, sym_false, + anon_sym_DASH, anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, @@ -6854,14 +6827,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_else, anon_sym_let, - ACTIONS(188), 17, + ACTIONS(232), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - anon_sym_DASH, + anon_sym_COLON, anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -6871,54 +6847,74 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, anon_sym_LBRACK, + anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [5746] = 3, + [5706] = 21, + ACTIONS(33), 1, + anon_sym_COLON, + ACTIONS(39), 1, + anon_sym_STAR_STAR, + ACTIONS(43), 1, + anon_sym_SLASH_SLASH, + ACTIONS(45), 1, + anon_sym_LT_LT, + ACTIONS(47), 1, + anon_sym_GT_GT, + ACTIONS(49), 1, + anon_sym_AMP, + ACTIONS(51), 1, + anon_sym_PIPE, + ACTIONS(53), 1, + anon_sym_CARET, + ACTIONS(59), 1, + anon_sym_AMP_AMP, + ACTIONS(61), 1, + anon_sym_PIPE_PIPE, + ACTIONS(63), 1, + anon_sym_DOT_DOT, + ACTIONS(65), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(192), 1, + anon_sym_LPAREN, + STATE(83), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(234), 18, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_DASH, - anon_sym_BANG, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(236), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, + ACTIONS(190), 2, + anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, + ACTIONS(236), 6, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_LBRACK, - anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [5794] = 21, + ACTIONS(234), 9, + sym_identifier, + sym_default, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_else, + anon_sym_let, + [5790] = 21, ACTIONS(33), 1, anon_sym_COLON, ACTIONS(39), 1, @@ -6945,7 +6941,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(86), 1, + STATE(83), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -6981,7 +6977,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5878] = 3, + [5874] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7025,11 +7021,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5925] = 3, + [5921] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(198), 17, + ACTIONS(246), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7047,7 +7043,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(200), 21, + ACTIONS(248), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7069,11 +7065,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5972] = 3, + [5968] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(246), 17, + ACTIONS(250), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7091,7 +7087,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(248), 21, + ACTIONS(252), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7113,11 +7109,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6019] = 3, + [6015] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(250), 17, + ACTIONS(196), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7135,7 +7131,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(252), 21, + ACTIONS(198), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7157,7 +7153,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6066] = 3, + [6062] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7201,13 +7197,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6113] = 4, - ACTIONS(198), 1, - anon_sym_else, + [6109] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(254), 16, + ACTIONS(258), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7223,8 +7217,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_else, anon_sym_let, - ACTIONS(256), 21, + ACTIONS(260), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7246,11 +7241,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6162] = 3, + [6156] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(258), 17, + ACTIONS(262), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7268,7 +7263,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(260), 21, + ACTIONS(264), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7290,11 +7285,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6209] = 3, + [6203] = 4, + ACTIONS(196), 1, + anon_sym_else, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(208), 17, + ACTIONS(246), 16, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7310,9 +7307,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - anon_sym_else, anon_sym_let, - ACTIONS(210), 21, + ACTIONS(248), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7334,11 +7330,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6256] = 3, + [6252] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(262), 17, + ACTIONS(266), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7356,7 +7352,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(264), 21, + ACTIONS(268), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7378,11 +7374,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6303] = 3, + [6299] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(266), 17, + ACTIONS(270), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7400,7 +7396,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(268), 21, + ACTIONS(272), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7422,11 +7418,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6350] = 3, + [6346] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(270), 17, + ACTIONS(274), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7444,7 +7440,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(272), 21, + ACTIONS(276), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7466,11 +7462,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6397] = 3, + [6393] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 17, + ACTIONS(278), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7488,7 +7484,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(276), 21, + ACTIONS(280), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7510,11 +7506,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6444] = 3, + [6440] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(278), 17, + ACTIONS(204), 17, sym_identifier, sym_default, aux_sym_base_ten_token1, @@ -7532,7 +7528,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(280), 21, + ACTIONS(206), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7554,7 +7550,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6491] = 3, + [6487] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7598,7 +7594,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6538] = 3, + [6534] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7642,7 +7638,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6585] = 3, + [6581] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7686,7 +7682,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6632] = 3, + [6628] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7730,7 +7726,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6679] = 4, + [6675] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7773,17 +7769,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6726] = 6, + [6722] = 6, ACTIONS(298), 1, sym_identifier, ACTIONS(300), 1, sym_unit_quote, - STATE(131), 1, + STATE(125), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(180), 10, + ACTIONS(176), 10, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -7794,7 +7790,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(182), 21, + ACTIONS(178), 21, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -7816,13 +7812,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6775] = 4, + [6771] = 4, ACTIONS(302), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 11, + ACTIONS(170), 11, sym_identifier, anon_sym_STAR, anon_sym_SLASH, @@ -7834,7 +7830,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(176), 22, + ACTIONS(172), 22, ts_builtin_sym_end, sym_unit_quote, anon_sym_COLON, @@ -7857,32 +7853,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6820] = 5, - ACTIONS(304), 1, - anon_sym_DOT, - STATE(106), 1, - aux_sym_path_repeat1, + [6816] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 9, - anon_sym_DASH, + ACTIONS(151), 11, + sym_identifier, anon_sym_STAR, anon_sym_SLASH, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, + anon_sym_else, anon_sym_EQ, - ACTIONS(166), 22, + ACTIONS(153), 22, ts_builtin_sym_end, + sym_unit_quote, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -7891,39 +7886,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_DASH_GT, - [6866] = 5, - ACTIONS(306), 1, - anon_sym_DOT, - STATE(103), 1, - aux_sym_path_repeat1, + anon_sym_GT_GT_GT, + [6858] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 9, - anon_sym_DASH, + ACTIONS(222), 11, + sym_identifier, anon_sym_STAR, anon_sym_SLASH, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, + anon_sym_else, anon_sym_EQ, - ACTIONS(159), 22, + ACTIONS(224), 22, ts_builtin_sym_end, + sym_unit_quote, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -7932,38 +7925,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_DASH_GT, - [6912] = 3, + anon_sym_GT_GT_GT, + [6900] = 5, + ACTIONS(304), 1, + anon_sym_DOT, + STATE(104), 1, + aux_sym_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(226), 11, - sym_identifier, + ACTIONS(157), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_else, anon_sym_EQ, - ACTIONS(228), 22, + ACTIONS(159), 22, ts_builtin_sym_end, - sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -7972,37 +7965,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [6954] = 3, + [6945] = 5, + ACTIONS(307), 1, + anon_sym_DOT, + STATE(104), 1, + aux_sym_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(151), 11, - sym_identifier, + ACTIONS(182), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_else, anon_sym_EQ, - ACTIONS(153), 22, + ACTIONS(184), 22, ts_builtin_sym_end, - sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8011,22 +8005,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [6996] = 5, - ACTIONS(304), 1, + [6990] = 5, + ACTIONS(307), 1, anon_sym_DOT, - STATE(103), 1, + STATE(105), 1, aux_sym_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(170), 9, - anon_sym_DASH, + ACTIONS(164), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8035,9 +8028,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(172), 22, + ACTIONS(166), 22, ts_builtin_sym_end, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -8057,13 +8051,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_DASH_GT, - [7042] = 3, + [7035] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 10, - anon_sym_DOT, + ACTIONS(230), 9, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -8073,7 +8065,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(159), 22, + ACTIONS(232), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_PLUS, @@ -8096,14 +8088,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [7083] = 4, + [7075] = 6, ACTIONS(309), 1, - anon_sym_DASH_GT, + anon_sym_COLON, + ACTIONS(311), 1, + anon_sym_LPAREN, + STATE(135), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(198), 9, - anon_sym_DASH, + ACTIONS(186), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8112,9 +8107,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(200), 21, + ACTIONS(188), 20, ts_builtin_sym_end, - anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -8130,58 +8125,70 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7125] = 9, - ACTIONS(311), 1, + [7121] = 20, + ACTIONS(234), 1, + anon_sym_EQ, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, + anon_sym_AMP, + ACTIONS(325), 1, + anon_sym_PIPE, + ACTIONS(327), 1, + anon_sym_CARET, + ACTIONS(333), 1, + anon_sym_AMP_AMP, + ACTIONS(335), 1, + anon_sym_PIPE_PIPE, + ACTIONS(337), 1, + anon_sym_DOT_DOT, + ACTIONS(339), 1, + anon_sym_DOT_DOT_EQ, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(186), 6, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(188), 18, - ts_builtin_sym_end, + ACTIONS(313), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(317), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(321), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(329), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(236), 6, + ts_builtin_sym_end, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7177] = 6, - ACTIONS(311), 1, + [7195] = 7, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(319), 1, + ACTIONS(311), 1, anon_sym_LPAREN, + ACTIONS(315), 1, + anon_sym_STAR_STAR, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, @@ -8196,11 +8203,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(188), 20, + ACTIONS(188), 19, ts_builtin_sym_end, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -8217,26 +8223,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7223] = 3, + [7243] = 10, + ACTIONS(309), 1, + anon_sym_COLON, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, + anon_sym_STAR_STAR, + ACTIONS(319), 1, + anon_sym_SLASH_SLASH, + STATE(135), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(234), 9, + ACTIONS(313), 2, anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(186), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(236), 22, + ACTIONS(188), 16, ts_builtin_sym_end, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -8249,42 +8264,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_DASH_GT, - [7263] = 10, - ACTIONS(311), 1, + [7297] = 12, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, + anon_sym_AMP, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(186), 6, - anon_sym_AMP, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(186), 5, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(188), 16, + ACTIONS(188), 14, ts_builtin_sym_end, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8298,32 +8313,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7317] = 7, - ACTIONS(311), 1, + [7355] = 9, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, ACTIONS(319), 1, - anon_sym_LPAREN, + anon_sym_SLASH_SLASH, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 8, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(186), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(188), 19, + ACTIONS(188), 18, ts_builtin_sym_end, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -8339,87 +8356,96 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7365] = 14, - ACTIONS(311), 1, + [7407] = 20, + ACTIONS(238), 1, + anon_sym_EQ, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, + ACTIONS(333), 1, + anon_sym_AMP_AMP, + ACTIONS(335), 1, + anon_sym_PIPE_PIPE, + ACTIONS(337), 1, + anon_sym_DOT_DOT, + ACTIONS(339), 1, + anon_sym_DOT_DOT_EQ, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(186), 4, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(188), 13, - ts_builtin_sym_end, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(240), 6, + ts_builtin_sym_end, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7427] = 11, - ACTIONS(311), 1, + [7481] = 14, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, + anon_sym_AMP, + ACTIONS(325), 1, + anon_sym_PIPE, + ACTIONS(327), 1, + anon_sym_CARET, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(186), 6, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(186), 4, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(188), 14, + ACTIONS(188), 13, ts_builtin_sym_end, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8432,45 +8458,48 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7483] = 13, - ACTIONS(311), 1, + [7543] = 16, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(329), 1, + ACTIONS(325), 1, + anon_sym_PIPE, + ACTIONS(327), 1, anon_sym_CARET, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(186), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(186), 5, - anon_sym_PIPE, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(188), 13, - ts_builtin_sym_end, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(188), 9, + ts_builtin_sym_end, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, @@ -8479,48 +8508,43 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7543] = 16, - ACTIONS(311), 1, + [7609] = 11, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, - anon_sym_AMP, - ACTIONS(327), 1, - anon_sym_PIPE, - ACTIONS(329), 1, - anon_sym_CARET, + anon_sym_SLASH_SLASH, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(186), 6, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(188), 14, + ts_builtin_sym_end, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(188), 9, - ts_builtin_sym_end, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, @@ -8529,80 +8553,68 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7609] = 17, - ACTIONS(311), 1, - anon_sym_COLON, - ACTIONS(313), 1, - anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, - ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, - anon_sym_AMP, - ACTIONS(327), 1, - anon_sym_PIPE, - ACTIONS(329), 1, - anon_sym_CARET, - ACTIONS(335), 1, - anon_sym_AMP_AMP, - STATE(135), 1, - sym_dictionary_construction, + [7665] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(315), 2, + ACTIONS(157), 9, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(159), 22, + ts_builtin_sym_end, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(323), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(333), 4, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(188), 8, - ts_builtin_sym_end, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7677] = 12, - ACTIONS(311), 1, + [7705] = 13, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, + ACTIONS(327), 1, + anon_sym_CARET, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, ACTIONS(186), 5, @@ -8611,9 +8623,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(188), 14, + ACTIONS(188), 13, ts_builtin_sym_end, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8626,246 +8637,249 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7735] = 20, + [7765] = 20, ACTIONS(194), 1, anon_sym_EQ, - ACTIONS(311), 1, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(196), 6, + ACTIONS(202), 6, ts_builtin_sym_end, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7809] = 20, - ACTIONS(204), 1, - anon_sym_EQ, - ACTIONS(311), 1, - anon_sym_COLON, - ACTIONS(313), 1, - anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, - ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, - anon_sym_AMP, - ACTIONS(327), 1, - anon_sym_PIPE, - ACTIONS(329), 1, - anon_sym_CARET, - ACTIONS(335), 1, - anon_sym_AMP_AMP, - ACTIONS(337), 1, - anon_sym_PIPE_PIPE, - ACTIONS(339), 1, - anon_sym_DOT_DOT, + [7839] = 4, ACTIONS(341), 1, - anon_sym_DOT_DOT_EQ, - STATE(135), 1, - sym_dictionary_construction, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(196), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, - anon_sym_DASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(198), 21, + ts_builtin_sym_end, + anon_sym_COLON, anon_sym_PLUS, - ACTIONS(323), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(333), 4, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(206), 6, - ts_builtin_sym_end, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7883] = 20, - ACTIONS(238), 1, + [7881] = 4, + ACTIONS(208), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(204), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(311), 1, + ACTIONS(206), 21, + ts_builtin_sym_end, anon_sym_COLON, - ACTIONS(313), 1, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(317), 1, anon_sym_SLASH_SLASH, - ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, - anon_sym_AMP, - ACTIONS(327), 1, - anon_sym_PIPE, - ACTIONS(329), 1, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(335), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(337), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, - anon_sym_DOT_DOT, - ACTIONS(341), 1, anon_sym_DOT_DOT_EQ, - STATE(135), 1, - sym_dictionary_construction, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7923] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(214), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, - anon_sym_DASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(216), 22, + ts_builtin_sym_end, + anon_sym_COLON, anon_sym_PLUS, - ACTIONS(323), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(333), 4, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(240), 6, - ts_builtin_sym_end, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7957] = 20, - ACTIONS(214), 1, + anon_sym_DASH_GT, + [7963] = 20, + ACTIONS(210), 1, anon_sym_EQ, - ACTIONS(311), 1, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(216), 6, + ACTIONS(212), 6, ts_builtin_sym_end, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8031] = 4, - ACTIONS(212), 1, - anon_sym_DASH_GT, + [8037] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(208), 9, - anon_sym_DASH, + ACTIONS(282), 9, anon_sym_STAR, anon_sym_SLASH, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(210), 21, + ACTIONS(284), 22, ts_builtin_sym_end, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8880,61 +8894,76 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8073] = 3, + anon_sym_GT_GT_GT, + [8077] = 17, + ACTIONS(309), 1, + anon_sym_COLON, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, + anon_sym_STAR_STAR, + ACTIONS(319), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, + anon_sym_AMP, + ACTIONS(325), 1, + anon_sym_PIPE, + ACTIONS(327), 1, + anon_sym_CARET, + ACTIONS(333), 1, + anon_sym_AMP_AMP, + STATE(135), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(218), 9, - anon_sym_DASH, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, + ACTIONS(186), 2, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(220), 22, - ts_builtin_sym_end, - anon_sym_COLON, + ACTIONS(313), 2, + anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(317), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(321), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(329), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(188), 8, + ts_builtin_sym_end, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_DASH_GT, - [8113] = 18, - ACTIONS(311), 1, + [8145] = 18, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, STATE(135), 1, sym_dictionary_construction, @@ -8944,19 +8973,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(186), 2, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8969,11 +8998,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8183] = 3, + [8215] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(270), 9, + ACTIONS(274), 9, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -8983,7 +9012,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(272), 22, + ACTIONS(276), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9006,11 +9035,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [8223] = 3, + [8255] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(222), 9, + ACTIONS(218), 9, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -9020,7 +9049,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(224), 22, + ACTIONS(220), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_PLUS, @@ -9043,11 +9072,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [8263] = 3, + [8295] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(282), 9, + ACTIONS(266), 9, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -9057,7 +9086,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(284), 22, + ACTIONS(268), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9080,68 +9109,67 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [8303] = 20, - ACTIONS(230), 1, + [8335] = 20, + ACTIONS(226), 1, anon_sym_EQ, - ACTIONS(311), 1, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(232), 6, + ACTIONS(228), 6, ts_builtin_sym_end, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8377] = 3, + [8409] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(286), 9, + ACTIONS(286), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, @@ -9149,42 +9177,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_EQ, ACTIONS(288), 22, - ts_builtin_sym_end, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [8417] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(242), 8, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(244), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9207,7 +9199,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8456] = 3, + [8448] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9243,11 +9235,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8495] = 3, + [8487] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(278), 8, + ACTIONS(242), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9256,7 +9248,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(280), 22, + ACTIONS(244), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9279,11 +9271,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8534] = 3, + [8526] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(254), 8, + ACTIONS(246), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9292,7 +9284,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(256), 22, + ACTIONS(248), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9315,11 +9307,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8573] = 3, + [8565] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(266), 8, + ACTIONS(270), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9328,7 +9320,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(268), 22, + ACTIONS(272), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9351,11 +9343,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8612] = 3, + [8604] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(250), 8, + ACTIONS(258), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9364,7 +9356,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(252), 22, + ACTIONS(260), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9387,7 +9379,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8651] = 3, + [8643] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9423,11 +9415,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8690] = 3, + [8682] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(246), 8, + ACTIONS(254), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9436,7 +9428,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(248), 22, + ACTIONS(256), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9459,11 +9451,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8729] = 3, + [8721] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(262), 8, + ACTIONS(250), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9472,7 +9464,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(264), 22, + ACTIONS(252), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9495,11 +9487,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8768] = 3, + [8760] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(258), 8, + ACTIONS(262), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9508,7 +9500,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(260), 22, + ACTIONS(264), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9531,11 +9523,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8807] = 3, + [8799] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(208), 8, + ACTIONS(204), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9544,7 +9536,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(210), 22, + ACTIONS(206), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9567,11 +9559,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8846] = 3, + [8838] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(198), 8, + ACTIONS(196), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9580,7 +9572,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(200), 22, + ACTIONS(198), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9603,11 +9595,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8885] = 3, + [8877] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 8, + ACTIONS(278), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9616,7 +9608,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(276), 22, + ACTIONS(280), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9639,22 +9631,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8924] = 8, - ACTIONS(304), 1, + [8916] = 8, + ACTIONS(307), 1, anon_sym_DOT, ACTIONS(343), 1, anon_sym_COLON, ACTIONS(345), 1, anon_sym_EQ, - STATE(106), 1, + STATE(105), 1, aux_sym_path_repeat1, STATE(211), 1, sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 8, - anon_sym_DASH, + ACTIONS(164), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9663,6 +9654,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, ACTIONS(166), 16, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -9678,29 +9670,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_RPAREN, - anon_sym_DASH_GT, - [8972] = 20, - ACTIONS(311), 1, + [8963] = 20, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, ACTIONS(347), 1, anon_sym_EQ, @@ -9709,50 +9700,50 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, ACTIONS(349), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9042] = 20, - ACTIONS(123), 1, + [9033] = 20, + ACTIONS(79), 1, anon_sym_RBRACK, - ACTIONS(311), 1, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, ACTIONS(351), 1, anon_sym_COMMA, @@ -9761,93 +9752,93 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9111] = 19, - ACTIONS(311), 1, + [9102] = 19, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, ACTIONS(353), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9178] = 20, - ACTIONS(311), 1, + [9169] = 20, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, ACTIONS(351), 1, anon_sym_COMMA, @@ -9858,45 +9849,45 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9247] = 20, - ACTIONS(311), 1, + [9238] = 20, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, ACTIONS(351), 1, anon_sym_COMMA, @@ -9907,95 +9898,95 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9316] = 19, - ACTIONS(311), 1, + [9307] = 19, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, STATE(135), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, ACTIONS(359), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9383] = 20, - ACTIONS(127), 1, + [9374] = 20, + ACTIONS(83), 1, anon_sym_RBRACK, - ACTIONS(311), 1, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, ACTIONS(351), 1, anon_sym_COMMA, @@ -10004,45 +9995,45 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9452] = 19, - ACTIONS(311), 1, + [9443] = 19, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, ACTIONS(361), 1, anon_sym_else, @@ -10051,45 +10042,45 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9518] = 19, - ACTIONS(311), 1, + [9509] = 19, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, ACTIONS(363), 1, anon_sym_RPAREN, @@ -10098,45 +10089,45 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9584] = 19, - ACTIONS(311), 1, + [9575] = 19, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, ACTIONS(351), 1, anon_sym_COMMA, @@ -10145,45 +10136,45 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9650] = 19, - ACTIONS(311), 1, + [9641] = 19, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, ACTIONS(365), 1, anon_sym_RPAREN, @@ -10192,45 +10183,45 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9716] = 19, - ACTIONS(311), 1, + [9707] = 19, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, ACTIONS(367), 1, anon_sym_SEMI, @@ -10239,45 +10230,45 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9782] = 19, - ACTIONS(311), 1, + [9773] = 19, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, ACTIONS(369), 1, ts_builtin_sym_end, @@ -10286,45 +10277,45 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9848] = 19, - ACTIONS(311), 1, + [9839] = 19, + ACTIONS(309), 1, anon_sym_COLON, - ACTIONS(313), 1, + ACTIONS(311), 1, + anon_sym_LPAREN, + ACTIONS(315), 1, anon_sym_STAR_STAR, - ACTIONS(317), 1, - anon_sym_SLASH_SLASH, ACTIONS(319), 1, - anon_sym_LPAREN, - ACTIONS(325), 1, + anon_sym_SLASH_SLASH, + ACTIONS(323), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(325), 1, anon_sym_PIPE, - ACTIONS(329), 1, + ACTIONS(327), 1, anon_sym_CARET, - ACTIONS(335), 1, + ACTIONS(333), 1, anon_sym_AMP_AMP, - ACTIONS(337), 1, + ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(339), 1, + ACTIONS(337), 1, anon_sym_DOT_DOT, - ACTIONS(341), 1, + ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, ACTIONS(371), 1, anon_sym_else, @@ -10333,24 +10324,24 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 2, + ACTIONS(313), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, ACTIONS(321), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(323), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(331), 2, + ACTIONS(329), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(333), 4, + ACTIONS(331), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9914] = 14, + [9905] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10389,7 +10380,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [9967] = 14, + [9958] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10428,7 +10419,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10020] = 14, + [10011] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10467,7 +10458,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10073] = 14, + [10064] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -10506,7 +10497,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10126] = 14, + [10117] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -10545,7 +10536,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10179] = 14, + [10170] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -10584,7 +10575,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10232] = 14, + [10223] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10623,7 +10614,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10285] = 14, + [10276] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -10662,7 +10653,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10338] = 14, + [10329] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -10701,7 +10692,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10391] = 14, + [10382] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10740,7 +10731,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10444] = 14, + [10435] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10779,7 +10770,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10497] = 14, + [10488] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10818,7 +10809,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10550] = 14, + [10541] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -10857,7 +10848,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10603] = 3, + [10594] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10869,7 +10860,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(116), 11, + ACTIONS(124), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -10881,7 +10872,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LT_LT_LT, - [10630] = 3, + [10621] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10893,7 +10884,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(212), 10, + ACTIONS(208), 10, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -10904,7 +10895,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [10656] = 4, + [10647] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10927,17 +10918,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10683] = 4, + [10674] = 4, ACTIONS(387), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 3, + ACTIONS(170), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(176), 10, + ACTIONS(172), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -10948,7 +10939,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10708] = 5, + [10699] = 5, STATE(185), 1, sym__unit, ACTIONS(3), 2, @@ -10957,11 +10948,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(389), 2, sym_identifier, sym_unit_quote, - ACTIONS(180), 3, + ACTIONS(176), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(182), 8, + ACTIONS(178), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10970,7 +10961,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10735] = 3, + [10726] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10989,15 +10980,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10757] = 3, + [10748] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(226), 3, + ACTIONS(222), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(228), 10, + ACTIONS(224), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -11008,7 +10999,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10779] = 3, + [10770] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11027,7 +11018,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [10801] = 3, + [10792] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11046,7 +11037,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [10823] = 3, + [10814] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11065,15 +11056,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [10845] = 3, + [10836] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(282), 3, + ACTIONS(266), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(284), 8, + ACTIONS(268), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11082,7 +11073,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10865] = 4, + [10856] = 4, ACTIONS(403), 1, anon_sym_STAR_STAR, ACTIONS(3), 2, @@ -11100,15 +11091,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10887] = 3, + [10878] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(286), 3, + ACTIONS(282), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(288), 8, + ACTIONS(284), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11117,7 +11108,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10907] = 7, + [10898] = 7, ACTIONS(403), 1, anon_sym_STAR_STAR, ACTIONS(407), 1, @@ -11138,7 +11129,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10935] = 6, + [10926] = 6, ACTIONS(403), 1, anon_sym_STAR_STAR, ACTIONS(407), 1, @@ -11158,7 +11149,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10961] = 7, + [10952] = 7, ACTIONS(403), 1, anon_sym_STAR_STAR, ACTIONS(407), 1, @@ -11179,7 +11170,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10989] = 7, + [10980] = 7, ACTIONS(403), 1, anon_sym_STAR_STAR, ACTIONS(407), 1, @@ -11200,15 +11191,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11017] = 3, + [11008] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(270), 3, + ACTIONS(274), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(272), 8, + ACTIONS(276), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11217,7 +11208,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11037] = 5, + [11028] = 5, ACTIONS(423), 1, anon_sym_STAR_STAR, ACTIONS(425), 1, @@ -11232,7 +11223,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [11057] = 6, + [11048] = 6, ACTIONS(423), 1, anon_sym_STAR_STAR, ACTIONS(425), 1, @@ -11248,7 +11239,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(429), 2, anon_sym_DASH, anon_sym_PLUS, - [11079] = 4, + [11070] = 4, ACTIONS(393), 1, anon_sym_STAR, ACTIONS(423), 1, @@ -11262,7 +11253,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SLASH, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [11097] = 6, + [11088] = 6, ACTIONS(423), 1, anon_sym_STAR_STAR, ACTIONS(425), 1, @@ -11277,7 +11268,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(429), 2, anon_sym_DASH, anon_sym_PLUS, - [11118] = 6, + [11109] = 6, ACTIONS(423), 1, anon_sym_STAR_STAR, ACTIONS(425), 1, @@ -11292,7 +11283,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(429), 2, anon_sym_DASH, anon_sym_PLUS, - [11139] = 7, + [11130] = 7, ACTIONS(73), 1, sym_varadic_dots, ACTIONS(435), 1, @@ -11308,7 +11299,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11162] = 7, + [11153] = 7, ACTIONS(73), 1, sym_varadic_dots, ACTIONS(435), 1, @@ -11324,7 +11315,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11185] = 7, + [11176] = 7, ACTIONS(73), 1, sym_varadic_dots, ACTIONS(435), 1, @@ -11340,7 +11331,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11208] = 6, + [11199] = 6, ACTIONS(423), 1, anon_sym_STAR_STAR, ACTIONS(425), 1, @@ -11355,7 +11346,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(429), 2, anon_sym_DASH, anon_sym_PLUS, - [11229] = 5, + [11220] = 5, ACTIONS(445), 1, sym_identifier, STATE(200), 1, @@ -11368,7 +11359,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(448), 2, anon_sym_RPAREN, sym_varadic_dots, - [11247] = 4, + [11238] = 4, ACTIONS(450), 1, sym_identifier, ACTIONS(453), 1, @@ -11379,7 +11370,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(201), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11262] = 4, + [11253] = 4, ACTIONS(455), 1, sym_identifier, ACTIONS(457), 1, @@ -11390,7 +11381,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(201), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11277] = 4, + [11268] = 4, ACTIONS(455), 1, sym_identifier, ACTIONS(459), 1, @@ -11401,7 +11392,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(204), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11292] = 4, + [11283] = 4, ACTIONS(455), 1, sym_identifier, ACTIONS(461), 1, @@ -11412,7 +11403,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(201), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11307] = 4, + [11298] = 4, ACTIONS(455), 1, sym_identifier, ACTIONS(463), 1, @@ -11423,7 +11414,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(202), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11322] = 4, + [11313] = 4, ACTIONS(465), 1, sym_identifier, ACTIONS(467), 1, @@ -11434,7 +11425,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(44), 2, sym_path, sym_struct_definition, - [11337] = 4, + [11328] = 4, ACTIONS(465), 1, sym_identifier, ACTIONS(467), 1, @@ -11442,10 +11433,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(23), 2, + STATE(24), 2, sym_path, sym_struct_definition, - [11352] = 4, + [11343] = 4, ACTIONS(469), 1, anon_sym_RPAREN, ACTIONS(471), 1, @@ -11455,7 +11446,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11366] = 4, + [11357] = 4, ACTIONS(474), 1, sym_identifier, ACTIONS(476), 1, @@ -11465,7 +11456,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11380] = 4, + [11371] = 4, ACTIONS(478), 1, anon_sym_RPAREN, ACTIONS(480), 1, @@ -11475,7 +11466,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11394] = 3, + [11385] = 3, ACTIONS(482), 1, anon_sym_EQ, ACTIONS(3), 2, @@ -11484,7 +11475,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(484), 2, anon_sym_RPAREN, anon_sym_COMMA, - [11406] = 4, + [11397] = 4, ACTIONS(486), 1, anon_sym_RPAREN, ACTIONS(488), 1, @@ -11494,7 +11485,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11420] = 4, + [11411] = 4, ACTIONS(474), 1, sym_identifier, ACTIONS(490), 1, @@ -11504,7 +11495,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11434] = 4, + [11425] = 4, ACTIONS(474), 1, sym_identifier, ACTIONS(492), 1, @@ -11514,7 +11505,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11448] = 4, + [11439] = 4, ACTIONS(474), 1, sym_identifier, ACTIONS(494), 1, @@ -11524,7 +11515,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11462] = 4, + [11453] = 4, ACTIONS(494), 1, anon_sym_RPAREN, ACTIONS(496), 1, @@ -11534,7 +11525,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11476] = 2, + [11467] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11542,7 +11533,7 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, anon_sym_RPAREN, sym_varadic_dots, - [11486] = 4, + [11477] = 4, ACTIONS(474), 1, sym_identifier, ACTIONS(498), 1, @@ -11552,7 +11543,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11500] = 4, + [11491] = 4, ACTIONS(474), 1, sym_identifier, ACTIONS(500), 1, @@ -11562,7 +11553,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11514] = 4, + [11505] = 4, ACTIONS(500), 1, anon_sym_RPAREN, ACTIONS(502), 1, @@ -11572,7 +11563,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11528] = 3, + [11519] = 3, ACTIONS(343), 1, anon_sym_COLON, STATE(211), 1, @@ -11580,28 +11571,28 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11539] = 2, + [11530] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(469), 2, anon_sym_RPAREN, anon_sym_COMMA, - [11548] = 2, + [11539] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(504), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [11557] = 2, + [11548] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(506), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [11566] = 3, + [11557] = 3, ACTIONS(508), 1, anon_sym_RPAREN, ACTIONS(510), 1, @@ -11609,28 +11600,28 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11577] = 2, + [11568] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(512), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [11586] = 2, + [11577] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(514), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [11595] = 2, + [11586] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(516), 2, sym_identifier, anon_sym_in, - [11604] = 3, + [11595] = 3, ACTIONS(518), 1, aux_sym_signed_integer_token1, ACTIONS(520), 1, @@ -11638,15 +11629,15 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11615] = 3, - ACTIONS(319), 1, + [11606] = 3, + ACTIONS(311), 1, anon_sym_LPAREN, STATE(134), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11626] = 3, + [11617] = 3, ACTIONS(522), 1, aux_sym_base_ten_token1, STATE(67), 1, @@ -11654,7 +11645,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11637] = 3, + [11628] = 3, ACTIONS(474), 1, sym_identifier, STATE(222), 1, @@ -11662,7 +11653,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11648] = 3, + [11639] = 3, ACTIONS(508), 1, anon_sym_RPAREN, ACTIONS(524), 1, @@ -11670,7 +11661,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11659] = 3, + [11650] = 3, ACTIONS(526), 1, aux_sym_signed_integer_token1, ACTIONS(528), 1, @@ -11678,7 +11669,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11670] = 3, + [11661] = 3, ACTIONS(530), 1, aux_sym_signed_integer_token1, ACTIONS(532), 1, @@ -11686,15 +11677,15 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11681] = 3, + [11672] = 3, ACTIONS(192), 1, anon_sym_LPAREN, - STATE(94), 1, + STATE(82), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11692] = 3, + [11683] = 3, ACTIONS(534), 1, aux_sym_base_ten_token1, STATE(179), 1, @@ -11702,105 +11693,105 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11703] = 3, + [11694] = 3, ACTIONS(536), 1, aux_sym_base_ten_token1, - STATE(104), 1, + STATE(103), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11714] = 2, + [11705] = 2, ACTIONS(538), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11722] = 2, + [11713] = 2, ACTIONS(540), 1, aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11730] = 2, + [11721] = 2, ACTIONS(542), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11738] = 2, + [11729] = 2, ACTIONS(544), 1, aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11746] = 2, + [11737] = 2, ACTIONS(546), 1, ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11754] = 2, + [11745] = 2, ACTIONS(548), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11762] = 2, + [11753] = 2, ACTIONS(510), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11770] = 2, + [11761] = 2, ACTIONS(550), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11778] = 2, + [11769] = 2, ACTIONS(552), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11786] = 2, + [11777] = 2, ACTIONS(554), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11794] = 2, + [11785] = 2, ACTIONS(556), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11802] = 2, + [11793] = 2, ACTIONS(558), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11810] = 2, + [11801] = 2, ACTIONS(560), 1, aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11818] = 2, + [11809] = 2, ACTIONS(562), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11826] = 2, + [11817] = 2, ACTIONS(564), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11834] = 2, + [11825] = 2, ACTIONS(566), 1, anon_sym_RPAREN, ACTIONS(3), 2, @@ -11830,7 +11821,7 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(25)] = 1632, [SMALL_STATE(26)] = 1721, [SMALL_STATE(27)] = 1810, - [SMALL_STATE(28)] = 1863, + [SMALL_STATE(28)] = 1899, [SMALL_STATE(29)] = 1952, [SMALL_STATE(30)] = 2041, [SMALL_STATE(31)] = 2130, @@ -11855,215 +11846,215 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(50)] = 3821, [SMALL_STATE(51)] = 3910, [SMALL_STATE(52)] = 3999, - [SMALL_STATE(53)] = 4053, - [SMALL_STATE(54)] = 4107, - [SMALL_STATE(55)] = 4161, - [SMALL_STATE(56)] = 4212, - [SMALL_STATE(57)] = 4265, - [SMALL_STATE(58)] = 4314, - [SMALL_STATE(59)] = 4392, - [SMALL_STATE(60)] = 4476, - [SMALL_STATE(61)] = 4526, - [SMALL_STATE(62)] = 4610, - [SMALL_STATE(63)] = 4660, - [SMALL_STATE(64)] = 4744, - [SMALL_STATE(65)] = 4792, - [SMALL_STATE(66)] = 4840, - [SMALL_STATE(67)] = 4888, - [SMALL_STATE(68)] = 4936, - [SMALL_STATE(69)] = 4996, - [SMALL_STATE(70)] = 5050, - [SMALL_STATE(71)] = 5106, - [SMALL_STATE(72)] = 5168, - [SMALL_STATE(73)] = 5234, - [SMALL_STATE(74)] = 5304, - [SMALL_STATE(75)] = 5372, - [SMALL_STATE(76)] = 5444, - [SMALL_STATE(77)] = 5520, - [SMALL_STATE(78)] = 5600, - [SMALL_STATE(79)] = 5684, - [SMALL_STATE(80)] = 5746, - [SMALL_STATE(81)] = 5794, - [SMALL_STATE(82)] = 5878, - [SMALL_STATE(83)] = 5925, - [SMALL_STATE(84)] = 5972, - [SMALL_STATE(85)] = 6019, - [SMALL_STATE(86)] = 6066, - [SMALL_STATE(87)] = 6113, - [SMALL_STATE(88)] = 6162, - [SMALL_STATE(89)] = 6209, - [SMALL_STATE(90)] = 6256, - [SMALL_STATE(91)] = 6303, - [SMALL_STATE(92)] = 6350, - [SMALL_STATE(93)] = 6397, - [SMALL_STATE(94)] = 6444, - [SMALL_STATE(95)] = 6491, - [SMALL_STATE(96)] = 6538, - [SMALL_STATE(97)] = 6585, - [SMALL_STATE(98)] = 6632, - [SMALL_STATE(99)] = 6679, - [SMALL_STATE(100)] = 6726, - [SMALL_STATE(101)] = 6775, - [SMALL_STATE(102)] = 6820, - [SMALL_STATE(103)] = 6866, - [SMALL_STATE(104)] = 6912, - [SMALL_STATE(105)] = 6954, - [SMALL_STATE(106)] = 6996, - [SMALL_STATE(107)] = 7042, - [SMALL_STATE(108)] = 7083, - [SMALL_STATE(109)] = 7125, - [SMALL_STATE(110)] = 7177, - [SMALL_STATE(111)] = 7223, - [SMALL_STATE(112)] = 7263, - [SMALL_STATE(113)] = 7317, - [SMALL_STATE(114)] = 7365, - [SMALL_STATE(115)] = 7427, - [SMALL_STATE(116)] = 7483, - [SMALL_STATE(117)] = 7543, - [SMALL_STATE(118)] = 7609, - [SMALL_STATE(119)] = 7677, - [SMALL_STATE(120)] = 7735, - [SMALL_STATE(121)] = 7809, - [SMALL_STATE(122)] = 7883, - [SMALL_STATE(123)] = 7957, - [SMALL_STATE(124)] = 8031, - [SMALL_STATE(125)] = 8073, - [SMALL_STATE(126)] = 8113, - [SMALL_STATE(127)] = 8183, - [SMALL_STATE(128)] = 8223, - [SMALL_STATE(129)] = 8263, - [SMALL_STATE(130)] = 8303, - [SMALL_STATE(131)] = 8377, - [SMALL_STATE(132)] = 8417, - [SMALL_STATE(133)] = 8456, - [SMALL_STATE(134)] = 8495, - [SMALL_STATE(135)] = 8534, - [SMALL_STATE(136)] = 8573, - [SMALL_STATE(137)] = 8612, - [SMALL_STATE(138)] = 8651, - [SMALL_STATE(139)] = 8690, - [SMALL_STATE(140)] = 8729, - [SMALL_STATE(141)] = 8768, - [SMALL_STATE(142)] = 8807, - [SMALL_STATE(143)] = 8846, - [SMALL_STATE(144)] = 8885, - [SMALL_STATE(145)] = 8924, - [SMALL_STATE(146)] = 8972, - [SMALL_STATE(147)] = 9042, - [SMALL_STATE(148)] = 9111, - [SMALL_STATE(149)] = 9178, - [SMALL_STATE(150)] = 9247, - [SMALL_STATE(151)] = 9316, - [SMALL_STATE(152)] = 9383, - [SMALL_STATE(153)] = 9452, - [SMALL_STATE(154)] = 9518, - [SMALL_STATE(155)] = 9584, - [SMALL_STATE(156)] = 9650, - [SMALL_STATE(157)] = 9716, - [SMALL_STATE(158)] = 9782, - [SMALL_STATE(159)] = 9848, - [SMALL_STATE(160)] = 9914, - [SMALL_STATE(161)] = 9967, - [SMALL_STATE(162)] = 10020, - [SMALL_STATE(163)] = 10073, - [SMALL_STATE(164)] = 10126, - [SMALL_STATE(165)] = 10179, - [SMALL_STATE(166)] = 10232, - [SMALL_STATE(167)] = 10285, - [SMALL_STATE(168)] = 10338, - [SMALL_STATE(169)] = 10391, - [SMALL_STATE(170)] = 10444, - [SMALL_STATE(171)] = 10497, - [SMALL_STATE(172)] = 10550, - [SMALL_STATE(173)] = 10603, - [SMALL_STATE(174)] = 10630, - [SMALL_STATE(175)] = 10656, - [SMALL_STATE(176)] = 10683, - [SMALL_STATE(177)] = 10708, - [SMALL_STATE(178)] = 10735, - [SMALL_STATE(179)] = 10757, - [SMALL_STATE(180)] = 10779, - [SMALL_STATE(181)] = 10801, - [SMALL_STATE(182)] = 10823, - [SMALL_STATE(183)] = 10845, - [SMALL_STATE(184)] = 10865, - [SMALL_STATE(185)] = 10887, - [SMALL_STATE(186)] = 10907, - [SMALL_STATE(187)] = 10935, - [SMALL_STATE(188)] = 10961, - [SMALL_STATE(189)] = 10989, - [SMALL_STATE(190)] = 11017, - [SMALL_STATE(191)] = 11037, - [SMALL_STATE(192)] = 11057, - [SMALL_STATE(193)] = 11079, - [SMALL_STATE(194)] = 11097, - [SMALL_STATE(195)] = 11118, - [SMALL_STATE(196)] = 11139, - [SMALL_STATE(197)] = 11162, - [SMALL_STATE(198)] = 11185, - [SMALL_STATE(199)] = 11208, - [SMALL_STATE(200)] = 11229, - [SMALL_STATE(201)] = 11247, - [SMALL_STATE(202)] = 11262, - [SMALL_STATE(203)] = 11277, - [SMALL_STATE(204)] = 11292, - [SMALL_STATE(205)] = 11307, - [SMALL_STATE(206)] = 11322, - [SMALL_STATE(207)] = 11337, - [SMALL_STATE(208)] = 11352, - [SMALL_STATE(209)] = 11366, - [SMALL_STATE(210)] = 11380, - [SMALL_STATE(211)] = 11394, - [SMALL_STATE(212)] = 11406, - [SMALL_STATE(213)] = 11420, - [SMALL_STATE(214)] = 11434, - [SMALL_STATE(215)] = 11448, - [SMALL_STATE(216)] = 11462, - [SMALL_STATE(217)] = 11476, - [SMALL_STATE(218)] = 11486, - [SMALL_STATE(219)] = 11500, - [SMALL_STATE(220)] = 11514, - [SMALL_STATE(221)] = 11528, - [SMALL_STATE(222)] = 11539, - [SMALL_STATE(223)] = 11548, - [SMALL_STATE(224)] = 11557, - [SMALL_STATE(225)] = 11566, - [SMALL_STATE(226)] = 11577, - [SMALL_STATE(227)] = 11586, - [SMALL_STATE(228)] = 11595, - [SMALL_STATE(229)] = 11604, - [SMALL_STATE(230)] = 11615, - [SMALL_STATE(231)] = 11626, - [SMALL_STATE(232)] = 11637, - [SMALL_STATE(233)] = 11648, - [SMALL_STATE(234)] = 11659, - [SMALL_STATE(235)] = 11670, - [SMALL_STATE(236)] = 11681, - [SMALL_STATE(237)] = 11692, - [SMALL_STATE(238)] = 11703, - [SMALL_STATE(239)] = 11714, - [SMALL_STATE(240)] = 11722, - [SMALL_STATE(241)] = 11730, - [SMALL_STATE(242)] = 11738, - [SMALL_STATE(243)] = 11746, - [SMALL_STATE(244)] = 11754, - [SMALL_STATE(245)] = 11762, - [SMALL_STATE(246)] = 11770, - [SMALL_STATE(247)] = 11778, - [SMALL_STATE(248)] = 11786, - [SMALL_STATE(249)] = 11794, - [SMALL_STATE(250)] = 11802, - [SMALL_STATE(251)] = 11810, - [SMALL_STATE(252)] = 11818, - [SMALL_STATE(253)] = 11826, - [SMALL_STATE(254)] = 11834, + [SMALL_STATE(53)] = 4052, + [SMALL_STATE(54)] = 4105, + [SMALL_STATE(55)] = 4156, + [SMALL_STATE(56)] = 4209, + [SMALL_STATE(57)] = 4262, + [SMALL_STATE(58)] = 4340, + [SMALL_STATE(59)] = 4402, + [SMALL_STATE(60)] = 4452, + [SMALL_STATE(61)] = 4536, + [SMALL_STATE(62)] = 4586, + [SMALL_STATE(63)] = 4634, + [SMALL_STATE(64)] = 4718, + [SMALL_STATE(65)] = 4766, + [SMALL_STATE(66)] = 4814, + [SMALL_STATE(67)] = 4862, + [SMALL_STATE(68)] = 4910, + [SMALL_STATE(69)] = 4970, + [SMALL_STATE(70)] = 5024, + [SMALL_STATE(71)] = 5080, + [SMALL_STATE(72)] = 5142, + [SMALL_STATE(73)] = 5208, + [SMALL_STATE(74)] = 5278, + [SMALL_STATE(75)] = 5346, + [SMALL_STATE(76)] = 5418, + [SMALL_STATE(77)] = 5494, + [SMALL_STATE(78)] = 5574, + [SMALL_STATE(79)] = 5658, + [SMALL_STATE(80)] = 5706, + [SMALL_STATE(81)] = 5790, + [SMALL_STATE(82)] = 5874, + [SMALL_STATE(83)] = 5921, + [SMALL_STATE(84)] = 5968, + [SMALL_STATE(85)] = 6015, + [SMALL_STATE(86)] = 6062, + [SMALL_STATE(87)] = 6109, + [SMALL_STATE(88)] = 6156, + [SMALL_STATE(89)] = 6203, + [SMALL_STATE(90)] = 6252, + [SMALL_STATE(91)] = 6299, + [SMALL_STATE(92)] = 6346, + [SMALL_STATE(93)] = 6393, + [SMALL_STATE(94)] = 6440, + [SMALL_STATE(95)] = 6487, + [SMALL_STATE(96)] = 6534, + [SMALL_STATE(97)] = 6581, + [SMALL_STATE(98)] = 6628, + [SMALL_STATE(99)] = 6675, + [SMALL_STATE(100)] = 6722, + [SMALL_STATE(101)] = 6771, + [SMALL_STATE(102)] = 6816, + [SMALL_STATE(103)] = 6858, + [SMALL_STATE(104)] = 6900, + [SMALL_STATE(105)] = 6945, + [SMALL_STATE(106)] = 6990, + [SMALL_STATE(107)] = 7035, + [SMALL_STATE(108)] = 7075, + [SMALL_STATE(109)] = 7121, + [SMALL_STATE(110)] = 7195, + [SMALL_STATE(111)] = 7243, + [SMALL_STATE(112)] = 7297, + [SMALL_STATE(113)] = 7355, + [SMALL_STATE(114)] = 7407, + [SMALL_STATE(115)] = 7481, + [SMALL_STATE(116)] = 7543, + [SMALL_STATE(117)] = 7609, + [SMALL_STATE(118)] = 7665, + [SMALL_STATE(119)] = 7705, + [SMALL_STATE(120)] = 7765, + [SMALL_STATE(121)] = 7839, + [SMALL_STATE(122)] = 7881, + [SMALL_STATE(123)] = 7923, + [SMALL_STATE(124)] = 7963, + [SMALL_STATE(125)] = 8037, + [SMALL_STATE(126)] = 8077, + [SMALL_STATE(127)] = 8145, + [SMALL_STATE(128)] = 8215, + [SMALL_STATE(129)] = 8255, + [SMALL_STATE(130)] = 8295, + [SMALL_STATE(131)] = 8335, + [SMALL_STATE(132)] = 8409, + [SMALL_STATE(133)] = 8448, + [SMALL_STATE(134)] = 8487, + [SMALL_STATE(135)] = 8526, + [SMALL_STATE(136)] = 8565, + [SMALL_STATE(137)] = 8604, + [SMALL_STATE(138)] = 8643, + [SMALL_STATE(139)] = 8682, + [SMALL_STATE(140)] = 8721, + [SMALL_STATE(141)] = 8760, + [SMALL_STATE(142)] = 8799, + [SMALL_STATE(143)] = 8838, + [SMALL_STATE(144)] = 8877, + [SMALL_STATE(145)] = 8916, + [SMALL_STATE(146)] = 8963, + [SMALL_STATE(147)] = 9033, + [SMALL_STATE(148)] = 9102, + [SMALL_STATE(149)] = 9169, + [SMALL_STATE(150)] = 9238, + [SMALL_STATE(151)] = 9307, + [SMALL_STATE(152)] = 9374, + [SMALL_STATE(153)] = 9443, + [SMALL_STATE(154)] = 9509, + [SMALL_STATE(155)] = 9575, + [SMALL_STATE(156)] = 9641, + [SMALL_STATE(157)] = 9707, + [SMALL_STATE(158)] = 9773, + [SMALL_STATE(159)] = 9839, + [SMALL_STATE(160)] = 9905, + [SMALL_STATE(161)] = 9958, + [SMALL_STATE(162)] = 10011, + [SMALL_STATE(163)] = 10064, + [SMALL_STATE(164)] = 10117, + [SMALL_STATE(165)] = 10170, + [SMALL_STATE(166)] = 10223, + [SMALL_STATE(167)] = 10276, + [SMALL_STATE(168)] = 10329, + [SMALL_STATE(169)] = 10382, + [SMALL_STATE(170)] = 10435, + [SMALL_STATE(171)] = 10488, + [SMALL_STATE(172)] = 10541, + [SMALL_STATE(173)] = 10594, + [SMALL_STATE(174)] = 10621, + [SMALL_STATE(175)] = 10647, + [SMALL_STATE(176)] = 10674, + [SMALL_STATE(177)] = 10699, + [SMALL_STATE(178)] = 10726, + [SMALL_STATE(179)] = 10748, + [SMALL_STATE(180)] = 10770, + [SMALL_STATE(181)] = 10792, + [SMALL_STATE(182)] = 10814, + [SMALL_STATE(183)] = 10836, + [SMALL_STATE(184)] = 10856, + [SMALL_STATE(185)] = 10878, + [SMALL_STATE(186)] = 10898, + [SMALL_STATE(187)] = 10926, + [SMALL_STATE(188)] = 10952, + [SMALL_STATE(189)] = 10980, + [SMALL_STATE(190)] = 11008, + [SMALL_STATE(191)] = 11028, + [SMALL_STATE(192)] = 11048, + [SMALL_STATE(193)] = 11070, + [SMALL_STATE(194)] = 11088, + [SMALL_STATE(195)] = 11109, + [SMALL_STATE(196)] = 11130, + [SMALL_STATE(197)] = 11153, + [SMALL_STATE(198)] = 11176, + [SMALL_STATE(199)] = 11199, + [SMALL_STATE(200)] = 11220, + [SMALL_STATE(201)] = 11238, + [SMALL_STATE(202)] = 11253, + [SMALL_STATE(203)] = 11268, + [SMALL_STATE(204)] = 11283, + [SMALL_STATE(205)] = 11298, + [SMALL_STATE(206)] = 11313, + [SMALL_STATE(207)] = 11328, + [SMALL_STATE(208)] = 11343, + [SMALL_STATE(209)] = 11357, + [SMALL_STATE(210)] = 11371, + [SMALL_STATE(211)] = 11385, + [SMALL_STATE(212)] = 11397, + [SMALL_STATE(213)] = 11411, + [SMALL_STATE(214)] = 11425, + [SMALL_STATE(215)] = 11439, + [SMALL_STATE(216)] = 11453, + [SMALL_STATE(217)] = 11467, + [SMALL_STATE(218)] = 11477, + [SMALL_STATE(219)] = 11491, + [SMALL_STATE(220)] = 11505, + [SMALL_STATE(221)] = 11519, + [SMALL_STATE(222)] = 11530, + [SMALL_STATE(223)] = 11539, + [SMALL_STATE(224)] = 11548, + [SMALL_STATE(225)] = 11557, + [SMALL_STATE(226)] = 11568, + [SMALL_STATE(227)] = 11577, + [SMALL_STATE(228)] = 11586, + [SMALL_STATE(229)] = 11595, + [SMALL_STATE(230)] = 11606, + [SMALL_STATE(231)] = 11617, + [SMALL_STATE(232)] = 11628, + [SMALL_STATE(233)] = 11639, + [SMALL_STATE(234)] = 11650, + [SMALL_STATE(235)] = 11661, + [SMALL_STATE(236)] = 11672, + [SMALL_STATE(237)] = 11683, + [SMALL_STATE(238)] = 11694, + [SMALL_STATE(239)] = 11705, + [SMALL_STATE(240)] = 11713, + [SMALL_STATE(241)] = 11721, + [SMALL_STATE(242)] = 11729, + [SMALL_STATE(243)] = 11737, + [SMALL_STATE(244)] = 11745, + [SMALL_STATE(245)] = 11753, + [SMALL_STATE(246)] = 11761, + [SMALL_STATE(247)] = 11769, + [SMALL_STATE(248)] = 11777, + [SMALL_STATE(249)] = 11785, + [SMALL_STATE(250)] = 11793, + [SMALL_STATE(251)] = 11801, + [SMALL_STATE(252)] = 11809, + [SMALL_STATE(253)] = 11817, + [SMALL_STATE(254)] = 11825, }; 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 = false}}, SHIFT(102), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(106), [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(99), @@ -12071,63 +12062,63 @@ static const TSParseActionEntry ts_parse_actions[] = { [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251), [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(141), - [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), - [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(205), [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), - [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), - [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), - [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(33), - [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(34), - [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), - [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(37), - [57] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), - [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), - [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), + [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(33), + [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(34), + [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), + [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36), + [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38), + [57] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), + [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(145), - [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), - [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), - [77] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(102), - [80] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(143), - [83] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(143), - [86] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(99), - [89] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(242), - [92] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(251), - [95] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(240), - [98] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(141), - [101] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(41), - [104] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(26), - [107] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(205), - [110] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(5), - [113] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(8), - [116] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [118] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(167), - [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), - [123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), - [127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [77] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [79] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [81] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [83] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [85] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(106), + [88] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(143), + [91] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(143), + [94] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(99), + [97] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(242), + [100] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(251), + [103] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(240), + [106] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(141), + [109] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(25), + [112] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(27), + [115] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(205), + [118] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(5), + [121] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(7), + [124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [126] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(167), [129] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), - [131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(83), - [135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), + [131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(85), + [135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), [137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88), - [139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), + [139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), [143] = {.entry = {.count = 1, .reusable = false}}, SHIFT(203), - [145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), [149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), [151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), @@ -12138,94 +12129,94 @@ static const TSParseActionEntry ts_parse_actions[] = { [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), [168] = {.entry = {.count = 1, .reusable = false}}, SHIFT(249), - [170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), - [172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), - [174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [178] = {.entry = {.count = 1, .reusable = false}}, SHIFT(231), - [180] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [182] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [174] = {.entry = {.count = 1, .reusable = false}}, SHIFT(231), + [176] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [180] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), + [184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 13), [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 13), - [190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), [192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), - [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 20), - [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 20), - [198] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [202] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), - [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), - [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), - [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [210] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), - [214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 7), - [216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 7), - [218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), - [220] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), - [222] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 11), - [224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 11), - [226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), - [228] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), - [230] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 14), - [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 14), - [234] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 17), - [236] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 17), - [238] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 19), - [240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 19), - [242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 16), - [244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 16), - [246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 10), - [248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 10), - [250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [254] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), - [256] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), - [258] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), - [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), - [274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 18), - [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 18), - [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), - [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), + [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), + [196] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [200] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), + [202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), + [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [208] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), + [210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 7), + [212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 7), + [214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), + [216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), + [218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 11), + [220] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 11), + [222] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), + [224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), + [226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 14), + [228] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 14), + [230] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 17), + [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 17), + [234] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 19), + [236] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 19), + [238] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 20), + [240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 20), + [242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 18), + [244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 18), + [246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), + [248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), + [250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [254] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 10), + [256] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 10), + [258] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), + [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), + [278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), + [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), + [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 16), + [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 16), [290] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 23), [292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 23), [294] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 24), [296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 24), - [298] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), - [300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), + [298] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), + [300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), [302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(238), - [304] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), - [306] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(241), - [309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), - [311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), + [304] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(241), + [307] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), + [309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), + [311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), [313] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [315] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), - [317] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), - [319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), - [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), - [325] = {.entry = {.count = 1, .reusable = false}}, SHIFT(49), - [327] = {.entry = {.count = 1, .reusable = false}}, SHIFT(50), - [329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [331] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), - [333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [339] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), - [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [345] = {.entry = {.count = 1, .reusable = false}}, SHIFT(21), + [315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [317] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), + [319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [323] = {.entry = {.count = 1, .reusable = false}}, SHIFT(50), + [325] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), + [327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [329] = {.entry = {.count = 1, .reusable = false}}, SHIFT(14), + [331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [337] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), + [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), + [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [345] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), [347] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), [349] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), @@ -12233,9 +12224,9 @@ static const TSParseActionEntry ts_parse_actions[] = { [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), [357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), [359] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 15), - [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), - [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), [369] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), @@ -12273,17 +12264,17 @@ static const TSParseActionEntry ts_parse_actions[] = { [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), - [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), [445] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(221), [448] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), [450] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(246), [453] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), [455] = {.entry = {.count = 1, .reusable = false}}, SHIFT(246), - [457] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), - [459] = {.entry = {.count = 1, .reusable = false}}, SHIFT(29), - [461] = {.entry = {.count = 1, .reusable = false}}, SHIFT(12), - [463] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), + [457] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), + [459] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), + [461] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), + [463] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), [469] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), @@ -12292,13 +12283,13 @@ static const TSParseActionEntry ts_parse_actions[] = { [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), [478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), - [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), [484] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 8), - [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), [488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), - [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), [492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), - [494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), [496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218), [498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), [500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), @@ -12311,30 +12302,30 @@ static const TSParseActionEntry ts_parse_actions[] = { [514] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), [516] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 21), [518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), - [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), [522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), [524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), - [526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), - [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), [530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), [532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(183), [534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), - [536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), + [536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), [538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), [540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), - [542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), [546] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), [548] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), - [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), [558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), [560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), - [562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), [564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), - [566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index f3f0301..4f97ac1 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -74,27 +74,6 @@ With Binary Expression (path (identifier)))))))) -================== -Path for argument signature -================== - -path.to.signature -> std.None "" - ---- - -(source_file - (expression - (closure_definition - (path - (identifier) - (identifier) - (identifier)) - (path - (identifier) - (identifier)) - (expression - (string))))) - ================== Call function ================== From 0dec3436b4837800dade4c271ff38359b9e7bca2 Mon Sep 17 00:00:00 2001 From: James Carl Date: Thu, 4 Dec 2025 03:04:04 -0500 Subject: [PATCH 046/106] Dictionaries can now self-reference while being constructed. --- .../src/execution/values/dictionary.rs | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index 0fcd056..db56ee1 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -26,7 +26,7 @@ use crate::{ execution::{ errors::{ErrorType, ExpressionResult, Raise as _}, logging::RuntimeLog, - stack::Stack, + stack::{ScopeType, Stack}, }, }; @@ -118,18 +118,25 @@ impl Dictionary { ) -> ExpressionResult { let mut members = HashMap::with_capacity(ast_node.node.assignments.len()); - for assignment in ast_node.node.assignments.iter() { - let name = assignment.node.name.node.clone(); - let value = execute_expression(log, stack_trace, stack, &assignment.node.assignment)?; - - if members.insert(name, value).is_some() { - // That's a duplicate member. - return Err(DuplicateMemberError { - name: assignment.node.name.node.clone(), + stack.scope(stack_trace, ScopeType::Inherited, |stack, stack_trace| { + for assignment in ast_node.node.assignments.iter() { + let name = assignment.node.name.node.clone(); + let value = + execute_expression(log, stack_trace, stack, &assignment.node.assignment)?; + + if members.insert(name.clone(), value.clone()).is_some() { + // That's a duplicate member. + return Err(DuplicateMemberError { + name: assignment.node.name.node.clone(), + } + .to_error(stack_trace.iter().chain([&assignment.reference]))); } - .to_error(stack_trace.iter().chain([&assignment.reference]))); + + stack.insert_value(name, value); } - } + + Ok(()) + })??; Ok(Self::from(members)) } @@ -159,7 +166,7 @@ impl Display for DuplicateMemberError { #[cfg(test)] mod test { use super::*; - use crate::execution::{test_run, values::ValueNone}; + use crate::execution::{test_run, values}; #[test] fn build_dictionary() { @@ -167,7 +174,7 @@ mod test { let expected = Arc::new(DictionaryData { members: HashableMap::from(HashMap::from_iter([( "none".to_string(), - ValueNone.into(), + values::ValueNone.into(), )])), struct_def: StructDefinition { members: Arc::new(HashableMap::from(HashMap::from([( @@ -194,4 +201,10 @@ mod test { fn non_existant_member() { test_run("(void = ()).does_not_exist").unwrap_err(); } + + #[test] + fn reference_own_member() { + let product = test_run("let d = (one = 1u, two = one + 1u); in d.two").unwrap(); + assert_eq!(product, values::UnsignedInteger::from(2).into()); + } } From 94db3ab72431e626ffce367838044b7ba4b9fff7 Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 5 Dec 2025 21:46:49 -0500 Subject: [PATCH 047/106] Implement user closures --- crates/interpreter/src/compile/expressions.rs | 145 +- crates/interpreter/src/execution/mod.rs | 44 +- .../src/execution/values/closure.rs | 16 +- .../tree-sitter-command-cad-model/grammar.js | 9 +- .../src/grammar.json | 43 +- .../src/node-types.json | 70 +- .../src/parser.c | 8670 +++++++++-------- .../test/corpus/closure.txt | 34 +- .../test/corpus/comments.txt | 2 +- .../test/corpus/dictionary_construction.txt | 12 +- .../test/corpus/list.txt | 18 +- .../test/corpus/precedence.txt | 12 +- .../test/corpus/struct_definition.txt | 28 +- .../test/corpus/variable_paths.txt | 19 +- 14 files changed, 4974 insertions(+), 4148 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 56bb894..9beb887 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -42,7 +42,8 @@ pub enum Expression { If(AstNode), List(AstNode>>), Parenthesis(Box>), - Path(AstNode), + IdentityPath(AstNode), + SelfPath(AstNode), Scalar(AstNode), SignedInteger(AstNode), String(AstNode), @@ -50,33 +51,31 @@ pub enum Expression { UnaryExpression(AstNode>), UnsignedInteger(AstNode), FunctionCall(AstNode>), - MethodCall(AstNode), + MethodCall(AstNode>), LetIn(AstNode>), } -impl<'t> Parse<'t, nodes::anon_unions::Path_StructDefinition<'t>> for Expression { +impl<'t> Parse<'t, nodes::anon_unions::IdentityPath_StructDefinition<'t>> for Expression { fn parse<'i>( file: &Arc, input: &'i str, - value: nodes::anon_unions::Path_StructDefinition<'t>, + value: nodes::anon_unions::IdentityPath_StructDefinition<'t>, ) -> Result, Error<'t, 'i>> { match value { - nodes::anon_unions::Path_StructDefinition::Path(path) => Ok(AstNode::new( - file, - &path, - Self::Path(IdentityPath::parse(file, input, path)?), - )), - nodes::anon_unions::Path_StructDefinition::StructDefinition(struct_definition) => { + nodes::anon_unions::IdentityPath_StructDefinition::IdentityPath(path) => { Ok(AstNode::new( file, - &struct_definition, - Self::StructDefinition(StructDefinition::parse( - file, - input, - struct_definition, - )?), + &path, + Self::IdentityPath(IdentityPath::parse(file, input, path)?), )) } + nodes::anon_unions::IdentityPath_StructDefinition::StructDefinition( + struct_definition, + ) => Ok(AstNode::new( + file, + &struct_definition, + Self::StructDefinition(StructDefinition::parse(file, input, struct_definition)?), + )), } } } @@ -198,16 +197,30 @@ impl<'t> Parse<'t, nodes::Parenthesis<'t>> for Expression { } } -impl<'t> Parse<'t, nodes::Path<'t>> for Expression { +impl<'t> Parse<'t, nodes::IdentityPath<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::IdentityPath<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::IdentityPath(IdentityPath::parse(file, input, value)?), + )) + } +} + +impl<'t> Parse<'t, nodes::SelfPath<'t>> for Expression { fn parse<'i>( file: &Arc, input: &'i str, - value: nodes::Path<'t>, + value: nodes::SelfPath<'t>, ) -> Result, Error<'t, 'i>> { Ok(AstNode::new( file, &value, - Self::Path(IdentityPath::parse(file, input, value)?), + Self::SelfPath(SelfPath::parse(file, input, value)?), )) } } @@ -382,7 +395,7 @@ impl<'t> Parse<'t, nodes::MethodCall<'t>> for Expression { Ok(AstNode::new( file, &value, - Self::MethodCall(MethodCall::parse(file, input, value)?), + Self::MethodCall(MethodCall::parse(file, input, value)?.into_box()), )) } } @@ -428,7 +441,8 @@ impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { ChildType::If(if_expression) => Self::parse(file, input, if_expression), ChildType::List(list) => Self::parse(file, input, list), ChildType::Parenthesis(parenthesis) => Self::parse(file, input, parenthesis), - ChildType::Path(path) => Self::parse(file, input, path), + ChildType::IdentityPath(path) => Self::parse(file, input, path), + ChildType::SelfPath(path) => Self::parse(file, input, path), ChildType::Scalar(scalar) => Self::parse(file, input, scalar), ChildType::SignedInteger(signed_integer) => Self::parse(file, input, signed_integer), ChildType::String(string) => Self::parse(file, input, string), @@ -593,11 +607,11 @@ pub struct IdentityPath { pub path: Vec>, } -impl<'t> Parse<'t, nodes::Path<'t>> for IdentityPath { +impl<'t> Parse<'t, nodes::IdentityPath<'t>> for IdentityPath { fn parse<'i>( file: &Arc, input: &'i str, - value: nodes::Path<'t>, + value: nodes::IdentityPath<'t>, ) -> Result, Error<'t, 'i>> { let mut cursor = value.walk(); let mut path = Vec::new(); @@ -613,6 +627,31 @@ impl<'t> Parse<'t, nodes::Path<'t>> for IdentityPath { } } +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct SelfPath { + pub path: Vec>, +} + +impl<'t> Parse<'t, nodes::SelfPath<'t>> for SelfPath { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::SelfPath<'t>, + ) -> Result, Error<'t, 'i>> { + let mut path = Vec::new(); + + let mut cursor = value.walk(); + for ident in value.identifiers(&mut cursor) { + let ident = ident?; + let text = String::parse(file, input, ident)?; + + path.push(text); + } + + Ok(AstNode::new(file, &value, Self { path })) + } +} + #[derive(Debug, Hash, Eq, PartialEq)] pub struct Scalar { pub dimension: Dimension, @@ -915,7 +954,7 @@ impl<'t> Parse<'t, nodes::FunctionCall<'t>> for FunctionCall { #[derive(Debug, Hash, Eq, PartialEq)] pub struct MethodCall { - pub self_dictionary: AstNode>, + pub self_dictionary: AstNode, pub to_call: AstNode, pub argument: AstNode, } @@ -926,7 +965,7 @@ impl<'t> Parse<'t, nodes::MethodCall<'t>> for MethodCall { input: &'i str, value: nodes::MethodCall<'t>, ) -> Result, Error<'t, 'i>> { - let self_dictionary = Expression::parse(file, input, value.self_dictionary()?)?.into_box(); + let self_dictionary = Expression::parse(file, input, value.self_dictionary()?)?; let to_call = String::parse(file, input, value.to_call()?)?; let argument = DictionaryConstruction::parse(file, input, value.argument()?)?; @@ -1102,7 +1141,7 @@ mod test { let returns = &closure.node.return_type; let returns_reference = returns.reference.clone(); - let returns_path = returns.node.as_path().unwrap(); + let returns_path = returns.node.as_identitypath().unwrap(); let returns_path_reference = returns_path.reference.clone(); let expression = &closure.node.expression; @@ -1125,7 +1164,7 @@ mod test { }, return_type: AstNode { reference: returns_reference, - node: Expression::Path(AstNode { + node: Expression::IdentityPath(AstNode { reference: returns_path_reference, node: IdentityPath { path: vec![ @@ -1390,9 +1429,9 @@ mod test { } #[test] - fn local_path() { + fn identity_path() { let root = full_compile("this.thang"); - let path = root.node.as_path().unwrap(); + let path = root.node.as_identitypath().unwrap(); let this = &path.node.path[0]; let thang = &path.node.path[1]; @@ -1400,7 +1439,7 @@ mod test { root, AstNode { reference: root.reference.clone(), - node: Expression::Path(AstNode { + node: Expression::IdentityPath(AstNode { reference: path.reference.clone(), node: IdentityPath { path: vec![ @@ -1420,9 +1459,9 @@ mod test { } #[test] - fn argument_path() { - let root = full_compile("@.this.thang"); - let path = root.node.as_path().unwrap(); + fn self_path() { + let root = full_compile("self.this.thang"); + let path = root.node.as_selfpath().unwrap(); let this = &path.node.path[0]; let thang = &path.node.path[1]; @@ -1430,9 +1469,9 @@ mod test { root, AstNode { reference: root.reference.clone(), - node: Expression::Path(AstNode { + node: Expression::SelfPath(AstNode { reference: path.reference.clone(), - node: IdentityPath { + node: SelfPath { path: vec![ AstNode { reference: this.reference.clone(), @@ -1623,11 +1662,11 @@ mod test { let struct_definition = root.node.as_structdefinition().unwrap(); let members = &struct_definition.node.members; let one = &members[0]; - let one_ty = one.node.ty.node.as_path().unwrap(); + let one_ty = one.node.ty.node.as_identitypath().unwrap(); let two = &members[1]; - let two_ty = two.node.ty.node.as_path().unwrap(); + let two_ty = two.node.ty.node.as_identitypath().unwrap(); let two_default = two.node.default.as_ref().unwrap(); - let two_default_path = two_default.node.as_path().unwrap(); + let two_default_path = two_default.node.as_identitypath().unwrap(); assert!(struct_definition.node.variadic); assert_eq!(members.len(), 2); @@ -1644,7 +1683,7 @@ mod test { }, ty: AstNode { reference: one.node.ty.reference.clone(), - node: Expression::Path(AstNode { + node: Expression::IdentityPath(AstNode { reference: one_ty.reference.clone(), node: IdentityPath { path: vec![ @@ -1675,7 +1714,7 @@ mod test { }, ty: AstNode { reference: two.node.ty.reference.clone(), - node: Expression::Path(AstNode { + node: Expression::IdentityPath(AstNode { reference: two_ty.reference.clone(), node: IdentityPath { path: vec![ @@ -1693,7 +1732,7 @@ mod test { }, default: Some(AstNode { reference: two_default.reference.clone(), - node: Expression::Path(AstNode { + node: Expression::IdentityPath(AstNode { reference: two_default_path.reference.clone(), node: IdentityPath { path: vec![AstNode { @@ -1812,7 +1851,7 @@ mod test { fn function_call_no_arguments() { let root = full_compile("a.b()"); let call = root.node.as_functioncall().unwrap(); - let to_call = call.node.to_call.node.as_path().unwrap(); + let to_call = call.node.to_call.node.as_identitypath().unwrap(); assert_eq!( root, AstNode { @@ -1822,7 +1861,7 @@ mod test { node: Box::new(FunctionCall { to_call: AstNode { reference: call.node.to_call.reference.clone(), - node: Expression::Path(AstNode { + node: Expression::IdentityPath(AstNode { reference: to_call.reference.clone(), node: IdentityPath { path: vec![ @@ -1854,7 +1893,7 @@ mod test { fn function_call_with_arguments() { let root = full_compile("a.b(value = 24u)"); let call = root.node.as_functioncall().unwrap(); - let to_call = call.node.to_call.node.as_path().unwrap(); + let to_call = call.node.to_call.node.as_identitypath().unwrap(); let dict = &call.node.argument.node; let dict_assignment = &dict.assignments[0]; assert_eq!( @@ -1866,7 +1905,7 @@ mod test { node: Box::new(FunctionCall { to_call: AstNode { reference: call.node.to_call.reference.clone(), - node: Expression::Path(AstNode { + node: Expression::IdentityPath(AstNode { reference: to_call.reference.clone(), node: IdentityPath { path: vec![ @@ -1931,10 +1970,10 @@ mod test { reference: root.reference.clone(), node: Expression::MethodCall(AstNode { reference: call.reference.clone(), - node: MethodCall { + node: Box::new(MethodCall { self_dictionary: AstNode { reference: call.node.self_dictionary.reference.clone(), - node: Box::new(Expression::UnsignedInteger(AstNode { + node: Expression::UnsignedInteger(AstNode { reference: call .node .self_dictionary @@ -1944,7 +1983,7 @@ mod test { .reference .clone(), node: 5u64 - })) + }) }, to_call: AstNode { reference: to_call.reference.clone(), @@ -1956,7 +1995,7 @@ mod test { assignments: vec![] } } - } + }) }) } ); @@ -1975,10 +2014,10 @@ mod test { reference: root.reference.clone(), node: Expression::MethodCall(AstNode { reference: call.reference.clone(), - node: MethodCall { + node: Box::new(MethodCall { self_dictionary: AstNode { reference: call.node.self_dictionary.reference.clone(), - node: Box::new(Expression::UnsignedInteger(AstNode { + node: Expression::UnsignedInteger(AstNode { reference: call .node .self_dictionary @@ -1988,7 +2027,7 @@ mod test { .reference .clone(), node: 83u64 - })) + }) }, to_call: AstNode { reference: to_call.reference.clone(), @@ -2026,7 +2065,7 @@ mod test { }] } } - } + }) }) } ); diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index ffbe3f9..c81c5de 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -18,7 +18,12 @@ use std::cmp::Ordering; -use crate::compile::{self, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation}; +use crate::{ + compile::{ + self, AstNode, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation, + }, + execution::{stack::ScopeType, values::Dictionary}, +}; mod errors; mod formatting; @@ -120,10 +125,18 @@ pub fn execute_expression( compile::Expression::Parenthesis(ast_node) => { execute_expression(log, stack_trace, stack, &ast_node) } - compile::Expression::Path(ast_node) => { + compile::Expression::IdentityPath(ast_node) => { let path_iter = ast_node.node.path.iter(); Ok(find_value(log, stack_trace, stack, path_iter)?) } + compile::Expression::SelfPath(ast_node) => { + let self_code = AstNode { + reference: ast_node.reference.clone(), + node: String::from("self"), + }; + let path_iter = [&self_code].into_iter().chain(ast_node.node.path.iter()); + Ok(find_value(log, stack_trace, stack, path_iter)?) + } compile::Expression::Scalar(ast_node) => Ok(values::Scalar { dimension: ast_node.node.dimension, @@ -149,7 +162,9 @@ pub fn execute_expression( compile::Expression::FunctionCall(ast_node) => { execute_function_call(log, stack_trace, stack, ast_node) } - compile::Expression::MethodCall(ast_node) => todo!(), + compile::Expression::MethodCall(ast_node) => { + execute_method_call(log, stack_trace, stack, ast_node) + } compile::Expression::LetIn(ast_node) => { execute_let_in(log, stack_trace, stack, ast_node) } @@ -183,7 +198,28 @@ fn execute_function_call( let to_call = execute_expression(log, stack_trace, stack, &call.node.to_call)?; let argument = values::Dictionary::from_ast(log, stack_trace, stack, &call.node.argument)?; - to_call.call(log, stack_trace, stack, argument) + stack.scope(stack_trace, ScopeType::Isolated, |stack, stack_trace| { + to_call.call(log, stack_trace, stack, argument) + })? +} + +fn execute_method_call( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + call: &compile::AstNode>, +) -> ExpressionResult { + let self_dictionary = execute_expression(log, stack_trace, stack, &call.node.self_dictionary)?; + let to_call = self_dictionary + .get_attribute(log, stack_trace, &call.node.to_call.node)? + .clone(); + let argument = values::Dictionary::from_ast(log, stack_trace, stack, &call.node.argument)?; + + stack.scope(stack_trace, ScopeType::Isolated, |stack, stack_trace| { + stack.insert_value("self", self_dictionary); + + to_call.call(log, stack_trace, stack, argument) + })? } fn execute_let_in( diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index e3edbb2..380aa65 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -143,7 +143,7 @@ fn find_all_variable_accesses_in_expression( Expression::Parenthesis(ast_node) => { find_all_variable_accesses_in_expression(&ast_node.node, access_collector) } - Expression::Path(ast_node) => { + Expression::IdentityPath(ast_node) => { // Only the top most parent matters. access_collector(&ast_node.node.path[0]) } @@ -205,7 +205,8 @@ fn find_all_variable_accesses_in_expression( | Expression::Scalar(_) | Expression::SignedInteger(_) | Expression::String(_) - | Expression::UnsignedInteger(_) => Ok(()), + | Expression::UnsignedInteger(_) + | Expression::SelfPath(_) => Ok(()), } } @@ -292,7 +293,7 @@ impl Object for UserClosure { let argument = self.data.signature.argument_type.fill_defaults(argument); - stack.scope(stack_trace, ScopeType::Isolated, |stack, stack_trace| { + stack.scope(stack_trace, ScopeType::Inherited, |stack, stack_trace| { for (name, value) in argument.iter() { stack.insert_value(name, value.clone()); } @@ -549,6 +550,15 @@ mod test { assert_eq!(product, values::UnsignedInteger::from(7).into()); } + #[test] + fn call_custom_method() { + let product = test_run( + "let object = (value = 5u, method = () -> std.types.UInt: self.value;); in object:method()", + ) + .unwrap(); + assert_eq!(product, values::UnsignedInteger::from(5).into()); + } + #[test] fn build_argument_signature() { assert_eq!(build_argument_signature_list!(), []); diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index cd5dbab..4c76197 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -100,6 +100,7 @@ module.exports = grammar({ identifier: _ => /[a-zA-Z_][a-zA-Z0-9_]*/, string: _ => /\"(\\\"|[^\"])*\"/, default: _ => 'default', + self: _ => 'self', base_ten: _ => /[0-9]+/, octal: _ => seq(token.immediate(/0o/), /[0-9]+/), @@ -145,7 +146,8 @@ module.exports = grammar({ $.scalar, $.boolean, $.string, - $.path, + $.identity_path, + $.self_path, $.list, $.if, $.struct_definition, @@ -166,7 +168,8 @@ module.exports = grammar({ let_in: $ => seq('let', field('assignment', repeat($.let_in_assignment)), 'in', field('expression', $.expression)), let_in_assignment: $ => seq(field('ident', $.identifier), '=', field('value', $.expression), ';'), - path: $ => seq($.identifier, repeat(seq('.', $.identifier))), + identity_path: $ => seq($.identifier, repeat(seq('.', $.identifier))), + self_path: $ => seq($.self, repeat(seq('.', field('identifier', $.identifier)))), declaration_type: $ => seq(':', $.expression), @@ -207,7 +210,7 @@ module.exports = grammar({ closure_definition: $ => prec.left(PREC.closure, seq( field('argument', $.struct_definition), '->', - field('result', choice($.struct_definition, $.path)), + field('result', choice($.struct_definition, $.identity_path)), field('expression', $.expression), )), diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index c7da932..523dd72 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -39,6 +39,10 @@ "type": "STRING", "value": "default" }, + "self": { + "type": "STRING", + "value": "self" + }, "base_ten": { "type": "PATTERN", "value": "[0-9]+" @@ -371,7 +375,11 @@ }, { "type": "SYMBOL", - "name": "path" + "name": "identity_path" + }, + { + "type": "SYMBOL", + "name": "self_path" }, { "type": "SYMBOL", @@ -1291,7 +1299,7 @@ } ] }, - "path": { + "identity_path": { "type": "SEQ", "members": [ { @@ -1316,6 +1324,35 @@ } ] }, + "self_path": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "self" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "." + }, + { + "type": "FIELD", + "name": "identifier", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + } + ] + } + } + ] + }, "declaration_type": { "type": "SEQ", "members": [ @@ -1660,7 +1697,7 @@ }, { "type": "SYMBOL", - "name": "path" + "name": "identity_path" } ] } diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 1d7b2fd..1c32770 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -173,7 +173,7 @@ "required": true, "types": [ { - "type": "path", + "type": "identity_path", "named": true }, { @@ -281,6 +281,10 @@ "type": "function_call", "named": true }, + { + "type": "identity_path", + "named": true + }, { "type": "if", "named": true @@ -302,11 +306,11 @@ "named": true }, { - "type": "path", + "type": "scalar", "named": true }, { - "type": "scalar", + "type": "self_path", "named": true }, { @@ -555,6 +559,21 @@ "named": true, "fields": {} }, + { + "type": "identity_path", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, { "type": "if", "named": true, @@ -746,21 +765,6 @@ ] } }, - { - "type": "path", - "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": true, - "types": [ - { - "type": "identifier", - "named": true - } - ] - } - }, { "type": "scalar", "named": true, @@ -801,6 +805,32 @@ } } }, + { + "type": "self_path", + "named": true, + "fields": { + "identifier": { + "multiple": true, + "required": false, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "self", + "named": true + } + ] + } + }, { "type": "signed_integer", "named": true, @@ -1118,6 +1148,10 @@ "type": "let", "named": false }, + { + "type": "self", + "named": true + }, { "type": "string", "named": true diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index b348c23..a43fa93 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -7,16 +7,16 @@ #endif #define LANGUAGE_VERSION 15 -#define STATE_COUNT 255 +#define STATE_COUNT 265 #define LARGE_STATE_COUNT 7 -#define SYMBOL_COUNT 97 +#define SYMBOL_COUNT 100 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 56 +#define TOKEN_COUNT 57 #define EXTERNAL_TOKEN_COUNT 0 -#define FIELD_COUNT 25 +#define FIELD_COUNT 26 #define MAX_ALIAS_SEQUENCE_LENGTH 5 #define MAX_RESERVED_WORD_SET_SIZE 0 -#define PRODUCTION_ID_COUNT 25 +#define PRODUCTION_ID_COUNT 28 #define SUPERTYPE_COUNT 0 enum ts_symbol_identifiers { @@ -25,97 +25,100 @@ enum ts_symbol_identifiers { sym__whitespace = 3, sym_string = 4, sym_default = 5, - aux_sym_base_ten_token1 = 6, - aux_sym_octal_token1 = 7, - aux_sym_hex_token1 = 8, - aux_sym_hex_token2 = 9, - aux_sym_binary_token1 = 10, - aux_sym_binary_token2 = 11, - aux_sym_signed_integer_token1 = 12, - aux_sym_unsigned_integer_token1 = 13, - sym_unit_quote = 14, - anon_sym_DOT = 15, - sym_true = 16, - sym_false = 17, - anon_sym_COLON = 18, - anon_sym_DASH = 19, - anon_sym_PLUS = 20, - anon_sym_BANG = 21, - anon_sym_STAR_STAR = 22, - anon_sym_STAR = 23, - anon_sym_SLASH = 24, - anon_sym_SLASH_SLASH = 25, - anon_sym_LT_LT = 26, - anon_sym_GT_GT = 27, - anon_sym_AMP = 28, - anon_sym_PIPE = 29, - anon_sym_CARET = 30, - anon_sym_GT = 31, - anon_sym_GT_EQ = 32, - anon_sym_EQ_EQ = 33, - anon_sym_LT_EQ = 34, - anon_sym_LT = 35, - anon_sym_BANG_EQ = 36, - anon_sym_AMP_AMP = 37, - anon_sym_PIPE_PIPE = 38, - anon_sym_DOT_DOT = 39, - anon_sym_DOT_DOT_EQ = 40, - anon_sym_if = 41, - anon_sym_else = 42, - anon_sym_let = 43, - anon_sym_in = 44, - anon_sym_EQ = 45, - anon_sym_SEMI = 46, - anon_sym_LPAREN = 47, - anon_sym_RPAREN = 48, - anon_sym_LBRACK = 49, - anon_sym_COMMA = 50, - anon_sym_RBRACK = 51, - sym_varadic_dots = 52, - anon_sym_DASH_GT = 53, - anon_sym_LT_LT_LT = 54, - anon_sym_GT_GT_GT = 55, - sym_source_file = 56, - sym_base_ten = 57, - sym_octal = 58, - sym_hex = 59, - sym_binary = 60, - sym_integer = 61, - sym_signed_integer = 62, - sym_unsigned_integer = 63, - sym_number = 64, - sym__float = 65, - sym__unit = 66, - sym_scalar = 67, - sym_boolean = 68, - sym_function_call = 69, - sym_method_call = 70, - sym_expression = 71, - sym_unary_expression = 72, - sym_binary_expression = 73, - sym_if = 74, - sym_let_in = 75, - sym_let_in_assignment = 76, - sym_path = 77, - sym_declaration_type = 78, - sym_parenthesis = 79, - sym_list = 80, - sym_struct_member = 81, - sym__struct_final_element = 82, - sym_struct_definition = 83, - sym_dictionary_member_assignment = 84, - sym_dictionary_construction = 85, - sym_closure_definition = 86, - sym_formula = 87, - sym_formula_expression = 88, - sym_formula_parenthesis = 89, - sym_formula_unary_expression = 90, - sym_formula_binary_expression = 91, - aux_sym_let_in_repeat1 = 92, - aux_sym_path_repeat1 = 93, - aux_sym_list_repeat1 = 94, - aux_sym_struct_definition_repeat1 = 95, - aux_sym_dictionary_construction_repeat1 = 96, + sym_self = 6, + aux_sym_base_ten_token1 = 7, + aux_sym_octal_token1 = 8, + aux_sym_hex_token1 = 9, + aux_sym_hex_token2 = 10, + aux_sym_binary_token1 = 11, + aux_sym_binary_token2 = 12, + aux_sym_signed_integer_token1 = 13, + aux_sym_unsigned_integer_token1 = 14, + sym_unit_quote = 15, + anon_sym_DOT = 16, + sym_true = 17, + sym_false = 18, + anon_sym_COLON = 19, + anon_sym_DASH = 20, + anon_sym_PLUS = 21, + anon_sym_BANG = 22, + anon_sym_STAR_STAR = 23, + anon_sym_STAR = 24, + anon_sym_SLASH = 25, + anon_sym_SLASH_SLASH = 26, + anon_sym_LT_LT = 27, + anon_sym_GT_GT = 28, + anon_sym_AMP = 29, + anon_sym_PIPE = 30, + anon_sym_CARET = 31, + anon_sym_GT = 32, + anon_sym_GT_EQ = 33, + anon_sym_EQ_EQ = 34, + anon_sym_LT_EQ = 35, + anon_sym_LT = 36, + anon_sym_BANG_EQ = 37, + anon_sym_AMP_AMP = 38, + anon_sym_PIPE_PIPE = 39, + anon_sym_DOT_DOT = 40, + anon_sym_DOT_DOT_EQ = 41, + anon_sym_if = 42, + anon_sym_else = 43, + anon_sym_let = 44, + anon_sym_in = 45, + anon_sym_EQ = 46, + anon_sym_SEMI = 47, + anon_sym_LPAREN = 48, + anon_sym_RPAREN = 49, + anon_sym_LBRACK = 50, + anon_sym_COMMA = 51, + anon_sym_RBRACK = 52, + sym_varadic_dots = 53, + anon_sym_DASH_GT = 54, + anon_sym_LT_LT_LT = 55, + anon_sym_GT_GT_GT = 56, + sym_source_file = 57, + sym_base_ten = 58, + sym_octal = 59, + sym_hex = 60, + sym_binary = 61, + sym_integer = 62, + sym_signed_integer = 63, + sym_unsigned_integer = 64, + sym_number = 65, + sym__float = 66, + sym__unit = 67, + sym_scalar = 68, + sym_boolean = 69, + sym_function_call = 70, + sym_method_call = 71, + sym_expression = 72, + sym_unary_expression = 73, + sym_binary_expression = 74, + sym_if = 75, + sym_let_in = 76, + sym_let_in_assignment = 77, + sym_identity_path = 78, + sym_self_path = 79, + sym_declaration_type = 80, + sym_parenthesis = 81, + sym_list = 82, + sym_struct_member = 83, + sym__struct_final_element = 84, + sym_struct_definition = 85, + sym_dictionary_member_assignment = 86, + sym_dictionary_construction = 87, + sym_closure_definition = 88, + sym_formula = 89, + sym_formula_expression = 90, + sym_formula_parenthesis = 91, + sym_formula_unary_expression = 92, + sym_formula_binary_expression = 93, + aux_sym_let_in_repeat1 = 94, + aux_sym_identity_path_repeat1 = 95, + aux_sym_self_path_repeat1 = 96, + aux_sym_list_repeat1 = 97, + aux_sym_struct_definition_repeat1 = 98, + aux_sym_dictionary_construction_repeat1 = 99, }; static const char * const ts_symbol_names[] = { @@ -125,6 +128,7 @@ static const char * const ts_symbol_names[] = { [sym__whitespace] = "_whitespace", [sym_string] = "string", [sym_default] = "default", + [sym_self] = "self", [aux_sym_base_ten_token1] = "base_ten_token1", [aux_sym_octal_token1] = "octal_token1", [aux_sym_hex_token1] = "hex_token1", @@ -196,7 +200,8 @@ static const char * const ts_symbol_names[] = { [sym_if] = "if", [sym_let_in] = "let_in", [sym_let_in_assignment] = "let_in_assignment", - [sym_path] = "path", + [sym_identity_path] = "identity_path", + [sym_self_path] = "self_path", [sym_declaration_type] = "declaration_type", [sym_parenthesis] = "parenthesis", [sym_list] = "list", @@ -212,7 +217,8 @@ static const char * const ts_symbol_names[] = { [sym_formula_unary_expression] = "formula_unary_expression", [sym_formula_binary_expression] = "formula_binary_expression", [aux_sym_let_in_repeat1] = "let_in_repeat1", - [aux_sym_path_repeat1] = "path_repeat1", + [aux_sym_identity_path_repeat1] = "identity_path_repeat1", + [aux_sym_self_path_repeat1] = "self_path_repeat1", [aux_sym_list_repeat1] = "list_repeat1", [aux_sym_struct_definition_repeat1] = "struct_definition_repeat1", [aux_sym_dictionary_construction_repeat1] = "dictionary_construction_repeat1", @@ -225,6 +231,7 @@ static const TSSymbol ts_symbol_map[] = { [sym__whitespace] = sym__whitespace, [sym_string] = sym_string, [sym_default] = sym_default, + [sym_self] = sym_self, [aux_sym_base_ten_token1] = aux_sym_base_ten_token1, [aux_sym_octal_token1] = aux_sym_octal_token1, [aux_sym_hex_token1] = aux_sym_hex_token1, @@ -296,7 +303,8 @@ static const TSSymbol ts_symbol_map[] = { [sym_if] = sym_if, [sym_let_in] = sym_let_in, [sym_let_in_assignment] = sym_let_in_assignment, - [sym_path] = sym_path, + [sym_identity_path] = sym_identity_path, + [sym_self_path] = sym_self_path, [sym_declaration_type] = sym_declaration_type, [sym_parenthesis] = sym_parenthesis, [sym_list] = sym_list, @@ -312,7 +320,8 @@ static const TSSymbol ts_symbol_map[] = { [sym_formula_unary_expression] = sym_formula_unary_expression, [sym_formula_binary_expression] = sym_formula_binary_expression, [aux_sym_let_in_repeat1] = aux_sym_let_in_repeat1, - [aux_sym_path_repeat1] = aux_sym_path_repeat1, + [aux_sym_identity_path_repeat1] = aux_sym_identity_path_repeat1, + [aux_sym_self_path_repeat1] = aux_sym_self_path_repeat1, [aux_sym_list_repeat1] = aux_sym_list_repeat1, [aux_sym_struct_definition_repeat1] = aux_sym_struct_definition_repeat1, [aux_sym_dictionary_construction_repeat1] = aux_sym_dictionary_construction_repeat1, @@ -343,6 +352,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym_self] = { + .visible = true, + .named = true, + }, [aux_sym_base_ten_token1] = { .visible = false, .named = false, @@ -627,7 +640,11 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [sym_path] = { + [sym_identity_path] = { + .visible = true, + .named = true, + }, + [sym_self_path] = { .visible = true, .named = true, }, @@ -691,7 +708,11 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = false, .named = false, }, - [aux_sym_path_repeat1] = { + [aux_sym_identity_path_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_self_path_repeat1] = { .visible = false, .named = false, }, @@ -721,20 +742,21 @@ enum ts_field_identifiers { field_final_element = 9, field_fractional = 10, field_ident = 11, - field_lhs = 12, - field_members = 13, - field_name = 14, - field_on_false = 15, - field_on_true = 16, - field_op = 17, - field_relation = 18, - field_result = 19, - field_rhs = 20, - field_self_dictionary = 21, - field_to_call = 22, - field_unit = 23, - field_value = 24, - field_whole = 25, + field_identifier = 12, + field_lhs = 13, + field_members = 14, + field_name = 15, + field_on_false = 16, + field_on_true = 17, + field_op = 18, + field_relation = 19, + field_result = 20, + field_rhs = 21, + field_self_dictionary = 22, + field_to_call = 23, + field_unit = 24, + field_value = 25, + field_whole = 26, }; static const char * const ts_field_names[] = { @@ -750,6 +772,7 @@ static const char * const ts_field_names[] = { [field_final_element] = "final_element", [field_fractional] = "fractional", [field_ident] = "ident", + [field_identifier] = "identifier", [field_lhs] = "lhs", [field_members] = "members", [field_name] = "name", @@ -771,26 +794,29 @@ static const TSMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [2] = {.index = 1, .length = 2}, [3] = {.index = 3, .length = 1}, [4] = {.index = 4, .length = 1}, - [5] = {.index = 5, .length = 3}, - [6] = {.index = 8, .length = 2}, - [7] = {.index = 10, .length = 1}, + [5] = {.index = 5, .length = 1}, + [6] = {.index = 6, .length = 3}, + [7] = {.index = 9, .length = 2}, [8] = {.index = 11, .length = 1}, - [9] = {.index = 12, .length = 1}, - [10] = {.index = 13, .length = 1}, - [11] = {.index = 14, .length = 1}, - [12] = {.index = 15, .length = 2}, - [13] = {.index = 17, .length = 3}, - [14] = {.index = 20, .length = 2}, - [15] = {.index = 22, .length = 2}, - [16] = {.index = 24, .length = 2}, - [17] = {.index = 26, .length = 2}, - [18] = {.index = 28, .length = 3}, - [19] = {.index = 31, .length = 3}, - [20] = {.index = 34, .length = 3}, - [21] = {.index = 37, .length = 2}, - [22] = {.index = 39, .length = 2}, - [23] = {.index = 41, .length = 3}, - [24] = {.index = 44, .length = 3}, + [9] = {.index = 12, .length = 2}, + [10] = {.index = 14, .length = 1}, + [11] = {.index = 15, .length = 1}, + [12] = {.index = 16, .length = 1}, + [13] = {.index = 17, .length = 1}, + [14] = {.index = 18, .length = 1}, + [15] = {.index = 19, .length = 2}, + [16] = {.index = 21, .length = 3}, + [17] = {.index = 24, .length = 2}, + [18] = {.index = 26, .length = 2}, + [19] = {.index = 28, .length = 2}, + [20] = {.index = 30, .length = 2}, + [21] = {.index = 32, .length = 3}, + [22] = {.index = 35, .length = 3}, + [23] = {.index = 38, .length = 3}, + [24] = {.index = 41, .length = 2}, + [25] = {.index = 43, .length = 2}, + [26] = {.index = 45, .length = 3}, + [27] = {.index = 48, .length = 3}, }; static const TSFieldMapEntry ts_field_map_entries[] = { @@ -800,68 +826,75 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_fractional, 0, .inherited = true}, {field_whole, 0, .inherited = true}, [3] = - {field_op, 0}, + {field_identifier, 1, .inherited = true}, [4] = - {field_value, 0}, + {field_op, 0}, [5] = + {field_value, 0}, + [6] = {field_fractional, 0, .inherited = true}, {field_unit, 1}, {field_whole, 0, .inherited = true}, - [8] = + [9] = {field_argument, 1}, {field_to_call, 0}, - [10] = - {field_expression, 2}, [11] = - {field_name, 0}, + {field_identifier, 1}, [12] = + {field_identifier, 0, .inherited = true}, + {field_identifier, 1, .inherited = true}, + [14] = + {field_expression, 2}, + [15] = + {field_name, 0}, + [16] = {field_final_element, 1}, - [13] = + [17] = {field_assignments, 1}, - [14] = + [18] = {field_members, 1}, - [15] = + [19] = {field_fractional, 2}, {field_whole, 0}, - [17] = + [21] = {field_a, 0}, {field_b, 2}, {field_op, 1}, - [20] = + [24] = {field_assignment, 1}, {field_expression, 3}, - [22] = + [26] = {field_assignment, 2}, {field_name, 0}, - [24] = + [28] = {field_assignments, 1}, {field_assignments, 2}, - [26] = + [30] = {field_final_element, 2}, {field_members, 1}, - [28] = + [32] = {field_argument, 3}, {field_self_dictionary, 0}, {field_to_call, 2}, - [31] = + [35] = {field_argument, 0}, {field_expression, 3}, {field_result, 2}, - [34] = + [38] = {field_condition, 1}, {field_on_false, 4}, {field_on_true, 2}, - [37] = + [41] = {field_ident, 0}, {field_value, 2}, - [39] = + [43] = {field_default, 3}, {field_name, 0}, - [41] = + [45] = {field_assignments, 1}, {field_assignments, 2}, {field_assignments, 3}, - [44] = + [48] = {field_lhs, 1}, {field_relation, 2}, {field_rhs, 3}, @@ -885,9 +918,9 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [6] = 4, [7] = 7, [8] = 8, - [9] = 7, - [10] = 8, - [11] = 11, + [9] = 9, + [10] = 7, + [11] = 9, [12] = 12, [13] = 13, [14] = 14, @@ -902,32 +935,32 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [23] = 23, [24] = 24, [25] = 25, - [26] = 26, + [26] = 23, [27] = 27, - [28] = 28, - [29] = 25, - [30] = 23, + [28] = 22, + [29] = 29, + [30] = 30, [31] = 31, [32] = 32, [33] = 33, [34] = 34, [35] = 35, - [36] = 36, - [37] = 13, - [38] = 14, - [39] = 15, - [40] = 16, - [41] = 17, - [42] = 20, - [43] = 27, - [44] = 24, - [45] = 12, - [46] = 31, - [47] = 32, - [48] = 33, - [49] = 34, - [50] = 35, - [51] = 36, + [36] = 13, + [37] = 14, + [38] = 15, + [39] = 16, + [40] = 27, + [41] = 19, + [42] = 12, + [43] = 24, + [44] = 30, + [45] = 31, + [46] = 32, + [47] = 33, + [48] = 34, + [49] = 35, + [50] = 29, + [51] = 51, [52] = 52, [53] = 53, [54] = 54, @@ -975,162 +1008,172 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [96] = 96, [97] = 97, [98] = 98, - [99] = 28, - [100] = 55, - [101] = 54, - [102] = 66, - [103] = 67, - [104] = 52, - [105] = 56, - [106] = 53, - [107] = 79, - [108] = 69, - [109] = 80, - [110] = 70, - [111] = 71, - [112] = 74, - [113] = 68, - [114] = 81, - [115] = 75, - [116] = 76, - [117] = 72, - [118] = 62, - [119] = 73, - [120] = 60, - [121] = 59, - [122] = 61, - [123] = 64, - [124] = 63, - [125] = 95, - [126] = 57, - [127] = 77, - [128] = 92, + [99] = 99, + [100] = 100, + [101] = 101, + [102] = 102, + [103] = 51, + [104] = 58, + [105] = 59, + [106] = 70, + [107] = 69, + [108] = 52, + [109] = 56, + [110] = 57, + [111] = 55, + [112] = 54, + [113] = 53, + [114] = 90, + [115] = 74, + [116] = 67, + [117] = 68, + [118] = 60, + [119] = 79, + [120] = 80, + [121] = 81, + [122] = 62, + [123] = 63, + [124] = 76, + [125] = 64, + [126] = 75, + [127] = 82, + [128] = 78, [129] = 65, - [130] = 90, - [131] = 78, - [132] = 96, - [133] = 97, - [134] = 82, - [135] = 83, - [136] = 91, - [137] = 87, - [138] = 98, - [139] = 86, - [140] = 84, - [141] = 88, - [142] = 94, - [143] = 85, - [144] = 93, - [145] = 145, - [146] = 146, - [147] = 147, - [148] = 148, - [149] = 149, - [150] = 149, - [151] = 151, - [152] = 147, + [130] = 83, + [131] = 66, + [132] = 88, + [133] = 84, + [134] = 93, + [135] = 85, + [136] = 71, + [137] = 72, + [138] = 73, + [139] = 77, + [140] = 92, + [141] = 89, + [142] = 98, + [143] = 95, + [144] = 101, + [145] = 100, + [146] = 87, + [147] = 97, + [148] = 94, + [149] = 86, + [150] = 96, + [151] = 102, + [152] = 99, [153] = 153, [154] = 154, [155] = 155, - [156] = 154, + [156] = 156, [157] = 157, - [158] = 158, - [159] = 153, + [158] = 156, + [159] = 155, [160] = 160, [161] = 161, [162] = 162, - [163] = 163, - [164] = 160, + [163] = 162, + [164] = 164, [165] = 165, - [166] = 166, + [166] = 161, [167] = 167, - [168] = 162, - [169] = 166, - [170] = 165, - [171] = 163, - [172] = 167, + [168] = 168, + [169] = 169, + [170] = 170, + [171] = 171, + [172] = 169, [173] = 173, - [174] = 174, - [175] = 28, - [176] = 54, - [177] = 55, - [178] = 66, - [179] = 67, - [180] = 180, + [174] = 170, + [175] = 175, + [176] = 176, + [177] = 173, + [178] = 168, + [179] = 176, + [180] = 171, [181] = 181, [182] = 182, - [183] = 90, - [184] = 184, - [185] = 95, + [183] = 51, + [184] = 59, + [185] = 58, [186] = 186, [187] = 187, [188] = 188, - [189] = 188, - [190] = 92, - [191] = 187, - [192] = 186, - [193] = 184, - [194] = 194, - [195] = 194, - [196] = 196, - [197] = 197, - [198] = 196, - [199] = 199, - [200] = 200, - [201] = 201, + [189] = 69, + [190] = 70, + [191] = 191, + [192] = 192, + [193] = 193, + [194] = 93, + [195] = 195, + [196] = 90, + [197] = 88, + [198] = 193, + [199] = 192, + [200] = 191, + [201] = 195, [202] = 202, [203] = 203, - [204] = 202, - [205] = 203, + [204] = 204, + [205] = 204, [206] = 206, [207] = 206, [208] = 208, [209] = 209, [210] = 210, [211] = 211, - [212] = 210, + [212] = 211, [213] = 213, [214] = 213, - [215] = 215, + [215] = 209, [216] = 216, [217] = 217, - [218] = 209, - [219] = 215, + [218] = 218, + [219] = 219, [220] = 216, [221] = 221, - [222] = 222, - [223] = 223, + [222] = 218, + [223] = 219, [224] = 224, [225] = 225, - [226] = 226, - [227] = 227, + [226] = 221, + [227] = 225, [228] = 228, [229] = 229, [230] = 230, [231] = 231, [232] = 232, [233] = 233, - [234] = 229, - [235] = 229, - [236] = 230, - [237] = 231, - [238] = 231, - [239] = 239, + [234] = 234, + [235] = 235, + [236] = 235, + [237] = 237, + [238] = 238, + [239] = 233, [240] = 240, [241] = 241, - [242] = 242, + [242] = 233, [243] = 243, [244] = 244, - [245] = 245, - [246] = 246, - [247] = 239, + [245] = 240, + [246] = 240, + [247] = 247, [248] = 248, - [249] = 241, + [249] = 249, [250] = 250, [251] = 251, [252] = 252, - [253] = 250, - [254] = 252, + [253] = 253, + [254] = 254, + [255] = 254, + [256] = 247, + [257] = 257, + [258] = 251, + [259] = 259, + [260] = 250, + [261] = 261, + [262] = 252, + [263] = 263, + [264] = 264, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1640,95 +1683,108 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { 'f', 4, 'i', 5, 'l', 6, - 't', 7, - 'U', 8, - 'u', 8, + 's', 7, + 't', 8, + 'U', 9, + 'u', 9, ); END_STATE(); case 1: ACCEPT_TOKEN(aux_sym_signed_integer_token1); END_STATE(); case 2: - if (lookahead == 'e') ADVANCE(9); + if (lookahead == 'e') ADVANCE(10); END_STATE(); case 3: - if (lookahead == 'l') ADVANCE(10); + if (lookahead == 'l') ADVANCE(11); END_STATE(); case 4: - if (lookahead == 'a') ADVANCE(11); + if (lookahead == 'a') ADVANCE(12); END_STATE(); case 5: ACCEPT_TOKEN(aux_sym_signed_integer_token1); - if (lookahead == 'f') ADVANCE(12); - if (lookahead == 'n') ADVANCE(13); + if (lookahead == 'f') ADVANCE(13); + if (lookahead == 'n') ADVANCE(14); END_STATE(); case 6: - if (lookahead == 'e') ADVANCE(14); + if (lookahead == 'e') ADVANCE(15); END_STATE(); case 7: - if (lookahead == 'r') ADVANCE(15); + if (lookahead == 'e') ADVANCE(16); END_STATE(); case 8: - ACCEPT_TOKEN(aux_sym_unsigned_integer_token1); + if (lookahead == 'r') ADVANCE(17); END_STATE(); case 9: - if (lookahead == 'f') ADVANCE(16); + ACCEPT_TOKEN(aux_sym_unsigned_integer_token1); END_STATE(); case 10: - if (lookahead == 's') ADVANCE(17); + if (lookahead == 'f') ADVANCE(18); END_STATE(); case 11: - if (lookahead == 'l') ADVANCE(18); + if (lookahead == 's') ADVANCE(19); END_STATE(); case 12: - ACCEPT_TOKEN(anon_sym_if); + if (lookahead == 'l') ADVANCE(20); END_STATE(); case 13: - ACCEPT_TOKEN(anon_sym_in); + ACCEPT_TOKEN(anon_sym_if); END_STATE(); case 14: - if (lookahead == 't') ADVANCE(19); + ACCEPT_TOKEN(anon_sym_in); END_STATE(); case 15: - if (lookahead == 'u') ADVANCE(20); + if (lookahead == 't') ADVANCE(21); END_STATE(); case 16: - if (lookahead == 'a') ADVANCE(21); + if (lookahead == 'l') ADVANCE(22); END_STATE(); case 17: - if (lookahead == 'e') ADVANCE(22); + if (lookahead == 'u') ADVANCE(23); END_STATE(); case 18: - if (lookahead == 's') ADVANCE(23); + if (lookahead == 'a') ADVANCE(24); END_STATE(); case 19: - ACCEPT_TOKEN(anon_sym_let); + if (lookahead == 'e') ADVANCE(25); END_STATE(); case 20: - if (lookahead == 'e') ADVANCE(24); + if (lookahead == 's') ADVANCE(26); END_STATE(); case 21: - if (lookahead == 'u') ADVANCE(25); + ACCEPT_TOKEN(anon_sym_let); END_STATE(); case 22: - ACCEPT_TOKEN(anon_sym_else); + if (lookahead == 'f') ADVANCE(27); END_STATE(); case 23: - if (lookahead == 'e') ADVANCE(26); + if (lookahead == 'e') ADVANCE(28); END_STATE(); case 24: - ACCEPT_TOKEN(sym_true); + if (lookahead == 'u') ADVANCE(29); END_STATE(); case 25: - if (lookahead == 'l') ADVANCE(27); + ACCEPT_TOKEN(anon_sym_else); END_STATE(); case 26: - ACCEPT_TOKEN(sym_false); + if (lookahead == 'e') ADVANCE(30); END_STATE(); case 27: - if (lookahead == 't') ADVANCE(28); + ACCEPT_TOKEN(sym_self); END_STATE(); case 28: + ACCEPT_TOKEN(sym_true); + END_STATE(); + case 29: + if (lookahead == 'l') ADVANCE(31); + END_STATE(); + case 30: + ACCEPT_TOKEN(sym_false); + END_STATE(); + case 31: + if (lookahead == 't') ADVANCE(32); + END_STATE(); + case 32: ACCEPT_TOKEN(sym_default); END_STATE(); default: @@ -1836,22 +1892,22 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [96] = {.lex_state = 1}, [97] = {.lex_state = 1}, [98] = {.lex_state = 1}, - [99] = {.lex_state = 17}, - [100] = {.lex_state = 17}, - [101] = {.lex_state = 17}, - [102] = {.lex_state = 17}, + [99] = {.lex_state = 1}, + [100] = {.lex_state = 1}, + [101] = {.lex_state = 1}, + [102] = {.lex_state = 1}, [103] = {.lex_state = 17}, - [104] = {.lex_state = 18}, - [105] = {.lex_state = 18}, - [106] = {.lex_state = 18}, - [107] = {.lex_state = 18}, + [104] = {.lex_state = 17}, + [105] = {.lex_state = 17}, + [106] = {.lex_state = 17}, + [107] = {.lex_state = 17}, [108] = {.lex_state = 18}, [109] = {.lex_state = 18}, [110] = {.lex_state = 18}, [111] = {.lex_state = 18}, [112] = {.lex_state = 18}, [113] = {.lex_state = 18}, - [114] = {.lex_state = 18}, + [114] = {.lex_state = 17}, [115] = {.lex_state = 18}, [116] = {.lex_state = 18}, [117] = {.lex_state = 18}, @@ -1862,16 +1918,16 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [122] = {.lex_state = 18}, [123] = {.lex_state = 18}, [124] = {.lex_state = 18}, - [125] = {.lex_state = 17}, + [125] = {.lex_state = 18}, [126] = {.lex_state = 18}, [127] = {.lex_state = 18}, - [128] = {.lex_state = 17}, + [128] = {.lex_state = 18}, [129] = {.lex_state = 18}, - [130] = {.lex_state = 17}, + [130] = {.lex_state = 18}, [131] = {.lex_state = 18}, - [132] = {.lex_state = 18}, + [132] = {.lex_state = 17}, [133] = {.lex_state = 18}, - [134] = {.lex_state = 18}, + [134] = {.lex_state = 17}, [135] = {.lex_state = 18}, [136] = {.lex_state = 18}, [137] = {.lex_state = 18}, @@ -1897,14 +1953,14 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [157] = {.lex_state = 18}, [158] = {.lex_state = 18}, [159] = {.lex_state = 18}, - [160] = {.lex_state = 1}, - [161] = {.lex_state = 1}, - [162] = {.lex_state = 1}, - [163] = {.lex_state = 1}, - [164] = {.lex_state = 1}, - [165] = {.lex_state = 1}, - [166] = {.lex_state = 1}, - [167] = {.lex_state = 1}, + [160] = {.lex_state = 18}, + [161] = {.lex_state = 18}, + [162] = {.lex_state = 18}, + [163] = {.lex_state = 18}, + [164] = {.lex_state = 18}, + [165] = {.lex_state = 18}, + [166] = {.lex_state = 18}, + [167] = {.lex_state = 18}, [168] = {.lex_state = 1}, [169] = {.lex_state = 1}, [170] = {.lex_state = 1}, @@ -1912,40 +1968,40 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [172] = {.lex_state = 1}, [173] = {.lex_state = 1}, [174] = {.lex_state = 1}, - [175] = {.lex_state = 3}, - [176] = {.lex_state = 3}, - [177] = {.lex_state = 3}, - [178] = {.lex_state = 3}, - [179] = {.lex_state = 3}, - [180] = {.lex_state = 4}, - [181] = {.lex_state = 4}, - [182] = {.lex_state = 4}, + [175] = {.lex_state = 1}, + [176] = {.lex_state = 1}, + [177] = {.lex_state = 1}, + [178] = {.lex_state = 1}, + [179] = {.lex_state = 1}, + [180] = {.lex_state = 1}, + [181] = {.lex_state = 1}, + [182] = {.lex_state = 1}, [183] = {.lex_state = 3}, [184] = {.lex_state = 3}, [185] = {.lex_state = 3}, - [186] = {.lex_state = 3}, - [187] = {.lex_state = 3}, - [188] = {.lex_state = 3}, + [186] = {.lex_state = 4}, + [187] = {.lex_state = 4}, + [188] = {.lex_state = 4}, [189] = {.lex_state = 3}, [190] = {.lex_state = 3}, - [191] = {.lex_state = 2}, - [192] = {.lex_state = 2}, - [193] = {.lex_state = 2}, - [194] = {.lex_state = 2}, - [195] = {.lex_state = 2}, - [196] = {.lex_state = 2}, - [197] = {.lex_state = 2}, - [198] = {.lex_state = 2}, - [199] = {.lex_state = 0}, + [191] = {.lex_state = 3}, + [192] = {.lex_state = 3}, + [193] = {.lex_state = 3}, + [194] = {.lex_state = 3}, + [195] = {.lex_state = 3}, + [196] = {.lex_state = 3}, + [197] = {.lex_state = 3}, + [198] = {.lex_state = 3}, + [199] = {.lex_state = 2}, [200] = {.lex_state = 2}, - [201] = {.lex_state = 0}, - [202] = {.lex_state = 0}, + [201] = {.lex_state = 2}, + [202] = {.lex_state = 2}, [203] = {.lex_state = 0}, - [204] = {.lex_state = 0}, - [205] = {.lex_state = 0}, - [206] = {.lex_state = 0}, - [207] = {.lex_state = 0}, - [208] = {.lex_state = 0}, + [204] = {.lex_state = 2}, + [205] = {.lex_state = 2}, + [206] = {.lex_state = 2}, + [207] = {.lex_state = 2}, + [208] = {.lex_state = 2}, [209] = {.lex_state = 0}, [210] = {.lex_state = 0}, [211] = {.lex_state = 0}, @@ -1968,30 +2024,40 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [228] = {.lex_state = 0}, [229] = {.lex_state = 0}, [230] = {.lex_state = 0}, - [231] = {.lex_state = 17}, + [231] = {.lex_state = 0}, [232] = {.lex_state = 0}, [233] = {.lex_state = 0}, [234] = {.lex_state = 0}, [235] = {.lex_state = 0}, [236] = {.lex_state = 0}, - [237] = {.lex_state = 17}, - [238] = {.lex_state = 17}, + [237] = {.lex_state = 0}, + [238] = {.lex_state = 0}, [239] = {.lex_state = 0}, - [240] = {.lex_state = 18}, + [240] = {.lex_state = 17}, [241] = {.lex_state = 0}, - [242] = {.lex_state = 17}, + [242] = {.lex_state = 0}, [243] = {.lex_state = 0}, [244] = {.lex_state = 0}, - [245] = {.lex_state = 0}, - [246] = {.lex_state = 0}, + [245] = {.lex_state = 17}, + [246] = {.lex_state = 17}, [247] = {.lex_state = 0}, [248] = {.lex_state = 0}, [249] = {.lex_state = 0}, [250] = {.lex_state = 0}, - [251] = {.lex_state = 4}, + [251] = {.lex_state = 0}, [252] = {.lex_state = 0}, [253] = {.lex_state = 0}, [254] = {.lex_state = 0}, + [255] = {.lex_state = 0}, + [256] = {.lex_state = 0}, + [257] = {.lex_state = 17}, + [258] = {.lex_state = 0}, + [259] = {.lex_state = 18}, + [260] = {.lex_state = 0}, + [261] = {.lex_state = 0}, + [262] = {.lex_state = 0}, + [263] = {.lex_state = 4}, + [264] = {.lex_state = 0}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -2002,6 +2068,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(1), [sym_default] = ACTIONS(1), + [sym_self] = ACTIONS(1), [aux_sym_base_ten_token1] = ACTIONS(1), [aux_sym_octal_token1] = ACTIONS(1), [aux_sym_hex_token1] = ACTIONS(1), @@ -2053,344 +2120,356 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_GT_GT_GT] = ACTIONS(1), }, [STATE(1)] = { - [sym_source_file] = STATE(243), - [sym_base_ten] = STATE(227), - [sym_octal] = STATE(227), - [sym_hex] = STATE(227), - [sym_binary] = STATE(227), - [sym_integer] = STATE(234), - [sym_signed_integer] = STATE(143), - [sym_unsigned_integer] = STATE(143), - [sym_number] = STATE(101), - [sym__float] = STATE(100), - [sym_scalar] = STATE(143), - [sym_boolean] = STATE(143), - [sym_function_call] = STATE(143), - [sym_method_call] = STATE(143), - [sym_expression] = STATE(158), - [sym_unary_expression] = STATE(143), - [sym_binary_expression] = STATE(143), - [sym_if] = STATE(143), - [sym_let_in] = STATE(143), - [sym_path] = STATE(143), - [sym_parenthesis] = STATE(143), - [sym_list] = STATE(143), - [sym_struct_definition] = STATE(121), - [sym_dictionary_construction] = STATE(143), - [sym_closure_definition] = STATE(143), - [sym_formula] = STATE(143), + [sym_source_file] = STATE(249), + [sym_base_ten] = STATE(237), + [sym_octal] = STATE(237), + [sym_hex] = STATE(237), + [sym_binary] = STATE(237), + [sym_integer] = STATE(242), + [sym_signed_integer] = STATE(150), + [sym_unsigned_integer] = STATE(150), + [sym_number] = STATE(104), + [sym__float] = STATE(105), + [sym_scalar] = STATE(150), + [sym_boolean] = STATE(150), + [sym_function_call] = STATE(150), + [sym_method_call] = STATE(150), + [sym_expression] = STATE(164), + [sym_unary_expression] = STATE(150), + [sym_binary_expression] = STATE(150), + [sym_if] = STATE(150), + [sym_let_in] = STATE(150), + [sym_identity_path] = STATE(150), + [sym_self_path] = STATE(150), + [sym_parenthesis] = STATE(150), + [sym_list] = STATE(150), + [sym_struct_definition] = STATE(118), + [sym_dictionary_construction] = STATE(150), + [sym_closure_definition] = STATE(150), + [sym_formula] = STATE(150), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), [sym_default] = ACTIONS(9), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [sym_true] = ACTIONS(19), - [sym_false] = ACTIONS(19), - [anon_sym_DASH] = ACTIONS(21), - [anon_sym_PLUS] = ACTIONS(21), - [anon_sym_BANG] = ACTIONS(21), - [anon_sym_if] = ACTIONS(23), - [anon_sym_let] = ACTIONS(25), - [anon_sym_LPAREN] = ACTIONS(27), - [anon_sym_LBRACK] = ACTIONS(29), - [anon_sym_LT_LT_LT] = ACTIONS(31), + [sym_self] = ACTIONS(11), + [aux_sym_base_ten_token1] = ACTIONS(13), + [aux_sym_octal_token1] = ACTIONS(15), + [aux_sym_hex_token1] = ACTIONS(17), + [aux_sym_binary_token1] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_DASH] = ACTIONS(23), + [anon_sym_PLUS] = ACTIONS(23), + [anon_sym_BANG] = ACTIONS(23), + [anon_sym_if] = ACTIONS(25), + [anon_sym_let] = ACTIONS(27), + [anon_sym_LPAREN] = ACTIONS(29), + [anon_sym_LBRACK] = ACTIONS(31), + [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(2)] = { - [sym_base_ten] = STATE(227), - [sym_octal] = STATE(227), - [sym_hex] = STATE(227), - [sym_binary] = STATE(227), - [sym_integer] = STATE(234), - [sym_signed_integer] = STATE(143), - [sym_unsigned_integer] = STATE(143), - [sym_number] = STATE(101), - [sym__float] = STATE(100), - [sym_scalar] = STATE(143), - [sym_boolean] = STATE(143), - [sym_function_call] = STATE(143), - [sym_method_call] = STATE(143), - [sym_expression] = STATE(153), - [sym_unary_expression] = STATE(143), - [sym_binary_expression] = STATE(143), - [sym_if] = STATE(143), - [sym_let_in] = STATE(143), - [sym_path] = STATE(143), - [sym_parenthesis] = STATE(143), - [sym_list] = STATE(143), - [sym_struct_definition] = STATE(121), - [sym_dictionary_construction] = STATE(89), - [sym_closure_definition] = STATE(143), - [sym_formula] = STATE(143), + [sym_base_ten] = STATE(237), + [sym_octal] = STATE(237), + [sym_hex] = STATE(237), + [sym_binary] = STATE(237), + [sym_integer] = STATE(242), + [sym_signed_integer] = STATE(150), + [sym_unsigned_integer] = STATE(150), + [sym_number] = STATE(104), + [sym__float] = STATE(105), + [sym_scalar] = STATE(150), + [sym_boolean] = STATE(150), + [sym_function_call] = STATE(150), + [sym_method_call] = STATE(150), + [sym_expression] = STATE(161), + [sym_unary_expression] = STATE(150), + [sym_binary_expression] = STATE(150), + [sym_if] = STATE(150), + [sym_let_in] = STATE(150), + [sym_identity_path] = STATE(150), + [sym_self_path] = STATE(150), + [sym_parenthesis] = STATE(150), + [sym_list] = STATE(150), + [sym_struct_definition] = STATE(118), + [sym_dictionary_construction] = STATE(91), + [sym_closure_definition] = STATE(150), + [sym_formula] = STATE(150), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), [sym_default] = ACTIONS(9), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [sym_true] = ACTIONS(19), - [sym_false] = ACTIONS(19), - [anon_sym_COLON] = ACTIONS(33), - [anon_sym_DASH] = ACTIONS(35), - [anon_sym_PLUS] = ACTIONS(35), - [anon_sym_BANG] = ACTIONS(37), - [anon_sym_STAR_STAR] = ACTIONS(39), - [anon_sym_STAR] = ACTIONS(41), - [anon_sym_SLASH] = ACTIONS(41), - [anon_sym_SLASH_SLASH] = ACTIONS(43), - [anon_sym_LT_LT] = ACTIONS(45), - [anon_sym_GT_GT] = ACTIONS(47), - [anon_sym_AMP] = ACTIONS(49), - [anon_sym_PIPE] = ACTIONS(51), - [anon_sym_CARET] = ACTIONS(53), - [anon_sym_GT] = ACTIONS(55), - [anon_sym_GT_EQ] = ACTIONS(57), - [anon_sym_EQ_EQ] = ACTIONS(57), - [anon_sym_LT_EQ] = ACTIONS(57), - [anon_sym_LT] = ACTIONS(55), - [anon_sym_BANG_EQ] = ACTIONS(57), - [anon_sym_AMP_AMP] = ACTIONS(59), - [anon_sym_PIPE_PIPE] = ACTIONS(61), - [anon_sym_DOT_DOT] = ACTIONS(63), - [anon_sym_DOT_DOT_EQ] = ACTIONS(65), - [anon_sym_if] = ACTIONS(23), - [anon_sym_let] = ACTIONS(25), - [anon_sym_LPAREN] = ACTIONS(67), - [anon_sym_LBRACK] = ACTIONS(29), - [anon_sym_LT_LT_LT] = ACTIONS(31), + [sym_self] = ACTIONS(11), + [aux_sym_base_ten_token1] = ACTIONS(13), + [aux_sym_octal_token1] = ACTIONS(15), + [aux_sym_hex_token1] = ACTIONS(17), + [aux_sym_binary_token1] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_COLON] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(37), + [anon_sym_PLUS] = ACTIONS(37), + [anon_sym_BANG] = ACTIONS(39), + [anon_sym_STAR_STAR] = ACTIONS(41), + [anon_sym_STAR] = ACTIONS(43), + [anon_sym_SLASH] = ACTIONS(43), + [anon_sym_SLASH_SLASH] = ACTIONS(45), + [anon_sym_LT_LT] = ACTIONS(47), + [anon_sym_GT_GT] = ACTIONS(49), + [anon_sym_AMP] = ACTIONS(51), + [anon_sym_PIPE] = ACTIONS(53), + [anon_sym_CARET] = ACTIONS(55), + [anon_sym_GT] = ACTIONS(57), + [anon_sym_GT_EQ] = ACTIONS(59), + [anon_sym_EQ_EQ] = ACTIONS(59), + [anon_sym_LT_EQ] = ACTIONS(59), + [anon_sym_LT] = ACTIONS(57), + [anon_sym_BANG_EQ] = ACTIONS(59), + [anon_sym_AMP_AMP] = ACTIONS(61), + [anon_sym_PIPE_PIPE] = ACTIONS(63), + [anon_sym_DOT_DOT] = ACTIONS(65), + [anon_sym_DOT_DOT_EQ] = ACTIONS(67), + [anon_sym_if] = ACTIONS(25), + [anon_sym_let] = ACTIONS(27), + [anon_sym_LPAREN] = ACTIONS(69), + [anon_sym_LBRACK] = ACTIONS(31), + [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(3)] = { - [sym_base_ten] = STATE(227), - [sym_octal] = STATE(227), - [sym_hex] = STATE(227), - [sym_binary] = STATE(227), - [sym_integer] = STATE(234), - [sym_signed_integer] = STATE(143), - [sym_unsigned_integer] = STATE(143), - [sym_number] = STATE(101), - [sym__float] = STATE(100), - [sym_scalar] = STATE(143), - [sym_boolean] = STATE(143), - [sym_function_call] = STATE(143), - [sym_method_call] = STATE(143), - [sym_expression] = STATE(159), - [sym_unary_expression] = STATE(143), - [sym_binary_expression] = STATE(143), - [sym_if] = STATE(143), - [sym_let_in] = STATE(143), - [sym_path] = STATE(143), - [sym_parenthesis] = STATE(143), - [sym_list] = STATE(143), - [sym_struct_definition] = STATE(121), - [sym_dictionary_construction] = STATE(89), - [sym_closure_definition] = STATE(143), - [sym_formula] = STATE(143), + [sym_base_ten] = STATE(237), + [sym_octal] = STATE(237), + [sym_hex] = STATE(237), + [sym_binary] = STATE(237), + [sym_integer] = STATE(242), + [sym_signed_integer] = STATE(150), + [sym_unsigned_integer] = STATE(150), + [sym_number] = STATE(104), + [sym__float] = STATE(105), + [sym_scalar] = STATE(150), + [sym_boolean] = STATE(150), + [sym_function_call] = STATE(150), + [sym_method_call] = STATE(150), + [sym_expression] = STATE(166), + [sym_unary_expression] = STATE(150), + [sym_binary_expression] = STATE(150), + [sym_if] = STATE(150), + [sym_let_in] = STATE(150), + [sym_identity_path] = STATE(150), + [sym_self_path] = STATE(150), + [sym_parenthesis] = STATE(150), + [sym_list] = STATE(150), + [sym_struct_definition] = STATE(118), + [sym_dictionary_construction] = STATE(91), + [sym_closure_definition] = STATE(150), + [sym_formula] = STATE(150), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), [sym_default] = ACTIONS(9), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [sym_true] = ACTIONS(19), - [sym_false] = ACTIONS(19), - [anon_sym_COLON] = ACTIONS(33), - [anon_sym_DASH] = ACTIONS(35), - [anon_sym_PLUS] = ACTIONS(35), - [anon_sym_BANG] = ACTIONS(37), - [anon_sym_STAR_STAR] = ACTIONS(39), - [anon_sym_STAR] = ACTIONS(41), - [anon_sym_SLASH] = ACTIONS(41), - [anon_sym_SLASH_SLASH] = ACTIONS(43), - [anon_sym_LT_LT] = ACTIONS(45), - [anon_sym_GT_GT] = ACTIONS(47), - [anon_sym_AMP] = ACTIONS(49), - [anon_sym_PIPE] = ACTIONS(51), - [anon_sym_CARET] = ACTIONS(53), - [anon_sym_GT] = ACTIONS(55), - [anon_sym_GT_EQ] = ACTIONS(57), - [anon_sym_EQ_EQ] = ACTIONS(57), - [anon_sym_LT_EQ] = ACTIONS(57), - [anon_sym_LT] = ACTIONS(55), - [anon_sym_BANG_EQ] = ACTIONS(57), - [anon_sym_AMP_AMP] = ACTIONS(59), - [anon_sym_PIPE_PIPE] = ACTIONS(61), - [anon_sym_DOT_DOT] = ACTIONS(63), - [anon_sym_DOT_DOT_EQ] = ACTIONS(65), - [anon_sym_if] = ACTIONS(23), - [anon_sym_let] = ACTIONS(25), - [anon_sym_LPAREN] = ACTIONS(67), - [anon_sym_LBRACK] = ACTIONS(29), - [anon_sym_LT_LT_LT] = ACTIONS(31), + [sym_self] = ACTIONS(11), + [aux_sym_base_ten_token1] = ACTIONS(13), + [aux_sym_octal_token1] = ACTIONS(15), + [aux_sym_hex_token1] = ACTIONS(17), + [aux_sym_binary_token1] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_COLON] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(37), + [anon_sym_PLUS] = ACTIONS(37), + [anon_sym_BANG] = ACTIONS(39), + [anon_sym_STAR_STAR] = ACTIONS(41), + [anon_sym_STAR] = ACTIONS(43), + [anon_sym_SLASH] = ACTIONS(43), + [anon_sym_SLASH_SLASH] = ACTIONS(45), + [anon_sym_LT_LT] = ACTIONS(47), + [anon_sym_GT_GT] = ACTIONS(49), + [anon_sym_AMP] = ACTIONS(51), + [anon_sym_PIPE] = ACTIONS(53), + [anon_sym_CARET] = ACTIONS(55), + [anon_sym_GT] = ACTIONS(57), + [anon_sym_GT_EQ] = ACTIONS(59), + [anon_sym_EQ_EQ] = ACTIONS(59), + [anon_sym_LT_EQ] = ACTIONS(59), + [anon_sym_LT] = ACTIONS(57), + [anon_sym_BANG_EQ] = ACTIONS(59), + [anon_sym_AMP_AMP] = ACTIONS(61), + [anon_sym_PIPE_PIPE] = ACTIONS(63), + [anon_sym_DOT_DOT] = ACTIONS(65), + [anon_sym_DOT_DOT_EQ] = ACTIONS(67), + [anon_sym_if] = ACTIONS(25), + [anon_sym_let] = ACTIONS(27), + [anon_sym_LPAREN] = ACTIONS(69), + [anon_sym_LBRACK] = ACTIONS(31), + [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(4)] = { - [sym_base_ten] = STATE(227), - [sym_octal] = STATE(227), - [sym_hex] = STATE(227), - [sym_binary] = STATE(227), - [sym_integer] = STATE(234), - [sym_signed_integer] = STATE(143), - [sym_unsigned_integer] = STATE(143), - [sym_number] = STATE(101), - [sym__float] = STATE(100), - [sym_scalar] = STATE(143), - [sym_boolean] = STATE(143), - [sym_function_call] = STATE(143), - [sym_method_call] = STATE(143), - [sym_expression] = STATE(154), - [sym_unary_expression] = STATE(143), - [sym_binary_expression] = STATE(143), - [sym_if] = STATE(143), - [sym_let_in] = STATE(143), - [sym_path] = STATE(143), - [sym_parenthesis] = STATE(143), - [sym_list] = STATE(143), - [sym_struct_member] = STATE(225), - [sym__struct_final_element] = STATE(247), - [sym_struct_definition] = STATE(121), - [sym_dictionary_member_assignment] = STATE(212), - [sym_dictionary_construction] = STATE(143), - [sym_closure_definition] = STATE(143), - [sym_formula] = STATE(143), - [aux_sym_struct_definition_repeat1] = STATE(198), - [sym_identifier] = ACTIONS(69), + [sym_base_ten] = STATE(237), + [sym_octal] = STATE(237), + [sym_hex] = STATE(237), + [sym_binary] = STATE(237), + [sym_integer] = STATE(242), + [sym_signed_integer] = STATE(150), + [sym_unsigned_integer] = STATE(150), + [sym_number] = STATE(104), + [sym__float] = STATE(105), + [sym_scalar] = STATE(150), + [sym_boolean] = STATE(150), + [sym_function_call] = STATE(150), + [sym_method_call] = STATE(150), + [sym_expression] = STATE(163), + [sym_unary_expression] = STATE(150), + [sym_binary_expression] = STATE(150), + [sym_if] = STATE(150), + [sym_let_in] = STATE(150), + [sym_identity_path] = STATE(150), + [sym_self_path] = STATE(150), + [sym_parenthesis] = STATE(150), + [sym_list] = STATE(150), + [sym_struct_member] = STATE(234), + [sym__struct_final_element] = STATE(254), + [sym_struct_definition] = STATE(118), + [sym_dictionary_member_assignment] = STATE(216), + [sym_dictionary_construction] = STATE(150), + [sym_closure_definition] = STATE(150), + [sym_formula] = STATE(150), + [aux_sym_struct_definition_repeat1] = STATE(204), + [sym_identifier] = ACTIONS(71), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), [sym_default] = ACTIONS(9), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [sym_true] = ACTIONS(19), - [sym_false] = ACTIONS(19), - [anon_sym_DASH] = ACTIONS(21), - [anon_sym_PLUS] = ACTIONS(21), - [anon_sym_BANG] = ACTIONS(21), - [anon_sym_if] = ACTIONS(23), - [anon_sym_let] = ACTIONS(25), - [anon_sym_LPAREN] = ACTIONS(27), - [anon_sym_RPAREN] = ACTIONS(71), - [anon_sym_LBRACK] = ACTIONS(29), - [sym_varadic_dots] = ACTIONS(73), - [anon_sym_LT_LT_LT] = ACTIONS(31), + [sym_self] = ACTIONS(11), + [aux_sym_base_ten_token1] = ACTIONS(13), + [aux_sym_octal_token1] = ACTIONS(15), + [aux_sym_hex_token1] = ACTIONS(17), + [aux_sym_binary_token1] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_DASH] = ACTIONS(23), + [anon_sym_PLUS] = ACTIONS(23), + [anon_sym_BANG] = ACTIONS(23), + [anon_sym_if] = ACTIONS(25), + [anon_sym_let] = ACTIONS(27), + [anon_sym_LPAREN] = ACTIONS(29), + [anon_sym_RPAREN] = ACTIONS(73), + [anon_sym_LBRACK] = ACTIONS(31), + [sym_varadic_dots] = ACTIONS(75), + [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(5)] = { - [sym_base_ten] = STATE(227), - [sym_octal] = STATE(227), - [sym_hex] = STATE(227), - [sym_binary] = STATE(227), - [sym_integer] = STATE(234), - [sym_signed_integer] = STATE(143), - [sym_unsigned_integer] = STATE(143), - [sym_number] = STATE(101), - [sym__float] = STATE(100), - [sym_scalar] = STATE(143), - [sym_boolean] = STATE(143), - [sym_function_call] = STATE(143), - [sym_method_call] = STATE(143), - [sym_expression] = STATE(154), - [sym_unary_expression] = STATE(143), - [sym_binary_expression] = STATE(143), - [sym_if] = STATE(143), - [sym_let_in] = STATE(143), - [sym_path] = STATE(143), - [sym_parenthesis] = STATE(143), - [sym_list] = STATE(143), - [sym_struct_member] = STATE(225), - [sym__struct_final_element] = STATE(247), - [sym_struct_definition] = STATE(121), - [sym_dictionary_member_assignment] = STATE(210), - [sym_dictionary_construction] = STATE(143), - [sym_closure_definition] = STATE(143), - [sym_formula] = STATE(143), - [aux_sym_struct_definition_repeat1] = STATE(198), - [sym_identifier] = ACTIONS(69), + [sym_base_ten] = STATE(237), + [sym_octal] = STATE(237), + [sym_hex] = STATE(237), + [sym_binary] = STATE(237), + [sym_integer] = STATE(242), + [sym_signed_integer] = STATE(150), + [sym_unsigned_integer] = STATE(150), + [sym_number] = STATE(104), + [sym__float] = STATE(105), + [sym_scalar] = STATE(150), + [sym_boolean] = STATE(150), + [sym_function_call] = STATE(150), + [sym_method_call] = STATE(150), + [sym_expression] = STATE(162), + [sym_unary_expression] = STATE(150), + [sym_binary_expression] = STATE(150), + [sym_if] = STATE(150), + [sym_let_in] = STATE(150), + [sym_identity_path] = STATE(150), + [sym_self_path] = STATE(150), + [sym_parenthesis] = STATE(150), + [sym_list] = STATE(150), + [sym_struct_member] = STATE(234), + [sym__struct_final_element] = STATE(255), + [sym_struct_definition] = STATE(118), + [sym_dictionary_member_assignment] = STATE(220), + [sym_dictionary_construction] = STATE(150), + [sym_closure_definition] = STATE(150), + [sym_formula] = STATE(150), + [aux_sym_struct_definition_repeat1] = STATE(205), + [sym_identifier] = ACTIONS(71), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), [sym_default] = ACTIONS(9), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [sym_true] = ACTIONS(19), - [sym_false] = ACTIONS(19), - [anon_sym_DASH] = ACTIONS(21), - [anon_sym_PLUS] = ACTIONS(21), - [anon_sym_BANG] = ACTIONS(21), - [anon_sym_if] = ACTIONS(23), - [anon_sym_let] = ACTIONS(25), - [anon_sym_LPAREN] = ACTIONS(27), - [anon_sym_RPAREN] = ACTIONS(75), - [anon_sym_LBRACK] = ACTIONS(29), - [sym_varadic_dots] = ACTIONS(73), - [anon_sym_LT_LT_LT] = ACTIONS(31), + [sym_self] = ACTIONS(11), + [aux_sym_base_ten_token1] = ACTIONS(13), + [aux_sym_octal_token1] = ACTIONS(15), + [aux_sym_hex_token1] = ACTIONS(17), + [aux_sym_binary_token1] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_DASH] = ACTIONS(23), + [anon_sym_PLUS] = ACTIONS(23), + [anon_sym_BANG] = ACTIONS(23), + [anon_sym_if] = ACTIONS(25), + [anon_sym_let] = ACTIONS(27), + [anon_sym_LPAREN] = ACTIONS(29), + [anon_sym_RPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(31), + [sym_varadic_dots] = ACTIONS(75), + [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(6)] = { - [sym_base_ten] = STATE(227), - [sym_octal] = STATE(227), - [sym_hex] = STATE(227), - [sym_binary] = STATE(227), - [sym_integer] = STATE(234), - [sym_signed_integer] = STATE(143), - [sym_unsigned_integer] = STATE(143), - [sym_number] = STATE(101), - [sym__float] = STATE(100), - [sym_scalar] = STATE(143), - [sym_boolean] = STATE(143), - [sym_function_call] = STATE(143), - [sym_method_call] = STATE(143), - [sym_expression] = STATE(156), - [sym_unary_expression] = STATE(143), - [sym_binary_expression] = STATE(143), - [sym_if] = STATE(143), - [sym_let_in] = STATE(143), - [sym_path] = STATE(143), - [sym_parenthesis] = STATE(143), - [sym_list] = STATE(143), - [sym_struct_member] = STATE(225), - [sym__struct_final_element] = STATE(239), - [sym_struct_definition] = STATE(121), - [sym_dictionary_member_assignment] = STATE(212), - [sym_dictionary_construction] = STATE(143), - [sym_closure_definition] = STATE(143), - [sym_formula] = STATE(143), - [aux_sym_struct_definition_repeat1] = STATE(196), - [sym_identifier] = ACTIONS(69), + [sym_base_ten] = STATE(237), + [sym_octal] = STATE(237), + [sym_hex] = STATE(237), + [sym_binary] = STATE(237), + [sym_integer] = STATE(242), + [sym_signed_integer] = STATE(150), + [sym_unsigned_integer] = STATE(150), + [sym_number] = STATE(104), + [sym__float] = STATE(105), + [sym_scalar] = STATE(150), + [sym_boolean] = STATE(150), + [sym_function_call] = STATE(150), + [sym_method_call] = STATE(150), + [sym_expression] = STATE(163), + [sym_unary_expression] = STATE(150), + [sym_binary_expression] = STATE(150), + [sym_if] = STATE(150), + [sym_let_in] = STATE(150), + [sym_identity_path] = STATE(150), + [sym_self_path] = STATE(150), + [sym_parenthesis] = STATE(150), + [sym_list] = STATE(150), + [sym_struct_member] = STATE(234), + [sym__struct_final_element] = STATE(254), + [sym_struct_definition] = STATE(118), + [sym_dictionary_member_assignment] = STATE(220), + [sym_dictionary_construction] = STATE(150), + [sym_closure_definition] = STATE(150), + [sym_formula] = STATE(150), + [aux_sym_struct_definition_repeat1] = STATE(204), + [sym_identifier] = ACTIONS(71), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), [sym_default] = ACTIONS(9), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [sym_true] = ACTIONS(19), - [sym_false] = ACTIONS(19), - [anon_sym_DASH] = ACTIONS(21), - [anon_sym_PLUS] = ACTIONS(21), - [anon_sym_BANG] = ACTIONS(21), - [anon_sym_if] = ACTIONS(23), - [anon_sym_let] = ACTIONS(25), - [anon_sym_LPAREN] = ACTIONS(27), - [anon_sym_RPAREN] = ACTIONS(71), - [anon_sym_LBRACK] = ACTIONS(29), - [sym_varadic_dots] = ACTIONS(73), - [anon_sym_LT_LT_LT] = ACTIONS(31), + [sym_self] = ACTIONS(11), + [aux_sym_base_ten_token1] = ACTIONS(13), + [aux_sym_octal_token1] = ACTIONS(15), + [aux_sym_hex_token1] = ACTIONS(17), + [aux_sym_binary_token1] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_DASH] = ACTIONS(23), + [anon_sym_PLUS] = ACTIONS(23), + [anon_sym_BANG] = ACTIONS(23), + [anon_sym_if] = ACTIONS(25), + [anon_sym_let] = ACTIONS(27), + [anon_sym_LPAREN] = ACTIONS(29), + [anon_sym_RPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(31), + [sym_varadic_dots] = ACTIONS(75), + [anon_sym_LT_LT_LT] = ACTIONS(33), }, }; static const uint16_t ts_small_parse_table[] = { - [0] = 24, + [0] = 25, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2398,53 +2477,55 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - ACTIONS(77), 1, + ACTIONS(79), 1, anon_sym_RBRACK, - STATE(8), 1, + STATE(9), 1, aux_sym_list_repeat1, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(147), 1, + STATE(156), 1, sym_expression, - STATE(234), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2455,67 +2536,70 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [95] = 24, - ACTIONS(5), 1, + [99] = 25, + ACTIONS(81), 1, sym_identifier, - ACTIONS(7), 1, + ACTIONS(84), 1, sym_string, - ACTIONS(9), 1, + ACTIONS(87), 1, sym_default, - ACTIONS(11), 1, + ACTIONS(90), 1, + sym_self, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(96), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(99), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(102), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(111), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(114), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(120), 1, anon_sym_LBRACK, - ACTIONS(31), 1, - anon_sym_LT_LT_LT, - ACTIONS(79), 1, + ACTIONS(123), 1, anon_sym_RBRACK, - STATE(11), 1, + ACTIONS(125), 1, + anon_sym_LT_LT_LT, + STATE(8), 1, aux_sym_list_repeat1, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(149), 1, + STATE(167), 1, sym_expression, - STATE(234), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(105), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(108), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2526,13 +2610,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [190] = 24, + [198] = 25, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2540,53 +2625,55 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - ACTIONS(81), 1, + ACTIONS(128), 1, anon_sym_RBRACK, - STATE(10), 1, + STATE(8), 1, aux_sym_list_repeat1, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(152), 1, + STATE(155), 1, sym_expression, - STATE(234), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2597,13 +2684,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [285] = 24, + [297] = 25, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2611,53 +2699,55 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - ACTIONS(83), 1, + ACTIONS(130), 1, anon_sym_RBRACK, STATE(11), 1, aux_sym_list_repeat1, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(150), 1, + STATE(158), 1, sym_expression, - STATE(234), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2668,67 +2758,70 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [380] = 24, - ACTIONS(85), 1, + [396] = 25, + ACTIONS(5), 1, sym_identifier, - ACTIONS(88), 1, + ACTIONS(7), 1, sym_string, - ACTIONS(91), 1, + ACTIONS(9), 1, sym_default, - ACTIONS(94), 1, + ACTIONS(11), 1, + sym_self, + ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(97), 1, + ACTIONS(15), 1, aux_sym_octal_token1, - ACTIONS(100), 1, + ACTIONS(17), 1, aux_sym_hex_token1, - ACTIONS(103), 1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(112), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(115), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(118), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(121), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(124), 1, - anon_sym_RBRACK, - ACTIONS(126), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(11), 1, + ACTIONS(132), 1, + anon_sym_RBRACK, + STATE(8), 1, aux_sym_list_repeat1, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(155), 1, + STATE(159), 1, sym_expression, - STATE(234), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(106), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(109), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2739,13 +2832,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [475] = 22, + [495] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2753,49 +2847,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(114), 1, - sym_expression, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(234), 1, + STATE(133), 1, + sym_expression, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2806,13 +2902,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [564] = 22, + [588] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2820,49 +2917,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(112), 1, - sym_expression, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(234), 1, + STATE(128), 1, + sym_expression, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2873,13 +2972,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [653] = 22, + [681] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2887,49 +2987,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(115), 1, - sym_expression, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(234), 1, + STATE(119), 1, + sym_expression, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2940,13 +3042,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [742] = 22, + [774] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2954,49 +3057,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(116), 1, - sym_expression, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(234), 1, + STATE(120), 1, + sym_expression, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3007,13 +3112,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [831] = 22, + [867] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3021,49 +3127,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(126), 1, + STATE(121), 1, sym_expression, - STATE(234), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3074,63 +3182,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [920] = 22, - ACTIONS(5), 1, + [960] = 23, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(7), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(9), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(11), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(58), 1, sym_number, - STATE(121), 1, + STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(127), 1, + STATE(61), 1, sym_expression, - STATE(234), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3141,63 +3252,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1009] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(129), 1, + [1053] = 23, + ACTIONS(5), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(7), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(9), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(11), 1, + sym_self, + ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(104), 1, sym_number, - STATE(55), 1, + STATE(105), 1, sym__float, - STATE(58), 1, - sym_expression, - STATE(59), 1, + STATE(118), 1, sym_struct_definition, - STATE(229), 1, + STATE(165), 1, + sym_expression, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3208,13 +3322,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1098] = 22, + [1146] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3222,49 +3337,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(157), 1, + STATE(127), 1, sym_expression, - STATE(234), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3275,13 +3392,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1187] = 22, + [1239] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3289,49 +3407,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(131), 1, + STATE(154), 1, sym_expression, - STATE(234), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3342,13 +3462,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1276] = 22, + [1332] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3356,49 +3477,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(146), 1, + STATE(160), 1, sym_expression, - STATE(234), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3409,13 +3532,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1365] = 22, + [1425] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3423,49 +3547,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(151), 1, + STATE(131), 1, sym_expression, - STATE(234), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3476,13 +3602,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1454] = 22, + [1518] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3490,49 +3617,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(124), 1, + STATE(122), 1, sym_expression, - STATE(234), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3543,13 +3672,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1543] = 22, + [1611] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3557,49 +3687,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(109), 1, - sym_expression, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(234), 1, + STATE(135), 1, + sym_expression, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3610,13 +3742,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1632] = 22, + [1704] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3624,49 +3757,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(120), 1, - sym_expression, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(234), 1, + STATE(157), 1, + sym_expression, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3677,63 +3812,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1721] = 22, - ACTIONS(5), 1, + [1797] = 23, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(7), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(9), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(11), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(58), 1, sym_number, - STATE(121), 1, + STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(148), 1, + STATE(62), 1, sym_expression, - STATE(234), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3744,63 +3882,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1810] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [1890] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(2), 1, + STATE(3), 1, sym_expression, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3811,112 +3952,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1899] = 4, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(155), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(151), 18, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - anon_sym_DOT, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(153), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - sym_unit_quote, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [1952] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [1983] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, - sym_struct_definition, + sym__float, STATE(60), 1, + sym_struct_definition, + STATE(66), 1, sym_expression, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3927,63 +4022,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2041] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [2076] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(63), 1, + STATE(71), 1, sym_expression, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3994,63 +4092,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2130] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [2169] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(68), 1, + STATE(72), 1, sym_expression, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4061,63 +4162,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2219] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [2262] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(69), 1, + STATE(73), 1, sym_expression, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4128,63 +4232,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2308] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [2355] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(70), 1, + STATE(74), 1, sym_expression, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4195,63 +4302,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2397] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [2448] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(71), 1, + STATE(75), 1, sym_expression, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4262,63 +4372,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2486] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [2541] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(72), 1, + STATE(76), 1, sym_expression, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4329,63 +4442,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2575] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [2634] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(73), 1, + STATE(77), 1, sym_expression, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4396,63 +4512,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2664] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [2727] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(74), 1, + STATE(78), 1, sym_expression, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4463,63 +4582,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2753] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [2820] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(75), 1, + STATE(79), 1, sym_expression, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4530,63 +4652,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2842] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [2913] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(76), 1, + STATE(80), 1, sym_expression, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4597,63 +4722,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2931] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [3006] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, - STATE(57), 1, - sym_expression, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(229), 1, + STATE(81), 1, + sym_expression, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4664,63 +4792,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3020] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [3099] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(2), 1, + sym_expression, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(77), 1, - sym_expression, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4731,63 +4862,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3109] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [3192] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(78), 1, + STATE(82), 1, sym_expression, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4798,63 +4932,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3198] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [3285] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(3), 1, - sym_expression, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(229), 1, + STATE(84), 1, + sym_expression, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4865,63 +5002,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3287] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, + [3378] = 23, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(134), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(136), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(138), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(140), 1, + sym_self, + ACTIONS(142), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(150), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(152), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(154), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(156), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(58), 1, sym_number, - STATE(55), 1, - sym__float, STATE(59), 1, + sym__float, + STATE(60), 1, sym_struct_definition, - STATE(80), 1, + STATE(85), 1, sym_expression, - STATE(229), 1, + STATE(233), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(144), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(146), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(96), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4932,63 +5072,66 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3376] = 22, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(129), 1, + [3471] = 23, + ACTIONS(5), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(7), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(9), 1, sym_default, - ACTIONS(135), 1, + ACTIONS(11), 1, + sym_self, + ACTIONS(13), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(15), 1, + aux_sym_octal_token1, + ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, + aux_sym_binary_token1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(54), 1, + STATE(104), 1, sym_number, - STATE(55), 1, + STATE(105), 1, sym__float, - STATE(59), 1, + STATE(118), 1, sym_struct_definition, - STATE(81), 1, + STATE(137), 1, sym_expression, - STATE(229), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(85), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4999,13 +5142,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3465] = 22, + [3564] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5013,49 +5157,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(113), 1, - sym_expression, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(234), 1, + STATE(138), 1, + sym_expression, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5066,13 +5212,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3554] = 22, + [3657] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5080,49 +5227,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(108), 1, + STATE(105), 1, + sym__float, + STATE(115), 1, sym_expression, - STATE(121), 1, + STATE(118), 1, sym_struct_definition, - STATE(234), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5133,13 +5282,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3643] = 22, + [3750] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5147,49 +5297,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(110), 1, - sym_expression, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(234), 1, + STATE(126), 1, + sym_expression, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5200,13 +5352,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3732] = 22, + [3843] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5214,49 +5367,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(111), 1, - sym_expression, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(234), 1, + STATE(124), 1, + sym_expression, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5267,13 +5422,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3821] = 22, + [3936] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5281,49 +5437,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(117), 1, - sym_expression, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(234), 1, + STATE(139), 1, + sym_expression, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5334,13 +5492,14 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3910] = 22, + [4029] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5348,49 +5507,51 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(9), 1, sym_default, ACTIONS(11), 1, - aux_sym_base_ten_token1, + sym_self, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(119), 1, - sym_expression, - STATE(121), 1, + STATE(105), 1, + sym__float, + STATE(118), 1, sym_struct_definition, - STATE(234), 1, + STATE(136), 1, + sym_expression, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 16, + STATE(150), 17, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5401,24 +5562,26 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_path, + sym_identity_path, + sym_self_path, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3999] = 5, - ACTIONS(161), 1, - anon_sym_DOT, - STATE(52), 1, - aux_sym_path_repeat1, + [4122] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 17, + ACTIONS(162), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(158), 19, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, + anon_sym_DOT, sym_true, sym_false, anon_sym_BANG, @@ -5433,11 +5596,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(159), 21, + ACTIONS(160), 22, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -5455,17 +5619,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4052] = 5, + [4176] = 5, ACTIONS(168), 1, anon_sym_DOT, - STATE(56), 1, - aux_sym_path_repeat1, + STATE(52), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 17, + ACTIONS(164), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -5503,15 +5668,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4105] = 4, - ACTIONS(174), 1, + [4230] = 5, + ACTIONS(175), 1, anon_sym_DOT, + STATE(54), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(170), 17, + ACTIONS(171), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -5527,12 +5695,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(172), 22, + ACTIONS(173), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -5550,17 +5717,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4156] = 5, - ACTIONS(180), 1, - sym_unit_quote, - STATE(95), 1, - sym__unit, + [4284] = 5, + ACTIONS(175), 1, + anon_sym_DOT, + STATE(52), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(176), 17, + ACTIONS(177), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -5576,7 +5744,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(178), 21, + ACTIONS(179), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5598,17 +5766,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4209] = 5, - ACTIONS(168), 1, + [4338] = 5, + ACTIONS(185), 1, anon_sym_DOT, - STATE(52), 1, - aux_sym_path_repeat1, + STATE(57), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(182), 17, + ACTIONS(181), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -5624,7 +5793,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(184), 21, + ACTIONS(183), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5646,92 +5815,170 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4262] = 18, - ACTIONS(33), 1, - anon_sym_COLON, - ACTIONS(39), 1, - anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, - ACTIONS(45), 1, - anon_sym_LT_LT, - ACTIONS(47), 1, - anon_sym_GT_GT, - ACTIONS(49), 1, - anon_sym_AMP, - ACTIONS(51), 1, - anon_sym_PIPE, - ACTIONS(53), 1, - anon_sym_CARET, - ACTIONS(59), 1, - anon_sym_AMP_AMP, - ACTIONS(192), 1, - anon_sym_LPAREN, - STATE(83), 1, - sym_dictionary_construction, + [4392] = 5, + ACTIONS(185), 1, + anon_sym_DOT, + STATE(55), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, - anon_sym_STAR, + ACTIONS(187), 18, + sym_identifier, + sym_default, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(190), 2, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(189), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(57), 4, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(188), 8, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4446] = 5, + ACTIONS(195), 1, + anon_sym_DOT, + STATE(57), 1, + aux_sym_self_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(191), 18, + sym_identifier, + sym_default, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(193), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(186), 10, + [4500] = 4, + ACTIONS(202), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(198), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, anon_sym_let, - [4340] = 10, - ACTIONS(33), 1, + ACTIONS(200), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + sym_unit_quote, anon_sym_COLON, - ACTIONS(39), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(192), 1, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - ACTIONS(194), 1, - anon_sym_else, - STATE(83), 1, - sym_dictionary_construction, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4552] = 5, + ACTIONS(208), 1, + sym_unit_quote, + STATE(93), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(186), 14, + ACTIONS(204), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, @@ -5739,14 +5986,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_else, anon_sym_let, - ACTIONS(188), 17, + ACTIONS(206), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -5756,17 +6007,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4402] = 4, - ACTIONS(200), 1, + [4606] = 4, + ACTIONS(214), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(196), 18, + ACTIONS(210), 19, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -5783,7 +6036,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(198), 20, + ACTIONS(212), 20, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5804,62 +6057,116 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4452] = 21, - ACTIONS(33), 1, + [4657] = 10, + ACTIONS(35), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(220), 1, + anon_sym_else, + ACTIONS(222), 1, + anon_sym_LPAREN, + STATE(95), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(216), 15, + sym_identifier, + sym_default, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, anon_sym_LT_LT, - ACTIONS(47), 1, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + ACTIONS(218), 17, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4720] = 21, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(47), 1, + anon_sym_LT_LT, ACTIONS(49), 1, - anon_sym_AMP, + anon_sym_GT_GT, ACTIONS(51), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, anon_sym_CARET, - ACTIONS(59), 1, - anon_sym_AMP_AMP, ACTIONS(61), 1, - anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, ACTIONS(63), 1, - anon_sym_DOT_DOT, + anon_sym_PIPE_PIPE, ACTIONS(65), 1, + anon_sym_DOT_DOT, + ACTIONS(67), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(192), 1, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(43), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + ACTIONS(57), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(190), 2, + ACTIONS(226), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(57), 4, + ACTIONS(59), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(202), 6, + ACTIONS(224), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(194), 9, + ACTIONS(220), 10, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -5867,15 +6174,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [4536] = 4, - ACTIONS(208), 1, + [4805] = 4, + ACTIONS(232), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 18, + ACTIONS(228), 19, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -5892,7 +6200,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(206), 20, + ACTIONS(230), 20, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5913,13 +6221,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4586] = 3, + [4856] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 18, + ACTIONS(164), 19, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, anon_sym_DOT, sym_true, @@ -5936,7 +6245,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(159), 21, + ACTIONS(166), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5958,62 +6267,109 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4634] = 21, - ACTIONS(33), 1, + [4905] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(234), 19, + sym_identifier, + sym_default, + sym_self, + aux_sym_base_ten_token1, + anon_sym_DOT, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(236), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, anon_sym_COLON, - ACTIONS(39), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(43), 1, anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [4954] = 21, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, ACTIONS(45), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(47), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(49), 1, - anon_sym_AMP, + anon_sym_GT_GT, ACTIONS(51), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, anon_sym_CARET, - ACTIONS(59), 1, - anon_sym_AMP_AMP, ACTIONS(61), 1, - anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, ACTIONS(63), 1, - anon_sym_DOT_DOT, + anon_sym_PIPE_PIPE, ACTIONS(65), 1, + anon_sym_DOT_DOT, + ACTIONS(67), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(192), 1, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(43), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + ACTIONS(57), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(190), 2, + ACTIONS(226), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(57), 4, + ACTIONS(59), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(212), 6, + ACTIONS(240), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(210), 9, + ACTIONS(238), 10, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6021,13 +6377,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [4718] = 3, + [5039] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 18, + ACTIONS(242), 19, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6044,7 +6401,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(216), 21, + ACTIONS(244), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6066,13 +6423,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [4766] = 3, + [5088] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(218), 18, + ACTIONS(246), 19, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6089,7 +6447,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(220), 21, + ACTIONS(248), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6111,13 +6469,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [4814] = 3, + [5137] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(151), 17, + ACTIONS(158), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6133,7 +6492,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(153), 22, + ACTIONS(160), 22, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6156,13 +6515,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4862] = 3, + [5186] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(222), 17, + ACTIONS(250), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6178,7 +6538,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(224), 22, + ACTIONS(252), 22, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6201,26 +6561,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4910] = 9, - ACTIONS(33), 1, + [5235] = 9, + ACTIONS(35), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, + ACTIONS(45), 1, anon_sym_SLASH_SLASH, - ACTIONS(192), 1, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(43), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(186), 15, + ACTIONS(216), 16, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6234,7 +6595,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(188), 17, + ACTIONS(218), 17, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6252,19 +6613,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4970] = 6, - ACTIONS(33), 1, + [5296] = 6, + ACTIONS(35), 1, anon_sym_COLON, - ACTIONS(192), 1, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 17, + ACTIONS(216), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6280,7 +6642,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(188), 19, + ACTIONS(218), 19, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6300,21 +6662,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5024] = 7, - ACTIONS(33), 1, + [5351] = 7, + ACTIONS(35), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_STAR_STAR, - ACTIONS(192), 1, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 17, + ACTIONS(216), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6330,7 +6693,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(188), 18, + ACTIONS(218), 18, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6349,43 +6712,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5080] = 10, - ACTIONS(33), 1, + [5408] = 10, + ACTIONS(35), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, + ACTIONS(45), 1, anon_sym_SLASH_SLASH, - ACTIONS(192), 1, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(43), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(190), 2, + ACTIONS(226), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(186), 15, - sym_identifier, - sym_default, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(188), 15, + ACTIONS(218), 15, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6401,33 +6748,66 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5142] = 12, - ACTIONS(33), 1, + ACTIONS(216), 16, + sym_identifier, + sym_default, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + [5471] = 12, + ACTIONS(35), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(47), 1, + anon_sym_LT_LT, + ACTIONS(49), 1, anon_sym_GT_GT, - ACTIONS(192), 1, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(43), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(190), 2, + ACTIONS(226), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(186), 14, + ACTIONS(218), 14, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + ACTIONS(216), 15, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6440,12 +6820,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(188), 14, + [5538] = 14, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(47), 1, + anon_sym_LT_LT, + ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(51), 1, + anon_sym_AMP, + ACTIONS(55), 1, + anon_sym_CARET, + ACTIONS(222), 1, + anon_sym_LPAREN, + STATE(95), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(226), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(218), 13, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -6455,37 +6862,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5208] = 14, - ACTIONS(33), 1, + ACTIONS(216), 14, + sym_identifier, + sym_default, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + [5609] = 13, + ACTIONS(35), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(47), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(51), 1, anon_sym_AMP, - ACTIONS(53), 1, - anon_sym_CARET, - ACTIONS(192), 1, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(43), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(190), 2, + ACTIONS(226), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(186), 13, + ACTIONS(216), 14, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6497,11 +6918,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(188), 13, + ACTIONS(218), 14, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -6511,52 +6933,55 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5278] = 13, - ACTIONS(33), 1, + [5678] = 15, + ACTIONS(35), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(47), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(51), 1, anon_sym_AMP, - ACTIONS(192), 1, + ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, + anon_sym_CARET, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(43), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(190), 2, + ACTIONS(226), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(186), 13, + ACTIONS(216), 13, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, - anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(188), 14, + ACTIONS(218), 13, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -6566,114 +6991,119 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5346] = 15, - ACTIONS(33), 1, + [5751] = 17, + ACTIONS(35), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(47), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(49), 1, - anon_sym_AMP, + anon_sym_GT_GT, ACTIONS(51), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, anon_sym_CARET, - ACTIONS(192), 1, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(43), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(190), 2, + ACTIONS(57), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(226), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(186), 12, + ACTIONS(59), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(218), 9, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + ACTIONS(216), 11, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_BANG, - anon_sym_GT, - anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(188), 13, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [5418] = 17, - ACTIONS(33), 1, + [5828] = 18, + ACTIONS(35), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(47), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(49), 1, - anon_sym_AMP, + anon_sym_GT_GT, ACTIONS(51), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, anon_sym_CARET, - ACTIONS(192), 1, + ACTIONS(61), 1, + anon_sym_AMP_AMP, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(43), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + ACTIONS(57), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(190), 2, + ACTIONS(226), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(57), 4, + ACTIONS(59), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(188), 9, + ACTIONS(218), 8, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, - anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(186), 10, + ACTIONS(216), 11, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6682,49 +7112,49 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5494] = 19, - ACTIONS(33), 1, + [5907] = 19, + ACTIONS(35), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(47), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(49), 1, - anon_sym_AMP, + anon_sym_GT_GT, ACTIONS(51), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, anon_sym_CARET, - ACTIONS(59), 1, - anon_sym_AMP_AMP, ACTIONS(61), 1, + anon_sym_AMP_AMP, + ACTIONS(63), 1, anon_sym_PIPE_PIPE, - ACTIONS(192), 1, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(43), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + ACTIONS(57), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(190), 2, + ACTIONS(226), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(57), 4, + ACTIONS(59), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(188), 7, + ACTIONS(218), 7, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6732,9 +7162,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(186), 10, + ACTIONS(216), 11, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6743,62 +7174,63 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5574] = 21, - ACTIONS(33), 1, + [5988] = 21, + ACTIONS(35), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(47), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(49), 1, - anon_sym_AMP, + anon_sym_GT_GT, ACTIONS(51), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, anon_sym_CARET, - ACTIONS(59), 1, - anon_sym_AMP_AMP, ACTIONS(61), 1, - anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, ACTIONS(63), 1, - anon_sym_DOT_DOT, + anon_sym_PIPE_PIPE, ACTIONS(65), 1, + anon_sym_DOT_DOT, + ACTIONS(67), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(192), 1, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(43), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + ACTIONS(57), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(190), 2, + ACTIONS(226), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(57), 4, + ACTIONS(59), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(228), 6, + ACTIONS(256), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(226), 9, + ACTIONS(254), 10, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6806,13 +7238,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5658] = 3, + [6073] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 18, + ACTIONS(258), 19, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6829,7 +7262,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(232), 21, + ACTIONS(260), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6851,62 +7284,63 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [5706] = 21, - ACTIONS(33), 1, + [6122] = 21, + ACTIONS(35), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(47), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(49), 1, - anon_sym_AMP, + anon_sym_GT_GT, ACTIONS(51), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, anon_sym_CARET, - ACTIONS(59), 1, - anon_sym_AMP_AMP, ACTIONS(61), 1, - anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, ACTIONS(63), 1, - anon_sym_DOT_DOT, + anon_sym_PIPE_PIPE, ACTIONS(65), 1, + anon_sym_DOT_DOT, + ACTIONS(67), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(192), 1, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(43), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + ACTIONS(57), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(190), 2, + ACTIONS(226), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(57), 4, + ACTIONS(59), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(236), 6, + ACTIONS(264), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(234), 9, + ACTIONS(262), 10, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6914,62 +7348,63 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5790] = 21, - ACTIONS(33), 1, + [6207] = 21, + ACTIONS(35), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(41), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, ACTIONS(45), 1, - anon_sym_LT_LT, + anon_sym_SLASH_SLASH, ACTIONS(47), 1, - anon_sym_GT_GT, + anon_sym_LT_LT, ACTIONS(49), 1, - anon_sym_AMP, + anon_sym_GT_GT, ACTIONS(51), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, anon_sym_CARET, - ACTIONS(59), 1, - anon_sym_AMP_AMP, ACTIONS(61), 1, - anon_sym_PIPE_PIPE, + anon_sym_AMP_AMP, ACTIONS(63), 1, - anon_sym_DOT_DOT, + anon_sym_PIPE_PIPE, ACTIONS(65), 1, + anon_sym_DOT_DOT, + ACTIONS(67), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(192), 1, + ACTIONS(222), 1, anon_sym_LPAREN, - STATE(83), 1, + STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(43), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + ACTIONS(57), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(190), 2, + ACTIONS(226), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(57), 4, + ACTIONS(59), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(240), 6, + ACTIONS(268), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(238), 9, + ACTIONS(266), 10, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6977,13 +7412,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5874] = 3, + [6292] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(242), 17, + ACTIONS(270), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -6999,7 +7435,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(244), 21, + ACTIONS(272), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7021,13 +7457,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5921] = 3, + [6340] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(246), 17, + ACTIONS(274), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7043,7 +7480,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(248), 21, + ACTIONS(276), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7065,13 +7502,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5968] = 3, + [6388] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(250), 17, + ACTIONS(278), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7087,7 +7525,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(252), 21, + ACTIONS(280), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7109,13 +7547,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6015] = 3, + [6436] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(196), 17, + ACTIONS(282), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7131,7 +7570,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(198), 21, + ACTIONS(284), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7153,13 +7592,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6062] = 3, + [6484] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(254), 17, + ACTIONS(286), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7175,7 +7615,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(256), 21, + ACTIONS(288), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7197,13 +7637,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6109] = 3, + [6532] = 4, + ACTIONS(210), 1, + anon_sym_else, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(258), 17, + ACTIONS(290), 17, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7217,9 +7660,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, - anon_sym_else, anon_sym_let, - ACTIONS(260), 21, + ACTIONS(292), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7241,13 +7683,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6156] = 3, + [6582] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(262), 17, + ACTIONS(294), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7263,7 +7706,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(264), 21, + ACTIONS(296), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7285,15 +7728,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6203] = 4, - ACTIONS(196), 1, - anon_sym_else, + [6630] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(246), 16, + ACTIONS(298), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7307,8 +7749,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_if, + anon_sym_else, anon_sym_let, - ACTIONS(248), 21, + ACTIONS(300), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7330,13 +7773,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6252] = 3, + [6678] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(266), 17, + ACTIONS(302), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7352,7 +7796,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(268), 21, + ACTIONS(304), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7374,13 +7818,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6299] = 3, + [6726] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(270), 17, + ACTIONS(290), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7396,7 +7841,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(272), 21, + ACTIONS(292), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7418,13 +7863,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6346] = 3, + [6774] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 17, + ACTIONS(210), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7440,7 +7886,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(276), 21, + ACTIONS(212), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7462,13 +7908,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6393] = 3, + [6822] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(278), 17, + ACTIONS(228), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7484,7 +7931,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(280), 21, + ACTIONS(230), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7506,13 +7953,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6440] = 3, + [6870] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 17, + ACTIONS(306), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7528,7 +7976,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(206), 21, + ACTIONS(308), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7550,13 +7998,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6487] = 3, + [6918] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(282), 17, + ACTIONS(310), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7572,7 +8021,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(284), 21, + ACTIONS(312), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7594,13 +8043,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6534] = 3, + [6966] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(286), 17, + ACTIONS(314), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7616,7 +8066,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(288), 21, + ACTIONS(316), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7638,13 +8088,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6581] = 3, + [7014] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 17, + ACTIONS(318), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7660,7 +8111,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(292), 21, + ACTIONS(320), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7682,13 +8133,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6628] = 3, + [7062] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 17, + ACTIONS(322), 18, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, @@ -7704,7 +8156,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(296), 21, + ACTIONS(324), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7726,14 +8178,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6675] = 4, + [7110] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(155), 2, + ACTIONS(162), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(151), 12, + ACTIONS(158), 12, sym_identifier, anon_sym_DOT, anon_sym_STAR, @@ -7746,7 +8198,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(153), 22, + ACTIONS(160), 22, ts_builtin_sym_end, sym_unit_quote, anon_sym_COLON, @@ -7769,17 +8221,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6722] = 6, - ACTIONS(298), 1, - sym_identifier, - ACTIONS(300), 1, - sym_unit_quote, - STATE(125), 1, - sym__unit, + [7157] = 4, + ACTIONS(326), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(176), 10, + ACTIONS(198), 11, + sym_identifier, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -7790,8 +8239,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(178), 21, + ACTIONS(200), 22, ts_builtin_sym_end, + sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -7812,14 +8262,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6771] = 4, - ACTIONS(302), 1, - anon_sym_DOT, + [7202] = 6, + ACTIONS(328), 1, + sym_identifier, + ACTIONS(330), 1, + sym_unit_quote, + STATE(134), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(170), 11, - sym_identifier, + ACTIONS(204), 10, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -7830,9 +8283,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(172), 22, + ACTIONS(206), 21, ts_builtin_sym_end, - sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -7853,11 +8305,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6816] = 3, + [7251] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(151), 11, + ACTIONS(250), 11, sym_identifier, anon_sym_STAR, anon_sym_SLASH, @@ -7869,7 +8321,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(153), 22, + ACTIONS(252), 22, ts_builtin_sym_end, sym_unit_quote, anon_sym_COLON, @@ -7892,11 +8344,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6858] = 3, + [7293] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(222), 11, + ACTIONS(158), 11, sym_identifier, anon_sym_STAR, anon_sym_SLASH, @@ -7908,7 +8360,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(224), 22, + ACTIONS(160), 22, ts_builtin_sym_end, sym_unit_quote, anon_sym_COLON, @@ -7931,15 +8383,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6900] = 5, - ACTIONS(304), 1, + [7335] = 5, + ACTIONS(332), 1, anon_sym_DOT, - STATE(104), 1, - aux_sym_path_repeat1, + STATE(108), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 8, + ACTIONS(164), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -7948,7 +8400,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(159), 22, + ACTIONS(166), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -7971,15 +8423,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [6945] = 5, - ACTIONS(307), 1, + [7380] = 5, + ACTIONS(335), 1, anon_sym_DOT, - STATE(104), 1, - aux_sym_path_repeat1, + STATE(111), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(182), 8, + ACTIONS(187), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -7988,7 +8440,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(184), 22, + ACTIONS(189), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8011,15 +8463,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [6990] = 5, - ACTIONS(307), 1, + [7425] = 5, + ACTIONS(337), 1, anon_sym_DOT, - STATE(105), 1, - aux_sym_path_repeat1, + STATE(110), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 8, + ACTIONS(191), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8028,7 +8480,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(166), 22, + ACTIONS(193), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8051,12 +8503,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7035] = 3, + [7470] = 5, + ACTIONS(335), 1, + anon_sym_DOT, + STATE(110), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 9, - anon_sym_DASH, + ACTIONS(181), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8065,9 +8520,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(232), 22, + ACTIONS(183), 22, ts_builtin_sym_end, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -8087,18 +8543,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_DASH_GT, - [7075] = 6, - ACTIONS(309), 1, - anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - STATE(135), 1, - sym_dictionary_construction, + [7515] = 5, + ACTIONS(340), 1, + anon_sym_DOT, + STATE(108), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 8, + ACTIONS(177), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8107,8 +8560,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(188), 20, + ACTIONS(179), 22, ts_builtin_sym_end, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8125,89 +8579,116 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7121] = 20, - ACTIONS(234), 1, + [7560] = 5, + ACTIONS(340), 1, + anon_sym_DOT, + STATE(112), 1, + aux_sym_identity_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(171), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(309), 1, + ACTIONS(173), 22, + ts_builtin_sym_end, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(319), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, - anon_sym_AMP, - ACTIONS(325), 1, - anon_sym_PIPE, - ACTIONS(327), 1, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(333), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(335), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, - anon_sym_DOT_DOT, - ACTIONS(339), 1, anon_sym_DOT_DOT_EQ, - STATE(135), 1, - sym_dictionary_construction, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [7605] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(286), 9, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, - anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(288), 22, + ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(236), 6, - ts_builtin_sym_end, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7195] = 7, - ACTIONS(309), 1, + anon_sym_GT_GT_GT, + [7645] = 10, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - STATE(135), 1, + ACTIONS(350), 1, + anon_sym_SLASH_SLASH, + ACTIONS(352), 1, + anon_sym_LPAREN, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 8, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(216), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(188), 19, + ACTIONS(218), 16, ts_builtin_sym_end, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -8223,35 +8704,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7243] = 10, - ACTIONS(309), 1, - anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, - anon_sym_STAR_STAR, - ACTIONS(319), 1, - anon_sym_SLASH_SLASH, - STATE(135), 1, - sym_dictionary_construction, + [7699] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(242), 9, anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(186), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(188), 16, + ACTIONS(244), 22, ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -8264,42 +8736,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7297] = 12, - ACTIONS(309), 1, - anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, - anon_sym_STAR_STAR, - ACTIONS(319), 1, - anon_sym_SLASH_SLASH, - ACTIONS(323), 1, - anon_sym_AMP, - STATE(135), 1, - sym_dictionary_construction, + anon_sym_DASH_GT, + [7739] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(246), 9, anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(317), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(186), 5, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(188), 14, + ACTIONS(248), 22, ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8310,37 +8773,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7355] = 9, - ACTIONS(309), 1, - anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, - anon_sym_STAR_STAR, - ACTIONS(319), 1, - anon_sym_SLASH_SLASH, - STATE(135), 1, - sym_dictionary_construction, + anon_sym_DASH_GT, + [7779] = 4, + ACTIONS(354), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(317), 2, + ACTIONS(210), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(186), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(188), 18, + ACTIONS(212), 21, ts_builtin_sym_end, - anon_sym_DASH, + anon_sym_COLON, anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -8353,104 +8812,104 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7407] = 20, - ACTIONS(238), 1, - anon_sym_EQ, - ACTIONS(309), 1, + [7821] = 16, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_AMP_AMP, - ACTIONS(335), 1, - anon_sym_PIPE_PIPE, - ACTIONS(337), 1, - anon_sym_DOT_DOT, - ACTIONS(339), 1, - anon_sym_DOT_DOT_EQ, - STATE(135), 1, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(216), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(240), 6, + ACTIONS(218), 9, ts_builtin_sym_end, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7481] = 14, - ACTIONS(309), 1, + [7887] = 17, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - STATE(135), 1, + ACTIONS(368), 1, + anon_sym_AMP_AMP, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(216), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(186), 4, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(188), 13, - ts_builtin_sym_end, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(218), 8, + ts_builtin_sym_end, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, @@ -8458,107 +8917,120 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7543] = 16, - ACTIONS(309), 1, + [7955] = 18, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - STATE(135), 1, + ACTIONS(368), 1, + anon_sym_AMP_AMP, + ACTIONS(370), 1, + anon_sym_PIPE_PIPE, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 2, + ACTIONS(216), 2, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(188), 9, + ACTIONS(218), 7, ts_builtin_sym_end, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7609] = 11, - ACTIONS(309), 1, + [8025] = 20, + ACTIONS(220), 1, + anon_sym_EQ, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - STATE(135), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, + anon_sym_AMP, + ACTIONS(360), 1, + anon_sym_PIPE, + ACTIONS(362), 1, + anon_sym_CARET, + ACTIONS(368), 1, + anon_sym_AMP_AMP, + ACTIONS(370), 1, + anon_sym_PIPE_PIPE, + ACTIONS(372), 1, + anon_sym_DOT_DOT, + ACTIONS(374), 1, + anon_sym_DOT_DOT_EQ, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(186), 6, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(188), 14, - ts_builtin_sym_end, - anon_sym_CARET, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(224), 6, + ts_builtin_sym_end, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7665] = 3, + [8099] = 4, + ACTIONS(232), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 9, - anon_sym_DOT, + ACTIONS(228), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8567,10 +9039,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(159), 22, + ACTIONS(230), 21, ts_builtin_sym_end, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -8590,40 +9061,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7705] = 13, - ACTIONS(309), 1, + [8141] = 13, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - STATE(135), 1, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(186), 5, + ACTIONS(216), 5, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(188), 13, + ACTIONS(218), 13, ts_builtin_sym_end, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8637,85 +9108,178 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7765] = 20, - ACTIONS(194), 1, - anon_sym_EQ, - ACTIONS(309), 1, - anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, - anon_sym_STAR_STAR, - ACTIONS(319), 1, - anon_sym_SLASH_SLASH, - ACTIONS(323), 1, - anon_sym_AMP, - ACTIONS(325), 1, - anon_sym_PIPE, - ACTIONS(327), 1, - anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_AMP_AMP, - ACTIONS(335), 1, - anon_sym_PIPE_PIPE, - ACTIONS(337), 1, - anon_sym_DOT_DOT, - ACTIONS(339), 1, - anon_sym_DOT_DOT_EQ, - STATE(135), 1, - sym_dictionary_construction, + [8201] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(164), 9, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(329), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(202), 6, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(166), 22, ts_builtin_sym_end, - anon_sym_else, - anon_sym_SEMI, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7839] = 4, - ACTIONS(341), 1, - anon_sym_DASH_GT, + [8241] = 11, + ACTIONS(342), 1, + anon_sym_COLON, + ACTIONS(346), 1, + anon_sym_STAR_STAR, + ACTIONS(350), 1, + anon_sym_SLASH_SLASH, + ACTIONS(352), 1, + anon_sym_LPAREN, + STATE(143), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(196), 9, + ACTIONS(344), 2, anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(356), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(216), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(198), 21, + ACTIONS(218), 14, ts_builtin_sym_end, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [8297] = 20, + ACTIONS(254), 1, + anon_sym_EQ, + ACTIONS(342), 1, anon_sym_COLON, - anon_sym_PLUS, + ACTIONS(346), 1, anon_sym_STAR_STAR, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, + anon_sym_AMP, + ACTIONS(360), 1, + anon_sym_PIPE, + ACTIONS(362), 1, + anon_sym_CARET, + ACTIONS(368), 1, + anon_sym_AMP_AMP, + ACTIONS(370), 1, + anon_sym_PIPE_PIPE, + ACTIONS(372), 1, + anon_sym_DOT_DOT, + ACTIONS(374), 1, + anon_sym_DOT_DOT_EQ, + STATE(143), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(348), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(364), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(366), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(256), 6, + ts_builtin_sym_end, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [8371] = 14, + ACTIONS(342), 1, + anon_sym_COLON, + ACTIONS(346), 1, + anon_sym_STAR_STAR, + ACTIONS(350), 1, + anon_sym_SLASH_SLASH, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, + anon_sym_AMP, + ACTIONS(360), 1, + anon_sym_PIPE, + ACTIONS(362), 1, anon_sym_CARET, + STATE(143), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(344), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(348), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(356), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(216), 4, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(218), 13, + ts_builtin_sym_end, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8725,18 +9289,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7881] = 4, - ACTIONS(208), 1, - anon_sym_DASH_GT, + [8433] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 9, - anon_sym_DASH, + ACTIONS(234), 9, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8745,9 +9306,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(206), 21, + ACTIONS(236), 22, ts_builtin_sym_end, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -8767,11 +9329,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7923] = 3, + [8473] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 9, + ACTIONS(258), 9, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -8781,7 +9343,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(216), 22, + ACTIONS(260), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_PLUS, @@ -8804,65 +9366,65 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [7963] = 20, - ACTIONS(210), 1, + [8513] = 20, + ACTIONS(238), 1, anon_sym_EQ, - ACTIONS(309), 1, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - STATE(135), 1, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(212), 6, + ACTIONS(240), 6, ts_builtin_sym_end, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8037] = 3, + [8587] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(282), 9, + ACTIONS(278), 9, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -8872,7 +9434,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(284), 22, + ACTIONS(280), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8895,131 +9457,181 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [8077] = 17, - ACTIONS(309), 1, + [8627] = 20, + ACTIONS(262), 1, + anon_sym_EQ, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - STATE(135), 1, + ACTIONS(370), 1, + anon_sym_PIPE_PIPE, + ACTIONS(372), 1, + anon_sym_DOT_DOT, + ACTIONS(374), 1, + anon_sym_DOT_DOT_EQ, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(188), 8, + ACTIONS(264), 6, + ts_builtin_sym_end, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + [8701] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(298), 9, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(300), 22, ts_builtin_sym_end, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8145] = 18, - ACTIONS(309), 1, + anon_sym_GT_GT_GT, + [8741] = 20, + ACTIONS(266), 1, + anon_sym_EQ, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - STATE(135), 1, + ACTIONS(372), 1, + anon_sym_DOT_DOT, + ACTIONS(374), 1, + anon_sym_DOT_DOT_EQ, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(188), 7, + ACTIONS(268), 6, ts_builtin_sym_end, - anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8215] = 3, + [8815] = 9, + ACTIONS(342), 1, + anon_sym_COLON, + ACTIONS(346), 1, + anon_sym_STAR_STAR, + ACTIONS(350), 1, + anon_sym_SLASH_SLASH, + ACTIONS(352), 1, + anon_sym_LPAREN, + STATE(143), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 9, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, + ACTIONS(216), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(276), 22, + ACTIONS(218), 18, ts_builtin_sym_end, - anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -9030,17 +9642,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [8255] = 3, + [8867] = 6, + ACTIONS(342), 1, + anon_sym_COLON, + ACTIONS(352), 1, + anon_sym_LPAREN, + STATE(143), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(218), 9, - anon_sym_DASH, + ACTIONS(216), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9049,9 +9664,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(220), 22, + ACTIONS(218), 20, ts_builtin_sym_end, - anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -9067,33 +9682,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_DASH_GT, - [8295] = 3, + [8913] = 7, + ACTIONS(342), 1, + anon_sym_COLON, + ACTIONS(346), 1, + anon_sym_STAR_STAR, + ACTIONS(352), 1, + anon_sym_LPAREN, + STATE(143), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(266), 9, + ACTIONS(216), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(268), 22, + ACTIONS(218), 19, ts_builtin_sym_end, - anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -9104,70 +9723,60 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [8335] = 20, - ACTIONS(226), 1, - anon_sym_EQ, - ACTIONS(309), 1, + [8961] = 12, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, - anon_sym_PIPE, - ACTIONS(327), 1, - anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_AMP_AMP, - ACTIONS(335), 1, - anon_sym_PIPE_PIPE, - ACTIONS(337), 1, - anon_sym_DOT_DOT, - ACTIONS(339), 1, - anon_sym_DOT_DOT_EQ, - STATE(135), 1, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(216), 5, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(218), 14, + ts_builtin_sym_end, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(228), 6, - ts_builtin_sym_end, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8409] = 3, + [9019] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(286), 8, + ACTIONS(294), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9176,7 +9785,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(288), 22, + ACTIONS(296), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9199,11 +9808,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8448] = 3, + [9058] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 8, + ACTIONS(282), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9212,7 +9821,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(292), 22, + ACTIONS(284), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9235,11 +9844,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8487] = 3, + [9097] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(242), 8, + ACTIONS(306), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9248,7 +9857,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(244), 22, + ACTIONS(308), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9271,11 +9880,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8526] = 3, + [9136] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(246), 8, + ACTIONS(290), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9284,7 +9893,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(248), 22, + ACTIONS(292), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9307,11 +9916,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8565] = 3, + [9175] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(270), 8, + ACTIONS(318), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9320,7 +9929,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(272), 22, + ACTIONS(320), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9343,11 +9952,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8604] = 3, + [9214] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(258), 8, + ACTIONS(314), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9356,7 +9965,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(260), 22, + ACTIONS(316), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9379,11 +9988,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8643] = 3, + [9253] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 8, + ACTIONS(274), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9392,7 +10001,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(296), 22, + ACTIONS(276), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9415,11 +10024,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8682] = 3, + [9292] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(254), 8, + ACTIONS(228), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9428,7 +10037,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(256), 22, + ACTIONS(230), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9451,11 +10060,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8721] = 3, + [9331] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(250), 8, + ACTIONS(302), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9464,7 +10073,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(252), 22, + ACTIONS(304), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9487,11 +10096,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8760] = 3, + [9370] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(262), 8, + ACTIONS(270), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9500,7 +10109,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(264), 22, + ACTIONS(272), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9523,11 +10132,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8799] = 3, + [9409] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 8, + ACTIONS(210), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9536,7 +10145,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(206), 22, + ACTIONS(212), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9559,11 +10168,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8838] = 3, + [9448] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(196), 8, + ACTIONS(322), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9572,7 +10181,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(198), 22, + ACTIONS(324), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9595,11 +10204,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8877] = 3, + [9487] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(278), 8, + ACTIONS(310), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9608,7 +10217,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(280), 22, + ACTIONS(312), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9631,21 +10240,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8916] = 8, - ACTIONS(307), 1, + [9526] = 8, + ACTIONS(340), 1, anon_sym_DOT, - ACTIONS(343), 1, + ACTIONS(376), 1, anon_sym_COLON, - ACTIONS(345), 1, + ACTIONS(378), 1, anon_sym_EQ, - STATE(105), 1, - aux_sym_path_repeat1, - STATE(211), 1, + STATE(112), 1, + aux_sym_identity_path_repeat1, + STATE(224), 1, sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 7, + ACTIONS(171), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9653,7 +10262,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(166), 16, + ACTIONS(173), 16, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9670,1197 +10279,1198 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_RPAREN, - [8963] = 20, - ACTIONS(309), 1, + [9573] = 20, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(347), 1, + ACTIONS(380), 1, anon_sym_EQ, - STATE(135), 1, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(349), 2, + ACTIONS(382), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9033] = 20, - ACTIONS(79), 1, - anon_sym_RBRACK, - ACTIONS(309), 1, + [9643] = 20, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(351), 1, + ACTIONS(384), 1, anon_sym_COMMA, - STATE(135), 1, + ACTIONS(386), 1, + anon_sym_RBRACK, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9102] = 19, - ACTIONS(309), 1, + [9712] = 20, + ACTIONS(128), 1, + anon_sym_RBRACK, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - STATE(135), 1, + ACTIONS(384), 1, + anon_sym_COMMA, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(353), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9169] = 20, - ACTIONS(309), 1, + [9781] = 19, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(351), 1, - anon_sym_COMMA, - ACTIONS(355), 1, - anon_sym_RBRACK, - STATE(135), 1, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(388), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9238] = 20, - ACTIONS(309), 1, + [9848] = 20, + ACTIONS(132), 1, + anon_sym_RBRACK, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(351), 1, + ACTIONS(384), 1, anon_sym_COMMA, - ACTIONS(357), 1, - anon_sym_RBRACK, - STATE(135), 1, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9307] = 19, - ACTIONS(309), 1, + [9917] = 20, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - STATE(135), 1, + ACTIONS(384), 1, + anon_sym_COMMA, + ACTIONS(390), 1, + anon_sym_RBRACK, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9374] = 20, - ACTIONS(83), 1, - anon_sym_RBRACK, - ACTIONS(309), 1, + [9986] = 19, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(351), 1, - anon_sym_COMMA, - STATE(135), 1, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(392), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9443] = 19, - ACTIONS(309), 1, + [10053] = 19, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(361), 1, + ACTIONS(394), 1, anon_sym_else, - STATE(135), 1, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9509] = 19, - ACTIONS(309), 1, + [10119] = 19, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(363), 1, + ACTIONS(396), 1, anon_sym_RPAREN, - STATE(135), 1, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9575] = 19, - ACTIONS(309), 1, + [10185] = 19, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(351), 1, - anon_sym_COMMA, - STATE(135), 1, + ACTIONS(398), 1, + anon_sym_RPAREN, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9641] = 19, - ACTIONS(309), 1, + [10251] = 19, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(365), 1, - anon_sym_RPAREN, - STATE(135), 1, + ACTIONS(400), 1, + ts_builtin_sym_end, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9707] = 19, - ACTIONS(309), 1, + [10317] = 19, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(367), 1, + ACTIONS(402), 1, anon_sym_SEMI, - STATE(135), 1, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9773] = 19, - ACTIONS(309), 1, + [10383] = 19, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(369), 1, - ts_builtin_sym_end, - STATE(135), 1, + ACTIONS(404), 1, + anon_sym_else, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9839] = 19, - ACTIONS(309), 1, + [10449] = 19, + ACTIONS(342), 1, anon_sym_COLON, - ACTIONS(311), 1, - anon_sym_LPAREN, - ACTIONS(315), 1, + ACTIONS(346), 1, anon_sym_STAR_STAR, - ACTIONS(319), 1, + ACTIONS(350), 1, anon_sym_SLASH_SLASH, - ACTIONS(323), 1, + ACTIONS(352), 1, + anon_sym_LPAREN, + ACTIONS(358), 1, anon_sym_AMP, - ACTIONS(325), 1, + ACTIONS(360), 1, anon_sym_PIPE, - ACTIONS(327), 1, + ACTIONS(362), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(368), 1, anon_sym_AMP_AMP, - ACTIONS(335), 1, + ACTIONS(370), 1, anon_sym_PIPE_PIPE, - ACTIONS(337), 1, + ACTIONS(372), 1, anon_sym_DOT_DOT, - ACTIONS(339), 1, + ACTIONS(374), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(371), 1, - anon_sym_else, - STATE(135), 1, + ACTIONS(384), 1, + anon_sym_COMMA, + STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(313), 2, + ACTIONS(344), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(317), 2, + ACTIONS(348), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(321), 2, + ACTIONS(356), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(329), 2, + ACTIONS(364), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(331), 4, + ACTIONS(366), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9905] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, + [10515] = 14, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(373), 1, + ACTIONS(406), 1, sym_identifier, - ACTIONS(377), 1, + ACTIONS(408), 1, + aux_sym_base_ten_token1, + ACTIONS(412), 1, anon_sym_LPAREN, - STATE(100), 1, + STATE(184), 1, sym__float, - STATE(101), 1, + STATE(185), 1, sym_number, - STATE(193), 1, + STATE(198), 1, sym_formula_expression, - STATE(234), 1, + STATE(239), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(375), 2, + ACTIONS(410), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(181), 6, + STATE(186), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [9958] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, + [10568] = 14, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(373), 1, + ACTIONS(406), 1, sym_identifier, - ACTIONS(377), 1, + ACTIONS(408), 1, + aux_sym_base_ten_token1, + ACTIONS(412), 1, anon_sym_LPAREN, - STATE(100), 1, + STATE(184), 1, sym__float, - STATE(101), 1, + STATE(185), 1, sym_number, - STATE(199), 1, + STATE(191), 1, sym_formula_expression, - STATE(234), 1, + STATE(239), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(375), 2, + ACTIONS(410), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(181), 6, + STATE(186), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10011] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, + [10621] = 14, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(373), 1, + ACTIONS(406), 1, sym_identifier, - ACTIONS(377), 1, + ACTIONS(408), 1, + aux_sym_base_ten_token1, + ACTIONS(412), 1, anon_sym_LPAREN, - STATE(100), 1, + STATE(184), 1, sym__float, - STATE(101), 1, + STATE(185), 1, sym_number, STATE(192), 1, sym_formula_expression, - STATE(234), 1, + STATE(239), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(375), 2, + ACTIONS(410), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(181), 6, + STATE(186), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10064] = 14, + [10674] = 14, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(373), 1, + ACTIONS(406), 1, sym_identifier, - ACTIONS(377), 1, + ACTIONS(412), 1, anon_sym_LPAREN, - ACTIONS(379), 1, - aux_sym_base_ten_token1, - STATE(176), 1, + STATE(104), 1, sym_number, - STATE(177), 1, + STATE(105), 1, sym__float, - STATE(180), 1, + STATE(207), 1, sym_formula_expression, - STATE(235), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(381), 2, + ACTIONS(414), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(181), 6, + STATE(186), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10117] = 14, + [10727] = 14, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(373), 1, + ACTIONS(406), 1, sym_identifier, - ACTIONS(377), 1, + ACTIONS(412), 1, anon_sym_LPAREN, - ACTIONS(379), 1, - aux_sym_base_ten_token1, - STATE(176), 1, + STATE(104), 1, sym_number, - STATE(177), 1, + STATE(105), 1, sym__float, - STATE(184), 1, + STATE(200), 1, sym_formula_expression, - STATE(235), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(381), 2, + ACTIONS(414), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(181), 6, + STATE(186), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10170] = 14, + [10780] = 14, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(373), 1, + ACTIONS(406), 1, sym_identifier, - ACTIONS(377), 1, + ACTIONS(412), 1, anon_sym_LPAREN, - ACTIONS(379), 1, - aux_sym_base_ten_token1, - STATE(176), 1, + STATE(104), 1, sym_number, - STATE(177), 1, + STATE(105), 1, sym__float, - STATE(187), 1, + STATE(188), 1, sym_formula_expression, - STATE(235), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(381), 2, + ACTIONS(414), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(181), 6, + STATE(186), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10223] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [10833] = 14, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(373), 1, + ACTIONS(406), 1, sym_identifier, - ACTIONS(377), 1, + ACTIONS(412), 1, anon_sym_LPAREN, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(195), 1, + STATE(105), 1, + sym__float, + STATE(199), 1, sym_formula_expression, - STATE(234), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(375), 2, + ACTIONS(414), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(181), 6, + STATE(186), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10276] = 14, + [10886] = 14, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(373), 1, + ACTIONS(406), 1, sym_identifier, - ACTIONS(377), 1, + ACTIONS(412), 1, anon_sym_LPAREN, - ACTIONS(379), 1, - aux_sym_base_ten_token1, - STATE(176), 1, + STATE(104), 1, sym_number, - STATE(177), 1, + STATE(105), 1, sym__float, - STATE(188), 1, + STATE(203), 1, sym_formula_expression, - STATE(235), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(381), 2, + ACTIONS(414), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(181), 6, + STATE(186), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10329] = 14, - ACTIONS(13), 1, - aux_sym_octal_token1, + [10939] = 14, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(373), 1, + ACTIONS(406), 1, sym_identifier, - ACTIONS(377), 1, - anon_sym_LPAREN, - ACTIONS(379), 1, + ACTIONS(408), 1, aux_sym_base_ten_token1, - STATE(176), 1, - sym_number, - STATE(177), 1, + ACTIONS(412), 1, + anon_sym_LPAREN, + STATE(184), 1, sym__float, - STATE(186), 1, + STATE(185), 1, + sym_number, + STATE(195), 1, sym_formula_expression, - STATE(235), 1, + STATE(239), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(381), 2, + ACTIONS(410), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(181), 6, + STATE(186), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10382] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, + [10992] = 14, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(373), 1, + ACTIONS(406), 1, sym_identifier, - ACTIONS(377), 1, + ACTIONS(408), 1, + aux_sym_base_ten_token1, + ACTIONS(412), 1, anon_sym_LPAREN, - STATE(100), 1, + STATE(184), 1, sym__float, - STATE(101), 1, + STATE(185), 1, sym_number, - STATE(194), 1, + STATE(188), 1, sym_formula_expression, - STATE(234), 1, + STATE(239), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(375), 2, + ACTIONS(410), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(181), 6, + STATE(186), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10435] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, + [11045] = 14, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(373), 1, + ACTIONS(406), 1, sym_identifier, - ACTIONS(377), 1, + ACTIONS(408), 1, + aux_sym_base_ten_token1, + ACTIONS(412), 1, anon_sym_LPAREN, - STATE(100), 1, + STATE(184), 1, sym__float, - STATE(101), 1, + STATE(185), 1, sym_number, - STATE(191), 1, + STATE(193), 1, sym_formula_expression, - STATE(234), 1, + STATE(239), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(375), 2, + ACTIONS(410), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(181), 6, + STATE(186), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10488] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [11098] = 14, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(373), 1, + ACTIONS(406), 1, sym_identifier, - ACTIONS(377), 1, + ACTIONS(412), 1, anon_sym_LPAREN, - STATE(100), 1, - sym__float, - STATE(101), 1, + STATE(104), 1, sym_number, - STATE(180), 1, + STATE(105), 1, + sym__float, + STATE(201), 1, sym_formula_expression, - STATE(234), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(375), 2, + ACTIONS(414), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(181), 6, + STATE(186), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10541] = 14, + [11151] = 14, ACTIONS(13), 1, - aux_sym_octal_token1, + aux_sym_base_ten_token1, ACTIONS(15), 1, - aux_sym_hex_token1, + aux_sym_octal_token1, ACTIONS(17), 1, + aux_sym_hex_token1, + ACTIONS(19), 1, aux_sym_binary_token1, - ACTIONS(373), 1, + ACTIONS(406), 1, sym_identifier, - ACTIONS(377), 1, + ACTIONS(412), 1, anon_sym_LPAREN, - ACTIONS(379), 1, - aux_sym_base_ten_token1, - STATE(176), 1, + STATE(104), 1, sym_number, - STATE(177), 1, + STATE(105), 1, sym__float, - STATE(189), 1, + STATE(206), 1, sym_formula_expression, - STATE(235), 1, + STATE(242), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(381), 2, + ACTIONS(414), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(227), 4, + STATE(237), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(181), 6, + STATE(186), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10594] = 3, + [11204] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(383), 7, + ACTIONS(416), 8, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, anon_sym_let, - ACTIONS(124), 11, + ACTIONS(123), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -10872,19 +11482,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LT_LT_LT, - [10621] = 3, + [11232] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(385), 7, + ACTIONS(418), 8, sym_identifier, sym_default, + sym_self, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, anon_sym_let, - ACTIONS(208), 10, + ACTIONS(232), 10, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -10895,19 +11506,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [10647] = 4, + [11259] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(155), 2, + ACTIONS(162), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(151), 4, + ACTIONS(158), 4, sym_identifier, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(153), 10, + ACTIONS(160), 10, sym_unit_quote, anon_sym_DOT, anon_sym_DASH, @@ -10918,19 +11529,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10674] = 4, - ACTIONS(387), 1, - anon_sym_DOT, + [11286] = 5, + STATE(194), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(170), 3, + ACTIONS(420), 2, + sym_identifier, + sym_unit_quote, + ACTIONS(204), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(172), 10, - sym_identifier, - sym_unit_quote, + ACTIONS(206), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10939,20 +11551,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10699] = 5, - STATE(185), 1, - sym__unit, + [11313] = 4, + ACTIONS(422), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(389), 2, - sym_identifier, - sym_unit_quote, - ACTIONS(176), 3, + ACTIONS(198), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(178), 8, + ACTIONS(200), 10, + sym_identifier, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10961,17 +11572,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10726] = 3, + [11338] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(151), 3, + ACTIONS(426), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(153), 10, - sym_identifier, - sym_unit_quote, + ACTIONS(424), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10980,34 +11589,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10748] = 3, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [11360] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(222), 3, + ACTIONS(430), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(224), 10, - sym_identifier, - sym_unit_quote, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [10770] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(393), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(391), 10, + ACTIONS(428), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11018,15 +11610,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [10792] = 3, + [11382] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(397), 3, + ACTIONS(434), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(395), 10, + ACTIONS(432), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11037,15 +11629,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [10814] = 3, + [11404] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(401), 3, + ACTIONS(158), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(399), 10, + ACTIONS(160), 10, + sym_identifier, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11054,17 +11648,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [10836] = 3, + [11426] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(266), 3, + ACTIONS(250), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(268), 8, + ACTIONS(252), 10, + sym_identifier, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11073,133 +11667,129 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10856] = 4, - ACTIONS(403), 1, + [11448] = 6, + ACTIONS(436), 1, anon_sym_STAR_STAR, + ACTIONS(438), 1, + anon_sym_STAR, + ACTIONS(440), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(393), 3, - anon_sym_STAR, + ACTIONS(434), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(391), 7, + ACTIONS(432), 6, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10878] = 3, + [11474] = 4, + ACTIONS(436), 1, + anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(282), 3, + ACTIONS(434), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(284), 8, + ACTIONS(432), 7, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10898] = 7, - ACTIONS(403), 1, + [11496] = 7, + ACTIONS(436), 1, anon_sym_STAR_STAR, - ACTIONS(407), 1, + ACTIONS(438), 1, anon_sym_STAR, - ACTIONS(409), 1, + ACTIONS(440), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(405), 2, + ACTIONS(442), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(411), 2, + ACTIONS(444), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(413), 4, + ACTIONS(446), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10926] = 6, - ACTIONS(403), 1, - anon_sym_STAR_STAR, - ACTIONS(407), 1, - anon_sym_STAR, - ACTIONS(409), 1, - anon_sym_SLASH, + [11524] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(393), 2, + ACTIONS(298), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(391), 6, + ACTIONS(300), 8, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10952] = 7, - ACTIONS(403), 1, + [11544] = 7, + ACTIONS(436), 1, anon_sym_STAR_STAR, - ACTIONS(407), 1, + ACTIONS(438), 1, anon_sym_STAR, - ACTIONS(409), 1, + ACTIONS(440), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(405), 2, + ACTIONS(442), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(415), 2, + ACTIONS(448), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(417), 4, + ACTIONS(450), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10980] = 7, - ACTIONS(403), 1, - anon_sym_STAR_STAR, - ACTIONS(407), 1, - anon_sym_STAR, - ACTIONS(409), 1, - anon_sym_SLASH, + [11572] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(405), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(419), 2, + ACTIONS(286), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(421), 4, + ACTIONS(288), 8, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11008] = 3, + [11592] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 3, + ACTIONS(278), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(276), 8, + ACTIONS(280), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11208,592 +11798,625 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11028] = 5, - ACTIONS(423), 1, + [11612] = 7, + ACTIONS(436), 1, anon_sym_STAR_STAR, - ACTIONS(425), 1, + ACTIONS(438), 1, anon_sym_STAR, - ACTIONS(427), 1, + ACTIONS(440), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(391), 4, + ACTIONS(442), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [11048] = 6, - ACTIONS(423), 1, - anon_sym_STAR_STAR, - ACTIONS(425), 1, - anon_sym_STAR, - ACTIONS(427), 1, - anon_sym_SLASH, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(413), 2, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - ACTIONS(429), 2, - anon_sym_DASH, - anon_sym_PLUS, - [11070] = 4, - ACTIONS(393), 1, + ACTIONS(452), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(454), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [11640] = 4, + ACTIONS(434), 1, anon_sym_STAR, - ACTIONS(423), 1, + ACTIONS(456), 1, anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(391), 5, + ACTIONS(432), 5, anon_sym_DASH, anon_sym_PLUS, anon_sym_SLASH, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [11088] = 6, - ACTIONS(423), 1, + [11658] = 5, + ACTIONS(456), 1, anon_sym_STAR_STAR, - ACTIONS(425), 1, + ACTIONS(458), 1, anon_sym_STAR, - ACTIONS(427), 1, + ACTIONS(460), 1, anon_sym_SLASH, - ACTIONS(431), 1, - anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(429), 2, + ACTIONS(432), 4, anon_sym_DASH, anon_sym_PLUS, - [11109] = 6, - ACTIONS(423), 1, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [11678] = 6, + ACTIONS(456), 1, anon_sym_STAR_STAR, - ACTIONS(425), 1, + ACTIONS(458), 1, anon_sym_STAR, - ACTIONS(427), 1, + ACTIONS(460), 1, anon_sym_SLASH, - ACTIONS(433), 1, - anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(429), 2, + ACTIONS(450), 2, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + ACTIONS(462), 2, anon_sym_DASH, anon_sym_PLUS, - [11130] = 7, - ACTIONS(73), 1, + [11700] = 7, + ACTIONS(75), 1, sym_varadic_dots, - ACTIONS(435), 1, + ACTIONS(464), 1, sym_identifier, - ACTIONS(437), 1, + ACTIONS(466), 1, anon_sym_RPAREN, - STATE(200), 1, + STATE(205), 1, aux_sym_struct_definition_repeat1, - STATE(225), 1, + STATE(234), 1, sym_struct_member, - STATE(254), 1, + STATE(255), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11153] = 7, - ACTIONS(73), 1, + [11723] = 6, + ACTIONS(456), 1, + anon_sym_STAR_STAR, + ACTIONS(458), 1, + anon_sym_STAR, + ACTIONS(460), 1, + anon_sym_SLASH, + ACTIONS(468), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(462), 2, + anon_sym_DASH, + anon_sym_PLUS, + [11744] = 7, + ACTIONS(75), 1, sym_varadic_dots, - ACTIONS(435), 1, + ACTIONS(464), 1, sym_identifier, - ACTIONS(439), 1, + ACTIONS(470), 1, anon_sym_RPAREN, - STATE(196), 1, + STATE(208), 1, aux_sym_struct_definition_repeat1, - STATE(225), 1, + STATE(234), 1, sym_struct_member, - STATE(239), 1, + STATE(260), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11176] = 7, - ACTIONS(73), 1, + [11767] = 7, + ACTIONS(75), 1, sym_varadic_dots, - ACTIONS(435), 1, + ACTIONS(464), 1, sym_identifier, - ACTIONS(441), 1, + ACTIONS(472), 1, anon_sym_RPAREN, - STATE(200), 1, + STATE(208), 1, aux_sym_struct_definition_repeat1, - STATE(225), 1, + STATE(234), 1, sym_struct_member, - STATE(252), 1, + STATE(250), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11199] = 6, - ACTIONS(423), 1, + [11790] = 6, + ACTIONS(456), 1, anon_sym_STAR_STAR, - ACTIONS(425), 1, + ACTIONS(458), 1, anon_sym_STAR, - ACTIONS(427), 1, + ACTIONS(460), 1, anon_sym_SLASH, - ACTIONS(443), 1, - anon_sym_RPAREN, + ACTIONS(474), 1, + anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(429), 2, + ACTIONS(462), 2, anon_sym_DASH, anon_sym_PLUS, - [11220] = 5, - ACTIONS(445), 1, + [11811] = 6, + ACTIONS(456), 1, + anon_sym_STAR_STAR, + ACTIONS(458), 1, + anon_sym_STAR, + ACTIONS(460), 1, + anon_sym_SLASH, + ACTIONS(476), 1, + anon_sym_GT_GT_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(462), 2, + anon_sym_DASH, + anon_sym_PLUS, + [11832] = 5, + ACTIONS(478), 1, sym_identifier, - STATE(200), 1, + STATE(208), 1, aux_sym_struct_definition_repeat1, - STATE(245), 1, + STATE(248), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(448), 2, + ACTIONS(481), 2, anon_sym_RPAREN, sym_varadic_dots, - [11238] = 4, - ACTIONS(450), 1, + [11850] = 4, + ACTIONS(483), 1, sym_identifier, - ACTIONS(453), 1, + ACTIONS(485), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(201), 2, + STATE(212), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11253] = 4, - ACTIONS(455), 1, + [11865] = 4, + ACTIONS(487), 1, sym_identifier, - ACTIONS(457), 1, + ACTIONS(490), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(201), 2, + STATE(210), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11268] = 4, - ACTIONS(455), 1, + [11880] = 4, + ACTIONS(483), 1, sym_identifier, - ACTIONS(459), 1, + ACTIONS(492), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(204), 2, + STATE(210), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11283] = 4, - ACTIONS(455), 1, + [11895] = 4, + ACTIONS(483), 1, sym_identifier, - ACTIONS(461), 1, + ACTIONS(494), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(201), 2, + STATE(210), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11298] = 4, - ACTIONS(455), 1, + [11910] = 4, + ACTIONS(496), 1, sym_identifier, - ACTIONS(463), 1, - anon_sym_in, + ACTIONS(498), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(202), 2, - sym_let_in_assignment, - aux_sym_let_in_repeat1, - [11313] = 4, - ACTIONS(465), 1, + STATE(12), 2, + sym_identity_path, + sym_struct_definition, + [11925] = 4, + ACTIONS(496), 1, sym_identifier, - ACTIONS(467), 1, + ACTIONS(498), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(44), 2, - sym_path, + STATE(42), 2, + sym_identity_path, sym_struct_definition, - [11328] = 4, - ACTIONS(465), 1, + [11940] = 4, + ACTIONS(483), 1, sym_identifier, - ACTIONS(467), 1, - anon_sym_LPAREN, + ACTIONS(500), 1, + anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(24), 2, - sym_path, - sym_struct_definition, - [11343] = 4, - ACTIONS(469), 1, + STATE(211), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [11955] = 4, + ACTIONS(502), 1, anon_sym_RPAREN, - ACTIONS(471), 1, + ACTIONS(504), 1, anon_sym_COMMA, - STATE(208), 1, + STATE(218), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11357] = 4, - ACTIONS(474), 1, - sym_identifier, - ACTIONS(476), 1, - anon_sym_RPAREN, - STATE(222), 1, - sym_dictionary_member_assignment, + [11969] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11371] = 4, - ACTIONS(478), 1, + ACTIONS(481), 3, + sym_identifier, + anon_sym_RPAREN, + sym_varadic_dots, + [11979] = 4, + ACTIONS(506), 1, anon_sym_RPAREN, - ACTIONS(480), 1, + ACTIONS(508), 1, anon_sym_COMMA, - STATE(220), 1, + STATE(228), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11385] = 3, - ACTIONS(482), 1, - anon_sym_EQ, + [11993] = 4, + ACTIONS(506), 1, + anon_sym_RPAREN, + ACTIONS(510), 1, + sym_identifier, + STATE(243), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [11397] = 4, - ACTIONS(486), 1, + [12007] = 4, + ACTIONS(512), 1, anon_sym_RPAREN, - ACTIONS(488), 1, + ACTIONS(514), 1, anon_sym_COMMA, - STATE(216), 1, + STATE(222), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11411] = 4, - ACTIONS(474), 1, + [12021] = 4, + ACTIONS(510), 1, sym_identifier, - ACTIONS(490), 1, + ACTIONS(516), 1, anon_sym_RPAREN, - STATE(212), 1, + STATE(216), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11425] = 4, - ACTIONS(474), 1, - sym_identifier, - ACTIONS(492), 1, + [12035] = 4, + ACTIONS(518), 1, anon_sym_RPAREN, - STATE(210), 1, - sym_dictionary_member_assignment, + ACTIONS(520), 1, + anon_sym_COMMA, + STATE(228), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11439] = 4, - ACTIONS(474), 1, + [12049] = 4, + ACTIONS(510), 1, sym_identifier, - ACTIONS(494), 1, + ACTIONS(518), 1, anon_sym_RPAREN, - STATE(222), 1, + STATE(243), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11453] = 4, - ACTIONS(494), 1, - anon_sym_RPAREN, - ACTIONS(496), 1, - anon_sym_COMMA, - STATE(208), 1, - aux_sym_dictionary_construction_repeat1, + [12063] = 3, + ACTIONS(522), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11467] = 2, + ACTIONS(524), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [12075] = 4, + ACTIONS(510), 1, + sym_identifier, + ACTIONS(526), 1, + anon_sym_RPAREN, + STATE(243), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(448), 3, - sym_identifier, - anon_sym_RPAREN, - sym_varadic_dots, - [11477] = 4, - ACTIONS(474), 1, + [12089] = 4, + ACTIONS(510), 1, sym_identifier, - ACTIONS(498), 1, + ACTIONS(528), 1, anon_sym_RPAREN, - STATE(222), 1, + STATE(220), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11491] = 4, - ACTIONS(474), 1, + [12103] = 4, + ACTIONS(510), 1, sym_identifier, - ACTIONS(500), 1, + ACTIONS(530), 1, anon_sym_RPAREN, - STATE(222), 1, + STATE(243), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11505] = 4, - ACTIONS(500), 1, + [12117] = 4, + ACTIONS(532), 1, anon_sym_RPAREN, - ACTIONS(502), 1, + ACTIONS(534), 1, anon_sym_COMMA, - STATE(208), 1, + STATE(228), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11519] = 3, - ACTIONS(343), 1, - anon_sym_COLON, - STATE(211), 1, - sym_declaration_type, + [12131] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11530] = 2, + ACTIONS(537), 2, + sym_identifier, + anon_sym_in, + [12140] = 3, + ACTIONS(510), 1, + sym_identifier, + STATE(243), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(469), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [11539] = 2, + [12151] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(504), 2, + ACTIONS(539), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [11548] = 2, + [12160] = 3, + ACTIONS(376), 1, + anon_sym_COLON, + STATE(224), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(506), 2, + [12171] = 3, + ACTIONS(541), 1, aux_sym_signed_integer_token1, + ACTIONS(543), 1, aux_sym_unsigned_integer_token1, - [11557] = 3, - ACTIONS(508), 1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [12182] = 3, + ACTIONS(545), 1, anon_sym_RPAREN, - ACTIONS(510), 1, + ACTIONS(547), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11568] = 2, + [12193] = 3, + ACTIONS(352), 1, + anon_sym_LPAREN, + STATE(145), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(512), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [11577] = 2, + [12204] = 3, + ACTIONS(222), 1, + anon_sym_LPAREN, + STATE(100), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(514), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [11586] = 2, + [12215] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(516), 2, - sym_identifier, - anon_sym_in, - [11595] = 3, - ACTIONS(518), 1, + ACTIONS(549), 2, aux_sym_signed_integer_token1, - ACTIONS(520), 1, aux_sym_unsigned_integer_token1, + [12224] = 3, + ACTIONS(545), 1, + anon_sym_RPAREN, + ACTIONS(551), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11606] = 3, - ACTIONS(311), 1, - anon_sym_LPAREN, - STATE(134), 1, - sym_dictionary_construction, + [12235] = 3, + ACTIONS(553), 1, + aux_sym_signed_integer_token1, + ACTIONS(555), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11617] = 3, - ACTIONS(522), 1, + [12246] = 3, + ACTIONS(557), 1, aux_sym_base_ten_token1, - STATE(67), 1, + STATE(190), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11628] = 3, - ACTIONS(474), 1, - sym_identifier, - STATE(222), 1, - sym_dictionary_member_assignment, + [12257] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11639] = 3, - ACTIONS(508), 1, - anon_sym_RPAREN, - ACTIONS(524), 1, - anon_sym_COMMA, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [11650] = 3, - ACTIONS(526), 1, + ACTIONS(559), 2, aux_sym_signed_integer_token1, - ACTIONS(528), 1, + aux_sym_unsigned_integer_token1, + [12266] = 3, + ACTIONS(561), 1, + aux_sym_signed_integer_token1, + ACTIONS(563), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11661] = 3, - ACTIONS(530), 1, - aux_sym_signed_integer_token1, - ACTIONS(532), 1, - aux_sym_unsigned_integer_token1, + [12277] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11672] = 3, - ACTIONS(192), 1, - anon_sym_LPAREN, - STATE(82), 1, - sym_dictionary_construction, + ACTIONS(532), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [12286] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11683] = 3, - ACTIONS(534), 1, + ACTIONS(565), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [12295] = 3, + ACTIONS(567), 1, aux_sym_base_ten_token1, - STATE(179), 1, + STATE(70), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11694] = 3, - ACTIONS(536), 1, + [12306] = 3, + ACTIONS(569), 1, aux_sym_base_ten_token1, - STATE(103), 1, + STATE(106), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11705] = 2, - ACTIONS(538), 1, - anon_sym_RPAREN, + [12317] = 2, + ACTIONS(571), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11713] = 2, - ACTIONS(540), 1, - aux_sym_binary_token2, + [12325] = 2, + ACTIONS(547), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11721] = 2, - ACTIONS(542), 1, - sym_identifier, + [12333] = 2, + ACTIONS(573), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11729] = 2, - ACTIONS(544), 1, - aux_sym_base_ten_token1, + [12341] = 2, + ACTIONS(575), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11737] = 2, - ACTIONS(546), 1, - ts_builtin_sym_end, + [12349] = 2, + ACTIONS(577), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11745] = 2, - ACTIONS(548), 1, - anon_sym_RPAREN, + [12357] = 2, + ACTIONS(579), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11753] = 2, - ACTIONS(510), 1, - anon_sym_COMMA, + [12365] = 2, + ACTIONS(581), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11761] = 2, - ACTIONS(550), 1, - anon_sym_EQ, + [12373] = 2, + ACTIONS(583), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11769] = 2, - ACTIONS(552), 1, + [12381] = 2, + ACTIONS(585), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11777] = 2, - ACTIONS(554), 1, - anon_sym_EQ, + [12389] = 2, + ACTIONS(587), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11785] = 2, - ACTIONS(556), 1, - sym_identifier, + [12397] = 2, + ACTIONS(589), 1, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11793] = 2, - ACTIONS(558), 1, + [12405] = 2, + ACTIONS(591), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11801] = 2, - ACTIONS(560), 1, - aux_sym_hex_token2, + [12413] = 2, + ACTIONS(593), 1, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11809] = 2, - ACTIONS(562), 1, + [12421] = 2, + ACTIONS(595), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11817] = 2, - ACTIONS(564), 1, + [12429] = 2, + ACTIONS(597), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [12437] = 2, + ACTIONS(599), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11825] = 2, - ACTIONS(566), 1, - anon_sym_RPAREN, + [12445] = 2, + ACTIONS(601), 1, + aux_sym_hex_token2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [12453] = 2, + ACTIONS(603), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11801,531 +12424,558 @@ static const uint16_t ts_small_parse_table[] = { static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(7)] = 0, - [SMALL_STATE(8)] = 95, - [SMALL_STATE(9)] = 190, - [SMALL_STATE(10)] = 285, - [SMALL_STATE(11)] = 380, - [SMALL_STATE(12)] = 475, - [SMALL_STATE(13)] = 564, - [SMALL_STATE(14)] = 653, - [SMALL_STATE(15)] = 742, - [SMALL_STATE(16)] = 831, - [SMALL_STATE(17)] = 920, - [SMALL_STATE(18)] = 1009, - [SMALL_STATE(19)] = 1098, - [SMALL_STATE(20)] = 1187, - [SMALL_STATE(21)] = 1276, - [SMALL_STATE(22)] = 1365, - [SMALL_STATE(23)] = 1454, - [SMALL_STATE(24)] = 1543, - [SMALL_STATE(25)] = 1632, - [SMALL_STATE(26)] = 1721, - [SMALL_STATE(27)] = 1810, - [SMALL_STATE(28)] = 1899, - [SMALL_STATE(29)] = 1952, - [SMALL_STATE(30)] = 2041, - [SMALL_STATE(31)] = 2130, - [SMALL_STATE(32)] = 2219, - [SMALL_STATE(33)] = 2308, - [SMALL_STATE(34)] = 2397, - [SMALL_STATE(35)] = 2486, - [SMALL_STATE(36)] = 2575, - [SMALL_STATE(37)] = 2664, - [SMALL_STATE(38)] = 2753, - [SMALL_STATE(39)] = 2842, - [SMALL_STATE(40)] = 2931, - [SMALL_STATE(41)] = 3020, - [SMALL_STATE(42)] = 3109, - [SMALL_STATE(43)] = 3198, - [SMALL_STATE(44)] = 3287, - [SMALL_STATE(45)] = 3376, - [SMALL_STATE(46)] = 3465, - [SMALL_STATE(47)] = 3554, - [SMALL_STATE(48)] = 3643, - [SMALL_STATE(49)] = 3732, - [SMALL_STATE(50)] = 3821, - [SMALL_STATE(51)] = 3910, - [SMALL_STATE(52)] = 3999, - [SMALL_STATE(53)] = 4052, - [SMALL_STATE(54)] = 4105, - [SMALL_STATE(55)] = 4156, - [SMALL_STATE(56)] = 4209, - [SMALL_STATE(57)] = 4262, - [SMALL_STATE(58)] = 4340, - [SMALL_STATE(59)] = 4402, - [SMALL_STATE(60)] = 4452, - [SMALL_STATE(61)] = 4536, - [SMALL_STATE(62)] = 4586, - [SMALL_STATE(63)] = 4634, - [SMALL_STATE(64)] = 4718, - [SMALL_STATE(65)] = 4766, - [SMALL_STATE(66)] = 4814, - [SMALL_STATE(67)] = 4862, - [SMALL_STATE(68)] = 4910, - [SMALL_STATE(69)] = 4970, - [SMALL_STATE(70)] = 5024, - [SMALL_STATE(71)] = 5080, - [SMALL_STATE(72)] = 5142, - [SMALL_STATE(73)] = 5208, - [SMALL_STATE(74)] = 5278, - [SMALL_STATE(75)] = 5346, - [SMALL_STATE(76)] = 5418, - [SMALL_STATE(77)] = 5494, - [SMALL_STATE(78)] = 5574, - [SMALL_STATE(79)] = 5658, - [SMALL_STATE(80)] = 5706, - [SMALL_STATE(81)] = 5790, - [SMALL_STATE(82)] = 5874, - [SMALL_STATE(83)] = 5921, - [SMALL_STATE(84)] = 5968, - [SMALL_STATE(85)] = 6015, - [SMALL_STATE(86)] = 6062, - [SMALL_STATE(87)] = 6109, - [SMALL_STATE(88)] = 6156, - [SMALL_STATE(89)] = 6203, - [SMALL_STATE(90)] = 6252, - [SMALL_STATE(91)] = 6299, - [SMALL_STATE(92)] = 6346, - [SMALL_STATE(93)] = 6393, - [SMALL_STATE(94)] = 6440, - [SMALL_STATE(95)] = 6487, - [SMALL_STATE(96)] = 6534, - [SMALL_STATE(97)] = 6581, - [SMALL_STATE(98)] = 6628, - [SMALL_STATE(99)] = 6675, - [SMALL_STATE(100)] = 6722, - [SMALL_STATE(101)] = 6771, - [SMALL_STATE(102)] = 6816, - [SMALL_STATE(103)] = 6858, - [SMALL_STATE(104)] = 6900, - [SMALL_STATE(105)] = 6945, - [SMALL_STATE(106)] = 6990, - [SMALL_STATE(107)] = 7035, - [SMALL_STATE(108)] = 7075, - [SMALL_STATE(109)] = 7121, - [SMALL_STATE(110)] = 7195, - [SMALL_STATE(111)] = 7243, - [SMALL_STATE(112)] = 7297, - [SMALL_STATE(113)] = 7355, - [SMALL_STATE(114)] = 7407, - [SMALL_STATE(115)] = 7481, - [SMALL_STATE(116)] = 7543, - [SMALL_STATE(117)] = 7609, - [SMALL_STATE(118)] = 7665, - [SMALL_STATE(119)] = 7705, - [SMALL_STATE(120)] = 7765, - [SMALL_STATE(121)] = 7839, - [SMALL_STATE(122)] = 7881, - [SMALL_STATE(123)] = 7923, - [SMALL_STATE(124)] = 7963, - [SMALL_STATE(125)] = 8037, - [SMALL_STATE(126)] = 8077, - [SMALL_STATE(127)] = 8145, - [SMALL_STATE(128)] = 8215, - [SMALL_STATE(129)] = 8255, - [SMALL_STATE(130)] = 8295, - [SMALL_STATE(131)] = 8335, - [SMALL_STATE(132)] = 8409, - [SMALL_STATE(133)] = 8448, - [SMALL_STATE(134)] = 8487, - [SMALL_STATE(135)] = 8526, - [SMALL_STATE(136)] = 8565, - [SMALL_STATE(137)] = 8604, - [SMALL_STATE(138)] = 8643, - [SMALL_STATE(139)] = 8682, - [SMALL_STATE(140)] = 8721, - [SMALL_STATE(141)] = 8760, - [SMALL_STATE(142)] = 8799, - [SMALL_STATE(143)] = 8838, - [SMALL_STATE(144)] = 8877, - [SMALL_STATE(145)] = 8916, - [SMALL_STATE(146)] = 8963, - [SMALL_STATE(147)] = 9033, - [SMALL_STATE(148)] = 9102, - [SMALL_STATE(149)] = 9169, - [SMALL_STATE(150)] = 9238, - [SMALL_STATE(151)] = 9307, - [SMALL_STATE(152)] = 9374, - [SMALL_STATE(153)] = 9443, - [SMALL_STATE(154)] = 9509, - [SMALL_STATE(155)] = 9575, - [SMALL_STATE(156)] = 9641, - [SMALL_STATE(157)] = 9707, - [SMALL_STATE(158)] = 9773, - [SMALL_STATE(159)] = 9839, - [SMALL_STATE(160)] = 9905, - [SMALL_STATE(161)] = 9958, - [SMALL_STATE(162)] = 10011, - [SMALL_STATE(163)] = 10064, - [SMALL_STATE(164)] = 10117, - [SMALL_STATE(165)] = 10170, - [SMALL_STATE(166)] = 10223, - [SMALL_STATE(167)] = 10276, - [SMALL_STATE(168)] = 10329, - [SMALL_STATE(169)] = 10382, - [SMALL_STATE(170)] = 10435, - [SMALL_STATE(171)] = 10488, - [SMALL_STATE(172)] = 10541, - [SMALL_STATE(173)] = 10594, - [SMALL_STATE(174)] = 10621, - [SMALL_STATE(175)] = 10647, - [SMALL_STATE(176)] = 10674, - [SMALL_STATE(177)] = 10699, - [SMALL_STATE(178)] = 10726, - [SMALL_STATE(179)] = 10748, - [SMALL_STATE(180)] = 10770, - [SMALL_STATE(181)] = 10792, - [SMALL_STATE(182)] = 10814, - [SMALL_STATE(183)] = 10836, - [SMALL_STATE(184)] = 10856, - [SMALL_STATE(185)] = 10878, - [SMALL_STATE(186)] = 10898, - [SMALL_STATE(187)] = 10926, - [SMALL_STATE(188)] = 10952, - [SMALL_STATE(189)] = 10980, - [SMALL_STATE(190)] = 11008, - [SMALL_STATE(191)] = 11028, - [SMALL_STATE(192)] = 11048, - [SMALL_STATE(193)] = 11070, - [SMALL_STATE(194)] = 11088, - [SMALL_STATE(195)] = 11109, - [SMALL_STATE(196)] = 11130, - [SMALL_STATE(197)] = 11153, - [SMALL_STATE(198)] = 11176, - [SMALL_STATE(199)] = 11199, - [SMALL_STATE(200)] = 11220, - [SMALL_STATE(201)] = 11238, - [SMALL_STATE(202)] = 11253, - [SMALL_STATE(203)] = 11268, - [SMALL_STATE(204)] = 11283, - [SMALL_STATE(205)] = 11298, - [SMALL_STATE(206)] = 11313, - [SMALL_STATE(207)] = 11328, - [SMALL_STATE(208)] = 11343, - [SMALL_STATE(209)] = 11357, - [SMALL_STATE(210)] = 11371, - [SMALL_STATE(211)] = 11385, - [SMALL_STATE(212)] = 11397, - [SMALL_STATE(213)] = 11411, - [SMALL_STATE(214)] = 11425, - [SMALL_STATE(215)] = 11439, - [SMALL_STATE(216)] = 11453, - [SMALL_STATE(217)] = 11467, - [SMALL_STATE(218)] = 11477, - [SMALL_STATE(219)] = 11491, - [SMALL_STATE(220)] = 11505, - [SMALL_STATE(221)] = 11519, - [SMALL_STATE(222)] = 11530, - [SMALL_STATE(223)] = 11539, - [SMALL_STATE(224)] = 11548, - [SMALL_STATE(225)] = 11557, - [SMALL_STATE(226)] = 11568, - [SMALL_STATE(227)] = 11577, - [SMALL_STATE(228)] = 11586, - [SMALL_STATE(229)] = 11595, - [SMALL_STATE(230)] = 11606, - [SMALL_STATE(231)] = 11617, - [SMALL_STATE(232)] = 11628, - [SMALL_STATE(233)] = 11639, - [SMALL_STATE(234)] = 11650, - [SMALL_STATE(235)] = 11661, - [SMALL_STATE(236)] = 11672, - [SMALL_STATE(237)] = 11683, - [SMALL_STATE(238)] = 11694, - [SMALL_STATE(239)] = 11705, - [SMALL_STATE(240)] = 11713, - [SMALL_STATE(241)] = 11721, - [SMALL_STATE(242)] = 11729, - [SMALL_STATE(243)] = 11737, - [SMALL_STATE(244)] = 11745, - [SMALL_STATE(245)] = 11753, - [SMALL_STATE(246)] = 11761, - [SMALL_STATE(247)] = 11769, - [SMALL_STATE(248)] = 11777, - [SMALL_STATE(249)] = 11785, - [SMALL_STATE(250)] = 11793, - [SMALL_STATE(251)] = 11801, - [SMALL_STATE(252)] = 11809, - [SMALL_STATE(253)] = 11817, - [SMALL_STATE(254)] = 11825, + [SMALL_STATE(8)] = 99, + [SMALL_STATE(9)] = 198, + [SMALL_STATE(10)] = 297, + [SMALL_STATE(11)] = 396, + [SMALL_STATE(12)] = 495, + [SMALL_STATE(13)] = 588, + [SMALL_STATE(14)] = 681, + [SMALL_STATE(15)] = 774, + [SMALL_STATE(16)] = 867, + [SMALL_STATE(17)] = 960, + [SMALL_STATE(18)] = 1053, + [SMALL_STATE(19)] = 1146, + [SMALL_STATE(20)] = 1239, + [SMALL_STATE(21)] = 1332, + [SMALL_STATE(22)] = 1425, + [SMALL_STATE(23)] = 1518, + [SMALL_STATE(24)] = 1611, + [SMALL_STATE(25)] = 1704, + [SMALL_STATE(26)] = 1797, + [SMALL_STATE(27)] = 1890, + [SMALL_STATE(28)] = 1983, + [SMALL_STATE(29)] = 2076, + [SMALL_STATE(30)] = 2169, + [SMALL_STATE(31)] = 2262, + [SMALL_STATE(32)] = 2355, + [SMALL_STATE(33)] = 2448, + [SMALL_STATE(34)] = 2541, + [SMALL_STATE(35)] = 2634, + [SMALL_STATE(36)] = 2727, + [SMALL_STATE(37)] = 2820, + [SMALL_STATE(38)] = 2913, + [SMALL_STATE(39)] = 3006, + [SMALL_STATE(40)] = 3099, + [SMALL_STATE(41)] = 3192, + [SMALL_STATE(42)] = 3285, + [SMALL_STATE(43)] = 3378, + [SMALL_STATE(44)] = 3471, + [SMALL_STATE(45)] = 3564, + [SMALL_STATE(46)] = 3657, + [SMALL_STATE(47)] = 3750, + [SMALL_STATE(48)] = 3843, + [SMALL_STATE(49)] = 3936, + [SMALL_STATE(50)] = 4029, + [SMALL_STATE(51)] = 4122, + [SMALL_STATE(52)] = 4176, + [SMALL_STATE(53)] = 4230, + [SMALL_STATE(54)] = 4284, + [SMALL_STATE(55)] = 4338, + [SMALL_STATE(56)] = 4392, + [SMALL_STATE(57)] = 4446, + [SMALL_STATE(58)] = 4500, + [SMALL_STATE(59)] = 4552, + [SMALL_STATE(60)] = 4606, + [SMALL_STATE(61)] = 4657, + [SMALL_STATE(62)] = 4720, + [SMALL_STATE(63)] = 4805, + [SMALL_STATE(64)] = 4856, + [SMALL_STATE(65)] = 4905, + [SMALL_STATE(66)] = 4954, + [SMALL_STATE(67)] = 5039, + [SMALL_STATE(68)] = 5088, + [SMALL_STATE(69)] = 5137, + [SMALL_STATE(70)] = 5186, + [SMALL_STATE(71)] = 5235, + [SMALL_STATE(72)] = 5296, + [SMALL_STATE(73)] = 5351, + [SMALL_STATE(74)] = 5408, + [SMALL_STATE(75)] = 5471, + [SMALL_STATE(76)] = 5538, + [SMALL_STATE(77)] = 5609, + [SMALL_STATE(78)] = 5678, + [SMALL_STATE(79)] = 5751, + [SMALL_STATE(80)] = 5828, + [SMALL_STATE(81)] = 5907, + [SMALL_STATE(82)] = 5988, + [SMALL_STATE(83)] = 6073, + [SMALL_STATE(84)] = 6122, + [SMALL_STATE(85)] = 6207, + [SMALL_STATE(86)] = 6292, + [SMALL_STATE(87)] = 6340, + [SMALL_STATE(88)] = 6388, + [SMALL_STATE(89)] = 6436, + [SMALL_STATE(90)] = 6484, + [SMALL_STATE(91)] = 6532, + [SMALL_STATE(92)] = 6582, + [SMALL_STATE(93)] = 6630, + [SMALL_STATE(94)] = 6678, + [SMALL_STATE(95)] = 6726, + [SMALL_STATE(96)] = 6774, + [SMALL_STATE(97)] = 6822, + [SMALL_STATE(98)] = 6870, + [SMALL_STATE(99)] = 6918, + [SMALL_STATE(100)] = 6966, + [SMALL_STATE(101)] = 7014, + [SMALL_STATE(102)] = 7062, + [SMALL_STATE(103)] = 7110, + [SMALL_STATE(104)] = 7157, + [SMALL_STATE(105)] = 7202, + [SMALL_STATE(106)] = 7251, + [SMALL_STATE(107)] = 7293, + [SMALL_STATE(108)] = 7335, + [SMALL_STATE(109)] = 7380, + [SMALL_STATE(110)] = 7425, + [SMALL_STATE(111)] = 7470, + [SMALL_STATE(112)] = 7515, + [SMALL_STATE(113)] = 7560, + [SMALL_STATE(114)] = 7605, + [SMALL_STATE(115)] = 7645, + [SMALL_STATE(116)] = 7699, + [SMALL_STATE(117)] = 7739, + [SMALL_STATE(118)] = 7779, + [SMALL_STATE(119)] = 7821, + [SMALL_STATE(120)] = 7887, + [SMALL_STATE(121)] = 7955, + [SMALL_STATE(122)] = 8025, + [SMALL_STATE(123)] = 8099, + [SMALL_STATE(124)] = 8141, + [SMALL_STATE(125)] = 8201, + [SMALL_STATE(126)] = 8241, + [SMALL_STATE(127)] = 8297, + [SMALL_STATE(128)] = 8371, + [SMALL_STATE(129)] = 8433, + [SMALL_STATE(130)] = 8473, + [SMALL_STATE(131)] = 8513, + [SMALL_STATE(132)] = 8587, + [SMALL_STATE(133)] = 8627, + [SMALL_STATE(134)] = 8701, + [SMALL_STATE(135)] = 8741, + [SMALL_STATE(136)] = 8815, + [SMALL_STATE(137)] = 8867, + [SMALL_STATE(138)] = 8913, + [SMALL_STATE(139)] = 8961, + [SMALL_STATE(140)] = 9019, + [SMALL_STATE(141)] = 9058, + [SMALL_STATE(142)] = 9097, + [SMALL_STATE(143)] = 9136, + [SMALL_STATE(144)] = 9175, + [SMALL_STATE(145)] = 9214, + [SMALL_STATE(146)] = 9253, + [SMALL_STATE(147)] = 9292, + [SMALL_STATE(148)] = 9331, + [SMALL_STATE(149)] = 9370, + [SMALL_STATE(150)] = 9409, + [SMALL_STATE(151)] = 9448, + [SMALL_STATE(152)] = 9487, + [SMALL_STATE(153)] = 9526, + [SMALL_STATE(154)] = 9573, + [SMALL_STATE(155)] = 9643, + [SMALL_STATE(156)] = 9712, + [SMALL_STATE(157)] = 9781, + [SMALL_STATE(158)] = 9848, + [SMALL_STATE(159)] = 9917, + [SMALL_STATE(160)] = 9986, + [SMALL_STATE(161)] = 10053, + [SMALL_STATE(162)] = 10119, + [SMALL_STATE(163)] = 10185, + [SMALL_STATE(164)] = 10251, + [SMALL_STATE(165)] = 10317, + [SMALL_STATE(166)] = 10383, + [SMALL_STATE(167)] = 10449, + [SMALL_STATE(168)] = 10515, + [SMALL_STATE(169)] = 10568, + [SMALL_STATE(170)] = 10621, + [SMALL_STATE(171)] = 10674, + [SMALL_STATE(172)] = 10727, + [SMALL_STATE(173)] = 10780, + [SMALL_STATE(174)] = 10833, + [SMALL_STATE(175)] = 10886, + [SMALL_STATE(176)] = 10939, + [SMALL_STATE(177)] = 10992, + [SMALL_STATE(178)] = 11045, + [SMALL_STATE(179)] = 11098, + [SMALL_STATE(180)] = 11151, + [SMALL_STATE(181)] = 11204, + [SMALL_STATE(182)] = 11232, + [SMALL_STATE(183)] = 11259, + [SMALL_STATE(184)] = 11286, + [SMALL_STATE(185)] = 11313, + [SMALL_STATE(186)] = 11338, + [SMALL_STATE(187)] = 11360, + [SMALL_STATE(188)] = 11382, + [SMALL_STATE(189)] = 11404, + [SMALL_STATE(190)] = 11426, + [SMALL_STATE(191)] = 11448, + [SMALL_STATE(192)] = 11474, + [SMALL_STATE(193)] = 11496, + [SMALL_STATE(194)] = 11524, + [SMALL_STATE(195)] = 11544, + [SMALL_STATE(196)] = 11572, + [SMALL_STATE(197)] = 11592, + [SMALL_STATE(198)] = 11612, + [SMALL_STATE(199)] = 11640, + [SMALL_STATE(200)] = 11658, + [SMALL_STATE(201)] = 11678, + [SMALL_STATE(202)] = 11700, + [SMALL_STATE(203)] = 11723, + [SMALL_STATE(204)] = 11744, + [SMALL_STATE(205)] = 11767, + [SMALL_STATE(206)] = 11790, + [SMALL_STATE(207)] = 11811, + [SMALL_STATE(208)] = 11832, + [SMALL_STATE(209)] = 11850, + [SMALL_STATE(210)] = 11865, + [SMALL_STATE(211)] = 11880, + [SMALL_STATE(212)] = 11895, + [SMALL_STATE(213)] = 11910, + [SMALL_STATE(214)] = 11925, + [SMALL_STATE(215)] = 11940, + [SMALL_STATE(216)] = 11955, + [SMALL_STATE(217)] = 11969, + [SMALL_STATE(218)] = 11979, + [SMALL_STATE(219)] = 11993, + [SMALL_STATE(220)] = 12007, + [SMALL_STATE(221)] = 12021, + [SMALL_STATE(222)] = 12035, + [SMALL_STATE(223)] = 12049, + [SMALL_STATE(224)] = 12063, + [SMALL_STATE(225)] = 12075, + [SMALL_STATE(226)] = 12089, + [SMALL_STATE(227)] = 12103, + [SMALL_STATE(228)] = 12117, + [SMALL_STATE(229)] = 12131, + [SMALL_STATE(230)] = 12140, + [SMALL_STATE(231)] = 12151, + [SMALL_STATE(232)] = 12160, + [SMALL_STATE(233)] = 12171, + [SMALL_STATE(234)] = 12182, + [SMALL_STATE(235)] = 12193, + [SMALL_STATE(236)] = 12204, + [SMALL_STATE(237)] = 12215, + [SMALL_STATE(238)] = 12224, + [SMALL_STATE(239)] = 12235, + [SMALL_STATE(240)] = 12246, + [SMALL_STATE(241)] = 12257, + [SMALL_STATE(242)] = 12266, + [SMALL_STATE(243)] = 12277, + [SMALL_STATE(244)] = 12286, + [SMALL_STATE(245)] = 12295, + [SMALL_STATE(246)] = 12306, + [SMALL_STATE(247)] = 12317, + [SMALL_STATE(248)] = 12325, + [SMALL_STATE(249)] = 12333, + [SMALL_STATE(250)] = 12341, + [SMALL_STATE(251)] = 12349, + [SMALL_STATE(252)] = 12357, + [SMALL_STATE(253)] = 12365, + [SMALL_STATE(254)] = 12373, + [SMALL_STATE(255)] = 12381, + [SMALL_STATE(256)] = 12389, + [SMALL_STATE(257)] = 12397, + [SMALL_STATE(258)] = 12405, + [SMALL_STATE(259)] = 12413, + [SMALL_STATE(260)] = 12421, + [SMALL_STATE(261)] = 12429, + [SMALL_STATE(262)] = 12437, + [SMALL_STATE(263)] = 12445, + [SMALL_STATE(264)] = 12453, }; 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 = false}}, SHIFT(106), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(99), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), - [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(141), - [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(205), - [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), - [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), - [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), - [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(33), - [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(34), - [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), - [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36), - [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38), - [57] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), - [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), - [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), - [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(145), - [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), - [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [77] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(113), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(150), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(109), + [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(103), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(263), + [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(151), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), + [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(215), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), + [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), + [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(31), + [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), + [49] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(33), + [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(34), + [55] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36), + [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [63] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), + [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [69] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(153), + [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), + [77] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), [79] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [81] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), - [83] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), - [85] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(106), - [88] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(143), - [91] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(143), - [94] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(99), - [97] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(242), - [100] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(251), - [103] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(240), - [106] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(141), - [109] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(25), - [112] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(27), - [115] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(205), - [118] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(5), - [121] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(7), - [124] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [126] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(167), - [129] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), - [131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(85), - [135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), - [137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88), - [139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), - [143] = {.entry = {.count = 1, .reusable = false}}, SHIFT(203), - [145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), - [147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), - [149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), - [151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), - [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), - [155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), - [157] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), - [159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), - [161] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(249), - [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 1, 0, 0), - [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 1, 0, 0), - [168] = {.entry = {.count = 1, .reusable = false}}, SHIFT(249), - [170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [174] = {.entry = {.count = 1, .reusable = false}}, SHIFT(231), - [176] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [180] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), - [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_path, 2, 0, 0), - [184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_path, 2, 0, 0), - [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 13), - [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 13), - [190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), - [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), - [196] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [200] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), - [202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), - [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [208] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), - [210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 7), - [212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 7), - [214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), - [216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), - [218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 11), - [220] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 11), - [222] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), - [224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), - [226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 14), - [228] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 14), - [230] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 17), - [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 17), - [234] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 19), - [236] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 19), - [238] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 20), - [240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 20), - [242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 18), - [244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 18), - [246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), - [248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), - [250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [254] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 10), - [256] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 10), - [258] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), - [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), - [278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), - [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), - [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 16), - [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 16), - [290] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 23), - [292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 23), - [294] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 24), - [296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 24), - [298] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), - [300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), - [302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(238), - [304] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_path_repeat1, 2, 0, 0), SHIFT_REPEAT(241), - [307] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), - [309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), - [311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), - [313] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), - [317] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), - [319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), - [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), - [323] = {.entry = {.count = 1, .reusable = false}}, SHIFT(50), - [325] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), - [327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [329] = {.entry = {.count = 1, .reusable = false}}, SHIFT(14), - [331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [337] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), - [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), - [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [345] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), - [347] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), - [349] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), - [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), - [353] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 22), - [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), - [357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [359] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 15), - [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), - [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), - [369] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181), - [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), - [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), - [379] = {.entry = {.count = 1, .reusable = false}}, SHIFT(175), - [381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), - [383] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [385] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), - [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237), - [389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), - [391] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 13), - [393] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 13), - [395] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), - [397] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), - [399] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [401] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), - [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), - [407] = {.entry = {.count = 1, .reusable = false}}, SHIFT(164), - [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), - [411] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), - [413] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), - [415] = {.entry = {.count = 1, .reusable = false}}, SHIFT(166), - [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), - [419] = {.entry = {.count = 1, .reusable = false}}, SHIFT(169), - [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), - [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), - [425] = {.entry = {.count = 1, .reusable = false}}, SHIFT(160), - [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), - [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), - [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), - [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), - [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), - [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), - [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), - [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), - [445] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(221), - [448] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [450] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(246), - [453] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), - [455] = {.entry = {.count = 1, .reusable = false}}, SHIFT(246), - [457] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), - [459] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), - [461] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), - [463] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), - [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), - [469] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [471] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(232), - [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), - [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), - [478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), - [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), - [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [484] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 8), - [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), - [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), - [492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), - [494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), - [496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218), - [498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), - [500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), - [502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(209), - [504] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [506] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [508] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), - [512] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [514] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [516] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 21), - [518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), - [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), - [522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), - [526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), - [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), - [530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), - [532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(183), - [534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), - [536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), - [538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), - [542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), - [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), - [546] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [548] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), - [560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), - [562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), - [564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), - [566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), + [81] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(113), + [84] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(150), + [87] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(150), + [90] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(109), + [93] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(103), + [96] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(257), + [99] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(263), + [102] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(259), + [105] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(151), + [108] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(23), + [111] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(27), + [114] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(215), + [117] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(4), + [120] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(7), + [123] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [125] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(178), + [128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), + [130] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), + [132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [134] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), + [136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [138] = {.entry = {.count = 1, .reusable = false}}, SHIFT(96), + [140] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), + [142] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), + [144] = {.entry = {.count = 1, .reusable = false}}, SHIFT(102), + [146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [148] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), + [150] = {.entry = {.count = 1, .reusable = false}}, SHIFT(209), + [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [162] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), + [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), + [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), + [168] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(251), + [171] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), + [173] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), + [175] = {.entry = {.count = 1, .reusable = false}}, SHIFT(251), + [177] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 2, 0, 0), + [179] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 2, 0, 0), + [181] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 2, 0, 3), + [183] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 2, 0, 3), + [185] = {.entry = {.count = 1, .reusable = false}}, SHIFT(252), + [187] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), + [189] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), + [191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), + [193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), + [195] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(252), + [198] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [202] = {.entry = {.count = 1, .reusable = false}}, SHIFT(245), + [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [208] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [214] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), + [216] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 16), + [218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 16), + [220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 4), + [222] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), + [224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 4), + [226] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [228] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), + [234] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), + [236] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), + [238] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 10), + [240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 10), + [242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 12), + [244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 12), + [246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 14), + [248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 14), + [250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), + [252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), + [254] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 17), + [256] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 17), + [258] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 20), + [260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 20), + [262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 22), + [264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 22), + [266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 23), + [268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 23), + [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 13), + [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 13), + [278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 5), + [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 5), + [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 5), + [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 5), + [290] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 7), + [292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 7), + [294] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [298] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 6), + [300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 6), + [302] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 27), + [304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 27), + [306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 26), + [308] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 26), + [310] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 19), + [312] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 19), + [314] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 21), + [316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 21), + [318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [322] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [326] = {.entry = {.count = 1, .reusable = false}}, SHIFT(246), + [328] = {.entry = {.count = 1, .reusable = false}}, SHIFT(134), + [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [332] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(258), + [335] = {.entry = {.count = 1, .reusable = false}}, SHIFT(262), + [337] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(262), + [340] = {.entry = {.count = 1, .reusable = false}}, SHIFT(258), + [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(45), + [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), + [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), + [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [358] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), + [360] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), + [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [364] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), + [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [372] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), + [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [378] = {.entry = {.count = 1, .reusable = false}}, SHIFT(21), + [380] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), + [382] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), + [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181), + [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 25), + [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [392] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 18), + [394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [400] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), + [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), + [408] = {.entry = {.count = 1, .reusable = false}}, SHIFT(183), + [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), + [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [416] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [418] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), + [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), + [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), + [424] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), + [426] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), + [428] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [430] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [432] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), + [434] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), + [436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), + [438] = {.entry = {.count = 1, .reusable = false}}, SHIFT(170), + [440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), + [444] = {.entry = {.count = 1, .reusable = false}}, SHIFT(171), + [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [448] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), + [450] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), + [452] = {.entry = {.count = 1, .reusable = false}}, SHIFT(180), + [454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(180), + [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), + [458] = {.entry = {.count = 1, .reusable = false}}, SHIFT(174), + [460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), + [462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), + [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), + [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), + [470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [478] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(232), + [481] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [483] = {.entry = {.count = 1, .reusable = false}}, SHIFT(261), + [485] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), + [487] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(261), + [490] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), + [492] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), + [494] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), + [496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [500] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), + [502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), + [506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), + [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(264), + [512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), + [516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), + [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), + [522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [524] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 11), + [526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), + [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [532] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [534] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(230), + [537] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 24), + [539] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [545] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), + [549] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), + [553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), + [555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), + [557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), + [559] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [561] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), + [563] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [565] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [567] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [569] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [571] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), + [573] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [575] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [577] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [579] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [581] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [583] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [585] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [587] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), + [589] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), + [591] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), + [595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), + [597] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), + [603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index 4f97ac1..aed22e5 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -10,7 +10,7 @@ Empty (expression (closure_definition (struct_definition) - (path + (identity_path (identifier) (identifier)) (expression @@ -32,11 +32,11 @@ With argument (identifier) (declaration_type (expression - (path + (identity_path (identifier) (identifier) (identifier)))))) - (path + (identity_path (identifier) (identifier)) (expression @@ -58,20 +58,20 @@ With Binary Expression (identifier) (declaration_type (expression - (path + (identity_path (identifier) (identifier) (identifier)))))) - (path + (identity_path (identifier) (identifier)) (expression (binary_expression (expression - (path + (identity_path (identifier))) (expression - (path + (identity_path (identifier)))))))) ================== @@ -86,13 +86,13 @@ value(value=value) (expression (function_call (expression - (path + (identity_path (identifier))) (dictionary_construction (dictionary_member_assignment (identifier) (expression - (path + (identity_path (identifier)))))))) ================== @@ -107,7 +107,7 @@ value() (expression (function_call (expression - (path + (identity_path (identifier))) (dictionary_construction)))) @@ -123,14 +123,14 @@ value.value(value=value) (expression (function_call (expression - (path + (identity_path (identifier) (identifier))) (dictionary_construction (dictionary_member_assignment (identifier) (expression - (path + (identity_path (identifier)))))))) ================== @@ -145,14 +145,14 @@ value:value(value=value) (expression (method_call (expression - (path + (identity_path (identifier))) (identifier) (dictionary_construction (dictionary_member_assignment (identifier) (expression - (path + (identity_path (identifier)))))))) ================== @@ -167,7 +167,7 @@ value:value() (expression (method_call (expression - (path + (identity_path (identifier))) (identifier) (dictionary_construction)))) @@ -184,7 +184,7 @@ value.value:value(value=value) (expression (method_call (expression - (path + (identity_path (identifier) (identifier))) (identifier) @@ -192,6 +192,6 @@ value.value:value(value=value) (dictionary_member_assignment (identifier) (expression - (path + (identity_path (identifier)))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt index 5d0adf6..5645f1b 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt @@ -26,7 +26,7 @@ Comment before closure (expression (closure_definition (struct_definition) - (path + (identity_path (identifier) (identifier)) (expression diff --git a/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt b/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt index 7223a97..222872c 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt @@ -24,7 +24,7 @@ One (dictionary_member_assignment (identifier) (expression - (path + (identity_path (identifier))))))) ================== @@ -41,7 +41,7 @@ One, (dictionary_member_assignment (identifier) (expression - (path + (identity_path (identifier))))))) ================== @@ -58,12 +58,12 @@ One, two (dictionary_member_assignment (identifier) (expression - (path + (identity_path (identifier)))) (dictionary_member_assignment (identifier) (expression - (path + (identity_path (identifier))))))) ================== @@ -80,10 +80,10 @@ One, two, (dictionary_member_assignment (identifier) (expression - (path + (identity_path (identifier)))) (dictionary_member_assignment (identifier) (expression - (path + (identity_path (identifier))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/list.txt b/crates/tree-sitter-command-cad-model/test/corpus/list.txt index 8ba21a4..dfef5eb 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/list.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/list.txt @@ -22,7 +22,7 @@ Single (expression (list (expression - (path + (identity_path (identifier)))))) ================== @@ -37,16 +37,16 @@ Multi (expression (list (expression - (path + (identity_path (identifier))) (expression - (path + (identity_path (identifier))) (expression - (path + (identity_path (identifier))) (expression - (path + (identity_path (identifier)))))) ================== @@ -61,14 +61,14 @@ Multi with comma at the end (expression (list (expression - (path + (identity_path (identifier))) (expression - (path + (identity_path (identifier))) (expression - (path + (identity_path (identifier))) (expression - (path + (identity_path (identifier)))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt b/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt index 3266481..606fb28 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt @@ -16,24 +16,24 @@ Precedence (expression (binary_expression (expression - (path + (identity_path (identifier))) (expression (binary_expression (expression - (path + (identity_path (identifier))) (expression (binary_expression (expression - (path + (identity_path (identifier))) (expression - (path + (identity_path (identifier))))))))) (expression - (path + (identity_path (identifier))))))) (expression - (path + (identity_path (identifier)))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt b/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt index 7b5367d..a9caa27 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt @@ -25,7 +25,7 @@ One (identifier) (declaration_type (expression - (path + (identity_path (identifier) (identifier)))))))) @@ -44,7 +44,7 @@ One, (identifier) (declaration_type (expression - (path + (identity_path (identifier) (identifier)))))))) @@ -89,7 +89,7 @@ One, ... (identifier) (declaration_type (expression - (path + (identity_path (identifier) (identifier))))) (varadic_dots)))) @@ -109,7 +109,7 @@ One, ..., (identifier) (declaration_type (expression - (path + (identity_path (identifier) (identifier))))) (varadic_dots)))) @@ -129,14 +129,14 @@ One, two (identifier) (declaration_type (expression - (path + (identity_path (identifier) (identifier))))) (struct_member (identifier) (declaration_type (expression - (path + (identity_path (identifier) (identifier)))))))) @@ -155,14 +155,14 @@ One, two, (identifier) (declaration_type (expression - (path + (identity_path (identifier) (identifier))))) (struct_member (identifier) (declaration_type (expression - (path + (identity_path (identifier) (identifier)))))))) @@ -181,14 +181,14 @@ One, two, ..., (identifier) (declaration_type (expression - (path + (identity_path (identifier) (identifier))))) (struct_member (identifier) (declaration_type (expression - (path + (identity_path (identifier) (identifier))))) (varadic_dots)))) @@ -208,11 +208,11 @@ Default (identifier) (declaration_type (expression - (path + (identity_path (identifier) (identifier)))) (expression - (path + (identity_path (identifier))))))) ================== @@ -230,9 +230,9 @@ Default, (identifier) (declaration_type (expression - (path + (identity_path (identifier) (identifier)))) (expression - (path + (identity_path (identifier))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt b/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt index 9bcd327..bbda8f4 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt @@ -8,8 +8,25 @@ this.is.a.test (source_file (expression - (path + (identity_path (identifier) (identifier) (identifier) (identifier)))) + +================== +Self Path +================== + +self.this.is.a.test + +--- + +(source_file + (expression + (self_path + (self) + (identifier) + (identifier) + (identifier) + (identifier)))) From c1bd81b469a7999ccec7aa5491639b61044b6dd4 Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 5 Dec 2025 22:57:20 -0500 Subject: [PATCH 048/106] Implement builtin closures --- .../src/execution/values/closure.rs | 139 ++++++++++++++---- 1 file changed, 114 insertions(+), 25 deletions(-) diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 380aa65..bdc62bf 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -364,9 +364,6 @@ macro_rules! build_argument_signature_list { } macro_rules! build_function { - ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack $(, $($arg:ident: $ty:ident $(= $default:expr)?),+)?) $code:block) => { - build_function!($name ($log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack $(, $($arg: $ty $(= $default)?),*)?) -> ValueType::TypeNone $code) - }; ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack $(, $($arg:ident: $ty:ident $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ struct BuiltFunction, &mut Stack $(, $($ty),*)?) -> ExpressionResult> { function: F, @@ -422,6 +419,71 @@ macro_rules! build_function { }}; } +macro_rules! build_method { + ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $this:ident: $this_type:ty $(, $($arg:ident: $ty:ident $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ + struct BuiltFunction, &mut Stack, $this_type $(, $($ty),*)?) -> ExpressionResult> { + function: F, + signature: Arc, + } + + impl, &mut Stack, $this_type $(, $($ty),*)?) -> ExpressionResult> Callable for BuiltFunction { + fn call( + &self, + runtime: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + argument: Dictionary, + ) -> ExpressionResult { + + let this = stack.get_variable( + stack_trace, + crate::execution::logging::LocatedStr { + location: stack_trace.last().unwrap().clone(), + string: "self", + }, + )?.downcast_ref::<$this_type>(stack_trace)?.clone(); + + self.signature + .argument_type + .check_other_qualifies(argument.struct_def()) + .map_err(|error| error.to_error(stack_trace.iter()))?; + + // Argument is potentially unused if we take no arguments. + let mut _argument = self.signature.argument_type.fill_defaults(argument); + + let _data = Arc::make_mut(&mut _argument.data); + $($(let $arg: $ty = _data.members.remove(stringify!($arg)) + .expect("Argument was not present after argument check.").downcast(stack_trace)?;)*)? + + (self.function)(runtime, stack_trace, stack, this $(, $($arg),*)?) + } + + fn name(&self) -> &str { + stringify!($name) + } + + fn signature(&self) -> &Arc { + &self.signature + } + } + + let members = std::sync::Arc::new(hashable_map::HashableMap::from(std::collections::HashMap::from(build_argument_signature_list!($($($arg: $ty $(= $default)?),*)?)))); + + crate::execution::values::closure::BuiltinFunction { + callable: Arc::new(BuiltFunction { + function: move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $this: $this_type $(, $($arg: $ty),*)?| -> ExpressionResult { $code }, + signature: std::sync::Arc::new(Signature { + argument_type: StructDefinition { + members, + variadic: false, + }, + return_type: $return_type + }), + }) + } + }}; +} + #[derive(Clone)] pub struct BuiltinFunction { callable: Arc, @@ -478,7 +540,7 @@ mod test { use super::*; use crate::execution::{ test_run, - values::{self, StructMember, UnsignedInteger, ValueNone}, + values::{self, StructMember, UnsignedInteger}, }; use hashable_map::HashableMap; use pretty_assertions::assert_eq; @@ -634,27 +696,6 @@ mod test { ); } - #[test] - fn builtin_function_no_args_no_result() { - let test_function = build_function!( - test_function(_log: &mut dyn RuntimeLog, _stack_trace: &mut Vec, _stack: &mut Stack) { - Ok(ValueNone.into()) - } - ); - - use crate::execution::standard_environment::build_prelude; - - let root = crate::compile::full_compile("test_function()"); - let prelude = build_prelude(); - let mut stack = Stack::new(prelude); - stack.insert_value("test_function", test_function.into()); - - let product = - execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root).unwrap(); - - assert_eq!(product, values::ValueNone.into()); - } - #[test] fn builtin_function_no_args() { let test_function = build_function!( @@ -740,4 +781,52 @@ mod test { assert_eq!(product, values::UnsignedInteger::from(3).into()); } + + #[test] + fn builtin_method() { + let test_method = build_method!( + test_method(log: &mut dyn RuntimeLog, stack_trace: &mut Vec, _stack: &mut Stack, this: Dictionary) -> ValueType::UnsignedInteger { + this.get_attribute(log, stack_trace, "value").cloned() + } + ); + + use crate::execution::standard_environment::build_prelude; + + let root = crate::compile::full_compile( + "let object = (value = 5u, test_method = provided_test_method); in object:test_method()", + ); + let prelude = build_prelude(); + let mut stack = Stack::new(prelude); + stack.insert_value("provided_test_method", test_method.into()); + + let product = + execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root).unwrap(); + + assert_eq!(product, values::UnsignedInteger::from(5).into()); + } + + #[test] + fn builtin_method_with_argument() { + let test_method = build_method!( + test_method(log: &mut dyn RuntimeLog, stack_trace: &mut Vec, _stack: &mut Stack, this: Dictionary, to_add: UnsignedInteger) -> ValueType::UnsignedInteger { + let value: &UnsignedInteger = this.get_attribute(log, stack_trace, "value")?.downcast_ref(stack_trace)?; + + Ok(values::UnsignedInteger::from(value.0 + to_add.0).into()) + } + ); + + use crate::execution::standard_environment::build_prelude; + + let root = crate::compile::full_compile( + "let object = (value = 5u, test_method = provided_test_method); in object:test_method(to_add = 10u)", + ); + let prelude = build_prelude(); + let mut stack = Stack::new(prelude); + stack.insert_value("provided_test_method", test_method.into()); + + let product = + execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root).unwrap(); + + assert_eq!(product, values::UnsignedInteger::from(15).into()); + } } From a4976b6818c7d3c25abd578cb65b0033d7b56abc Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 6 Dec 2025 14:22:12 -0500 Subject: [PATCH 049/106] WIP builtin methods --- .../src/execution/values/closure.rs | 36 +++++++++++-------- .../interpreter/src/execution/values/mod.rs | 9 +++++ .../src/execution/values/value_type.rs | 31 ++++++++++++++-- 3 files changed, 59 insertions(+), 17 deletions(-) diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index bdc62bf..b2582f7 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -321,7 +321,7 @@ impl StaticTypeName for UserClosure { } } -pub trait Callable { +pub trait Callable: Sync + Send { fn call( &self, runtime: &mut dyn RuntimeLog, @@ -335,6 +335,7 @@ pub trait Callable { fn signature(&self) -> &Arc; } +#[macro_export] macro_rules! build_member_from_sig { ($name:ident: $ty:ident) => { ( @@ -356,28 +357,31 @@ macro_rules! build_member_from_sig { }; } +#[macro_export] macro_rules! build_argument_signature_list { ($($arg:ident: $ty:ident $(= $default:expr)?),*) => {{ - let list: [(String, crate::execution::values::value_type::StructMember); _] = [$(build_member_from_sig!($arg: $ty $(= $default)?),)*]; + let list: [(String, crate::execution::values::value_type::StructMember); _] = [$($crate::build_member_from_sig!($arg: $ty $(= $default)?),)*]; list }}; } +#[macro_export] macro_rules! build_function { ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack $(, $($arg:ident: $ty:ident $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ - struct BuiltFunction, &mut Stack $(, $($ty),*)?) -> ExpressionResult> { + struct BuiltFunction, &mut Stack $(, $($ty),*)?) -> ExpressionResult> { function: F, signature: Arc, } - impl, &mut Stack $(, $($ty),*)?) -> ExpressionResult> Callable for BuiltFunction { + impl, &mut Stack $(, $($ty),*)?) -> ExpressionResult + Send + Sync> crate::execution::values::closure::Callable for BuiltFunction { fn call( &self, runtime: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, argument: Dictionary, - ) -> ExpressionResult { + ) -> crate::execution::errors::ExpressionResult { + use crate::execution::errors::Raise; self.signature .argument_type .check_other_qualifies(argument.struct_def()) @@ -397,7 +401,7 @@ macro_rules! build_function { stringify!($name) } - fn signature(&self) -> &Arc { + fn signature(&self) -> &Arc { &self.signature } } @@ -406,7 +410,7 @@ macro_rules! build_function { crate::execution::values::closure::BuiltinFunction { callable: Arc::new(BuiltFunction { - function: move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack $(, $($arg: $ty),*)?| -> ExpressionResult { $code }, + function: move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack $(, $($arg: $ty),*)?| -> ExpressionResult { $code }, signature: std::sync::Arc::new(Signature { argument_type: StructDefinition { members, @@ -419,21 +423,23 @@ macro_rules! build_function { }}; } +#[macro_export] macro_rules! build_method { ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $this:ident: $this_type:ty $(, $($arg:ident: $ty:ident $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ - struct BuiltFunction, &mut Stack, $this_type $(, $($ty),*)?) -> ExpressionResult> { + struct BuiltFunction, &mut Stack, $this_type $(, $($ty),*)?) -> ExpressionResult> { function: F, signature: Arc, } - impl, &mut Stack, $this_type $(, $($ty),*)?) -> ExpressionResult> Callable for BuiltFunction { + impl, &mut Stack, $this_type $(, $($ty),*)?) -> ExpressionResult + Send + Sync> crate::execution::values::closure::Callable for BuiltFunction { fn call( &self, runtime: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, argument: Dictionary, - ) -> ExpressionResult { + ) -> crate::execution::errors::ExpressionResult { + use crate::execution::errors::Raise; let this = stack.get_variable( stack_trace, @@ -462,18 +468,18 @@ macro_rules! build_method { stringify!($name) } - fn signature(&self) -> &Arc { + fn signature(&self) -> &Arc { &self.signature } } - let members = std::sync::Arc::new(hashable_map::HashableMap::from(std::collections::HashMap::from(build_argument_signature_list!($($($arg: $ty $(= $default)?),*)?)))); + let members = std::sync::Arc::new(hashable_map::HashableMap::from(std::collections::HashMap::from($crate::build_argument_signature_list!($($($arg: $ty $(= $default)?),*)?)))); crate::execution::values::closure::BuiltinFunction { callable: Arc::new(BuiltFunction { function: move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $this: $this_type $(, $($arg: $ty),*)?| -> ExpressionResult { $code }, - signature: std::sync::Arc::new(Signature { - argument_type: StructDefinition { + signature: std::sync::Arc::new(crate::execution::values::closure::Signature { + argument_type: crate::execution::values::StructDefinition { members, variadic: false, }, @@ -486,7 +492,7 @@ macro_rules! build_method { #[derive(Clone)] pub struct BuiltinFunction { - callable: Arc, + pub callable: Arc, } impl std::fmt::Debug for BuiltinFunction { diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index c5b4f90..8668c2e 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -375,6 +375,15 @@ impl Display for DowncastError { } } +impl IntoVariant for Value { + fn into_variant(self) -> Result + where + Self: Sized, + { + Ok(self) + } +} + impl Value { pub fn downcast_ref(&self, stack_trace: &[SourceReference]) -> ExpressionResult<&T> where diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 204eaad..fd3aebc 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -26,13 +26,14 @@ use super::{ }; use crate::{ + build_method, compile::{self, AstNode, SourceReference}, execute_expression, execution::{ errors::{ErrorType, ExpressionResult}, logging::RuntimeLog, stack::Stack, - values::{dictionary::DictionaryData, Dictionary}, + values::{self, dictionary::DictionaryData, Dictionary}, }, }; @@ -69,7 +70,6 @@ impl ValueType { } } - // TODO we need to expose this method to the user. pub fn check_other_qualifies( &self, value_type: &ValueType, @@ -149,6 +149,33 @@ impl Object for ValueType { Ok(Self::MultiType(Box::new(self), Box::new(rhs)).into()) } + + fn get_attribute( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + attribute: &str, + ) -> ExpressionResult<&Value> { + match attribute { + // pub fn check_other_qualifies( + // &self, + // value_type: &ValueType, + // ) -> Result<(), TypeQualificationError> { + "qualify" => { + static METHOD: std::sync::OnceLock = + std::sync::OnceLock::new(); + let value = METHOD.get_or_init(|| { + build_method!( + ValueType_qualify(log: &mut dyn RuntimeLog, stack_trace: &mut Vec, _stack: &mut Stack, this: Dictionary, to_qualify: Value) -> ValueType::TypeNone { + + Ok(values::ValueNone.into()) + } + ) + }); + Ok(value.into()) + } + } + } } impl StaticTypeName for ValueType { From 092f45a75fbd49fd01958dde7d9b9d2e6cbc120a Mon Sep 17 00:00:00 2001 From: James Carl Date: Tue, 9 Dec 2025 03:21:45 -0500 Subject: [PATCH 050/106] Add qualification methods to ValueType --- .../src/execution/values/closure.rs | 12 +- .../src/execution/values/value_type.rs | 114 +++++++++++++++--- 2 files changed, 106 insertions(+), 20 deletions(-) diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index b2582f7..4825136 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -341,7 +341,7 @@ macro_rules! build_member_from_sig { ( String::from(stringify!($name)), crate::execution::values::value_type::StructMember { - ty: ValueType::$ty, + ty: crate::execution::values::ValueType::$ty, default: None, }, ) @@ -350,7 +350,7 @@ macro_rules! build_member_from_sig { ( String::from(stringify!($name)), crate::execution::values::value_type::StructMember { - ty: ValueType::$ty, + ty: crate::execution::values::ValueType::$ty, default: Some($default), }, ) @@ -490,6 +490,14 @@ macro_rules! build_method { }}; } +#[macro_export] +macro_rules! static_method { + ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $this:ident: $this_type:ty $(, $($arg:ident: $ty:ident $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ + static METHOD: std::sync::OnceLock = std::sync::OnceLock::new(); + METHOD.get_or_init(|| crate::build_method!($name ($log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $this: $this_type $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code).into()) + }}; +} + #[derive(Clone)] pub struct BuiltinFunction { pub callable: Arc, diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index fd3aebc..45dbf47 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -26,15 +26,15 @@ use super::{ }; use crate::{ - build_method, compile::{self, AstNode, SourceReference}, execute_expression, execution::{ - errors::{ErrorType, ExpressionResult}, + errors::{ErrorType, ExpressionResult, Raise}, logging::RuntimeLog, stack::Stack, - values::{self, dictionary::DictionaryData, Dictionary}, + values::{self, dictionary::DictionaryData, Dictionary, MissingAttributeError}, }, + static_method, }; #[derive(Debug, Eq, Clone, PartialEq)] @@ -49,6 +49,7 @@ pub enum ValueType { Dictionary(StructDefinition), ValueType, MultiType(Box, Box), + Value, } impl From for ValueType { @@ -114,6 +115,7 @@ impl ValueType { }), } } + (Self::Value, _) => Ok(()), (expected, got) => Err(TypeQualificationError::This { expected: expected.clone(), got: got.clone(), @@ -157,23 +159,39 @@ impl Object for ValueType { attribute: &str, ) -> ExpressionResult<&Value> { match attribute { - // pub fn check_other_qualifies( - // &self, - // value_type: &ValueType, - // ) -> Result<(), TypeQualificationError> { "qualify" => { - static METHOD: std::sync::OnceLock = - std::sync::OnceLock::new(); - let value = METHOD.get_or_init(|| { - build_method!( - ValueType_qualify(log: &mut dyn RuntimeLog, stack_trace: &mut Vec, _stack: &mut Stack, this: Dictionary, to_qualify: Value) -> ValueType::TypeNone { - - Ok(values::ValueNone.into()) - } - ) - }); - Ok(value.into()) + let value = static_method!( + ValueType_qualify( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: ValueType, + to_qualify: Value) -> ValueType::TypeNone + { + this.check_other_qualifies(&to_qualify.get_type()).map_err(|error| error.to_error(stack_trace.iter()))?; + Ok(values::ValueNone.into()) + } + ); + Ok(value) } + "try_qualify" => { + let value = static_method!( + ValueType_qualify( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + this: ValueType, + to_qualify: Value) -> ValueType::TypeNone + { + Ok(values::Boolean(this.check_other_qualifies(&to_qualify.get_type()).is_ok()).into()) + } + ); + Ok(value) + } + _ => Err(MissingAttributeError { + name: attribute.into(), + } + .to_error(stack_trace)), } } } @@ -421,6 +439,8 @@ impl Display for TypeQualificationError { #[cfg(test)] mod test { + use pretty_assertions::assert_eq; + use crate::execution::test_run; use super::*; @@ -611,4 +631,62 @@ mod test { .check_other_qualifies(&ValueType::Boolean) .unwrap_err(); } + + #[test] + fn value_type_any_value() { + ValueType::Value + .check_other_qualifies(&ValueType::TypeNone) + .unwrap(); + + ValueType::Value + .check_other_qualifies(&ValueType::Boolean) + .unwrap(); + + ValueType::Value + .check_other_qualifies(&ValueType::SignedInteger) + .unwrap(); + + ValueType::Value + .check_other_qualifies(&ValueType::UnsignedInteger) + .unwrap(); + + ValueType::Value + .check_other_qualifies(&ValueType::Scalar(Dimension::length())) + .unwrap(); + + let closure = test_run("() -> std.types.None std.consts.None").unwrap(); + let closure = closure.as_userclosure().unwrap(); + + ValueType::Value + .check_other_qualifies(&closure.get_type()) + .unwrap(); + + let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); + let dictionary = dictionary.as_dictionary().unwrap(); + + ValueType::Value + .check_other_qualifies(&dictionary.get_type()) + .unwrap(); + + ValueType::Value + .check_other_qualifies(&ValueType::ValueType) + .unwrap(); + } + + #[test] + fn try_qualify_method() { + let result = test_run("std.types.Bool:try_qualify(to_qualify = true)").unwrap(); + assert_eq!(result, values::Boolean(true).into()); + + let result = test_run("std.types.Bool:try_qualify(to_qualify = 5u)").unwrap(); + assert_eq!(result, values::Boolean(false).into()); + } + + #[test] + fn qualify_method() { + let result = test_run("std.types.Bool:qualify(to_qualify = true)").unwrap(); + assert_eq!(result, values::ValueNone.into()); + + test_run("std.types.Bool:qualify(to_qualify = 5u)").unwrap_err(); + } } From ee675798472bcf421756d04cb73eaab04794e521 Mon Sep 17 00:00:00 2001 From: James Carl Date: Wed, 10 Dec 2025 00:01:01 -0500 Subject: [PATCH 051/106] WIP map operations for strings --- .../src/execution/values/boolean.rs | 11 +- .../src/execution/values/closure.rs | 129 ++++++++++++------ .../src/execution/values/default.rs | 8 ++ .../src/execution/values/dictionary.rs | 4 + .../src/execution/values/integer.rs | 10 ++ .../interpreter/src/execution/values/mod.rs | 14 ++ .../src/execution/values/string.rs | 62 ++++++++- .../src/execution/values/value_type.rs | 28 ++-- 8 files changed, 207 insertions(+), 59 deletions(-) diff --git a/crates/interpreter/src/execution/values/boolean.rs b/crates/interpreter/src/execution/values/boolean.rs index 4958b9d..f8d9563 100644 --- a/crates/interpreter/src/execution/values/boolean.rs +++ b/crates/interpreter/src/execution/values/boolean.rs @@ -16,7 +16,10 @@ * program. If not, see . */ -use crate::{compile::SourceReference, execution::logging::RuntimeLog}; +use crate::{ + compile::SourceReference, + execution::{logging::RuntimeLog, values::StaticType}, +}; use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; @@ -81,3 +84,9 @@ impl StaticTypeName for Boolean { "Boolean" } } + +impl StaticType for Boolean { + fn static_type() -> ValueType { + ValueType::Boolean + } +} diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 4825136..eaee9bb 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -337,20 +337,20 @@ pub trait Callable: Sync + Send { #[macro_export] macro_rules! build_member_from_sig { - ($name:ident: $ty:ident) => { + ($name:ident: $ty:ty) => { ( String::from(stringify!($name)), crate::execution::values::value_type::StructMember { - ty: crate::execution::values::ValueType::$ty, + ty: <$ty as crate::execution::values::StaticType>::static_type(), default: None, }, ) }; - ($name:ident: $ty:ident = $default:expr) => { + ($name:ident: $ty:ty = $default:expr) => { ( String::from(stringify!($name)), crate::execution::values::value_type::StructMember { - ty: crate::execution::values::ValueType::$ty, + ty: <$ty as crate::execution::values::StaticType>::static_type(), default: Some($default), }, ) @@ -359,18 +359,77 @@ macro_rules! build_member_from_sig { #[macro_export] macro_rules! build_argument_signature_list { - ($($arg:ident: $ty:ident $(= $default:expr)?),*) => {{ + ($($arg:ident: $ty:path $(= $default:expr)?),*) => {{ let list: [(String, crate::execution::values::value_type::StructMember); _] = [$($crate::build_member_from_sig!($arg: $ty $(= $default)?),)*]; list }}; } +#[macro_export] +macro_rules! build_closure_signature { + (($($arg:ident: $ty:path $(= $default:expr)?),*) -> $return_type:path) => {{ + let members = std::sync::Arc::new(hashable_map::HashableMap::from(std::collections::HashMap::from($crate::build_argument_signature_list!($($arg: $ty $(= $default)?),*)))); + + std::sync::Arc::new(crate::execution::values::closure::Signature { + argument_type: crate::execution::values::StructDefinition { + members, + variadic: false, + }, + return_type: $return_type, + }) + }}; +} + +#[macro_export] +macro_rules! build_closure_type { + ($name:ident($($arg:ident: $ty:path $(= $default:expr)?),*) -> $return_type:path) => { + struct $name(pub UserClosure); + + impl $crate::execution::values::StaticType for $name { + fn static_type() -> $crate::execution::values::ValueType { + static TYPE: std::sync::OnceLock> + = std::sync::OnceLock::new(); + let signature = TYPE.get_or_init(|| build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type)); + + $crate::execution::values::ValueType::Closure(signature.clone()) + } + } + + impl $crate::execution::values::StaticTypeName for $name { + fn static_type_name() -> &'static str { + "Closure" + } + } + + + impl enum_downcast::IntoVariant<$name> for $crate::execution::values::Value { + fn into_variant(self) -> Result<$name, $crate::execution::values::Value> { + Ok($name(self.into_variant()?)) + } + } + + impl Into for $name { + fn into(self) -> UserClosure { + self.0 + } + } + + impl std::ops::Deref for $name { + type Target = UserClosure; + + fn deref(&self) -> &Self::Target { + &self.0 + } + } + } +} + #[macro_export] macro_rules! build_function { - ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack $(, $($arg:ident: $ty:ident $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ + ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ struct BuiltFunction, &mut Stack $(, $($ty),*)?) -> ExpressionResult> { function: F, - signature: Arc, + signature: std::sync::Arc, } impl, &mut Stack $(, $($ty),*)?) -> ExpressionResult + Send + Sync> crate::execution::values::closure::Callable for BuiltFunction { @@ -379,7 +438,7 @@ macro_rules! build_function { runtime: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, - argument: Dictionary, + argument: crate::execution::values::Dictionary, ) -> crate::execution::errors::ExpressionResult { use crate::execution::errors::Raise; self.signature @@ -390,7 +449,7 @@ macro_rules! build_function { // Argument is potentially unused if we take no arguments. let mut _argument = self.signature.argument_type.fill_defaults(argument); - let _data = Arc::make_mut(&mut _argument.data); + let _data = std::sync::Arc::make_mut(&mut _argument.data); $($(let $arg: $ty = _data.members.remove(stringify!($arg)) .expect("Argument was not present after argument check.").downcast(stack_trace)?;)*)? @@ -401,23 +460,15 @@ macro_rules! build_function { stringify!($name) } - fn signature(&self) -> &Arc { + fn signature(&self) -> &std::sync::Arc { &self.signature } } - let members = std::sync::Arc::new(hashable_map::HashableMap::from(std::collections::HashMap::from(build_argument_signature_list!($($($arg: $ty $(= $default)?),*)?)))); - crate::execution::values::closure::BuiltinFunction { - callable: Arc::new(BuiltFunction { + callable: std::sync::Arc::new(BuiltFunction { function: move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack $(, $($arg: $ty),*)?| -> ExpressionResult { $code }, - signature: std::sync::Arc::new(Signature { - argument_type: StructDefinition { - members, - variadic: false, - }, - return_type: $return_type - }), + signature: $crate::build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type), }) } }}; @@ -425,19 +476,19 @@ macro_rules! build_function { #[macro_export] macro_rules! build_method { - ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $this:ident: $this_type:ty $(, $($arg:ident: $ty:ident $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ - struct BuiltFunction, &mut Stack, $this_type $(, $($ty),*)?) -> ExpressionResult> { + ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $this:ident: $this_type:path $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ + struct BuiltFunction, &mut crate::execution::Stack, $this_type $(, $($ty),*)?) -> ExpressionResult> { function: F, - signature: Arc, + signature: std::sync::Arc, } - impl, &mut Stack, $this_type $(, $($ty),*)?) -> ExpressionResult + Send + Sync> crate::execution::values::closure::Callable for BuiltFunction { + impl, &mut crate::execution::Stack, $this_type $(, $($ty),*)?) -> ExpressionResult + Send + Sync> crate::execution::values::closure::Callable for BuiltFunction { fn call( &self, runtime: &mut dyn RuntimeLog, stack_trace: &mut Vec, - stack: &mut Stack, - argument: Dictionary, + stack: &mut crate::execution::Stack, + argument: crate::execution::values::Dictionary, ) -> crate::execution::errors::ExpressionResult { use crate::execution::errors::Raise; @@ -457,7 +508,7 @@ macro_rules! build_method { // Argument is potentially unused if we take no arguments. let mut _argument = self.signature.argument_type.fill_defaults(argument); - let _data = Arc::make_mut(&mut _argument.data); + let _data = std::sync::Arc::make_mut(&mut _argument.data); $($(let $arg: $ty = _data.members.remove(stringify!($arg)) .expect("Argument was not present after argument check.").downcast(stack_trace)?;)*)? @@ -468,23 +519,15 @@ macro_rules! build_method { stringify!($name) } - fn signature(&self) -> &Arc { + fn signature(&self) -> &std::sync::Arc { &self.signature } } - let members = std::sync::Arc::new(hashable_map::HashableMap::from(std::collections::HashMap::from($crate::build_argument_signature_list!($($($arg: $ty $(= $default)?),*)?)))); - crate::execution::values::closure::BuiltinFunction { - callable: Arc::new(BuiltFunction { - function: move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $this: $this_type $(, $($arg: $ty),*)?| -> ExpressionResult { $code }, - signature: std::sync::Arc::new(crate::execution::values::closure::Signature { - argument_type: crate::execution::values::StructDefinition { - members, - variadic: false, - }, - return_type: $return_type - }), + callable: std::sync::Arc::new(BuiltFunction { + function: move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut crate::execution::Stack, $this: $this_type $(, $($arg: $ty),*)?| -> ExpressionResult { $code }, + signature: $crate::build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type), }) } }}; @@ -492,9 +535,9 @@ macro_rules! build_method { #[macro_export] macro_rules! static_method { - ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $this:ident: $this_type:ty $(, $($arg:ident: $ty:ident $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ - static METHOD: std::sync::OnceLock = std::sync::OnceLock::new(); - METHOD.get_or_init(|| crate::build_method!($name ($log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $this: $this_type $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code).into()) + ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $this:ident: $this_type:path $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ + static METHOD: std::sync::OnceLock = std::sync::OnceLock::new(); + METHOD.get_or_init(|| $crate::build_method!($name ($log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $this: $this_type $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code).into()) }}; } @@ -554,7 +597,7 @@ mod test { use super::*; use crate::execution::{ test_run, - values::{self, StructMember, UnsignedInteger}, + values::{self, SignedInteger, StructMember, UnsignedInteger}, }; use hashable_map::HashableMap; use pretty_assertions::assert_eq; diff --git a/crates/interpreter/src/execution/values/default.rs b/crates/interpreter/src/execution/values/default.rs index 19945f0..813d3f1 100644 --- a/crates/interpreter/src/execution/values/default.rs +++ b/crates/interpreter/src/execution/values/default.rs @@ -16,6 +16,8 @@ * program. If not, see . */ +use crate::execution::values::StaticType; + use super::{value_type::ValueType, Object, StaticTypeName}; #[derive(Debug, Eq, Clone, Copy, PartialEq, Hash)] @@ -32,3 +34,9 @@ impl StaticTypeName for DefaultValue { "Default" } } + +impl StaticType for DefaultValue { + fn static_type() -> ValueType { + ValueType::Default + } +} diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index db56ee1..555123a 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -27,6 +27,7 @@ use crate::{ errors::{ErrorType, ExpressionResult, Raise as _}, logging::RuntimeLog, stack::{ScopeType, Stack}, + values::StaticType, }, }; @@ -79,6 +80,9 @@ impl StaticTypeName for Dictionary { } } +// TODO we should derive StaticType for structs that can be used to automatically unpack +// dictionaries. + impl From> for Dictionary { fn from(map: HashMap) -> Self { let mut struct_members = HashMap::with_capacity(map.len()); diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index faa1325..64b2601 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -31,6 +31,7 @@ use crate::{ execution::{ errors::{ExpressionResult, GenericFailure, Raise}, logging::RuntimeLog, + values::StaticType, }, }; @@ -242,6 +243,15 @@ where } } +impl StaticType for Integer +where + I: GetType, +{ + fn static_type() -> ValueType { + I::get_type() + } +} + trait GetType { fn get_type() -> ValueType; } diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 8668c2e..7741998 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -62,6 +62,14 @@ pub trait StaticTypeName { fn static_type_name() -> &'static str; } +pub trait StaticType { + // Provites the TypeValue without having an instance of the object. + // This is used for type checking built-in functions and methods. + // Not all types provide this, and thus, not all types can be used with + // built in functions. + fn static_type() -> ValueType; +} + #[derive(Debug, Eq, PartialEq)] struct UnsupportedOperationError { pub type_name: Cow<'static, str>, @@ -361,6 +369,12 @@ impl StaticTypeName for Value { } } +impl StaticType for Value { + fn static_type() -> ValueType { + ValueType::Any + } +} + #[derive(Debug, Eq, PartialEq)] pub struct DowncastError { pub expected: Cow<'static, str>, diff --git a/crates/interpreter/src/execution/values/string.rs b/crates/interpreter/src/execution/values/string.rs index e85de78..c877c20 100644 --- a/crates/interpreter/src/execution/values/string.rs +++ b/crates/interpreter/src/execution/values/string.rs @@ -18,7 +18,16 @@ use imstr::ImString; -use crate::{compile::SourceReference, execution::logging::RuntimeLog}; +use crate::{ + build_closure_signature, build_closure_type, + compile::SourceReference, + execution::{ + errors::Raise, + logging::RuntimeLog, + values::{MissingAttributeError, StaticType, UserClosure}, + }, + static_method, +}; use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; @@ -40,7 +49,50 @@ impl Object for IString { Ok(self.0 == rhs.0) } - // TODO we need to add a bunch of manipulation methods to this. + fn get_attribute( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + attribute: &str, + ) -> ExpressionResult<&Value> { + build_closure_type!(MapClosure(character: IString) -> ValueType::Any); + build_closure_type!(FoldClosure(previous: Value, character: IString) -> ValueType::Any); + + match attribute { + "map" => { + let value = static_method!( + String_map( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: ValueType, + for_each: MapClosure) -> ValueType::TypeNone + { + todo!() + } + ); + Ok(value) + } + "fold" => { + let value = static_method!( + String_map( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: ValueType, + for_each: FoldClosure) -> ValueType::TypeNone + { + todo!() + } + ); + Ok(value) + } + _ => Err(MissingAttributeError { + name: attribute.into(), + } + .to_error(stack_trace)), + } + } } impl StaticTypeName for IString { @@ -49,6 +101,12 @@ impl StaticTypeName for IString { } } +impl StaticType for IString { + fn static_type() -> ValueType { + ValueType::String + } +} + impl From for IString where S: Into, diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 45dbf47..4611530 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -32,7 +32,7 @@ use crate::{ errors::{ErrorType, ExpressionResult, Raise}, logging::RuntimeLog, stack::Stack, - values::{self, dictionary::DictionaryData, Dictionary, MissingAttributeError}, + values::{self, dictionary::DictionaryData, Dictionary, IString, MissingAttributeError}, }, static_method, }; @@ -47,9 +47,10 @@ pub enum ValueType { Scalar(Dimension), Closure(Arc), Dictionary(StructDefinition), + String, ValueType, MultiType(Box, Box), - Value, + Any, } impl From for ValueType { @@ -67,6 +68,7 @@ impl ValueType { Self::SignedInteger => SignedInteger::static_type_name().into(), Self::UnsignedInteger => UnsignedInteger::static_type_name().into(), Self::Scalar(dimension) => units::get_dimension_name(dimension).into(), + Self::String => IString::static_type_name().into(), _ => format!("{}", self).into(), } } @@ -115,7 +117,7 @@ impl ValueType { }), } } - (Self::Value, _) => Ok(()), + (Self::Any, _) => Ok(()), (expected, got) => Err(TypeQualificationError::This { expected: expected.clone(), got: got.clone(), @@ -176,12 +178,12 @@ impl Object for ValueType { } "try_qualify" => { let value = static_method!( - ValueType_qualify( + ValueType_try_qualify( _log: &mut dyn RuntimeLog, _stack_trace: &mut Vec, _stack: &mut Stack, this: ValueType, - to_qualify: Value) -> ValueType::TypeNone + to_qualify: Value) -> ValueType::Boolean { Ok(values::Boolean(this.check_other_qualifies(&to_qualify.get_type()).is_ok()).into()) } @@ -634,41 +636,41 @@ mod test { #[test] fn value_type_any_value() { - ValueType::Value + ValueType::Any .check_other_qualifies(&ValueType::TypeNone) .unwrap(); - ValueType::Value + ValueType::Any .check_other_qualifies(&ValueType::Boolean) .unwrap(); - ValueType::Value + ValueType::Any .check_other_qualifies(&ValueType::SignedInteger) .unwrap(); - ValueType::Value + ValueType::Any .check_other_qualifies(&ValueType::UnsignedInteger) .unwrap(); - ValueType::Value + ValueType::Any .check_other_qualifies(&ValueType::Scalar(Dimension::length())) .unwrap(); let closure = test_run("() -> std.types.None std.consts.None").unwrap(); let closure = closure.as_userclosure().unwrap(); - ValueType::Value + ValueType::Any .check_other_qualifies(&closure.get_type()) .unwrap(); let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); let dictionary = dictionary.as_dictionary().unwrap(); - ValueType::Value + ValueType::Any .check_other_qualifies(&dictionary.get_type()) .unwrap(); - ValueType::Value + ValueType::Any .check_other_qualifies(&ValueType::ValueType) .unwrap(); } From 1e278ab8630394adc1ae58e8384100e89c2df2e3 Mon Sep 17 00:00:00 2001 From: James Carl Date: Tue, 23 Dec 2025 15:58:38 -0500 Subject: [PATCH 052/106] Implement lists --- crates/interpreter/src/execution/mod.rs | 4 +- .../interpreter/src/execution/values/list.rs | 165 ++++++++++++++++++ .../interpreter/src/execution/values/mod.rs | 5 +- .../src/execution/values/value_type.rs | 14 +- 4 files changed, 185 insertions(+), 3 deletions(-) create mode 100644 crates/interpreter/src/execution/values/list.rs diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index c81c5de..209b73e 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -121,7 +121,9 @@ pub fn execute_expression( Ok(values::Dictionary::from_ast(log, stack_trace, stack, ast_node)?.into()) } compile::Expression::If(ast_node) => todo!(), - compile::Expression::List(ast_node) => todo!(), + compile::Expression::List(ast_node) => { + Ok(values::List::from_ast(log, stack_trace, stack, ast_node)?.into()) + } compile::Expression::Parenthesis(ast_node) => { execute_expression(log, stack_trace, stack, &ast_node) } diff --git a/crates/interpreter/src/execution/values/list.rs b/crates/interpreter/src/execution/values/list.rs new file mode 100644 index 0000000..91ec451 --- /dev/null +++ b/crates/interpreter/src/execution/values/list.rs @@ -0,0 +1,165 @@ +/* + * Copyright 2024 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use crate::{ + compile::{AstNode, Expression, SourceReference}, + execute_expression, + execution::{logging::RuntimeLog, stack::Stack, values::StaticType}, +}; + +use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; + +use std::sync::Arc; + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct List { + // In theory, we could use a lot less memory by dynamically sizing everything to fit + // our smallest type, but we aren't going to implement that today. + + // None means that the list is empty and can be used anywhere. + internal_type: Option, + values: Arc>, +} + +impl List { + pub fn from_ast( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + ast_node: &AstNode>>, + ) -> ExpressionResult { + let values: ExpressionResult> = ast_node + .node + .iter() + .map(|expression| execute_expression(log, stack_trace, stack, expression)) + .collect(); + + Ok(List::from_iter(values?)) + } +} + +impl FromIterator for List { + fn from_iter(iterator: I) -> Self + where + I: IntoIterator, + { + let values: Vec<_> = iterator.into_iter().collect(); + + let internal_type = if let Some(initial_type) = values.first().map(|first| first.get_type()) + { + Some(values.iter().fold(initial_type, |accumulated, next| { + accumulated.merge(next.get_type()) + })) + } else { + // This is an empty list. + None + }; + + Self { + internal_type, + values: Arc::new(values), + } + } +} + +impl Object for List { + fn get_type(&self) -> ValueType { + ValueType::List(self.internal_type.clone().map(Box::new)) + } + + fn eq( + self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: Value, + ) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(stack_trace)?; + Ok(self.values == rhs.values) + } + + // TODO set operations + // Append operations +} + +impl StaticTypeName for List { + fn static_type_name() -> &'static str { + "List" + } +} + +impl StaticType for List { + fn static_type() -> ValueType { + ValueType::List(Option::None) + } +} + +#[cfg(test)] +mod test { + use super::*; + use crate::execution::{test_run, values}; + + #[test] + fn create_empty() { + let product = test_run("[]").unwrap(); + assert_eq!(product, List::from_iter([]).into()); + } + + #[test] + fn create() { + let product = test_run("[1u, 2u, 3u]").unwrap(); + assert_eq!( + product, + List::from_iter([ + values::UnsignedInteger::from(1).into(), + values::UnsignedInteger::from(2).into(), + values::UnsignedInteger::from(3).into() + ]) + .into() + ); + } + + #[test] + fn create_multi_type() { + let product = test_run("[1u, 2i, 3u]").unwrap(); + assert_eq!( + product, + List::from_iter([ + values::UnsignedInteger::from(1).into(), + values::SignedInteger::from(2).into(), + values::UnsignedInteger::from(3).into() + ]) + .into() + ); + } + + #[test] + fn type_detection() { + assert_eq!( + List::from_iter([ + values::UnsignedInteger::from(1).into(), + values::SignedInteger::from(2).into(), + values::UnsignedInteger::from(3).into() + ]) + .internal_type, + Some(ValueType::MultiType( + Box::new(ValueType::UnsignedInteger), + Box::new(ValueType::SignedInteger) + )) + ); + } +} diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 7741998..f65bee1 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -50,6 +50,9 @@ pub use closure::{BuiltinFunction, UserClosure}; mod dictionary; pub use dictionary::Dictionary; +mod list; +pub use list::List; + mod string; pub use string::IString; @@ -341,7 +344,7 @@ pub enum Value { BuiltinFunction, ValueType, Dictionary(Dictionary), - // List(List), + List(List), String(IString), // Range(Range), // Closure(Closure), diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 4611530..a3c28d6 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -47,6 +47,7 @@ pub enum ValueType { Scalar(Dimension), Closure(Arc), Dictionary(StructDefinition), + List(Option>), String, ValueType, MultiType(Box, Box), @@ -73,6 +74,15 @@ impl ValueType { } } + pub fn merge(self, rhs: ValueType) -> Self { + // Do not merge if you already accept this type. + if self.check_other_qualifies(&rhs).is_err() { + Self::MultiType(Box::new(self), Box::new(rhs)) + } else { + self + } + } + pub fn check_other_qualifies( &self, value_type: &ValueType, @@ -133,6 +143,8 @@ impl Display for ValueType { Self::Closure(signature) => write!(f, "{}", signature), Self::Dictionary(definition) => write!(f, "{}", definition), Self::MultiType(left, right) => write!(f, "{left} | {right}"), + Self::List(Some(ty)) => write!(f, "[{ty}]"), + Self::List(Option::None) => write!(f, "[]"), _ => write!(f, "{}", self.name()), } } @@ -151,7 +163,7 @@ impl Object for ValueType { ) -> ExpressionResult { let rhs: Self = rhs.downcast(stack_trace)?; - Ok(Self::MultiType(Box::new(self), Box::new(rhs)).into()) + Ok(self.merge(rhs).into()) } fn get_attribute( From 8c6d3e408b808b23057e0359753ef1513bba4bfb Mon Sep 17 00:00:00 2001 From: James Carl Date: Wed, 24 Dec 2025 09:13:17 -0500 Subject: [PATCH 053/106] Remove old default type --- crates/interpreter/src/compile/expressions.rs | 21 - crates/interpreter/src/execution/mod.rs | 9 +- .../src/execution/values/closure.rs | 1 - .../src/execution/values/default.rs | 42 - .../interpreter/src/execution/values/mod.rs | 4 - .../src/execution/values/value_type.rs | 6 +- .../tree-sitter-command-cad-model/grammar.js | 2 - .../src/grammar.json | 8 - .../src/node-types.json | 8 - .../src/parser.c | 5689 ++++++++--------- 10 files changed, 2757 insertions(+), 3033 deletions(-) delete mode 100644 crates/interpreter/src/execution/values/default.rs diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 9beb887..e34780c 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -37,7 +37,6 @@ pub enum Expression { BinaryExpression(AstNode>), Boolean(AstNode), ClosureDefinition(AstNode>), - Default(AstNode<()>), DictionaryConstruction(AstNode), If(AstNode), List(AstNode>>), @@ -430,11 +429,6 @@ impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { ChildType::ClosureDefinition(closure_definition) => { Self::parse(file, input, closure_definition) } - ChildType::Default(default) => Ok(AstNode::new( - file, - &default, - Self::Default(AstNode::new(file, &default, ())), - )), ChildType::DictionaryConstruction(dictionary_construction) => { Self::parse(file, input, dictionary_construction) } @@ -1193,21 +1187,6 @@ mod test { ); } - #[test] - fn default() { - let root = full_compile("default"); - assert_eq!( - root, - AstNode { - reference: root.reference.clone(), - node: Expression::Default(AstNode { - reference: root.node.as_default().unwrap().reference.clone(), - node: () - }) - } - ); - } - #[test] fn dictionary_construction() { let root = full_compile("(a = true, b = false)"); diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 209b73e..d93c4f9 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -22,7 +22,7 @@ use crate::{ compile::{ self, AstNode, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation, }, - execution::{stack::ScopeType, values::Dictionary}, + execution::stack::ScopeType, }; mod errors; @@ -116,7 +116,6 @@ pub fn execute_expression( compile::Expression::ClosureDefinition(ast_node) => { Ok(values::UserClosure::from_ast(log, stack_trace, stack, ast_node)?.into()) } - compile::Expression::Default(_ast_node) => Ok(values::DefaultValue.into()), compile::Expression::DictionaryConstruction(ast_node) => { Ok(values::Dictionary::from_ast(log, stack_trace, stack, ast_node)?.into()) } @@ -324,12 +323,6 @@ mod test { use super::*; - #[test] - fn default_type() { - let product = test_run("default").unwrap(); - assert_eq!(product, values::DefaultValue.into()); - } - #[test] fn boolean_type() { let product = test_run("true").unwrap(); diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index eaee9bb..36c58df 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -201,7 +201,6 @@ fn find_all_variable_accesses_in_expression( Ok(()) } Expression::Boolean(_) - | Expression::Default(_) | Expression::Scalar(_) | Expression::SignedInteger(_) | Expression::String(_) diff --git a/crates/interpreter/src/execution/values/default.rs b/crates/interpreter/src/execution/values/default.rs deleted file mode 100644 index 813d3f1..0000000 --- a/crates/interpreter/src/execution/values/default.rs +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use crate::execution::values::StaticType; - -use super::{value_type::ValueType, Object, StaticTypeName}; - -#[derive(Debug, Eq, Clone, Copy, PartialEq, Hash)] -pub struct DefaultValue; - -impl Object for DefaultValue { - fn get_type(&self) -> ValueType { - ValueType::Default - } -} - -impl StaticTypeName for DefaultValue { - fn static_type_name() -> &'static str { - "Default" - } -} - -impl StaticType for DefaultValue { - fn static_type() -> ValueType { - ValueType::Default - } -} diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index f65bee1..a969461 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -32,9 +32,6 @@ use super::{ mod void; pub use void::ValueNone; -mod default; -pub use default::DefaultValue; - mod boolean; pub use boolean::Boolean; @@ -335,7 +332,6 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { #[derive(Debug, Eq, PartialEq, EnumDowncast, EnumAs, Clone)] pub enum Value { ValueNone, - Default(DefaultValue), SignedInteger, UnsignedInteger, Boolean, diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index a3c28d6..1ba8378 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -21,8 +21,8 @@ use common_data_types::Dimension; use hashable_map::HashableMap; use super::{ - closure::Signature as ClosureSignature, Boolean, DefaultValue, Object, SignedInteger, - StaticTypeName, UnsignedInteger, Value, ValueNone, + closure::Signature as ClosureSignature, Boolean, Object, SignedInteger, StaticTypeName, + UnsignedInteger, Value, ValueNone, }; use crate::{ @@ -40,7 +40,6 @@ use crate::{ #[derive(Debug, Eq, Clone, PartialEq)] pub enum ValueType { TypeNone, - Default, Boolean, SignedInteger, UnsignedInteger, @@ -64,7 +63,6 @@ impl ValueType { pub fn name(&self) -> Cow<'static, str> { match self { Self::TypeNone => ValueNone::static_type_name().into(), - Self::Default => DefaultValue::static_type_name().into(), Self::Boolean => Boolean::static_type_name().into(), Self::SignedInteger => SignedInteger::static_type_name().into(), Self::UnsignedInteger => UnsignedInteger::static_type_name().into(), diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 4c76197..598e9d5 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -99,7 +99,6 @@ module.exports = grammar({ _whitespace: _ => /\s/, identifier: _ => /[a-zA-Z_][a-zA-Z0-9_]*/, string: _ => /\"(\\\"|[^\"])*\"/, - default: _ => 'default', self: _ => 'self', base_ten: _ => /[0-9]+/, @@ -140,7 +139,6 @@ module.exports = grammar({ expression: $ => choice( $.parenthesis, - $.default, $.signed_integer, $.unsigned_integer, $.scalar, diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 523dd72..313fce8 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -35,10 +35,6 @@ "type": "PATTERN", "value": "\\\"(\\\\\\\"|[^\\\"])*\\\"" }, - "default": { - "type": "STRING", - "value": "default" - }, "self": { "type": "STRING", "value": "self" @@ -349,10 +345,6 @@ "type": "SYMBOL", "name": "parenthesis" }, - { - "type": "SYMBOL", - "name": "default" - }, { "type": "SYMBOL", "name": "signed_integer" diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 1c32770..0ae95a8 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -265,10 +265,6 @@ "type": "closure_definition", "named": true }, - { - "type": "default", - "named": true - }, { "type": "dictionary_construction", "named": true @@ -1120,10 +1116,6 @@ "named": true, "extra": true }, - { - "type": "default", - "named": true - }, { "type": "else", "named": false diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index a43fa93..292f2a0 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -9,9 +9,9 @@ #define LANGUAGE_VERSION 15 #define STATE_COUNT 265 #define LARGE_STATE_COUNT 7 -#define SYMBOL_COUNT 100 +#define SYMBOL_COUNT 99 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 57 +#define TOKEN_COUNT 56 #define EXTERNAL_TOKEN_COUNT 0 #define FIELD_COUNT 26 #define MAX_ALIAS_SEQUENCE_LENGTH 5 @@ -24,101 +24,100 @@ enum ts_symbol_identifiers { sym_comment = 2, sym__whitespace = 3, sym_string = 4, - sym_default = 5, - sym_self = 6, - aux_sym_base_ten_token1 = 7, - aux_sym_octal_token1 = 8, - aux_sym_hex_token1 = 9, - aux_sym_hex_token2 = 10, - aux_sym_binary_token1 = 11, - aux_sym_binary_token2 = 12, - aux_sym_signed_integer_token1 = 13, - aux_sym_unsigned_integer_token1 = 14, - sym_unit_quote = 15, - anon_sym_DOT = 16, - sym_true = 17, - sym_false = 18, - anon_sym_COLON = 19, - anon_sym_DASH = 20, - anon_sym_PLUS = 21, - anon_sym_BANG = 22, - anon_sym_STAR_STAR = 23, - anon_sym_STAR = 24, - anon_sym_SLASH = 25, - anon_sym_SLASH_SLASH = 26, - anon_sym_LT_LT = 27, - anon_sym_GT_GT = 28, - anon_sym_AMP = 29, - anon_sym_PIPE = 30, - anon_sym_CARET = 31, - anon_sym_GT = 32, - anon_sym_GT_EQ = 33, - anon_sym_EQ_EQ = 34, - anon_sym_LT_EQ = 35, - anon_sym_LT = 36, - anon_sym_BANG_EQ = 37, - anon_sym_AMP_AMP = 38, - anon_sym_PIPE_PIPE = 39, - anon_sym_DOT_DOT = 40, - anon_sym_DOT_DOT_EQ = 41, - anon_sym_if = 42, - anon_sym_else = 43, - anon_sym_let = 44, - anon_sym_in = 45, - anon_sym_EQ = 46, - anon_sym_SEMI = 47, - anon_sym_LPAREN = 48, - anon_sym_RPAREN = 49, - anon_sym_LBRACK = 50, - anon_sym_COMMA = 51, - anon_sym_RBRACK = 52, - sym_varadic_dots = 53, - anon_sym_DASH_GT = 54, - anon_sym_LT_LT_LT = 55, - anon_sym_GT_GT_GT = 56, - sym_source_file = 57, - sym_base_ten = 58, - sym_octal = 59, - sym_hex = 60, - sym_binary = 61, - sym_integer = 62, - sym_signed_integer = 63, - sym_unsigned_integer = 64, - sym_number = 65, - sym__float = 66, - sym__unit = 67, - sym_scalar = 68, - sym_boolean = 69, - sym_function_call = 70, - sym_method_call = 71, - sym_expression = 72, - sym_unary_expression = 73, - sym_binary_expression = 74, - sym_if = 75, - sym_let_in = 76, - sym_let_in_assignment = 77, - sym_identity_path = 78, - sym_self_path = 79, - sym_declaration_type = 80, - sym_parenthesis = 81, - sym_list = 82, - sym_struct_member = 83, - sym__struct_final_element = 84, - sym_struct_definition = 85, - sym_dictionary_member_assignment = 86, - sym_dictionary_construction = 87, - sym_closure_definition = 88, - sym_formula = 89, - sym_formula_expression = 90, - sym_formula_parenthesis = 91, - sym_formula_unary_expression = 92, - sym_formula_binary_expression = 93, - aux_sym_let_in_repeat1 = 94, - aux_sym_identity_path_repeat1 = 95, - aux_sym_self_path_repeat1 = 96, - aux_sym_list_repeat1 = 97, - aux_sym_struct_definition_repeat1 = 98, - aux_sym_dictionary_construction_repeat1 = 99, + sym_self = 5, + aux_sym_base_ten_token1 = 6, + aux_sym_octal_token1 = 7, + aux_sym_hex_token1 = 8, + aux_sym_hex_token2 = 9, + aux_sym_binary_token1 = 10, + aux_sym_binary_token2 = 11, + aux_sym_signed_integer_token1 = 12, + aux_sym_unsigned_integer_token1 = 13, + sym_unit_quote = 14, + anon_sym_DOT = 15, + sym_true = 16, + sym_false = 17, + anon_sym_COLON = 18, + anon_sym_DASH = 19, + anon_sym_PLUS = 20, + anon_sym_BANG = 21, + anon_sym_STAR_STAR = 22, + anon_sym_STAR = 23, + anon_sym_SLASH = 24, + anon_sym_SLASH_SLASH = 25, + anon_sym_LT_LT = 26, + anon_sym_GT_GT = 27, + anon_sym_AMP = 28, + anon_sym_PIPE = 29, + anon_sym_CARET = 30, + anon_sym_GT = 31, + anon_sym_GT_EQ = 32, + anon_sym_EQ_EQ = 33, + anon_sym_LT_EQ = 34, + anon_sym_LT = 35, + anon_sym_BANG_EQ = 36, + anon_sym_AMP_AMP = 37, + anon_sym_PIPE_PIPE = 38, + anon_sym_DOT_DOT = 39, + anon_sym_DOT_DOT_EQ = 40, + anon_sym_if = 41, + anon_sym_else = 42, + anon_sym_let = 43, + anon_sym_in = 44, + anon_sym_EQ = 45, + anon_sym_SEMI = 46, + anon_sym_LPAREN = 47, + anon_sym_RPAREN = 48, + anon_sym_LBRACK = 49, + anon_sym_COMMA = 50, + anon_sym_RBRACK = 51, + sym_varadic_dots = 52, + anon_sym_DASH_GT = 53, + anon_sym_LT_LT_LT = 54, + anon_sym_GT_GT_GT = 55, + sym_source_file = 56, + sym_base_ten = 57, + sym_octal = 58, + sym_hex = 59, + sym_binary = 60, + sym_integer = 61, + sym_signed_integer = 62, + sym_unsigned_integer = 63, + sym_number = 64, + sym__float = 65, + sym__unit = 66, + sym_scalar = 67, + sym_boolean = 68, + sym_function_call = 69, + sym_method_call = 70, + sym_expression = 71, + sym_unary_expression = 72, + sym_binary_expression = 73, + sym_if = 74, + sym_let_in = 75, + sym_let_in_assignment = 76, + sym_identity_path = 77, + sym_self_path = 78, + sym_declaration_type = 79, + sym_parenthesis = 80, + sym_list = 81, + sym_struct_member = 82, + sym__struct_final_element = 83, + sym_struct_definition = 84, + sym_dictionary_member_assignment = 85, + sym_dictionary_construction = 86, + sym_closure_definition = 87, + sym_formula = 88, + sym_formula_expression = 89, + sym_formula_parenthesis = 90, + sym_formula_unary_expression = 91, + sym_formula_binary_expression = 92, + aux_sym_let_in_repeat1 = 93, + aux_sym_identity_path_repeat1 = 94, + aux_sym_self_path_repeat1 = 95, + aux_sym_list_repeat1 = 96, + aux_sym_struct_definition_repeat1 = 97, + aux_sym_dictionary_construction_repeat1 = 98, }; static const char * const ts_symbol_names[] = { @@ -127,7 +126,6 @@ static const char * const ts_symbol_names[] = { [sym_comment] = "comment", [sym__whitespace] = "_whitespace", [sym_string] = "string", - [sym_default] = "default", [sym_self] = "self", [aux_sym_base_ten_token1] = "base_ten_token1", [aux_sym_octal_token1] = "octal_token1", @@ -230,7 +228,6 @@ static const TSSymbol ts_symbol_map[] = { [sym_comment] = sym_comment, [sym__whitespace] = sym__whitespace, [sym_string] = sym_string, - [sym_default] = sym_default, [sym_self] = sym_self, [aux_sym_base_ten_token1] = aux_sym_base_ten_token1, [aux_sym_octal_token1] = aux_sym_octal_token1, @@ -348,10 +345,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [sym_default] = { - .visible = true, - .named = true, - }, [sym_self] = { .visible = true, .named = true, @@ -1678,115 +1671,93 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { case 0: ADVANCE_MAP( 'I', 1, - 'd', 2, - 'e', 3, - 'f', 4, - 'i', 5, - 'l', 6, - 's', 7, - 't', 8, - 'U', 9, - 'u', 9, + 'e', 2, + 'f', 3, + 'i', 4, + 'l', 5, + 's', 6, + 't', 7, + 'U', 8, + 'u', 8, ); END_STATE(); case 1: ACCEPT_TOKEN(aux_sym_signed_integer_token1); END_STATE(); case 2: - if (lookahead == 'e') ADVANCE(10); + if (lookahead == 'l') ADVANCE(9); END_STATE(); case 3: - if (lookahead == 'l') ADVANCE(11); + if (lookahead == 'a') ADVANCE(10); END_STATE(); case 4: - if (lookahead == 'a') ADVANCE(12); + ACCEPT_TOKEN(aux_sym_signed_integer_token1); + if (lookahead == 'f') ADVANCE(11); + if (lookahead == 'n') ADVANCE(12); END_STATE(); case 5: - ACCEPT_TOKEN(aux_sym_signed_integer_token1); - if (lookahead == 'f') ADVANCE(13); - if (lookahead == 'n') ADVANCE(14); + if (lookahead == 'e') ADVANCE(13); END_STATE(); case 6: - if (lookahead == 'e') ADVANCE(15); + if (lookahead == 'e') ADVANCE(14); END_STATE(); case 7: - if (lookahead == 'e') ADVANCE(16); + if (lookahead == 'r') ADVANCE(15); END_STATE(); case 8: - if (lookahead == 'r') ADVANCE(17); + ACCEPT_TOKEN(aux_sym_unsigned_integer_token1); END_STATE(); case 9: - ACCEPT_TOKEN(aux_sym_unsigned_integer_token1); + if (lookahead == 's') ADVANCE(16); END_STATE(); case 10: - if (lookahead == 'f') ADVANCE(18); + if (lookahead == 'l') ADVANCE(17); END_STATE(); case 11: - if (lookahead == 's') ADVANCE(19); + ACCEPT_TOKEN(anon_sym_if); END_STATE(); case 12: - if (lookahead == 'l') ADVANCE(20); + ACCEPT_TOKEN(anon_sym_in); END_STATE(); case 13: - ACCEPT_TOKEN(anon_sym_if); + if (lookahead == 't') ADVANCE(18); END_STATE(); case 14: - ACCEPT_TOKEN(anon_sym_in); + if (lookahead == 'l') ADVANCE(19); END_STATE(); case 15: - if (lookahead == 't') ADVANCE(21); + if (lookahead == 'u') ADVANCE(20); END_STATE(); case 16: - if (lookahead == 'l') ADVANCE(22); + if (lookahead == 'e') ADVANCE(21); END_STATE(); case 17: - if (lookahead == 'u') ADVANCE(23); + if (lookahead == 's') ADVANCE(22); END_STATE(); case 18: - if (lookahead == 'a') ADVANCE(24); + ACCEPT_TOKEN(anon_sym_let); END_STATE(); case 19: - if (lookahead == 'e') ADVANCE(25); + if (lookahead == 'f') ADVANCE(23); END_STATE(); case 20: - if (lookahead == 's') ADVANCE(26); + if (lookahead == 'e') ADVANCE(24); END_STATE(); case 21: - ACCEPT_TOKEN(anon_sym_let); + ACCEPT_TOKEN(anon_sym_else); END_STATE(); case 22: - if (lookahead == 'f') ADVANCE(27); + if (lookahead == 'e') ADVANCE(25); END_STATE(); case 23: - if (lookahead == 'e') ADVANCE(28); - END_STATE(); - case 24: - if (lookahead == 'u') ADVANCE(29); - END_STATE(); - case 25: - ACCEPT_TOKEN(anon_sym_else); - END_STATE(); - case 26: - if (lookahead == 'e') ADVANCE(30); - END_STATE(); - case 27: ACCEPT_TOKEN(sym_self); END_STATE(); - case 28: + case 24: ACCEPT_TOKEN(sym_true); END_STATE(); - case 29: - if (lookahead == 'l') ADVANCE(31); - END_STATE(); - case 30: + case 25: ACCEPT_TOKEN(sym_false); END_STATE(); - case 31: - if (lookahead == 't') ADVANCE(32); - END_STATE(); - case 32: - ACCEPT_TOKEN(sym_default); - END_STATE(); default: return false; } @@ -2067,7 +2038,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(1), - [sym_default] = ACTIONS(1), [sym_self] = ACTIONS(1), [aux_sym_base_ten_token1] = ACTIONS(1), [aux_sym_octal_token1] = ACTIONS(1), @@ -2151,22 +2121,21 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), - [sym_default] = ACTIONS(9), - [sym_self] = ACTIONS(11), - [aux_sym_base_ten_token1] = ACTIONS(13), - [aux_sym_octal_token1] = ACTIONS(15), - [aux_sym_hex_token1] = ACTIONS(17), - [aux_sym_binary_token1] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_DASH] = ACTIONS(23), - [anon_sym_PLUS] = ACTIONS(23), - [anon_sym_BANG] = ACTIONS(23), - [anon_sym_if] = ACTIONS(25), - [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(29), - [anon_sym_LBRACK] = ACTIONS(31), - [anon_sym_LT_LT_LT] = ACTIONS(33), + [sym_self] = ACTIONS(9), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_DASH] = ACTIONS(21), + [anon_sym_PLUS] = ACTIONS(21), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_if] = ACTIONS(23), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(27), + [anon_sym_LBRACK] = ACTIONS(29), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(2)] = { [sym_base_ten] = STATE(237), @@ -2199,42 +2168,41 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), - [sym_default] = ACTIONS(9), - [sym_self] = ACTIONS(11), - [aux_sym_base_ten_token1] = ACTIONS(13), - [aux_sym_octal_token1] = ACTIONS(15), - [aux_sym_hex_token1] = ACTIONS(17), - [aux_sym_binary_token1] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_COLON] = ACTIONS(35), - [anon_sym_DASH] = ACTIONS(37), - [anon_sym_PLUS] = ACTIONS(37), - [anon_sym_BANG] = ACTIONS(39), - [anon_sym_STAR_STAR] = ACTIONS(41), - [anon_sym_STAR] = ACTIONS(43), - [anon_sym_SLASH] = ACTIONS(43), - [anon_sym_SLASH_SLASH] = ACTIONS(45), - [anon_sym_LT_LT] = ACTIONS(47), - [anon_sym_GT_GT] = ACTIONS(49), - [anon_sym_AMP] = ACTIONS(51), - [anon_sym_PIPE] = ACTIONS(53), - [anon_sym_CARET] = ACTIONS(55), - [anon_sym_GT] = ACTIONS(57), - [anon_sym_GT_EQ] = ACTIONS(59), - [anon_sym_EQ_EQ] = ACTIONS(59), - [anon_sym_LT_EQ] = ACTIONS(59), - [anon_sym_LT] = ACTIONS(57), - [anon_sym_BANG_EQ] = ACTIONS(59), - [anon_sym_AMP_AMP] = ACTIONS(61), - [anon_sym_PIPE_PIPE] = ACTIONS(63), - [anon_sym_DOT_DOT] = ACTIONS(65), - [anon_sym_DOT_DOT_EQ] = ACTIONS(67), - [anon_sym_if] = ACTIONS(25), - [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(69), - [anon_sym_LBRACK] = ACTIONS(31), - [anon_sym_LT_LT_LT] = ACTIONS(33), + [sym_self] = ACTIONS(9), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_COLON] = ACTIONS(33), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_BANG] = ACTIONS(37), + [anon_sym_STAR_STAR] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_SLASH] = ACTIONS(41), + [anon_sym_SLASH_SLASH] = ACTIONS(43), + [anon_sym_LT_LT] = ACTIONS(45), + [anon_sym_GT_GT] = ACTIONS(47), + [anon_sym_AMP] = ACTIONS(49), + [anon_sym_PIPE] = ACTIONS(51), + [anon_sym_CARET] = ACTIONS(53), + [anon_sym_GT] = ACTIONS(55), + [anon_sym_GT_EQ] = ACTIONS(57), + [anon_sym_EQ_EQ] = ACTIONS(57), + [anon_sym_LT_EQ] = ACTIONS(57), + [anon_sym_LT] = ACTIONS(55), + [anon_sym_BANG_EQ] = ACTIONS(57), + [anon_sym_AMP_AMP] = ACTIONS(59), + [anon_sym_PIPE_PIPE] = ACTIONS(61), + [anon_sym_DOT_DOT] = ACTIONS(63), + [anon_sym_DOT_DOT_EQ] = ACTIONS(65), + [anon_sym_if] = ACTIONS(23), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(67), + [anon_sym_LBRACK] = ACTIONS(29), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(3)] = { [sym_base_ten] = STATE(237), @@ -2267,42 +2235,41 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), - [sym_default] = ACTIONS(9), - [sym_self] = ACTIONS(11), - [aux_sym_base_ten_token1] = ACTIONS(13), - [aux_sym_octal_token1] = ACTIONS(15), - [aux_sym_hex_token1] = ACTIONS(17), - [aux_sym_binary_token1] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_COLON] = ACTIONS(35), - [anon_sym_DASH] = ACTIONS(37), - [anon_sym_PLUS] = ACTIONS(37), - [anon_sym_BANG] = ACTIONS(39), - [anon_sym_STAR_STAR] = ACTIONS(41), - [anon_sym_STAR] = ACTIONS(43), - [anon_sym_SLASH] = ACTIONS(43), - [anon_sym_SLASH_SLASH] = ACTIONS(45), - [anon_sym_LT_LT] = ACTIONS(47), - [anon_sym_GT_GT] = ACTIONS(49), - [anon_sym_AMP] = ACTIONS(51), - [anon_sym_PIPE] = ACTIONS(53), - [anon_sym_CARET] = ACTIONS(55), - [anon_sym_GT] = ACTIONS(57), - [anon_sym_GT_EQ] = ACTIONS(59), - [anon_sym_EQ_EQ] = ACTIONS(59), - [anon_sym_LT_EQ] = ACTIONS(59), - [anon_sym_LT] = ACTIONS(57), - [anon_sym_BANG_EQ] = ACTIONS(59), - [anon_sym_AMP_AMP] = ACTIONS(61), - [anon_sym_PIPE_PIPE] = ACTIONS(63), - [anon_sym_DOT_DOT] = ACTIONS(65), - [anon_sym_DOT_DOT_EQ] = ACTIONS(67), - [anon_sym_if] = ACTIONS(25), - [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(69), - [anon_sym_LBRACK] = ACTIONS(31), - [anon_sym_LT_LT_LT] = ACTIONS(33), + [sym_self] = ACTIONS(9), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_COLON] = ACTIONS(33), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_BANG] = ACTIONS(37), + [anon_sym_STAR_STAR] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_SLASH] = ACTIONS(41), + [anon_sym_SLASH_SLASH] = ACTIONS(43), + [anon_sym_LT_LT] = ACTIONS(45), + [anon_sym_GT_GT] = ACTIONS(47), + [anon_sym_AMP] = ACTIONS(49), + [anon_sym_PIPE] = ACTIONS(51), + [anon_sym_CARET] = ACTIONS(53), + [anon_sym_GT] = ACTIONS(55), + [anon_sym_GT_EQ] = ACTIONS(57), + [anon_sym_EQ_EQ] = ACTIONS(57), + [anon_sym_LT_EQ] = ACTIONS(57), + [anon_sym_LT] = ACTIONS(55), + [anon_sym_BANG_EQ] = ACTIONS(57), + [anon_sym_AMP_AMP] = ACTIONS(59), + [anon_sym_PIPE_PIPE] = ACTIONS(61), + [anon_sym_DOT_DOT] = ACTIONS(63), + [anon_sym_DOT_DOT_EQ] = ACTIONS(65), + [anon_sym_if] = ACTIONS(23), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(67), + [anon_sym_LBRACK] = ACTIONS(29), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(4)] = { [sym_base_ten] = STATE(237), @@ -2335,28 +2302,27 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_closure_definition] = STATE(150), [sym_formula] = STATE(150), [aux_sym_struct_definition_repeat1] = STATE(204), - [sym_identifier] = ACTIONS(71), + [sym_identifier] = ACTIONS(69), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), - [sym_default] = ACTIONS(9), - [sym_self] = ACTIONS(11), - [aux_sym_base_ten_token1] = ACTIONS(13), - [aux_sym_octal_token1] = ACTIONS(15), - [aux_sym_hex_token1] = ACTIONS(17), - [aux_sym_binary_token1] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_DASH] = ACTIONS(23), - [anon_sym_PLUS] = ACTIONS(23), - [anon_sym_BANG] = ACTIONS(23), - [anon_sym_if] = ACTIONS(25), - [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(29), - [anon_sym_RPAREN] = ACTIONS(73), - [anon_sym_LBRACK] = ACTIONS(31), - [sym_varadic_dots] = ACTIONS(75), - [anon_sym_LT_LT_LT] = ACTIONS(33), + [sym_self] = ACTIONS(9), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_DASH] = ACTIONS(21), + [anon_sym_PLUS] = ACTIONS(21), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_if] = ACTIONS(23), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(27), + [anon_sym_RPAREN] = ACTIONS(71), + [anon_sym_LBRACK] = ACTIONS(29), + [sym_varadic_dots] = ACTIONS(73), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(5)] = { [sym_base_ten] = STATE(237), @@ -2389,28 +2355,27 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_closure_definition] = STATE(150), [sym_formula] = STATE(150), [aux_sym_struct_definition_repeat1] = STATE(205), - [sym_identifier] = ACTIONS(71), + [sym_identifier] = ACTIONS(69), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), - [sym_default] = ACTIONS(9), - [sym_self] = ACTIONS(11), - [aux_sym_base_ten_token1] = ACTIONS(13), - [aux_sym_octal_token1] = ACTIONS(15), - [aux_sym_hex_token1] = ACTIONS(17), - [aux_sym_binary_token1] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_DASH] = ACTIONS(23), - [anon_sym_PLUS] = ACTIONS(23), - [anon_sym_BANG] = ACTIONS(23), - [anon_sym_if] = ACTIONS(25), - [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(29), - [anon_sym_RPAREN] = ACTIONS(77), - [anon_sym_LBRACK] = ACTIONS(31), - [sym_varadic_dots] = ACTIONS(75), - [anon_sym_LT_LT_LT] = ACTIONS(33), + [sym_self] = ACTIONS(9), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_DASH] = ACTIONS(21), + [anon_sym_PLUS] = ACTIONS(21), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_if] = ACTIONS(23), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(27), + [anon_sym_RPAREN] = ACTIONS(75), + [anon_sym_LBRACK] = ACTIONS(29), + [sym_varadic_dots] = ACTIONS(73), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(6)] = { [sym_base_ten] = STATE(237), @@ -2443,60 +2408,57 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_closure_definition] = STATE(150), [sym_formula] = STATE(150), [aux_sym_struct_definition_repeat1] = STATE(204), - [sym_identifier] = ACTIONS(71), + [sym_identifier] = ACTIONS(69), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), - [sym_default] = ACTIONS(9), - [sym_self] = ACTIONS(11), - [aux_sym_base_ten_token1] = ACTIONS(13), - [aux_sym_octal_token1] = ACTIONS(15), - [aux_sym_hex_token1] = ACTIONS(17), - [aux_sym_binary_token1] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_DASH] = ACTIONS(23), - [anon_sym_PLUS] = ACTIONS(23), - [anon_sym_BANG] = ACTIONS(23), - [anon_sym_if] = ACTIONS(25), - [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(29), - [anon_sym_RPAREN] = ACTIONS(77), - [anon_sym_LBRACK] = ACTIONS(31), - [sym_varadic_dots] = ACTIONS(75), - [anon_sym_LT_LT_LT] = ACTIONS(33), + [sym_self] = ACTIONS(9), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_DASH] = ACTIONS(21), + [anon_sym_PLUS] = ACTIONS(21), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_if] = ACTIONS(23), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(27), + [anon_sym_RPAREN] = ACTIONS(75), + [anon_sym_LBRACK] = ACTIONS(29), + [sym_varadic_dots] = ACTIONS(73), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, }; static const uint16_t ts_small_parse_table[] = { - [0] = 25, + [0] = 24, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(79), 1, + ACTIONS(77), 1, anon_sym_RBRACK, STATE(9), 1, aux_sym_list_repeat1, @@ -2513,10 +2475,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -2543,34 +2505,32 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [99] = 25, - ACTIONS(81), 1, + [96] = 24, + ACTIONS(79), 1, sym_identifier, - ACTIONS(84), 1, + ACTIONS(82), 1, sym_string, - ACTIONS(87), 1, - sym_default, - ACTIONS(90), 1, + ACTIONS(85), 1, sym_self, - ACTIONS(93), 1, + ACTIONS(88), 1, aux_sym_base_ten_token1, - ACTIONS(96), 1, + ACTIONS(91), 1, aux_sym_octal_token1, - ACTIONS(99), 1, + ACTIONS(94), 1, aux_sym_hex_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, aux_sym_binary_token1, - ACTIONS(111), 1, + ACTIONS(106), 1, anon_sym_if, - ACTIONS(114), 1, + ACTIONS(109), 1, anon_sym_let, - ACTIONS(117), 1, + ACTIONS(112), 1, anon_sym_LPAREN, - ACTIONS(120), 1, + ACTIONS(115), 1, anon_sym_LBRACK, - ACTIONS(123), 1, + ACTIONS(118), 1, anon_sym_RBRACK, - ACTIONS(125), 1, + ACTIONS(120), 1, anon_sym_LT_LT_LT, STATE(8), 1, aux_sym_list_repeat1, @@ -2587,10 +2547,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(105), 2, + ACTIONS(100), 2, sym_true, sym_false, - ACTIONS(108), 3, + ACTIONS(103), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -2617,34 +2577,32 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [198] = 25, + [192] = 24, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(128), 1, + ACTIONS(123), 1, anon_sym_RBRACK, STATE(8), 1, aux_sym_list_repeat1, @@ -2661,10 +2619,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -2691,34 +2649,32 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [297] = 25, + [288] = 24, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(130), 1, + ACTIONS(125), 1, anon_sym_RBRACK, STATE(11), 1, aux_sym_list_repeat1, @@ -2735,10 +2691,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -2765,34 +2721,32 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [396] = 25, + [384] = 24, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(132), 1, + ACTIONS(127), 1, anon_sym_RBRACK, STATE(8), 1, aux_sym_list_repeat1, @@ -2809,10 +2763,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -2839,32 +2793,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [495] = 23, + [480] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -2879,10 +2831,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -2909,32 +2861,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [588] = 23, + [570] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -2949,10 +2899,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -2979,32 +2929,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [681] = 23, + [660] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -3019,10 +2967,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3049,32 +2997,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [774] = 23, + [750] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -3089,10 +3035,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3119,32 +3065,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [867] = 23, + [840] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -3159,10 +3103,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3189,32 +3133,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [960] = 23, - ACTIONS(15), 1, + [930] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -3229,10 +3171,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3259,32 +3201,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1053] = 23, + [1020] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -3299,10 +3239,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3329,32 +3269,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1146] = 23, + [1110] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -3369,10 +3307,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3399,32 +3337,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1239] = 23, + [1200] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -3439,10 +3375,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3469,32 +3405,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1332] = 23, + [1290] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -3509,10 +3443,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3539,32 +3473,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1425] = 23, + [1380] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -3579,10 +3511,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3609,32 +3541,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1518] = 23, + [1470] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -3649,10 +3579,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3679,32 +3609,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1611] = 23, + [1560] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -3719,10 +3647,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3749,32 +3677,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1704] = 23, + [1650] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -3789,10 +3715,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3819,32 +3745,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1797] = 23, - ACTIONS(15), 1, + [1740] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -3859,10 +3783,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3889,32 +3813,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1890] = 23, - ACTIONS(15), 1, + [1830] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(3), 1, sym_expression, @@ -3929,10 +3851,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -3959,32 +3881,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1983] = 23, - ACTIONS(15), 1, + [1920] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -3999,10 +3919,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4029,32 +3949,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2076] = 23, - ACTIONS(15), 1, + [2010] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -4069,10 +3987,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4099,32 +4017,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2169] = 23, - ACTIONS(15), 1, + [2100] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -4139,10 +4055,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4169,32 +4085,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2262] = 23, - ACTIONS(15), 1, + [2190] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -4209,10 +4123,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4239,32 +4153,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2355] = 23, - ACTIONS(15), 1, + [2280] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -4279,10 +4191,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4309,32 +4221,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2448] = 23, - ACTIONS(15), 1, + [2370] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -4349,10 +4259,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4379,32 +4289,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2541] = 23, - ACTIONS(15), 1, + [2460] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -4419,10 +4327,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4449,32 +4357,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2634] = 23, - ACTIONS(15), 1, + [2550] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -4489,10 +4395,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4519,32 +4425,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2727] = 23, - ACTIONS(15), 1, + [2640] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -4559,10 +4463,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4589,32 +4493,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2820] = 23, - ACTIONS(15), 1, + [2730] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -4629,10 +4531,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4659,32 +4561,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2913] = 23, - ACTIONS(15), 1, + [2820] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -4699,10 +4599,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4729,32 +4629,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3006] = 23, - ACTIONS(15), 1, + [2910] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -4769,10 +4667,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4799,32 +4697,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3099] = 23, - ACTIONS(15), 1, + [3000] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(2), 1, sym_expression, @@ -4839,10 +4735,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4869,32 +4765,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3192] = 23, - ACTIONS(15), 1, + [3090] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -4909,10 +4803,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -4939,32 +4833,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3285] = 23, - ACTIONS(15), 1, + [3180] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -4979,10 +4871,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -5009,32 +4901,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3378] = 23, - ACTIONS(15), 1, + [3270] = 22, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(134), 1, + ACTIONS(129), 1, sym_identifier, - ACTIONS(136), 1, + ACTIONS(131), 1, sym_string, - ACTIONS(138), 1, - sym_default, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_self, - ACTIONS(142), 1, + ACTIONS(135), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(141), 1, anon_sym_if, - ACTIONS(150), 1, + ACTIONS(143), 1, anon_sym_let, - ACTIONS(152), 1, + ACTIONS(145), 1, anon_sym_LPAREN, - ACTIONS(154), 1, + ACTIONS(147), 1, anon_sym_LBRACK, - ACTIONS(156), 1, + ACTIONS(149), 1, anon_sym_LT_LT_LT, STATE(58), 1, sym_number, @@ -5049,10 +4939,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(144), 2, + ACTIONS(137), 2, sym_true, sym_false, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -5079,32 +4969,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3471] = 23, + [3360] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -5119,10 +5007,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -5149,32 +5037,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3564] = 23, + [3450] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -5189,10 +5075,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -5219,32 +5105,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3657] = 23, + [3540] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -5259,10 +5143,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -5289,32 +5173,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3750] = 23, + [3630] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -5329,10 +5211,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -5359,32 +5241,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3843] = 23, + [3720] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -5399,10 +5279,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -5429,32 +5309,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3936] = 23, + [3810] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -5469,10 +5347,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -5499,32 +5377,30 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4029] = 23, + [3900] = 22, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_default, - ACTIONS(11), 1, sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(104), 1, sym_number, @@ -5539,10 +5415,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -5569,16 +5445,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4122] = 4, + [3990] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(162), 2, + ACTIONS(155), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(158), 19, + ACTIONS(151), 18, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, anon_sym_DOT, @@ -5596,7 +5471,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(160), 22, + ACTIONS(153), 22, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5619,17 +5494,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4176] = 5, - ACTIONS(168), 1, + [4043] = 5, + ACTIONS(161), 1, anon_sym_DOT, STATE(52), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 18, + ACTIONS(157), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -5646,7 +5520,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(166), 21, + ACTIONS(159), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5668,17 +5542,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4230] = 5, - ACTIONS(175), 1, + [4096] = 5, + ACTIONS(168), 1, anon_sym_DOT, STATE(54), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(171), 18, + ACTIONS(164), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -5695,7 +5568,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(173), 21, + ACTIONS(166), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5717,17 +5590,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4284] = 5, - ACTIONS(175), 1, + [4149] = 5, + ACTIONS(168), 1, anon_sym_DOT, STATE(52), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(177), 18, + ACTIONS(170), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -5744,7 +5616,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(179), 21, + ACTIONS(172), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5766,17 +5638,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4338] = 5, - ACTIONS(185), 1, + [4202] = 5, + ACTIONS(178), 1, anon_sym_DOT, STATE(57), 1, aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(181), 18, + ACTIONS(174), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -5793,7 +5664,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(183), 21, + ACTIONS(176), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5815,17 +5686,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4392] = 5, - ACTIONS(185), 1, + [4255] = 5, + ACTIONS(178), 1, anon_sym_DOT, STATE(55), 1, aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(187), 18, + ACTIONS(180), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -5842,7 +5712,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(189), 21, + ACTIONS(182), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5864,17 +5734,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4446] = 5, - ACTIONS(195), 1, + [4308] = 5, + ACTIONS(188), 1, anon_sym_DOT, STATE(57), 1, aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 18, + ACTIONS(184), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -5891,7 +5760,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(193), 21, + ACTIONS(186), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5913,15 +5782,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4500] = 4, - ACTIONS(202), 1, + [4361] = 4, + ACTIONS(195), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(198), 18, + ACTIONS(191), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -5938,7 +5806,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(200), 22, + ACTIONS(193), 22, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -5961,17 +5829,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4552] = 5, - ACTIONS(208), 1, + [4412] = 5, + ACTIONS(201), 1, sym_unit_quote, STATE(93), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 18, + ACTIONS(197), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -5988,7 +5855,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(206), 21, + ACTIONS(199), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6010,15 +5877,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4606] = 4, - ACTIONS(214), 1, + [4465] = 4, + ACTIONS(207), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(210), 19, + ACTIONS(203), 18, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6036,7 +5902,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(212), 20, + ACTIONS(205), 20, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6057,28 +5923,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4657] = 10, - ACTIONS(35), 1, + [4515] = 10, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(220), 1, + ACTIONS(213), 1, anon_sym_else, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(216), 15, + ACTIONS(209), 14, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6092,7 +5957,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_let, - ACTIONS(218), 17, + ACTIONS(211), 17, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6110,62 +5975,61 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4720] = 21, - ACTIONS(35), 1, + [4577] = 21, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(47), 1, + ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(49), 1, + ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(51), 1, + ACTIONS(49), 1, anon_sym_AMP, - ACTIONS(53), 1, + ACTIONS(51), 1, anon_sym_PIPE, - ACTIONS(55), 1, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(61), 1, + ACTIONS(59), 1, anon_sym_AMP_AMP, - ACTIONS(63), 1, + ACTIONS(61), 1, anon_sym_PIPE_PIPE, - ACTIONS(65), 1, + ACTIONS(63), 1, anon_sym_DOT_DOT, - ACTIONS(67), 1, + ACTIONS(65), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(57), 2, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(226), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(59), 4, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(224), 6, + ACTIONS(217), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(220), 10, + ACTIONS(213), 9, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6174,15 +6038,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [4805] = 4, - ACTIONS(232), 1, + [4661] = 4, + ACTIONS(225), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(228), 19, + ACTIONS(221), 18, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6200,7 +6063,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(230), 20, + ACTIONS(223), 20, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6221,13 +6084,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4856] = 3, + [4711] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 19, + ACTIONS(157), 18, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, anon_sym_DOT, @@ -6245,7 +6107,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(166), 21, + ACTIONS(159), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6267,13 +6129,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4905] = 3, + [4759] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(234), 19, + ACTIONS(227), 18, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, anon_sym_DOT, @@ -6291,7 +6152,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(236), 21, + ACTIONS(229), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6313,62 +6174,61 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [4954] = 21, - ACTIONS(35), 1, + [4807] = 21, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(47), 1, + ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(49), 1, + ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(51), 1, + ACTIONS(49), 1, anon_sym_AMP, - ACTIONS(53), 1, + ACTIONS(51), 1, anon_sym_PIPE, - ACTIONS(55), 1, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(61), 1, + ACTIONS(59), 1, anon_sym_AMP_AMP, - ACTIONS(63), 1, + ACTIONS(61), 1, anon_sym_PIPE_PIPE, - ACTIONS(65), 1, + ACTIONS(63), 1, anon_sym_DOT_DOT, - ACTIONS(67), 1, + ACTIONS(65), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(57), 2, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(226), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(59), 4, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(240), 6, + ACTIONS(233), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(238), 10, + ACTIONS(231), 9, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6377,13 +6237,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5039] = 3, + [4891] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(242), 19, + ACTIONS(235), 18, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6401,7 +6260,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(244), 21, + ACTIONS(237), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6423,13 +6282,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [5088] = 3, + [4939] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(246), 19, + ACTIONS(239), 18, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6447,7 +6305,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(248), 21, + ACTIONS(241), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6469,13 +6327,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [5137] = 3, + [4987] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 18, + ACTIONS(151), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6492,7 +6349,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(160), 22, + ACTIONS(153), 22, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6515,13 +6372,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5186] = 3, + [5035] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(250), 18, + ACTIONS(243), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6538,7 +6394,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(252), 22, + ACTIONS(245), 22, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6561,26 +6417,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5235] = 9, - ACTIONS(35), 1, + [5083] = 9, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(216), 16, + ACTIONS(209), 15, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6595,7 +6450,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(218), 17, + ACTIONS(211), 17, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6613,19 +6468,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5296] = 6, - ACTIONS(35), 1, + [5143] = 6, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(216), 18, + ACTIONS(209), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6642,7 +6496,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(218), 19, + ACTIONS(211), 19, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6662,21 +6516,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5351] = 7, - ACTIONS(35), 1, + [5197] = 7, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(216), 18, + ACTIONS(209), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6693,7 +6546,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(218), 18, + ACTIONS(211), 18, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6712,45 +6565,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5408] = 10, - ACTIONS(35), 1, + [5253] = 10, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(226), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(218), 15, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(216), 16, + ACTIONS(209), 15, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6765,48 +6601,48 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5471] = 12, - ACTIONS(35), 1, + ACTIONS(211), 15, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5315] = 12, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(47), 1, + ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(49), 1, + ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(226), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(218), 14, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(216), 15, + ACTIONS(209), 14, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6820,51 +6656,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5538] = 14, - ACTIONS(35), 1, + ACTIONS(211), 14, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5381] = 14, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(47), 1, + ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(49), 1, + ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(51), 1, + ACTIONS(49), 1, anon_sym_AMP, - ACTIONS(55), 1, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(226), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(218), 13, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(216), 14, + ACTIONS(209), 13, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6877,35 +6713,48 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5609] = 13, - ACTIONS(35), 1, + ACTIONS(211), 13, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [5451] = 13, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(47), 1, + ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(49), 1, + ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(51), 1, + ACTIONS(49), 1, anon_sym_AMP, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(226), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(216), 14, + ACTIONS(209), 13, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6918,7 +6767,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(218), 14, + ACTIONS(211), 14, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6933,39 +6782,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5678] = 15, - ACTIONS(35), 1, + [5519] = 15, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(47), 1, + ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(49), 1, + ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(51), 1, + ACTIONS(49), 1, anon_sym_AMP, - ACTIONS(53), 1, + ACTIONS(51), 1, anon_sym_PIPE, - ACTIONS(55), 1, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(226), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(216), 13, + ACTIONS(209), 12, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -6977,7 +6825,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(218), 13, + ACTIONS(211), 13, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -6991,45 +6839,45 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [5751] = 17, - ACTIONS(35), 1, + [5591] = 17, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(47), 1, + ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(49), 1, + ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(51), 1, + ACTIONS(49), 1, anon_sym_AMP, - ACTIONS(53), 1, + ACTIONS(51), 1, anon_sym_PIPE, - ACTIONS(55), 1, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(57), 2, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(226), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(59), 4, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(218), 9, + ACTIONS(211), 9, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7039,9 +6887,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(216), 11, + ACTIONS(209), 10, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7051,47 +6898,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5828] = 18, - ACTIONS(35), 1, + [5667] = 18, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(47), 1, + ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(49), 1, + ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(51), 1, + ACTIONS(49), 1, anon_sym_AMP, - ACTIONS(53), 1, + ACTIONS(51), 1, anon_sym_PIPE, - ACTIONS(55), 1, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(61), 1, + ACTIONS(59), 1, anon_sym_AMP_AMP, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(57), 2, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(226), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(59), 4, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(218), 8, + ACTIONS(211), 8, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7100,9 +6947,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(216), 11, + ACTIONS(209), 10, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7112,49 +6958,49 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5907] = 19, - ACTIONS(35), 1, + [5745] = 19, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(47), 1, + ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(49), 1, + ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(51), 1, + ACTIONS(49), 1, anon_sym_AMP, - ACTIONS(53), 1, + ACTIONS(51), 1, anon_sym_PIPE, - ACTIONS(55), 1, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(61), 1, + ACTIONS(59), 1, anon_sym_AMP_AMP, - ACTIONS(63), 1, + ACTIONS(61), 1, anon_sym_PIPE_PIPE, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(57), 2, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(226), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(59), 4, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(218), 7, + ACTIONS(211), 7, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7162,9 +7008,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(216), 11, + ACTIONS(209), 10, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7174,62 +7019,61 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [5988] = 21, - ACTIONS(35), 1, + [5825] = 21, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(47), 1, + ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(49), 1, + ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(51), 1, + ACTIONS(49), 1, anon_sym_AMP, - ACTIONS(53), 1, + ACTIONS(51), 1, anon_sym_PIPE, - ACTIONS(55), 1, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(61), 1, + ACTIONS(59), 1, anon_sym_AMP_AMP, - ACTIONS(63), 1, + ACTIONS(61), 1, anon_sym_PIPE_PIPE, - ACTIONS(65), 1, + ACTIONS(63), 1, anon_sym_DOT_DOT, - ACTIONS(67), 1, + ACTIONS(65), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(57), 2, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(226), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(59), 4, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(256), 6, + ACTIONS(249), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(254), 10, + ACTIONS(247), 9, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7238,13 +7082,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [6073] = 3, + [5909] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(258), 19, + ACTIONS(251), 18, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7262,7 +7105,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(260), 21, + ACTIONS(253), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7284,62 +7127,61 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_DASH_GT, anon_sym_LT_LT_LT, - [6122] = 21, - ACTIONS(35), 1, + [5957] = 21, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(47), 1, + ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(49), 1, + ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(51), 1, + ACTIONS(49), 1, anon_sym_AMP, - ACTIONS(53), 1, + ACTIONS(51), 1, anon_sym_PIPE, - ACTIONS(55), 1, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(61), 1, + ACTIONS(59), 1, anon_sym_AMP_AMP, - ACTIONS(63), 1, + ACTIONS(61), 1, anon_sym_PIPE_PIPE, - ACTIONS(65), 1, + ACTIONS(63), 1, anon_sym_DOT_DOT, - ACTIONS(67), 1, + ACTIONS(65), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(57), 2, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(226), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(59), 4, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(264), 6, + ACTIONS(257), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(262), 10, + ACTIONS(255), 9, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7348,62 +7190,61 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [6207] = 21, - ACTIONS(35), 1, + [6041] = 21, + ACTIONS(33), 1, anon_sym_COLON, - ACTIONS(41), 1, + ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(45), 1, + ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(47), 1, + ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(49), 1, + ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(51), 1, + ACTIONS(49), 1, anon_sym_AMP, - ACTIONS(53), 1, + ACTIONS(51), 1, anon_sym_PIPE, - ACTIONS(55), 1, + ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(61), 1, + ACTIONS(59), 1, anon_sym_AMP_AMP, - ACTIONS(63), 1, + ACTIONS(61), 1, anon_sym_PIPE_PIPE, - ACTIONS(65), 1, + ACTIONS(63), 1, anon_sym_DOT_DOT, - ACTIONS(67), 1, + ACTIONS(65), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(222), 1, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(95), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(41), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(57), 2, + ACTIONS(55), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(226), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(59), 4, + ACTIONS(57), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(268), 6, + ACTIONS(261), 6, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, anon_sym_LBRACK, anon_sym_LT_LT_LT, - ACTIONS(266), 10, + ACTIONS(259), 9, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7412,13 +7253,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - [6292] = 3, + [6125] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(270), 18, + ACTIONS(263), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7435,7 +7275,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(272), 21, + ACTIONS(265), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7457,13 +7297,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6340] = 3, + [6172] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 18, + ACTIONS(267), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7480,7 +7319,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(276), 21, + ACTIONS(269), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7502,13 +7341,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6388] = 3, + [6219] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(278), 18, + ACTIONS(271), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7525,7 +7363,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(280), 21, + ACTIONS(273), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7547,13 +7385,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6436] = 3, + [6266] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(282), 18, + ACTIONS(275), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7570,7 +7407,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(284), 21, + ACTIONS(277), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7592,13 +7429,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6484] = 3, + [6313] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(286), 18, + ACTIONS(279), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7615,7 +7451,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(288), 21, + ACTIONS(281), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7637,15 +7473,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6532] = 4, - ACTIONS(210), 1, + [6360] = 4, + ACTIONS(203), 1, anon_sym_else, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 17, + ACTIONS(283), 16, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7661,7 +7496,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_if, anon_sym_let, - ACTIONS(292), 21, + ACTIONS(285), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7683,13 +7518,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6582] = 3, + [6409] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 18, + ACTIONS(287), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7706,7 +7540,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(296), 21, + ACTIONS(289), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7728,13 +7562,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6630] = 3, + [6456] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(298), 18, + ACTIONS(291), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7751,7 +7584,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(300), 21, + ACTIONS(293), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7773,13 +7606,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6678] = 3, + [6503] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(302), 18, + ACTIONS(295), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7796,7 +7628,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(304), 21, + ACTIONS(297), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7818,13 +7650,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6726] = 3, + [6550] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 18, + ACTIONS(283), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7841,7 +7672,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(292), 21, + ACTIONS(285), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7863,13 +7694,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6774] = 3, + [6597] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(210), 18, + ACTIONS(203), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7886,7 +7716,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(212), 21, + ACTIONS(205), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7908,13 +7738,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6822] = 3, + [6644] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(228), 18, + ACTIONS(221), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7931,7 +7760,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(230), 21, + ACTIONS(223), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7953,13 +7782,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6870] = 3, + [6691] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(306), 18, + ACTIONS(299), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -7976,7 +7804,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(308), 21, + ACTIONS(301), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -7998,13 +7826,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6918] = 3, + [6738] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(310), 18, + ACTIONS(303), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -8021,7 +7848,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(312), 21, + ACTIONS(305), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -8043,13 +7870,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [6966] = 3, + [6785] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 18, + ACTIONS(307), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -8066,7 +7892,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(316), 21, + ACTIONS(309), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -8088,13 +7914,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [7014] = 3, + [6832] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 18, + ACTIONS(311), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -8111,7 +7936,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(320), 21, + ACTIONS(313), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -8133,13 +7958,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [7062] = 3, + [6879] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(322), 18, + ACTIONS(315), 17, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, @@ -8156,7 +7980,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, anon_sym_else, anon_sym_let, - ACTIONS(324), 21, + ACTIONS(317), 21, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -8178,14 +8002,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [7110] = 4, + [6926] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(162), 2, + ACTIONS(155), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(158), 12, + ACTIONS(151), 12, sym_identifier, anon_sym_DOT, anon_sym_STAR, @@ -8198,7 +8022,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(160), 22, + ACTIONS(153), 22, ts_builtin_sym_end, sym_unit_quote, anon_sym_COLON, @@ -8221,13 +8045,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7157] = 4, - ACTIONS(326), 1, + [6973] = 4, + ACTIONS(319), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(198), 11, + ACTIONS(191), 11, sym_identifier, anon_sym_STAR, anon_sym_SLASH, @@ -8239,7 +8063,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(200), 22, + ACTIONS(193), 22, ts_builtin_sym_end, sym_unit_quote, anon_sym_COLON, @@ -8262,17 +8086,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7202] = 6, - ACTIONS(328), 1, + [7018] = 6, + ACTIONS(321), 1, sym_identifier, - ACTIONS(330), 1, + ACTIONS(323), 1, sym_unit_quote, STATE(134), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 10, + ACTIONS(197), 10, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -8283,7 +8107,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(206), 21, + ACTIONS(199), 21, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8305,11 +8129,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7251] = 3, + [7067] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(250), 11, + ACTIONS(243), 11, sym_identifier, anon_sym_STAR, anon_sym_SLASH, @@ -8321,7 +8145,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(252), 22, + ACTIONS(245), 22, ts_builtin_sym_end, sym_unit_quote, anon_sym_COLON, @@ -8344,11 +8168,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7293] = 3, + [7109] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 11, + ACTIONS(151), 11, sym_identifier, anon_sym_STAR, anon_sym_SLASH, @@ -8360,7 +8184,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(160), 22, + ACTIONS(153), 22, ts_builtin_sym_end, sym_unit_quote, anon_sym_COLON, @@ -8383,15 +8207,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7335] = 5, - ACTIONS(332), 1, + [7151] = 5, + ACTIONS(325), 1, anon_sym_DOT, STATE(108), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 8, + ACTIONS(157), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8400,7 +8224,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(166), 22, + ACTIONS(159), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8423,15 +8247,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7380] = 5, - ACTIONS(335), 1, + [7196] = 5, + ACTIONS(328), 1, anon_sym_DOT, STATE(111), 1, aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(187), 8, + ACTIONS(180), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8440,7 +8264,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(189), 22, + ACTIONS(182), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8463,15 +8287,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7425] = 5, - ACTIONS(337), 1, + [7241] = 5, + ACTIONS(330), 1, anon_sym_DOT, STATE(110), 1, aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 8, + ACTIONS(184), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8480,7 +8304,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(193), 22, + ACTIONS(186), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8503,15 +8327,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7470] = 5, - ACTIONS(335), 1, + [7286] = 5, + ACTIONS(328), 1, anon_sym_DOT, STATE(110), 1, aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(181), 8, + ACTIONS(174), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8520,7 +8344,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(183), 22, + ACTIONS(176), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8543,15 +8367,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7515] = 5, - ACTIONS(340), 1, + [7331] = 5, + ACTIONS(333), 1, anon_sym_DOT, STATE(108), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(177), 8, + ACTIONS(170), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8560,7 +8384,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(179), 22, + ACTIONS(172), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8583,15 +8407,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7560] = 5, - ACTIONS(340), 1, + [7376] = 5, + ACTIONS(333), 1, anon_sym_DOT, STATE(112), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(171), 8, + ACTIONS(164), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8600,7 +8424,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(173), 22, + ACTIONS(166), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8623,11 +8447,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7605] = 3, + [7421] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(286), 9, + ACTIONS(279), 9, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -8637,7 +8461,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(288), 22, + ACTIONS(281), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -8660,34 +8484,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7645] = 10, - ACTIONS(342), 1, + [7461] = 10, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(216), 6, + ACTIONS(209), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(218), 16, + ACTIONS(211), 16, ts_builtin_sym_end, anon_sym_LT_LT, anon_sym_GT_GT, @@ -8704,11 +8528,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7699] = 3, + [7515] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(242), 9, + ACTIONS(235), 9, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -8718,7 +8542,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(244), 22, + ACTIONS(237), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_PLUS, @@ -8741,11 +8565,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [7739] = 3, + [7555] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(246), 9, + ACTIONS(239), 9, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -8755,7 +8579,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(248), 22, + ACTIONS(241), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_PLUS, @@ -8778,13 +8602,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [7779] = 4, - ACTIONS(354), 1, + [7595] = 4, + ACTIONS(347), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(210), 9, + ACTIONS(203), 9, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -8794,7 +8618,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(212), 21, + ACTIONS(205), 21, ts_builtin_sym_end, anon_sym_COLON, anon_sym_PLUS, @@ -8816,47 +8640,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7821] = 16, - ACTIONS(342), 1, + [7637] = 16, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(216), 2, + ACTIONS(209), 2, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(218), 9, + ACTIONS(211), 9, ts_builtin_sym_end, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, @@ -8866,49 +8690,49 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7887] = 17, - ACTIONS(342), 1, + [7703] = 17, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(216), 2, + ACTIONS(209), 2, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(218), 8, + ACTIONS(211), 8, ts_builtin_sym_end, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, @@ -8917,51 +8741,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [7955] = 18, - ACTIONS(342), 1, + [7771] = 18, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(216), 2, + ACTIONS(209), 2, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(218), 7, + ACTIONS(211), 7, ts_builtin_sym_end, anon_sym_DOT_DOT_EQ, anon_sym_else, @@ -8969,67 +8793,67 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8025] = 20, - ACTIONS(220), 1, + [7841] = 20, + ACTIONS(213), 1, anon_sym_EQ, - ACTIONS(342), 1, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(224), 6, + ACTIONS(217), 6, ts_builtin_sym_end, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8099] = 4, - ACTIONS(232), 1, + [7915] = 4, + ACTIONS(225), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(228), 9, + ACTIONS(221), 9, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -9039,7 +8863,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(230), 21, + ACTIONS(223), 21, ts_builtin_sym_end, anon_sym_COLON, anon_sym_PLUS, @@ -9061,40 +8885,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8141] = 13, - ACTIONS(342), 1, + [7957] = 13, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(216), 5, + ACTIONS(209), 5, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(218), 13, + ACTIONS(211), 13, ts_builtin_sym_end, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -9108,11 +8932,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8201] = 3, + [8017] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 9, + ACTIONS(157), 9, anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, @@ -9122,7 +8946,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(166), 22, + ACTIONS(159), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9145,37 +8969,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8241] = 11, - ACTIONS(342), 1, + [8057] = 11, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(216), 6, + ACTIONS(209), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(218), 14, + ACTIONS(211), 14, ts_builtin_sym_end, anon_sym_CARET, anon_sym_GT_EQ, @@ -9190,95 +9014,95 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8297] = 20, - ACTIONS(254), 1, + [8113] = 20, + ACTIONS(247), 1, anon_sym_EQ, - ACTIONS(342), 1, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(256), 6, + ACTIONS(249), 6, ts_builtin_sym_end, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8371] = 14, - ACTIONS(342), 1, + [8187] = 14, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(216), 4, + ACTIONS(209), 4, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(218), 13, + ACTIONS(211), 13, ts_builtin_sym_end, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -9292,11 +9116,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8433] = 3, + [8249] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(234), 9, + ACTIONS(227), 9, anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, @@ -9306,7 +9130,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(236), 22, + ACTIONS(229), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9329,11 +9153,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8473] = 3, + [8289] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(258), 9, + ACTIONS(251), 9, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -9343,7 +9167,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(260), 22, + ACTIONS(253), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_PLUS, @@ -9366,65 +9190,65 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_DASH_GT, - [8513] = 20, - ACTIONS(238), 1, + [8329] = 20, + ACTIONS(231), 1, anon_sym_EQ, - ACTIONS(342), 1, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(240), 6, + ACTIONS(233), 6, ts_builtin_sym_end, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8587] = 3, + [8403] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(278), 9, + ACTIONS(271), 9, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -9434,7 +9258,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(280), 22, + ACTIONS(273), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9457,65 +9281,65 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [8627] = 20, - ACTIONS(262), 1, + [8443] = 20, + ACTIONS(255), 1, anon_sym_EQ, - ACTIONS(342), 1, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(264), 6, + ACTIONS(257), 6, ts_builtin_sym_end, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8701] = 3, + [8517] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(298), 9, + ACTIONS(291), 9, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -9525,7 +9349,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(300), 22, + ACTIONS(293), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9548,85 +9372,85 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COMMA, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [8741] = 20, - ACTIONS(266), 1, + [8557] = 20, + ACTIONS(259), 1, anon_sym_EQ, - ACTIONS(342), 1, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(268), 6, + ACTIONS(261), 6, ts_builtin_sym_end, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8815] = 9, - ACTIONS(342), 1, + [8631] = 9, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(216), 6, + ACTIONS(209), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(218), 18, + ACTIONS(211), 18, ts_builtin_sym_end, anon_sym_DASH, anon_sym_PLUS, @@ -9645,17 +9469,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8867] = 6, - ACTIONS(342), 1, + [8683] = 6, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(216), 8, + ACTIONS(209), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9664,7 +9488,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(218), 20, + ACTIONS(211), 20, ts_builtin_sym_end, anon_sym_DASH, anon_sym_PLUS, @@ -9685,19 +9509,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8913] = 7, - ACTIONS(342), 1, + [8729] = 7, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(216), 8, + ACTIONS(209), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9706,7 +9530,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(218), 19, + ACTIONS(211), 19, ts_builtin_sym_end, anon_sym_DASH, anon_sym_PLUS, @@ -9726,38 +9550,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [8961] = 12, - ACTIONS(342), 1, + [8777] = 12, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(216), 5, + ACTIONS(209), 5, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(218), 14, + ACTIONS(211), 14, ts_builtin_sym_end, anon_sym_CARET, anon_sym_GT_EQ, @@ -9772,11 +9596,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [9019] = 3, + [8835] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 8, + ACTIONS(287), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9785,7 +9609,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(296), 22, + ACTIONS(289), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9808,11 +9632,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [9058] = 3, + [8874] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(282), 8, + ACTIONS(275), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9821,7 +9645,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(284), 22, + ACTIONS(277), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9844,11 +9668,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [9097] = 3, + [8913] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(306), 8, + ACTIONS(299), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9857,7 +9681,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(308), 22, + ACTIONS(301), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9880,11 +9704,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [9136] = 3, + [8952] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 8, + ACTIONS(283), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9893,7 +9717,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(292), 22, + ACTIONS(285), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9916,11 +9740,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [9175] = 3, + [8991] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 8, + ACTIONS(311), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9929,7 +9753,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(320), 22, + ACTIONS(313), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9952,11 +9776,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [9214] = 3, + [9030] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 8, + ACTIONS(307), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9965,7 +9789,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(316), 22, + ACTIONS(309), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -9988,11 +9812,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [9253] = 3, + [9069] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 8, + ACTIONS(267), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -10001,7 +9825,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(276), 22, + ACTIONS(269), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -10024,11 +9848,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [9292] = 3, + [9108] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(228), 8, + ACTIONS(221), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -10037,7 +9861,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(230), 22, + ACTIONS(223), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -10060,11 +9884,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [9331] = 3, + [9147] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(302), 8, + ACTIONS(295), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -10073,7 +9897,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(304), 22, + ACTIONS(297), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -10096,11 +9920,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [9370] = 3, + [9186] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(270), 8, + ACTIONS(263), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -10109,7 +9933,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(272), 22, + ACTIONS(265), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -10132,11 +9956,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [9409] = 3, + [9225] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(210), 8, + ACTIONS(203), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -10145,7 +9969,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(212), 22, + ACTIONS(205), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -10168,11 +9992,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [9448] = 3, + [9264] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(322), 8, + ACTIONS(315), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -10181,7 +10005,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(324), 22, + ACTIONS(317), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -10204,11 +10028,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [9487] = 3, + [9303] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(310), 8, + ACTIONS(303), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -10217,7 +10041,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(312), 22, + ACTIONS(305), 22, ts_builtin_sym_end, anon_sym_COLON, anon_sym_DASH, @@ -10240,12 +10064,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - [9526] = 8, - ACTIONS(340), 1, + [9342] = 8, + ACTIONS(333), 1, anon_sym_DOT, - ACTIONS(376), 1, + ACTIONS(369), 1, anon_sym_COLON, - ACTIONS(378), 1, + ACTIONS(371), 1, anon_sym_EQ, STATE(112), 1, aux_sym_identity_path_repeat1, @@ -10254,7 +10078,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(171), 7, + ACTIONS(164), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -10262,7 +10086,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(173), 16, + ACTIONS(166), 16, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10279,689 +10103,689 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_RPAREN, - [9573] = 20, - ACTIONS(342), 1, + [9389] = 20, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(380), 1, + ACTIONS(373), 1, anon_sym_EQ, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(382), 2, + ACTIONS(375), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9643] = 20, - ACTIONS(342), 1, + [9459] = 20, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(384), 1, + ACTIONS(377), 1, anon_sym_COMMA, - ACTIONS(386), 1, + ACTIONS(379), 1, anon_sym_RBRACK, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9712] = 20, - ACTIONS(128), 1, + [9528] = 20, + ACTIONS(123), 1, anon_sym_RBRACK, - ACTIONS(342), 1, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(384), 1, + ACTIONS(377), 1, anon_sym_COMMA, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9781] = 19, - ACTIONS(342), 1, + [9597] = 19, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(388), 2, + ACTIONS(381), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9848] = 20, - ACTIONS(132), 1, + [9664] = 20, + ACTIONS(127), 1, anon_sym_RBRACK, - ACTIONS(342), 1, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(384), 1, + ACTIONS(377), 1, anon_sym_COMMA, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9917] = 20, - ACTIONS(342), 1, + [9733] = 20, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(384), 1, + ACTIONS(377), 1, anon_sym_COMMA, - ACTIONS(390), 1, + ACTIONS(383), 1, anon_sym_RBRACK, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9986] = 19, - ACTIONS(342), 1, + [9802] = 19, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(392), 2, + ACTIONS(385), 2, anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10053] = 19, - ACTIONS(342), 1, + [9869] = 19, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(394), 1, + ACTIONS(387), 1, anon_sym_else, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10119] = 19, - ACTIONS(342), 1, + [9935] = 19, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(396), 1, + ACTIONS(389), 1, anon_sym_RPAREN, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10185] = 19, - ACTIONS(342), 1, + [10001] = 19, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(398), 1, + ACTIONS(391), 1, anon_sym_RPAREN, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10251] = 19, - ACTIONS(342), 1, + [10067] = 19, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(400), 1, + ACTIONS(393), 1, ts_builtin_sym_end, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10317] = 19, - ACTIONS(342), 1, + [10133] = 19, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(402), 1, + ACTIONS(395), 1, anon_sym_SEMI, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10383] = 19, - ACTIONS(342), 1, + [10199] = 19, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(404), 1, + ACTIONS(397), 1, anon_sym_else, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10449] = 19, - ACTIONS(342), 1, + [10265] = 19, + ACTIONS(335), 1, anon_sym_COLON, - ACTIONS(346), 1, + ACTIONS(339), 1, anon_sym_STAR_STAR, - ACTIONS(350), 1, + ACTIONS(343), 1, anon_sym_SLASH_SLASH, - ACTIONS(352), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(358), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(360), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(362), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(368), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(370), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(372), 1, + ACTIONS(365), 1, anon_sym_DOT_DOT, - ACTIONS(374), 1, + ACTIONS(367), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(384), 1, + ACTIONS(377), 1, anon_sym_COMMA, STATE(143), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(337), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(348), 2, + ACTIONS(341), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(356), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(364), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10515] = 14, - ACTIONS(15), 1, + [10331] = 14, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(406), 1, + ACTIONS(399), 1, sym_identifier, - ACTIONS(408), 1, + ACTIONS(401), 1, aux_sym_base_ten_token1, - ACTIONS(412), 1, + ACTIONS(405), 1, anon_sym_LPAREN, STATE(184), 1, sym__float, @@ -10974,7 +10798,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(410), 2, + ACTIONS(403), 2, anon_sym_DASH, anon_sym_PLUS, STATE(237), 4, @@ -10989,18 +10813,18 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10568] = 14, - ACTIONS(15), 1, + [10384] = 14, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(406), 1, + ACTIONS(399), 1, sym_identifier, - ACTIONS(408), 1, + ACTIONS(401), 1, aux_sym_base_ten_token1, - ACTIONS(412), 1, + ACTIONS(405), 1, anon_sym_LPAREN, STATE(184), 1, sym__float, @@ -11013,7 +10837,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(410), 2, + ACTIONS(403), 2, anon_sym_DASH, anon_sym_PLUS, STATE(237), 4, @@ -11028,18 +10852,18 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10621] = 14, - ACTIONS(15), 1, + [10437] = 14, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(406), 1, + ACTIONS(399), 1, sym_identifier, - ACTIONS(408), 1, + ACTIONS(401), 1, aux_sym_base_ten_token1, - ACTIONS(412), 1, + ACTIONS(405), 1, anon_sym_LPAREN, STATE(184), 1, sym__float, @@ -11052,7 +10876,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(410), 2, + ACTIONS(403), 2, anon_sym_DASH, anon_sym_PLUS, STATE(237), 4, @@ -11067,18 +10891,18 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10674] = 14, - ACTIONS(13), 1, + [10490] = 14, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(406), 1, + ACTIONS(399), 1, sym_identifier, - ACTIONS(412), 1, + ACTIONS(405), 1, anon_sym_LPAREN, STATE(104), 1, sym_number, @@ -11091,7 +10915,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(414), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, STATE(237), 4, @@ -11106,18 +10930,18 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10727] = 14, - ACTIONS(13), 1, + [10543] = 14, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(406), 1, + ACTIONS(399), 1, sym_identifier, - ACTIONS(412), 1, + ACTIONS(405), 1, anon_sym_LPAREN, STATE(104), 1, sym_number, @@ -11130,7 +10954,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(414), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, STATE(237), 4, @@ -11145,18 +10969,18 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10780] = 14, - ACTIONS(13), 1, + [10596] = 14, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(406), 1, + ACTIONS(399), 1, sym_identifier, - ACTIONS(412), 1, + ACTIONS(405), 1, anon_sym_LPAREN, STATE(104), 1, sym_number, @@ -11169,7 +10993,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(414), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, STATE(237), 4, @@ -11184,18 +11008,18 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10833] = 14, - ACTIONS(13), 1, + [10649] = 14, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(406), 1, + ACTIONS(399), 1, sym_identifier, - ACTIONS(412), 1, + ACTIONS(405), 1, anon_sym_LPAREN, STATE(104), 1, sym_number, @@ -11208,7 +11032,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(414), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, STATE(237), 4, @@ -11223,18 +11047,18 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10886] = 14, - ACTIONS(13), 1, + [10702] = 14, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(406), 1, + ACTIONS(399), 1, sym_identifier, - ACTIONS(412), 1, + ACTIONS(405), 1, anon_sym_LPAREN, STATE(104), 1, sym_number, @@ -11247,7 +11071,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(414), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, STATE(237), 4, @@ -11262,18 +11086,18 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10939] = 14, - ACTIONS(15), 1, + [10755] = 14, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(406), 1, + ACTIONS(399), 1, sym_identifier, - ACTIONS(408), 1, + ACTIONS(401), 1, aux_sym_base_ten_token1, - ACTIONS(412), 1, + ACTIONS(405), 1, anon_sym_LPAREN, STATE(184), 1, sym__float, @@ -11286,7 +11110,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(410), 2, + ACTIONS(403), 2, anon_sym_DASH, anon_sym_PLUS, STATE(237), 4, @@ -11301,18 +11125,18 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10992] = 14, - ACTIONS(15), 1, + [10808] = 14, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(406), 1, + ACTIONS(399), 1, sym_identifier, - ACTIONS(408), 1, + ACTIONS(401), 1, aux_sym_base_ten_token1, - ACTIONS(412), 1, + ACTIONS(405), 1, anon_sym_LPAREN, STATE(184), 1, sym__float, @@ -11325,7 +11149,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(410), 2, + ACTIONS(403), 2, anon_sym_DASH, anon_sym_PLUS, STATE(237), 4, @@ -11340,18 +11164,18 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [11045] = 14, - ACTIONS(15), 1, + [10861] = 14, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(406), 1, + ACTIONS(399), 1, sym_identifier, - ACTIONS(408), 1, + ACTIONS(401), 1, aux_sym_base_ten_token1, - ACTIONS(412), 1, + ACTIONS(405), 1, anon_sym_LPAREN, STATE(184), 1, sym__float, @@ -11364,7 +11188,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(410), 2, + ACTIONS(403), 2, anon_sym_DASH, anon_sym_PLUS, STATE(237), 4, @@ -11379,18 +11203,18 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [11098] = 14, - ACTIONS(13), 1, + [10914] = 14, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(406), 1, + ACTIONS(399), 1, sym_identifier, - ACTIONS(412), 1, + ACTIONS(405), 1, anon_sym_LPAREN, STATE(104), 1, sym_number, @@ -11403,7 +11227,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(414), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, STATE(237), 4, @@ -11418,18 +11242,18 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [11151] = 14, - ACTIONS(13), 1, + [10967] = 14, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(406), 1, + ACTIONS(399), 1, sym_identifier, - ACTIONS(412), 1, + ACTIONS(405), 1, anon_sym_LPAREN, STATE(104), 1, sym_number, @@ -11442,7 +11266,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(414), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, STATE(237), 4, @@ -11457,20 +11281,19 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [11204] = 3, + [11020] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(416), 8, + ACTIONS(409), 7, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, anon_sym_let, - ACTIONS(123), 11, + ACTIONS(118), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -11482,20 +11305,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LT_LT_LT, - [11232] = 3, + [11047] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(418), 8, + ACTIONS(411), 7, sym_identifier, - sym_default, sym_self, aux_sym_base_ten_token1, sym_true, sym_false, anon_sym_if, anon_sym_let, - ACTIONS(232), 10, + ACTIONS(225), 10, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -11506,19 +11328,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [11259] = 4, + [11073] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(162), 2, + ACTIONS(155), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(158), 4, + ACTIONS(151), 4, sym_identifier, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(160), 10, + ACTIONS(153), 10, sym_unit_quote, anon_sym_DOT, anon_sym_DASH, @@ -11529,20 +11351,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11286] = 5, + [11100] = 5, STATE(194), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, + ACTIONS(413), 2, sym_identifier, sym_unit_quote, - ACTIONS(204), 3, + ACTIONS(197), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 8, + ACTIONS(199), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11551,17 +11373,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11313] = 4, - ACTIONS(422), 1, + [11127] = 4, + ACTIONS(415), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(198), 3, + ACTIONS(191), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(200), 10, + ACTIONS(193), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -11572,15 +11394,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11338] = 3, + [11152] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(426), 3, + ACTIONS(419), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(424), 10, + ACTIONS(417), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11591,15 +11413,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [11360] = 3, + [11174] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(430), 3, + ACTIONS(423), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(428), 10, + ACTIONS(421), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11610,15 +11432,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [11382] = 3, + [11196] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(434), 3, + ACTIONS(427), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(432), 10, + ACTIONS(425), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11629,15 +11451,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [11404] = 3, + [11218] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 3, + ACTIONS(151), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(160), 10, + ACTIONS(153), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -11648,15 +11470,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11426] = 3, + [11240] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(250), 3, + ACTIONS(243), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(252), 10, + ACTIONS(245), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -11667,37 +11489,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11448] = 6, - ACTIONS(436), 1, + [11262] = 6, + ACTIONS(429), 1, anon_sym_STAR_STAR, - ACTIONS(438), 1, + ACTIONS(431), 1, anon_sym_STAR, - ACTIONS(440), 1, + ACTIONS(433), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(434), 2, + ACTIONS(427), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(432), 6, + ACTIONS(425), 6, anon_sym_DASH, anon_sym_PLUS, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11474] = 4, - ACTIONS(436), 1, + [11288] = 4, + ACTIONS(429), 1, anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(434), 3, + ACTIONS(427), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(432), 7, + ACTIONS(425), 7, anon_sym_DASH, anon_sym_PLUS, anon_sym_SLASH, @@ -11705,36 +11527,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11496] = 7, - ACTIONS(436), 1, + [11310] = 7, + ACTIONS(429), 1, anon_sym_STAR_STAR, - ACTIONS(438), 1, + ACTIONS(431), 1, anon_sym_STAR, - ACTIONS(440), 1, + ACTIONS(433), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(442), 2, + ACTIONS(435), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(444), 2, + ACTIONS(437), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(446), 4, + ACTIONS(439), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11524] = 3, + [11338] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(298), 3, + ACTIONS(291), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(300), 8, + ACTIONS(293), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11743,36 +11565,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11544] = 7, - ACTIONS(436), 1, + [11358] = 7, + ACTIONS(429), 1, anon_sym_STAR_STAR, - ACTIONS(438), 1, + ACTIONS(431), 1, anon_sym_STAR, - ACTIONS(440), 1, + ACTIONS(433), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(442), 2, + ACTIONS(435), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(448), 2, + ACTIONS(441), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(450), 4, + ACTIONS(443), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11572] = 3, + [11386] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(286), 3, + ACTIONS(279), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(288), 8, + ACTIONS(281), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11781,15 +11603,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11592] = 3, + [11406] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(278), 3, + ACTIONS(271), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(280), 8, + ACTIONS(273), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11798,78 +11620,78 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11612] = 7, - ACTIONS(436), 1, + [11426] = 7, + ACTIONS(429), 1, anon_sym_STAR_STAR, - ACTIONS(438), 1, + ACTIONS(431), 1, anon_sym_STAR, - ACTIONS(440), 1, + ACTIONS(433), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(442), 2, + ACTIONS(435), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(452), 2, + ACTIONS(445), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(454), 4, + ACTIONS(447), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11640] = 4, - ACTIONS(434), 1, + [11454] = 4, + ACTIONS(427), 1, anon_sym_STAR, - ACTIONS(456), 1, + ACTIONS(449), 1, anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(432), 5, + ACTIONS(425), 5, anon_sym_DASH, anon_sym_PLUS, anon_sym_SLASH, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [11658] = 5, - ACTIONS(456), 1, + [11472] = 5, + ACTIONS(449), 1, anon_sym_STAR_STAR, - ACTIONS(458), 1, + ACTIONS(451), 1, anon_sym_STAR, - ACTIONS(460), 1, + ACTIONS(453), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(432), 4, + ACTIONS(425), 4, anon_sym_DASH, anon_sym_PLUS, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [11678] = 6, - ACTIONS(456), 1, + [11492] = 6, + ACTIONS(449), 1, anon_sym_STAR_STAR, - ACTIONS(458), 1, + ACTIONS(451), 1, anon_sym_STAR, - ACTIONS(460), 1, + ACTIONS(453), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(450), 2, + ACTIONS(443), 2, anon_sym_RPAREN, anon_sym_GT_GT_GT, - ACTIONS(462), 2, + ACTIONS(455), 2, anon_sym_DASH, anon_sym_PLUS, - [11700] = 7, - ACTIONS(75), 1, + [11514] = 7, + ACTIONS(73), 1, sym_varadic_dots, - ACTIONS(464), 1, + ACTIONS(457), 1, sym_identifier, - ACTIONS(466), 1, + ACTIONS(459), 1, anon_sym_RPAREN, STATE(205), 1, aux_sym_struct_definition_repeat1, @@ -11880,27 +11702,27 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11723] = 6, - ACTIONS(456), 1, + [11537] = 6, + ACTIONS(449), 1, anon_sym_STAR_STAR, - ACTIONS(458), 1, + ACTIONS(451), 1, anon_sym_STAR, - ACTIONS(460), 1, + ACTIONS(453), 1, anon_sym_SLASH, - ACTIONS(468), 1, + ACTIONS(461), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(462), 2, + ACTIONS(455), 2, anon_sym_DASH, anon_sym_PLUS, - [11744] = 7, - ACTIONS(75), 1, + [11558] = 7, + ACTIONS(73), 1, sym_varadic_dots, - ACTIONS(464), 1, + ACTIONS(457), 1, sym_identifier, - ACTIONS(470), 1, + ACTIONS(463), 1, anon_sym_RPAREN, STATE(208), 1, aux_sym_struct_definition_repeat1, @@ -11911,12 +11733,12 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11767] = 7, - ACTIONS(75), 1, + [11581] = 7, + ACTIONS(73), 1, sym_varadic_dots, - ACTIONS(464), 1, + ACTIONS(457), 1, sym_identifier, - ACTIONS(472), 1, + ACTIONS(465), 1, anon_sym_RPAREN, STATE(208), 1, aux_sym_struct_definition_repeat1, @@ -11927,38 +11749,38 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [11790] = 6, - ACTIONS(456), 1, + [11604] = 6, + ACTIONS(449), 1, anon_sym_STAR_STAR, - ACTIONS(458), 1, + ACTIONS(451), 1, anon_sym_STAR, - ACTIONS(460), 1, + ACTIONS(453), 1, anon_sym_SLASH, - ACTIONS(474), 1, + ACTIONS(467), 1, anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(462), 2, + ACTIONS(455), 2, anon_sym_DASH, anon_sym_PLUS, - [11811] = 6, - ACTIONS(456), 1, + [11625] = 6, + ACTIONS(449), 1, anon_sym_STAR_STAR, - ACTIONS(458), 1, + ACTIONS(451), 1, anon_sym_STAR, - ACTIONS(460), 1, + ACTIONS(453), 1, anon_sym_SLASH, - ACTIONS(476), 1, + ACTIONS(469), 1, anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(462), 2, + ACTIONS(455), 2, anon_sym_DASH, anon_sym_PLUS, - [11832] = 5, - ACTIONS(478), 1, + [11646] = 5, + ACTIONS(471), 1, sym_identifier, STATE(208), 1, aux_sym_struct_definition_repeat1, @@ -11967,13 +11789,13 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(481), 2, + ACTIONS(474), 2, anon_sym_RPAREN, sym_varadic_dots, - [11850] = 4, - ACTIONS(483), 1, + [11664] = 4, + ACTIONS(476), 1, sym_identifier, - ACTIONS(485), 1, + ACTIONS(478), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, @@ -11981,10 +11803,10 @@ static const uint16_t ts_small_parse_table[] = { STATE(212), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11865] = 4, - ACTIONS(487), 1, + [11679] = 4, + ACTIONS(480), 1, sym_identifier, - ACTIONS(490), 1, + ACTIONS(483), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, @@ -11992,10 +11814,10 @@ static const uint16_t ts_small_parse_table[] = { STATE(210), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11880] = 4, - ACTIONS(483), 1, + [11694] = 4, + ACTIONS(476), 1, sym_identifier, - ACTIONS(492), 1, + ACTIONS(485), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, @@ -12003,10 +11825,10 @@ static const uint16_t ts_small_parse_table[] = { STATE(210), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11895] = 4, - ACTIONS(483), 1, + [11709] = 4, + ACTIONS(476), 1, sym_identifier, - ACTIONS(494), 1, + ACTIONS(487), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, @@ -12014,10 +11836,10 @@ static const uint16_t ts_small_parse_table[] = { STATE(210), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11910] = 4, - ACTIONS(496), 1, + [11724] = 4, + ACTIONS(489), 1, sym_identifier, - ACTIONS(498), 1, + ACTIONS(491), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, @@ -12025,10 +11847,10 @@ static const uint16_t ts_small_parse_table[] = { STATE(12), 2, sym_identity_path, sym_struct_definition, - [11925] = 4, - ACTIONS(496), 1, + [11739] = 4, + ACTIONS(489), 1, sym_identifier, - ACTIONS(498), 1, + ACTIONS(491), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, @@ -12036,10 +11858,10 @@ static const uint16_t ts_small_parse_table[] = { STATE(42), 2, sym_identity_path, sym_struct_definition, - [11940] = 4, - ACTIONS(483), 1, + [11754] = 4, + ACTIONS(476), 1, sym_identifier, - ACTIONS(500), 1, + ACTIONS(493), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, @@ -12047,375 +11869,375 @@ static const uint16_t ts_small_parse_table[] = { STATE(211), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11955] = 4, - ACTIONS(502), 1, + [11769] = 4, + ACTIONS(495), 1, anon_sym_RPAREN, - ACTIONS(504), 1, + ACTIONS(497), 1, anon_sym_COMMA, STATE(218), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11969] = 2, + [11783] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(481), 3, + ACTIONS(474), 3, sym_identifier, anon_sym_RPAREN, sym_varadic_dots, - [11979] = 4, - ACTIONS(506), 1, + [11793] = 4, + ACTIONS(499), 1, anon_sym_RPAREN, - ACTIONS(508), 1, + ACTIONS(501), 1, anon_sym_COMMA, STATE(228), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11993] = 4, - ACTIONS(506), 1, + [11807] = 4, + ACTIONS(499), 1, anon_sym_RPAREN, - ACTIONS(510), 1, + ACTIONS(503), 1, sym_identifier, STATE(243), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12007] = 4, - ACTIONS(512), 1, + [11821] = 4, + ACTIONS(505), 1, anon_sym_RPAREN, - ACTIONS(514), 1, + ACTIONS(507), 1, anon_sym_COMMA, STATE(222), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12021] = 4, - ACTIONS(510), 1, + [11835] = 4, + ACTIONS(503), 1, sym_identifier, - ACTIONS(516), 1, + ACTIONS(509), 1, anon_sym_RPAREN, STATE(216), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12035] = 4, - ACTIONS(518), 1, + [11849] = 4, + ACTIONS(511), 1, anon_sym_RPAREN, - ACTIONS(520), 1, + ACTIONS(513), 1, anon_sym_COMMA, STATE(228), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12049] = 4, - ACTIONS(510), 1, + [11863] = 4, + ACTIONS(503), 1, sym_identifier, - ACTIONS(518), 1, + ACTIONS(511), 1, anon_sym_RPAREN, STATE(243), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12063] = 3, - ACTIONS(522), 1, + [11877] = 3, + ACTIONS(515), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(524), 2, + ACTIONS(517), 2, anon_sym_RPAREN, anon_sym_COMMA, - [12075] = 4, - ACTIONS(510), 1, + [11889] = 4, + ACTIONS(503), 1, sym_identifier, - ACTIONS(526), 1, + ACTIONS(519), 1, anon_sym_RPAREN, STATE(243), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12089] = 4, - ACTIONS(510), 1, + [11903] = 4, + ACTIONS(503), 1, sym_identifier, - ACTIONS(528), 1, + ACTIONS(521), 1, anon_sym_RPAREN, STATE(220), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12103] = 4, - ACTIONS(510), 1, + [11917] = 4, + ACTIONS(503), 1, sym_identifier, - ACTIONS(530), 1, + ACTIONS(523), 1, anon_sym_RPAREN, STATE(243), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12117] = 4, - ACTIONS(532), 1, + [11931] = 4, + ACTIONS(525), 1, anon_sym_RPAREN, - ACTIONS(534), 1, + ACTIONS(527), 1, anon_sym_COMMA, STATE(228), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12131] = 2, + [11945] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(537), 2, + ACTIONS(530), 2, sym_identifier, anon_sym_in, - [12140] = 3, - ACTIONS(510), 1, + [11954] = 3, + ACTIONS(503), 1, sym_identifier, STATE(243), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12151] = 2, + [11965] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(539), 2, + ACTIONS(532), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [12160] = 3, - ACTIONS(376), 1, + [11974] = 3, + ACTIONS(369), 1, anon_sym_COLON, STATE(224), 1, sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12171] = 3, - ACTIONS(541), 1, + [11985] = 3, + ACTIONS(534), 1, aux_sym_signed_integer_token1, - ACTIONS(543), 1, + ACTIONS(536), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12182] = 3, - ACTIONS(545), 1, + [11996] = 3, + ACTIONS(538), 1, anon_sym_RPAREN, - ACTIONS(547), 1, + ACTIONS(540), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12193] = 3, - ACTIONS(352), 1, + [12007] = 3, + ACTIONS(345), 1, anon_sym_LPAREN, STATE(145), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12204] = 3, - ACTIONS(222), 1, + [12018] = 3, + ACTIONS(215), 1, anon_sym_LPAREN, STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12215] = 2, + [12029] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(549), 2, + ACTIONS(542), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [12224] = 3, - ACTIONS(545), 1, + [12038] = 3, + ACTIONS(538), 1, anon_sym_RPAREN, - ACTIONS(551), 1, + ACTIONS(544), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12235] = 3, - ACTIONS(553), 1, + [12049] = 3, + ACTIONS(546), 1, aux_sym_signed_integer_token1, - ACTIONS(555), 1, + ACTIONS(548), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12246] = 3, - ACTIONS(557), 1, + [12060] = 3, + ACTIONS(550), 1, aux_sym_base_ten_token1, STATE(190), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12257] = 2, + [12071] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(559), 2, + ACTIONS(552), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [12266] = 3, - ACTIONS(561), 1, + [12080] = 3, + ACTIONS(554), 1, aux_sym_signed_integer_token1, - ACTIONS(563), 1, + ACTIONS(556), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12277] = 2, + [12091] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(532), 2, + ACTIONS(525), 2, anon_sym_RPAREN, anon_sym_COMMA, - [12286] = 2, + [12100] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(565), 2, + ACTIONS(558), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [12295] = 3, - ACTIONS(567), 1, + [12109] = 3, + ACTIONS(560), 1, aux_sym_base_ten_token1, STATE(70), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12306] = 3, - ACTIONS(569), 1, + [12120] = 3, + ACTIONS(562), 1, aux_sym_base_ten_token1, STATE(106), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12317] = 2, - ACTIONS(571), 1, + [12131] = 2, + ACTIONS(564), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12325] = 2, - ACTIONS(547), 1, + [12139] = 2, + ACTIONS(540), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12333] = 2, - ACTIONS(573), 1, + [12147] = 2, + ACTIONS(566), 1, ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12341] = 2, - ACTIONS(575), 1, + [12155] = 2, + ACTIONS(568), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12349] = 2, - ACTIONS(577), 1, + [12163] = 2, + ACTIONS(570), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12357] = 2, - ACTIONS(579), 1, + [12171] = 2, + ACTIONS(572), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12365] = 2, - ACTIONS(581), 1, + [12179] = 2, + ACTIONS(574), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12373] = 2, - ACTIONS(583), 1, + [12187] = 2, + ACTIONS(576), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12381] = 2, - ACTIONS(585), 1, + [12195] = 2, + ACTIONS(578), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12389] = 2, - ACTIONS(587), 1, + [12203] = 2, + ACTIONS(580), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12397] = 2, - ACTIONS(589), 1, + [12211] = 2, + ACTIONS(582), 1, aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12405] = 2, - ACTIONS(591), 1, + [12219] = 2, + ACTIONS(584), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12413] = 2, - ACTIONS(593), 1, + [12227] = 2, + ACTIONS(586), 1, aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12421] = 2, - ACTIONS(595), 1, + [12235] = 2, + ACTIONS(588), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12429] = 2, - ACTIONS(597), 1, + [12243] = 2, + ACTIONS(590), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12437] = 2, - ACTIONS(599), 1, + [12251] = 2, + ACTIONS(592), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12445] = 2, - ACTIONS(601), 1, + [12259] = 2, + ACTIONS(594), 1, aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12453] = 2, - ACTIONS(603), 1, + [12267] = 2, + ACTIONS(596), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, @@ -12424,263 +12246,263 @@ static const uint16_t ts_small_parse_table[] = { static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(7)] = 0, - [SMALL_STATE(8)] = 99, - [SMALL_STATE(9)] = 198, - [SMALL_STATE(10)] = 297, - [SMALL_STATE(11)] = 396, - [SMALL_STATE(12)] = 495, - [SMALL_STATE(13)] = 588, - [SMALL_STATE(14)] = 681, - [SMALL_STATE(15)] = 774, - [SMALL_STATE(16)] = 867, - [SMALL_STATE(17)] = 960, - [SMALL_STATE(18)] = 1053, - [SMALL_STATE(19)] = 1146, - [SMALL_STATE(20)] = 1239, - [SMALL_STATE(21)] = 1332, - [SMALL_STATE(22)] = 1425, - [SMALL_STATE(23)] = 1518, - [SMALL_STATE(24)] = 1611, - [SMALL_STATE(25)] = 1704, - [SMALL_STATE(26)] = 1797, - [SMALL_STATE(27)] = 1890, - [SMALL_STATE(28)] = 1983, - [SMALL_STATE(29)] = 2076, - [SMALL_STATE(30)] = 2169, - [SMALL_STATE(31)] = 2262, - [SMALL_STATE(32)] = 2355, - [SMALL_STATE(33)] = 2448, - [SMALL_STATE(34)] = 2541, - [SMALL_STATE(35)] = 2634, - [SMALL_STATE(36)] = 2727, - [SMALL_STATE(37)] = 2820, - [SMALL_STATE(38)] = 2913, - [SMALL_STATE(39)] = 3006, - [SMALL_STATE(40)] = 3099, - [SMALL_STATE(41)] = 3192, - [SMALL_STATE(42)] = 3285, - [SMALL_STATE(43)] = 3378, - [SMALL_STATE(44)] = 3471, - [SMALL_STATE(45)] = 3564, - [SMALL_STATE(46)] = 3657, - [SMALL_STATE(47)] = 3750, - [SMALL_STATE(48)] = 3843, - [SMALL_STATE(49)] = 3936, - [SMALL_STATE(50)] = 4029, - [SMALL_STATE(51)] = 4122, - [SMALL_STATE(52)] = 4176, - [SMALL_STATE(53)] = 4230, - [SMALL_STATE(54)] = 4284, - [SMALL_STATE(55)] = 4338, - [SMALL_STATE(56)] = 4392, - [SMALL_STATE(57)] = 4446, - [SMALL_STATE(58)] = 4500, - [SMALL_STATE(59)] = 4552, - [SMALL_STATE(60)] = 4606, - [SMALL_STATE(61)] = 4657, - [SMALL_STATE(62)] = 4720, - [SMALL_STATE(63)] = 4805, - [SMALL_STATE(64)] = 4856, - [SMALL_STATE(65)] = 4905, - [SMALL_STATE(66)] = 4954, - [SMALL_STATE(67)] = 5039, - [SMALL_STATE(68)] = 5088, - [SMALL_STATE(69)] = 5137, - [SMALL_STATE(70)] = 5186, - [SMALL_STATE(71)] = 5235, - [SMALL_STATE(72)] = 5296, - [SMALL_STATE(73)] = 5351, - [SMALL_STATE(74)] = 5408, - [SMALL_STATE(75)] = 5471, - [SMALL_STATE(76)] = 5538, - [SMALL_STATE(77)] = 5609, - [SMALL_STATE(78)] = 5678, - [SMALL_STATE(79)] = 5751, - [SMALL_STATE(80)] = 5828, - [SMALL_STATE(81)] = 5907, - [SMALL_STATE(82)] = 5988, - [SMALL_STATE(83)] = 6073, - [SMALL_STATE(84)] = 6122, - [SMALL_STATE(85)] = 6207, - [SMALL_STATE(86)] = 6292, - [SMALL_STATE(87)] = 6340, - [SMALL_STATE(88)] = 6388, - [SMALL_STATE(89)] = 6436, - [SMALL_STATE(90)] = 6484, - [SMALL_STATE(91)] = 6532, - [SMALL_STATE(92)] = 6582, - [SMALL_STATE(93)] = 6630, - [SMALL_STATE(94)] = 6678, - [SMALL_STATE(95)] = 6726, - [SMALL_STATE(96)] = 6774, - [SMALL_STATE(97)] = 6822, - [SMALL_STATE(98)] = 6870, - [SMALL_STATE(99)] = 6918, - [SMALL_STATE(100)] = 6966, - [SMALL_STATE(101)] = 7014, - [SMALL_STATE(102)] = 7062, - [SMALL_STATE(103)] = 7110, - [SMALL_STATE(104)] = 7157, - [SMALL_STATE(105)] = 7202, - [SMALL_STATE(106)] = 7251, - [SMALL_STATE(107)] = 7293, - [SMALL_STATE(108)] = 7335, - [SMALL_STATE(109)] = 7380, - [SMALL_STATE(110)] = 7425, - [SMALL_STATE(111)] = 7470, - [SMALL_STATE(112)] = 7515, - [SMALL_STATE(113)] = 7560, - [SMALL_STATE(114)] = 7605, - [SMALL_STATE(115)] = 7645, - [SMALL_STATE(116)] = 7699, - [SMALL_STATE(117)] = 7739, - [SMALL_STATE(118)] = 7779, - [SMALL_STATE(119)] = 7821, - [SMALL_STATE(120)] = 7887, - [SMALL_STATE(121)] = 7955, - [SMALL_STATE(122)] = 8025, - [SMALL_STATE(123)] = 8099, - [SMALL_STATE(124)] = 8141, - [SMALL_STATE(125)] = 8201, - [SMALL_STATE(126)] = 8241, - [SMALL_STATE(127)] = 8297, - [SMALL_STATE(128)] = 8371, - [SMALL_STATE(129)] = 8433, - [SMALL_STATE(130)] = 8473, - [SMALL_STATE(131)] = 8513, - [SMALL_STATE(132)] = 8587, - [SMALL_STATE(133)] = 8627, - [SMALL_STATE(134)] = 8701, - [SMALL_STATE(135)] = 8741, - [SMALL_STATE(136)] = 8815, - [SMALL_STATE(137)] = 8867, - [SMALL_STATE(138)] = 8913, - [SMALL_STATE(139)] = 8961, - [SMALL_STATE(140)] = 9019, - [SMALL_STATE(141)] = 9058, - [SMALL_STATE(142)] = 9097, - [SMALL_STATE(143)] = 9136, - [SMALL_STATE(144)] = 9175, - [SMALL_STATE(145)] = 9214, - [SMALL_STATE(146)] = 9253, - [SMALL_STATE(147)] = 9292, - [SMALL_STATE(148)] = 9331, - [SMALL_STATE(149)] = 9370, - [SMALL_STATE(150)] = 9409, - [SMALL_STATE(151)] = 9448, - [SMALL_STATE(152)] = 9487, - [SMALL_STATE(153)] = 9526, - [SMALL_STATE(154)] = 9573, - [SMALL_STATE(155)] = 9643, - [SMALL_STATE(156)] = 9712, - [SMALL_STATE(157)] = 9781, - [SMALL_STATE(158)] = 9848, - [SMALL_STATE(159)] = 9917, - [SMALL_STATE(160)] = 9986, - [SMALL_STATE(161)] = 10053, - [SMALL_STATE(162)] = 10119, - [SMALL_STATE(163)] = 10185, - [SMALL_STATE(164)] = 10251, - [SMALL_STATE(165)] = 10317, - [SMALL_STATE(166)] = 10383, - [SMALL_STATE(167)] = 10449, - [SMALL_STATE(168)] = 10515, - [SMALL_STATE(169)] = 10568, - [SMALL_STATE(170)] = 10621, - [SMALL_STATE(171)] = 10674, - [SMALL_STATE(172)] = 10727, - [SMALL_STATE(173)] = 10780, - [SMALL_STATE(174)] = 10833, - [SMALL_STATE(175)] = 10886, - [SMALL_STATE(176)] = 10939, - [SMALL_STATE(177)] = 10992, - [SMALL_STATE(178)] = 11045, - [SMALL_STATE(179)] = 11098, - [SMALL_STATE(180)] = 11151, - [SMALL_STATE(181)] = 11204, - [SMALL_STATE(182)] = 11232, - [SMALL_STATE(183)] = 11259, - [SMALL_STATE(184)] = 11286, - [SMALL_STATE(185)] = 11313, - [SMALL_STATE(186)] = 11338, - [SMALL_STATE(187)] = 11360, - [SMALL_STATE(188)] = 11382, - [SMALL_STATE(189)] = 11404, - [SMALL_STATE(190)] = 11426, - [SMALL_STATE(191)] = 11448, - [SMALL_STATE(192)] = 11474, - [SMALL_STATE(193)] = 11496, - [SMALL_STATE(194)] = 11524, - [SMALL_STATE(195)] = 11544, - [SMALL_STATE(196)] = 11572, - [SMALL_STATE(197)] = 11592, - [SMALL_STATE(198)] = 11612, - [SMALL_STATE(199)] = 11640, - [SMALL_STATE(200)] = 11658, - [SMALL_STATE(201)] = 11678, - [SMALL_STATE(202)] = 11700, - [SMALL_STATE(203)] = 11723, - [SMALL_STATE(204)] = 11744, - [SMALL_STATE(205)] = 11767, - [SMALL_STATE(206)] = 11790, - [SMALL_STATE(207)] = 11811, - [SMALL_STATE(208)] = 11832, - [SMALL_STATE(209)] = 11850, - [SMALL_STATE(210)] = 11865, - [SMALL_STATE(211)] = 11880, - [SMALL_STATE(212)] = 11895, - [SMALL_STATE(213)] = 11910, - [SMALL_STATE(214)] = 11925, - [SMALL_STATE(215)] = 11940, - [SMALL_STATE(216)] = 11955, - [SMALL_STATE(217)] = 11969, - [SMALL_STATE(218)] = 11979, - [SMALL_STATE(219)] = 11993, - [SMALL_STATE(220)] = 12007, - [SMALL_STATE(221)] = 12021, - [SMALL_STATE(222)] = 12035, - [SMALL_STATE(223)] = 12049, - [SMALL_STATE(224)] = 12063, - [SMALL_STATE(225)] = 12075, - [SMALL_STATE(226)] = 12089, - [SMALL_STATE(227)] = 12103, - [SMALL_STATE(228)] = 12117, - [SMALL_STATE(229)] = 12131, - [SMALL_STATE(230)] = 12140, - [SMALL_STATE(231)] = 12151, - [SMALL_STATE(232)] = 12160, - [SMALL_STATE(233)] = 12171, - [SMALL_STATE(234)] = 12182, - [SMALL_STATE(235)] = 12193, - [SMALL_STATE(236)] = 12204, - [SMALL_STATE(237)] = 12215, - [SMALL_STATE(238)] = 12224, - [SMALL_STATE(239)] = 12235, - [SMALL_STATE(240)] = 12246, - [SMALL_STATE(241)] = 12257, - [SMALL_STATE(242)] = 12266, - [SMALL_STATE(243)] = 12277, - [SMALL_STATE(244)] = 12286, - [SMALL_STATE(245)] = 12295, - [SMALL_STATE(246)] = 12306, - [SMALL_STATE(247)] = 12317, - [SMALL_STATE(248)] = 12325, - [SMALL_STATE(249)] = 12333, - [SMALL_STATE(250)] = 12341, - [SMALL_STATE(251)] = 12349, - [SMALL_STATE(252)] = 12357, - [SMALL_STATE(253)] = 12365, - [SMALL_STATE(254)] = 12373, - [SMALL_STATE(255)] = 12381, - [SMALL_STATE(256)] = 12389, - [SMALL_STATE(257)] = 12397, - [SMALL_STATE(258)] = 12405, - [SMALL_STATE(259)] = 12413, - [SMALL_STATE(260)] = 12421, - [SMALL_STATE(261)] = 12429, - [SMALL_STATE(262)] = 12437, - [SMALL_STATE(263)] = 12445, - [SMALL_STATE(264)] = 12453, + [SMALL_STATE(8)] = 96, + [SMALL_STATE(9)] = 192, + [SMALL_STATE(10)] = 288, + [SMALL_STATE(11)] = 384, + [SMALL_STATE(12)] = 480, + [SMALL_STATE(13)] = 570, + [SMALL_STATE(14)] = 660, + [SMALL_STATE(15)] = 750, + [SMALL_STATE(16)] = 840, + [SMALL_STATE(17)] = 930, + [SMALL_STATE(18)] = 1020, + [SMALL_STATE(19)] = 1110, + [SMALL_STATE(20)] = 1200, + [SMALL_STATE(21)] = 1290, + [SMALL_STATE(22)] = 1380, + [SMALL_STATE(23)] = 1470, + [SMALL_STATE(24)] = 1560, + [SMALL_STATE(25)] = 1650, + [SMALL_STATE(26)] = 1740, + [SMALL_STATE(27)] = 1830, + [SMALL_STATE(28)] = 1920, + [SMALL_STATE(29)] = 2010, + [SMALL_STATE(30)] = 2100, + [SMALL_STATE(31)] = 2190, + [SMALL_STATE(32)] = 2280, + [SMALL_STATE(33)] = 2370, + [SMALL_STATE(34)] = 2460, + [SMALL_STATE(35)] = 2550, + [SMALL_STATE(36)] = 2640, + [SMALL_STATE(37)] = 2730, + [SMALL_STATE(38)] = 2820, + [SMALL_STATE(39)] = 2910, + [SMALL_STATE(40)] = 3000, + [SMALL_STATE(41)] = 3090, + [SMALL_STATE(42)] = 3180, + [SMALL_STATE(43)] = 3270, + [SMALL_STATE(44)] = 3360, + [SMALL_STATE(45)] = 3450, + [SMALL_STATE(46)] = 3540, + [SMALL_STATE(47)] = 3630, + [SMALL_STATE(48)] = 3720, + [SMALL_STATE(49)] = 3810, + [SMALL_STATE(50)] = 3900, + [SMALL_STATE(51)] = 3990, + [SMALL_STATE(52)] = 4043, + [SMALL_STATE(53)] = 4096, + [SMALL_STATE(54)] = 4149, + [SMALL_STATE(55)] = 4202, + [SMALL_STATE(56)] = 4255, + [SMALL_STATE(57)] = 4308, + [SMALL_STATE(58)] = 4361, + [SMALL_STATE(59)] = 4412, + [SMALL_STATE(60)] = 4465, + [SMALL_STATE(61)] = 4515, + [SMALL_STATE(62)] = 4577, + [SMALL_STATE(63)] = 4661, + [SMALL_STATE(64)] = 4711, + [SMALL_STATE(65)] = 4759, + [SMALL_STATE(66)] = 4807, + [SMALL_STATE(67)] = 4891, + [SMALL_STATE(68)] = 4939, + [SMALL_STATE(69)] = 4987, + [SMALL_STATE(70)] = 5035, + [SMALL_STATE(71)] = 5083, + [SMALL_STATE(72)] = 5143, + [SMALL_STATE(73)] = 5197, + [SMALL_STATE(74)] = 5253, + [SMALL_STATE(75)] = 5315, + [SMALL_STATE(76)] = 5381, + [SMALL_STATE(77)] = 5451, + [SMALL_STATE(78)] = 5519, + [SMALL_STATE(79)] = 5591, + [SMALL_STATE(80)] = 5667, + [SMALL_STATE(81)] = 5745, + [SMALL_STATE(82)] = 5825, + [SMALL_STATE(83)] = 5909, + [SMALL_STATE(84)] = 5957, + [SMALL_STATE(85)] = 6041, + [SMALL_STATE(86)] = 6125, + [SMALL_STATE(87)] = 6172, + [SMALL_STATE(88)] = 6219, + [SMALL_STATE(89)] = 6266, + [SMALL_STATE(90)] = 6313, + [SMALL_STATE(91)] = 6360, + [SMALL_STATE(92)] = 6409, + [SMALL_STATE(93)] = 6456, + [SMALL_STATE(94)] = 6503, + [SMALL_STATE(95)] = 6550, + [SMALL_STATE(96)] = 6597, + [SMALL_STATE(97)] = 6644, + [SMALL_STATE(98)] = 6691, + [SMALL_STATE(99)] = 6738, + [SMALL_STATE(100)] = 6785, + [SMALL_STATE(101)] = 6832, + [SMALL_STATE(102)] = 6879, + [SMALL_STATE(103)] = 6926, + [SMALL_STATE(104)] = 6973, + [SMALL_STATE(105)] = 7018, + [SMALL_STATE(106)] = 7067, + [SMALL_STATE(107)] = 7109, + [SMALL_STATE(108)] = 7151, + [SMALL_STATE(109)] = 7196, + [SMALL_STATE(110)] = 7241, + [SMALL_STATE(111)] = 7286, + [SMALL_STATE(112)] = 7331, + [SMALL_STATE(113)] = 7376, + [SMALL_STATE(114)] = 7421, + [SMALL_STATE(115)] = 7461, + [SMALL_STATE(116)] = 7515, + [SMALL_STATE(117)] = 7555, + [SMALL_STATE(118)] = 7595, + [SMALL_STATE(119)] = 7637, + [SMALL_STATE(120)] = 7703, + [SMALL_STATE(121)] = 7771, + [SMALL_STATE(122)] = 7841, + [SMALL_STATE(123)] = 7915, + [SMALL_STATE(124)] = 7957, + [SMALL_STATE(125)] = 8017, + [SMALL_STATE(126)] = 8057, + [SMALL_STATE(127)] = 8113, + [SMALL_STATE(128)] = 8187, + [SMALL_STATE(129)] = 8249, + [SMALL_STATE(130)] = 8289, + [SMALL_STATE(131)] = 8329, + [SMALL_STATE(132)] = 8403, + [SMALL_STATE(133)] = 8443, + [SMALL_STATE(134)] = 8517, + [SMALL_STATE(135)] = 8557, + [SMALL_STATE(136)] = 8631, + [SMALL_STATE(137)] = 8683, + [SMALL_STATE(138)] = 8729, + [SMALL_STATE(139)] = 8777, + [SMALL_STATE(140)] = 8835, + [SMALL_STATE(141)] = 8874, + [SMALL_STATE(142)] = 8913, + [SMALL_STATE(143)] = 8952, + [SMALL_STATE(144)] = 8991, + [SMALL_STATE(145)] = 9030, + [SMALL_STATE(146)] = 9069, + [SMALL_STATE(147)] = 9108, + [SMALL_STATE(148)] = 9147, + [SMALL_STATE(149)] = 9186, + [SMALL_STATE(150)] = 9225, + [SMALL_STATE(151)] = 9264, + [SMALL_STATE(152)] = 9303, + [SMALL_STATE(153)] = 9342, + [SMALL_STATE(154)] = 9389, + [SMALL_STATE(155)] = 9459, + [SMALL_STATE(156)] = 9528, + [SMALL_STATE(157)] = 9597, + [SMALL_STATE(158)] = 9664, + [SMALL_STATE(159)] = 9733, + [SMALL_STATE(160)] = 9802, + [SMALL_STATE(161)] = 9869, + [SMALL_STATE(162)] = 9935, + [SMALL_STATE(163)] = 10001, + [SMALL_STATE(164)] = 10067, + [SMALL_STATE(165)] = 10133, + [SMALL_STATE(166)] = 10199, + [SMALL_STATE(167)] = 10265, + [SMALL_STATE(168)] = 10331, + [SMALL_STATE(169)] = 10384, + [SMALL_STATE(170)] = 10437, + [SMALL_STATE(171)] = 10490, + [SMALL_STATE(172)] = 10543, + [SMALL_STATE(173)] = 10596, + [SMALL_STATE(174)] = 10649, + [SMALL_STATE(175)] = 10702, + [SMALL_STATE(176)] = 10755, + [SMALL_STATE(177)] = 10808, + [SMALL_STATE(178)] = 10861, + [SMALL_STATE(179)] = 10914, + [SMALL_STATE(180)] = 10967, + [SMALL_STATE(181)] = 11020, + [SMALL_STATE(182)] = 11047, + [SMALL_STATE(183)] = 11073, + [SMALL_STATE(184)] = 11100, + [SMALL_STATE(185)] = 11127, + [SMALL_STATE(186)] = 11152, + [SMALL_STATE(187)] = 11174, + [SMALL_STATE(188)] = 11196, + [SMALL_STATE(189)] = 11218, + [SMALL_STATE(190)] = 11240, + [SMALL_STATE(191)] = 11262, + [SMALL_STATE(192)] = 11288, + [SMALL_STATE(193)] = 11310, + [SMALL_STATE(194)] = 11338, + [SMALL_STATE(195)] = 11358, + [SMALL_STATE(196)] = 11386, + [SMALL_STATE(197)] = 11406, + [SMALL_STATE(198)] = 11426, + [SMALL_STATE(199)] = 11454, + [SMALL_STATE(200)] = 11472, + [SMALL_STATE(201)] = 11492, + [SMALL_STATE(202)] = 11514, + [SMALL_STATE(203)] = 11537, + [SMALL_STATE(204)] = 11558, + [SMALL_STATE(205)] = 11581, + [SMALL_STATE(206)] = 11604, + [SMALL_STATE(207)] = 11625, + [SMALL_STATE(208)] = 11646, + [SMALL_STATE(209)] = 11664, + [SMALL_STATE(210)] = 11679, + [SMALL_STATE(211)] = 11694, + [SMALL_STATE(212)] = 11709, + [SMALL_STATE(213)] = 11724, + [SMALL_STATE(214)] = 11739, + [SMALL_STATE(215)] = 11754, + [SMALL_STATE(216)] = 11769, + [SMALL_STATE(217)] = 11783, + [SMALL_STATE(218)] = 11793, + [SMALL_STATE(219)] = 11807, + [SMALL_STATE(220)] = 11821, + [SMALL_STATE(221)] = 11835, + [SMALL_STATE(222)] = 11849, + [SMALL_STATE(223)] = 11863, + [SMALL_STATE(224)] = 11877, + [SMALL_STATE(225)] = 11889, + [SMALL_STATE(226)] = 11903, + [SMALL_STATE(227)] = 11917, + [SMALL_STATE(228)] = 11931, + [SMALL_STATE(229)] = 11945, + [SMALL_STATE(230)] = 11954, + [SMALL_STATE(231)] = 11965, + [SMALL_STATE(232)] = 11974, + [SMALL_STATE(233)] = 11985, + [SMALL_STATE(234)] = 11996, + [SMALL_STATE(235)] = 12007, + [SMALL_STATE(236)] = 12018, + [SMALL_STATE(237)] = 12029, + [SMALL_STATE(238)] = 12038, + [SMALL_STATE(239)] = 12049, + [SMALL_STATE(240)] = 12060, + [SMALL_STATE(241)] = 12071, + [SMALL_STATE(242)] = 12080, + [SMALL_STATE(243)] = 12091, + [SMALL_STATE(244)] = 12100, + [SMALL_STATE(245)] = 12109, + [SMALL_STATE(246)] = 12120, + [SMALL_STATE(247)] = 12131, + [SMALL_STATE(248)] = 12139, + [SMALL_STATE(249)] = 12147, + [SMALL_STATE(250)] = 12155, + [SMALL_STATE(251)] = 12163, + [SMALL_STATE(252)] = 12171, + [SMALL_STATE(253)] = 12179, + [SMALL_STATE(254)] = 12187, + [SMALL_STATE(255)] = 12195, + [SMALL_STATE(256)] = 12203, + [SMALL_STATE(257)] = 12211, + [SMALL_STATE(258)] = 12219, + [SMALL_STATE(259)] = 12227, + [SMALL_STATE(260)] = 12235, + [SMALL_STATE(261)] = 12243, + [SMALL_STATE(262)] = 12251, + [SMALL_STATE(263)] = 12259, + [SMALL_STATE(264)] = 12267, }; static const TSParseActionEntry ts_parse_actions[] = { @@ -12689,293 +12511,290 @@ static const TSParseActionEntry ts_parse_actions[] = { [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(113), [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(150), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(109), - [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(103), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(263), - [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), - [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(151), - [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), - [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(215), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), - [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), - [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), - [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(31), - [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), - [49] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(33), - [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(34), - [55] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36), - [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [63] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), - [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [69] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), - [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(153), - [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), - [77] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [79] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [81] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(113), - [84] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(150), - [87] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(150), - [90] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(109), - [93] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(103), - [96] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(257), - [99] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(263), - [102] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(259), - [105] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(151), - [108] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(23), - [111] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(27), - [114] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(215), - [117] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(4), - [120] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(7), - [123] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [125] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(178), - [128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), - [130] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), - [132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [134] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), - [136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), - [138] = {.entry = {.count = 1, .reusable = false}}, SHIFT(96), - [140] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), - [142] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), - [144] = {.entry = {.count = 1, .reusable = false}}, SHIFT(102), - [146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [148] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), - [150] = {.entry = {.count = 1, .reusable = false}}, SHIFT(209), - [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), - [156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), - [158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), - [160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), - [162] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), - [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), - [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), - [168] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(251), - [171] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), - [173] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), - [175] = {.entry = {.count = 1, .reusable = false}}, SHIFT(251), - [177] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 2, 0, 0), - [179] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 2, 0, 0), - [181] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 2, 0, 3), - [183] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 2, 0, 3), - [185] = {.entry = {.count = 1, .reusable = false}}, SHIFT(252), - [187] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), - [189] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), - [191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [195] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(252), - [198] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [202] = {.entry = {.count = 1, .reusable = false}}, SHIFT(245), - [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [208] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [214] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), - [216] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 16), - [218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 16), - [220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 4), - [222] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), - [224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 4), - [226] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [228] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), - [234] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), - [236] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), - [238] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 10), - [240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 10), - [242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 12), - [244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 12), - [246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 14), - [248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 14), - [250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), - [252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), - [254] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 17), - [256] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 17), - [258] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 20), - [260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 20), - [262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 22), - [264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 22), - [266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 23), - [268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 23), - [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 13), - [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 13), - [278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 5), - [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 5), - [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 5), - [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 5), - [290] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 7), - [292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 7), - [294] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [298] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 6), - [300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 6), - [302] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 27), - [304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 27), - [306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 26), - [308] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 26), - [310] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 19), - [312] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 19), - [314] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 21), - [316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 21), - [318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [322] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [326] = {.entry = {.count = 1, .reusable = false}}, SHIFT(246), - [328] = {.entry = {.count = 1, .reusable = false}}, SHIFT(134), - [330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), - [332] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(258), - [335] = {.entry = {.count = 1, .reusable = false}}, SHIFT(262), - [337] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(262), - [340] = {.entry = {.count = 1, .reusable = false}}, SHIFT(258), - [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256), - [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(45), - [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), - [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), - [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [358] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), - [360] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), - [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), - [364] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), - [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [372] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), - [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [378] = {.entry = {.count = 1, .reusable = false}}, SHIFT(21), - [380] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), - [382] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), - [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181), - [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), - [388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 25), - [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), - [392] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 18), - [394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), - [400] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), - [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), - [408] = {.entry = {.count = 1, .reusable = false}}, SHIFT(183), - [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), - [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), - [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), - [416] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [418] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), - [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), - [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), - [424] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), - [426] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), - [428] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [430] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [432] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), - [434] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), - [436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), - [438] = {.entry = {.count = 1, .reusable = false}}, SHIFT(170), - [440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), - [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), - [444] = {.entry = {.count = 1, .reusable = false}}, SHIFT(171), - [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), - [448] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), - [450] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), - [452] = {.entry = {.count = 1, .reusable = false}}, SHIFT(180), - [454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(180), - [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), - [458] = {.entry = {.count = 1, .reusable = false}}, SHIFT(174), - [460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), - [462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), - [464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), - [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), - [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), - [470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), - [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), - [478] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(232), - [481] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [483] = {.entry = {.count = 1, .reusable = false}}, SHIFT(261), - [485] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), - [487] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(261), - [490] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), - [492] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), - [494] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), - [496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), - [500] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), - [502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), - [504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), - [506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), - [508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), - [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(264), - [512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), - [516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), - [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), - [522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [524] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 11), - [526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), - [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), - [530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), - [532] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [534] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(230), - [537] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 24), - [539] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), - [545] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), - [549] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), - [553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), - [555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), - [557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), - [559] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [561] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), - [563] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), - [565] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [567] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [569] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), - [571] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), - [573] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [575] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [577] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [579] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [581] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [583] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), - [585] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [587] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), - [589] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), - [591] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), - [593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), - [595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), - [597] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), - [601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), - [603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(109), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(103), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(263), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(151), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(215), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), + [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), + [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(31), + [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), + [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(33), + [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(34), + [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36), + [57] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), + [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(153), + [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), + [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [77] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [79] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(113), + [82] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(150), + [85] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(109), + [88] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(103), + [91] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(257), + [94] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(263), + [97] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(259), + [100] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(151), + [103] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(23), + [106] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(27), + [109] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(215), + [112] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(4), + [115] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(7), + [118] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [120] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(178), + [123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), + [125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), + [127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [129] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), + [131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), + [135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), + [137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(102), + [139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), + [143] = {.entry = {.count = 1, .reusable = false}}, SHIFT(209), + [145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), + [157] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), + [159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), + [161] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(251), + [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), + [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), + [168] = {.entry = {.count = 1, .reusable = false}}, SHIFT(251), + [170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 2, 0, 0), + [172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 2, 0, 0), + [174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 2, 0, 3), + [176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 2, 0, 3), + [178] = {.entry = {.count = 1, .reusable = false}}, SHIFT(252), + [180] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), + [182] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), + [184] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), + [186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), + [188] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(252), + [191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [195] = {.entry = {.count = 1, .reusable = false}}, SHIFT(245), + [197] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [201] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [203] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), + [209] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 16), + [211] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 16), + [213] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 4), + [215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), + [217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 4), + [219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [221] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [223] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [225] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), + [227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), + [229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), + [231] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 10), + [233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 10), + [235] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 12), + [237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 12), + [239] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 14), + [241] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 14), + [243] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), + [245] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), + [247] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 17), + [249] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 17), + [251] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 20), + [253] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 20), + [255] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 22), + [257] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 22), + [259] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 23), + [261] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 23), + [263] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [265] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [267] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 13), + [269] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 13), + [271] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 5), + [273] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 5), + [275] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [277] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [279] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 5), + [281] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 5), + [283] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 7), + [285] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 7), + [287] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [289] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [291] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 6), + [293] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 6), + [295] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 27), + [297] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 27), + [299] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 26), + [301] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 26), + [303] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 19), + [305] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 19), + [307] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 21), + [309] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 21), + [311] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [313] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [315] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [317] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [319] = {.entry = {.count = 1, .reusable = false}}, SHIFT(246), + [321] = {.entry = {.count = 1, .reusable = false}}, SHIFT(134), + [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [325] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(258), + [328] = {.entry = {.count = 1, .reusable = false}}, SHIFT(262), + [330] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(262), + [333] = {.entry = {.count = 1, .reusable = false}}, SHIFT(258), + [335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256), + [337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [341] = {.entry = {.count = 1, .reusable = false}}, SHIFT(45), + [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), + [347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), + [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [351] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), + [353] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), + [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [357] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), + [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [365] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), + [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [371] = {.entry = {.count = 1, .reusable = false}}, SHIFT(21), + [373] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), + [375] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), + [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181), + [379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [381] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 25), + [383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [385] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 18), + [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [391] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [393] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), + [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), + [401] = {.entry = {.count = 1, .reusable = false}}, SHIFT(183), + [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), + [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [409] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [411] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), + [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), + [415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), + [417] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), + [419] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), + [421] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [423] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [425] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), + [427] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), + [431] = {.entry = {.count = 1, .reusable = false}}, SHIFT(170), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), + [437] = {.entry = {.count = 1, .reusable = false}}, SHIFT(171), + [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [441] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), + [443] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), + [445] = {.entry = {.count = 1, .reusable = false}}, SHIFT(180), + [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(180), + [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), + [451] = {.entry = {.count = 1, .reusable = false}}, SHIFT(174), + [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), + [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), + [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), + [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), + [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [471] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(232), + [474] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [476] = {.entry = {.count = 1, .reusable = false}}, SHIFT(261), + [478] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), + [480] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(261), + [483] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), + [485] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), + [487] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [493] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), + [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), + [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(264), + [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), + [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), + [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), + [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [517] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 11), + [519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), + [521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [525] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [527] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(230), + [530] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 24), + [532] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [538] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), + [542] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), + [546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), + [548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), + [550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), + [552] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), + [556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [558] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), + [566] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [574] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), + [582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), + [584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), + [588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), + [590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), + [596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), }; #ifdef __cplusplus From b5dcc3634d8ca9019467214872cee234db1ac99d Mon Sep 17 00:00:00 2001 From: James Carl Date: Wed, 24 Dec 2025 13:32:46 -0500 Subject: [PATCH 054/106] WIP vectors --- Cargo.lock | 158 +- crates/interpreter/Cargo.toml | 2 + crates/interpreter/src/compile/expressions.rs | 288 + crates/interpreter/src/execution/mod.rs | 31 +- .../src/execution/standard_environment.rs | 35 +- .../src/execution/values/closure.rs | 64 +- .../src/execution/values/dictionary.rs | 4 +- .../interpreter/src/execution/values/mod.rs | 11 +- .../src/execution/values/scalar.rs | 9 +- .../src/execution/values/string.rs | 6 +- .../src/execution/values/value_type.rs | 121 +- .../src/execution/values/vector.rs | 1365 ++ .../tree-sitter-command-cad-model/grammar.js | 6 + .../src/grammar.json | 147 + .../src/node-types.json | 128 + .../src/parser.c | 17676 +++++++++++----- .../test/corpus/precedence.txt | 38 + .../test/corpus/primitives.txt | 72 + 18 files changed, 14475 insertions(+), 5686 deletions(-) create mode 100644 crates/interpreter/src/execution/values/vector.rs diff --git a/Cargo.lock b/Cargo.lock index c5865c4..2244a92 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -142,7 +142,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bde3aa314326e2f984f81adcb399c64b93eed3c0f2cd4258b711bf494c5741de" dependencies = [ - "glam", + "glam 0.24.2", ] [[package]] @@ -280,6 +280,12 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +[[package]] +name = "coalesce" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f42f93baa58655bd5b3db91dd9b2073dc8a0c887dc35bd1cfefbd43fc7cf07" + [[package]] name = "colorchoice" version = "1.0.3" @@ -306,7 +312,7 @@ dependencies = [ "fj-math", "fortuples", "git2", - "glam", + "glam 0.24.2", "imstr 0.2.0 (git+https://github.com/IamTheCarl/imstr)", "lazy_static", "log", @@ -702,6 +708,66 @@ dependencies = [ "url", ] +[[package]] +name = "glam" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "333928d5eb103c5d4050533cec0384302db6be8ef7d3cebd30ec6a35350353da" + +[[package]] +name = "glam" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3abb554f8ee44336b72d522e0a7fe86a29e09f839a36022fa869a7dfe941a54b" + +[[package]] +name = "glam" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4126c0479ccf7e8664c36a2d719f5f2c140fbb4f9090008098d2c291fa5b3f16" + +[[package]] +name = "glam" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01732b97afd8508eee3333a541b9f7610f454bb818669e66e90f5f57c93a776" + +[[package]] +name = "glam" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525a3e490ba77b8e326fb67d4b44b4bd2f920f44d4cc73ccec50adc68e3bee34" + +[[package]] +name = "glam" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b8509e6791516e81c1a630d0bd7fbac36d2fa8712a9da8662e716b52d5051ca" + +[[package]] +name = "glam" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" + +[[package]] +name = "glam" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "518faa5064866338b013ff9b2350dc318e14cc4fcd6cb8206d7e7c9886c98815" + +[[package]] +name = "glam" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f597d56c1bd55a811a1be189459e8fad2bbc272616375602443bdfb37fa774" + +[[package]] +name = "glam" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e4afd9ad95555081e109fe1d21f2a30c691b5f0919c67dfa690a2e1eb6bd51c" + [[package]] name = "glam" version = "0.24.2" @@ -711,6 +777,36 @@ dependencies = [ "serde", ] +[[package]] +name = "glam" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" + +[[package]] +name = "glam" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e05e7e6723e3455f4818c7b26e855439f7546cf617ef669d1adedb8669e5cb9" + +[[package]] +name = "glam" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "779ae4bf7e8421cf91c0b3b64e7e8b40b862fba4d393f59150042de7c4965a94" + +[[package]] +name = "glam" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" + +[[package]] +name = "glam" +version = "0.30.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd47b05dddf0005d850e5644cae7f2b14ac3df487979dbfff3b56f20b1a6ae46" + [[package]] name = "hash32" version = "0.3.1" @@ -963,8 +1059,10 @@ dependencies = [ "file-guard", "hashable-map", "imstr 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "nalgebra 0.34.1", "num-traits", "pretty_assertions", + "stack", "tree-sitter", "tree-sitter-command-cad-model", "type-sitter", @@ -1230,7 +1328,7 @@ checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4" dependencies = [ "approx", "matrixmultiply", - "nalgebra-macros", + "nalgebra-macros 0.2.2", "num-complex", "num-rational", "num-traits", @@ -1246,7 +1344,39 @@ checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" dependencies = [ "approx", "matrixmultiply", - "nalgebra-macros", + "nalgebra-macros 0.2.2", + "num-complex", + "num-rational", + "num-traits", + "simba 0.9.0", + "typenum", +] + +[[package]] +name = "nalgebra" +version = "0.34.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4d5b3eff5cd580f93da45e64715e8c20a3996342f1e466599cf7a267a0c2f5f" +dependencies = [ + "approx", + "glam 0.14.0", + "glam 0.15.2", + "glam 0.16.0", + "glam 0.17.3", + "glam 0.18.0", + "glam 0.19.0", + "glam 0.20.5", + "glam 0.21.3", + "glam 0.22.0", + "glam 0.23.0", + "glam 0.24.2", + "glam 0.25.0", + "glam 0.27.0", + "glam 0.28.0", + "glam 0.29.3", + "glam 0.30.9", + "matrixmultiply", + "nalgebra-macros 0.3.0", "num-complex", "num-rational", "num-traits", @@ -1265,6 +1395,17 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "nalgebra-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "973e7178a678cfd059ccec50887658d482ce16b0aa9da3888ddeab5cd5eb4889" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "nom" version = "7.1.3" @@ -1916,6 +2057,15 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +[[package]] +name = "stack" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c27dee130f751c0903be703c5355e9b333a17550d7d63d04cf0d3b1601edb8a3" +dependencies = [ + "coalesce", +] + [[package]] name = "static_assertions" version = "1.1.0" diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index b2b8d34..596855c 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -17,6 +17,8 @@ compact_str = "0.9" num-traits = "0.2" hashable-map = "0.4.0" imstr = "0.2.0" +nalgebra = "0.34.1" +stack = "0.4.0" [build-dependencies] type-sitter-gen = "0.8" diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index e34780c..3605bd1 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -44,6 +44,9 @@ pub enum Expression { IdentityPath(AstNode), SelfPath(AstNode), Scalar(AstNode), + Vector2(AstNode>), + Vector3(AstNode>), + Vector4(AstNode>), SignedInteger(AstNode), String(AstNode), StructDefinition(AstNode), @@ -238,6 +241,48 @@ impl<'t> Parse<'t, nodes::Scalar<'t>> for Expression { } } +impl<'t> Parse<'t, nodes::Vector2<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Vector2<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::Vector2(Vector2::parse(file, input, value)?.into_box()), + )) + } +} + +impl<'t> Parse<'t, nodes::Vector3<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Vector3<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::Vector3(Vector3::parse(file, input, value)?.into_box()), + )) + } +} + +impl<'t> Parse<'t, nodes::Vector4<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Vector4<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::Vector4(Vector4::parse(file, input, value)?.into_box()), + )) + } +} + impl<'t> Parse<'t, nodes::SignedInteger<'t>> for Expression { fn parse<'i>( file: &Arc, @@ -438,6 +483,9 @@ impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { ChildType::IdentityPath(path) => Self::parse(file, input, path), ChildType::SelfPath(path) => Self::parse(file, input, path), ChildType::Scalar(scalar) => Self::parse(file, input, scalar), + ChildType::Vector2(vector) => Self::parse(file, input, vector), + ChildType::Vector3(vector) => Self::parse(file, input, vector), + ChildType::Vector4(vector) => Self::parse(file, input, vector), ChildType::SignedInteger(signed_integer) => Self::parse(file, input, signed_integer), ChildType::String(string) => Self::parse(file, input, string), ChildType::StructDefinition(struct_definition) => { @@ -731,6 +779,84 @@ impl<'t> Parse<'t, nodes::Scalar<'t>> for Scalar { } } +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct Vector2 { + pub x: AstNode, + pub y: AstNode, +} + +impl<'t> Parse<'t, nodes::Vector2<'t>> for Vector2 { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Vector2<'t>, + ) -> Result, Error<'t, 'i>> { + let x = value.x()?; + let x = Expression::parse(file, input, x)?; + + let y = value.y()?; + let y = Expression::parse(file, input, y)?; + + Ok(AstNode::new(file, &value, Self { x, y })) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct Vector3 { + pub x: AstNode, + pub y: AstNode, + pub z: AstNode, +} + +impl<'t> Parse<'t, nodes::Vector3<'t>> for Vector3 { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Vector3<'t>, + ) -> Result, Error<'t, 'i>> { + let x = value.x()?; + let x = Expression::parse(file, input, x)?; + + let y = value.y()?; + let y = Expression::parse(file, input, y)?; + + let z = value.z()?; + let z = Expression::parse(file, input, z)?; + + Ok(AstNode::new(file, &value, Self { x, y, z })) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct Vector4 { + pub x: AstNode, + pub y: AstNode, + pub z: AstNode, + pub w: AstNode, +} + +impl<'t> Parse<'t, nodes::Vector4<'t>> for Vector4 { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Vector4<'t>, + ) -> Result, Error<'t, 'i>> { + let x = value.x()?; + let x = Expression::parse(file, input, x)?; + + let y = value.y()?; + let y = Expression::parse(file, input, y)?; + + let z = value.z()?; + let z = Expression::parse(file, input, z)?; + + let w = value.w()?; + let w = Expression::parse(file, input, w)?; + + Ok(AstNode::new(file, &value, Self { x, y, z, w })) + } +} + #[derive(Debug, Hash, Eq, PartialEq)] pub struct IfExpression { pub condition: AstNode>, @@ -2125,4 +2251,166 @@ mod test { } ); } + + #[test] + fn vector2() { + let root = full_compile("<(1.0, 2.0)>"); + let vector = root.node.as_vector2().unwrap(); + let x = &vector.node.x; + let x_scalar = x.node.as_scalar().unwrap(); + let y = &vector.node.y; + let y_scalar = y.node.as_scalar().unwrap(); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Vector2(AstNode { + reference: vector.reference.clone(), + node: Box::new(Vector2 { + x: AstNode { + reference: x.reference.clone(), + node: Expression::Scalar(AstNode { + reference: x_scalar.reference.clone(), + node: Scalar { + dimension: Dimension::zero(), + value: Float::new(1.0).unwrap() + } + }) + }, + y: AstNode { + reference: y.reference.clone(), + node: Expression::Scalar(AstNode { + reference: y_scalar.reference.clone(), + node: Scalar { + dimension: Dimension::zero(), + value: Float::new(2.0).unwrap() + } + }) + } + }) + }) + } + ); + } + + #[test] + fn vector3() { + let root = full_compile("<(1.0, 2.0, 3.0)>"); + let vector = root.node.as_vector3().unwrap(); + let x = &vector.node.x; + let x_scalar = x.node.as_scalar().unwrap(); + let y = &vector.node.y; + let y_scalar = y.node.as_scalar().unwrap(); + let z = &vector.node.z; + let z_scalar = z.node.as_scalar().unwrap(); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Vector3(AstNode { + reference: vector.reference.clone(), + node: Box::new(Vector3 { + x: AstNode { + reference: x.reference.clone(), + node: Expression::Scalar(AstNode { + reference: x_scalar.reference.clone(), + node: Scalar { + dimension: Dimension::zero(), + value: Float::new(1.0).unwrap() + } + }) + }, + y: AstNode { + reference: y.reference.clone(), + node: Expression::Scalar(AstNode { + reference: y_scalar.reference.clone(), + node: Scalar { + dimension: Dimension::zero(), + value: Float::new(2.0).unwrap() + } + }) + }, + z: AstNode { + reference: z.reference.clone(), + node: Expression::Scalar(AstNode { + reference: z_scalar.reference.clone(), + node: Scalar { + dimension: Dimension::zero(), + value: Float::new(3.0).unwrap() + } + }) + } + }) + }) + } + ); + } + + #[test] + fn vector4() { + let root = full_compile("<(1.0, 2.0, 3.0, 4.0)>"); + let vector = root.node.as_vector4().unwrap(); + let x = &vector.node.x; + let x_scalar = x.node.as_scalar().unwrap(); + let y = &vector.node.y; + let y_scalar = y.node.as_scalar().unwrap(); + let z = &vector.node.z; + let z_scalar = z.node.as_scalar().unwrap(); + let w = &vector.node.w; + let w_scalar = w.node.as_scalar().unwrap(); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::Vector4(AstNode { + reference: vector.reference.clone(), + node: Box::new(Vector4 { + x: AstNode { + reference: x.reference.clone(), + node: Expression::Scalar(AstNode { + reference: x_scalar.reference.clone(), + node: Scalar { + dimension: Dimension::zero(), + value: Float::new(1.0).unwrap() + } + }) + }, + y: AstNode { + reference: y.reference.clone(), + node: Expression::Scalar(AstNode { + reference: y_scalar.reference.clone(), + node: Scalar { + dimension: Dimension::zero(), + value: Float::new(2.0).unwrap() + } + }) + }, + z: AstNode { + reference: z.reference.clone(), + node: Expression::Scalar(AstNode { + reference: z_scalar.reference.clone(), + node: Scalar { + dimension: Dimension::zero(), + value: Float::new(3.0).unwrap() + } + }) + }, + w: AstNode { + reference: w.reference.clone(), + node: Expression::Scalar(AstNode { + reference: w_scalar.reference.clone(), + node: Scalar { + dimension: Dimension::zero(), + value: Float::new(4.0).unwrap() + } + }) + } + }) + }) + } + ); + } } diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index d93c4f9..7fceea8 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -144,6 +144,15 @@ pub fn execute_expression( value: ast_node.node.value, } .into()), + compile::Expression::Vector2(vector) => { + Ok(values::Vector2::from_ast(log, stack_trace, stack, vector)?.into()) + } + compile::Expression::Vector3(vector) => { + Ok(values::Vector3::from_ast(log, stack_trace, stack, vector)?.into()) + } + compile::Expression::Vector4(vector) => { + Ok(values::Vector4::from_ast(log, stack_trace, stack, vector)?.into()) + } compile::Expression::SignedInteger(ast_node) => { Ok(values::SignedInteger::from(ast_node.node).into()) } @@ -253,10 +262,13 @@ fn execute_binary_expression( let value_a = execute_expression(log, stack_trace, stack, &node.a)?; let value_b = execute_expression(log, stack_trace, stack, &node.b)?; match node.operation.node { - BinaryExpressionOperation::NotEq => Ok(values::Boolean(!matches!( - value_a.cmp(log, stack_trace, value_b)?, - Ordering::Equal - )) + BinaryExpressionOperation::NotEq => Ok(values::Boolean( + !value_a + .clone() + .cmp(log, stack_trace, value_b.clone()) + .map(|ord| matches!(ord, Ordering::Equal)) + .or_else(|_| value_a.eq(log, stack_trace, value_b))?, + ) .into()), BinaryExpressionOperation::And => value_a.bit_and(log, stack_trace, value_b), BinaryExpressionOperation::AndAnd => value_a.and(log, stack_trace, value_b), @@ -281,10 +293,13 @@ fn execute_binary_expression( Ordering::Less | Ordering::Equal )) .into()), - BinaryExpressionOperation::EqEq => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, value_b)?, - Ordering::Equal - )) + BinaryExpressionOperation::EqEq => Ok(values::Boolean( + value_a + .clone() + .cmp(log, stack_trace, value_b.clone()) + .map(|ord| matches!(ord, Ordering::Equal)) + .or_else(|_| value_a.eq(log, stack_trace, value_b))?, + ) .into()), BinaryExpressionOperation::Gt => Ok(values::Boolean(matches!( value_a.cmp(log, stack_trace, value_b)?, diff --git a/crates/interpreter/src/execution/standard_environment.rs b/crates/interpreter/src/execution/standard_environment.rs index 3f2a59e..2455552 100644 --- a/crates/interpreter/src/execution/standard_environment.rs +++ b/crates/interpreter/src/execution/standard_environment.rs @@ -1,5 +1,7 @@ use std::collections::HashMap; +use common_data_types::Dimension; + use crate::execution::values::ValueNone; use super::values::{Dictionary, Value, ValueType}; @@ -14,6 +16,22 @@ pub fn build_prelude() -> HashMap { fn build_std() -> Dictionary { let std = HashMap::from([ ("types".into(), build_types().into()), + ( + "scalar".into(), + build_dimension_types(|dimension| ValueType::Scalar(Some(dimension))).into(), + ), + ( + "vector2".into(), + build_dimension_types(|dimension| ValueType::Vector2(Some(dimension))).into(), + ), + ( + "vector3".into(), + build_dimension_types(|dimension| ValueType::Vector3(Some(dimension))).into(), + ), + ( + "vector4".into(), + build_dimension_types(|dimension| ValueType::Vector4(Some(dimension))).into(), + ), ("consts".into(), build_consts().into()), ]); Dictionary::from(std) @@ -34,18 +52,25 @@ fn build_types() -> Dictionary { ("SInt".into(), ValueType::SignedInteger.into()), ("UInt".into(), ValueType::UnsignedInteger.into()), ("ValueType".into(), ValueType::ValueType.into()), + ("Scaler".into(), ValueType::Scalar(None).into()), + ("Vector2".into(), ValueType::Vector2(None).into()), + ("Vector3".into(), ValueType::Vector3(None).into()), + ("Vector4".into(), ValueType::Vector4(None).into()), // TODO we'll need a function to build custom function signature types. // ("Function".into(), ValueType::Closure(Arc)), // TODO add a function to build custom unit types. ] - .into_iter() - .chain(build_dimension_types()), + .into_iter(), ); Dictionary::from(types) } -fn build_dimension_types() -> impl Iterator { - units::list_named_dimensions() - .map(|(name, dimension)| (name.into(), ValueType::Scalar(dimension).into())) +fn build_dimension_types(type_builder: impl Fn(Dimension) -> ValueType) -> Dictionary { + let types: HashMap = HashMap::from_iter( + units::list_named_dimensions() + .map(move |(name, dimension)| (name.into(), type_builder(dimension).into())), + ); + + Dictionary::from(types) } diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 36c58df..64d6b2e 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -202,6 +202,9 @@ fn find_all_variable_accesses_in_expression( } Expression::Boolean(_) | Expression::Scalar(_) + | Expression::Vector2(_) + | Expression::Vector3(_) + | Expression::Vector4(_) | Expression::SignedInteger(_) | Expression::String(_) | Expression::UnsignedInteger(_) @@ -339,7 +342,7 @@ macro_rules! build_member_from_sig { ($name:ident: $ty:ty) => { ( String::from(stringify!($name)), - crate::execution::values::value_type::StructMember { + $crate::execution::values::value_type::StructMember { ty: <$ty as crate::execution::values::StaticType>::static_type(), default: None, }, @@ -348,7 +351,7 @@ macro_rules! build_member_from_sig { ($name:ident: $ty:ty = $default:expr) => { ( String::from(stringify!($name)), - crate::execution::values::value_type::StructMember { + $crate::execution::values::value_type::StructMember { ty: <$ty as crate::execution::values::StaticType>::static_type(), default: Some($default), }, @@ -382,13 +385,14 @@ macro_rules! build_closure_signature { #[macro_export] macro_rules! build_closure_type { ($name:ident($($arg:ident: $ty:path $(= $default:expr)?),*) -> $return_type:path) => { - struct $name(pub UserClosure); + struct $name(pub $crate::execution::values::UserClosure); impl $crate::execution::values::StaticType for $name { fn static_type() -> $crate::execution::values::ValueType { - static TYPE: std::sync::OnceLock> - = std::sync::OnceLock::new(); - let signature = TYPE.get_or_init(|| build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type)); + static TYPE: std::sync::OnceLock< + std::sync::Arc, + > = std::sync::OnceLock::new(); + let signature = TYPE.get_or_init(|| $crate::build_closure_signature!(($($arg: $ty $(= $default)?),*) -> $return_type)); $crate::execution::values::ValueType::Closure(signature.clone()) } @@ -400,27 +404,26 @@ macro_rules! build_closure_type { } } - impl enum_downcast::IntoVariant<$name> for $crate::execution::values::Value { fn into_variant(self) -> Result<$name, $crate::execution::values::Value> { Ok($name(self.into_variant()?)) } } - impl Into for $name { - fn into(self) -> UserClosure { + impl Into<$crate::execution::values::UserClosure> for $name { + fn into(self) -> $crate::execution::values::UserClosure { self.0 } } impl std::ops::Deref for $name { - type Target = UserClosure; + type Target = $crate::execution::values::UserClosure; fn deref(&self) -> &Self::Target { &self.0 } } - } + }; } #[macro_export] @@ -475,29 +478,34 @@ macro_rules! build_function { #[macro_export] macro_rules! build_method { - ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $this:ident: $this_type:path $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ - struct BuiltFunction, &mut crate::execution::Stack, $this_type $(, $($ty),*)?) -> ExpressionResult> { + ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ + struct BuiltFunction, &mut crate::execution::Stack, S $(, $($ty),*)?) -> ExpressionResult> { function: F, signature: std::sync::Arc, + _self_type: std::marker::PhantomData } - impl, &mut crate::execution::Stack, $this_type $(, $($ty),*)?) -> ExpressionResult + Send + Sync> crate::execution::values::closure::Callable for BuiltFunction { + impl, &mut $crate::execution::Stack, S $(, $($ty),*)?) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync> $crate::execution::values::closure::Callable for BuiltFunction + where + S: Send + Sync + Clone + StaticTypeName, + $crate::execution::values::Value: enum_downcast::AsVariant + { fn call( &self, runtime: &mut dyn RuntimeLog, stack_trace: &mut Vec, - stack: &mut crate::execution::Stack, - argument: crate::execution::values::Dictionary, - ) -> crate::execution::errors::ExpressionResult { - use crate::execution::errors::Raise; + stack: &mut $crate::execution::Stack, + argument: $crate::execution::values::Dictionary, + ) -> $crate::execution::errors::ExpressionResult<$crate::execution::values::Value> { + use $crate::execution::errors::Raise; let this = stack.get_variable( stack_trace, - crate::execution::logging::LocatedStr { + $crate::execution::logging::LocatedStr { location: stack_trace.last().unwrap().clone(), string: "self", }, - )?.downcast_ref::<$this_type>(stack_trace)?.clone(); + )?.downcast_ref::(stack_trace)?.clone(); self.signature .argument_type @@ -518,16 +526,18 @@ macro_rules! build_method { stringify!($name) } - fn signature(&self) -> &std::sync::Arc { + fn signature(&self) -> &std::sync::Arc<$crate::execution::values::closure::Signature> { &self.signature } } - crate::execution::values::closure::BuiltinFunction { + $crate::execution::values::closure::BuiltinFunction { callable: std::sync::Arc::new(BuiltFunction { - function: move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut crate::execution::Stack, $this: $this_type $(, $($arg: $ty),*)?| -> ExpressionResult { $code }, - signature: $crate::build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type), - }) + function: + move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut $crate::execution::Stack, $this: $this_type $(, $($arg: $ty),*)?| -> $crate::execution::ExpressionResult { $code }, + signature: $crate::build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type), + _self_type: std::marker::PhantomData + }) } }}; } @@ -842,7 +852,7 @@ mod test { fn builtin_method() { let test_method = build_method!( test_method(log: &mut dyn RuntimeLog, stack_trace: &mut Vec, _stack: &mut Stack, this: Dictionary) -> ValueType::UnsignedInteger { - this.get_attribute(log, stack_trace, "value").cloned() + this.get_attribute(log, stack_trace, "value") } ); @@ -865,7 +875,7 @@ mod test { fn builtin_method_with_argument() { let test_method = build_method!( test_method(log: &mut dyn RuntimeLog, stack_trace: &mut Vec, _stack: &mut Stack, this: Dictionary, to_add: UnsignedInteger) -> ValueType::UnsignedInteger { - let value: &UnsignedInteger = this.get_attribute(log, stack_trace, "value")?.downcast_ref(stack_trace)?; + let value: UnsignedInteger = this.get_attribute(log, stack_trace, "value")?.downcast(stack_trace)?; Ok(values::UnsignedInteger::from(value.0 + to_add.0).into()) } diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index 555123a..849721c 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -62,9 +62,9 @@ impl Object for Dictionary { _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], attribute: &str, - ) -> ExpressionResult<&Value> { + ) -> ExpressionResult { if let Some(member) = self.data.members.get(attribute) { - Ok(member) + Ok(member.clone()) } else { Err(MissingAttributeError { name: attribute.into(), diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index a969461..e3438c4 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -41,6 +41,9 @@ pub use integer::{SignedInteger, UnsignedInteger}; mod scalar; pub use scalar::Scalar; +mod vector; +pub use vector::{Vector2, Vector3, Vector4}; + mod closure; pub use closure::{BuiltinFunction, UserClosure}; @@ -267,7 +270,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], attribute: &str, - ) -> ExpressionResult<&Value> { + ) -> ExpressionResult { Err(MissingAttributeError { name: attribute.into(), } @@ -344,9 +347,9 @@ pub enum Value { String(IString), // Range(Range), // Closure(Closure), - // Vector2(Vector2), - // Vector3(Vector3), - // Vector4(Vector4), + Vector2(Vector2), + Vector3(Vector3), + Vector4(Vector4), // Transform2D, // Transform3D, // Quaternion, diff --git a/crates/interpreter/src/execution/values/scalar.rs b/crates/interpreter/src/execution/values/scalar.rs index cb90764..0f68eea 100644 --- a/crates/interpreter/src/execution/values/scalar.rs +++ b/crates/interpreter/src/execution/values/scalar.rs @@ -24,6 +24,7 @@ use crate::{ execution::{ errors::{ExpressionResult, GenericFailure, Raise}, logging::RuntimeLog, + values::StaticType, }, }; @@ -52,7 +53,7 @@ pub struct Scalar { impl Object for Scalar { fn get_type(&self) -> ValueType { - ValueType::Scalar(self.dimension) + ValueType::Scalar(Some(self.dimension)) } fn type_name(&self) -> Cow<'static, str> { @@ -684,6 +685,12 @@ impl StaticTypeName for Scalar { } } +impl StaticType for Scalar { + fn static_type() -> ValueType { + ValueType::Scalar(None) + } +} + impl Scalar { fn multiply_by_scalar( &self, diff --git a/crates/interpreter/src/execution/values/string.rs b/crates/interpreter/src/execution/values/string.rs index c877c20..cfb0a3e 100644 --- a/crates/interpreter/src/execution/values/string.rs +++ b/crates/interpreter/src/execution/values/string.rs @@ -54,7 +54,7 @@ impl Object for IString { _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], attribute: &str, - ) -> ExpressionResult<&Value> { + ) -> ExpressionResult { build_closure_type!(MapClosure(character: IString) -> ValueType::Any); build_closure_type!(FoldClosure(previous: Value, character: IString) -> ValueType::Any); @@ -71,7 +71,7 @@ impl Object for IString { todo!() } ); - Ok(value) + Ok(value.clone()) } "fold" => { let value = static_method!( @@ -85,7 +85,7 @@ impl Object for IString { todo!() } ); - Ok(value) + Ok(value.clone()) } _ => Err(MissingAttributeError { name: attribute.into(), diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 1ba8378..7cb484c 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -43,12 +43,15 @@ pub enum ValueType { Boolean, SignedInteger, UnsignedInteger, - Scalar(Dimension), + Scalar(Option), Closure(Arc), Dictionary(StructDefinition), List(Option>), String, ValueType, + Vector2(Option), + Vector3(Option), + Vector4(Option), MultiType(Box, Box), Any, } @@ -66,7 +69,20 @@ impl ValueType { Self::Boolean => Boolean::static_type_name().into(), Self::SignedInteger => SignedInteger::static_type_name().into(), Self::UnsignedInteger => UnsignedInteger::static_type_name().into(), - Self::Scalar(dimension) => units::get_dimension_name(dimension).into(), + Self::Scalar(Some(dimension)) => units::get_dimension_name(dimension).into(), + Self::Scalar(Option::None) => "Scalar".into(), + Self::Vector2(Some(dimension)) => { + format!("Vector2<{}>", units::get_dimension_name(dimension)).into() + } + Self::Vector3(Some(dimension)) => { + format!("Vector3<{}>", units::get_dimension_name(dimension)).into() + } + Self::Vector4(Some(dimension)) => { + format!("Vector4<{}>", units::get_dimension_name(dimension)).into() + } + Self::Vector2(Option::None) => "Vector2".into(), + Self::Vector3(Option::None) => "Vector3".into(), + Self::Vector4(Option::None) => "Vector4".into(), Self::String => IString::static_type_name().into(), _ => format!("{}", self).into(), } @@ -90,7 +106,10 @@ impl ValueType { (Self::Boolean, Self::Boolean) => Ok(()), (Self::SignedInteger, Self::SignedInteger) => Ok(()), (Self::UnsignedInteger, Self::UnsignedInteger) => Ok(()), - (Self::Scalar(our_dimension), Self::Scalar(their_dimension)) => { + (Self::Scalar(Some(our_dimension)), Self::Scalar(Some(their_dimension))) + | (Self::Vector2(Some(our_dimension)), Self::Vector2(Some(their_dimension))) + | (Self::Vector3(Some(our_dimension)), Self::Vector3(Some(their_dimension))) + | (Self::Vector4(Some(our_dimension)), Self::Vector4(Some(their_dimension))) => { if our_dimension == their_dimension { Ok(()) } else { @@ -100,6 +119,10 @@ impl ValueType { }) } } + (Self::Scalar(Option::None), Self::Scalar(_)) => Ok(()), + (Self::Vector2(Option::None), Self::Vector2(_)) => Ok(()), + (Self::Vector3(Option::None), Self::Vector3(_)) => Ok(()), + (Self::Vector4(Option::None), Self::Vector4(_)) => Ok(()), (Self::Closure(our_signature), Self::Closure(their_signature)) => { our_signature .argument_type @@ -169,7 +192,7 @@ impl Object for ValueType { _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], attribute: &str, - ) -> ExpressionResult<&Value> { + ) -> ExpressionResult { match attribute { "qualify" => { let value = static_method!( @@ -184,7 +207,7 @@ impl Object for ValueType { Ok(values::ValueNone.into()) } ); - Ok(value) + Ok(value.clone()) } "try_qualify" => { let value = static_method!( @@ -198,7 +221,7 @@ impl Object for ValueType { Ok(values::Boolean(this.check_other_qualifies(&to_qualify.get_type()).is_ok()).into()) } ); - Ok(value) + Ok(value.clone()) } _ => Err(MissingAttributeError { name: attribute.into(), @@ -503,15 +526,76 @@ mod test { #[test] fn type_scalar() { - ValueType::Scalar(Dimension::length()) - .check_other_qualifies(&ValueType::Scalar(Dimension::length())) + ValueType::Scalar(Some(Dimension::length())) + .check_other_qualifies(&ValueType::Scalar(Some(Dimension::length()))) .unwrap(); - ValueType::Scalar(Dimension::length()) - .check_other_qualifies(&ValueType::Scalar(Dimension::area())) + ValueType::Scalar(None) + .check_other_qualifies(&ValueType::Scalar(Some(Dimension::length()))) + .unwrap(); + + ValueType::Scalar(Some(Dimension::length())) + .check_other_qualifies(&ValueType::Scalar(Some(Dimension::area()))) .unwrap_err(); - ValueType::Scalar(Dimension::length()) + ValueType::Scalar(Some(Dimension::length())) + .check_other_qualifies(&ValueType::TypeNone) + .unwrap_err(); + } + + #[test] + fn type_vector2() { + ValueType::Vector2(Some(Dimension::length())) + .check_other_qualifies(&ValueType::Vector2(Some(Dimension::length()))) + .unwrap(); + + ValueType::Vector2(None) + .check_other_qualifies(&ValueType::Vector2(Some(Dimension::length()))) + .unwrap(); + + ValueType::Vector2(Some(Dimension::length())) + .check_other_qualifies(&ValueType::Vector2(Some(Dimension::area()))) + .unwrap_err(); + + ValueType::Vector2(Some(Dimension::length())) + .check_other_qualifies(&ValueType::TypeNone) + .unwrap_err(); + } + + #[test] + fn type_vector3() { + ValueType::Vector3(Some(Dimension::length())) + .check_other_qualifies(&ValueType::Vector3(Some(Dimension::length()))) + .unwrap(); + + ValueType::Vector3(None) + .check_other_qualifies(&ValueType::Vector3(Some(Dimension::length()))) + .unwrap(); + + ValueType::Vector3(Some(Dimension::length())) + .check_other_qualifies(&ValueType::Vector3(Some(Dimension::area()))) + .unwrap_err(); + + ValueType::Vector3(Some(Dimension::length())) + .check_other_qualifies(&ValueType::TypeNone) + .unwrap_err(); + } + + #[test] + fn type_vector4() { + ValueType::Vector4(Some(Dimension::length())) + .check_other_qualifies(&ValueType::Vector4(Some(Dimension::length()))) + .unwrap(); + + ValueType::Vector4(None) + .check_other_qualifies(&ValueType::Vector4(Some(Dimension::length()))) + .unwrap(); + + ValueType::Vector4(Some(Dimension::length())) + .check_other_qualifies(&ValueType::Vector4(Some(Dimension::area()))) + .unwrap_err(); + + ValueType::Vector4(Some(Dimension::length())) .check_other_qualifies(&ValueType::TypeNone) .unwrap_err(); } @@ -554,6 +638,19 @@ mod test { .unwrap(); } + #[test] + fn type_dictionary_with_length() { + let structure = test_run("(a: std.scalar.Length)").unwrap(); + let structure = structure.as_valuetype().unwrap(); + + let dictionary = test_run("(a = 1m)").unwrap(); + let dictionary = dictionary.as_dictionary().unwrap(); + + structure + .check_other_qualifies(&dictionary.get_type()) + .unwrap(); + } + #[test] fn type_dictionary_with_extra_value() { let structure = test_run("(a: std.types.None)").unwrap(); @@ -663,7 +760,7 @@ mod test { .unwrap(); ValueType::Any - .check_other_qualifies(&ValueType::Scalar(Dimension::length())) + .check_other_qualifies(&ValueType::Scalar(Some(Dimension::length()))) .unwrap(); let closure = test_run("() -> std.types.None std.consts.None").unwrap(); diff --git a/crates/interpreter/src/execution/values/vector.rs b/crates/interpreter/src/execution/values/vector.rs new file mode 100644 index 0000000..4f28814 --- /dev/null +++ b/crates/interpreter/src/execution/values/vector.rs @@ -0,0 +1,1365 @@ +use common_data_types::Dimension; +use enum_downcast::{AsVariant, IntoVariant}; +use nalgebra::{Dim, RawStorage}; +use stack::ArrayVec; + +use crate::{ + build_closure_type, build_method, compile::{self, AstNode, SourceReference}, execute_expression, execution::{ + errors::{ExpressionResult, GenericFailure, Raise as _}, + logging::RuntimeLog, + stack::Stack, + values::{ + Dictionary, DowncastError, MissingAttributeError, Object, Scalar, StaticType, StaticTypeName, Value, ValueType, scalar::UnwrapNotNan + }, + } +}; + +use std::{ + hash::Hash, + ops::{Add, Div, Mul, Neg, Sub}, + collections::HashMap, +}; + +type Float = f64; + +pub type Vector2 = Vector>; +pub type Vector3 = Vector>; +pub type Vector4 = Vector>; + +#[derive(Debug, Hash, Clone, Copy, PartialEq)] +pub struct Vector { + dimension: Dimension, + value: I, +} + +impl Eq for Vector where I: PartialEq {} + +impl Object for Vector +where + I: VectorInternalType, + Self: StaticTypeName + Into, + Value: IntoVariant + AsVariant, +{ + fn get_type(&self) -> ValueType { + I::get_type(self.dimension) + } + + fn addition( + self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: Value, + ) -> ExpressionResult { + let rhs = self.unpack_same_dimension(stack_trace, rhs)?; + let value = self.value + rhs.value; + + Ok(Self::new_raw(stack_trace, self.dimension, value)?.into()) + } + fn subtraction( + self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: Value, + ) -> ExpressionResult { + let rhs = self.unpack_same_dimension(stack_trace, rhs)?; + let value = self.value - rhs.value; + + Ok(Self::new_raw(stack_trace, self.dimension, value)?.into()) + } + fn multiply( + self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: Value, + ) -> ExpressionResult { + let rhs = rhs.downcast_ref::(stack_trace)?; + let value = self.value * *rhs.value; + let dimension = self.dimension + rhs.dimension; + + Ok(Self::new_raw(stack_trace, dimension, value)?.into()) + } + fn divide( + self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: Value, + ) -> ExpressionResult { + let rhs = rhs.downcast_ref::(stack_trace)?; + let value = self.value / *rhs.value; + let dimension = self.dimension - rhs.dimension; + + Ok(Self::new_raw(stack_trace, dimension, value)?.into()) + } + fn unary_plus( + self, + _log: &mut dyn RuntimeLog, + _stack_trace: &[SourceReference], + ) -> ExpressionResult { + Ok(self.clone().into()) + } + fn unary_minus( + self, + _log: &mut dyn RuntimeLog, + _stack_trace: &[SourceReference], + ) -> ExpressionResult { + Ok(Self { + value: -self.value, + ..self.clone() + } + .into()) + } + + fn eq( + self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + rhs: Value, + ) -> ExpressionResult { + let rhs: Self = rhs.downcast(stack_trace)?; + Ok(self.dimension == rhs.dimension && self.value == rhs.value) + } + + fn get_attribute( + &self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + attribute: &str, + ) -> ExpressionResult { + if let Some(value) = + self.value + .get_attribute(log, stack_trace, attribute, self.dimension)? + { + Ok(value) + } else { + + const ANY_SCALAR: ValueType = ValueType::Scalar(None); + build_closure_type!(ApplyClosure(c: Scalar) -> ANY_SCALAR); + build_closure_type!(MapClosure(c: Scalar) -> ANY_SCALAR); + build_closure_type!(FoldClosure(previous: Scalar, c: Scalar) -> ANY_SCALAR); + + match attribute { + "abs" => Ok(build_method!( + Vector_abs( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Any + { + let value = this.value.abs(); + + Ok(Self { + dimension: this.dimension, + value + }.into()) + } + ) + .into()), + "add_scalar" => Ok(build_method!( + Vector_add_scalar( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self, + value: Scalar) -> ValueType::Any + { + if this.dimension == value.dimension { + let value = this.value.add_scalar(*value.value); + + Ok(Self { + dimension: this.dimension, + value + }.into()) + } else { + Err(DowncastError { + expected: this.type_name(), + got: value.type_name(), + } + .to_error(stack_trace.iter())) + } + } + ) + .into()), + "amax" => Ok(build_method!( + Vector_amax( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Any + { + let value = common_data_types::Float::new(this.value.amax()).unwrap_not_nan(stack_trace)?; + + Ok(Scalar { + dimension: this.dimension, + value + }.into()) + } + ) + .into()), + "amin" => Ok(build_method!( + Vector_amin( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Any + { + let value = common_data_types::Float::new(this.value.amin()).unwrap_not_nan(stack_trace)?; + + Ok(Scalar { + dimension: this.dimension, + value + }.into()) + } + ) + .into()), + "dot" => Ok(build_method!( + Vector_dot( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self, + rhs: Value) -> ValueType::TypeNone + { + let rhs = rhs.downcast::(stack_trace)?; + if this.dimension == rhs.dimension { + let value = common_data_types::Float::new(this.value.dot(&rhs.value)).unwrap_not_nan(stack_trace)?; + + Ok(Scalar { + dimension: this.dimension, + value + }.into()) + } else { + Err(DowncastError { + expected: this.type_name(), + got: rhs.type_name(), + } + .to_error(stack_trace.iter())) + } + } + ) + .into()), + "norm" | "length" => Ok(build_method!( + Vector_norm( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Any + { + let value = common_data_types::Float::new(this.value.norm()).unwrap_not_nan(stack_trace)?; + + Ok(Scalar { + dimension: this.dimension, + value + }.into()) + } + ) + .into()), + "normalize" => Ok(build_method!( + Vector_normalize( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Any + { + let value = this.value.normalize(); + Ok(Self::new_raw(stack_trace, Dimension::zero(), value)?.into()) + } + ) + .into()), + "angle" => Ok(build_method!( + Vector_angle( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self, + other: Value) -> ValueType::Any + { + let other = other.downcast::(stack_trace)?; + let value = common_data_types::Float::new(this.value.angle(&other.value)).unwrap_not_nan(stack_trace)?; + + Ok(Scalar { + dimension: Dimension::angle(), + value + }.into()) + } + ) + .into()), + "apply" => Ok(build_method!( + Vector_apply( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + this: Self, + f: ApplyClosure) -> ValueType::Any + { + let operations = self.value.iter().map(|c| f.call(log, stack_trace, stack, Dictionary::from(HashMap::from_iter([ + ( + "c".into(), + Scalar { + dimension: this.dimension, + value: common_data_types::Float::new(c).unwrap_not_nan(stack_trace)? + }.into() + ) + ])))); + + let result: ArrayVec<[Scalar; 4]> = operations.map(|v| v?.downcast::(stack_trace)).map(|r| r.unwrap()).collect(); + + // The smallest vector we support is 2, so this should never panic. + let dimension = result[0].dimension; + + + + Ok(Self::new_raw(stack_trace, dimension, I::from_iterator(result.iter().map(|c| *c.value)))?.into()) + } + ) + .into()), + + + // fn apply() // Apply a closure to each component + // fold + // map + _ => Err(MissingAttributeError { + name: attribute.into(), + } + .to_error(stack_trace)), + } + } + } +} + +impl Vector +where + I: VectorInternalType + std::fmt::Debug, + Self: StaticTypeName + Into, + Value: IntoVariant + AsVariant, +{ + pub fn new( + stack_trace: &[SourceReference], + dimension: Dimension, + value: I::BuildFrom, + ) -> ExpressionResult { + let value = I::build(value); + + Self::new_raw(stack_trace, dimension, value) + } + + pub fn from_ast( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + ast_node: &AstNode>, + ) -> ExpressionResult { + I::from_ast(log, stack_trace, stack, ast_node) + } + + fn new_raw( + stack_trace: &[SourceReference], + dimension: Dimension, + value: I, + ) -> ExpressionResult { + if !value.is_nan() { + Ok(Self { dimension, value }) + } else { + Err(GenericFailure("Result of arithmetic operation is NaN").to_error(stack_trace)) + } + } + + fn unpack_same_dimension( + self, + stack_trace: &[SourceReference], + rhs: Value, + ) -> ExpressionResult { + let rhs: Vector = rhs.downcast(stack_trace)?; + + if self.dimension == rhs.dimension { + Ok(rhs) + } else { + Err(DowncastError { + expected: self.type_name(), + got: rhs.type_name(), + } + .to_error(stack_trace)) + } + } +} + +impl StaticTypeName for Vector +where + I: StaticTypeName, +{ + fn static_type_name() -> &'static str { + I::static_type_name() + } +} + +impl StaticType for Vector +where + I: StaticType, +{ + fn static_type() -> ValueType { + I::static_type() + } +} + +pub trait VectorInternalType: + Add + + Div + + Mul + + Sub + + Copy + + PartialEq + + Neg + + StaticTypeName + + StaticType + + IsNan + + std::fmt::Debug + + Send + + Sync + + 'static +{ + type BuildFrom; + type NodeType; + + fn get_type(dimension: Dimension) -> ValueType; + fn build(value: Self::BuildFrom) -> Self; + fn from_ast( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + ast_node: &AstNode>, + ) -> ExpressionResult>; + fn from_iterator(iterator: I) -> Self + where + I: IntoIterator; + + fn get_attribute( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + attribute: &str, + dimension: Dimension, + ) -> ExpressionResult>; + + fn abs(&self) -> Self; + fn add_scalar(&self, value: Float) -> Self; + fn amax(&self) -> Float; + fn amin(&self) -> Float; + fn dot(&self, rhs: &Self) -> Float; + fn norm(&self) -> Float; + fn normalize(&self) -> Self; + fn angle(&self, other: &Self) -> Float; + fn iter(&self) -> impl Iterator; +} + +pub trait IsNan { + fn is_nan(&self) -> bool; +} + +impl IsNan for nalgebra::Matrix +where + R: Dim, + C: Dim, + S: RawStorage, +{ + fn is_nan(&self) -> bool { + self.iter().any(|&component| component.is_nan()) + } +} + +macro_rules! get_component { + ($log:ident, $stack_trace:ident, $stack:ident, $ast_node:ident, $c:ident) => { + execute_expression($log, $stack_trace, $stack, &$ast_node.node.$c)? + .downcast::($stack_trace)? + }; +} + +impl VectorInternalType for nalgebra::Vector2 { + type BuildFrom = [Float; 2]; + type NodeType = compile::Vector2; + + fn get_type(dimension: Dimension) -> ValueType { + ValueType::Vector2(Some(dimension)) + } + + fn build(value: Self::BuildFrom) -> Self { + Self::from_iterator(value.into_iter()) + } + + fn from_ast( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + ast_node: &AstNode>, + ) -> ExpressionResult> { + let x = get_component!(log, stack_trace, stack, ast_node, x); + let y = get_component!(log, stack_trace, stack, ast_node, y); + + if x.dimension == y.dimension { + Ok(Vector { + dimension: x.dimension, + value: Self::new(*x.value, *y.value), + }) + } else { + Err(GenericFailure("All components of a vector must match") + .to_error(stack_trace.iter())) + } + } + + fn from_iterator(iterator: I) -> Self + where + I: IntoIterator { + Self::from_iterator(iterator) + } + + fn get_attribute( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + attribute: &str, + dimension: Dimension, + ) -> ExpressionResult> { + match attribute { + "x" => Ok(Some( + Scalar { + dimension, + value: common_data_types::Float::new(self.x).unwrap_not_nan(stack_trace)?, + } + .into(), + )), + "y" => Ok(Some( + Scalar { + dimension, + value: common_data_types::Float::new(self.y).unwrap_not_nan(stack_trace)?, + } + .into(), + )), + _ => Ok(None), + } + } + + fn abs(&self) -> Self { + nalgebra::Vector2::abs(self) + } + + fn add_scalar(&self, value: Float) -> Self { + nalgebra::Vector2::add_scalar(self, value) + } + + fn amax(&self) -> Float { + nalgebra::Vector2::amax(self) + } + + fn amin(&self) -> Float { + nalgebra::Vector2::amin(self) + } + + fn dot(&self, rhs: &Self) -> Float { + nalgebra::Vector2::dot(self, rhs) + } + + fn norm(&self) -> Float { + nalgebra::Vector2::norm(self) + } + + fn normalize(&self) -> Self { + nalgebra::Vector2::normalize(self) + } + + fn angle(&self, other: &Self) -> Float { + nalgebra::Vector2::angle(self, other) + } + + fn iter(&self) -> impl Iterator { + self.iter().copied() + } +} +impl StaticTypeName for nalgebra::Vector2 { + fn static_type_name() -> &'static str { + "Vector2" + } +} + +impl StaticType for nalgebra::Vector2 { + fn static_type() -> ValueType { + ValueType::Vector2(None) + } +} + +impl VectorInternalType for nalgebra::Vector3 { + type BuildFrom = [Float; 3]; + type NodeType = compile::Vector3; + + fn get_type(dimension: Dimension) -> ValueType { + ValueType::Vector3(Some(dimension)) + } + + fn build(value: Self::BuildFrom) -> Self { + Self::from_iterator(value.into_iter()) + } + + fn from_ast( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + ast_node: &AstNode>, + ) -> ExpressionResult> { + let x = get_component!(log, stack_trace, stack, ast_node, x); + let y = get_component!(log, stack_trace, stack, ast_node, y); + let z = get_component!(log, stack_trace, stack, ast_node, z); + + if x.dimension == y.dimension && x.dimension == z.dimension { + Ok(Vector { + dimension: x.dimension, + value: Self::new(*x.value, *y.value, *z.value), + }) + } else { + Err(GenericFailure("All components of a vector must match") + .to_error(stack_trace.iter())) + } + } + + fn from_iterator(iterator: I) -> Self + where + I: IntoIterator { + Self::from_iterator(iterator) + } + + fn get_attribute( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + attribute: &str, + dimension: Dimension, + ) -> ExpressionResult> { + match attribute { + "x" => Ok(Some( + Scalar { + dimension, + value: common_data_types::Float::new(self.x).unwrap_not_nan(stack_trace)?, + } + .into(), + )), + "y" => Ok(Some( + Scalar { + dimension, + value: common_data_types::Float::new(self.y).unwrap_not_nan(stack_trace)?, + } + .into(), + )), + "z" => Ok(Some( + Scalar { + dimension, + value: common_data_types::Float::new(self.z).unwrap_not_nan(stack_trace)?, + } + .into(), + )), + "cross" => { + let vector_type = ValueType::Vector3(Some(dimension)); + + Ok(Some( + build_method!( + Vector_normalize( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Vector3, + rhs: Vector3) -> vector_type + { + if this.dimension == rhs.dimension { + let value = this.value.cross(&rhs.value); + Ok(Vector3::new_raw(stack_trace, this.dimension, value)?.into()) + } else { + Err(DowncastError { + expected: this.type_name(), + got: rhs.type_name(), + } + .to_error(stack_trace.iter())) + } + } + ) + .into(), + )) + } + _ => Ok(None), + } + } + + fn abs(&self) -> Self { + nalgebra::Vector3::abs(self) + } + + fn add_scalar(&self, value: Float) -> Self { + nalgebra::Vector3::add_scalar(self, value) + } + + fn amax(&self) -> Float { + nalgebra::Vector3::amax(self) + } + + fn amin(&self) -> Float { + nalgebra::Vector3::amin(self) + } + + fn dot(&self, rhs: &Self) -> Float { + nalgebra::Vector3::dot(self, rhs) + } + + fn norm(&self) -> Float { + nalgebra::Vector3::norm(self) + } + + fn normalize(&self) -> Self { + nalgebra::Vector3::normalize(self) + } + + fn angle(&self, other: &Self) -> Float { + nalgebra::Vector3::angle(self, other) + } + + fn iter(&self) -> impl Iterator { + self.iter().copied() + } +} +impl StaticTypeName for nalgebra::Vector3 { + fn static_type_name() -> &'static str { + "Vector3" + } +} + +impl StaticType for nalgebra::Vector3 { + fn static_type() -> ValueType { + ValueType::Vector3(None) + } +} + +impl VectorInternalType for nalgebra::Vector4 { + type BuildFrom = [Float; 4]; + type NodeType = compile::Vector4; + + fn get_type(dimension: Dimension) -> ValueType { + ValueType::Vector4(Some(dimension)) + } + + fn build(value: Self::BuildFrom) -> Self { + Self::from_iterator(value.into_iter()) + } + + fn from_ast( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + ast_node: &AstNode>, + ) -> ExpressionResult> { + let x = get_component!(log, stack_trace, stack, ast_node, x); + let y = get_component!(log, stack_trace, stack, ast_node, y); + let z = get_component!(log, stack_trace, stack, ast_node, z); + let w = get_component!(log, stack_trace, stack, ast_node, w); + + if x.dimension == y.dimension && x.dimension == z.dimension && x.dimension == w.dimension { + Ok(Vector { + dimension: w.dimension, + value: Self::new(*x.value, *y.value, *z.value, *w.value), + }) + } else { + Err(GenericFailure("All components of a vector must match") + .to_error(stack_trace.iter())) + } + } + + fn from_iterator(iterator: I) -> Self + where + I: IntoIterator { + Self::from_iterator(iterator) + } + + fn get_attribute( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + attribute: &str, + dimension: Dimension, + ) -> ExpressionResult> { + match attribute { + "x" => Ok(Some( + Scalar { + dimension, + value: common_data_types::Float::new(self.x).unwrap_not_nan(stack_trace)?, + } + .into(), + )), + "y" => Ok(Some( + Scalar { + dimension, + value: common_data_types::Float::new(self.y).unwrap_not_nan(stack_trace)?, + } + .into(), + )), + "z" => Ok(Some( + Scalar { + dimension, + value: common_data_types::Float::new(self.z).unwrap_not_nan(stack_trace)?, + } + .into(), + )), + "w" => Ok(Some( + Scalar { + dimension, + value: common_data_types::Float::new(self.w).unwrap_not_nan(stack_trace)?, + } + .into(), + )), + _ => Ok(None), + } + } + + fn abs(&self) -> Self { + nalgebra::Vector4::abs(self) + } + + fn add_scalar(&self, value: Float) -> Self { + nalgebra::Vector4::add_scalar(self, value) + } + + fn amax(&self) -> Float { + nalgebra::Vector4::amax(self) + } + fn amin(&self) -> Float { + nalgebra::Vector4::amin(self) + } + + fn dot(&self, rhs: &Self) -> Float { + nalgebra::Vector4::dot(self, rhs) + } + + fn norm(&self) -> Float { + nalgebra::Vector4::norm(self) + } + + fn normalize(&self) -> Self { + nalgebra::Vector4::normalize(self) + } + + fn angle(&self, other: &Self) -> Float { + nalgebra::Vector4::angle(self, other) + } + + fn iter(&self) -> impl Iterator { + self.iter().copied() + } +} +impl StaticTypeName for nalgebra::Vector4 { + fn static_type_name() -> &'static str { + "Vector4" + } +} + +impl StaticType for nalgebra::Vector4 { + fn static_type() -> ValueType { + ValueType::Vector4(None) + } +} + +#[cfg(test)] +mod test { + use crate::execution::{test_run, values::Boolean}; + use pretty_assertions::assert_eq; + + use super::*; + + #[test] + fn construct_vector2() { + let product = test_run("<(1m, 2m)>").unwrap(); + assert_eq!( + product, + Vector2::new(&[], Dimension::length(), [1.0, 2.0]) + .unwrap() + .into() + ); + + let product = test_run("<(-1m, -2m)>").unwrap(); + assert_eq!( + product, + Vector2::new(&[], Dimension::length(), [-1.0, -2.0]) + .unwrap() + .into() + ); + } + + #[test] + fn construct_vector3() { + let product = test_run("<(1m, 2m, 3m)>").unwrap(); + assert_eq!( + product, + Vector3::new(&[], Dimension::length(), [1.0, 2.0, 3.0]) + .unwrap() + .into() + ); + + let product = test_run("<(-1m, -2m, -3m)>").unwrap(); + assert_eq!( + product, + Vector3::new(&[], Dimension::length(), [-1.0, -2.0, -3.0]) + .unwrap() + .into() + ); + } + + #[test] + fn construct_vector4() { + let product = test_run("<(1m, 2m, 3m, 4m)>").unwrap(); + assert_eq!( + product, + Vector4::new(&[], Dimension::length(), [1.0, 2.0, 3.0, 4.0]) + .unwrap() + .into() + ); + + let product = test_run("<(-1m, -2m, -3m, -4m)>").unwrap(); + assert_eq!( + product, + Vector4::new(&[], Dimension::length(), [-1.0, -2.0, -3.0, -4.0]) + .unwrap() + .into() + ); + } + + #[test] + fn missmatched_dimensions_vector2() { + test_run("<(1deg, 2m)>").unwrap_err(); + test_run("<(1m, 2deg)>").unwrap_err(); + } + + #[test] + fn missmatched_dimensions_vector3() { + test_run("<(1deg, 2m, 3m)>").unwrap_err(); + test_run("<(1m, 2deg, 3m)>").unwrap_err(); + test_run("<(1m, 2m, 3deg)>").unwrap_err(); + } + + #[test] + fn missmatched_dimensions_vector4() { + test_run("<(1deg, 2m, 3m, 4m)>").unwrap_err(); + test_run("<(1m, 2deg, 3m, 4m)>").unwrap_err(); + test_run("<(1m, 2m, 3deg, 4m)>").unwrap_err(); + test_run("<(1m, 2m, 3m, 4deg)>").unwrap_err(); + } + + #[test] + fn construccomponent_access_vector2() { + let product = test_run("let vec = <(1m, 2m)>; in vec.x").unwrap(); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(1.0).unwrap() + } + .into() + ); + + let product = test_run("let vec = <(1m, 2m)>; in vec.y").unwrap(); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(2.0).unwrap() + } + .into() + ); + } + + #[test] + fn construccomponent_access_vector3() { + let product = test_run("let vec = <(1m, 2m, 3m)>; in vec.x").unwrap(); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(1.0).unwrap() + } + .into() + ); + + let product = test_run("let vec = <(1m, 2m, 3m)>; in vec.y").unwrap(); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(2.0).unwrap() + } + .into() + ); + + let product = test_run("let vec = <(1m, 2m, 3m)>; in vec.z").unwrap(); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(3.0).unwrap() + } + .into() + ); + } + + #[test] + fn construccomponent_access_vector4() { + let product = test_run("let vec = <(1m, 2m, 3m, 4m)>; in vec.x").unwrap(); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(1.0).unwrap() + } + .into() + ); + + let product = test_run("let vec = <(1m, 2m, 3m, 4m)>; in vec.y").unwrap(); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(2.0).unwrap() + } + .into() + ); + + let product = test_run("let vec = <(1m, 2m, 3m, 4m)>; in vec.z").unwrap(); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(3.0).unwrap() + } + .into() + ); + + let product = test_run("let vec = <(1m, 2m, 3m, 4m)>; in vec.w").unwrap(); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(4.0).unwrap() + } + .into() + ); + } + + #[test] + fn compare_vector2() { + let product = test_run("<(1m, 2m)> == <(1m, 2m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("<(1m, 2m)> != <(1m, 2m)>").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("<(2m, 2m)> == <(1m, 2m)>").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("<(2m, 2m)> != <(1m, 2m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn compare_vector3() { + let product = test_run("<(1m, 2m, 3m)> == <(1m, 2m, 3m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("<(1m, 2m, 3m)> != <(1m, 2m, 3m)>").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("<(2m, 2m, 3m)> == <(1m, 2m, 3m)>").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("<(2m, 2m, 3m)> != <(1m, 2m, 3m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn compare_vector4() { + let product = test_run("<(1m, 2m, 3m, 4m)> == <(1m, 2m, 3m, 4m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("<(1m, 2m, 3m, 4m)> != <(1m, 2m, 3m, 4m)>").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("<(2m, 2m, 3m, 4m)> == <(1m, 2m, 3m, 4m)>").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("<(2m, 2m, 3m, 4m)> != <(1m, 2m, 3m, 4m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn add_vector2() { + let product = test_run("<(1m, 2m)> + <(2m, 3m)> == <(3m, 5m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn add_vector3() { + let product = test_run("<(1m, 2m, 3m)> + <(2m, 3m, 4m)> == <(3m, 5m, 7m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn add_vector4() { + let product = + test_run("<(1m, 2m, 3m, 4m)> + <(2m, 3m, 4m, 5m)> == <(3m, 5m, 7m, 9m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn sub_vector2() { + let product = test_run("<(1m, 2m)> - <(2m, 3m)> == <(-1m, -1m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn sub_vector3() { + let product = test_run("<(1m, 2m, 3m)> - <(2m, 3m, 4m)> == <(-1m, -1m, -1m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn sub_vector4() { + let product = + test_run("<(1m, 2m, 3m, 4m)> - <(2m, 3m, 4m, 5m)> == <(-1m, -1m, -1m, -1m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn multiply_vector2() { + let product = test_run("<(1m, 2m)> * 2.0 == <(2m, 4m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn multiply_vector3() { + let product = test_run("<(1m, 2m, 3m)> * 2.0 == <(2m, 4m, 6m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn multiply_vector4() { + let product = test_run("<(1m, 2m, 3m, 4m)> * 2.0 == <(2m, 4m, 6m, 8m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn divide_vector2() { + let product = test_run("<(2m, 4m)> / 2.0 == <(1m, 2m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn divide_vector3() { + let product = test_run("<(2m, 4m, 6m)> / 2.0 == <(1m, 2m, 3m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn divide_vector4() { + let product = test_run("<(2m, 4m, 6m, 8m)> / 2.0 == <(1m, 2m, 3m, 4m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn abs_vector2() { + let product = test_run("<(-1m, -2m)>:abs() == <(1m, 2m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn abs_vector3() { + let product = test_run("<(-1m, -2m, -3m)>:abs() == <(1m, 2m, 3m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn abs_vector4() { + let product = test_run("<(-1m, -2m, -3m, -4m)>:abs() == <(1m, 2m, 3m, 4m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn add_scalar_vector2() { + let product = test_run("<(1m, 2m)>:add_scalar(value = 1m) == <(2m, 3m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn add_scalar_vector3() { + let product = test_run("<(1m, 2m, 3m)>:add_scalar(value = 1m) == <(2m, 3m, 4m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn add_scalar_vector4() { + let product = + test_run("<(1m, 2m, 3m, 4m)>:add_scalar(value = 1m) == <(2m, 3m, 4m, 5m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn amax_vector2() { + let product = test_run("<(1m, 2m)>:amax() == 2m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn amax_vector3() { + let product = test_run("<(1m, 2m, 3m)>:amax() == 3m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn amax_vector4() { + let product = test_run("<(1m, 2m, 3m, 4m)>:amax() == 4m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn dot_vector2() { + let product = test_run("<(1m, 0m)>:dot(rhs = <(0.5m, 10m)>) == 0.5m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn dot_vector3() { + let product = test_run("<(1m, 0m, 0m)>:dot(rhs = <(0.5m, 10m, 10m)>) == 0.5m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn dot_vector4() { + let product = + test_run("<(1m, 0m, 0m, 0m)>:dot(rhs = <(0.5m, 10m, 10m, 10m)>) == 0.5m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn norm_vector2() { + let product = test_run("<(1m, 0m)>:norm() == 1m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn norm_vector3() { + let product = test_run("<(1m, 0m, 0m)>:norm() == 1m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn norm_vector4() { + let product = test_run("<(1m, 0m, 0m, 0m)>:norm() == 1m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn length_vector2() { + let product = test_run("<(1m, 0m)>:length() == 1m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn length_vector3() { + let product = test_run("<(1m, 0m, 0m)>:length() == 1m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn length_vector4() { + let product = test_run("<(1m, 0m, 0m, 0m)>:length() == 1m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn normalize_vector2() { + let product = test_run("<(5m, 0m)>:normalize() == <(1, 0)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn normalize_vector3() { + let product = test_run("<(5m, 0m, 0m)>:normalize() == <(1, 0, 0)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn normalize_vector4() { + let product = test_run("<(5m, 0m, 0m, 0m)>:normalize() == <(1, 0, 0, 0)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn normalize_zero_vector2() { + test_run("<(0m, 0m)>:normalize()").unwrap_err(); + } + + #[test] + fn normalize_zero_vector3() { + test_run("<(0m, 0m, 0m)>:normalize()").unwrap_err(); + } + + #[test] + fn normalize_zero_vector4() { + test_run("<(0m, 0m, 0m, 0m)>:normalize()").unwrap_err(); + } + + #[test] + fn cross_vector3() { + let product = + test_run("<(1m, 0m, 0m)>:cross(rhs = <(0m, 1m, 0m)>) == <(0m, 0m, 1m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn angle_vector2() { + let product = test_run("<(1m, 0m)>:angle(other = <(0m, 1m)>) - 90deg < 0.001deg").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn angle_vector3() { + let product = test_run("<(1m, 0m, 0m)>:angle(other = <(0m, 1m, 0m)>) - 90deg < 0.001deg").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn angle_vector4() { + let product = + test_run("<(1m, 0m, 0m, 0m)>:angle(other = <(0m, 1m, 0m, 0m)>) - 90deg < 0.001deg").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn apply_vector2() { + let product = test_run("<(0m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("<(0m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c * 1m) == <(0m^2, 1m^2)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + + test_run("<(0m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length if c == 0m 1m else 1m^2)").unwrap_err(); + } + + #[test] + fn apply_vector3() { + let product = test_run("<(0m, 1m, 2m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m, 3m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("<(0m, 1m, 2m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c * 1m) == <(0m^2, 1m^2, 2m^2)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + + test_run("<(0m, 1m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length if c == 0m 1m else 1m^2)").unwrap_err(); + } + + #[test] + fn apply_vector4() { + let product = test_run("<(0m, 1m, 2m, 3m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m, 3m, 4m)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("<(0m, 1m, 2m, 3m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c * 1m) == <(0m^2, 1m^2, 2m^2, 3m^2)>").unwrap(); + assert_eq!(product, Boolean(true).into()); + + test_run("<(0m, 1m, 1m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length if c == 0m 1m else 1m^2)").unwrap_err(); + } +} diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 598e9d5..09e1546 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -120,6 +120,9 @@ module.exports = grammar({ _unit: $ => choice($.identifier, $.unit_quote), scalar: $ => prec.left(PREC.unit, seq($._float, field('unit', optional($._unit)))), + vector2: $ => seq('<(', field('x', $.expression), ',', field('y', $.expression), ')>'), + vector3: $ => seq('<(', field('x', $.expression), ',', field('y', $.expression), ',', field('z', $.expression), ')>'), + vector4: $ => seq('<(', field('x', $.expression), ',', field('y', $.expression), ',', field('z', $.expression), ',', field('w', $.expression), ')>'), true: $ => 'true', false: $ => 'false', @@ -142,6 +145,9 @@ module.exports = grammar({ $.signed_integer, $.unsigned_integer, $.scalar, + $.vector2, + $.vector3, + $.vector4, $.boolean, $.string, $.identity_path, diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 313fce8..c2b8dab 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -245,6 +245,141 @@ ] } }, + "vector2": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "<(" + }, + { + "type": "FIELD", + "name": "x", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "y", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": ")>" + } + ] + }, + "vector3": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "<(" + }, + { + "type": "FIELD", + "name": "x", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "y", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "z", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": ")>" + } + ] + }, + "vector4": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "<(" + }, + { + "type": "FIELD", + "name": "x", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "y", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "z", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "w", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { + "type": "STRING", + "value": ")>" + } + ] + }, "true": { "type": "STRING", "value": "true" @@ -357,6 +492,18 @@ "type": "SYMBOL", "name": "scalar" }, + { + "type": "SYMBOL", + "name": "vector2" + }, + { + "type": "SYMBOL", + "name": "vector3" + }, + { + "type": "SYMBOL", + "name": "vector4" + }, { "type": "SYMBOL", "name": "boolean" diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 0ae95a8..e43b234 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -328,6 +328,18 @@ { "type": "unsigned_integer", "named": true + }, + { + "type": "vector2", + "named": true + }, + { + "type": "vector3", + "named": true + }, + { + "type": "vector4", + "named": true } ] } @@ -983,6 +995,114 @@ } } }, + { + "type": "vector2", + "named": true, + "fields": { + "x": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "y": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "vector3", + "named": true, + "fields": { + "x": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "y": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "z": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, + { + "type": "vector4", + "named": true, + "fields": { + "w": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "x": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "y": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "z": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + } + }, { "type": "!", "named": false @@ -1007,6 +1127,10 @@ "type": ")", "named": false }, + { + "type": ")>", + "named": false + }, { "type": "*", "named": false @@ -1063,6 +1187,10 @@ "type": "<", "named": false }, + { + "type": "<(", + "named": false + }, { "type": "<<", "named": false diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 292f2a0..4feac46 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -7,16 +7,16 @@ #endif #define LANGUAGE_VERSION 15 -#define STATE_COUNT 265 -#define LARGE_STATE_COUNT 7 -#define SYMBOL_COUNT 99 +#define STATE_COUNT 394 +#define LARGE_STATE_COUNT 9 +#define SYMBOL_COUNT 104 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 56 +#define TOKEN_COUNT 58 #define EXTERNAL_TOKEN_COUNT 0 -#define FIELD_COUNT 26 -#define MAX_ALIAS_SEQUENCE_LENGTH 5 +#define FIELD_COUNT 30 +#define MAX_ALIAS_SEQUENCE_LENGTH 9 #define MAX_RESERVED_WORD_SET_SIZE 0 -#define PRODUCTION_ID_COUNT 28 +#define PRODUCTION_ID_COUNT 31 #define SUPERTYPE_COUNT 0 enum ts_symbol_identifiers { @@ -35,89 +35,94 @@ enum ts_symbol_identifiers { aux_sym_unsigned_integer_token1 = 13, sym_unit_quote = 14, anon_sym_DOT = 15, - sym_true = 16, - sym_false = 17, - anon_sym_COLON = 18, - anon_sym_DASH = 19, - anon_sym_PLUS = 20, - anon_sym_BANG = 21, - anon_sym_STAR_STAR = 22, - anon_sym_STAR = 23, - anon_sym_SLASH = 24, - anon_sym_SLASH_SLASH = 25, - anon_sym_LT_LT = 26, - anon_sym_GT_GT = 27, - anon_sym_AMP = 28, - anon_sym_PIPE = 29, - anon_sym_CARET = 30, - anon_sym_GT = 31, - anon_sym_GT_EQ = 32, - anon_sym_EQ_EQ = 33, - anon_sym_LT_EQ = 34, - anon_sym_LT = 35, - anon_sym_BANG_EQ = 36, - anon_sym_AMP_AMP = 37, - anon_sym_PIPE_PIPE = 38, - anon_sym_DOT_DOT = 39, - anon_sym_DOT_DOT_EQ = 40, - anon_sym_if = 41, - anon_sym_else = 42, - anon_sym_let = 43, - anon_sym_in = 44, - anon_sym_EQ = 45, - anon_sym_SEMI = 46, - anon_sym_LPAREN = 47, - anon_sym_RPAREN = 48, - anon_sym_LBRACK = 49, - anon_sym_COMMA = 50, - anon_sym_RBRACK = 51, - sym_varadic_dots = 52, - anon_sym_DASH_GT = 53, - anon_sym_LT_LT_LT = 54, - anon_sym_GT_GT_GT = 55, - sym_source_file = 56, - sym_base_ten = 57, - sym_octal = 58, - sym_hex = 59, - sym_binary = 60, - sym_integer = 61, - sym_signed_integer = 62, - sym_unsigned_integer = 63, - sym_number = 64, - sym__float = 65, - sym__unit = 66, - sym_scalar = 67, - sym_boolean = 68, - sym_function_call = 69, - sym_method_call = 70, - sym_expression = 71, - sym_unary_expression = 72, - sym_binary_expression = 73, - sym_if = 74, - sym_let_in = 75, - sym_let_in_assignment = 76, - sym_identity_path = 77, - sym_self_path = 78, - sym_declaration_type = 79, - sym_parenthesis = 80, - sym_list = 81, - sym_struct_member = 82, - sym__struct_final_element = 83, - sym_struct_definition = 84, - sym_dictionary_member_assignment = 85, - sym_dictionary_construction = 86, - sym_closure_definition = 87, - sym_formula = 88, - sym_formula_expression = 89, - sym_formula_parenthesis = 90, - sym_formula_unary_expression = 91, - sym_formula_binary_expression = 92, - aux_sym_let_in_repeat1 = 93, - aux_sym_identity_path_repeat1 = 94, - aux_sym_self_path_repeat1 = 95, - aux_sym_list_repeat1 = 96, - aux_sym_struct_definition_repeat1 = 97, - aux_sym_dictionary_construction_repeat1 = 98, + anon_sym_LT_LPAREN = 16, + anon_sym_COMMA = 17, + anon_sym_RPAREN_GT = 18, + sym_true = 19, + sym_false = 20, + anon_sym_COLON = 21, + anon_sym_DASH = 22, + anon_sym_PLUS = 23, + anon_sym_BANG = 24, + anon_sym_STAR_STAR = 25, + anon_sym_STAR = 26, + anon_sym_SLASH = 27, + anon_sym_SLASH_SLASH = 28, + anon_sym_LT_LT = 29, + anon_sym_GT_GT = 30, + anon_sym_AMP = 31, + anon_sym_PIPE = 32, + anon_sym_CARET = 33, + anon_sym_GT = 34, + anon_sym_GT_EQ = 35, + anon_sym_EQ_EQ = 36, + anon_sym_LT_EQ = 37, + anon_sym_LT = 38, + anon_sym_BANG_EQ = 39, + anon_sym_AMP_AMP = 40, + anon_sym_PIPE_PIPE = 41, + anon_sym_DOT_DOT = 42, + anon_sym_DOT_DOT_EQ = 43, + anon_sym_if = 44, + anon_sym_else = 45, + anon_sym_let = 46, + anon_sym_in = 47, + anon_sym_EQ = 48, + anon_sym_SEMI = 49, + anon_sym_LPAREN = 50, + anon_sym_RPAREN = 51, + anon_sym_LBRACK = 52, + anon_sym_RBRACK = 53, + sym_varadic_dots = 54, + anon_sym_DASH_GT = 55, + anon_sym_LT_LT_LT = 56, + anon_sym_GT_GT_GT = 57, + sym_source_file = 58, + sym_base_ten = 59, + sym_octal = 60, + sym_hex = 61, + sym_binary = 62, + sym_integer = 63, + sym_signed_integer = 64, + sym_unsigned_integer = 65, + sym_number = 66, + sym__float = 67, + sym__unit = 68, + sym_scalar = 69, + sym_vector2 = 70, + sym_vector3 = 71, + sym_vector4 = 72, + sym_boolean = 73, + sym_function_call = 74, + sym_method_call = 75, + sym_expression = 76, + sym_unary_expression = 77, + sym_binary_expression = 78, + sym_if = 79, + sym_let_in = 80, + sym_let_in_assignment = 81, + sym_identity_path = 82, + sym_self_path = 83, + sym_declaration_type = 84, + sym_parenthesis = 85, + sym_list = 86, + sym_struct_member = 87, + sym__struct_final_element = 88, + sym_struct_definition = 89, + sym_dictionary_member_assignment = 90, + sym_dictionary_construction = 91, + sym_closure_definition = 92, + sym_formula = 93, + sym_formula_expression = 94, + sym_formula_parenthesis = 95, + sym_formula_unary_expression = 96, + sym_formula_binary_expression = 97, + aux_sym_let_in_repeat1 = 98, + aux_sym_identity_path_repeat1 = 99, + aux_sym_self_path_repeat1 = 100, + aux_sym_list_repeat1 = 101, + aux_sym_struct_definition_repeat1 = 102, + aux_sym_dictionary_construction_repeat1 = 103, }; static const char * const ts_symbol_names[] = { @@ -137,6 +142,9 @@ static const char * const ts_symbol_names[] = { [aux_sym_unsigned_integer_token1] = "unsigned_integer_token1", [sym_unit_quote] = "unit_quote", [anon_sym_DOT] = ".", + [anon_sym_LT_LPAREN] = "<(", + [anon_sym_COMMA] = ",", + [anon_sym_RPAREN_GT] = ")>", [sym_true] = "true", [sym_false] = "false", [anon_sym_COLON] = ":", @@ -171,7 +179,6 @@ static const char * const ts_symbol_names[] = { [anon_sym_LPAREN] = "(", [anon_sym_RPAREN] = ")", [anon_sym_LBRACK] = "[", - [anon_sym_COMMA] = ",", [anon_sym_RBRACK] = "]", [sym_varadic_dots] = "varadic_dots", [anon_sym_DASH_GT] = "->", @@ -189,6 +196,9 @@ static const char * const ts_symbol_names[] = { [sym__float] = "_float", [sym__unit] = "_unit", [sym_scalar] = "scalar", + [sym_vector2] = "vector2", + [sym_vector3] = "vector3", + [sym_vector4] = "vector4", [sym_boolean] = "boolean", [sym_function_call] = "function_call", [sym_method_call] = "method_call", @@ -239,6 +249,9 @@ static const TSSymbol ts_symbol_map[] = { [aux_sym_unsigned_integer_token1] = aux_sym_unsigned_integer_token1, [sym_unit_quote] = sym_unit_quote, [anon_sym_DOT] = anon_sym_DOT, + [anon_sym_LT_LPAREN] = anon_sym_LT_LPAREN, + [anon_sym_COMMA] = anon_sym_COMMA, + [anon_sym_RPAREN_GT] = anon_sym_RPAREN_GT, [sym_true] = sym_true, [sym_false] = sym_false, [anon_sym_COLON] = anon_sym_COLON, @@ -273,7 +286,6 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_LPAREN] = anon_sym_LPAREN, [anon_sym_RPAREN] = anon_sym_RPAREN, [anon_sym_LBRACK] = anon_sym_LBRACK, - [anon_sym_COMMA] = anon_sym_COMMA, [anon_sym_RBRACK] = anon_sym_RBRACK, [sym_varadic_dots] = sym_varadic_dots, [anon_sym_DASH_GT] = anon_sym_DASH_GT, @@ -291,6 +303,9 @@ static const TSSymbol ts_symbol_map[] = { [sym__float] = sym__float, [sym__unit] = sym__unit, [sym_scalar] = sym_scalar, + [sym_vector2] = sym_vector2, + [sym_vector3] = sym_vector3, + [sym_vector4] = sym_vector4, [sym_boolean] = sym_boolean, [sym_function_call] = sym_function_call, [sym_method_call] = sym_method_call, @@ -389,6 +404,18 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, + [anon_sym_LT_LPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_COMMA] = { + .visible = true, + .named = false, + }, + [anon_sym_RPAREN_GT] = { + .visible = true, + .named = false, + }, [sym_true] = { .visible = true, .named = true, @@ -525,10 +552,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, - [anon_sym_COMMA] = { - .visible = true, - .named = false, - }, [anon_sym_RBRACK] = { .visible = true, .named = false, @@ -597,6 +620,18 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym_vector2] = { + .visible = true, + .named = true, + }, + [sym_vector3] = { + .visible = true, + .named = true, + }, + [sym_vector4] = { + .visible = true, + .named = true, + }, [sym_boolean] = { .visible = true, .named = true, @@ -749,7 +784,11 @@ enum ts_field_identifiers { field_to_call = 23, field_unit = 24, field_value = 25, - field_whole = 26, + field_w = 26, + field_whole = 27, + field_x = 28, + field_y = 29, + field_z = 30, }; static const char * const ts_field_names[] = { @@ -779,7 +818,11 @@ static const char * const ts_field_names[] = { [field_to_call] = "to_call", [field_unit] = "unit", [field_value] = "value", + [field_w] = "w", [field_whole] = "whole", + [field_x] = "x", + [field_y] = "y", + [field_z] = "z", }; static const TSMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { @@ -805,11 +848,14 @@ static const TSMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [20] = {.index = 30, .length = 2}, [21] = {.index = 32, .length = 3}, [22] = {.index = 35, .length = 3}, - [23] = {.index = 38, .length = 3}, - [24] = {.index = 41, .length = 2}, + [23] = {.index = 38, .length = 2}, + [24] = {.index = 40, .length = 3}, [25] = {.index = 43, .length = 2}, - [26] = {.index = 45, .length = 3}, - [27] = {.index = 48, .length = 3}, + [26] = {.index = 45, .length = 2}, + [27] = {.index = 47, .length = 3}, + [28] = {.index = 50, .length = 3}, + [29] = {.index = 53, .length = 3}, + [30] = {.index = 56, .length = 4}, }; static const TSFieldMapEntry ts_field_map_entries[] = { @@ -874,23 +920,35 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_expression, 3}, {field_result, 2}, [38] = + {field_x, 1}, + {field_y, 3}, + [40] = {field_condition, 1}, {field_on_false, 4}, {field_on_true, 2}, - [41] = + [43] = {field_ident, 0}, {field_value, 2}, - [43] = + [45] = {field_default, 3}, {field_name, 0}, - [45] = + [47] = {field_assignments, 1}, {field_assignments, 2}, {field_assignments, 3}, - [48] = + [50] = {field_lhs, 1}, {field_relation, 2}, {field_rhs, 3}, + [53] = + {field_x, 1}, + {field_y, 3}, + {field_z, 5}, + [56] = + {field_w, 7}, + {field_x, 1}, + {field_y, 3}, + {field_z, 5}, }; static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { @@ -906,18 +964,18 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [1] = 1, [2] = 2, [3] = 2, - [4] = 4, - [5] = 4, - [6] = 4, - [7] = 7, - [8] = 8, + [4] = 2, + [5] = 5, + [6] = 5, + [7] = 5, + [8] = 5, [9] = 9, - [10] = 7, - [11] = 9, - [12] = 12, - [13] = 13, - [14] = 14, - [15] = 15, + [10] = 10, + [11] = 11, + [12] = 11, + [13] = 9, + [14] = 9, + [15] = 11, [16] = 16, [17] = 17, [18] = 18, @@ -928,64 +986,64 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [23] = 23, [24] = 24, [25] = 25, - [26] = 23, + [26] = 26, [27] = 27, - [28] = 22, + [28] = 28, [29] = 29, [30] = 30, - [31] = 31, + [31] = 25, [32] = 32, [33] = 33, [34] = 34, [35] = 35, - [36] = 13, - [37] = 14, - [38] = 15, - [39] = 16, - [40] = 27, - [41] = 19, - [42] = 12, - [43] = 24, - [44] = 30, - [45] = 31, - [46] = 32, - [47] = 33, - [48] = 34, - [49] = 35, - [50] = 29, - [51] = 51, - [52] = 52, - [53] = 53, - [54] = 54, - [55] = 55, - [56] = 56, - [57] = 57, - [58] = 58, - [59] = 59, - [60] = 60, - [61] = 61, - [62] = 62, - [63] = 63, + [36] = 36, + [37] = 37, + [38] = 38, + [39] = 39, + [40] = 40, + [41] = 41, + [42] = 17, + [43] = 18, + [44] = 32, + [45] = 22, + [46] = 26, + [47] = 40, + [48] = 25, + [49] = 32, + [50] = 33, + [51] = 34, + [52] = 35, + [53] = 36, + [54] = 37, + [55] = 38, + [56] = 39, + [57] = 16, + [58] = 41, + [59] = 17, + [60] = 18, + [61] = 22, + [62] = 26, + [63] = 27, [64] = 64, - [65] = 65, - [66] = 66, - [67] = 67, - [68] = 68, - [69] = 69, - [70] = 70, - [71] = 71, - [72] = 72, - [73] = 73, - [74] = 74, - [75] = 75, - [76] = 76, - [77] = 77, - [78] = 78, - [79] = 79, - [80] = 80, - [81] = 81, - [82] = 82, - [83] = 83, + [65] = 33, + [66] = 34, + [67] = 35, + [68] = 36, + [69] = 37, + [70] = 38, + [71] = 39, + [72] = 16, + [73] = 19, + [74] = 29, + [75] = 30, + [76] = 41, + [77] = 19, + [78] = 29, + [79] = 30, + [80] = 64, + [81] = 64, + [82] = 40, + [83] = 27, [84] = 84, [85] = 85, [86] = 86, @@ -1005,168 +1063,297 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [100] = 100, [101] = 101, [102] = 102, - [103] = 51, - [104] = 58, - [105] = 59, - [106] = 70, - [107] = 69, - [108] = 52, - [109] = 56, - [110] = 57, - [111] = 55, - [112] = 54, - [113] = 53, - [114] = 90, - [115] = 74, - [116] = 67, - [117] = 68, - [118] = 60, - [119] = 79, - [120] = 80, - [121] = 81, - [122] = 62, - [123] = 63, - [124] = 76, - [125] = 64, - [126] = 75, - [127] = 82, - [128] = 78, - [129] = 65, - [130] = 83, - [131] = 66, - [132] = 88, - [133] = 84, - [134] = 93, - [135] = 85, - [136] = 71, - [137] = 72, - [138] = 73, - [139] = 77, - [140] = 92, - [141] = 89, - [142] = 98, - [143] = 95, - [144] = 101, - [145] = 100, - [146] = 87, - [147] = 97, - [148] = 94, - [149] = 86, - [150] = 96, - [151] = 102, - [152] = 99, - [153] = 153, - [154] = 154, - [155] = 155, - [156] = 156, - [157] = 157, - [158] = 156, - [159] = 155, - [160] = 160, - [161] = 161, - [162] = 162, - [163] = 162, - [164] = 164, - [165] = 165, - [166] = 161, - [167] = 167, - [168] = 168, - [169] = 169, - [170] = 170, - [171] = 171, - [172] = 169, - [173] = 173, - [174] = 170, - [175] = 175, - [176] = 176, - [177] = 173, - [178] = 168, - [179] = 176, - [180] = 171, - [181] = 181, - [182] = 182, - [183] = 51, - [184] = 59, - [185] = 58, - [186] = 186, - [187] = 187, - [188] = 188, - [189] = 69, - [190] = 70, - [191] = 191, - [192] = 192, - [193] = 193, - [194] = 93, + [103] = 103, + [104] = 104, + [105] = 105, + [106] = 106, + [107] = 107, + [108] = 108, + [109] = 109, + [110] = 110, + [111] = 111, + [112] = 112, + [113] = 113, + [114] = 114, + [115] = 115, + [116] = 116, + [117] = 117, + [118] = 118, + [119] = 119, + [120] = 120, + [121] = 121, + [122] = 122, + [123] = 123, + [124] = 124, + [125] = 125, + [126] = 126, + [127] = 127, + [128] = 128, + [129] = 129, + [130] = 130, + [131] = 131, + [132] = 132, + [133] = 133, + [134] = 134, + [135] = 135, + [136] = 136, + [137] = 137, + [138] = 138, + [139] = 84, + [140] = 86, + [141] = 87, + [142] = 102, + [143] = 101, + [144] = 88, + [145] = 85, + [146] = 90, + [147] = 92, + [148] = 91, + [149] = 89, + [150] = 99, + [151] = 97, + [152] = 100, + [153] = 122, + [154] = 104, + [155] = 105, + [156] = 106, + [157] = 107, + [158] = 108, + [159] = 109, + [160] = 110, + [161] = 111, + [162] = 112, + [163] = 94, + [164] = 113, + [165] = 131, + [166] = 93, + [167] = 116, + [168] = 115, + [169] = 117, + [170] = 95, + [171] = 114, + [172] = 98, + [173] = 120, + [174] = 103, + [175] = 96, + [176] = 119, + [177] = 123, + [178] = 137, + [179] = 128, + [180] = 84, + [181] = 127, + [182] = 129, + [183] = 130, + [184] = 138, + [185] = 135, + [186] = 132, + [187] = 134, + [188] = 125, + [189] = 133, + [190] = 121, + [191] = 126, + [192] = 136, + [193] = 86, + [194] = 87, [195] = 195, - [196] = 90, - [197] = 88, - [198] = 193, - [199] = 192, - [200] = 191, - [201] = 195, - [202] = 202, - [203] = 203, - [204] = 204, - [205] = 204, + [196] = 196, + [197] = 102, + [198] = 101, + [199] = 85, + [200] = 92, + [201] = 91, + [202] = 89, + [203] = 88, + [204] = 90, + [205] = 205, [206] = 206, - [207] = 206, - [208] = 208, - [209] = 209, - [210] = 210, - [211] = 211, - [212] = 211, - [213] = 213, - [214] = 213, - [215] = 209, - [216] = 216, - [217] = 217, - [218] = 218, - [219] = 219, - [220] = 216, + [207] = 207, + [208] = 205, + [209] = 94, + [210] = 95, + [211] = 96, + [212] = 212, + [213] = 97, + [214] = 93, + [215] = 98, + [216] = 99, + [217] = 100, + [218] = 103, + [219] = 104, + [220] = 105, [221] = 221, - [222] = 218, - [223] = 219, - [224] = 224, - [225] = 225, - [226] = 221, - [227] = 225, - [228] = 228, - [229] = 229, - [230] = 230, - [231] = 231, - [232] = 232, - [233] = 233, - [234] = 234, - [235] = 235, - [236] = 235, + [222] = 107, + [223] = 108, + [224] = 109, + [225] = 110, + [226] = 111, + [227] = 112, + [228] = 113, + [229] = 114, + [230] = 115, + [231] = 116, + [232] = 117, + [233] = 206, + [234] = 212, + [235] = 221, + [236] = 205, [237] = 237, - [238] = 238, - [239] = 233, - [240] = 240, - [241] = 241, - [242] = 233, - [243] = 243, - [244] = 244, - [245] = 240, - [246] = 240, - [247] = 247, - [248] = 248, - [249] = 249, - [250] = 250, - [251] = 251, - [252] = 252, - [253] = 253, - [254] = 254, - [255] = 254, - [256] = 247, - [257] = 257, - [258] = 251, - [259] = 259, - [260] = 250, + [238] = 206, + [239] = 212, + [240] = 221, + [241] = 106, + [242] = 242, + [243] = 123, + [244] = 138, + [245] = 242, + [246] = 134, + [247] = 127, + [248] = 126, + [249] = 128, + [250] = 129, + [251] = 130, + [252] = 125, + [253] = 132, + [254] = 119, + [255] = 135, + [256] = 256, + [257] = 136, + [258] = 131, + [259] = 120, + [260] = 122, [261] = 261, - [262] = 252, - [263] = 263, - [264] = 264, + [262] = 262, + [263] = 256, + [264] = 262, + [265] = 137, + [266] = 256, + [267] = 267, + [268] = 121, + [269] = 242, + [270] = 270, + [271] = 262, + [272] = 272, + [273] = 261, + [274] = 261, + [275] = 133, + [276] = 276, + [277] = 277, + [278] = 278, + [279] = 279, + [280] = 280, + [281] = 280, + [282] = 276, + [283] = 283, + [284] = 284, + [285] = 283, + [286] = 278, + [287] = 284, + [288] = 284, + [289] = 277, + [290] = 283, + [291] = 291, + [292] = 292, + [293] = 84, + [294] = 87, + [295] = 86, + [296] = 101, + [297] = 297, + [298] = 298, + [299] = 299, + [300] = 102, + [301] = 301, + [302] = 302, + [303] = 303, + [304] = 131, + [305] = 120, + [306] = 302, + [307] = 122, + [308] = 308, + [309] = 302, + [310] = 308, + [311] = 301, + [312] = 303, + [313] = 313, + [314] = 313, + [315] = 315, + [316] = 315, + [317] = 315, + [318] = 313, + [319] = 319, + [320] = 320, + [321] = 321, + [322] = 322, + [323] = 323, + [324] = 324, + [325] = 322, + [326] = 324, + [327] = 327, + [328] = 323, + [329] = 322, + [330] = 323, + [331] = 324, + [332] = 332, + [333] = 333, + [334] = 334, + [335] = 335, + [336] = 334, + [337] = 337, + [338] = 338, + [339] = 339, + [340] = 332, + [341] = 339, + [342] = 334, + [343] = 343, + [344] = 339, + [345] = 338, + [346] = 332, + [347] = 333, + [348] = 338, + [349] = 333, + [350] = 350, + [351] = 351, + [352] = 352, + [353] = 353, + [354] = 354, + [355] = 355, + [356] = 353, + [357] = 357, + [358] = 357, + [359] = 357, + [360] = 360, + [361] = 361, + [362] = 352, + [363] = 353, + [364] = 364, + [365] = 352, + [366] = 366, + [367] = 367, + [368] = 352, + [369] = 353, + [370] = 370, + [371] = 371, + [372] = 372, + [373] = 373, + [374] = 371, + [375] = 375, + [376] = 376, + [377] = 377, + [378] = 371, + [379] = 373, + [380] = 380, + [381] = 373, + [382] = 382, + [383] = 382, + [384] = 377, + [385] = 376, + [386] = 386, + [387] = 387, + [388] = 382, + [389] = 376, + [390] = 390, + [391] = 391, + [392] = 377, + [393] = 393, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1174,489 +1361,527 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(19); + if (eof) ADVANCE(21); ADVANCE_MAP( - '!', 44, - '"', 5, - '#', 20, - '&', 54, - '\'', 7, - '(', 75, - ')', 76, - '*', 46, - '+', 42, - ',', 78, - '-', 41, - '.', 37, - '/', 48, - '0', 25, - '1', 27, - ':', 39, - ';', 74, - '<', 64, - '=', 73, - '>', 58, - '[', 77, - ']', 79, - '^', 56, - '|', 55, + '!', 49, + '"', 6, + '#', 22, + '&', 59, + '\'', 8, + '(', 80, + ')', 81, + '*', 51, + '+', 47, + ',', 42, + '-', 46, + '.', 39, + '/', 53, + '0', 27, + '1', 29, + ':', 44, + ';', 79, + '<', 69, + '=', 78, + '>', 63, + '[', 82, + ']', 83, + '^', 61, + '|', 60, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(21); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(28); + lookahead == ' ') ADVANCE(23); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(30); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(22); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); END_STATE(); case 1: ADVANCE_MAP( - '!', 44, - '"', 5, - '#', 20, - '&', 54, - '\'', 7, - '(', 75, - '*', 46, - '+', 42, - '-', 41, - '.', 38, - '/', 48, - '0', 26, - ':', 39, - '<', 64, - '=', 14, - '>', 59, - '[', 77, - ']', 79, - '^', 56, - '|', 55, + '!', 49, + '"', 6, + '#', 22, + '&', 59, + '\'', 8, + '(', 80, + '*', 51, + '+', 47, + '-', 46, + '.', 40, + '/', 53, + '0', 28, + ':', 44, + '<', 69, + '=', 15, + '>', 64, + '[', 82, + ']', 83, + '^', 61, + '|', 60, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(21); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(28); + lookahead == ' ') ADVANCE(23); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(30); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(22); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); END_STATE(); case 2: ADVANCE_MAP( - '!', 43, - '"', 5, - '#', 20, - '(', 75, - ')', 76, - '*', 46, - '+', 42, - '-', 40, - '.', 10, - '/', 47, - '0', 26, - '<', 12, - '>', 16, - '[', 77, + '!', 48, + '"', 6, + '#', 22, + '(', 80, + ')', 81, + '*', 51, + '+', 47, + '-', 45, + '.', 12, + '/', 52, + '0', 28, + '<', 10, + '>', 18, + '[', 82, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(21); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(28); + lookahead == ' ') ADVANCE(23); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(30); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(22); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); END_STATE(); case 3: ADVANCE_MAP( - '!', 13, - '#', 20, - '\'', 7, - '*', 46, - '+', 42, - '-', 40, - '.', 36, - '/', 47, - '<', 66, - '=', 14, - '>', 57, + '!', 14, + '#', 22, + '&', 59, + '\'', 8, + '(', 80, + ')', 17, + '*', 51, + '+', 47, + ',', 42, + '-', 46, + '.', 40, + '/', 53, + ':', 44, + '<', 70, + '=', 15, + '>', 64, + '^', 61, + '|', 60, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(21); + lookahead == ' ') ADVANCE(23); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(22); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); END_STATE(); case 4: ADVANCE_MAP( - '!', 13, - '#', 20, - ')', 76, - '*', 46, - '+', 42, - '-', 40, - '/', 47, - '<', 66, - '=', 14, - '>', 60, + '!', 14, + '#', 22, + '\'', 8, + '*', 51, + '+', 47, + '-', 45, + '.', 38, + '/', 52, + '<', 71, + '=', 15, + '>', 62, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(21); - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(31); + lookahead == ' ') ADVANCE(23); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); END_STATE(); case 5: - if (lookahead == '"') ADVANCE(23); - if (lookahead == '\\') ADVANCE(6); - if (lookahead != 0) ADVANCE(5); + ADVANCE_MAP( + '!', 14, + '#', 22, + ')', 81, + '*', 51, + '+', 47, + '-', 45, + '/', 52, + '<', 71, + '=', 15, + '>', 65, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(23); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(33); END_STATE(); case 6: - if (lookahead == '"') ADVANCE(24); - if (lookahead == '\\') ADVANCE(6); - if (lookahead != 0) ADVANCE(5); + if (lookahead == '"') ADVANCE(25); + if (lookahead == '\\') ADVANCE(7); + if (lookahead != 0) ADVANCE(6); END_STATE(); case 7: - if (lookahead == '\'') ADVANCE(34); - if (lookahead == '\\') ADVANCE(8); - if (lookahead != 0) ADVANCE(7); + if (lookahead == '"') ADVANCE(26); + if (lookahead == '\\') ADVANCE(7); + if (lookahead != 0) ADVANCE(6); END_STATE(); case 8: - if (lookahead == '\'') ADVANCE(35); - if (lookahead == '\\') ADVANCE(8); - if (lookahead != 0) ADVANCE(7); + if (lookahead == '\'') ADVANCE(36); + if (lookahead == '\\') ADVANCE(9); + if (lookahead != 0) ADVANCE(8); END_STATE(); case 9: - if (lookahead == '.') ADVANCE(80); + if (lookahead == '\'') ADVANCE(37); + if (lookahead == '\\') ADVANCE(9); + if (lookahead != 0) ADVANCE(8); END_STATE(); case 10: - if (lookahead == '.') ADVANCE(9); + if (lookahead == '(') ADVANCE(41); + if (lookahead == '<') ADVANCE(13); END_STATE(); case 11: - if (lookahead == '<') ADVANCE(82); + if (lookahead == '.') ADVANCE(84); END_STATE(); case 12: - if (lookahead == '<') ADVANCE(11); + if (lookahead == '.') ADVANCE(11); END_STATE(); case 13: - if (lookahead == '=') ADVANCE(67); + if (lookahead == '<') ADVANCE(86); END_STATE(); case 14: - if (lookahead == '=') ADVANCE(62); + if (lookahead == '=') ADVANCE(72); END_STATE(); case 15: - if (lookahead == '>') ADVANCE(83); + if (lookahead == '=') ADVANCE(67); END_STATE(); case 16: - if (lookahead == '>') ADVANCE(15); + if (lookahead == '>') ADVANCE(87); END_STATE(); case 17: - if (eof) ADVANCE(19); + if (lookahead == '>') ADVANCE(43); + END_STATE(); + case 18: + if (lookahead == '>') ADVANCE(16); + END_STATE(); + case 19: + if (eof) ADVANCE(21); ADVANCE_MAP( - '!', 13, - '#', 20, - '&', 54, - '\'', 7, - '(', 75, - ')', 76, - '*', 46, - '+', 42, - ',', 78, - '-', 40, - '.', 38, - '/', 48, - ':', 39, - ';', 74, - '<', 65, - '=', 73, - '>', 58, - ']', 79, - '^', 56, - '|', 55, + '!', 14, + '#', 22, + '&', 59, + '\'', 8, + '(', 80, + ')', 81, + '*', 51, + '+', 47, + ',', 42, + '-', 45, + '.', 40, + '/', 53, + ':', 44, + ';', 79, + '<', 70, + '=', 78, + '>', 63, + ']', 83, + '^', 61, + '|', 60, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(21); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(28); + lookahead == ' ') ADVANCE(23); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(30); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(22); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); END_STATE(); - case 18: - if (eof) ADVANCE(19); + case 20: + if (eof) ADVANCE(21); ADVANCE_MAP( - '!', 13, - '#', 20, - '&', 54, - '(', 75, - ')', 76, - '*', 46, - '+', 42, - ',', 78, - '-', 41, - '.', 38, - '/', 48, - ':', 39, - ';', 74, - '<', 65, - '=', 73, - '>', 59, - ']', 79, - '^', 56, - '|', 55, - '0', 33, - '1', 33, + '!', 14, + '#', 22, + '&', 59, + '(', 80, + ')', 81, + '*', 51, + '+', 47, + ',', 42, + '-', 46, + '.', 40, + '/', 53, + ':', 44, + ';', 79, + '<', 70, + '=', 78, + '>', 64, + ']', 83, + '^', 61, + '|', 60, + '0', 35, + '1', 35, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(21); + lookahead == ' ') ADVANCE(23); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(22); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); END_STATE(); - case 19: + case 21: ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); - case 20: + case 22: ACCEPT_TOKEN(sym_comment); if (lookahead != 0 && - lookahead != '\n') ADVANCE(20); + lookahead != '\n') ADVANCE(22); END_STATE(); - case 21: + case 23: ACCEPT_TOKEN(sym__whitespace); END_STATE(); - case 22: + case 24: ACCEPT_TOKEN(sym_identifier); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(22); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); END_STATE(); - case 23: + case 25: ACCEPT_TOKEN(sym_string); END_STATE(); - case 24: + case 26: ACCEPT_TOKEN(sym_string); - if (lookahead == '"') ADVANCE(23); - if (lookahead == '\\') ADVANCE(6); - if (lookahead != 0) ADVANCE(5); + if (lookahead == '"') ADVANCE(25); + if (lookahead == '\\') ADVANCE(7); + if (lookahead != 0) ADVANCE(6); END_STATE(); - case 25: + case 27: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(32); - if (lookahead == 'o') ADVANCE(29); - if (lookahead == 'x') ADVANCE(30); + if (lookahead == 'b') ADVANCE(34); + if (lookahead == 'o') ADVANCE(31); + if (lookahead == 'x') ADVANCE(32); if (lookahead == '0' || - lookahead == '1') ADVANCE(27); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(28); + lookahead == '1') ADVANCE(29); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(30); END_STATE(); - case 26: + case 28: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(32); - if (lookahead == 'o') ADVANCE(29); - if (lookahead == 'x') ADVANCE(30); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(28); + if (lookahead == 'b') ADVANCE(34); + if (lookahead == 'o') ADVANCE(31); + if (lookahead == 'x') ADVANCE(32); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(30); END_STATE(); - case 27: + case 29: ACCEPT_TOKEN(aux_sym_base_ten_token1); if (lookahead == '0' || - lookahead == '1') ADVANCE(27); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(28); + lookahead == '1') ADVANCE(29); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(30); END_STATE(); - case 28: + case 30: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(28); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(30); END_STATE(); - case 29: + case 31: ACCEPT_TOKEN(aux_sym_octal_token1); END_STATE(); - case 30: + case 32: ACCEPT_TOKEN(aux_sym_hex_token1); END_STATE(); - case 31: + case 33: ACCEPT_TOKEN(aux_sym_hex_token2); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(33); END_STATE(); - case 32: + case 34: ACCEPT_TOKEN(aux_sym_binary_token1); END_STATE(); - case 33: + case 35: ACCEPT_TOKEN(aux_sym_binary_token2); if (lookahead == '0' || - lookahead == '1') ADVANCE(33); - END_STATE(); - case 34: - ACCEPT_TOKEN(sym_unit_quote); - END_STATE(); - case 35: - ACCEPT_TOKEN(sym_unit_quote); - if (lookahead == '\'') ADVANCE(34); - if (lookahead == '\\') ADVANCE(8); - if (lookahead != 0) ADVANCE(7); + lookahead == '1') ADVANCE(35); END_STATE(); case 36: - ACCEPT_TOKEN(anon_sym_DOT); + ACCEPT_TOKEN(sym_unit_quote); END_STATE(); case 37: - ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(70); + ACCEPT_TOKEN(sym_unit_quote); + if (lookahead == '\'') ADVANCE(36); + if (lookahead == '\\') ADVANCE(9); + if (lookahead != 0) ADVANCE(8); END_STATE(); case 38: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(71); END_STATE(); case 39: - ACCEPT_TOKEN(anon_sym_COLON); + ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(75); END_STATE(); case 40: - ACCEPT_TOKEN(anon_sym_DASH); + ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(76); END_STATE(); case 41: - ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '>') ADVANCE(81); + ACCEPT_TOKEN(anon_sym_LT_LPAREN); END_STATE(); case 42: - ACCEPT_TOKEN(anon_sym_PLUS); + ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); case 43: - ACCEPT_TOKEN(anon_sym_BANG); + ACCEPT_TOKEN(anon_sym_RPAREN_GT); END_STATE(); case 44: - ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(67); + ACCEPT_TOKEN(anon_sym_COLON); END_STATE(); case 45: - ACCEPT_TOKEN(anon_sym_STAR_STAR); + ACCEPT_TOKEN(anon_sym_DASH); END_STATE(); case 46: - ACCEPT_TOKEN(anon_sym_STAR); - if (lookahead == '*') ADVANCE(45); + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '>') ADVANCE(85); END_STATE(); case 47: - ACCEPT_TOKEN(anon_sym_SLASH); + ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); case 48: - ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '/') ADVANCE(49); + ACCEPT_TOKEN(anon_sym_BANG); END_STATE(); case 49: - ACCEPT_TOKEN(anon_sym_SLASH_SLASH); + ACCEPT_TOKEN(anon_sym_BANG); + if (lookahead == '=') ADVANCE(72); END_STATE(); case 50: - ACCEPT_TOKEN(anon_sym_LT_LT); + ACCEPT_TOKEN(anon_sym_STAR_STAR); END_STATE(); case 51: - ACCEPT_TOKEN(anon_sym_LT_LT); - if (lookahead == '<') ADVANCE(82); + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '*') ADVANCE(50); END_STATE(); case 52: - ACCEPT_TOKEN(anon_sym_GT_GT); + ACCEPT_TOKEN(anon_sym_SLASH); END_STATE(); case 53: - ACCEPT_TOKEN(anon_sym_GT_GT); - if (lookahead == '>') ADVANCE(83); + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '/') ADVANCE(54); END_STATE(); case 54: - ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(68); + ACCEPT_TOKEN(anon_sym_SLASH_SLASH); END_STATE(); case 55: - ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '|') ADVANCE(69); + ACCEPT_TOKEN(anon_sym_LT_LT); END_STATE(); case 56: - ACCEPT_TOKEN(anon_sym_CARET); + ACCEPT_TOKEN(anon_sym_LT_LT); + if (lookahead == '<') ADVANCE(86); END_STATE(); case 57: - ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(61); + ACCEPT_TOKEN(anon_sym_GT_GT); END_STATE(); case 58: - ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(61); - if (lookahead == '>') ADVANCE(53); + ACCEPT_TOKEN(anon_sym_GT_GT); + if (lookahead == '>') ADVANCE(87); END_STATE(); case 59: - ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(61); - if (lookahead == '>') ADVANCE(52); + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(73); END_STATE(); case 60: - ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(61); - if (lookahead == '>') ADVANCE(15); + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '|') ADVANCE(74); END_STATE(); case 61: - ACCEPT_TOKEN(anon_sym_GT_EQ); + ACCEPT_TOKEN(anon_sym_CARET); END_STATE(); case 62: - ACCEPT_TOKEN(anon_sym_EQ_EQ); + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(66); END_STATE(); case 63: - ACCEPT_TOKEN(anon_sym_LT_EQ); + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(66); + if (lookahead == '>') ADVANCE(58); END_STATE(); case 64: - ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(51); - if (lookahead == '=') ADVANCE(63); + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(66); + if (lookahead == '>') ADVANCE(57); END_STATE(); case 65: - ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(50); - if (lookahead == '=') ADVANCE(63); + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(66); + if (lookahead == '>') ADVANCE(16); END_STATE(); case 66: - ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '=') ADVANCE(63); + ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); case 67: - ACCEPT_TOKEN(anon_sym_BANG_EQ); + ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); case 68: - ACCEPT_TOKEN(anon_sym_AMP_AMP); + ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); case 69: - ACCEPT_TOKEN(anon_sym_PIPE_PIPE); + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '(') ADVANCE(41); + if (lookahead == '<') ADVANCE(56); + if (lookahead == '=') ADVANCE(68); END_STATE(); case 70: - ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '.') ADVANCE(80); - if (lookahead == '=') ADVANCE(72); + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '<') ADVANCE(55); + if (lookahead == '=') ADVANCE(68); END_STATE(); case 71: - ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '=') ADVANCE(72); + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '=') ADVANCE(68); END_STATE(); case 72: - ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); + ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); case 73: - ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(62); + ACCEPT_TOKEN(anon_sym_AMP_AMP); END_STATE(); case 74: - ACCEPT_TOKEN(anon_sym_SEMI); + ACCEPT_TOKEN(anon_sym_PIPE_PIPE); END_STATE(); case 75: - ACCEPT_TOKEN(anon_sym_LPAREN); + ACCEPT_TOKEN(anon_sym_DOT_DOT); + if (lookahead == '.') ADVANCE(84); + if (lookahead == '=') ADVANCE(77); END_STATE(); case 76: - ACCEPT_TOKEN(anon_sym_RPAREN); + ACCEPT_TOKEN(anon_sym_DOT_DOT); + if (lookahead == '=') ADVANCE(77); END_STATE(); case 77: - ACCEPT_TOKEN(anon_sym_LBRACK); + ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); END_STATE(); case 78: - ACCEPT_TOKEN(anon_sym_COMMA); + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '=') ADVANCE(67); END_STATE(); case 79: - ACCEPT_TOKEN(anon_sym_RBRACK); + ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); case 80: - ACCEPT_TOKEN(sym_varadic_dots); + ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); case 81: - ACCEPT_TOKEN(anon_sym_DASH_GT); + ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); case 82: - ACCEPT_TOKEN(anon_sym_LT_LT_LT); + ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); case 83: + ACCEPT_TOKEN(anon_sym_RBRACK); + END_STATE(); + case 84: + ACCEPT_TOKEN(sym_varadic_dots); + END_STATE(); + case 85: + ACCEPT_TOKEN(anon_sym_DASH_GT); + END_STATE(); + case 86: + ACCEPT_TOKEN(anon_sym_LT_LT_LT); + END_STATE(); + case 87: ACCEPT_TOKEN(anon_sym_GT_GT_GT); END_STATE(); default: @@ -1768,11 +1993,11 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [1] = {.lex_state = 1}, [2] = {.lex_state = 1}, [3] = {.lex_state = 1}, - [4] = {.lex_state = 2}, + [4] = {.lex_state = 1}, [5] = {.lex_state = 2}, [6] = {.lex_state = 2}, - [7] = {.lex_state = 1}, - [8] = {.lex_state = 1}, + [7] = {.lex_state = 2}, + [8] = {.lex_state = 2}, [9] = {.lex_state = 1}, [10] = {.lex_state = 1}, [11] = {.lex_state = 1}, @@ -1867,168 +2092,297 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [100] = {.lex_state = 1}, [101] = {.lex_state = 1}, [102] = {.lex_state = 1}, - [103] = {.lex_state = 17}, - [104] = {.lex_state = 17}, - [105] = {.lex_state = 17}, - [106] = {.lex_state = 17}, - [107] = {.lex_state = 17}, - [108] = {.lex_state = 18}, - [109] = {.lex_state = 18}, - [110] = {.lex_state = 18}, - [111] = {.lex_state = 18}, - [112] = {.lex_state = 18}, - [113] = {.lex_state = 18}, - [114] = {.lex_state = 17}, - [115] = {.lex_state = 18}, - [116] = {.lex_state = 18}, - [117] = {.lex_state = 18}, - [118] = {.lex_state = 18}, - [119] = {.lex_state = 18}, - [120] = {.lex_state = 18}, - [121] = {.lex_state = 18}, - [122] = {.lex_state = 18}, - [123] = {.lex_state = 18}, - [124] = {.lex_state = 18}, - [125] = {.lex_state = 18}, - [126] = {.lex_state = 18}, - [127] = {.lex_state = 18}, - [128] = {.lex_state = 18}, - [129] = {.lex_state = 18}, - [130] = {.lex_state = 18}, - [131] = {.lex_state = 18}, - [132] = {.lex_state = 17}, - [133] = {.lex_state = 18}, - [134] = {.lex_state = 17}, - [135] = {.lex_state = 18}, - [136] = {.lex_state = 18}, - [137] = {.lex_state = 18}, - [138] = {.lex_state = 18}, - [139] = {.lex_state = 18}, - [140] = {.lex_state = 18}, - [141] = {.lex_state = 18}, - [142] = {.lex_state = 18}, - [143] = {.lex_state = 18}, - [144] = {.lex_state = 18}, - [145] = {.lex_state = 18}, - [146] = {.lex_state = 18}, - [147] = {.lex_state = 18}, - [148] = {.lex_state = 18}, - [149] = {.lex_state = 18}, - [150] = {.lex_state = 18}, - [151] = {.lex_state = 18}, - [152] = {.lex_state = 18}, - [153] = {.lex_state = 18}, - [154] = {.lex_state = 18}, - [155] = {.lex_state = 18}, - [156] = {.lex_state = 18}, - [157] = {.lex_state = 18}, - [158] = {.lex_state = 18}, - [159] = {.lex_state = 18}, - [160] = {.lex_state = 18}, - [161] = {.lex_state = 18}, - [162] = {.lex_state = 18}, - [163] = {.lex_state = 18}, - [164] = {.lex_state = 18}, - [165] = {.lex_state = 18}, - [166] = {.lex_state = 18}, - [167] = {.lex_state = 18}, - [168] = {.lex_state = 1}, - [169] = {.lex_state = 1}, - [170] = {.lex_state = 1}, - [171] = {.lex_state = 1}, - [172] = {.lex_state = 1}, - [173] = {.lex_state = 1}, - [174] = {.lex_state = 1}, - [175] = {.lex_state = 1}, - [176] = {.lex_state = 1}, - [177] = {.lex_state = 1}, - [178] = {.lex_state = 1}, - [179] = {.lex_state = 1}, - [180] = {.lex_state = 1}, - [181] = {.lex_state = 1}, - [182] = {.lex_state = 1}, - [183] = {.lex_state = 3}, - [184] = {.lex_state = 3}, - [185] = {.lex_state = 3}, - [186] = {.lex_state = 4}, - [187] = {.lex_state = 4}, - [188] = {.lex_state = 4}, - [189] = {.lex_state = 3}, - [190] = {.lex_state = 3}, - [191] = {.lex_state = 3}, - [192] = {.lex_state = 3}, + [103] = {.lex_state = 1}, + [104] = {.lex_state = 1}, + [105] = {.lex_state = 1}, + [106] = {.lex_state = 1}, + [107] = {.lex_state = 1}, + [108] = {.lex_state = 1}, + [109] = {.lex_state = 1}, + [110] = {.lex_state = 1}, + [111] = {.lex_state = 1}, + [112] = {.lex_state = 1}, + [113] = {.lex_state = 1}, + [114] = {.lex_state = 1}, + [115] = {.lex_state = 1}, + [116] = {.lex_state = 1}, + [117] = {.lex_state = 1}, + [118] = {.lex_state = 1}, + [119] = {.lex_state = 1}, + [120] = {.lex_state = 1}, + [121] = {.lex_state = 1}, + [122] = {.lex_state = 1}, + [123] = {.lex_state = 1}, + [124] = {.lex_state = 1}, + [125] = {.lex_state = 1}, + [126] = {.lex_state = 1}, + [127] = {.lex_state = 1}, + [128] = {.lex_state = 1}, + [129] = {.lex_state = 1}, + [130] = {.lex_state = 1}, + [131] = {.lex_state = 1}, + [132] = {.lex_state = 1}, + [133] = {.lex_state = 1}, + [134] = {.lex_state = 1}, + [135] = {.lex_state = 1}, + [136] = {.lex_state = 1}, + [137] = {.lex_state = 1}, + [138] = {.lex_state = 1}, + [139] = {.lex_state = 19}, + [140] = {.lex_state = 19}, + [141] = {.lex_state = 19}, + [142] = {.lex_state = 19}, + [143] = {.lex_state = 19}, + [144] = {.lex_state = 20}, + [145] = {.lex_state = 20}, + [146] = {.lex_state = 20}, + [147] = {.lex_state = 20}, + [148] = {.lex_state = 20}, + [149] = {.lex_state = 20}, + [150] = {.lex_state = 20}, + [151] = {.lex_state = 20}, + [152] = {.lex_state = 20}, + [153] = {.lex_state = 19}, + [154] = {.lex_state = 20}, + [155] = {.lex_state = 20}, + [156] = {.lex_state = 20}, + [157] = {.lex_state = 20}, + [158] = {.lex_state = 20}, + [159] = {.lex_state = 20}, + [160] = {.lex_state = 20}, + [161] = {.lex_state = 20}, + [162] = {.lex_state = 20}, + [163] = {.lex_state = 20}, + [164] = {.lex_state = 20}, + [165] = {.lex_state = 19}, + [166] = {.lex_state = 20}, + [167] = {.lex_state = 20}, + [168] = {.lex_state = 20}, + [169] = {.lex_state = 20}, + [170] = {.lex_state = 20}, + [171] = {.lex_state = 20}, + [172] = {.lex_state = 20}, + [173] = {.lex_state = 19}, + [174] = {.lex_state = 20}, + [175] = {.lex_state = 20}, + [176] = {.lex_state = 20}, + [177] = {.lex_state = 20}, + [178] = {.lex_state = 20}, + [179] = {.lex_state = 20}, + [180] = {.lex_state = 3}, + [181] = {.lex_state = 20}, + [182] = {.lex_state = 20}, + [183] = {.lex_state = 20}, + [184] = {.lex_state = 20}, + [185] = {.lex_state = 20}, + [186] = {.lex_state = 20}, + [187] = {.lex_state = 20}, + [188] = {.lex_state = 20}, + [189] = {.lex_state = 20}, + [190] = {.lex_state = 20}, + [191] = {.lex_state = 20}, + [192] = {.lex_state = 20}, [193] = {.lex_state = 3}, [194] = {.lex_state = 3}, - [195] = {.lex_state = 3}, - [196] = {.lex_state = 3}, + [195] = {.lex_state = 20}, + [196] = {.lex_state = 20}, [197] = {.lex_state = 3}, [198] = {.lex_state = 3}, - [199] = {.lex_state = 2}, - [200] = {.lex_state = 2}, - [201] = {.lex_state = 2}, - [202] = {.lex_state = 2}, - [203] = {.lex_state = 0}, - [204] = {.lex_state = 2}, - [205] = {.lex_state = 2}, - [206] = {.lex_state = 2}, - [207] = {.lex_state = 2}, - [208] = {.lex_state = 2}, - [209] = {.lex_state = 0}, - [210] = {.lex_state = 0}, - [211] = {.lex_state = 0}, - [212] = {.lex_state = 0}, - [213] = {.lex_state = 0}, - [214] = {.lex_state = 0}, - [215] = {.lex_state = 0}, - [216] = {.lex_state = 0}, - [217] = {.lex_state = 2}, - [218] = {.lex_state = 0}, - [219] = {.lex_state = 0}, - [220] = {.lex_state = 0}, - [221] = {.lex_state = 0}, - [222] = {.lex_state = 0}, - [223] = {.lex_state = 0}, - [224] = {.lex_state = 0}, - [225] = {.lex_state = 0}, - [226] = {.lex_state = 0}, - [227] = {.lex_state = 0}, - [228] = {.lex_state = 0}, - [229] = {.lex_state = 0}, - [230] = {.lex_state = 0}, - [231] = {.lex_state = 0}, - [232] = {.lex_state = 0}, - [233] = {.lex_state = 0}, - [234] = {.lex_state = 0}, - [235] = {.lex_state = 0}, - [236] = {.lex_state = 0}, - [237] = {.lex_state = 0}, - [238] = {.lex_state = 0}, - [239] = {.lex_state = 0}, - [240] = {.lex_state = 17}, - [241] = {.lex_state = 0}, - [242] = {.lex_state = 0}, - [243] = {.lex_state = 0}, - [244] = {.lex_state = 0}, - [245] = {.lex_state = 17}, - [246] = {.lex_state = 17}, - [247] = {.lex_state = 0}, - [248] = {.lex_state = 0}, - [249] = {.lex_state = 0}, - [250] = {.lex_state = 0}, - [251] = {.lex_state = 0}, - [252] = {.lex_state = 0}, - [253] = {.lex_state = 0}, - [254] = {.lex_state = 0}, - [255] = {.lex_state = 0}, - [256] = {.lex_state = 0}, - [257] = {.lex_state = 17}, - [258] = {.lex_state = 0}, - [259] = {.lex_state = 18}, - [260] = {.lex_state = 0}, - [261] = {.lex_state = 0}, - [262] = {.lex_state = 0}, - [263] = {.lex_state = 4}, - [264] = {.lex_state = 0}, + [199] = {.lex_state = 3}, + [200] = {.lex_state = 3}, + [201] = {.lex_state = 3}, + [202] = {.lex_state = 3}, + [203] = {.lex_state = 3}, + [204] = {.lex_state = 3}, + [205] = {.lex_state = 3}, + [206] = {.lex_state = 20}, + [207] = {.lex_state = 20}, + [208] = {.lex_state = 3}, + [209] = {.lex_state = 3}, + [210] = {.lex_state = 3}, + [211] = {.lex_state = 3}, + [212] = {.lex_state = 20}, + [213] = {.lex_state = 3}, + [214] = {.lex_state = 3}, + [215] = {.lex_state = 3}, + [216] = {.lex_state = 3}, + [217] = {.lex_state = 3}, + [218] = {.lex_state = 3}, + [219] = {.lex_state = 3}, + [220] = {.lex_state = 3}, + [221] = {.lex_state = 3}, + [222] = {.lex_state = 3}, + [223] = {.lex_state = 3}, + [224] = {.lex_state = 3}, + [225] = {.lex_state = 3}, + [226] = {.lex_state = 3}, + [227] = {.lex_state = 3}, + [228] = {.lex_state = 3}, + [229] = {.lex_state = 3}, + [230] = {.lex_state = 3}, + [231] = {.lex_state = 3}, + [232] = {.lex_state = 3}, + [233] = {.lex_state = 20}, + [234] = {.lex_state = 20}, + [235] = {.lex_state = 3}, + [236] = {.lex_state = 3}, + [237] = {.lex_state = 20}, + [238] = {.lex_state = 20}, + [239] = {.lex_state = 20}, + [240] = {.lex_state = 3}, + [241] = {.lex_state = 3}, + [242] = {.lex_state = 3}, + [243] = {.lex_state = 3}, + [244] = {.lex_state = 3}, + [245] = {.lex_state = 3}, + [246] = {.lex_state = 3}, + [247] = {.lex_state = 3}, + [248] = {.lex_state = 3}, + [249] = {.lex_state = 3}, + [250] = {.lex_state = 3}, + [251] = {.lex_state = 3}, + [252] = {.lex_state = 3}, + [253] = {.lex_state = 3}, + [254] = {.lex_state = 3}, + [255] = {.lex_state = 3}, + [256] = {.lex_state = 20}, + [257] = {.lex_state = 3}, + [258] = {.lex_state = 3}, + [259] = {.lex_state = 3}, + [260] = {.lex_state = 3}, + [261] = {.lex_state = 20}, + [262] = {.lex_state = 20}, + [263] = {.lex_state = 20}, + [264] = {.lex_state = 20}, + [265] = {.lex_state = 3}, + [266] = {.lex_state = 20}, + [267] = {.lex_state = 20}, + [268] = {.lex_state = 3}, + [269] = {.lex_state = 3}, + [270] = {.lex_state = 20}, + [271] = {.lex_state = 20}, + [272] = {.lex_state = 20}, + [273] = {.lex_state = 20}, + [274] = {.lex_state = 20}, + [275] = {.lex_state = 3}, + [276] = {.lex_state = 1}, + [277] = {.lex_state = 1}, + [278] = {.lex_state = 1}, + [279] = {.lex_state = 1}, + [280] = {.lex_state = 1}, + [281] = {.lex_state = 1}, + [282] = {.lex_state = 1}, + [283] = {.lex_state = 1}, + [284] = {.lex_state = 1}, + [285] = {.lex_state = 1}, + [286] = {.lex_state = 1}, + [287] = {.lex_state = 1}, + [288] = {.lex_state = 1}, + [289] = {.lex_state = 1}, + [290] = {.lex_state = 1}, + [291] = {.lex_state = 1}, + [292] = {.lex_state = 1}, + [293] = {.lex_state = 4}, + [294] = {.lex_state = 4}, + [295] = {.lex_state = 4}, + [296] = {.lex_state = 4}, + [297] = {.lex_state = 5}, + [298] = {.lex_state = 5}, + [299] = {.lex_state = 5}, + [300] = {.lex_state = 4}, + [301] = {.lex_state = 4}, + [302] = {.lex_state = 4}, + [303] = {.lex_state = 4}, + [304] = {.lex_state = 4}, + [305] = {.lex_state = 4}, + [306] = {.lex_state = 4}, + [307] = {.lex_state = 4}, + [308] = {.lex_state = 4}, + [309] = {.lex_state = 4}, + [310] = {.lex_state = 2}, + [311] = {.lex_state = 2}, + [312] = {.lex_state = 2}, + [313] = {.lex_state = 2}, + [314] = {.lex_state = 2}, + [315] = {.lex_state = 2}, + [316] = {.lex_state = 2}, + [317] = {.lex_state = 2}, + [318] = {.lex_state = 2}, + [319] = {.lex_state = 2}, + [320] = {.lex_state = 0}, + [321] = {.lex_state = 2}, + [322] = {.lex_state = 0}, + [323] = {.lex_state = 0}, + [324] = {.lex_state = 0}, + [325] = {.lex_state = 0}, + [326] = {.lex_state = 0}, + [327] = {.lex_state = 0}, + [328] = {.lex_state = 0}, + [329] = {.lex_state = 0}, + [330] = {.lex_state = 0}, + [331] = {.lex_state = 0}, + [332] = {.lex_state = 0}, + [333] = {.lex_state = 0}, + [334] = {.lex_state = 0}, + [335] = {.lex_state = 0}, + [336] = {.lex_state = 0}, + [337] = {.lex_state = 2}, + [338] = {.lex_state = 0}, + [339] = {.lex_state = 0}, + [340] = {.lex_state = 0}, + [341] = {.lex_state = 0}, + [342] = {.lex_state = 0}, + [343] = {.lex_state = 0}, + [344] = {.lex_state = 0}, + [345] = {.lex_state = 0}, + [346] = {.lex_state = 0}, + [347] = {.lex_state = 0}, + [348] = {.lex_state = 0}, + [349] = {.lex_state = 0}, + [350] = {.lex_state = 0}, + [351] = {.lex_state = 0}, + [352] = {.lex_state = 0}, + [353] = {.lex_state = 19}, + [354] = {.lex_state = 0}, + [355] = {.lex_state = 0}, + [356] = {.lex_state = 19}, + [357] = {.lex_state = 0}, + [358] = {.lex_state = 0}, + [359] = {.lex_state = 0}, + [360] = {.lex_state = 0}, + [361] = {.lex_state = 0}, + [362] = {.lex_state = 0}, + [363] = {.lex_state = 19}, + [364] = {.lex_state = 0}, + [365] = {.lex_state = 0}, + [366] = {.lex_state = 0}, + [367] = {.lex_state = 0}, + [368] = {.lex_state = 0}, + [369] = {.lex_state = 19}, + [370] = {.lex_state = 0}, + [371] = {.lex_state = 0}, + [372] = {.lex_state = 0}, + [373] = {.lex_state = 0}, + [374] = {.lex_state = 0}, + [375] = {.lex_state = 20}, + [376] = {.lex_state = 0}, + [377] = {.lex_state = 0}, + [378] = {.lex_state = 0}, + [379] = {.lex_state = 0}, + [380] = {.lex_state = 0}, + [381] = {.lex_state = 0}, + [382] = {.lex_state = 0}, + [383] = {.lex_state = 0}, + [384] = {.lex_state = 0}, + [385] = {.lex_state = 0}, + [386] = {.lex_state = 5}, + [387] = {.lex_state = 19}, + [388] = {.lex_state = 0}, + [389] = {.lex_state = 0}, + [390] = {.lex_state = 0}, + [391] = {.lex_state = 0}, + [392] = {.lex_state = 0}, + [393] = {.lex_state = 0}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -2048,6 +2402,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [aux_sym_unsigned_integer_token1] = ACTIONS(1), [sym_unit_quote] = ACTIONS(1), [anon_sym_DOT] = ACTIONS(1), + [anon_sym_LT_LPAREN] = ACTIONS(1), + [anon_sym_COMMA] = ACTIONS(1), [sym_true] = ACTIONS(1), [sym_false] = ACTIONS(1), [anon_sym_COLON] = ACTIONS(1), @@ -2082,7 +2438,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LPAREN] = ACTIONS(1), [anon_sym_RPAREN] = ACTIONS(1), [anon_sym_LBRACK] = ACTIONS(1), - [anon_sym_COMMA] = ACTIONS(1), [anon_sym_RBRACK] = ACTIONS(1), [sym_varadic_dots] = ACTIONS(1), [anon_sym_DASH_GT] = ACTIONS(1), @@ -2090,33 +2445,36 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_GT_GT_GT] = ACTIONS(1), }, [STATE(1)] = { - [sym_source_file] = STATE(249), - [sym_base_ten] = STATE(237), - [sym_octal] = STATE(237), - [sym_hex] = STATE(237), - [sym_binary] = STATE(237), - [sym_integer] = STATE(242), - [sym_signed_integer] = STATE(150), - [sym_unsigned_integer] = STATE(150), - [sym_number] = STATE(104), - [sym__float] = STATE(105), - [sym_scalar] = STATE(150), - [sym_boolean] = STATE(150), - [sym_function_call] = STATE(150), - [sym_method_call] = STATE(150), - [sym_expression] = STATE(164), - [sym_unary_expression] = STATE(150), - [sym_binary_expression] = STATE(150), - [sym_if] = STATE(150), - [sym_let_in] = STATE(150), - [sym_identity_path] = STATE(150), - [sym_self_path] = STATE(150), - [sym_parenthesis] = STATE(150), - [sym_list] = STATE(150), - [sym_struct_definition] = STATE(118), - [sym_dictionary_construction] = STATE(150), - [sym_closure_definition] = STATE(150), - [sym_formula] = STATE(150), + [sym_source_file] = STATE(393), + [sym_base_ten] = STATE(351), + [sym_octal] = STATE(351), + [sym_hex] = STATE(351), + [sym_binary] = STATE(351), + [sym_integer] = STATE(365), + [sym_signed_integer] = STATE(184), + [sym_unsigned_integer] = STATE(184), + [sym_number] = STATE(140), + [sym__float] = STATE(141), + [sym_scalar] = STATE(184), + [sym_vector2] = STATE(184), + [sym_vector3] = STATE(184), + [sym_vector4] = STATE(184), + [sym_boolean] = STATE(184), + [sym_function_call] = STATE(184), + [sym_method_call] = STATE(184), + [sym_expression] = STATE(267), + [sym_unary_expression] = STATE(184), + [sym_binary_expression] = STATE(184), + [sym_if] = STATE(184), + [sym_let_in] = STATE(184), + [sym_identity_path] = STATE(184), + [sym_self_path] = STATE(184), + [sym_parenthesis] = STATE(184), + [sym_list] = STATE(184), + [sym_struct_definition] = STATE(163), + [sym_dictionary_construction] = STATE(184), + [sym_closure_definition] = STATE(184), + [sym_formula] = STATE(184), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2126,44 +2484,48 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [aux_sym_octal_token1] = ACTIONS(13), [aux_sym_hex_token1] = ACTIONS(15), [aux_sym_binary_token1] = ACTIONS(17), - [sym_true] = ACTIONS(19), - [sym_false] = ACTIONS(19), - [anon_sym_DASH] = ACTIONS(21), - [anon_sym_PLUS] = ACTIONS(21), - [anon_sym_BANG] = ACTIONS(21), - [anon_sym_if] = ACTIONS(23), - [anon_sym_let] = ACTIONS(25), - [anon_sym_LPAREN] = ACTIONS(27), - [anon_sym_LBRACK] = ACTIONS(29), - [anon_sym_LT_LT_LT] = ACTIONS(31), + [anon_sym_LT_LPAREN] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_DASH] = ACTIONS(23), + [anon_sym_PLUS] = ACTIONS(23), + [anon_sym_BANG] = ACTIONS(23), + [anon_sym_if] = ACTIONS(25), + [anon_sym_let] = ACTIONS(27), + [anon_sym_LPAREN] = ACTIONS(29), + [anon_sym_LBRACK] = ACTIONS(31), + [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(2)] = { - [sym_base_ten] = STATE(237), - [sym_octal] = STATE(237), - [sym_hex] = STATE(237), - [sym_binary] = STATE(237), - [sym_integer] = STATE(242), - [sym_signed_integer] = STATE(150), - [sym_unsigned_integer] = STATE(150), - [sym_number] = STATE(104), - [sym__float] = STATE(105), - [sym_scalar] = STATE(150), - [sym_boolean] = STATE(150), - [sym_function_call] = STATE(150), - [sym_method_call] = STATE(150), - [sym_expression] = STATE(161), - [sym_unary_expression] = STATE(150), - [sym_binary_expression] = STATE(150), - [sym_if] = STATE(150), - [sym_let_in] = STATE(150), - [sym_identity_path] = STATE(150), - [sym_self_path] = STATE(150), - [sym_parenthesis] = STATE(150), - [sym_list] = STATE(150), - [sym_struct_definition] = STATE(118), - [sym_dictionary_construction] = STATE(91), - [sym_closure_definition] = STATE(150), - [sym_formula] = STATE(150), + [sym_base_ten] = STATE(351), + [sym_octal] = STATE(351), + [sym_hex] = STATE(351), + [sym_binary] = STATE(351), + [sym_integer] = STATE(365), + [sym_signed_integer] = STATE(184), + [sym_unsigned_integer] = STATE(184), + [sym_number] = STATE(140), + [sym__float] = STATE(141), + [sym_scalar] = STATE(184), + [sym_vector2] = STATE(184), + [sym_vector3] = STATE(184), + [sym_vector4] = STATE(184), + [sym_boolean] = STATE(184), + [sym_function_call] = STATE(184), + [sym_method_call] = STATE(184), + [sym_expression] = STATE(266), + [sym_unary_expression] = STATE(184), + [sym_binary_expression] = STATE(184), + [sym_if] = STATE(184), + [sym_let_in] = STATE(184), + [sym_identity_path] = STATE(184), + [sym_self_path] = STATE(184), + [sym_parenthesis] = STATE(184), + [sym_list] = STATE(184), + [sym_struct_definition] = STATE(163), + [sym_dictionary_construction] = STATE(124), + [sym_closure_definition] = STATE(184), + [sym_formula] = STATE(184), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2173,64 +2535,68 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [aux_sym_octal_token1] = ACTIONS(13), [aux_sym_hex_token1] = ACTIONS(15), [aux_sym_binary_token1] = ACTIONS(17), - [sym_true] = ACTIONS(19), - [sym_false] = ACTIONS(19), - [anon_sym_COLON] = ACTIONS(33), - [anon_sym_DASH] = ACTIONS(35), - [anon_sym_PLUS] = ACTIONS(35), - [anon_sym_BANG] = ACTIONS(37), - [anon_sym_STAR_STAR] = ACTIONS(39), - [anon_sym_STAR] = ACTIONS(41), - [anon_sym_SLASH] = ACTIONS(41), - [anon_sym_SLASH_SLASH] = ACTIONS(43), - [anon_sym_LT_LT] = ACTIONS(45), - [anon_sym_GT_GT] = ACTIONS(47), - [anon_sym_AMP] = ACTIONS(49), - [anon_sym_PIPE] = ACTIONS(51), - [anon_sym_CARET] = ACTIONS(53), - [anon_sym_GT] = ACTIONS(55), - [anon_sym_GT_EQ] = ACTIONS(57), - [anon_sym_EQ_EQ] = ACTIONS(57), - [anon_sym_LT_EQ] = ACTIONS(57), - [anon_sym_LT] = ACTIONS(55), - [anon_sym_BANG_EQ] = ACTIONS(57), - [anon_sym_AMP_AMP] = ACTIONS(59), - [anon_sym_PIPE_PIPE] = ACTIONS(61), - [anon_sym_DOT_DOT] = ACTIONS(63), - [anon_sym_DOT_DOT_EQ] = ACTIONS(65), - [anon_sym_if] = ACTIONS(23), - [anon_sym_let] = ACTIONS(25), - [anon_sym_LPAREN] = ACTIONS(67), - [anon_sym_LBRACK] = ACTIONS(29), - [anon_sym_LT_LT_LT] = ACTIONS(31), + [anon_sym_LT_LPAREN] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_COLON] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(37), + [anon_sym_PLUS] = ACTIONS(37), + [anon_sym_BANG] = ACTIONS(39), + [anon_sym_STAR_STAR] = ACTIONS(41), + [anon_sym_STAR] = ACTIONS(43), + [anon_sym_SLASH] = ACTIONS(43), + [anon_sym_SLASH_SLASH] = ACTIONS(45), + [anon_sym_LT_LT] = ACTIONS(47), + [anon_sym_GT_GT] = ACTIONS(49), + [anon_sym_AMP] = ACTIONS(51), + [anon_sym_PIPE] = ACTIONS(53), + [anon_sym_CARET] = ACTIONS(55), + [anon_sym_GT] = ACTIONS(57), + [anon_sym_GT_EQ] = ACTIONS(59), + [anon_sym_EQ_EQ] = ACTIONS(59), + [anon_sym_LT_EQ] = ACTIONS(59), + [anon_sym_LT] = ACTIONS(57), + [anon_sym_BANG_EQ] = ACTIONS(59), + [anon_sym_AMP_AMP] = ACTIONS(61), + [anon_sym_PIPE_PIPE] = ACTIONS(63), + [anon_sym_DOT_DOT] = ACTIONS(65), + [anon_sym_DOT_DOT_EQ] = ACTIONS(67), + [anon_sym_if] = ACTIONS(25), + [anon_sym_let] = ACTIONS(27), + [anon_sym_LPAREN] = ACTIONS(69), + [anon_sym_LBRACK] = ACTIONS(31), + [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(3)] = { - [sym_base_ten] = STATE(237), - [sym_octal] = STATE(237), - [sym_hex] = STATE(237), - [sym_binary] = STATE(237), - [sym_integer] = STATE(242), - [sym_signed_integer] = STATE(150), - [sym_unsigned_integer] = STATE(150), - [sym_number] = STATE(104), - [sym__float] = STATE(105), - [sym_scalar] = STATE(150), - [sym_boolean] = STATE(150), - [sym_function_call] = STATE(150), - [sym_method_call] = STATE(150), - [sym_expression] = STATE(166), - [sym_unary_expression] = STATE(150), - [sym_binary_expression] = STATE(150), - [sym_if] = STATE(150), - [sym_let_in] = STATE(150), - [sym_identity_path] = STATE(150), - [sym_self_path] = STATE(150), - [sym_parenthesis] = STATE(150), - [sym_list] = STATE(150), - [sym_struct_definition] = STATE(118), - [sym_dictionary_construction] = STATE(91), - [sym_closure_definition] = STATE(150), - [sym_formula] = STATE(150), + [sym_base_ten] = STATE(351), + [sym_octal] = STATE(351), + [sym_hex] = STATE(351), + [sym_binary] = STATE(351), + [sym_integer] = STATE(365), + [sym_signed_integer] = STATE(184), + [sym_unsigned_integer] = STATE(184), + [sym_number] = STATE(140), + [sym__float] = STATE(141), + [sym_scalar] = STATE(184), + [sym_vector2] = STATE(184), + [sym_vector3] = STATE(184), + [sym_vector4] = STATE(184), + [sym_boolean] = STATE(184), + [sym_function_call] = STATE(184), + [sym_method_call] = STATE(184), + [sym_expression] = STATE(256), + [sym_unary_expression] = STATE(184), + [sym_binary_expression] = STATE(184), + [sym_if] = STATE(184), + [sym_let_in] = STATE(184), + [sym_identity_path] = STATE(184), + [sym_self_path] = STATE(184), + [sym_parenthesis] = STATE(184), + [sym_list] = STATE(184), + [sym_struct_definition] = STATE(163), + [sym_dictionary_construction] = STATE(124), + [sym_closure_definition] = STATE(184), + [sym_formula] = STATE(184), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2240,69 +2606,69 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [aux_sym_octal_token1] = ACTIONS(13), [aux_sym_hex_token1] = ACTIONS(15), [aux_sym_binary_token1] = ACTIONS(17), - [sym_true] = ACTIONS(19), - [sym_false] = ACTIONS(19), - [anon_sym_COLON] = ACTIONS(33), - [anon_sym_DASH] = ACTIONS(35), - [anon_sym_PLUS] = ACTIONS(35), - [anon_sym_BANG] = ACTIONS(37), - [anon_sym_STAR_STAR] = ACTIONS(39), - [anon_sym_STAR] = ACTIONS(41), - [anon_sym_SLASH] = ACTIONS(41), - [anon_sym_SLASH_SLASH] = ACTIONS(43), - [anon_sym_LT_LT] = ACTIONS(45), - [anon_sym_GT_GT] = ACTIONS(47), - [anon_sym_AMP] = ACTIONS(49), - [anon_sym_PIPE] = ACTIONS(51), - [anon_sym_CARET] = ACTIONS(53), - [anon_sym_GT] = ACTIONS(55), - [anon_sym_GT_EQ] = ACTIONS(57), - [anon_sym_EQ_EQ] = ACTIONS(57), - [anon_sym_LT_EQ] = ACTIONS(57), - [anon_sym_LT] = ACTIONS(55), - [anon_sym_BANG_EQ] = ACTIONS(57), - [anon_sym_AMP_AMP] = ACTIONS(59), - [anon_sym_PIPE_PIPE] = ACTIONS(61), - [anon_sym_DOT_DOT] = ACTIONS(63), - [anon_sym_DOT_DOT_EQ] = ACTIONS(65), - [anon_sym_if] = ACTIONS(23), - [anon_sym_let] = ACTIONS(25), - [anon_sym_LPAREN] = ACTIONS(67), - [anon_sym_LBRACK] = ACTIONS(29), - [anon_sym_LT_LT_LT] = ACTIONS(31), + [anon_sym_LT_LPAREN] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_COLON] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(37), + [anon_sym_PLUS] = ACTIONS(37), + [anon_sym_BANG] = ACTIONS(39), + [anon_sym_STAR_STAR] = ACTIONS(41), + [anon_sym_STAR] = ACTIONS(43), + [anon_sym_SLASH] = ACTIONS(43), + [anon_sym_SLASH_SLASH] = ACTIONS(45), + [anon_sym_LT_LT] = ACTIONS(47), + [anon_sym_GT_GT] = ACTIONS(49), + [anon_sym_AMP] = ACTIONS(51), + [anon_sym_PIPE] = ACTIONS(53), + [anon_sym_CARET] = ACTIONS(55), + [anon_sym_GT] = ACTIONS(57), + [anon_sym_GT_EQ] = ACTIONS(59), + [anon_sym_EQ_EQ] = ACTIONS(59), + [anon_sym_LT_EQ] = ACTIONS(59), + [anon_sym_LT] = ACTIONS(57), + [anon_sym_BANG_EQ] = ACTIONS(59), + [anon_sym_AMP_AMP] = ACTIONS(61), + [anon_sym_PIPE_PIPE] = ACTIONS(63), + [anon_sym_DOT_DOT] = ACTIONS(65), + [anon_sym_DOT_DOT_EQ] = ACTIONS(67), + [anon_sym_if] = ACTIONS(25), + [anon_sym_let] = ACTIONS(27), + [anon_sym_LPAREN] = ACTIONS(69), + [anon_sym_LBRACK] = ACTIONS(31), + [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(4)] = { - [sym_base_ten] = STATE(237), - [sym_octal] = STATE(237), - [sym_hex] = STATE(237), - [sym_binary] = STATE(237), - [sym_integer] = STATE(242), - [sym_signed_integer] = STATE(150), - [sym_unsigned_integer] = STATE(150), - [sym_number] = STATE(104), - [sym__float] = STATE(105), - [sym_scalar] = STATE(150), - [sym_boolean] = STATE(150), - [sym_function_call] = STATE(150), - [sym_method_call] = STATE(150), - [sym_expression] = STATE(163), - [sym_unary_expression] = STATE(150), - [sym_binary_expression] = STATE(150), - [sym_if] = STATE(150), - [sym_let_in] = STATE(150), - [sym_identity_path] = STATE(150), - [sym_self_path] = STATE(150), - [sym_parenthesis] = STATE(150), - [sym_list] = STATE(150), - [sym_struct_member] = STATE(234), - [sym__struct_final_element] = STATE(254), - [sym_struct_definition] = STATE(118), - [sym_dictionary_member_assignment] = STATE(216), - [sym_dictionary_construction] = STATE(150), - [sym_closure_definition] = STATE(150), - [sym_formula] = STATE(150), - [aux_sym_struct_definition_repeat1] = STATE(204), - [sym_identifier] = ACTIONS(69), + [sym_base_ten] = STATE(351), + [sym_octal] = STATE(351), + [sym_hex] = STATE(351), + [sym_binary] = STATE(351), + [sym_integer] = STATE(365), + [sym_signed_integer] = STATE(184), + [sym_unsigned_integer] = STATE(184), + [sym_number] = STATE(140), + [sym__float] = STATE(141), + [sym_scalar] = STATE(184), + [sym_vector2] = STATE(184), + [sym_vector3] = STATE(184), + [sym_vector4] = STATE(184), + [sym_boolean] = STATE(184), + [sym_function_call] = STATE(184), + [sym_method_call] = STATE(184), + [sym_expression] = STATE(263), + [sym_unary_expression] = STATE(184), + [sym_binary_expression] = STATE(184), + [sym_if] = STATE(184), + [sym_let_in] = STATE(184), + [sym_identity_path] = STATE(184), + [sym_self_path] = STATE(184), + [sym_parenthesis] = STATE(184), + [sym_list] = STATE(184), + [sym_struct_definition] = STATE(163), + [sym_dictionary_construction] = STATE(124), + [sym_closure_definition] = STATE(184), + [sym_formula] = STATE(184), + [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), @@ -2311,51 +2677,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [aux_sym_octal_token1] = ACTIONS(13), [aux_sym_hex_token1] = ACTIONS(15), [aux_sym_binary_token1] = ACTIONS(17), - [sym_true] = ACTIONS(19), - [sym_false] = ACTIONS(19), - [anon_sym_DASH] = ACTIONS(21), - [anon_sym_PLUS] = ACTIONS(21), - [anon_sym_BANG] = ACTIONS(21), - [anon_sym_if] = ACTIONS(23), - [anon_sym_let] = ACTIONS(25), - [anon_sym_LPAREN] = ACTIONS(27), - [anon_sym_RPAREN] = ACTIONS(71), - [anon_sym_LBRACK] = ACTIONS(29), - [sym_varadic_dots] = ACTIONS(73), - [anon_sym_LT_LT_LT] = ACTIONS(31), + [anon_sym_LT_LPAREN] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_COLON] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(37), + [anon_sym_PLUS] = ACTIONS(37), + [anon_sym_BANG] = ACTIONS(39), + [anon_sym_STAR_STAR] = ACTIONS(41), + [anon_sym_STAR] = ACTIONS(43), + [anon_sym_SLASH] = ACTIONS(43), + [anon_sym_SLASH_SLASH] = ACTIONS(45), + [anon_sym_LT_LT] = ACTIONS(47), + [anon_sym_GT_GT] = ACTIONS(49), + [anon_sym_AMP] = ACTIONS(51), + [anon_sym_PIPE] = ACTIONS(53), + [anon_sym_CARET] = ACTIONS(55), + [anon_sym_GT] = ACTIONS(57), + [anon_sym_GT_EQ] = ACTIONS(59), + [anon_sym_EQ_EQ] = ACTIONS(59), + [anon_sym_LT_EQ] = ACTIONS(59), + [anon_sym_LT] = ACTIONS(57), + [anon_sym_BANG_EQ] = ACTIONS(59), + [anon_sym_AMP_AMP] = ACTIONS(61), + [anon_sym_PIPE_PIPE] = ACTIONS(63), + [anon_sym_DOT_DOT] = ACTIONS(65), + [anon_sym_DOT_DOT_EQ] = ACTIONS(67), + [anon_sym_if] = ACTIONS(25), + [anon_sym_let] = ACTIONS(27), + [anon_sym_LPAREN] = ACTIONS(69), + [anon_sym_LBRACK] = ACTIONS(31), + [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(5)] = { - [sym_base_ten] = STATE(237), - [sym_octal] = STATE(237), - [sym_hex] = STATE(237), - [sym_binary] = STATE(237), - [sym_integer] = STATE(242), - [sym_signed_integer] = STATE(150), - [sym_unsigned_integer] = STATE(150), - [sym_number] = STATE(104), - [sym__float] = STATE(105), - [sym_scalar] = STATE(150), - [sym_boolean] = STATE(150), - [sym_function_call] = STATE(150), - [sym_method_call] = STATE(150), - [sym_expression] = STATE(162), - [sym_unary_expression] = STATE(150), - [sym_binary_expression] = STATE(150), - [sym_if] = STATE(150), - [sym_let_in] = STATE(150), - [sym_identity_path] = STATE(150), - [sym_self_path] = STATE(150), - [sym_parenthesis] = STATE(150), - [sym_list] = STATE(150), - [sym_struct_member] = STATE(234), - [sym__struct_final_element] = STATE(255), - [sym_struct_definition] = STATE(118), - [sym_dictionary_member_assignment] = STATE(220), - [sym_dictionary_construction] = STATE(150), - [sym_closure_definition] = STATE(150), - [sym_formula] = STATE(150), - [aux_sym_struct_definition_repeat1] = STATE(205), - [sym_identifier] = ACTIONS(69), + [sym_base_ten] = STATE(351), + [sym_octal] = STATE(351), + [sym_hex] = STATE(351), + [sym_binary] = STATE(351), + [sym_integer] = STATE(365), + [sym_signed_integer] = STATE(184), + [sym_unsigned_integer] = STATE(184), + [sym_number] = STATE(140), + [sym__float] = STATE(141), + [sym_scalar] = STATE(184), + [sym_vector2] = STATE(184), + [sym_vector3] = STATE(184), + [sym_vector4] = STATE(184), + [sym_boolean] = STATE(184), + [sym_function_call] = STATE(184), + [sym_method_call] = STATE(184), + [sym_expression] = STATE(271), + [sym_unary_expression] = STATE(184), + [sym_binary_expression] = STATE(184), + [sym_if] = STATE(184), + [sym_let_in] = STATE(184), + [sym_identity_path] = STATE(184), + [sym_self_path] = STATE(184), + [sym_parenthesis] = STATE(184), + [sym_list] = STATE(184), + [sym_struct_member] = STATE(367), + [sym__struct_final_element] = STATE(384), + [sym_struct_definition] = STATE(163), + [sym_dictionary_member_assignment] = STATE(347), + [sym_dictionary_construction] = STATE(184), + [sym_closure_definition] = STATE(184), + [sym_formula] = STATE(184), + [aux_sym_struct_definition_repeat1] = STATE(316), + [sym_identifier] = ACTIONS(71), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), @@ -2364,51 +2752,169 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [aux_sym_octal_token1] = ACTIONS(13), [aux_sym_hex_token1] = ACTIONS(15), [aux_sym_binary_token1] = ACTIONS(17), - [sym_true] = ACTIONS(19), - [sym_false] = ACTIONS(19), - [anon_sym_DASH] = ACTIONS(21), - [anon_sym_PLUS] = ACTIONS(21), - [anon_sym_BANG] = ACTIONS(21), - [anon_sym_if] = ACTIONS(23), - [anon_sym_let] = ACTIONS(25), - [anon_sym_LPAREN] = ACTIONS(27), - [anon_sym_RPAREN] = ACTIONS(75), - [anon_sym_LBRACK] = ACTIONS(29), - [sym_varadic_dots] = ACTIONS(73), - [anon_sym_LT_LT_LT] = ACTIONS(31), + [anon_sym_LT_LPAREN] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_DASH] = ACTIONS(23), + [anon_sym_PLUS] = ACTIONS(23), + [anon_sym_BANG] = ACTIONS(23), + [anon_sym_if] = ACTIONS(25), + [anon_sym_let] = ACTIONS(27), + [anon_sym_LPAREN] = ACTIONS(29), + [anon_sym_RPAREN] = ACTIONS(73), + [anon_sym_LBRACK] = ACTIONS(31), + [sym_varadic_dots] = ACTIONS(75), + [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(6)] = { - [sym_base_ten] = STATE(237), - [sym_octal] = STATE(237), - [sym_hex] = STATE(237), - [sym_binary] = STATE(237), - [sym_integer] = STATE(242), - [sym_signed_integer] = STATE(150), - [sym_unsigned_integer] = STATE(150), - [sym_number] = STATE(104), - [sym__float] = STATE(105), - [sym_scalar] = STATE(150), - [sym_boolean] = STATE(150), - [sym_function_call] = STATE(150), - [sym_method_call] = STATE(150), - [sym_expression] = STATE(163), - [sym_unary_expression] = STATE(150), - [sym_binary_expression] = STATE(150), - [sym_if] = STATE(150), - [sym_let_in] = STATE(150), - [sym_identity_path] = STATE(150), - [sym_self_path] = STATE(150), - [sym_parenthesis] = STATE(150), - [sym_list] = STATE(150), - [sym_struct_member] = STATE(234), - [sym__struct_final_element] = STATE(254), - [sym_struct_definition] = STATE(118), - [sym_dictionary_member_assignment] = STATE(220), - [sym_dictionary_construction] = STATE(150), - [sym_closure_definition] = STATE(150), - [sym_formula] = STATE(150), - [aux_sym_struct_definition_repeat1] = STATE(204), - [sym_identifier] = ACTIONS(69), + [sym_base_ten] = STATE(351), + [sym_octal] = STATE(351), + [sym_hex] = STATE(351), + [sym_binary] = STATE(351), + [sym_integer] = STATE(365), + [sym_signed_integer] = STATE(184), + [sym_unsigned_integer] = STATE(184), + [sym_number] = STATE(140), + [sym__float] = STATE(141), + [sym_scalar] = STATE(184), + [sym_vector2] = STATE(184), + [sym_vector3] = STATE(184), + [sym_vector4] = STATE(184), + [sym_boolean] = STATE(184), + [sym_function_call] = STATE(184), + [sym_method_call] = STATE(184), + [sym_expression] = STATE(262), + [sym_unary_expression] = STATE(184), + [sym_binary_expression] = STATE(184), + [sym_if] = STATE(184), + [sym_let_in] = STATE(184), + [sym_identity_path] = STATE(184), + [sym_self_path] = STATE(184), + [sym_parenthesis] = STATE(184), + [sym_list] = STATE(184), + [sym_struct_member] = STATE(367), + [sym__struct_final_element] = STATE(377), + [sym_struct_definition] = STATE(163), + [sym_dictionary_member_assignment] = STATE(349), + [sym_dictionary_construction] = STATE(184), + [sym_closure_definition] = STATE(184), + [sym_formula] = STATE(184), + [aux_sym_struct_definition_repeat1] = STATE(315), + [sym_identifier] = ACTIONS(71), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(7), + [sym_self] = ACTIONS(9), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [anon_sym_LT_LPAREN] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_DASH] = ACTIONS(23), + [anon_sym_PLUS] = ACTIONS(23), + [anon_sym_BANG] = ACTIONS(23), + [anon_sym_if] = ACTIONS(25), + [anon_sym_let] = ACTIONS(27), + [anon_sym_LPAREN] = ACTIONS(29), + [anon_sym_RPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(31), + [sym_varadic_dots] = ACTIONS(75), + [anon_sym_LT_LT_LT] = ACTIONS(33), + }, + [STATE(7)] = { + [sym_base_ten] = STATE(351), + [sym_octal] = STATE(351), + [sym_hex] = STATE(351), + [sym_binary] = STATE(351), + [sym_integer] = STATE(365), + [sym_signed_integer] = STATE(184), + [sym_unsigned_integer] = STATE(184), + [sym_number] = STATE(140), + [sym__float] = STATE(141), + [sym_scalar] = STATE(184), + [sym_vector2] = STATE(184), + [sym_vector3] = STATE(184), + [sym_vector4] = STATE(184), + [sym_boolean] = STATE(184), + [sym_function_call] = STATE(184), + [sym_method_call] = STATE(184), + [sym_expression] = STATE(271), + [sym_unary_expression] = STATE(184), + [sym_binary_expression] = STATE(184), + [sym_if] = STATE(184), + [sym_let_in] = STATE(184), + [sym_identity_path] = STATE(184), + [sym_self_path] = STATE(184), + [sym_parenthesis] = STATE(184), + [sym_list] = STATE(184), + [sym_struct_member] = STATE(367), + [sym__struct_final_element] = STATE(384), + [sym_struct_definition] = STATE(163), + [sym_dictionary_member_assignment] = STATE(349), + [sym_dictionary_construction] = STATE(184), + [sym_closure_definition] = STATE(184), + [sym_formula] = STATE(184), + [aux_sym_struct_definition_repeat1] = STATE(316), + [sym_identifier] = ACTIONS(71), + [sym_comment] = ACTIONS(3), + [sym__whitespace] = ACTIONS(3), + [sym_string] = ACTIONS(7), + [sym_self] = ACTIONS(9), + [aux_sym_base_ten_token1] = ACTIONS(11), + [aux_sym_octal_token1] = ACTIONS(13), + [aux_sym_hex_token1] = ACTIONS(15), + [aux_sym_binary_token1] = ACTIONS(17), + [anon_sym_LT_LPAREN] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_DASH] = ACTIONS(23), + [anon_sym_PLUS] = ACTIONS(23), + [anon_sym_BANG] = ACTIONS(23), + [anon_sym_if] = ACTIONS(25), + [anon_sym_let] = ACTIONS(27), + [anon_sym_LPAREN] = ACTIONS(29), + [anon_sym_RPAREN] = ACTIONS(77), + [anon_sym_LBRACK] = ACTIONS(31), + [sym_varadic_dots] = ACTIONS(75), + [anon_sym_LT_LT_LT] = ACTIONS(33), + }, + [STATE(8)] = { + [sym_base_ten] = STATE(351), + [sym_octal] = STATE(351), + [sym_hex] = STATE(351), + [sym_binary] = STATE(351), + [sym_integer] = STATE(365), + [sym_signed_integer] = STATE(184), + [sym_unsigned_integer] = STATE(184), + [sym_number] = STATE(140), + [sym__float] = STATE(141), + [sym_scalar] = STATE(184), + [sym_vector2] = STATE(184), + [sym_vector3] = STATE(184), + [sym_vector4] = STATE(184), + [sym_boolean] = STATE(184), + [sym_function_call] = STATE(184), + [sym_method_call] = STATE(184), + [sym_expression] = STATE(264), + [sym_unary_expression] = STATE(184), + [sym_binary_expression] = STATE(184), + [sym_if] = STATE(184), + [sym_let_in] = STATE(184), + [sym_identity_path] = STATE(184), + [sym_self_path] = STATE(184), + [sym_parenthesis] = STATE(184), + [sym_list] = STATE(184), + [sym_struct_member] = STATE(367), + [sym__struct_final_element] = STATE(392), + [sym_struct_definition] = STATE(163), + [sym_dictionary_member_assignment] = STATE(333), + [sym_dictionary_construction] = STATE(184), + [sym_closure_definition] = STATE(184), + [sym_formula] = STATE(184), + [aux_sym_struct_definition_repeat1] = STATE(317), + [sym_identifier] = ACTIONS(71), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), @@ -2417,23 +2923,24 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [aux_sym_octal_token1] = ACTIONS(13), [aux_sym_hex_token1] = ACTIONS(15), [aux_sym_binary_token1] = ACTIONS(17), - [sym_true] = ACTIONS(19), - [sym_false] = ACTIONS(19), - [anon_sym_DASH] = ACTIONS(21), - [anon_sym_PLUS] = ACTIONS(21), - [anon_sym_BANG] = ACTIONS(21), - [anon_sym_if] = ACTIONS(23), - [anon_sym_let] = ACTIONS(25), - [anon_sym_LPAREN] = ACTIONS(27), - [anon_sym_RPAREN] = ACTIONS(75), - [anon_sym_LBRACK] = ACTIONS(29), - [sym_varadic_dots] = ACTIONS(73), - [anon_sym_LT_LT_LT] = ACTIONS(31), + [anon_sym_LT_LPAREN] = ACTIONS(19), + [sym_true] = ACTIONS(21), + [sym_false] = ACTIONS(21), + [anon_sym_DASH] = ACTIONS(23), + [anon_sym_PLUS] = ACTIONS(23), + [anon_sym_BANG] = ACTIONS(23), + [anon_sym_if] = ACTIONS(25), + [anon_sym_let] = ACTIONS(27), + [anon_sym_LPAREN] = ACTIONS(29), + [anon_sym_RPAREN] = ACTIONS(79), + [anon_sym_LBRACK] = ACTIONS(31), + [sym_varadic_dots] = ACTIONS(75), + [anon_sym_LT_LT_LT] = ACTIONS(33), }, }; static const uint16_t ts_small_parse_table[] = { - [0] = 24, + [0] = 25, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2448,49 +2955,54 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - ACTIONS(77), 1, + ACTIONS(81), 1, anon_sym_RBRACK, - STATE(9), 1, + STATE(11), 1, aux_sym_list_repeat1, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(156), 1, + STATE(206), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -2505,64 +3017,69 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [96] = 24, - ACTIONS(79), 1, + [102] = 25, + ACTIONS(83), 1, sym_identifier, - ACTIONS(82), 1, + ACTIONS(86), 1, sym_string, - ACTIONS(85), 1, + ACTIONS(89), 1, sym_self, - ACTIONS(88), 1, + ACTIONS(92), 1, aux_sym_base_ten_token1, - ACTIONS(91), 1, + ACTIONS(95), 1, aux_sym_octal_token1, - ACTIONS(94), 1, + ACTIONS(98), 1, aux_sym_hex_token1, - ACTIONS(97), 1, + ACTIONS(101), 1, aux_sym_binary_token1, - ACTIONS(106), 1, + ACTIONS(104), 1, + anon_sym_LT_LPAREN, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(109), 1, + ACTIONS(116), 1, anon_sym_let, - ACTIONS(112), 1, + ACTIONS(119), 1, anon_sym_LPAREN, - ACTIONS(115), 1, + ACTIONS(122), 1, anon_sym_LBRACK, - ACTIONS(118), 1, + ACTIONS(125), 1, anon_sym_RBRACK, - ACTIONS(120), 1, + ACTIONS(127), 1, anon_sym_LT_LT_LT, - STATE(8), 1, + STATE(10), 1, aux_sym_list_repeat1, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(167), 1, + STATE(270), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(100), 2, + ACTIONS(107), 2, sym_true, sym_false, - ACTIONS(103), 3, + ACTIONS(110), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -2577,7 +3094,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [192] = 24, + [204] = 25, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2592,49 +3109,54 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - ACTIONS(123), 1, + ACTIONS(130), 1, anon_sym_RBRACK, - STATE(8), 1, + STATE(10), 1, aux_sym_list_repeat1, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(155), 1, + STATE(212), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -2649,7 +3171,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [288] = 24, + [306] = 25, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2664,49 +3186,54 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - ACTIONS(125), 1, + ACTIONS(132), 1, anon_sym_RBRACK, - STATE(11), 1, + STATE(10), 1, aux_sym_list_repeat1, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(158), 1, + STATE(234), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -2721,7 +3248,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [384] = 24, + [408] = 25, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2736,49 +3263,54 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - ACTIONS(127), 1, + ACTIONS(134), 1, anon_sym_RBRACK, - STATE(8), 1, + STATE(12), 1, aux_sym_list_repeat1, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(159), 1, + STATE(233), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -2793,7 +3325,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [480] = 22, + [510] = 25, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2808,45 +3340,54 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + ACTIONS(136), 1, + anon_sym_RBRACK, + STATE(15), 1, + aux_sym_list_repeat1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(133), 1, + STATE(238), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -2861,7 +3402,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [570] = 22, + [612] = 25, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -2876,45 +3417,54 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + ACTIONS(138), 1, + anon_sym_RBRACK, + STATE(10), 1, + aux_sym_list_repeat1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(128), 1, + STATE(239), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -2929,60 +3479,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [660] = 22, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [714] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(140), 1, + sym_identifier, + ACTIONS(142), 1, + sym_string, + ACTIONS(144), 1, + sym_self, + ACTIONS(146), 1, + aux_sym_base_ten_token1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(86), 1, sym_number, - STATE(105), 1, + STATE(87), 1, sym__float, - STATE(118), 1, + STATE(94), 1, sym_struct_definition, - STATE(119), 1, + STATE(110), 1, sym_expression, - STATE(242), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -2997,7 +3552,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [750] = 22, + [810] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3012,45 +3567,50 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, - sym_struct_definition, - STATE(120), 1, + STATE(162), 1, sym_expression, - STATE(242), 1, + STATE(163), 1, + sym_struct_definition, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -3065,7 +3625,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [840] = 22, + [906] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3080,45 +3640,50 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(121), 1, + STATE(164), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -3133,60 +3698,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [930] = 22, + [1002] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(164), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(166), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(168), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(170), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(180), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(182), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(184), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(186), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(193), 1, sym_number, - STATE(59), 1, + STATE(194), 1, sym__float, - STATE(60), 1, + STATE(209), 1, sym_struct_definition, - STATE(61), 1, + STATE(221), 1, sym_expression, - STATE(233), 1, + STATE(362), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(174), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(176), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(244), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -3201,60 +3771,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1020] = 22, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [1098] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(140), 1, + sym_identifier, + ACTIONS(142), 1, + sym_string, + ACTIONS(144), 1, + sym_self, + ACTIONS(146), 1, + aux_sym_base_ten_token1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(86), 1, sym_number, - STATE(105), 1, + STATE(87), 1, sym__float, - STATE(118), 1, + STATE(94), 1, sym_struct_definition, - STATE(165), 1, + STATE(118), 1, sym_expression, - STATE(242), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -3269,7 +3844,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1110] = 22, + [1194] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3284,45 +3859,50 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(127), 1, + STATE(272), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -3337,7 +3917,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1200] = 22, + [1290] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3352,45 +3932,50 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(154), 1, + STATE(171), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -3405,7 +3990,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1290] = 22, + [1386] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3420,45 +4005,50 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(160), 1, + STATE(196), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -3473,7 +4063,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1380] = 22, + [1482] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3488,45 +4078,50 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(131), 1, + STATE(237), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -3541,7 +4136,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1470] = 22, + [1578] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3556,45 +4151,50 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(122), 1, + STATE(170), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -3609,7 +4209,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1560] = 22, + [1674] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3624,45 +4224,50 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(135), 1, + STATE(167), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -3677,7 +4282,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1650] = 22, + [1770] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3692,45 +4297,50 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(157), 1, + STATE(169), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -3745,60 +4355,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1740] = 22, + [1866] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, - sym_identifier, - ACTIONS(131), 1, - sym_string, - ACTIONS(133), 1, - sym_self, - ACTIONS(135), 1, - aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(140), 1, sym_number, - STATE(59), 1, + STATE(141), 1, sym__float, - STATE(60), 1, + STATE(163), 1, sym_struct_definition, - STATE(62), 1, + STATE(207), 1, sym_expression, - STATE(233), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -3813,60 +4428,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1830] = 22, + [1962] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(164), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(166), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(168), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(170), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(180), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(182), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(184), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(186), 1, anon_sym_LT_LT_LT, - STATE(3), 1, - sym_expression, - STATE(58), 1, + STATE(193), 1, sym_number, - STATE(59), 1, + STATE(194), 1, sym__float, - STATE(60), 1, + STATE(208), 1, + sym_expression, + STATE(209), 1, sym_struct_definition, - STATE(233), 1, + STATE(362), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(174), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(176), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(244), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -3881,60 +4501,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1920] = 22, + [2058] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(164), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(166), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(168), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(170), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(180), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(182), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(184), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(186), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(193), 1, sym_number, - STATE(59), 1, + STATE(194), 1, sym__float, - STATE(60), 1, + STATE(209), 1, sym_struct_definition, - STATE(66), 1, + STATE(245), 1, sym_expression, - STATE(233), 1, + STATE(362), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(174), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(176), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(244), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -3949,60 +4574,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2010] = 22, + [2154] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(140), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(142), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(144), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(146), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(86), 1, sym_number, - STATE(59), 1, + STATE(87), 1, sym__float, - STATE(60), 1, + STATE(94), 1, sym_struct_definition, - STATE(71), 1, + STATE(95), 1, sym_expression, - STATE(233), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4017,60 +4647,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2100] = 22, + [2250] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(140), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(142), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(144), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(146), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(86), 1, sym_number, - STATE(59), 1, + STATE(87), 1, sym__float, - STATE(60), 1, + STATE(94), 1, sym_struct_definition, - STATE(72), 1, + STATE(98), 1, sym_expression, - STATE(233), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4085,60 +4720,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2190] = 22, + [2346] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(140), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(142), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(144), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(146), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(86), 1, sym_number, - STATE(59), 1, + STATE(87), 1, sym__float, - STATE(60), 1, + STATE(94), 1, sym_struct_definition, - STATE(73), 1, + STATE(103), 1, sym_expression, - STATE(233), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4153,60 +4793,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2280] = 22, + [2442] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(140), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(142), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(144), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(146), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(86), 1, sym_number, - STATE(59), 1, + STATE(87), 1, sym__float, - STATE(60), 1, + STATE(94), 1, sym_struct_definition, - STATE(74), 1, + STATE(104), 1, sym_expression, - STATE(233), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4221,60 +4866,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2370] = 22, + [2538] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(140), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(142), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(144), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(146), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(86), 1, sym_number, - STATE(59), 1, + STATE(87), 1, sym__float, - STATE(60), 1, + STATE(94), 1, sym_struct_definition, - STATE(75), 1, + STATE(105), 1, sym_expression, - STATE(233), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4289,60 +4939,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2460] = 22, + [2634] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(140), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(142), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(144), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(146), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(86), 1, sym_number, - STATE(59), 1, + STATE(87), 1, sym__float, - STATE(60), 1, + STATE(94), 1, sym_struct_definition, - STATE(76), 1, + STATE(106), 1, sym_expression, - STATE(233), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4357,60 +5012,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2550] = 22, + [2730] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(140), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(142), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(144), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(146), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(86), 1, sym_number, - STATE(59), 1, + STATE(87), 1, sym__float, - STATE(60), 1, + STATE(94), 1, sym_struct_definition, - STATE(77), 1, + STATE(107), 1, sym_expression, - STATE(233), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4425,60 +5085,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2640] = 22, + [2826] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(140), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(142), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(144), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(146), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(86), 1, sym_number, - STATE(59), 1, + STATE(87), 1, sym__float, - STATE(60), 1, + STATE(94), 1, sym_struct_definition, - STATE(78), 1, + STATE(108), 1, sym_expression, - STATE(233), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4493,60 +5158,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2730] = 22, + [2922] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(140), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(142), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(144), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(146), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(86), 1, sym_number, - STATE(59), 1, + STATE(87), 1, sym__float, - STATE(60), 1, + STATE(94), 1, sym_struct_definition, - STATE(79), 1, + STATE(109), 1, sym_expression, - STATE(233), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4561,60 +5231,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2820] = 22, + [3018] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, - sym_identifier, - ACTIONS(131), 1, - sym_string, - ACTIONS(133), 1, - sym_self, - ACTIONS(135), 1, - aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(140), 1, sym_number, - STATE(59), 1, + STATE(141), 1, sym__float, - STATE(60), 1, + STATE(163), 1, sym_struct_definition, - STATE(80), 1, + STATE(274), 1, sym_expression, - STATE(233), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4629,60 +5304,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2910] = 22, + [3114] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(140), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(142), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(144), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(146), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(86), 1, sym_number, - STATE(59), 1, + STATE(87), 1, sym__float, - STATE(60), 1, + STATE(94), 1, sym_struct_definition, - STATE(81), 1, + STATE(111), 1, sym_expression, - STATE(233), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4697,60 +5377,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3000] = 22, + [3210] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(140), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(142), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(144), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(146), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(2), 1, - sym_expression, - STATE(58), 1, + STATE(86), 1, sym_number, - STATE(59), 1, + STATE(87), 1, sym__float, - STATE(60), 1, + STATE(94), 1, sym_struct_definition, - STATE(233), 1, + STATE(112), 1, + sym_expression, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4765,60 +5450,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3090] = 22, + [3306] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(140), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(142), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(144), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(146), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(86), 1, sym_number, - STATE(59), 1, + STATE(87), 1, sym__float, - STATE(60), 1, + STATE(94), 1, sym_struct_definition, - STATE(82), 1, + STATE(113), 1, sym_expression, - STATE(233), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4833,60 +5523,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3180] = 22, + [3402] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, - sym_identifier, - ACTIONS(131), 1, - sym_string, - ACTIONS(133), 1, - sym_self, - ACTIONS(135), 1, - aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(140), 1, sym_number, - STATE(59), 1, + STATE(141), 1, sym__float, - STATE(60), 1, + STATE(163), 1, sym_struct_definition, - STATE(84), 1, + STATE(172), 1, sym_expression, - STATE(233), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4901,60 +5596,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3270] = 22, + [3498] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(129), 1, + ACTIONS(140), 1, sym_identifier, - ACTIONS(131), 1, + ACTIONS(142), 1, sym_string, - ACTIONS(133), 1, + ACTIONS(144), 1, sym_self, - ACTIONS(135), 1, + ACTIONS(146), 1, aux_sym_base_ten_token1, - ACTIONS(141), 1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(143), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(145), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(147), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(149), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(58), 1, + STATE(86), 1, sym_number, - STATE(59), 1, + STATE(87), 1, sym__float, - STATE(60), 1, + STATE(94), 1, sym_struct_definition, - STATE(85), 1, + STATE(114), 1, sym_expression, - STATE(233), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(137), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(139), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(96), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -4969,60 +5669,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3360] = 22, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [3594] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(140), 1, + sym_identifier, + ACTIONS(142), 1, + sym_string, + ACTIONS(144), 1, + sym_self, + ACTIONS(146), 1, + aux_sym_base_ten_token1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(156), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(158), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(160), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(162), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(86), 1, sym_number, - STATE(105), 1, + STATE(87), 1, sym__float, - STATE(118), 1, + STATE(94), 1, sym_struct_definition, - STATE(137), 1, + STATE(116), 1, sym_expression, - STATE(242), 1, + STATE(352), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(150), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(152), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(138), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -5037,7 +5742,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3450] = 22, + [3690] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5052,45 +5757,50 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, - anon_sym_if, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, ACTIONS(25), 1, - anon_sym_let, + anon_sym_if, ACTIONS(27), 1, - anon_sym_LPAREN, + anon_sym_let, ACTIONS(29), 1, - anon_sym_LBRACK, + anon_sym_LPAREN, ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(118), 1, + STATE(163), 1, sym_struct_definition, - STATE(138), 1, + STATE(261), 1, sym_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(184), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -5105,60 +5815,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3540] = 22, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [3786] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(180), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(182), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(184), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(186), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(193), 1, sym_number, - STATE(105), 1, + STATE(194), 1, sym__float, - STATE(115), 1, - sym_expression, - STATE(118), 1, + STATE(209), 1, sym_struct_definition, - STATE(242), 1, + STATE(210), 1, + sym_expression, + STATE(362), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(174), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(176), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(244), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -5173,60 +5888,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3630] = 22, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [3882] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(180), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(182), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(184), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(186), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(193), 1, sym_number, - STATE(105), 1, + STATE(194), 1, sym__float, - STATE(118), 1, + STATE(209), 1, sym_struct_definition, - STATE(126), 1, + STATE(215), 1, sym_expression, - STATE(242), 1, + STATE(362), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(174), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(176), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(244), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -5241,60 +5961,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3720] = 22, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [3978] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(180), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(182), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(184), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(186), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(193), 1, sym_number, - STATE(105), 1, + STATE(194), 1, sym__float, - STATE(118), 1, + STATE(209), 1, sym_struct_definition, - STATE(124), 1, + STATE(218), 1, sym_expression, - STATE(242), 1, + STATE(362), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(174), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(176), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(244), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -5309,60 +6034,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3810] = 22, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [4074] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(180), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(182), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(184), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(186), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(193), 1, sym_number, - STATE(105), 1, + STATE(194), 1, sym__float, - STATE(118), 1, + STATE(209), 1, sym_struct_definition, - STATE(139), 1, + STATE(219), 1, sym_expression, - STATE(242), 1, + STATE(362), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(174), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(176), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(244), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -5377,60 +6107,65 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3900] = 22, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [4170] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(23), 1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(180), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(182), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(184), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(186), 1, anon_sym_LT_LT_LT, - STATE(104), 1, + STATE(193), 1, sym_number, - STATE(105), 1, + STATE(194), 1, sym__float, - STATE(118), 1, + STATE(209), 1, sym_struct_definition, - STATE(136), 1, + STATE(220), 1, sym_expression, - STATE(242), 1, + STATE(362), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, + ACTIONS(174), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(176), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(150), 17, + STATE(244), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, sym_boolean, sym_function_call, sym_method_call, @@ -5445,43 +6180,5364 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3990] = 4, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(155), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(151), 18, + [4266] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, sym_self, + ACTIONS(170), 1, aux_sym_base_ten_token1, - anon_sym_DOT, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(241), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, sym_true, sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [4362] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(222), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [4458] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(223), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [4554] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(224), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [4650] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(225), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [4746] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(226), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [4842] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(227), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [4938] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(228), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [5034] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(229), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [5130] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(231), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [5226] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(232), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [5322] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(140), 1, + sym_identifier, + ACTIONS(142), 1, + sym_string, + ACTIONS(144), 1, + sym_self, + ACTIONS(146), 1, + aux_sym_base_ten_token1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, + anon_sym_if, + ACTIONS(156), 1, + anon_sym_let, + ACTIONS(158), 1, + anon_sym_LPAREN, + ACTIONS(160), 1, + anon_sym_LBRACK, + ACTIONS(162), 1, + anon_sym_LT_LT_LT, + STATE(3), 1, + sym_expression, + STATE(86), 1, + sym_number, + STATE(87), 1, + sym__float, + STATE(94), 1, + sym_struct_definition, + STATE(352), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(150), 2, + sym_true, + sym_false, + ACTIONS(152), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(138), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [5418] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(140), 1, + sym_number, + STATE(141), 1, + sym__float, + STATE(163), 1, + sym_struct_definition, + STATE(174), 1, + sym_expression, + STATE(365), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(184), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [5514] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(140), 1, + sym_number, + STATE(141), 1, + sym__float, + STATE(154), 1, + sym_expression, + STATE(163), 1, + sym_struct_definition, + STATE(365), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(184), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [5610] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(140), 1, + sym_number, + STATE(141), 1, + sym__float, + STATE(155), 1, + sym_expression, + STATE(163), 1, + sym_struct_definition, + STATE(365), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(184), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [5706] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(140), 1, + sym_number, + STATE(141), 1, + sym__float, + STATE(156), 1, + sym_expression, + STATE(163), 1, + sym_struct_definition, + STATE(365), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(184), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [5802] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(140), 1, + sym_number, + STATE(141), 1, + sym__float, + STATE(157), 1, + sym_expression, + STATE(163), 1, + sym_struct_definition, + STATE(365), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(184), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [5898] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(140), 1, + sym_number, + STATE(141), 1, + sym__float, + STATE(158), 1, + sym_expression, + STATE(163), 1, + sym_struct_definition, + STATE(365), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(184), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [5994] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(140), 1, + sym_number, + STATE(141), 1, + sym__float, + STATE(159), 1, + sym_expression, + STATE(163), 1, + sym_struct_definition, + STATE(365), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(184), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6090] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(140), 1, + sym_number, + STATE(141), 1, + sym__float, + STATE(160), 1, + sym_expression, + STATE(163), 1, + sym_struct_definition, + STATE(365), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(184), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6186] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(235), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6282] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(236), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6378] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(242), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6474] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(140), 1, + sym_number, + STATE(141), 1, + sym__float, + STATE(161), 1, + sym_expression, + STATE(163), 1, + sym_struct_definition, + STATE(365), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(184), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6570] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(240), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6666] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(205), 1, + sym_expression, + STATE(209), 1, + sym_struct_definition, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6762] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(164), 1, + sym_identifier, + ACTIONS(166), 1, + sym_string, + ACTIONS(168), 1, + sym_self, + ACTIONS(170), 1, + aux_sym_base_ten_token1, + ACTIONS(172), 1, + anon_sym_LT_LPAREN, + ACTIONS(178), 1, + anon_sym_if, + ACTIONS(180), 1, + anon_sym_let, + ACTIONS(182), 1, + anon_sym_LPAREN, + ACTIONS(184), 1, + anon_sym_LBRACK, + ACTIONS(186), 1, + anon_sym_LT_LT_LT, + STATE(193), 1, + sym_number, + STATE(194), 1, + sym__float, + STATE(209), 1, + sym_struct_definition, + STATE(269), 1, + sym_expression, + STATE(362), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(174), 2, + sym_true, + sym_false, + ACTIONS(176), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(244), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6858] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(140), 1, + sym_identifier, + ACTIONS(142), 1, + sym_string, + ACTIONS(144), 1, + sym_self, + ACTIONS(146), 1, + aux_sym_base_ten_token1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, + anon_sym_if, + ACTIONS(156), 1, + anon_sym_let, + ACTIONS(158), 1, + anon_sym_LPAREN, + ACTIONS(160), 1, + anon_sym_LBRACK, + ACTIONS(162), 1, + anon_sym_LT_LT_LT, + STATE(4), 1, + sym_expression, + STATE(86), 1, + sym_number, + STATE(87), 1, + sym__float, + STATE(94), 1, + sym_struct_definition, + STATE(352), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(150), 2, + sym_true, + sym_false, + ACTIONS(152), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(138), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6954] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(140), 1, + sym_identifier, + ACTIONS(142), 1, + sym_string, + ACTIONS(144), 1, + sym_self, + ACTIONS(146), 1, + aux_sym_base_ten_token1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, + anon_sym_if, + ACTIONS(156), 1, + anon_sym_let, + ACTIONS(158), 1, + anon_sym_LPAREN, + ACTIONS(160), 1, + anon_sym_LBRACK, + ACTIONS(162), 1, + anon_sym_LT_LT_LT, + STATE(2), 1, + sym_expression, + STATE(86), 1, + sym_number, + STATE(87), 1, + sym__float, + STATE(94), 1, + sym_struct_definition, + STATE(352), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(150), 2, + sym_true, + sym_false, + ACTIONS(152), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(138), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [7050] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(140), 1, + sym_number, + STATE(141), 1, + sym__float, + STATE(163), 1, + sym_struct_definition, + STATE(273), 1, + sym_expression, + STATE(365), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(184), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [7146] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(140), 1, + sym_identifier, + ACTIONS(142), 1, + sym_string, + ACTIONS(144), 1, + sym_self, + ACTIONS(146), 1, + aux_sym_base_ten_token1, + ACTIONS(148), 1, + anon_sym_LT_LPAREN, + ACTIONS(154), 1, + anon_sym_if, + ACTIONS(156), 1, + anon_sym_let, + ACTIONS(158), 1, + anon_sym_LPAREN, + ACTIONS(160), 1, + anon_sym_LBRACK, + ACTIONS(162), 1, + anon_sym_LT_LT_LT, + STATE(86), 1, + sym_number, + STATE(87), 1, + sym__float, + STATE(94), 1, + sym_struct_definition, + STATE(117), 1, + sym_expression, + STATE(352), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(150), 2, + sym_true, + sym_false, + ACTIONS(152), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(138), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [7242] = 4, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(192), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(188), 18, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + anon_sym_DOT, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(190), 23, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + sym_unit_quote, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [7296] = 5, + ACTIONS(198), 1, + anon_sym_DOT, + STATE(89), 1, + aux_sym_identity_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(194), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(196), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [7350] = 4, + ACTIONS(204), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(200), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(202), 23, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + sym_unit_quote, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [7402] = 5, + ACTIONS(210), 1, + sym_unit_quote, + STATE(122), 1, + sym__unit, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(206), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(208), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [7456] = 5, + ACTIONS(216), 1, + anon_sym_DOT, + STATE(88), 1, + aux_sym_identity_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(212), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(214), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [7510] = 5, + ACTIONS(198), 1, + anon_sym_DOT, + STATE(88), 1, + aux_sym_identity_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(219), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(221), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [7564] = 5, + ACTIONS(227), 1, + anon_sym_DOT, + STATE(90), 1, + aux_sym_self_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(223), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(225), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [7618] = 5, + ACTIONS(234), 1, + anon_sym_DOT, + STATE(90), 1, + aux_sym_self_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(230), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(232), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [7672] = 5, + ACTIONS(234), 1, + anon_sym_DOT, + STATE(91), 1, + aux_sym_self_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(236), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(238), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [7726] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(240), 18, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + anon_sym_DOT, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(242), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [7775] = 4, + ACTIONS(248), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(244), 18, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_DASH, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(246), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [7826] = 21, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(47), 1, + anon_sym_LT_LT, + ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(51), 1, + anon_sym_AMP, + ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, + anon_sym_CARET, + ACTIONS(61), 1, + anon_sym_AMP_AMP, + ACTIONS(63), 1, + anon_sym_PIPE_PIPE, + ACTIONS(65), 1, + anon_sym_DOT_DOT, + ACTIONS(67), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(57), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(254), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(59), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(252), 7, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + ACTIONS(250), 9, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_else, + anon_sym_let, + [7911] = 4, + ACTIONS(262), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(258), 18, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_DASH, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(260), 21, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [7962] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(212), 18, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + anon_sym_DOT, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(214), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [8011] = 21, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(47), 1, + anon_sym_LT_LT, + ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(51), 1, + anon_sym_AMP, + ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, + anon_sym_CARET, + ACTIONS(61), 1, + anon_sym_AMP_AMP, + ACTIONS(63), 1, + anon_sym_PIPE_PIPE, + ACTIONS(65), 1, + anon_sym_DOT_DOT, + ACTIONS(67), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(57), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(254), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(59), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(266), 7, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + ACTIONS(264), 9, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_else, + anon_sym_let, + [8096] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(268), 18, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_DASH, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(270), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_DASH_GT, + anon_sym_LT_LT_LT, + [8145] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(272), 18, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_DASH, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(274), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_DASH_GT, + anon_sym_LT_LT_LT, + [8194] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(188), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(190), 23, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + sym_unit_quote, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [8243] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(276), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(278), 23, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + sym_unit_quote, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [8292] = 9, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(280), 15, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(282), 18, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [8353] = 6, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(280), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(282), 20, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [8408] = 7, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(280), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(282), 19, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [8465] = 10, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(254), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(280), 15, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(282), 16, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [8528] = 12, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(47), 1, + anon_sym_LT_LT, + ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(254), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(280), 14, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(282), 15, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [8595] = 14, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(47), 1, + anon_sym_LT_LT, + ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(51), 1, + anon_sym_AMP, + ACTIONS(55), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(254), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(280), 13, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(282), 14, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [8666] = 13, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(47), 1, + anon_sym_LT_LT, + ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(51), 1, + anon_sym_AMP, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(254), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(280), 13, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(282), 15, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [8735] = 15, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(47), 1, + anon_sym_LT_LT, + ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(51), 1, + anon_sym_AMP, + ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(254), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(280), 12, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(282), 14, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [8808] = 17, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(47), 1, + anon_sym_LT_LT, + ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(51), 1, + anon_sym_AMP, + ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(57), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(254), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(59), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(280), 10, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(282), 10, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [8885] = 18, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(47), 1, + anon_sym_LT_LT, + ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(51), 1, + anon_sym_AMP, + ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, + anon_sym_CARET, + ACTIONS(61), 1, + anon_sym_AMP_AMP, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(57), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(254), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(59), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(282), 9, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + ACTIONS(280), 10, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + [8964] = 19, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(47), 1, + anon_sym_LT_LT, + ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(51), 1, + anon_sym_AMP, + ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, + anon_sym_CARET, + ACTIONS(61), 1, + anon_sym_AMP_AMP, + ACTIONS(63), 1, + anon_sym_PIPE_PIPE, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(57), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(254), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(59), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(282), 8, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + ACTIONS(280), 10, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + [9045] = 21, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(47), 1, + anon_sym_LT_LT, + ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(51), 1, + anon_sym_AMP, + ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, + anon_sym_CARET, + ACTIONS(61), 1, + anon_sym_AMP_AMP, + ACTIONS(63), 1, + anon_sym_PIPE_PIPE, + ACTIONS(65), 1, + anon_sym_DOT_DOT, + ACTIONS(67), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(57), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(254), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(59), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(286), 7, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + ACTIONS(284), 9, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_else, + anon_sym_let, + [9130] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(288), 18, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_DASH, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(290), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_DASH_GT, + anon_sym_LT_LT_LT, + [9179] = 21, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(47), 1, + anon_sym_LT_LT, + ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(51), 1, + anon_sym_AMP, + ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, + anon_sym_CARET, + ACTIONS(61), 1, + anon_sym_AMP_AMP, + ACTIONS(63), 1, + anon_sym_PIPE_PIPE, + ACTIONS(65), 1, + anon_sym_DOT_DOT, + ACTIONS(67), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(57), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(254), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(59), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(294), 7, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + ACTIONS(292), 9, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_else, + anon_sym_let, + [9264] = 21, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(47), 1, + anon_sym_LT_LT, + ACTIONS(49), 1, + anon_sym_GT_GT, + ACTIONS(51), 1, + anon_sym_AMP, + ACTIONS(53), 1, + anon_sym_PIPE, + ACTIONS(55), 1, + anon_sym_CARET, + ACTIONS(61), 1, + anon_sym_AMP_AMP, + ACTIONS(63), 1, + anon_sym_PIPE_PIPE, + ACTIONS(65), 1, + anon_sym_DOT_DOT, + ACTIONS(67), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(57), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(254), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(59), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(298), 7, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + ACTIONS(296), 9, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_if, + anon_sym_else, + anon_sym_let, + [9349] = 10, + ACTIONS(35), 1, + anon_sym_COLON, + ACTIONS(41), 1, + anon_sym_STAR_STAR, + ACTIONS(45), 1, + anon_sym_SLASH_SLASH, + ACTIONS(250), 1, + anon_sym_else, + ACTIONS(256), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(43), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(280), 14, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + ACTIONS(282), 18, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [9412] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(300), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(302), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [9460] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(304), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(306), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [9508] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(308), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(310), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [9556] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(312), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(314), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [9604] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(316), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(318), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [9652] = 4, + ACTIONS(244), 1, + anon_sym_else, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(320), 16, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_let, + ACTIONS(322), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [9702] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(320), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(322), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [9750] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(258), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(260), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [9798] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(324), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(326), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [9846] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(328), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(330), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [9894] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(332), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(334), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [9942] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(336), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(338), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [9990] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(340), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(342), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [10038] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(344), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(346), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [10086] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(348), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(350), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [10134] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(352), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(354), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [10182] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(356), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(358), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [10230] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(360), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(362), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [10278] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(364), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(366), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [10326] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(244), 17, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_if, + anon_sym_else, + anon_sym_let, + ACTIONS(246), 22, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [10374] = 4, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(192), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(188), 12, + sym_identifier, + anon_sym_DOT, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_else, + anon_sym_EQ, + ACTIONS(190), 22, + ts_builtin_sym_end, + sym_unit_quote, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [10421] = 4, + ACTIONS(368), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(200), 11, + sym_identifier, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_else, + anon_sym_EQ, + ACTIONS(202), 22, + ts_builtin_sym_end, + sym_unit_quote, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [10466] = 6, + ACTIONS(370), 1, + sym_identifier, + ACTIONS(372), 1, + sym_unit_quote, + STATE(153), 1, + sym__unit, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(206), 10, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_else, + anon_sym_EQ, + ACTIONS(208), 21, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [10515] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(276), 11, + sym_identifier, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_else, + anon_sym_EQ, + ACTIONS(278), 22, + ts_builtin_sym_end, + sym_unit_quote, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [10557] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(188), 11, + sym_identifier, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_else, + anon_sym_EQ, + ACTIONS(190), 22, + ts_builtin_sym_end, + sym_unit_quote, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [10599] = 5, + ACTIONS(374), 1, + anon_sym_DOT, + STATE(144), 1, + aux_sym_identity_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(212), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(214), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10644] = 5, + ACTIONS(377), 1, + anon_sym_DOT, + STATE(149), 1, + aux_sym_identity_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(194), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(196), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10689] = 5, + ACTIONS(379), 1, + anon_sym_DOT, + STATE(146), 1, + aux_sym_self_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(223), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(225), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10734] = 5, + ACTIONS(382), 1, + anon_sym_DOT, + STATE(148), 1, + aux_sym_self_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(236), 8, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(153), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - sym_unit_quote, + anon_sym_EQ, + ACTIONS(238), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -5491,45 +11547,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4043] = 5, - ACTIONS(161), 1, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10779] = 5, + ACTIONS(382), 1, anon_sym_DOT, - STATE(52), 1, - aux_sym_identity_path_repeat1, + STATE(146), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(230), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(159), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(232), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -5539,45 +11587,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4096] = 5, - ACTIONS(168), 1, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10824] = 5, + ACTIONS(377), 1, anon_sym_DOT, - STATE(54), 1, + STATE(144), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(219), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(166), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(221), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -5587,45 +11627,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4149] = 5, - ACTIONS(168), 1, - anon_sym_DOT, - STATE(52), 1, - aux_sym_identity_path_repeat1, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10869] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(170), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(268), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(172), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(270), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -5635,45 +11663,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4202] = 5, - ACTIONS(178), 1, - anon_sym_DOT, - STATE(57), 1, - aux_sym_self_path_repeat1, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [10909] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(212), 9, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(176), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(214), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -5683,45 +11701,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4255] = 5, - ACTIONS(178), 1, - anon_sym_DOT, - STATE(55), 1, - aux_sym_self_path_repeat1, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10949] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(180), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(272), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(182), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(274), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -5731,45 +11737,117 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4308] = 5, - ACTIONS(188), 1, - anon_sym_DOT, - STATE(57), 1, - aux_sym_self_path_repeat1, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [10989] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(184), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(312), 9, anon_sym_STAR, anon_sym_SLASH, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(314), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [11029] = 6, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, + anon_sym_LPAREN, + STATE(188), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(280), 8, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, + anon_sym_EQ, + ACTIONS(282), 20, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_else, - anon_sym_let, - ACTIONS(186), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11075] = 7, + ACTIONS(384), 1, anon_sym_COLON, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + STATE(188), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(280), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(282), 19, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -5779,44 +11857,41 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11123] = 10, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4361] = 4, - ACTIONS(195), 1, - anon_sym_DOT, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + STATE(188), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, + ACTIONS(280), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(193), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - sym_unit_quote, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_EQ, + ACTIONS(282), 16, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -5826,46 +11901,43 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11177] = 11, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4412] = 5, - ACTIONS(201), 1, - sym_unit_quote, - STATE(93), 1, - sym__unit, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + STATE(188), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(197), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(396), 2, anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(280), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(199), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, + anon_sym_EQ, + ACTIONS(282), 14, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -5874,45 +11946,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11233] = 13, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4465] = 4, - ACTIONS(207), 1, - anon_sym_DASH_GT, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, + anon_sym_CARET, + STATE(188), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(203), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, + ACTIONS(390), 2, anon_sym_DASH, - anon_sym_BANG, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(396), 2, anon_sym_LT_LT, - anon_sym_AMP, + anon_sym_GT_GT, + ACTIONS(280), 5, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(205), 20, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, + anon_sym_EQ, + ACTIONS(282), 13, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -5920,51 +11993,44 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4515] = 10, - ACTIONS(33), 1, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11293] = 12, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(213), 1, - anon_sym_else, - ACTIONS(215), 1, - anon_sym_LPAREN, - STATE(95), 1, + ACTIONS(398), 1, + anon_sym_AMP, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(209), 14, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(396), 2, anon_sym_LT_LT, - anon_sym_AMP, + anon_sym_GT_GT, + ACTIONS(280), 5, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - ACTIONS(211), 17, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_GT_GT, + anon_sym_EQ, + ACTIONS(282), 14, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -5973,195 +12039,183 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4577] = 21, - ACTIONS(33), 1, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11351] = 14, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(45), 1, - anon_sym_LT_LT, - ACTIONS(47), 1, - anon_sym_GT_GT, - ACTIONS(49), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(51), 1, - anon_sym_PIPE, - ACTIONS(53), 1, + ACTIONS(400), 1, anon_sym_CARET, - ACTIONS(59), 1, - anon_sym_AMP_AMP, - ACTIONS(61), 1, - anon_sym_PIPE_PIPE, - ACTIONS(63), 1, - anon_sym_DOT_DOT, - ACTIONS(65), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(215), 1, - anon_sym_LPAREN, - STATE(95), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + ACTIONS(396), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(280), 4, anon_sym_GT, anon_sym_LT, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(57), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(282), 13, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(217), 6, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(213), 9, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_else, - anon_sym_let, - [4661] = 4, - ACTIONS(225), 1, - anon_sym_DASH_GT, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11413] = 16, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, + anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_PIPE, + STATE(188), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(221), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, + ACTIONS(280), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(390), 2, anon_sym_DASH, - anon_sym_BANG, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(396), 2, anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, + anon_sym_GT_GT, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, + ACTIONS(406), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(282), 9, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_else, - anon_sym_let, - ACTIONS(223), 20, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11479] = 17, + ACTIONS(384), 1, anon_sym_COLON, - anon_sym_PLUS, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - anon_sym_GT_GT, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4711] = 3, + STATE(188), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - anon_sym_DOT, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(280), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(396), 2, anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, + anon_sym_GT_GT, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(159), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(282), 8, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4759] = 3, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11547] = 4, + ACTIONS(410), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(227), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - anon_sym_DOT, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(244), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(229), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(246), 21, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -6171,105 +12225,86 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [4807] = 21, - ACTIONS(33), 1, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11589] = 18, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(45), 1, - anon_sym_LT_LT, - ACTIONS(47), 1, - anon_sym_GT_GT, - ACTIONS(49), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(51), 1, - anon_sym_PIPE, - ACTIONS(53), 1, + ACTIONS(400), 1, anon_sym_CARET, - ACTIONS(59), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, - ACTIONS(61), 1, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(63), 1, - anon_sym_DOT_DOT, - ACTIONS(65), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(215), 1, - anon_sym_LPAREN, - STATE(95), 1, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(280), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + ACTIONS(396), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(57), 4, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(233), 6, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(231), 9, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, + ACTIONS(282), 7, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_DOT_DOT_EQ, anon_sym_else, - anon_sym_let, - [4891] = 3, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11659] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(235), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_DASH, - anon_sym_BANG, + ACTIONS(340), 9, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(237), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(342), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, - anon_sym_GT_GT, + anon_sym_LT_LT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -6278,42 +12313,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_DASH_GT, - anon_sym_LT_LT_LT, - [4939] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [11699] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(239), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_DASH, - anon_sym_BANG, + ACTIONS(240), 9, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(241), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(242), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -6323,88 +12351,87 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_DASH_GT, - anon_sym_LT_LT_LT, - [4987] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11739] = 20, + ACTIONS(292), 1, + anon_sym_EQ, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, + anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, + anon_sym_AMP_AMP, + ACTIONS(412), 1, + anon_sym_PIPE_PIPE, + ACTIONS(414), 1, + anon_sym_DOT_DOT, + ACTIONS(416), 1, + anon_sym_DOT_DOT_EQ, + STATE(188), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(151), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(396), 2, anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, + anon_sym_GT_GT, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(153), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - sym_unit_quote, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [5035] = 3, + ACTIONS(294), 6, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11813] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(243), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(288), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(245), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - sym_unit_quote, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(290), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -6414,253 +12441,251 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [5083] = 9, - ACTIONS(33), 1, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [11853] = 20, + ACTIONS(296), 1, + anon_sym_EQ, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(215), 1, - anon_sym_LPAREN, - STATE(95), 1, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, + anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, + anon_sym_AMP_AMP, + ACTIONS(412), 1, + anon_sym_PIPE_PIPE, + ACTIONS(414), 1, + anon_sym_DOT_DOT, + ACTIONS(416), 1, + anon_sym_DOT_DOT_EQ, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(209), 15, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(396), 2, anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, + anon_sym_GT_GT, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(211), 17, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(298), 6, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11927] = 20, + ACTIONS(250), 1, + anon_sym_EQ, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, + anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, + ACTIONS(414), 1, + anon_sym_DOT_DOT, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [5143] = 6, - ACTIONS(33), 1, - anon_sym_COLON, - ACTIONS(215), 1, - anon_sym_LPAREN, - STATE(95), 1, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(209), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(396), 2, anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, + anon_sym_GT_GT, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(211), 19, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(252), 6, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12001] = 20, + ACTIONS(284), 1, + anon_sym_EQ, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, + anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, + ACTIONS(414), 1, + anon_sym_DOT_DOT, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [5197] = 7, - ACTIONS(33), 1, - anon_sym_COLON, - ACTIONS(39), 1, - anon_sym_STAR_STAR, - ACTIONS(215), 1, - anon_sym_LPAREN, - STATE(95), 1, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(209), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(396), 2, anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, + anon_sym_GT_GT, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(211), 18, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [5253] = 10, - ACTIONS(33), 1, + ACTIONS(286), 6, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12075] = 20, + ACTIONS(264), 1, + anon_sym_EQ, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(39), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(215), 1, - anon_sym_LPAREN, - STATE(95), 1, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, + anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, + anon_sym_AMP_AMP, + ACTIONS(412), 1, + anon_sym_PIPE_PIPE, + ACTIONS(414), 1, + anon_sym_DOT_DOT, + ACTIONS(416), 1, + anon_sym_DOT_DOT_EQ, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(219), 2, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(209), 15, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(392), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(396), 2, anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, + anon_sym_GT_GT, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(211), 15, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [5315] = 12, - ACTIONS(33), 1, - anon_sym_COLON, - ACTIONS(39), 1, - anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, - ACTIONS(45), 1, - anon_sym_LT_LT, - ACTIONS(47), 1, - anon_sym_GT_GT, - ACTIONS(215), 1, - anon_sym_LPAREN, - STATE(95), 1, - sym_dictionary_construction, + ACTIONS(266), 6, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12149] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(304), 9, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(209), 14, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(211), 14, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(306), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -6669,55 +12694,44 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [5381] = 14, - ACTIONS(33), 1, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [12189] = 9, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(39), 1, - anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, - ACTIONS(45), 1, - anon_sym_LT_LT, - ACTIONS(47), 1, - anon_sym_GT_GT, - ACTIONS(49), 1, - anon_sym_AMP, - ACTIONS(53), 1, - anon_sym_CARET, - ACTIONS(215), 1, + ACTIONS(386), 1, anon_sym_LPAREN, - STATE(95), 1, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(209), 13, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(280), 6, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(211), 13, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(282), 18, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -6725,53 +12739,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [5451] = 13, - ACTIONS(33), 1, - anon_sym_COLON, - ACTIONS(39), 1, - anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, - ACTIONS(45), 1, - anon_sym_LT_LT, - ACTIONS(47), 1, - anon_sym_GT_GT, - ACTIONS(49), 1, - anon_sym_AMP, - ACTIONS(215), 1, - anon_sym_LPAREN, - STATE(95), 1, - sym_dictionary_construction, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12241] = 4, + ACTIONS(262), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(258), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(209), 13, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(211), 14, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(260), 21, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -6780,56 +12776,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [5519] = 15, - ACTIONS(33), 1, - anon_sym_COLON, - ACTIONS(39), 1, - anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, - ACTIONS(45), 1, - anon_sym_LT_LT, - ACTIONS(47), 1, - anon_sym_GT_GT, - ACTIONS(49), 1, - anon_sym_AMP, - ACTIONS(51), 1, - anon_sym_PIPE, - ACTIONS(53), 1, - anon_sym_CARET, - ACTIONS(215), 1, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - STATE(95), 1, - sym_dictionary_construction, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12283] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(300), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(209), 12, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(211), 13, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(302), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -6837,283 +12812,214 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [5591] = 17, - ACTIONS(33), 1, - anon_sym_COLON, - ACTIONS(39), 1, - anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, - ACTIONS(45), 1, - anon_sym_LT_LT, - ACTIONS(47), 1, - anon_sym_GT_GT, - ACTIONS(49), 1, - anon_sym_AMP, - ACTIONS(51), 1, - anon_sym_PIPE, - ACTIONS(53), 1, - anon_sym_CARET, - ACTIONS(215), 1, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - STATE(95), 1, - sym_dictionary_construction, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12322] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(316), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(219), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(318), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(57), 4, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(211), 9, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(209), 10, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_DOT_DOT, - anon_sym_if, anon_sym_else, - anon_sym_let, - [5667] = 18, - ACTIONS(33), 1, - anon_sym_COLON, - ACTIONS(39), 1, - anon_sym_STAR_STAR, - ACTIONS(43), 1, - anon_sym_SLASH_SLASH, - ACTIONS(45), 1, - anon_sym_LT_LT, - ACTIONS(47), 1, - anon_sym_GT_GT, - ACTIONS(49), 1, - anon_sym_AMP, - ACTIONS(51), 1, - anon_sym_PIPE, - ACTIONS(53), 1, - anon_sym_CARET, - ACTIONS(59), 1, - anon_sym_AMP_AMP, - ACTIONS(215), 1, + anon_sym_SEMI, anon_sym_LPAREN, - STATE(95), 1, - sym_dictionary_construction, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12361] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(364), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(219), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(366), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(57), 4, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(211), 8, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(209), 10, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_DOT_DOT, - anon_sym_if, anon_sym_else, - anon_sym_let, - [5745] = 19, - ACTIONS(33), 1, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12400] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(328), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(330), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, - ACTIONS(39), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(49), 1, - anon_sym_AMP, - ACTIONS(51), 1, - anon_sym_PIPE, - ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(59), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(61), 1, anon_sym_PIPE_PIPE, - ACTIONS(215), 1, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - STATE(95), 1, - sym_dictionary_construction, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12439] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(192), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(188), 9, + sym_identifier, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(57), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(211), 7, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(209), 10, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - [5825] = 21, - ACTIONS(33), 1, + ACTIONS(190), 19, + sym_unit_quote, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, - ACTIONS(39), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(49), 1, - anon_sym_AMP, - ACTIONS(51), 1, - anon_sym_PIPE, - ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(59), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(61), 1, anon_sym_PIPE_PIPE, - ACTIONS(63), 1, - anon_sym_DOT_DOT, - ACTIONS(65), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(215), 1, anon_sym_LPAREN, - STATE(95), 1, - sym_dictionary_construction, + [12480] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(324), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(219), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(326), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(57), 4, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(249), 6, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(247), 9, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_else, - anon_sym_let, - [5909] = 3, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12519] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(251), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_DASH, - anon_sym_BANG, + ACTIONS(332), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(253), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(334), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7123,168 +13029,141 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_DASH_GT, - anon_sym_LT_LT_LT, - [5957] = 21, - ACTIONS(33), 1, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12558] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(336), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(338), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, - ACTIONS(39), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(49), 1, - anon_sym_AMP, - ACTIONS(51), 1, - anon_sym_PIPE, - ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(59), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(61), 1, anon_sym_PIPE_PIPE, - ACTIONS(63), 1, - anon_sym_DOT_DOT, - ACTIONS(65), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(215), 1, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - STATE(95), 1, - sym_dictionary_construction, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12597] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(244), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(219), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(246), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(57), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(257), 6, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(255), 9, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, - anon_sym_else, - anon_sym_let, - [6041] = 21, - ACTIONS(33), 1, - anon_sym_COLON, - ACTIONS(39), 1, anon_sym_STAR_STAR, - ACTIONS(43), 1, anon_sym_SLASH_SLASH, - ACTIONS(45), 1, anon_sym_LT_LT, - ACTIONS(47), 1, anon_sym_GT_GT, - ACTIONS(49), 1, - anon_sym_AMP, - ACTIONS(51), 1, - anon_sym_PIPE, - ACTIONS(53), 1, anon_sym_CARET, - ACTIONS(59), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(61), 1, anon_sym_PIPE_PIPE, - ACTIONS(63), 1, - anon_sym_DOT_DOT, - ACTIONS(65), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(215), 1, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - STATE(95), 1, - sym_dictionary_construction, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12636] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(41), 2, + ACTIONS(356), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(55), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(219), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(358), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(57), 4, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(261), 6, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(259), 9, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, anon_sym_else, - anon_sym_let, - [6125] = 3, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12675] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(263), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(344), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(265), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(346), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7294,41 +13173,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6172] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12714] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(267), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(352), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(269), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(354), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7338,41 +13209,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6219] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12753] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(271), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(320), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(273), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(322), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7382,41 +13245,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6266] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12792] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(275), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(348), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(277), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(350), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7426,41 +13281,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6313] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12831] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(279), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(308), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(281), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(310), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7470,42 +13317,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6360] = 4, - ACTIONS(203), 1, anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12870] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(283), 16, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(258), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - ACTIONS(285), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(260), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7515,41 +13353,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6409] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12909] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(287), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(360), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(289), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + anon_sym_EQ, + ACTIONS(362), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7559,41 +13389,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6456] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + [12948] = 4, + ACTIONS(418), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(291), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(200), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(293), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + ACTIONS(202), 20, + sym_identifier, + sym_unit_quote, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7604,40 +13429,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6503] = 3, + [12987] = 5, + STATE(260), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(295), 17, + ACTIONS(420), 2, sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + sym_unit_quote, + ACTIONS(206), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(297), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + ACTIONS(208), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7648,40 +13465,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6550] = 3, + [13028] = 8, + ACTIONS(377), 1, + anon_sym_DOT, + ACTIONS(422), 1, + anon_sym_COLON, + ACTIONS(424), 1, + anon_sym_EQ, + STATE(149), 1, + aux_sym_identity_path_repeat1, + STATE(343), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(283), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(194), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(285), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_COLON, + ACTIONS(196), 16, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7692,40 +13503,80 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6597] = 3, + anon_sym_RPAREN, + [13075] = 20, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, + anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, + anon_sym_AMP_AMP, + ACTIONS(412), 1, + anon_sym_PIPE_PIPE, + ACTIONS(414), 1, + anon_sym_DOT_DOT, + ACTIONS(416), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(428), 1, + anon_sym_EQ, + STATE(188), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(203), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(396), 2, anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(404), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(426), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(406), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13145] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(276), 7, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(205), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + ACTIONS(278), 20, + sym_identifier, + sym_unit_quote, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7736,40 +13587,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6644] = 3, + [13181] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(221), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(188), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(223), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + ACTIONS(190), 20, + sym_identifier, + sym_unit_quote, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7780,40 +13620,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6691] = 3, + [13217] = 5, + ACTIONS(430), 1, + anon_sym_DOT, + STATE(202), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(299), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(194), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(301), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + ACTIONS(196), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7824,40 +13655,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6738] = 3, + [13257] = 5, + ACTIONS(432), 1, + anon_sym_DOT, + STATE(201), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(303), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(236), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(305), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + ACTIONS(238), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7868,40 +13690,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6785] = 3, + [13297] = 5, + ACTIONS(432), 1, + anon_sym_DOT, + STATE(204), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(307), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(230), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(309), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + ACTIONS(232), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7912,40 +13725,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6832] = 3, + [13337] = 5, + ACTIONS(430), 1, + anon_sym_DOT, + STATE(203), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(311), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(219), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(313), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + ACTIONS(221), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -7956,40 +13760,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6879] = 3, + [13377] = 5, + ACTIONS(434), 1, + anon_sym_DOT, + STATE(203), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(212), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(317), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, + ACTIONS(214), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -8000,37 +13795,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [6926] = 4, + [13417] = 5, + ACTIONS(437), 1, + anon_sym_DOT, + STATE(204), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(155), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(151), 12, - sym_identifier, - anon_sym_DOT, + ACTIONS(223), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_else, - anon_sym_EQ, - ACTIONS(153), 22, - ts_builtin_sym_end, - sym_unit_quote, + ACTIONS(225), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8039,82 +13829,226 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, + [13457] = 20, + ACTIONS(440), 1, anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [6973] = 4, - ACTIONS(319), 1, - anon_sym_DOT, + ACTIONS(442), 1, + anon_sym_RPAREN_GT, + ACTIONS(444), 1, + anon_sym_COLON, + ACTIONS(448), 1, + anon_sym_STAR_STAR, + ACTIONS(452), 1, + anon_sym_SLASH_SLASH, + ACTIONS(456), 1, + anon_sym_AMP, + ACTIONS(458), 1, + anon_sym_PIPE, + ACTIONS(460), 1, + anon_sym_CARET, + ACTIONS(466), 1, + anon_sym_AMP_AMP, + ACTIONS(468), 1, + anon_sym_PIPE_PIPE, + ACTIONS(470), 1, + anon_sym_DOT_DOT, + ACTIONS(472), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(474), 1, + anon_sym_LPAREN, + STATE(252), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 11, - sym_identifier, + ACTIONS(446), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(454), 2, + anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(462), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_else, - anon_sym_EQ, - ACTIONS(193), 22, - ts_builtin_sym_end, - sym_unit_quote, + ACTIONS(464), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13526] = 20, + ACTIONS(130), 1, + anon_sym_RBRACK, + ACTIONS(384), 1, anon_sym_COLON, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, + anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, + anon_sym_AMP_AMP, + ACTIONS(412), 1, + anon_sym_PIPE_PIPE, + ACTIONS(414), 1, + anon_sym_DOT_DOT, + ACTIONS(416), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(476), 1, + anon_sym_COMMA, + STATE(188), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(392), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(396), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(404), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(406), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13595] = 19, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, + anon_sym_AMP_AMP, + ACTIONS(412), 1, + anon_sym_PIPE_PIPE, + ACTIONS(414), 1, + anon_sym_DOT_DOT, + ACTIONS(416), 1, + anon_sym_DOT_DOT_EQ, + STATE(188), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(396), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(404), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(478), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + [13662] = 20, + ACTIONS(444), 1, + anon_sym_COLON, + ACTIONS(448), 1, + anon_sym_STAR_STAR, + ACTIONS(452), 1, + anon_sym_SLASH_SLASH, + ACTIONS(456), 1, + anon_sym_AMP, + ACTIONS(458), 1, + anon_sym_PIPE, + ACTIONS(460), 1, + anon_sym_CARET, + ACTIONS(466), 1, anon_sym_AMP_AMP, + ACTIONS(468), 1, anon_sym_PIPE_PIPE, + ACTIONS(470), 1, + anon_sym_DOT_DOT, + ACTIONS(472), 1, anon_sym_DOT_DOT_EQ, - anon_sym_SEMI, + ACTIONS(474), 1, anon_sym_LPAREN, - anon_sym_RPAREN, + ACTIONS(480), 1, anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7018] = 6, - ACTIONS(321), 1, - sym_identifier, - ACTIONS(323), 1, - sym_unit_quote, - STATE(134), 1, - sym__unit, + ACTIONS(482), 1, + anon_sym_RPAREN_GT, + STATE(252), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(446), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(450), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(454), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(462), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(464), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13731] = 4, + ACTIONS(484), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(197), 10, + ACTIONS(244), 8, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_else, - anon_sym_EQ, - ACTIONS(199), 21, - ts_builtin_sym_end, + ACTIONS(246), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8123,37 +14057,79 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7067] = 3, + [13768] = 19, + ACTIONS(444), 1, + anon_sym_COLON, + ACTIONS(448), 1, + anon_sym_STAR_STAR, + ACTIONS(452), 1, + anon_sym_SLASH_SLASH, + ACTIONS(456), 1, + anon_sym_AMP, + ACTIONS(458), 1, + anon_sym_PIPE, + ACTIONS(460), 1, + anon_sym_CARET, + ACTIONS(466), 1, + anon_sym_AMP_AMP, + ACTIONS(468), 1, + anon_sym_PIPE_PIPE, + ACTIONS(470), 1, + anon_sym_DOT_DOT, + ACTIONS(472), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(474), 1, + anon_sym_LPAREN, + STATE(252), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(243), 11, - sym_identifier, + ACTIONS(252), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(446), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(454), 2, + anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(462), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(464), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13835] = 4, + ACTIONS(262), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(258), 8, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_else, - anon_sym_EQ, - ACTIONS(245), 22, - ts_builtin_sym_end, - sym_unit_quote, + ACTIONS(260), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8162,60 +14138,62 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, + [13872] = 20, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, + anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, + anon_sym_AMP_AMP, + ACTIONS(412), 1, + anon_sym_PIPE_PIPE, + ACTIONS(414), 1, + anon_sym_DOT_DOT, + ACTIONS(416), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(476), 1, anon_sym_COMMA, + ACTIONS(486), 1, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7109] = 3, + STATE(188), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(151), 11, - sym_identifier, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(396), 2, + anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_else, - anon_sym_EQ, - ACTIONS(153), 22, - ts_builtin_sym_end, - sym_unit_quote, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_CARET, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7151] = 5, - ACTIONS(325), 1, - anon_sym_DOT, - STATE(108), 1, - aux_sym_identity_path_repeat1, + [13941] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 8, + ACTIONS(212), 8, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8223,9 +14201,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(159), 22, - ts_builtin_sym_end, + ACTIONS(214), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -8241,21 +14219,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [7196] = 5, - ACTIONS(328), 1, - anon_sym_DOT, - STATE(111), 1, - aux_sym_self_path_repeat1, + [13976] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(180), 8, + ACTIONS(240), 8, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8263,9 +14233,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(182), 22, - ts_builtin_sym_end, + ACTIONS(242), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -8281,21 +14251,61 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, + [14011] = 19, + ACTIONS(444), 1, + anon_sym_COLON, + ACTIONS(448), 1, + anon_sym_STAR_STAR, + ACTIONS(452), 1, + anon_sym_SLASH_SLASH, + ACTIONS(456), 1, + anon_sym_AMP, + ACTIONS(458), 1, + anon_sym_PIPE, + ACTIONS(460), 1, + anon_sym_CARET, + ACTIONS(466), 1, + anon_sym_AMP_AMP, + ACTIONS(468), 1, + anon_sym_PIPE_PIPE, + ACTIONS(470), 1, + anon_sym_DOT_DOT, + ACTIONS(472), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(474), 1, + anon_sym_LPAREN, + STATE(252), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(266), 2, anon_sym_COMMA, - anon_sym_RBRACK, - [7241] = 5, - ACTIONS(330), 1, - anon_sym_DOT, - STATE(110), 1, - aux_sym_self_path_repeat1, + anon_sym_RPAREN_GT, + ACTIONS(446), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(450), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(454), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(462), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(464), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14078] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(184), 8, + ACTIONS(268), 8, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8303,11 +14313,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(186), 22, - ts_builtin_sym_end, + ACTIONS(270), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -8321,21 +14330,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [7286] = 5, - ACTIONS(328), 1, - anon_sym_DOT, - STATE(110), 1, - aux_sym_self_path_repeat1, + anon_sym_DASH_GT, + [14113] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 8, + ACTIONS(272), 8, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8343,11 +14345,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(176), 22, - ts_builtin_sym_end, + ACTIONS(274), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -8361,36 +14362,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [7331] = 5, - ACTIONS(333), 1, - anon_sym_DOT, - STATE(108), 1, - aux_sym_identity_path_repeat1, + anon_sym_DASH_GT, + [14148] = 9, + ACTIONS(444), 1, + anon_sym_COLON, + ACTIONS(448), 1, + anon_sym_STAR_STAR, + ACTIONS(452), 1, + anon_sym_SLASH_SLASH, + ACTIONS(474), 1, + anon_sym_LPAREN, + STATE(252), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(170), 8, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(280), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(172), 22, - ts_builtin_sym_end, - anon_sym_COLON, + ACTIONS(282), 14, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -8401,21 +14402,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, + [14195] = 6, + ACTIONS(444), 1, + anon_sym_COLON, + ACTIONS(474), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [7376] = 5, - ACTIONS(333), 1, - anon_sym_DOT, - STATE(112), 1, - aux_sym_identity_path_repeat1, + STATE(252), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 8, + ACTIONS(280), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8423,10 +14420,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(166), 22, - ts_builtin_sym_end, - anon_sym_COLON, + ACTIONS(282), 16, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8441,34 +14437,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, + [14236] = 7, + ACTIONS(444), 1, + anon_sym_COLON, + ACTIONS(448), 1, + anon_sym_STAR_STAR, + ACTIONS(474), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [7421] = 3, + STATE(252), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(279), 9, + ACTIONS(280), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(281), 22, - ts_builtin_sym_end, - anon_sym_COLON, + ACTIONS(282), 15, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8477,79 +14473,87 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7461] = 10, - ACTIONS(335), 1, + [14279] = 20, + ACTIONS(444), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(448), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(452), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, + ACTIONS(456), 1, + anon_sym_AMP, + ACTIONS(458), 1, + anon_sym_PIPE, + ACTIONS(460), 1, + anon_sym_CARET, + ACTIONS(466), 1, + anon_sym_AMP_AMP, + ACTIONS(468), 1, + anon_sym_PIPE_PIPE, + ACTIONS(470), 1, + anon_sym_DOT_DOT, + ACTIONS(472), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(474), 1, anon_sym_LPAREN, - STATE(143), 1, + ACTIONS(488), 1, + anon_sym_COMMA, + ACTIONS(490), 1, + anon_sym_RPAREN_GT, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(446), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(209), 6, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(211), 16, - ts_builtin_sym_end, + ACTIONS(454), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(462), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(464), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [7515] = 3, + [14348] = 11, + ACTIONS(444), 1, + anon_sym_COLON, + ACTIONS(448), 1, + anon_sym_STAR_STAR, + ACTIONS(452), 1, + anon_sym_SLASH_SLASH, + ACTIONS(474), 1, + anon_sym_LPAREN, + STATE(252), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(235), 9, + ACTIONS(446), 2, anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(454), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(280), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(237), 22, - ts_builtin_sym_end, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(282), 10, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8558,36 +14562,41 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, + [14399] = 13, + ACTIONS(444), 1, + anon_sym_COLON, + ACTIONS(448), 1, + anon_sym_STAR_STAR, + ACTIONS(452), 1, + anon_sym_SLASH_SLASH, + ACTIONS(456), 1, + anon_sym_AMP, + ACTIONS(460), 1, + anon_sym_CARET, + ACTIONS(474), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_DASH_GT, - [7555] = 3, + STATE(252), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(239), 9, + ACTIONS(446), 2, anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, + ACTIONS(454), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(280), 4, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(241), 22, - ts_builtin_sym_end, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(282), 9, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8595,37 +14604,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, + [14454] = 12, + ACTIONS(444), 1, + anon_sym_COLON, + ACTIONS(448), 1, + anon_sym_STAR_STAR, + ACTIONS(452), 1, + anon_sym_SLASH_SLASH, + ACTIONS(456), 1, + anon_sym_AMP, + ACTIONS(474), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_DASH_GT, - [7595] = 4, - ACTIONS(347), 1, - anon_sym_DASH_GT, + STATE(252), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(203), 9, + ACTIONS(446), 2, anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, + ACTIONS(454), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(280), 4, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(205), 21, - ts_builtin_sym_end, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(282), 10, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8634,310 +14645,241 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [7637] = 16, - ACTIONS(335), 1, + [14507] = 14, + ACTIONS(444), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(448), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(452), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(456), 1, anon_sym_AMP, - ACTIONS(353), 1, + ACTIONS(458), 1, anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(460), 1, anon_sym_CARET, - STATE(143), 1, + ACTIONS(474), 1, + anon_sym_LPAREN, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(209), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(337), 2, + ACTIONS(446), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(454), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(280), 3, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + anon_sym_DOT_DOT, + ACTIONS(282), 9, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(211), 9, - ts_builtin_sym_end, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [7703] = 17, - ACTIONS(335), 1, + [14564] = 16, + ACTIONS(280), 1, + anon_sym_DOT_DOT, + ACTIONS(444), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(448), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(452), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(456), 1, anon_sym_AMP, - ACTIONS(353), 1, + ACTIONS(458), 1, anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(460), 1, anon_sym_CARET, - ACTIONS(361), 1, - anon_sym_AMP_AMP, - STATE(143), 1, + ACTIONS(474), 1, + anon_sym_LPAREN, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(209), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(337), 2, + ACTIONS(446), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(454), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(462), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(464), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(211), 8, - ts_builtin_sym_end, + ACTIONS(282), 5, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [7771] = 18, - ACTIONS(335), 1, + [14625] = 17, + ACTIONS(280), 1, + anon_sym_DOT_DOT, + ACTIONS(444), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(448), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(452), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(456), 1, anon_sym_AMP, - ACTIONS(353), 1, + ACTIONS(458), 1, anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(460), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(466), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, - anon_sym_PIPE_PIPE, - STATE(143), 1, + ACTIONS(474), 1, + anon_sym_LPAREN, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(209), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(337), 2, + ACTIONS(446), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(454), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(462), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(282), 4, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + ACTIONS(464), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(211), 7, - ts_builtin_sym_end, - anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [7841] = 20, - ACTIONS(213), 1, - anon_sym_EQ, - ACTIONS(335), 1, + [14688] = 18, + ACTIONS(280), 1, + anon_sym_DOT_DOT, + ACTIONS(444), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(448), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(452), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(456), 1, anon_sym_AMP, - ACTIONS(353), 1, + ACTIONS(458), 1, anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(460), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(466), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(468), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, - anon_sym_DOT_DOT, - ACTIONS(367), 1, - anon_sym_DOT_DOT_EQ, - STATE(143), 1, + ACTIONS(474), 1, + anon_sym_LPAREN, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(446), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(454), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(462), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(282), 3, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_DOT_DOT_EQ, + ACTIONS(464), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(217), 6, - ts_builtin_sym_end, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [7915] = 4, - ACTIONS(225), 1, - anon_sym_DASH_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(221), 9, - anon_sym_DASH, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(223), 21, - ts_builtin_sym_end, + [14753] = 19, + ACTIONS(444), 1, anon_sym_COLON, - anon_sym_PLUS, + ACTIONS(448), 1, anon_sym_STAR_STAR, + ACTIONS(452), 1, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(456), 1, + anon_sym_AMP, + ACTIONS(458), 1, + anon_sym_PIPE, + ACTIONS(460), 1, anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(466), 1, anon_sym_AMP_AMP, + ACTIONS(468), 1, anon_sym_PIPE_PIPE, + ACTIONS(470), 1, + anon_sym_DOT_DOT, + ACTIONS(472), 1, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [7957] = 13, - ACTIONS(335), 1, - anon_sym_COLON, - ACTIONS(339), 1, - anon_sym_STAR_STAR, - ACTIONS(343), 1, - anon_sym_SLASH_SLASH, - ACTIONS(345), 1, + ACTIONS(474), 1, anon_sym_LPAREN, - ACTIONS(351), 1, - anon_sym_AMP, - ACTIONS(355), 1, - anon_sym_CARET, - STATE(143), 1, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(286), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(446), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(454), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(209), 5, - anon_sym_PIPE, + ACTIONS(462), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(211), 13, - ts_builtin_sym_end, + ACTIONS(464), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [8017] = 3, + [14820] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 9, - anon_sym_DOT, + ACTIONS(288), 8, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -8945,11 +14887,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(159), 22, - ts_builtin_sym_end, + ACTIONS(290), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -8963,497 +14904,524 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [8057] = 11, - ACTIONS(335), 1, + anon_sym_DASH_GT, + [14855] = 19, + ACTIONS(444), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(448), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(452), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, + ACTIONS(456), 1, + anon_sym_AMP, + ACTIONS(458), 1, + anon_sym_PIPE, + ACTIONS(460), 1, + anon_sym_CARET, + ACTIONS(466), 1, + anon_sym_AMP_AMP, + ACTIONS(468), 1, + anon_sym_PIPE_PIPE, + ACTIONS(470), 1, + anon_sym_DOT_DOT, + ACTIONS(472), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(474), 1, anon_sym_LPAREN, - STATE(143), 1, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(294), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(446), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(454), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(209), 6, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(462), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(211), 14, - ts_builtin_sym_end, - anon_sym_CARET, + ACTIONS(464), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [8113] = 20, - ACTIONS(247), 1, - anon_sym_EQ, - ACTIONS(335), 1, + [14922] = 19, + ACTIONS(444), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(448), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(452), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(456), 1, anon_sym_AMP, - ACTIONS(353), 1, + ACTIONS(458), 1, anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(460), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(466), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(468), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(470), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(472), 1, anon_sym_DOT_DOT_EQ, - STATE(143), 1, + ACTIONS(474), 1, + anon_sym_LPAREN, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(298), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(446), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(454), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(462), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(464), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(249), 6, - ts_builtin_sym_end, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_COMMA, + [14989] = 20, + ACTIONS(132), 1, anon_sym_RBRACK, - [8187] = 14, - ACTIONS(335), 1, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(400), 1, anon_sym_CARET, - STATE(143), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, + anon_sym_AMP_AMP, + ACTIONS(412), 1, + anon_sym_PIPE_PIPE, + ACTIONS(414), 1, + anon_sym_DOT_DOT, + ACTIONS(416), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(476), 1, + anon_sym_COMMA, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(396), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(209), 4, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(211), 13, - ts_builtin_sym_end, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + [15058] = 20, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, + anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, + ACTIONS(414), 1, + anon_sym_DOT_DOT, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, + ACTIONS(476), 1, anon_sym_COMMA, + ACTIONS(492), 1, anon_sym_RBRACK, - [8249] = 3, + STATE(188), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(227), 9, - anon_sym_DOT, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(229), 22, - ts_builtin_sym_end, - anon_sym_COLON, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(392), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(396), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(404), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + [15127] = 20, + ACTIONS(444), 1, + anon_sym_COLON, + ACTIONS(448), 1, + anon_sym_STAR_STAR, + ACTIONS(452), 1, + anon_sym_SLASH_SLASH, + ACTIONS(456), 1, + anon_sym_AMP, + ACTIONS(458), 1, + anon_sym_PIPE, + ACTIONS(460), 1, + anon_sym_CARET, + ACTIONS(466), 1, anon_sym_AMP_AMP, + ACTIONS(468), 1, anon_sym_PIPE_PIPE, + ACTIONS(470), 1, + anon_sym_DOT_DOT, + ACTIONS(472), 1, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, + ACTIONS(474), 1, anon_sym_LPAREN, - anon_sym_RPAREN, + ACTIONS(494), 1, anon_sym_COMMA, - anon_sym_RBRACK, - [8289] = 3, + ACTIONS(496), 1, + anon_sym_RPAREN_GT, + STATE(252), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(251), 9, + ACTIONS(446), 2, anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(253), 22, - ts_builtin_sym_end, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(454), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(462), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(464), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_DASH_GT, - [8329] = 20, - ACTIONS(231), 1, - anon_sym_EQ, - ACTIONS(335), 1, + [15196] = 20, + ACTIONS(444), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(448), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(452), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(456), 1, anon_sym_AMP, - ACTIONS(353), 1, + ACTIONS(458), 1, anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(460), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(466), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(468), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(470), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(472), 1, anon_sym_DOT_DOT_EQ, - STATE(143), 1, + ACTIONS(474), 1, + anon_sym_LPAREN, + ACTIONS(498), 1, + anon_sym_COMMA, + ACTIONS(500), 1, + anon_sym_RPAREN_GT, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(446), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(454), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(462), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(464), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(233), 6, - ts_builtin_sym_end, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [8403] = 3, + [15265] = 19, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, + anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, + anon_sym_AMP_AMP, + ACTIONS(412), 1, + anon_sym_PIPE_PIPE, + ACTIONS(414), 1, + anon_sym_DOT_DOT, + ACTIONS(416), 1, + anon_sym_DOT_DOT_EQ, + STATE(188), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(271), 9, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(396), 2, + anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(273), 22, - ts_builtin_sym_end, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_CARET, + ACTIONS(502), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, + [15332] = 20, + ACTIONS(138), 1, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [8443] = 20, - ACTIONS(255), 1, - anon_sym_EQ, - ACTIONS(335), 1, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(400), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(414), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - STATE(143), 1, + ACTIONS(476), 1, + anon_sym_COMMA, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(396), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(257), 6, - ts_builtin_sym_end, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, + [15401] = 20, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, + anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, + anon_sym_AMP_AMP, + ACTIONS(412), 1, + anon_sym_PIPE_PIPE, + ACTIONS(414), 1, + anon_sym_DOT_DOT, + ACTIONS(416), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(476), 1, anon_sym_COMMA, + ACTIONS(504), 1, anon_sym_RBRACK, - [8517] = 3, + STATE(188), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(291), 9, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(396), 2, + anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(293), 22, - ts_builtin_sym_end, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_CARET, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [8557] = 20, - ACTIONS(259), 1, - anon_sym_EQ, - ACTIONS(335), 1, + [15470] = 20, + ACTIONS(444), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(448), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(452), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(456), 1, anon_sym_AMP, - ACTIONS(353), 1, + ACTIONS(458), 1, anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(460), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(466), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(468), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(470), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(472), 1, anon_sym_DOT_DOT_EQ, - STATE(143), 1, + ACTIONS(474), 1, + anon_sym_LPAREN, + ACTIONS(506), 1, + anon_sym_COMMA, + ACTIONS(508), 1, + anon_sym_RPAREN_GT, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(446), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(454), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(462), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(464), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(261), 6, - ts_builtin_sym_end, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [8631] = 9, - ACTIONS(335), 1, + [15539] = 10, + ACTIONS(444), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(448), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(452), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, + ACTIONS(474), 1, anon_sym_LPAREN, - STATE(143), 1, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(341), 2, + ACTIONS(446), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(209), 6, + ACTIONS(280), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(211), 18, - ts_builtin_sym_end, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(282), 12, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -9464,22 +15432,58 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [8683] = 6, - ACTIONS(335), 1, + [15588] = 19, + ACTIONS(444), 1, anon_sym_COLON, - ACTIONS(345), 1, + ACTIONS(448), 1, + anon_sym_STAR_STAR, + ACTIONS(452), 1, + anon_sym_SLASH_SLASH, + ACTIONS(456), 1, + anon_sym_AMP, + ACTIONS(458), 1, + anon_sym_PIPE, + ACTIONS(460), 1, + anon_sym_CARET, + ACTIONS(466), 1, + anon_sym_AMP_AMP, + ACTIONS(468), 1, + anon_sym_PIPE_PIPE, + ACTIONS(470), 1, + anon_sym_DOT_DOT, + ACTIONS(472), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(474), 1, anon_sym_LPAREN, - STATE(143), 1, + ACTIONS(510), 1, + anon_sym_RPAREN_GT, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(209), 8, + ACTIONS(446), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(450), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(454), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(462), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(464), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [15654] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(316), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9487,9 +15491,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(211), 20, - ts_builtin_sym_end, + ACTIONS(318), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9504,24 +15509,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [8729] = 7, - ACTIONS(335), 1, - anon_sym_COLON, - ACTIONS(339), 1, - anon_sym_STAR_STAR, - ACTIONS(345), 1, anon_sym_LPAREN, - STATE(143), 1, - sym_dictionary_construction, + [15688] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(209), 8, + ACTIONS(244), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9529,11 +15522,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(211), 19, - ts_builtin_sym_end, + ACTIONS(246), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -9545,62 +15540,59 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [8777] = 12, - ACTIONS(335), 1, + anon_sym_LPAREN, + [15722] = 19, + ACTIONS(444), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(448), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(452), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(456), 1, anon_sym_AMP, - STATE(143), 1, + ACTIONS(458), 1, + anon_sym_PIPE, + ACTIONS(460), 1, + anon_sym_CARET, + ACTIONS(466), 1, + anon_sym_AMP_AMP, + ACTIONS(468), 1, + anon_sym_PIPE_PIPE, + ACTIONS(470), 1, + anon_sym_DOT_DOT, + ACTIONS(472), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(474), 1, + anon_sym_LPAREN, + ACTIONS(512), 1, + anon_sym_RPAREN_GT, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(446), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(454), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(209), 5, - anon_sym_PIPE, + ACTIONS(462), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(211), 14, - ts_builtin_sym_end, - anon_sym_CARET, + ACTIONS(464), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [8835] = 3, + [15788] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(287), 8, + ACTIONS(352), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9608,9 +15600,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(289), 22, - ts_builtin_sym_end, + ACTIONS(354), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9626,17 +15618,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [8874] = 3, + [15822] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(275), 8, + ACTIONS(324), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9644,9 +15631,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(277), 22, - ts_builtin_sym_end, + ACTIONS(326), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9662,17 +15649,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [8913] = 3, + [15856] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(299), 8, + ACTIONS(258), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9680,9 +15662,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(301), 22, - ts_builtin_sym_end, + ACTIONS(260), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9698,17 +15680,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [8952] = 3, + anon_sym_LPAREN, + [15890] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(283), 8, + ACTIONS(328), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9716,9 +15693,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(285), 22, - ts_builtin_sym_end, + ACTIONS(330), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9734,17 +15711,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [8991] = 3, + [15924] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(311), 8, + ACTIONS(332), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9752,9 +15724,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(313), 22, - ts_builtin_sym_end, + ACTIONS(334), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9770,17 +15742,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [9030] = 3, + [15958] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(307), 8, + ACTIONS(336), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9788,9 +15755,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(309), 22, - ts_builtin_sym_end, + ACTIONS(338), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9806,17 +15773,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [9069] = 3, + [15992] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(267), 8, + ACTIONS(320), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9824,9 +15786,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(269), 22, - ts_builtin_sym_end, + ACTIONS(322), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9842,17 +15804,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [9108] = 3, + [16026] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(221), 8, + ACTIONS(344), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9860,9 +15817,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(223), 22, - ts_builtin_sym_end, + ACTIONS(346), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9878,17 +15835,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [9147] = 3, + [16060] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(295), 8, + ACTIONS(300), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9896,9 +15848,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(297), 22, - ts_builtin_sym_end, + ACTIONS(302), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9914,17 +15866,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [9186] = 3, + [16094] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(263), 8, + ACTIONS(356), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9932,9 +15879,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(265), 22, - ts_builtin_sym_end, + ACTIONS(358), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9950,17 +15897,59 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [9225] = 3, + [16128] = 19, + ACTIONS(384), 1, + anon_sym_COLON, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, + anon_sym_STAR_STAR, + ACTIONS(394), 1, + anon_sym_SLASH_SLASH, + ACTIONS(398), 1, + anon_sym_AMP, + ACTIONS(400), 1, + anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, + anon_sym_AMP_AMP, + ACTIONS(412), 1, + anon_sym_PIPE_PIPE, + ACTIONS(414), 1, + anon_sym_DOT_DOT, + ACTIONS(416), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(514), 1, + anon_sym_else, + STATE(188), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(390), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(392), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(396), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(404), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(406), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [16194] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(203), 8, + ACTIONS(360), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -9968,9 +15957,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(205), 22, - ts_builtin_sym_end, + ACTIONS(362), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9986,17 +15975,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [9264] = 3, + [16228] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 8, + ACTIONS(340), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -10004,9 +15988,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(317), 22, - ts_builtin_sym_end, + ACTIONS(342), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10022,17 +16006,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [9303] = 3, + [16262] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(303), 8, + ACTIONS(304), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -10040,9 +16019,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(305), 22, - ts_builtin_sym_end, + ACTIONS(306), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10058,27 +16037,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - [9342] = 8, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(369), 1, - anon_sym_COLON, - ACTIONS(371), 1, - anon_sym_EQ, - STATE(112), 1, - aux_sym_identity_path_repeat1, - STATE(224), 1, - sym_declaration_type, + [16296] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 7, + ACTIONS(312), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -10086,7 +16050,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(166), 16, + ACTIONS(314), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10102,796 +16069,781 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_RPAREN, - [9389] = 20, - ACTIONS(335), 1, + [16330] = 19, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(400), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(414), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(373), 1, - anon_sym_EQ, - STATE(143), 1, + ACTIONS(516), 1, + anon_sym_COMMA, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(396), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(375), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - ACTIONS(359), 4, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9459] = 20, - ACTIONS(335), 1, + [16396] = 19, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(400), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(414), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(377), 1, - anon_sym_COMMA, - ACTIONS(379), 1, - anon_sym_RBRACK, - STATE(143), 1, + ACTIONS(518), 1, + anon_sym_RPAREN, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(396), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9528] = 20, - ACTIONS(123), 1, - anon_sym_RBRACK, - ACTIONS(335), 1, + [16462] = 19, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(400), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(414), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(377), 1, - anon_sym_COMMA, - STATE(143), 1, + ACTIONS(520), 1, + anon_sym_else, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(396), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9597] = 19, - ACTIONS(335), 1, + [16528] = 19, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(400), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(414), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - STATE(143), 1, + ACTIONS(522), 1, + anon_sym_RPAREN, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(396), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(381), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - ACTIONS(359), 4, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9664] = 20, - ACTIONS(127), 1, - anon_sym_RBRACK, - ACTIONS(335), 1, - anon_sym_COLON, - ACTIONS(339), 1, - anon_sym_STAR_STAR, - ACTIONS(343), 1, - anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + [16594] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(364), 7, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_AMP, - ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(355), 1, - anon_sym_CARET, - ACTIONS(361), 1, - anon_sym_AMP_AMP, - ACTIONS(363), 1, - anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + anon_sym_GT, + anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(367), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(377), 1, + ACTIONS(366), 18, anon_sym_COMMA, - STATE(143), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(337), 2, + anon_sym_RPAREN_GT, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(349), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(359), 4, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9733] = 20, - ACTIONS(335), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + [16628] = 19, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(400), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(414), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(377), 1, - anon_sym_COMMA, - ACTIONS(383), 1, - anon_sym_RBRACK, - STATE(143), 1, + ACTIONS(524), 1, + anon_sym_else, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(396), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9802] = 19, - ACTIONS(335), 1, + [16694] = 19, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(400), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(414), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - STATE(143), 1, + ACTIONS(526), 1, + ts_builtin_sym_end, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(396), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(385), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - ACTIONS(359), 4, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9869] = 19, - ACTIONS(335), 1, - anon_sym_COLON, - ACTIONS(339), 1, - anon_sym_STAR_STAR, - ACTIONS(343), 1, - anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, - anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, - anon_sym_CARET, - ACTIONS(361), 1, - anon_sym_AMP_AMP, - ACTIONS(363), 1, - anon_sym_PIPE_PIPE, - ACTIONS(365), 1, - anon_sym_DOT_DOT, - ACTIONS(367), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(387), 1, - anon_sym_else, - STATE(143), 1, - sym_dictionary_construction, + [16760] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(308), 7, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(357), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + anon_sym_DOT_DOT, + ACTIONS(310), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9935] = 19, - ACTIONS(335), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + [16794] = 19, + ACTIONS(444), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(448), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(452), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(456), 1, anon_sym_AMP, - ACTIONS(353), 1, + ACTIONS(458), 1, anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(460), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(466), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(468), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(470), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(472), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(389), 1, - anon_sym_RPAREN, - STATE(143), 1, + ACTIONS(474), 1, + anon_sym_LPAREN, + ACTIONS(528), 1, + anon_sym_RPAREN_GT, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(446), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(450), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(454), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(462), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(464), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10001] = 19, - ACTIONS(335), 1, + [16860] = 19, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(400), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(414), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(391), 1, - anon_sym_RPAREN, - STATE(143), 1, + ACTIONS(476), 1, + anon_sym_COMMA, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(396), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10067] = 19, - ACTIONS(335), 1, + [16926] = 19, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(400), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(414), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(393), 1, - ts_builtin_sym_end, - STATE(143), 1, + ACTIONS(530), 1, + anon_sym_RPAREN, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(396), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10133] = 19, - ACTIONS(335), 1, + [16992] = 19, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(400), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(414), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(395), 1, + ACTIONS(532), 1, anon_sym_SEMI, - STATE(143), 1, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(396), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10199] = 19, - ACTIONS(335), 1, + [17058] = 19, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(400), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(414), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(397), 1, - anon_sym_else, - STATE(143), 1, + ACTIONS(534), 1, + anon_sym_COMMA, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(396), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(404), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(406), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10265] = 19, - ACTIONS(335), 1, + [17124] = 19, + ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(339), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(388), 1, anon_sym_STAR_STAR, - ACTIONS(343), 1, + ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(345), 1, - anon_sym_LPAREN, - ACTIONS(351), 1, + ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(400), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(402), 1, + anon_sym_PIPE, + ACTIONS(408), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(414), 1, anon_sym_DOT_DOT, - ACTIONS(367), 1, + ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(377), 1, + ACTIONS(536), 1, anon_sym_COMMA, - STATE(143), 1, + STATE(188), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(337), 2, + ACTIONS(390), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(341), 2, + ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(349), 2, + ACTIONS(396), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(404), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(406), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [17190] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(348), 7, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + anon_sym_DOT_DOT, + ACTIONS(350), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10331] = 14, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + [17224] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(399), 1, + ACTIONS(538), 1, sym_identifier, - ACTIONS(401), 1, + ACTIONS(540), 1, aux_sym_base_ten_token1, - ACTIONS(405), 1, + ACTIONS(544), 1, anon_sym_LPAREN, - STATE(184), 1, + STATE(294), 1, sym__float, - STATE(185), 1, + STATE(295), 1, sym_number, - STATE(198), 1, + STATE(301), 1, sym_formula_expression, - STATE(239), 1, + STATE(368), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(403), 2, + ACTIONS(542), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(186), 6, + STATE(299), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10384] = 14, + [17277] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(399), 1, + ACTIONS(538), 1, sym_identifier, - ACTIONS(401), 1, + ACTIONS(540), 1, aux_sym_base_ten_token1, - ACTIONS(405), 1, + ACTIONS(544), 1, anon_sym_LPAREN, - STATE(184), 1, + STATE(294), 1, sym__float, - STATE(185), 1, + STATE(295), 1, sym_number, - STATE(191), 1, + STATE(303), 1, sym_formula_expression, - STATE(239), 1, + STATE(368), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(403), 2, + ACTIONS(542), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(186), 6, + STATE(299), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10437] = 14, + [17330] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(399), 1, + ACTIONS(538), 1, sym_identifier, - ACTIONS(401), 1, + ACTIONS(540), 1, aux_sym_base_ten_token1, - ACTIONS(405), 1, + ACTIONS(544), 1, anon_sym_LPAREN, - STATE(184), 1, + STATE(294), 1, sym__float, - STATE(185), 1, + STATE(295), 1, sym_number, - STATE(192), 1, + STATE(298), 1, sym_formula_expression, - STATE(239), 1, + STATE(368), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(403), 2, + ACTIONS(542), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(186), 6, + STATE(299), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10490] = 14, + [17383] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10900,76 +16852,76 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(399), 1, + ACTIONS(538), 1, sym_identifier, - ACTIONS(405), 1, + ACTIONS(544), 1, anon_sym_LPAREN, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(207), 1, + STATE(320), 1, sym_formula_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(546), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(186), 6, + STATE(299), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10543] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [17436] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(399), 1, + ACTIONS(538), 1, sym_identifier, - ACTIONS(405), 1, + ACTIONS(540), 1, + aux_sym_base_ten_token1, + ACTIONS(544), 1, anon_sym_LPAREN, - STATE(104), 1, - sym_number, - STATE(105), 1, + STATE(294), 1, sym__float, - STATE(200), 1, + STATE(295), 1, + sym_number, + STATE(308), 1, sym_formula_expression, - STATE(242), 1, + STATE(368), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(542), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(186), 6, + STATE(299), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10596] = 14, + [17489] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -10978,37 +16930,37 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(399), 1, + ACTIONS(538), 1, sym_identifier, - ACTIONS(405), 1, + ACTIONS(544), 1, anon_sym_LPAREN, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(188), 1, + STATE(310), 1, sym_formula_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(546), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(186), 6, + STATE(299), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10649] = 14, + [17542] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -11017,37 +16969,76 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(399), 1, + ACTIONS(538), 1, sym_identifier, - ACTIONS(405), 1, + ACTIONS(544), 1, anon_sym_LPAREN, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(199), 1, + STATE(311), 1, sym_formula_expression, - STATE(242), 1, + STATE(365), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(546), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(299), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [17595] = 14, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(538), 1, + sym_identifier, + ACTIONS(540), 1, + aux_sym_base_ten_token1, + ACTIONS(544), 1, + anon_sym_LPAREN, + STATE(294), 1, + sym__float, + STATE(295), 1, + sym_number, + STATE(306), 1, + sym_formula_expression, + STATE(368), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(542), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(186), 6, + STATE(299), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10702] = 14, + [17648] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -11056,154 +17047,154 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(399), 1, + ACTIONS(538), 1, sym_identifier, - ACTIONS(405), 1, + ACTIONS(544), 1, anon_sym_LPAREN, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(203), 1, + STATE(314), 1, sym_formula_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(546), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(186), 6, + STATE(299), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10755] = 14, + [17701] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(399), 1, + ACTIONS(538), 1, sym_identifier, - ACTIONS(401), 1, + ACTIONS(540), 1, aux_sym_base_ten_token1, - ACTIONS(405), 1, + ACTIONS(544), 1, anon_sym_LPAREN, - STATE(184), 1, + STATE(294), 1, sym__float, - STATE(185), 1, + STATE(295), 1, sym_number, - STATE(195), 1, + STATE(302), 1, sym_formula_expression, - STATE(239), 1, + STATE(368), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(403), 2, + ACTIONS(542), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(186), 6, + STATE(299), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10808] = 14, + [17754] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(399), 1, + ACTIONS(538), 1, sym_identifier, - ACTIONS(401), 1, - aux_sym_base_ten_token1, - ACTIONS(405), 1, + ACTIONS(544), 1, anon_sym_LPAREN, - STATE(184), 1, - sym__float, - STATE(185), 1, + STATE(140), 1, sym_number, - STATE(188), 1, + STATE(141), 1, + sym__float, + STATE(298), 1, sym_formula_expression, - STATE(239), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(403), 2, + ACTIONS(546), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(186), 6, + STATE(299), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10861] = 14, + [17807] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(399), 1, + ACTIONS(538), 1, sym_identifier, - ACTIONS(401), 1, - aux_sym_base_ten_token1, - ACTIONS(405), 1, + ACTIONS(544), 1, anon_sym_LPAREN, - STATE(184), 1, - sym__float, - STATE(185), 1, + STATE(140), 1, sym_number, - STATE(193), 1, + STATE(141), 1, + sym__float, + STATE(318), 1, sym_formula_expression, - STATE(239), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(403), 2, + ACTIONS(546), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(186), 6, + STATE(299), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10914] = 14, + [17860] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -11212,37 +17203,37 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(399), 1, + ACTIONS(538), 1, sym_identifier, - ACTIONS(405), 1, + ACTIONS(544), 1, anon_sym_LPAREN, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(201), 1, + STATE(313), 1, sym_formula_expression, - STATE(242), 1, + STATE(365), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(546), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(186), 6, + STATE(299), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [10967] = 14, + [17913] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -11251,41 +17242,80 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(399), 1, + ACTIONS(538), 1, sym_identifier, - ACTIONS(405), 1, + ACTIONS(544), 1, anon_sym_LPAREN, - STATE(104), 1, + STATE(140), 1, sym_number, - STATE(105), 1, + STATE(141), 1, sym__float, - STATE(206), 1, + STATE(312), 1, sym_formula_expression, - STATE(242), 1, + STATE(365), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(546), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(351), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(299), 6, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + [17966] = 14, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(538), 1, + sym_identifier, + ACTIONS(540), 1, + aux_sym_base_ten_token1, + ACTIONS(544), 1, + anon_sym_LPAREN, + STATE(294), 1, + sym__float, + STATE(295), 1, + sym_number, + STATE(309), 1, + sym_formula_expression, + STATE(368), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(542), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(237), 4, + STATE(351), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(186), 6, + STATE(299), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [11020] = 3, + [18019] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(409), 7, + ACTIONS(548), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -11293,11 +17323,12 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(118), 11, + ACTIONS(125), 12, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_LT_LPAREN, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, @@ -11305,11 +17336,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LT_LT_LT, - [11047] = 3, + [18047] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(411), 7, + ACTIONS(550), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -11317,30 +17348,31 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(225), 10, + ACTIONS(262), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, aux_sym_binary_token1, + anon_sym_LT_LPAREN, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [11073] = 4, + [18074] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(155), 2, + ACTIONS(192), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(151), 4, + ACTIONS(188), 4, sym_identifier, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(153), 10, + ACTIONS(190), 10, sym_unit_quote, anon_sym_DOT, anon_sym_DASH, @@ -11351,20 +17383,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11100] = 5, - STATE(194), 1, + [18101] = 5, + STATE(307), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(413), 2, + ACTIONS(552), 2, sym_identifier, sym_unit_quote, - ACTIONS(197), 3, + ACTIONS(206), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(199), 8, + ACTIONS(208), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11373,17 +17405,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11127] = 4, - ACTIONS(415), 1, + [18128] = 4, + ACTIONS(554), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 3, + ACTIONS(200), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(193), 10, + ACTIONS(202), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -11394,15 +17426,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11152] = 3, + [18153] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(419), 3, + ACTIONS(188), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(417), 10, + ACTIONS(190), 10, + sym_identifier, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11411,17 +17445,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [11174] = 3, + [18175] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(423), 3, + ACTIONS(558), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(421), 10, + ACTIONS(556), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11432,15 +17464,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [11196] = 3, + [18197] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(427), 3, + ACTIONS(562), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(425), 10, + ACTIONS(560), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11451,17 +17483,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [11218] = 3, + [18219] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(151), 3, + ACTIONS(566), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(153), 10, - sym_identifier, - sym_unit_quote, + ACTIONS(564), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11470,15 +17500,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11240] = 3, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [18241] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(243), 3, + ACTIONS(276), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(245), 10, + ACTIONS(278), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -11489,74 +17521,91 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11262] = 6, - ACTIONS(429), 1, + [18263] = 4, + ACTIONS(568), 1, anon_sym_STAR_STAR, - ACTIONS(431), 1, - anon_sym_STAR, - ACTIONS(433), 1, - anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(427), 2, + ACTIONS(562), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(425), 6, + ACTIONS(560), 7, anon_sym_DASH, anon_sym_PLUS, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11288] = 4, - ACTIONS(429), 1, + [18285] = 7, + ACTIONS(568), 1, anon_sym_STAR_STAR, + ACTIONS(572), 1, + anon_sym_STAR, + ACTIONS(574), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(427), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(425), 7, + ACTIONS(570), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH, + ACTIONS(576), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(578), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11310] = 7, - ACTIONS(429), 1, + [18313] = 6, + ACTIONS(568), 1, anon_sym_STAR_STAR, - ACTIONS(431), 1, + ACTIONS(572), 1, anon_sym_STAR, - ACTIONS(433), 1, + ACTIONS(574), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(435), 2, + ACTIONS(562), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(560), 6, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(437), 2, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [18339] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(340), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(439), 4, + ACTIONS(342), 8, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11338] = 3, + [18359] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(291), 3, + ACTIONS(304), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(293), 8, + ACTIONS(306), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11565,36 +17614,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11358] = 7, - ACTIONS(429), 1, + [18379] = 7, + ACTIONS(568), 1, anon_sym_STAR_STAR, - ACTIONS(431), 1, + ACTIONS(572), 1, anon_sym_STAR, - ACTIONS(433), 1, + ACTIONS(574), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(435), 2, + ACTIONS(570), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(441), 2, + ACTIONS(580), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(443), 4, + ACTIONS(582), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11386] = 3, + [18407] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(279), 3, + ACTIONS(312), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(281), 8, + ACTIONS(314), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11603,1198 +17652,1585 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11406] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(271), 3, + [18427] = 7, + ACTIONS(568), 1, + anon_sym_STAR_STAR, + ACTIONS(572), 1, anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(273), 8, + ACTIONS(574), 1, + anon_sym_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(570), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(584), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(586), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11426] = 7, - ACTIONS(429), 1, + [18455] = 7, + ACTIONS(568), 1, anon_sym_STAR_STAR, - ACTIONS(431), 1, + ACTIONS(572), 1, anon_sym_STAR, - ACTIONS(433), 1, + ACTIONS(574), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(435), 2, + ACTIONS(570), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(445), 2, + ACTIONS(588), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(447), 4, + ACTIONS(590), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11454] = 4, - ACTIONS(427), 1, + [18483] = 6, + ACTIONS(594), 1, + anon_sym_STAR_STAR, + ACTIONS(596), 1, + anon_sym_STAR, + ACTIONS(598), 1, + anon_sym_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(586), 2, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + ACTIONS(592), 2, + anon_sym_DASH, + anon_sym_PLUS, + [18505] = 4, + ACTIONS(562), 1, anon_sym_STAR, - ACTIONS(449), 1, + ACTIONS(594), 1, anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(425), 5, + ACTIONS(560), 5, anon_sym_DASH, anon_sym_PLUS, anon_sym_SLASH, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [11472] = 5, - ACTIONS(449), 1, + [18523] = 5, + ACTIONS(594), 1, anon_sym_STAR_STAR, - ACTIONS(451), 1, + ACTIONS(596), 1, anon_sym_STAR, - ACTIONS(453), 1, + ACTIONS(598), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(425), 4, + ACTIONS(560), 4, anon_sym_DASH, anon_sym_PLUS, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [11492] = 6, - ACTIONS(449), 1, + [18543] = 6, + ACTIONS(594), 1, anon_sym_STAR_STAR, - ACTIONS(451), 1, + ACTIONS(596), 1, anon_sym_STAR, - ACTIONS(453), 1, + ACTIONS(598), 1, anon_sym_SLASH, + ACTIONS(600), 1, + anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(443), 2, - anon_sym_RPAREN, + ACTIONS(592), 2, + anon_sym_DASH, + anon_sym_PLUS, + [18564] = 6, + ACTIONS(594), 1, + anon_sym_STAR_STAR, + ACTIONS(596), 1, + anon_sym_STAR, + ACTIONS(598), 1, + anon_sym_SLASH, + ACTIONS(602), 1, anon_sym_GT_GT_GT, - ACTIONS(455), 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(592), 2, anon_sym_DASH, anon_sym_PLUS, - [11514] = 7, - ACTIONS(73), 1, + [18585] = 7, + ACTIONS(75), 1, sym_varadic_dots, - ACTIONS(457), 1, + ACTIONS(604), 1, sym_identifier, - ACTIONS(459), 1, + ACTIONS(606), 1, anon_sym_RPAREN, - STATE(205), 1, + STATE(321), 1, aux_sym_struct_definition_repeat1, - STATE(234), 1, + STATE(367), 1, sym_struct_member, - STATE(255), 1, + STATE(383), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11537] = 6, - ACTIONS(449), 1, - anon_sym_STAR_STAR, - ACTIONS(451), 1, - anon_sym_STAR, - ACTIONS(453), 1, - anon_sym_SLASH, - ACTIONS(461), 1, - anon_sym_RPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(455), 2, - anon_sym_DASH, - anon_sym_PLUS, - [11558] = 7, - ACTIONS(73), 1, + [18608] = 7, + ACTIONS(75), 1, sym_varadic_dots, - ACTIONS(457), 1, + ACTIONS(604), 1, sym_identifier, - ACTIONS(463), 1, + ACTIONS(608), 1, anon_sym_RPAREN, - STATE(208), 1, + STATE(321), 1, aux_sym_struct_definition_repeat1, - STATE(234), 1, + STATE(367), 1, sym_struct_member, - STATE(260), 1, + STATE(388), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11581] = 7, - ACTIONS(73), 1, + [18631] = 7, + ACTIONS(75), 1, sym_varadic_dots, - ACTIONS(457), 1, + ACTIONS(604), 1, sym_identifier, - ACTIONS(465), 1, + ACTIONS(610), 1, anon_sym_RPAREN, - STATE(208), 1, + STATE(321), 1, aux_sym_struct_definition_repeat1, - STATE(234), 1, + STATE(367), 1, sym_struct_member, - STATE(250), 1, + STATE(382), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11604] = 6, - ACTIONS(449), 1, + [18654] = 6, + ACTIONS(594), 1, anon_sym_STAR_STAR, - ACTIONS(451), 1, + ACTIONS(596), 1, anon_sym_STAR, - ACTIONS(453), 1, + ACTIONS(598), 1, anon_sym_SLASH, - ACTIONS(467), 1, + ACTIONS(612), 1, anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(455), 2, + ACTIONS(592), 2, anon_sym_DASH, anon_sym_PLUS, - [11625] = 6, - ACTIONS(449), 1, + [18675] = 7, + ACTIONS(75), 1, + sym_varadic_dots, + ACTIONS(604), 1, + sym_identifier, + ACTIONS(614), 1, + anon_sym_RPAREN, + STATE(315), 1, + aux_sym_struct_definition_repeat1, + STATE(367), 1, + sym_struct_member, + STATE(377), 1, + sym__struct_final_element, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [18698] = 6, + ACTIONS(594), 1, anon_sym_STAR_STAR, - ACTIONS(451), 1, + ACTIONS(596), 1, anon_sym_STAR, - ACTIONS(453), 1, + ACTIONS(598), 1, anon_sym_SLASH, - ACTIONS(469), 1, - anon_sym_GT_GT_GT, + ACTIONS(616), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(455), 2, + ACTIONS(592), 2, anon_sym_DASH, anon_sym_PLUS, - [11646] = 5, - ACTIONS(471), 1, + [18719] = 5, + ACTIONS(618), 1, sym_identifier, - STATE(208), 1, + STATE(321), 1, aux_sym_struct_definition_repeat1, - STATE(248), 1, + STATE(391), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(474), 2, + ACTIONS(621), 2, anon_sym_RPAREN, sym_varadic_dots, - [11664] = 4, - ACTIONS(476), 1, + [18737] = 4, + ACTIONS(623), 1, sym_identifier, - ACTIONS(478), 1, + ACTIONS(625), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(212), 2, + STATE(327), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11679] = 4, - ACTIONS(480), 1, + [18752] = 4, + ACTIONS(623), 1, sym_identifier, - ACTIONS(483), 1, + ACTIONS(627), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(210), 2, + STATE(322), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11694] = 4, - ACTIONS(476), 1, + [18767] = 4, + ACTIONS(629), 1, sym_identifier, - ACTIONS(485), 1, - anon_sym_in, + ACTIONS(631), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(210), 2, - sym_let_in_assignment, - aux_sym_let_in_repeat1, - [11709] = 4, - ACTIONS(476), 1, + STATE(46), 2, + sym_identity_path, + sym_struct_definition, + [18782] = 4, + ACTIONS(623), 1, sym_identifier, - ACTIONS(487), 1, + ACTIONS(633), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(210), 2, + STATE(327), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11724] = 4, - ACTIONS(489), 1, + [18797] = 4, + ACTIONS(629), 1, sym_identifier, - ACTIONS(491), 1, + ACTIONS(631), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(12), 2, + STATE(62), 2, sym_identity_path, sym_struct_definition, - [11739] = 4, - ACTIONS(489), 1, + [18812] = 4, + ACTIONS(635), 1, sym_identifier, - ACTIONS(491), 1, - anon_sym_LPAREN, + ACTIONS(638), 1, + anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(42), 2, - sym_identity_path, - sym_struct_definition, - [11754] = 4, - ACTIONS(476), 1, + STATE(327), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [18827] = 4, + ACTIONS(623), 1, sym_identifier, - ACTIONS(493), 1, + ACTIONS(640), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(211), 2, + STATE(329), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [11769] = 4, - ACTIONS(495), 1, - anon_sym_RPAREN, - ACTIONS(497), 1, - anon_sym_COMMA, - STATE(218), 1, - aux_sym_dictionary_construction_repeat1, + [18842] = 4, + ACTIONS(623), 1, + sym_identifier, + ACTIONS(642), 1, + anon_sym_in, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + STATE(327), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [18857] = 4, + ACTIONS(623), 1, + sym_identifier, + ACTIONS(644), 1, + anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11783] = 2, + STATE(325), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [18872] = 4, + ACTIONS(629), 1, + sym_identifier, + ACTIONS(631), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(474), 3, + STATE(26), 2, + sym_identity_path, + sym_struct_definition, + [18887] = 4, + ACTIONS(646), 1, sym_identifier, + ACTIONS(648), 1, anon_sym_RPAREN, - sym_varadic_dots, - [11793] = 4, - ACTIONS(499), 1, + STATE(355), 1, + sym_dictionary_member_assignment, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [18901] = 4, + ACTIONS(650), 1, + anon_sym_COMMA, + ACTIONS(652), 1, + anon_sym_RPAREN, + STATE(339), 1, + aux_sym_dictionary_construction_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [18915] = 4, + ACTIONS(646), 1, + sym_identifier, + ACTIONS(654), 1, anon_sym_RPAREN, - ACTIONS(501), 1, + STATE(349), 1, + sym_dictionary_member_assignment, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [18929] = 4, + ACTIONS(656), 1, anon_sym_COMMA, - STATE(228), 1, + ACTIONS(659), 1, + anon_sym_RPAREN, + STATE(335), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11807] = 4, - ACTIONS(499), 1, + [18943] = 4, + ACTIONS(646), 1, + sym_identifier, + ACTIONS(661), 1, + anon_sym_RPAREN, + STATE(333), 1, + sym_dictionary_member_assignment, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [18957] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(621), 3, + sym_identifier, anon_sym_RPAREN, - ACTIONS(503), 1, + sym_varadic_dots, + [18967] = 4, + ACTIONS(646), 1, sym_identifier, - STATE(243), 1, + ACTIONS(663), 1, + anon_sym_RPAREN, + STATE(355), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11821] = 4, - ACTIONS(505), 1, + [18981] = 4, + ACTIONS(663), 1, anon_sym_RPAREN, - ACTIONS(507), 1, + ACTIONS(665), 1, anon_sym_COMMA, - STATE(222), 1, + STATE(335), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11835] = 4, - ACTIONS(503), 1, + [18995] = 4, + ACTIONS(646), 1, sym_identifier, - ACTIONS(509), 1, + ACTIONS(667), 1, anon_sym_RPAREN, - STATE(216), 1, + STATE(355), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11849] = 4, - ACTIONS(511), 1, - anon_sym_RPAREN, - ACTIONS(513), 1, + [19009] = 4, + ACTIONS(669), 1, anon_sym_COMMA, - STATE(228), 1, + ACTIONS(671), 1, + anon_sym_RPAREN, + STATE(335), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11863] = 4, - ACTIONS(503), 1, + [19023] = 4, + ACTIONS(646), 1, sym_identifier, - ACTIONS(511), 1, + ACTIONS(673), 1, anon_sym_RPAREN, - STATE(243), 1, + STATE(347), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11877] = 3, - ACTIONS(515), 1, + [19037] = 3, + ACTIONS(677), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(517), 2, + ACTIONS(675), 2, + anon_sym_COMMA, anon_sym_RPAREN, + [19049] = 4, + ACTIONS(679), 1, anon_sym_COMMA, - [11889] = 4, - ACTIONS(503), 1, - sym_identifier, - ACTIONS(519), 1, + ACTIONS(681), 1, anon_sym_RPAREN, - STATE(243), 1, - sym_dictionary_member_assignment, + STATE(335), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11903] = 4, - ACTIONS(503), 1, + [19063] = 4, + ACTIONS(646), 1, sym_identifier, - ACTIONS(521), 1, + ACTIONS(671), 1, anon_sym_RPAREN, - STATE(220), 1, + STATE(355), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11917] = 4, - ACTIONS(503), 1, + [19077] = 4, + ACTIONS(646), 1, sym_identifier, - ACTIONS(523), 1, + ACTIONS(683), 1, anon_sym_RPAREN, - STATE(243), 1, + STATE(355), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11931] = 4, - ACTIONS(525), 1, - anon_sym_RPAREN, - ACTIONS(527), 1, + [19091] = 4, + ACTIONS(685), 1, anon_sym_COMMA, - STATE(228), 1, + ACTIONS(687), 1, + anon_sym_RPAREN, + STATE(344), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11945] = 2, + [19105] = 4, + ACTIONS(646), 1, + sym_identifier, + ACTIONS(681), 1, + anon_sym_RPAREN, + STATE(355), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(530), 2, - sym_identifier, - anon_sym_in, - [11954] = 3, - ACTIONS(503), 1, - sym_identifier, - STATE(243), 1, - sym_dictionary_member_assignment, + [19119] = 4, + ACTIONS(689), 1, + anon_sym_COMMA, + ACTIONS(691), 1, + anon_sym_RPAREN, + STATE(341), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11965] = 2, + [19133] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(532), 2, + ACTIONS(693), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [11974] = 3, - ACTIONS(369), 1, - anon_sym_COLON, - STATE(224), 1, - sym_declaration_type, + [19142] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11985] = 3, - ACTIONS(534), 1, + ACTIONS(695), 2, aux_sym_signed_integer_token1, - ACTIONS(536), 1, + aux_sym_unsigned_integer_token1, + [19151] = 3, + ACTIONS(697), 1, + aux_sym_signed_integer_token1, + ACTIONS(699), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [11996] = 3, - ACTIONS(538), 1, - anon_sym_RPAREN, - ACTIONS(540), 1, + [19162] = 3, + ACTIONS(701), 1, + aux_sym_base_ten_token1, + STATE(300), 1, + sym_number, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [19173] = 3, + ACTIONS(422), 1, + anon_sym_COLON, + STATE(343), 1, + sym_declaration_type, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [19184] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(659), 2, anon_sym_COMMA, + anon_sym_RPAREN, + [19193] = 3, + ACTIONS(703), 1, + aux_sym_base_ten_token1, + STATE(142), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12007] = 3, - ACTIONS(345), 1, + [19204] = 3, + ACTIONS(474), 1, anon_sym_LPAREN, - STATE(145), 1, + STATE(251), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12018] = 3, - ACTIONS(215), 1, + [19215] = 3, + ACTIONS(256), 1, anon_sym_LPAREN, - STATE(100), 1, + STATE(130), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12029] = 2, + [19226] = 3, + ACTIONS(386), 1, + anon_sym_LPAREN, + STATE(183), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(542), 2, + [19237] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(705), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [12038] = 3, - ACTIONS(538), 1, - anon_sym_RPAREN, - ACTIONS(544), 1, - anon_sym_COMMA, + [19246] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12049] = 3, - ACTIONS(546), 1, + ACTIONS(707), 2, + sym_identifier, + anon_sym_in, + [19255] = 3, + ACTIONS(709), 1, aux_sym_signed_integer_token1, - ACTIONS(548), 1, + ACTIONS(711), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12060] = 3, - ACTIONS(550), 1, + [19266] = 3, + ACTIONS(713), 1, aux_sym_base_ten_token1, - STATE(190), 1, + STATE(197), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12071] = 2, + [19277] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(552), 2, + ACTIONS(715), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [12080] = 3, - ACTIONS(554), 1, + [19286] = 3, + ACTIONS(717), 1, aux_sym_signed_integer_token1, - ACTIONS(556), 1, + ACTIONS(719), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12091] = 2, + [19297] = 3, + ACTIONS(721), 1, + anon_sym_COMMA, + ACTIONS(723), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(525), 2, + [19308] = 3, + ACTIONS(723), 1, anon_sym_RPAREN, + ACTIONS(725), 1, anon_sym_COMMA, - [12100] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(558), 2, + [19319] = 3, + ACTIONS(727), 1, aux_sym_signed_integer_token1, + ACTIONS(729), 1, aux_sym_unsigned_integer_token1, - [12109] = 3, - ACTIONS(560), 1, - aux_sym_base_ten_token1, - STATE(70), 1, - sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12120] = 3, - ACTIONS(562), 1, + [19330] = 3, + ACTIONS(731), 1, aux_sym_base_ten_token1, - STATE(106), 1, + STATE(102), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12131] = 2, - ACTIONS(564), 1, + [19341] = 3, + ACTIONS(646), 1, sym_identifier, + STATE(355), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12139] = 2, - ACTIONS(540), 1, - anon_sym_COMMA, + [19352] = 2, + ACTIONS(733), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12147] = 2, - ACTIONS(566), 1, - ts_builtin_sym_end, + [19360] = 2, + ACTIONS(735), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12155] = 2, - ACTIONS(568), 1, - anon_sym_RPAREN, + [19368] = 2, + ACTIONS(737), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12163] = 2, - ACTIONS(570), 1, + [19376] = 2, + ACTIONS(739), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12171] = 2, - ACTIONS(572), 1, - sym_identifier, + [19384] = 2, + ACTIONS(741), 1, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12179] = 2, - ACTIONS(574), 1, - anon_sym_RPAREN, + [19392] = 2, + ACTIONS(743), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12187] = 2, - ACTIONS(576), 1, + [19400] = 2, + ACTIONS(745), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12195] = 2, - ACTIONS(578), 1, - anon_sym_RPAREN, + [19408] = 2, + ACTIONS(747), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12203] = 2, - ACTIONS(580), 1, + [19416] = 2, + ACTIONS(749), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12211] = 2, - ACTIONS(582), 1, - aux_sym_base_ten_token1, + [19424] = 2, + ACTIONS(751), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12219] = 2, - ACTIONS(584), 1, + [19432] = 2, + ACTIONS(753), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12227] = 2, - ACTIONS(586), 1, - aux_sym_binary_token2, + [19440] = 2, + ACTIONS(755), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12235] = 2, - ACTIONS(588), 1, + [19448] = 2, + ACTIONS(757), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12243] = 2, - ACTIONS(590), 1, - anon_sym_EQ, + [19456] = 2, + ACTIONS(759), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12251] = 2, - ACTIONS(592), 1, + [19464] = 2, + ACTIONS(761), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12259] = 2, - ACTIONS(594), 1, + [19472] = 2, + ACTIONS(763), 1, aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [12267] = 2, - ACTIONS(596), 1, - anon_sym_EQ, + [19480] = 2, + ACTIONS(765), 1, + aux_sym_base_ten_token1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [19488] = 2, + ACTIONS(767), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [19496] = 2, + ACTIONS(769), 1, + sym_identifier, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [19504] = 2, + ACTIONS(771), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [19512] = 2, + ACTIONS(725), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [19520] = 2, + ACTIONS(773), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [19528] = 2, + ACTIONS(775), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, }; static const uint32_t ts_small_parse_table_map[] = { - [SMALL_STATE(7)] = 0, - [SMALL_STATE(8)] = 96, - [SMALL_STATE(9)] = 192, - [SMALL_STATE(10)] = 288, - [SMALL_STATE(11)] = 384, - [SMALL_STATE(12)] = 480, - [SMALL_STATE(13)] = 570, - [SMALL_STATE(14)] = 660, - [SMALL_STATE(15)] = 750, - [SMALL_STATE(16)] = 840, - [SMALL_STATE(17)] = 930, - [SMALL_STATE(18)] = 1020, - [SMALL_STATE(19)] = 1110, - [SMALL_STATE(20)] = 1200, - [SMALL_STATE(21)] = 1290, - [SMALL_STATE(22)] = 1380, - [SMALL_STATE(23)] = 1470, - [SMALL_STATE(24)] = 1560, - [SMALL_STATE(25)] = 1650, - [SMALL_STATE(26)] = 1740, - [SMALL_STATE(27)] = 1830, - [SMALL_STATE(28)] = 1920, - [SMALL_STATE(29)] = 2010, - [SMALL_STATE(30)] = 2100, - [SMALL_STATE(31)] = 2190, - [SMALL_STATE(32)] = 2280, - [SMALL_STATE(33)] = 2370, - [SMALL_STATE(34)] = 2460, - [SMALL_STATE(35)] = 2550, - [SMALL_STATE(36)] = 2640, + [SMALL_STATE(9)] = 0, + [SMALL_STATE(10)] = 102, + [SMALL_STATE(11)] = 204, + [SMALL_STATE(12)] = 306, + [SMALL_STATE(13)] = 408, + [SMALL_STATE(14)] = 510, + [SMALL_STATE(15)] = 612, + [SMALL_STATE(16)] = 714, + [SMALL_STATE(17)] = 810, + [SMALL_STATE(18)] = 906, + [SMALL_STATE(19)] = 1002, + [SMALL_STATE(20)] = 1098, + [SMALL_STATE(21)] = 1194, + [SMALL_STATE(22)] = 1290, + [SMALL_STATE(23)] = 1386, + [SMALL_STATE(24)] = 1482, + [SMALL_STATE(25)] = 1578, + [SMALL_STATE(26)] = 1674, + [SMALL_STATE(27)] = 1770, + [SMALL_STATE(28)] = 1866, + [SMALL_STATE(29)] = 1962, + [SMALL_STATE(30)] = 2058, + [SMALL_STATE(31)] = 2154, + [SMALL_STATE(32)] = 2250, + [SMALL_STATE(33)] = 2346, + [SMALL_STATE(34)] = 2442, + [SMALL_STATE(35)] = 2538, + [SMALL_STATE(36)] = 2634, [SMALL_STATE(37)] = 2730, - [SMALL_STATE(38)] = 2820, - [SMALL_STATE(39)] = 2910, - [SMALL_STATE(40)] = 3000, - [SMALL_STATE(41)] = 3090, - [SMALL_STATE(42)] = 3180, - [SMALL_STATE(43)] = 3270, - [SMALL_STATE(44)] = 3360, - [SMALL_STATE(45)] = 3450, - [SMALL_STATE(46)] = 3540, - [SMALL_STATE(47)] = 3630, - [SMALL_STATE(48)] = 3720, - [SMALL_STATE(49)] = 3810, - [SMALL_STATE(50)] = 3900, - [SMALL_STATE(51)] = 3990, - [SMALL_STATE(52)] = 4043, - [SMALL_STATE(53)] = 4096, - [SMALL_STATE(54)] = 4149, - [SMALL_STATE(55)] = 4202, - [SMALL_STATE(56)] = 4255, - [SMALL_STATE(57)] = 4308, - [SMALL_STATE(58)] = 4361, - [SMALL_STATE(59)] = 4412, - [SMALL_STATE(60)] = 4465, - [SMALL_STATE(61)] = 4515, - [SMALL_STATE(62)] = 4577, - [SMALL_STATE(63)] = 4661, - [SMALL_STATE(64)] = 4711, - [SMALL_STATE(65)] = 4759, - [SMALL_STATE(66)] = 4807, - [SMALL_STATE(67)] = 4891, - [SMALL_STATE(68)] = 4939, - [SMALL_STATE(69)] = 4987, - [SMALL_STATE(70)] = 5035, - [SMALL_STATE(71)] = 5083, - [SMALL_STATE(72)] = 5143, - [SMALL_STATE(73)] = 5197, - [SMALL_STATE(74)] = 5253, - [SMALL_STATE(75)] = 5315, - [SMALL_STATE(76)] = 5381, - [SMALL_STATE(77)] = 5451, - [SMALL_STATE(78)] = 5519, - [SMALL_STATE(79)] = 5591, - [SMALL_STATE(80)] = 5667, - [SMALL_STATE(81)] = 5745, - [SMALL_STATE(82)] = 5825, - [SMALL_STATE(83)] = 5909, - [SMALL_STATE(84)] = 5957, - [SMALL_STATE(85)] = 6041, - [SMALL_STATE(86)] = 6125, - [SMALL_STATE(87)] = 6172, - [SMALL_STATE(88)] = 6219, - [SMALL_STATE(89)] = 6266, - [SMALL_STATE(90)] = 6313, - [SMALL_STATE(91)] = 6360, - [SMALL_STATE(92)] = 6409, - [SMALL_STATE(93)] = 6456, - [SMALL_STATE(94)] = 6503, - [SMALL_STATE(95)] = 6550, - [SMALL_STATE(96)] = 6597, - [SMALL_STATE(97)] = 6644, - [SMALL_STATE(98)] = 6691, - [SMALL_STATE(99)] = 6738, - [SMALL_STATE(100)] = 6785, - [SMALL_STATE(101)] = 6832, - [SMALL_STATE(102)] = 6879, - [SMALL_STATE(103)] = 6926, - [SMALL_STATE(104)] = 6973, - [SMALL_STATE(105)] = 7018, - [SMALL_STATE(106)] = 7067, - [SMALL_STATE(107)] = 7109, - [SMALL_STATE(108)] = 7151, - [SMALL_STATE(109)] = 7196, - [SMALL_STATE(110)] = 7241, - [SMALL_STATE(111)] = 7286, - [SMALL_STATE(112)] = 7331, - [SMALL_STATE(113)] = 7376, - [SMALL_STATE(114)] = 7421, - [SMALL_STATE(115)] = 7461, - [SMALL_STATE(116)] = 7515, - [SMALL_STATE(117)] = 7555, - [SMALL_STATE(118)] = 7595, - [SMALL_STATE(119)] = 7637, - [SMALL_STATE(120)] = 7703, - [SMALL_STATE(121)] = 7771, - [SMALL_STATE(122)] = 7841, - [SMALL_STATE(123)] = 7915, - [SMALL_STATE(124)] = 7957, - [SMALL_STATE(125)] = 8017, - [SMALL_STATE(126)] = 8057, - [SMALL_STATE(127)] = 8113, - [SMALL_STATE(128)] = 8187, - [SMALL_STATE(129)] = 8249, - [SMALL_STATE(130)] = 8289, - [SMALL_STATE(131)] = 8329, - [SMALL_STATE(132)] = 8403, - [SMALL_STATE(133)] = 8443, - [SMALL_STATE(134)] = 8517, - [SMALL_STATE(135)] = 8557, - [SMALL_STATE(136)] = 8631, - [SMALL_STATE(137)] = 8683, - [SMALL_STATE(138)] = 8729, - [SMALL_STATE(139)] = 8777, - [SMALL_STATE(140)] = 8835, - [SMALL_STATE(141)] = 8874, - [SMALL_STATE(142)] = 8913, - [SMALL_STATE(143)] = 8952, - [SMALL_STATE(144)] = 8991, - [SMALL_STATE(145)] = 9030, - [SMALL_STATE(146)] = 9069, - [SMALL_STATE(147)] = 9108, - [SMALL_STATE(148)] = 9147, - [SMALL_STATE(149)] = 9186, - [SMALL_STATE(150)] = 9225, - [SMALL_STATE(151)] = 9264, - [SMALL_STATE(152)] = 9303, - [SMALL_STATE(153)] = 9342, - [SMALL_STATE(154)] = 9389, - [SMALL_STATE(155)] = 9459, - [SMALL_STATE(156)] = 9528, - [SMALL_STATE(157)] = 9597, - [SMALL_STATE(158)] = 9664, - [SMALL_STATE(159)] = 9733, - [SMALL_STATE(160)] = 9802, - [SMALL_STATE(161)] = 9869, - [SMALL_STATE(162)] = 9935, - [SMALL_STATE(163)] = 10001, - [SMALL_STATE(164)] = 10067, - [SMALL_STATE(165)] = 10133, - [SMALL_STATE(166)] = 10199, - [SMALL_STATE(167)] = 10265, - [SMALL_STATE(168)] = 10331, - [SMALL_STATE(169)] = 10384, - [SMALL_STATE(170)] = 10437, - [SMALL_STATE(171)] = 10490, - [SMALL_STATE(172)] = 10543, - [SMALL_STATE(173)] = 10596, - [SMALL_STATE(174)] = 10649, - [SMALL_STATE(175)] = 10702, - [SMALL_STATE(176)] = 10755, - [SMALL_STATE(177)] = 10808, - [SMALL_STATE(178)] = 10861, - [SMALL_STATE(179)] = 10914, - [SMALL_STATE(180)] = 10967, - [SMALL_STATE(181)] = 11020, - [SMALL_STATE(182)] = 11047, - [SMALL_STATE(183)] = 11073, - [SMALL_STATE(184)] = 11100, - [SMALL_STATE(185)] = 11127, - [SMALL_STATE(186)] = 11152, - [SMALL_STATE(187)] = 11174, - [SMALL_STATE(188)] = 11196, - [SMALL_STATE(189)] = 11218, - [SMALL_STATE(190)] = 11240, - [SMALL_STATE(191)] = 11262, - [SMALL_STATE(192)] = 11288, - [SMALL_STATE(193)] = 11310, - [SMALL_STATE(194)] = 11338, - [SMALL_STATE(195)] = 11358, - [SMALL_STATE(196)] = 11386, - [SMALL_STATE(197)] = 11406, - [SMALL_STATE(198)] = 11426, - [SMALL_STATE(199)] = 11454, - [SMALL_STATE(200)] = 11472, - [SMALL_STATE(201)] = 11492, - [SMALL_STATE(202)] = 11514, - [SMALL_STATE(203)] = 11537, - [SMALL_STATE(204)] = 11558, - [SMALL_STATE(205)] = 11581, - [SMALL_STATE(206)] = 11604, - [SMALL_STATE(207)] = 11625, - [SMALL_STATE(208)] = 11646, - [SMALL_STATE(209)] = 11664, - [SMALL_STATE(210)] = 11679, - [SMALL_STATE(211)] = 11694, - [SMALL_STATE(212)] = 11709, - [SMALL_STATE(213)] = 11724, - [SMALL_STATE(214)] = 11739, - [SMALL_STATE(215)] = 11754, - [SMALL_STATE(216)] = 11769, - [SMALL_STATE(217)] = 11783, - [SMALL_STATE(218)] = 11793, - [SMALL_STATE(219)] = 11807, - [SMALL_STATE(220)] = 11821, - [SMALL_STATE(221)] = 11835, - [SMALL_STATE(222)] = 11849, - [SMALL_STATE(223)] = 11863, - [SMALL_STATE(224)] = 11877, - [SMALL_STATE(225)] = 11889, - [SMALL_STATE(226)] = 11903, - [SMALL_STATE(227)] = 11917, - [SMALL_STATE(228)] = 11931, - [SMALL_STATE(229)] = 11945, - [SMALL_STATE(230)] = 11954, - [SMALL_STATE(231)] = 11965, - [SMALL_STATE(232)] = 11974, - [SMALL_STATE(233)] = 11985, - [SMALL_STATE(234)] = 11996, - [SMALL_STATE(235)] = 12007, - [SMALL_STATE(236)] = 12018, - [SMALL_STATE(237)] = 12029, - [SMALL_STATE(238)] = 12038, - [SMALL_STATE(239)] = 12049, - [SMALL_STATE(240)] = 12060, - [SMALL_STATE(241)] = 12071, - [SMALL_STATE(242)] = 12080, - [SMALL_STATE(243)] = 12091, - [SMALL_STATE(244)] = 12100, - [SMALL_STATE(245)] = 12109, - [SMALL_STATE(246)] = 12120, - [SMALL_STATE(247)] = 12131, - [SMALL_STATE(248)] = 12139, - [SMALL_STATE(249)] = 12147, - [SMALL_STATE(250)] = 12155, - [SMALL_STATE(251)] = 12163, - [SMALL_STATE(252)] = 12171, - [SMALL_STATE(253)] = 12179, - [SMALL_STATE(254)] = 12187, - [SMALL_STATE(255)] = 12195, - [SMALL_STATE(256)] = 12203, - [SMALL_STATE(257)] = 12211, - [SMALL_STATE(258)] = 12219, - [SMALL_STATE(259)] = 12227, - [SMALL_STATE(260)] = 12235, - [SMALL_STATE(261)] = 12243, - [SMALL_STATE(262)] = 12251, - [SMALL_STATE(263)] = 12259, - [SMALL_STATE(264)] = 12267, + [SMALL_STATE(38)] = 2826, + [SMALL_STATE(39)] = 2922, + [SMALL_STATE(40)] = 3018, + [SMALL_STATE(41)] = 3114, + [SMALL_STATE(42)] = 3210, + [SMALL_STATE(43)] = 3306, + [SMALL_STATE(44)] = 3402, + [SMALL_STATE(45)] = 3498, + [SMALL_STATE(46)] = 3594, + [SMALL_STATE(47)] = 3690, + [SMALL_STATE(48)] = 3786, + [SMALL_STATE(49)] = 3882, + [SMALL_STATE(50)] = 3978, + [SMALL_STATE(51)] = 4074, + [SMALL_STATE(52)] = 4170, + [SMALL_STATE(53)] = 4266, + [SMALL_STATE(54)] = 4362, + [SMALL_STATE(55)] = 4458, + [SMALL_STATE(56)] = 4554, + [SMALL_STATE(57)] = 4650, + [SMALL_STATE(58)] = 4746, + [SMALL_STATE(59)] = 4842, + [SMALL_STATE(60)] = 4938, + [SMALL_STATE(61)] = 5034, + [SMALL_STATE(62)] = 5130, + [SMALL_STATE(63)] = 5226, + [SMALL_STATE(64)] = 5322, + [SMALL_STATE(65)] = 5418, + [SMALL_STATE(66)] = 5514, + [SMALL_STATE(67)] = 5610, + [SMALL_STATE(68)] = 5706, + [SMALL_STATE(69)] = 5802, + [SMALL_STATE(70)] = 5898, + [SMALL_STATE(71)] = 5994, + [SMALL_STATE(72)] = 6090, + [SMALL_STATE(73)] = 6186, + [SMALL_STATE(74)] = 6282, + [SMALL_STATE(75)] = 6378, + [SMALL_STATE(76)] = 6474, + [SMALL_STATE(77)] = 6570, + [SMALL_STATE(78)] = 6666, + [SMALL_STATE(79)] = 6762, + [SMALL_STATE(80)] = 6858, + [SMALL_STATE(81)] = 6954, + [SMALL_STATE(82)] = 7050, + [SMALL_STATE(83)] = 7146, + [SMALL_STATE(84)] = 7242, + [SMALL_STATE(85)] = 7296, + [SMALL_STATE(86)] = 7350, + [SMALL_STATE(87)] = 7402, + [SMALL_STATE(88)] = 7456, + [SMALL_STATE(89)] = 7510, + [SMALL_STATE(90)] = 7564, + [SMALL_STATE(91)] = 7618, + [SMALL_STATE(92)] = 7672, + [SMALL_STATE(93)] = 7726, + [SMALL_STATE(94)] = 7775, + [SMALL_STATE(95)] = 7826, + [SMALL_STATE(96)] = 7911, + [SMALL_STATE(97)] = 7962, + [SMALL_STATE(98)] = 8011, + [SMALL_STATE(99)] = 8096, + [SMALL_STATE(100)] = 8145, + [SMALL_STATE(101)] = 8194, + [SMALL_STATE(102)] = 8243, + [SMALL_STATE(103)] = 8292, + [SMALL_STATE(104)] = 8353, + [SMALL_STATE(105)] = 8408, + [SMALL_STATE(106)] = 8465, + [SMALL_STATE(107)] = 8528, + [SMALL_STATE(108)] = 8595, + [SMALL_STATE(109)] = 8666, + [SMALL_STATE(110)] = 8735, + [SMALL_STATE(111)] = 8808, + [SMALL_STATE(112)] = 8885, + [SMALL_STATE(113)] = 8964, + [SMALL_STATE(114)] = 9045, + [SMALL_STATE(115)] = 9130, + [SMALL_STATE(116)] = 9179, + [SMALL_STATE(117)] = 9264, + [SMALL_STATE(118)] = 9349, + [SMALL_STATE(119)] = 9412, + [SMALL_STATE(120)] = 9460, + [SMALL_STATE(121)] = 9508, + [SMALL_STATE(122)] = 9556, + [SMALL_STATE(123)] = 9604, + [SMALL_STATE(124)] = 9652, + [SMALL_STATE(125)] = 9702, + [SMALL_STATE(126)] = 9750, + [SMALL_STATE(127)] = 9798, + [SMALL_STATE(128)] = 9846, + [SMALL_STATE(129)] = 9894, + [SMALL_STATE(130)] = 9942, + [SMALL_STATE(131)] = 9990, + [SMALL_STATE(132)] = 10038, + [SMALL_STATE(133)] = 10086, + [SMALL_STATE(134)] = 10134, + [SMALL_STATE(135)] = 10182, + [SMALL_STATE(136)] = 10230, + [SMALL_STATE(137)] = 10278, + [SMALL_STATE(138)] = 10326, + [SMALL_STATE(139)] = 10374, + [SMALL_STATE(140)] = 10421, + [SMALL_STATE(141)] = 10466, + [SMALL_STATE(142)] = 10515, + [SMALL_STATE(143)] = 10557, + [SMALL_STATE(144)] = 10599, + [SMALL_STATE(145)] = 10644, + [SMALL_STATE(146)] = 10689, + [SMALL_STATE(147)] = 10734, + [SMALL_STATE(148)] = 10779, + [SMALL_STATE(149)] = 10824, + [SMALL_STATE(150)] = 10869, + [SMALL_STATE(151)] = 10909, + [SMALL_STATE(152)] = 10949, + [SMALL_STATE(153)] = 10989, + [SMALL_STATE(154)] = 11029, + [SMALL_STATE(155)] = 11075, + [SMALL_STATE(156)] = 11123, + [SMALL_STATE(157)] = 11177, + [SMALL_STATE(158)] = 11233, + [SMALL_STATE(159)] = 11293, + [SMALL_STATE(160)] = 11351, + [SMALL_STATE(161)] = 11413, + [SMALL_STATE(162)] = 11479, + [SMALL_STATE(163)] = 11547, + [SMALL_STATE(164)] = 11589, + [SMALL_STATE(165)] = 11659, + [SMALL_STATE(166)] = 11699, + [SMALL_STATE(167)] = 11739, + [SMALL_STATE(168)] = 11813, + [SMALL_STATE(169)] = 11853, + [SMALL_STATE(170)] = 11927, + [SMALL_STATE(171)] = 12001, + [SMALL_STATE(172)] = 12075, + [SMALL_STATE(173)] = 12149, + [SMALL_STATE(174)] = 12189, + [SMALL_STATE(175)] = 12241, + [SMALL_STATE(176)] = 12283, + [SMALL_STATE(177)] = 12322, + [SMALL_STATE(178)] = 12361, + [SMALL_STATE(179)] = 12400, + [SMALL_STATE(180)] = 12439, + [SMALL_STATE(181)] = 12480, + [SMALL_STATE(182)] = 12519, + [SMALL_STATE(183)] = 12558, + [SMALL_STATE(184)] = 12597, + [SMALL_STATE(185)] = 12636, + [SMALL_STATE(186)] = 12675, + [SMALL_STATE(187)] = 12714, + [SMALL_STATE(188)] = 12753, + [SMALL_STATE(189)] = 12792, + [SMALL_STATE(190)] = 12831, + [SMALL_STATE(191)] = 12870, + [SMALL_STATE(192)] = 12909, + [SMALL_STATE(193)] = 12948, + [SMALL_STATE(194)] = 12987, + [SMALL_STATE(195)] = 13028, + [SMALL_STATE(196)] = 13075, + [SMALL_STATE(197)] = 13145, + [SMALL_STATE(198)] = 13181, + [SMALL_STATE(199)] = 13217, + [SMALL_STATE(200)] = 13257, + [SMALL_STATE(201)] = 13297, + [SMALL_STATE(202)] = 13337, + [SMALL_STATE(203)] = 13377, + [SMALL_STATE(204)] = 13417, + [SMALL_STATE(205)] = 13457, + [SMALL_STATE(206)] = 13526, + [SMALL_STATE(207)] = 13595, + [SMALL_STATE(208)] = 13662, + [SMALL_STATE(209)] = 13731, + [SMALL_STATE(210)] = 13768, + [SMALL_STATE(211)] = 13835, + [SMALL_STATE(212)] = 13872, + [SMALL_STATE(213)] = 13941, + [SMALL_STATE(214)] = 13976, + [SMALL_STATE(215)] = 14011, + [SMALL_STATE(216)] = 14078, + [SMALL_STATE(217)] = 14113, + [SMALL_STATE(218)] = 14148, + [SMALL_STATE(219)] = 14195, + [SMALL_STATE(220)] = 14236, + [SMALL_STATE(221)] = 14279, + [SMALL_STATE(222)] = 14348, + [SMALL_STATE(223)] = 14399, + [SMALL_STATE(224)] = 14454, + [SMALL_STATE(225)] = 14507, + [SMALL_STATE(226)] = 14564, + [SMALL_STATE(227)] = 14625, + [SMALL_STATE(228)] = 14688, + [SMALL_STATE(229)] = 14753, + [SMALL_STATE(230)] = 14820, + [SMALL_STATE(231)] = 14855, + [SMALL_STATE(232)] = 14922, + [SMALL_STATE(233)] = 14989, + [SMALL_STATE(234)] = 15058, + [SMALL_STATE(235)] = 15127, + [SMALL_STATE(236)] = 15196, + [SMALL_STATE(237)] = 15265, + [SMALL_STATE(238)] = 15332, + [SMALL_STATE(239)] = 15401, + [SMALL_STATE(240)] = 15470, + [SMALL_STATE(241)] = 15539, + [SMALL_STATE(242)] = 15588, + [SMALL_STATE(243)] = 15654, + [SMALL_STATE(244)] = 15688, + [SMALL_STATE(245)] = 15722, + [SMALL_STATE(246)] = 15788, + [SMALL_STATE(247)] = 15822, + [SMALL_STATE(248)] = 15856, + [SMALL_STATE(249)] = 15890, + [SMALL_STATE(250)] = 15924, + [SMALL_STATE(251)] = 15958, + [SMALL_STATE(252)] = 15992, + [SMALL_STATE(253)] = 16026, + [SMALL_STATE(254)] = 16060, + [SMALL_STATE(255)] = 16094, + [SMALL_STATE(256)] = 16128, + [SMALL_STATE(257)] = 16194, + [SMALL_STATE(258)] = 16228, + [SMALL_STATE(259)] = 16262, + [SMALL_STATE(260)] = 16296, + [SMALL_STATE(261)] = 16330, + [SMALL_STATE(262)] = 16396, + [SMALL_STATE(263)] = 16462, + [SMALL_STATE(264)] = 16528, + [SMALL_STATE(265)] = 16594, + [SMALL_STATE(266)] = 16628, + [SMALL_STATE(267)] = 16694, + [SMALL_STATE(268)] = 16760, + [SMALL_STATE(269)] = 16794, + [SMALL_STATE(270)] = 16860, + [SMALL_STATE(271)] = 16926, + [SMALL_STATE(272)] = 16992, + [SMALL_STATE(273)] = 17058, + [SMALL_STATE(274)] = 17124, + [SMALL_STATE(275)] = 17190, + [SMALL_STATE(276)] = 17224, + [SMALL_STATE(277)] = 17277, + [SMALL_STATE(278)] = 17330, + [SMALL_STATE(279)] = 17383, + [SMALL_STATE(280)] = 17436, + [SMALL_STATE(281)] = 17489, + [SMALL_STATE(282)] = 17542, + [SMALL_STATE(283)] = 17595, + [SMALL_STATE(284)] = 17648, + [SMALL_STATE(285)] = 17701, + [SMALL_STATE(286)] = 17754, + [SMALL_STATE(287)] = 17807, + [SMALL_STATE(288)] = 17860, + [SMALL_STATE(289)] = 17913, + [SMALL_STATE(290)] = 17966, + [SMALL_STATE(291)] = 18019, + [SMALL_STATE(292)] = 18047, + [SMALL_STATE(293)] = 18074, + [SMALL_STATE(294)] = 18101, + [SMALL_STATE(295)] = 18128, + [SMALL_STATE(296)] = 18153, + [SMALL_STATE(297)] = 18175, + [SMALL_STATE(298)] = 18197, + [SMALL_STATE(299)] = 18219, + [SMALL_STATE(300)] = 18241, + [SMALL_STATE(301)] = 18263, + [SMALL_STATE(302)] = 18285, + [SMALL_STATE(303)] = 18313, + [SMALL_STATE(304)] = 18339, + [SMALL_STATE(305)] = 18359, + [SMALL_STATE(306)] = 18379, + [SMALL_STATE(307)] = 18407, + [SMALL_STATE(308)] = 18427, + [SMALL_STATE(309)] = 18455, + [SMALL_STATE(310)] = 18483, + [SMALL_STATE(311)] = 18505, + [SMALL_STATE(312)] = 18523, + [SMALL_STATE(313)] = 18543, + [SMALL_STATE(314)] = 18564, + [SMALL_STATE(315)] = 18585, + [SMALL_STATE(316)] = 18608, + [SMALL_STATE(317)] = 18631, + [SMALL_STATE(318)] = 18654, + [SMALL_STATE(319)] = 18675, + [SMALL_STATE(320)] = 18698, + [SMALL_STATE(321)] = 18719, + [SMALL_STATE(322)] = 18737, + [SMALL_STATE(323)] = 18752, + [SMALL_STATE(324)] = 18767, + [SMALL_STATE(325)] = 18782, + [SMALL_STATE(326)] = 18797, + [SMALL_STATE(327)] = 18812, + [SMALL_STATE(328)] = 18827, + [SMALL_STATE(329)] = 18842, + [SMALL_STATE(330)] = 18857, + [SMALL_STATE(331)] = 18872, + [SMALL_STATE(332)] = 18887, + [SMALL_STATE(333)] = 18901, + [SMALL_STATE(334)] = 18915, + [SMALL_STATE(335)] = 18929, + [SMALL_STATE(336)] = 18943, + [SMALL_STATE(337)] = 18957, + [SMALL_STATE(338)] = 18967, + [SMALL_STATE(339)] = 18981, + [SMALL_STATE(340)] = 18995, + [SMALL_STATE(341)] = 19009, + [SMALL_STATE(342)] = 19023, + [SMALL_STATE(343)] = 19037, + [SMALL_STATE(344)] = 19049, + [SMALL_STATE(345)] = 19063, + [SMALL_STATE(346)] = 19077, + [SMALL_STATE(347)] = 19091, + [SMALL_STATE(348)] = 19105, + [SMALL_STATE(349)] = 19119, + [SMALL_STATE(350)] = 19133, + [SMALL_STATE(351)] = 19142, + [SMALL_STATE(352)] = 19151, + [SMALL_STATE(353)] = 19162, + [SMALL_STATE(354)] = 19173, + [SMALL_STATE(355)] = 19184, + [SMALL_STATE(356)] = 19193, + [SMALL_STATE(357)] = 19204, + [SMALL_STATE(358)] = 19215, + [SMALL_STATE(359)] = 19226, + [SMALL_STATE(360)] = 19237, + [SMALL_STATE(361)] = 19246, + [SMALL_STATE(362)] = 19255, + [SMALL_STATE(363)] = 19266, + [SMALL_STATE(364)] = 19277, + [SMALL_STATE(365)] = 19286, + [SMALL_STATE(366)] = 19297, + [SMALL_STATE(367)] = 19308, + [SMALL_STATE(368)] = 19319, + [SMALL_STATE(369)] = 19330, + [SMALL_STATE(370)] = 19341, + [SMALL_STATE(371)] = 19352, + [SMALL_STATE(372)] = 19360, + [SMALL_STATE(373)] = 19368, + [SMALL_STATE(374)] = 19376, + [SMALL_STATE(375)] = 19384, + [SMALL_STATE(376)] = 19392, + [SMALL_STATE(377)] = 19400, + [SMALL_STATE(378)] = 19408, + [SMALL_STATE(379)] = 19416, + [SMALL_STATE(380)] = 19424, + [SMALL_STATE(381)] = 19432, + [SMALL_STATE(382)] = 19440, + [SMALL_STATE(383)] = 19448, + [SMALL_STATE(384)] = 19456, + [SMALL_STATE(385)] = 19464, + [SMALL_STATE(386)] = 19472, + [SMALL_STATE(387)] = 19480, + [SMALL_STATE(388)] = 19488, + [SMALL_STATE(389)] = 19496, + [SMALL_STATE(390)] = 19504, + [SMALL_STATE(391)] = 19512, + [SMALL_STATE(392)] = 19520, + [SMALL_STATE(393)] = 19528, }; 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 = false}}, SHIFT(113), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(109), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(103), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(263), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), - [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(151), - [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(215), - [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), - [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), - [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), - [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(31), - [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), - [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(33), - [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(34), - [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36), - [57] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), - [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), - [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(153), - [71] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), - [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [77] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [79] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(113), - [82] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(150), - [85] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(109), - [88] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(103), - [91] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(257), - [94] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(263), - [97] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(259), - [100] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(151), - [103] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(23), - [106] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(27), - [109] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(215), - [112] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(4), - [115] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(7), - [118] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [120] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(178), - [123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), - [125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), - [127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [129] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), - [131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), - [133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), - [135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), - [137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(102), - [139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), - [143] = {.entry = {.count = 1, .reusable = false}}, SHIFT(209), - [145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), - [149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), - [151] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), - [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), - [155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), - [157] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), - [159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), - [161] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(251), - [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), - [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), - [168] = {.entry = {.count = 1, .reusable = false}}, SHIFT(251), - [170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 2, 0, 0), - [172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 2, 0, 0), - [174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 2, 0, 3), - [176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 2, 0, 3), - [178] = {.entry = {.count = 1, .reusable = false}}, SHIFT(252), - [180] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), - [182] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), - [184] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [188] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(252), - [191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [195] = {.entry = {.count = 1, .reusable = false}}, SHIFT(245), - [197] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [199] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [201] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [203] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), - [209] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 16), - [211] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 16), - [213] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 4), - [215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), - [217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 4), - [219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [221] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [223] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [225] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), - [227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), - [229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), - [231] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 10), - [233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 10), - [235] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 12), - [237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 12), - [239] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 14), - [241] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 14), - [243] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), - [245] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), - [247] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 17), - [249] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 17), - [251] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 20), - [253] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 20), - [255] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 22), - [257] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 22), - [259] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 23), - [261] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 23), - [263] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [265] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [267] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 13), - [269] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 13), - [271] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 5), - [273] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 5), - [275] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [277] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [279] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 5), - [281] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 5), - [283] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 7), - [285] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 7), - [287] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [289] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [291] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 6), - [293] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 6), - [295] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 27), - [297] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 27), - [299] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 26), - [301] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 26), - [303] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 19), - [305] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 19), - [307] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 21), - [309] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 21), - [311] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [313] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [315] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [317] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [319] = {.entry = {.count = 1, .reusable = false}}, SHIFT(246), - [321] = {.entry = {.count = 1, .reusable = false}}, SHIFT(134), - [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), - [325] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(258), - [328] = {.entry = {.count = 1, .reusable = false}}, SHIFT(262), - [330] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(262), - [333] = {.entry = {.count = 1, .reusable = false}}, SHIFT(258), - [335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256), - [337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [341] = {.entry = {.count = 1, .reusable = false}}, SHIFT(45), - [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), - [347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), - [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [351] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), - [353] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), - [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), - [357] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), - [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [365] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), - [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [371] = {.entry = {.count = 1, .reusable = false}}, SHIFT(21), - [373] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), - [375] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), - [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181), - [379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), - [381] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 25), - [383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), - [385] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 18), - [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [391] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), - [393] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), - [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), - [401] = {.entry = {.count = 1, .reusable = false}}, SHIFT(183), - [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), - [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), - [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), - [409] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [411] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), - [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), - [415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), - [417] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), - [419] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), - [421] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [423] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [425] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), - [427] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), - [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), - [431] = {.entry = {.count = 1, .reusable = false}}, SHIFT(170), - [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), - [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), - [437] = {.entry = {.count = 1, .reusable = false}}, SHIFT(171), - [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), - [441] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), - [443] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), - [445] = {.entry = {.count = 1, .reusable = false}}, SHIFT(180), - [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(180), - [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), - [451] = {.entry = {.count = 1, .reusable = false}}, SHIFT(174), - [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), - [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), - [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), - [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), - [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), - [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), - [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), - [471] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(232), - [474] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [476] = {.entry = {.count = 1, .reusable = false}}, SHIFT(261), - [478] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), - [480] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(261), - [483] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), - [485] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), - [487] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), - [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), - [493] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), - [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), - [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), - [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), - [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), - [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(264), - [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), - [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), - [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), - [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [517] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 11), - [519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), - [521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), - [523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), - [525] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [527] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(230), - [530] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 24), - [532] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), - [538] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), - [542] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), - [546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), - [548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), - [550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), - [552] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), - [556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), - [558] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), - [564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), - [566] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [574] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), - [578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), - [582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), - [584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), - [586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), - [588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), - [590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), - [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), - [596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(145), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(184), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(147), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(139), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(387), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(386), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(375), + [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(187), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(64), + [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(330), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), + [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(373), + [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), + [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36), + [49] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(37), + [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38), + [55] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), + [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [63] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), + [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), + [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [69] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(195), + [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), + [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(366), + [77] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [79] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), + [81] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181), + [83] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(145), + [86] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(184), + [89] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(147), + [92] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(139), + [95] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(387), + [98] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(386), + [101] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(375), + [104] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(47), + [107] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(187), + [110] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(25), + [113] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(64), + [116] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(330), + [119] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(5), + [122] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(9), + [125] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [127] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(285), + [130] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), + [132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), + [138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), + [140] = {.entry = {.count = 1, .reusable = false}}, SHIFT(85), + [142] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), + [144] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), + [146] = {.entry = {.count = 1, .reusable = false}}, SHIFT(84), + [148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [150] = {.entry = {.count = 1, .reusable = false}}, SHIFT(134), + [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [154] = {.entry = {.count = 1, .reusable = false}}, SHIFT(80), + [156] = {.entry = {.count = 1, .reusable = false}}, SHIFT(328), + [158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(283), + [164] = {.entry = {.count = 1, .reusable = false}}, SHIFT(199), + [166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), + [168] = {.entry = {.count = 1, .reusable = false}}, SHIFT(200), + [170] = {.entry = {.count = 1, .reusable = false}}, SHIFT(180), + [172] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [174] = {.entry = {.count = 1, .reusable = false}}, SHIFT(246), + [176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [178] = {.entry = {.count = 1, .reusable = false}}, SHIFT(81), + [180] = {.entry = {.count = 1, .reusable = false}}, SHIFT(323), + [182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [186] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), + [188] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [190] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [192] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), + [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), + [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), + [198] = {.entry = {.count = 1, .reusable = false}}, SHIFT(376), + [200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [204] = {.entry = {.count = 1, .reusable = false}}, SHIFT(369), + [206] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [208] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [210] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [212] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), + [214] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), + [216] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(376), + [219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 2, 0, 0), + [221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 2, 0, 0), + [223] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), + [225] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), + [227] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(374), + [230] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 2, 0, 3), + [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 2, 0, 3), + [234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(374), + [236] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), + [238] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), + [240] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), + [242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), + [244] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [246] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), + [250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 4), + [252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 4), + [254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(334), + [258] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [262] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), + [264] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 10), + [266] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 10), + [268] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 12), + [270] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 12), + [272] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 14), + [274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 14), + [276] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), + [278] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), + [280] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 16), + [282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 16), + [284] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 17), + [286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 17), + [288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 20), + [290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 20), + [292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 22), + [294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 22), + [296] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 24), + [298] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 24), + [300] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 27), + [302] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 27), + [304] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 5), + [306] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 5), + [308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 13), + [310] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 13), + [312] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 6), + [314] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 6), + [316] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [318] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [320] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 7), + [322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 7), + [324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [328] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 19), + [330] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 19), + [332] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [334] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [336] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 21), + [338] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 21), + [340] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 5), + [342] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 5), + [344] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 23), + [346] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 23), + [348] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 29), + [350] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 29), + [352] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [356] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 28), + [358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 28), + [360] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 30), + [362] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 30), + [364] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [366] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [368] = {.entry = {.count = 1, .reusable = false}}, SHIFT(356), + [370] = {.entry = {.count = 1, .reusable = false}}, SHIFT(153), + [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [374] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(389), + [377] = {.entry = {.count = 1, .reusable = false}}, SHIFT(389), + [379] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(378), + [382] = {.entry = {.count = 1, .reusable = false}}, SHIFT(378), + [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(381), + [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(342), + [388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [392] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), + [394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [398] = {.entry = {.count = 1, .reusable = false}}, SHIFT(69), + [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [402] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70), + [404] = {.entry = {.count = 1, .reusable = false}}, SHIFT(72), + [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(331), + [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [414] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), + [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [418] = {.entry = {.count = 1, .reusable = false}}, SHIFT(363), + [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), + [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [424] = {.entry = {.count = 1, .reusable = false}}, SHIFT(24), + [426] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), + [428] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), + [430] = {.entry = {.count = 1, .reusable = false}}, SHIFT(385), + [432] = {.entry = {.count = 1, .reusable = false}}, SHIFT(371), + [434] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(385), + [437] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(371), + [440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), + [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275), + [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(379), + [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [450] = {.entry = {.count = 1, .reusable = false}}, SHIFT(52), + [452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [456] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), + [458] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [462] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), + [464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [470] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), + [472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(336), + [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), + [478] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 26), + [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), + [484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(326), + [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), + [488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), + [492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), + [498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), + [502] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 18), + [504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), + [506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), + [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), + [514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), + [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(265), + [524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [526] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), + [530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), + [532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(361), + [534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), + [540] = {.entry = {.count = 1, .reusable = false}}, SHIFT(293), + [542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(280), + [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(279), + [546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), + [548] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [550] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), + [552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), + [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(353), + [556] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [558] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [560] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), + [562] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), + [564] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), + [566] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), + [568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278), + [570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(277), + [572] = {.entry = {.count = 1, .reusable = false}}, SHIFT(276), + [574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), + [576] = {.entry = {.count = 1, .reusable = false}}, SHIFT(288), + [578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), + [580] = {.entry = {.count = 1, .reusable = false}}, SHIFT(284), + [582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), + [584] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), + [586] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), + [588] = {.entry = {.count = 1, .reusable = false}}, SHIFT(287), + [590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), + [592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), + [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(286), + [596] = {.entry = {.count = 1, .reusable = false}}, SHIFT(282), + [598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), + [600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), + [602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), + [604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(354), + [606] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [608] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), + [612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(255), + [614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), + [616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), + [618] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(354), + [621] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [623] = {.entry = {.count = 1, .reusable = false}}, SHIFT(380), + [625] = {.entry = {.count = 1, .reusable = false}}, SHIFT(61), + [627] = {.entry = {.count = 1, .reusable = false}}, SHIFT(49), + [629] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [631] = {.entry = {.count = 1, .reusable = true}}, SHIFT(319), + [633] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), + [635] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(380), + [638] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), + [640] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), + [642] = {.entry = {.count = 1, .reusable = false}}, SHIFT(45), + [644] = {.entry = {.count = 1, .reusable = false}}, SHIFT(44), + [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(372), + [648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(338), + [652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(268), + [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [656] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(370), + [659] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [661] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), + [663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), + [665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(340), + [667] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254), + [669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(346), + [671] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [673] = {.entry = {.count = 1, .reusable = true}}, SHIFT(191), + [675] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 11), + [677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(332), + [681] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [683] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [685] = {.entry = {.count = 1, .reusable = true}}, SHIFT(348), + [687] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), + [689] = {.entry = {.count = 1, .reusable = true}}, SHIFT(345), + [691] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [693] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [695] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), + [699] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), + [703] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [705] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [707] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 25), + [709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(258), + [711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), + [715] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), + [719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), + [721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(390), + [723] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [725] = {.entry = {.count = 1, .reusable = true}}, SHIFT(337), + [727] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), + [729] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), + [731] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [733] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), + [735] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [737] = {.entry = {.count = 1, .reusable = true}}, SHIFT(358), + [739] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [741] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360), + [743] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [745] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), + [747] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), + [749] = {.entry = {.count = 1, .reusable = true}}, SHIFT(357), + [751] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [753] = {.entry = {.count = 1, .reusable = true}}, SHIFT(359), + [755] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), + [757] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), + [759] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [761] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), + [763] = {.entry = {.count = 1, .reusable = true}}, SHIFT(364), + [765] = {.entry = {.count = 1, .reusable = true}}, SHIFT(350), + [767] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [769] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [771] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [773] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), + [775] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt b/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt index 606fb28..965034e 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt @@ -37,3 +37,41 @@ Precedence (expression (identity_path (identifier)))))) + +================== +Vectors +================== + +<(a, b)> + <(a, b)> == <(a, b)> + +--- + +(source_file + (expression + (binary_expression + (expression + (binary_expression + (expression + (vector2 + (expression + (identity_path + (identifier))) + (expression + (identity_path + (identifier))))) + (expression + (vector2 + (expression + (identity_path + (identifier))) + (expression + (identity_path + (identifier))))))) + (expression + (vector2 + (expression + (identity_path + (identifier))) + (expression + (identity_path + (identifier)))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt b/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt index 3d22cf3..cdc74f3 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt @@ -215,3 +215,75 @@ Scalar with quoted unit that would not work as an identifier (scalar (number) (unit_quote)))) + +================== +Vector2 +================== + +<(1m, 2m)> + +--- + +(source_file + (expression + (vector2 + (expression + (scalar + (number) + (identifier))) + (expression + (scalar + (number) + (identifier)))))) + +================== +Vector3 +================== + +<(1m, 2m, 3m)> + +--- + +(source_file + (expression + (vector3 + (expression + (scalar + (number) + (identifier))) + (expression + (scalar + (number) + (identifier))) + (expression + (scalar + (number) + (identifier)))))) + +================== +Vector4 +================== + +<(1m, 2m, 3m, 4m)> + +--- + +(source_file + (expression + (vector4 + (expression + (scalar + (number) + (identifier))) + (expression + (scalar + (number) + (identifier))) + (expression + (scalar + (number) + (identifier))) + (expression + (scalar + (number) + (identifier)))))) From 88c6c6cdcf0ce633a50d83ffb960c4d552deb195 Mon Sep 17 00:00:00 2001 From: James Carl Date: Thu, 1 Jan 2026 17:26:01 -0500 Subject: [PATCH 055/106] Implement if expressions --- crates/interpreter/src/compile/expressions.rs | 31 +- crates/interpreter/src/execution/mod.rs | 32 +- .../src/execution/standard_environment.rs | 16 +- .../src/execution/values/vector.rs | 94 +- .../tree-sitter-command-cad-model/grammar.js | 2 +- .../src/grammar.json | 29 +- .../src/node-types.json | 4 + .../src/parser.c | 15787 +++++++--------- .../test/corpus/if.txt | 4 +- 9 files changed, 6642 insertions(+), 9357 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 3605bd1..315e16d 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -38,7 +38,7 @@ pub enum Expression { Boolean(AstNode), ClosureDefinition(AstNode>), DictionaryConstruction(AstNode), - If(AstNode), + If(AstNode>), List(AstNode>>), Parenthesis(Box>), IdentityPath(AstNode), @@ -156,7 +156,7 @@ impl<'t> Parse<'t, nodes::If<'t>> for Expression { Ok(AstNode::new( file, &value, - Self::If(IfExpression::parse(file, input, value)?), + Self::If(IfExpression::parse(file, input, value)?.into_box()), )) } } @@ -859,9 +859,9 @@ impl<'t> Parse<'t, nodes::Vector4<'t>> for Vector4 { #[derive(Debug, Hash, Eq, PartialEq)] pub struct IfExpression { - pub condition: AstNode>, - pub on_true: AstNode>, - pub on_false: AstNode>, + pub condition: AstNode, + pub on_true: AstNode, + pub on_false: AstNode, } impl<'t> Parse<'t, nodes::If<'t>> for IfExpression { @@ -871,10 +871,10 @@ impl<'t> Parse<'t, nodes::If<'t>> for IfExpression { value: nodes::If<'t>, ) -> Result, Error<'t, 'i>> { let condition = value.condition()?; - let condition = Expression::parse(file, input, condition)?.into_box(); + let condition = Expression::parse(file, input, condition)?; - let on_true = Expression::parse(file, input, value.on_true()?)?.into_box(); - let on_false = Expression::parse(file, input, value.on_false()?)?.into_box(); + let on_true = Expression::parse(file, input, value.on_true()?)?; + let on_false = Expression::parse(file, input, value.on_false()?)?; Ok(AstNode::new( file, @@ -1360,7 +1360,7 @@ mod test { #[test] fn if_else_expression() { - let root = full_compile("if true \"true\" else \"false\""); + let root = full_compile("if true then \"true\" else \"false\""); let if_expression = root.node.as_if().unwrap(); let if_reference = if_expression.reference.clone(); let condition = &if_expression.node.condition; @@ -1391,32 +1391,29 @@ mod test { reference: root.reference.clone(), node: Expression::If(AstNode { reference: if_reference, - node: IfExpression { + node: Box::new(IfExpression { condition: AstNode { reference: condition_reference, node: Expression::Boolean(AstNode { reference: boolean_reference, node: true }) - } - .into_box(), + }, on_true: AstNode { reference: true_expression_reference, node: Expression::String(AstNode { reference: true_string_reference, node: String::from("true") }) - } - .into_box(), + }, on_false: AstNode { reference: false_expression_reference, node: Expression::String(AstNode { reference: false_string_reference, node: String::from("false") }) - } - .into_box(), - } + }, + }) }) } ); diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 7fceea8..beb99dc 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -119,7 +119,9 @@ pub fn execute_expression( compile::Expression::DictionaryConstruction(ast_node) => { Ok(values::Dictionary::from_ast(log, stack_trace, stack, ast_node)?.into()) } - compile::Expression::If(ast_node) => todo!(), + compile::Expression::If(ast_node) => { + execute_if_expression(log, stack_trace, stack, ast_node) + } compile::Expression::List(ast_node) => { Ok(values::List::from_ast(log, stack_trace, stack, ast_node)?.into()) } @@ -320,6 +322,25 @@ fn execute_binary_expression( ) } +pub fn execute_if_expression( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + expression: &compile::AstNode>, +) -> ExpressionResult { + let condition = execute_expression(log, stack_trace, stack, &expression.node.condition)? + .downcast::(stack_trace)? + .0; + + let expression = if condition { + &expression.node.on_true + } else { + &expression.node.on_false + }; + + execute_expression(log, stack_trace, stack, expression) +} + #[cfg(test)] pub(crate) fn test_run(input: &str) -> ExpressionResult { use standard_environment::build_prelude; @@ -408,4 +429,13 @@ mod test { values::IString::from("a simple string of text").into() ); } + + #[test] + fn if_expression() { + let product = test_run("if true then 1u else 2u").unwrap(); + assert_eq!(product, values::UnsignedInteger::from(1).into()); + + let product = test_run("if false then 1u else 2u").unwrap(); + assert_eq!(product, values::UnsignedInteger::from(2).into()); + } } diff --git a/crates/interpreter/src/execution/standard_environment.rs b/crates/interpreter/src/execution/standard_environment.rs index 2455552..883b24f 100644 --- a/crates/interpreter/src/execution/standard_environment.rs +++ b/crates/interpreter/src/execution/standard_environment.rs @@ -18,19 +18,19 @@ fn build_std() -> Dictionary { ("types".into(), build_types().into()), ( "scalar".into(), - build_dimension_types(|dimension| ValueType::Scalar(Some(dimension))).into(), + build_dimension_types(ValueType::Scalar).into(), ), ( "vector2".into(), - build_dimension_types(|dimension| ValueType::Vector2(Some(dimension))).into(), + build_dimension_types(ValueType::Vector2).into(), ), ( "vector3".into(), - build_dimension_types(|dimension| ValueType::Vector3(Some(dimension))).into(), + build_dimension_types(ValueType::Vector3).into(), ), ( "vector4".into(), - build_dimension_types(|dimension| ValueType::Vector4(Some(dimension))).into(), + build_dimension_types(ValueType::Vector4).into(), ), ("consts".into(), build_consts().into()), ]); @@ -52,10 +52,6 @@ fn build_types() -> Dictionary { ("SInt".into(), ValueType::SignedInteger.into()), ("UInt".into(), ValueType::UnsignedInteger.into()), ("ValueType".into(), ValueType::ValueType.into()), - ("Scaler".into(), ValueType::Scalar(None).into()), - ("Vector2".into(), ValueType::Vector2(None).into()), - ("Vector3".into(), ValueType::Vector3(None).into()), - ("Vector4".into(), ValueType::Vector4(None).into()), // TODO we'll need a function to build custom function signature types. // ("Function".into(), ValueType::Closure(Arc)), @@ -66,9 +62,11 @@ fn build_types() -> Dictionary { Dictionary::from(types) } -fn build_dimension_types(type_builder: impl Fn(Dimension) -> ValueType) -> Dictionary { +fn build_dimension_types(type_builder: impl Fn(Option) -> ValueType) -> Dictionary { let types: HashMap = HashMap::from_iter( units::list_named_dimensions() + .map(|(name, dimension)| (name, Some(dimension))) + .chain([("Any", Option::None)].into_iter()) .map(move |(name, dimension)| (name.into(), type_builder(dimension).into())), ); diff --git a/crates/interpreter/src/execution/values/vector.rs b/crates/interpreter/src/execution/values/vector.rs index 4f28814..1ee1b59 100644 --- a/crates/interpreter/src/execution/values/vector.rs +++ b/crates/interpreter/src/execution/values/vector.rs @@ -283,7 +283,7 @@ where } ) .into()), - "apply" => Ok(build_method!( + "apply" | "map" => Ok(build_method!( Vector_apply( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, @@ -291,7 +291,7 @@ where this: Self, f: ApplyClosure) -> ValueType::Any { - let operations = self.value.iter().map(|c| f.call(log, stack_trace, stack, Dictionary::from(HashMap::from_iter([ + let operations: ArrayVec<[Value; 4]> = this.value.iter().map(|c| f.call(log, stack_trace, stack, Dictionary::from(HashMap::from_iter([ ( "c".into(), Scalar { @@ -299,24 +299,55 @@ where value: common_data_types::Float::new(c).unwrap_not_nan(stack_trace)? }.into() ) - ])))); + ])))).collect::>()?; - let result: ArrayVec<[Scalar; 4]> = operations.map(|v| v?.downcast::(stack_trace)).map(|r| r.unwrap()).collect(); + let result: ArrayVec<[Scalar; 4]> = operations.into_iter().map(|v| v.downcast::(stack_trace)).collect::>()?; // The smallest vector we support is 2, so this should never panic. let dimension = result[0].dimension; - - + for component in result.iter() { + if component.dimension != dimension { + return Err(GenericFailure("All components of a vector must match") + .to_error(stack_trace.iter())); + } + } + Ok(Self::new_raw(stack_trace, dimension, I::from_iterator(result.iter().map(|c| *c.value)))?.into()) } ) .into()), + "fold" => Ok(build_method!( + Vector_fold( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + this: Self, + init: Value, + f: FoldClosure) -> ValueType::Any + { + let mut accumulator = init; + for component in this.value.iter() { + accumulator = f.call(log, stack_trace, stack, Dictionary::from(HashMap::from_iter([ + ( + "c".into(), + Scalar { + dimension: this.dimension, + value: common_data_types::Float::new(component).unwrap_not_nan(stack_trace)? + }.into() + ), + ( + "previous".into(), + accumulator + ) + ])))?; + } - // fn apply() // Apply a closure to each component - // fold - // map + Ok(accumulator) + } + ) + .into()), _ => Err(MissingAttributeError { name: attribute.into(), } @@ -1335,10 +1366,12 @@ mod test { let product = test_run("<(0m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m)>").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("<(0m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c * 1m) == <(0m^2, 1m^2)>").unwrap(); + let product = test_run("<(0m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - test_run("<(0m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length if c == 0m 1m else 1m^2)").unwrap_err(); + let notice_me = 0; + // TODO we can't implement this test until we have working if statements. + // test_run("<(0m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Any if (c == 0m) 1m else 1 'm^2')").unwrap(); } #[test] @@ -1346,10 +1379,12 @@ mod test { let product = test_run("<(0m, 1m, 2m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m, 3m)>").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("<(0m, 1m, 2m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c * 1m) == <(0m^2, 1m^2, 2m^2)>").unwrap(); + let product = test_run("<(0m, 1m, 2m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2', 2 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - test_run("<(0m, 1m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length if c == 0m 1m else 1m^2)").unwrap_err(); + let notice_me = 0; + // TODO we can't implement this test until we have working if statements. + // test_run("<(0m, 1m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Any if (c == 0m) 1m else 1 'm^2')").unwrap_err(); } #[test] @@ -1357,9 +1392,38 @@ mod test { let product = test_run("<(0m, 1m, 2m, 3m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m, 3m, 4m)>").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("<(0m, 1m, 2m, 3m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c * 1m) == <(0m^2, 1m^2, 2m^2, 3m^2)>").unwrap(); + let product = test_run("<(0m, 1m, 2m, 3m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2', 2 'm^2', 3 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - test_run("<(0m, 1m, 1m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length if c == 0m 1m else 1m^2)").unwrap_err(); + let notice_me = 0; + // TODO we can't implement this test until we have working if statements. + // test_run("<(0m, 1m, 1m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Any if (c == 0m) 1m else 1 'm^2')").unwrap_err(); + } + + #[test] + fn fold_vector2() { + let product = test_run("<(1m, 2m)>:fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); + assert_eq!(product, Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(3.0).unwrap() + }.into()); + } + + #[test] + fn fold_vector3() { + let product = test_run("<(1m, 2m, 3m)>:fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); + assert_eq!(product, Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(6.0).unwrap() + }.into()); + } + + #[test] + fn fold_vector4() { + let product = test_run("<(1m, 2m, 3m, 4m)>:fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); + assert_eq!(product, Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(10.0).unwrap() + }.into()); } } diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 09e1546..8aadccd 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -167,7 +167,7 @@ module.exports = grammar({ unary_expression: $=> make_unary_expression(unary_operator_table, $.expression), binary_expression: $ => make_binary_expression(binary_operator_table, $.expression), - if: $ => seq('if', field('condition', $.expression), field('on_true', $.expression), seq('else', field('on_false', $.expression))), + if: $ => seq('if', field('condition', $.expression), 'then ', field('on_true', $.expression), 'else', field('on_false', $.expression)), let_in: $ => seq('let', field('assignment', repeat($.let_in_assignment)), 'in', field('expression', $.expression)), let_in_assignment: $ => seq(field('ident', $.identifier), '=', field('value', $.expression), ';'), diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index c2b8dab..df539f4 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -1350,6 +1350,10 @@ "name": "expression" } }, + { + "type": "STRING", + "value": "then " + }, { "type": "FIELD", "name": "on_true", @@ -1359,21 +1363,16 @@ } }, { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "else" - }, - { - "type": "FIELD", - "name": "on_false", - "content": { - "type": "SYMBOL", - "name": "expression" - } - } - ] + "type": "STRING", + "value": "else" + }, + { + "type": "FIELD", + "name": "on_false", + "content": { + "type": "SYMBOL", + "name": "expression" + } } ] }, diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index e43b234..938f11e 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -1276,6 +1276,10 @@ "type": "string", "named": true }, + { + "type": "then ", + "named": false + }, { "type": "true", "named": true diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 4feac46..6bd1edd 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -7,11 +7,11 @@ #endif #define LANGUAGE_VERSION 15 -#define STATE_COUNT 394 -#define LARGE_STATE_COUNT 9 -#define SYMBOL_COUNT 104 +#define STATE_COUNT 341 +#define LARGE_STATE_COUNT 4 +#define SYMBOL_COUNT 105 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 58 +#define TOKEN_COUNT 59 #define EXTERNAL_TOKEN_COUNT 0 #define FIELD_COUNT 30 #define MAX_ALIAS_SEQUENCE_LENGTH 9 @@ -64,65 +64,66 @@ enum ts_symbol_identifiers { anon_sym_DOT_DOT = 42, anon_sym_DOT_DOT_EQ = 43, anon_sym_if = 44, - anon_sym_else = 45, - anon_sym_let = 46, - anon_sym_in = 47, - anon_sym_EQ = 48, - anon_sym_SEMI = 49, - anon_sym_LPAREN = 50, - anon_sym_RPAREN = 51, - anon_sym_LBRACK = 52, - anon_sym_RBRACK = 53, - sym_varadic_dots = 54, - anon_sym_DASH_GT = 55, - anon_sym_LT_LT_LT = 56, - anon_sym_GT_GT_GT = 57, - sym_source_file = 58, - sym_base_ten = 59, - sym_octal = 60, - sym_hex = 61, - sym_binary = 62, - sym_integer = 63, - sym_signed_integer = 64, - sym_unsigned_integer = 65, - sym_number = 66, - sym__float = 67, - sym__unit = 68, - sym_scalar = 69, - sym_vector2 = 70, - sym_vector3 = 71, - sym_vector4 = 72, - sym_boolean = 73, - sym_function_call = 74, - sym_method_call = 75, - sym_expression = 76, - sym_unary_expression = 77, - sym_binary_expression = 78, - sym_if = 79, - sym_let_in = 80, - sym_let_in_assignment = 81, - sym_identity_path = 82, - sym_self_path = 83, - sym_declaration_type = 84, - sym_parenthesis = 85, - sym_list = 86, - sym_struct_member = 87, - sym__struct_final_element = 88, - sym_struct_definition = 89, - sym_dictionary_member_assignment = 90, - sym_dictionary_construction = 91, - sym_closure_definition = 92, - sym_formula = 93, - sym_formula_expression = 94, - sym_formula_parenthesis = 95, - sym_formula_unary_expression = 96, - sym_formula_binary_expression = 97, - aux_sym_let_in_repeat1 = 98, - aux_sym_identity_path_repeat1 = 99, - aux_sym_self_path_repeat1 = 100, - aux_sym_list_repeat1 = 101, - aux_sym_struct_definition_repeat1 = 102, - aux_sym_dictionary_construction_repeat1 = 103, + anon_sym_then = 45, + anon_sym_else = 46, + anon_sym_let = 47, + anon_sym_in = 48, + anon_sym_EQ = 49, + anon_sym_SEMI = 50, + anon_sym_LPAREN = 51, + anon_sym_RPAREN = 52, + anon_sym_LBRACK = 53, + anon_sym_RBRACK = 54, + sym_varadic_dots = 55, + anon_sym_DASH_GT = 56, + anon_sym_LT_LT_LT = 57, + anon_sym_GT_GT_GT = 58, + sym_source_file = 59, + sym_base_ten = 60, + sym_octal = 61, + sym_hex = 62, + sym_binary = 63, + sym_integer = 64, + sym_signed_integer = 65, + sym_unsigned_integer = 66, + sym_number = 67, + sym__float = 68, + sym__unit = 69, + sym_scalar = 70, + sym_vector2 = 71, + sym_vector3 = 72, + sym_vector4 = 73, + sym_boolean = 74, + sym_function_call = 75, + sym_method_call = 76, + sym_expression = 77, + sym_unary_expression = 78, + sym_binary_expression = 79, + sym_if = 80, + sym_let_in = 81, + sym_let_in_assignment = 82, + sym_identity_path = 83, + sym_self_path = 84, + sym_declaration_type = 85, + sym_parenthesis = 86, + sym_list = 87, + sym_struct_member = 88, + sym__struct_final_element = 89, + sym_struct_definition = 90, + sym_dictionary_member_assignment = 91, + sym_dictionary_construction = 92, + sym_closure_definition = 93, + sym_formula = 94, + sym_formula_expression = 95, + sym_formula_parenthesis = 96, + sym_formula_unary_expression = 97, + sym_formula_binary_expression = 98, + aux_sym_let_in_repeat1 = 99, + aux_sym_identity_path_repeat1 = 100, + aux_sym_self_path_repeat1 = 101, + aux_sym_list_repeat1 = 102, + aux_sym_struct_definition_repeat1 = 103, + aux_sym_dictionary_construction_repeat1 = 104, }; static const char * const ts_symbol_names[] = { @@ -171,6 +172,7 @@ static const char * const ts_symbol_names[] = { [anon_sym_DOT_DOT] = "..", [anon_sym_DOT_DOT_EQ] = "..=", [anon_sym_if] = "if", + [anon_sym_then] = "then ", [anon_sym_else] = "else", [anon_sym_let] = "let", [anon_sym_in] = "in", @@ -278,6 +280,7 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_DOT_DOT] = anon_sym_DOT_DOT, [anon_sym_DOT_DOT_EQ] = anon_sym_DOT_DOT_EQ, [anon_sym_if] = anon_sym_if, + [anon_sym_then] = anon_sym_then, [anon_sym_else] = anon_sym_else, [anon_sym_let] = anon_sym_let, [anon_sym_in] = anon_sym_in, @@ -520,6 +523,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, + [anon_sym_then] = { + .visible = true, + .named = false, + }, [anon_sym_else] = { .visible = true, .named = false, @@ -849,9 +856,9 @@ static const TSMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [21] = {.index = 32, .length = 3}, [22] = {.index = 35, .length = 3}, [23] = {.index = 38, .length = 2}, - [24] = {.index = 40, .length = 3}, - [25] = {.index = 43, .length = 2}, - [26] = {.index = 45, .length = 2}, + [24] = {.index = 40, .length = 2}, + [25] = {.index = 42, .length = 2}, + [26] = {.index = 44, .length = 3}, [27] = {.index = 47, .length = 3}, [28] = {.index = 50, .length = 3}, [29] = {.index = 53, .length = 3}, @@ -923,23 +930,23 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_x, 1}, {field_y, 3}, [40] = - {field_condition, 1}, - {field_on_false, 4}, - {field_on_true, 2}, - [43] = {field_ident, 0}, {field_value, 2}, - [45] = + [42] = {field_default, 3}, {field_name, 0}, - [47] = + [44] = {field_assignments, 1}, {field_assignments, 2}, {field_assignments, 3}, - [50] = + [47] = {field_lhs, 1}, {field_relation, 2}, {field_rhs, 3}, + [50] = + {field_condition, 1}, + {field_on_false, 5}, + {field_on_true, 3}, [53] = {field_x, 1}, {field_y, 3}, @@ -964,18 +971,18 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [1] = 1, [2] = 2, [3] = 2, - [4] = 2, + [4] = 4, [5] = 5, - [6] = 5, + [6] = 6, [7] = 5, - [8] = 5, + [8] = 4, [9] = 9, - [10] = 10, + [10] = 9, [11] = 11, - [12] = 11, - [13] = 9, - [14] = 9, - [15] = 11, + [12] = 12, + [13] = 13, + [14] = 14, + [15] = 15, [16] = 16, [17] = 17, [18] = 18, @@ -991,59 +998,59 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [28] = 28, [29] = 29, [30] = 30, - [31] = 25, + [31] = 31, [32] = 32, [33] = 33, [34] = 34, [35] = 35, - [36] = 36, - [37] = 37, - [38] = 38, - [39] = 39, - [40] = 40, - [41] = 41, - [42] = 17, - [43] = 18, - [44] = 32, - [45] = 22, - [46] = 26, - [47] = 40, - [48] = 25, - [49] = 32, + [36] = 35, + [37] = 11, + [38] = 13, + [39] = 14, + [40] = 15, + [41] = 16, + [42] = 18, + [43] = 19, + [44] = 20, + [45] = 21, + [46] = 22, + [47] = 23, + [48] = 27, + [49] = 30, [50] = 33, - [51] = 34, - [52] = 35, - [53] = 36, - [54] = 37, - [55] = 38, - [56] = 39, - [57] = 16, - [58] = 41, - [59] = 17, - [60] = 18, - [61] = 22, - [62] = 26, - [63] = 27, - [64] = 64, - [65] = 33, - [66] = 34, - [67] = 35, - [68] = 36, - [69] = 37, - [70] = 38, - [71] = 39, - [72] = 16, - [73] = 19, - [74] = 29, - [75] = 30, - [76] = 41, - [77] = 19, - [78] = 29, - [79] = 30, - [80] = 64, - [81] = 64, - [82] = 40, - [83] = 27, + [51] = 35, + [52] = 11, + [53] = 13, + [54] = 14, + [55] = 15, + [56] = 16, + [57] = 17, + [58] = 18, + [59] = 19, + [60] = 20, + [61] = 21, + [62] = 22, + [63] = 23, + [64] = 27, + [65] = 30, + [66] = 33, + [67] = 24, + [68] = 25, + [69] = 32, + [70] = 34, + [71] = 25, + [72] = 12, + [73] = 9, + [74] = 17, + [75] = 75, + [76] = 76, + [77] = 77, + [78] = 78, + [79] = 79, + [80] = 80, + [81] = 81, + [82] = 82, + [83] = 83, [84] = 84, [85] = 85, [86] = 86, @@ -1088,272 +1095,219 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [125] = 125, [126] = 126, [127] = 127, - [128] = 128, - [129] = 129, - [130] = 130, + [128] = 75, + [129] = 75, + [130] = 76, [131] = 131, - [132] = 132, - [133] = 133, - [134] = 134, - [135] = 135, - [136] = 136, - [137] = 137, - [138] = 138, - [139] = 84, - [140] = 86, - [141] = 87, - [142] = 102, - [143] = 101, - [144] = 88, - [145] = 85, - [146] = 90, - [147] = 92, - [148] = 91, - [149] = 89, - [150] = 99, - [151] = 97, - [152] = 100, - [153] = 122, - [154] = 104, - [155] = 105, - [156] = 106, - [157] = 107, - [158] = 108, - [159] = 109, - [160] = 110, - [161] = 111, - [162] = 112, - [163] = 94, - [164] = 113, - [165] = 131, - [166] = 93, - [167] = 116, - [168] = 115, - [169] = 117, + [132] = 77, + [133] = 79, + [134] = 84, + [135] = 83, + [136] = 85, + [137] = 82, + [138] = 81, + [139] = 76, + [140] = 77, + [141] = 80, + [142] = 142, + [143] = 78, + [144] = 119, + [145] = 145, + [146] = 146, + [147] = 98, + [148] = 87, + [149] = 149, + [150] = 93, + [151] = 85, + [152] = 79, + [153] = 92, + [154] = 154, + [155] = 90, + [156] = 107, + [157] = 88, + [158] = 89, + [159] = 99, + [160] = 160, + [161] = 102, + [162] = 103, + [163] = 104, + [164] = 105, + [165] = 106, + [166] = 96, + [167] = 108, + [168] = 109, + [169] = 112, [170] = 95, - [171] = 114, - [172] = 98, - [173] = 120, - [174] = 103, - [175] = 96, - [176] = 119, - [177] = 123, - [178] = 137, - [179] = 128, - [180] = 84, - [181] = 127, - [182] = 129, - [183] = 130, - [184] = 138, - [185] = 135, - [186] = 132, - [187] = 134, - [188] = 125, - [189] = 133, - [190] = 121, - [191] = 126, - [192] = 136, - [193] = 86, - [194] = 87, - [195] = 195, - [196] = 196, - [197] = 102, - [198] = 101, - [199] = 85, - [200] = 92, - [201] = 91, - [202] = 89, - [203] = 88, - [204] = 90, - [205] = 205, - [206] = 206, - [207] = 207, - [208] = 205, - [209] = 94, - [210] = 95, - [211] = 96, + [171] = 118, + [172] = 172, + [173] = 123, + [174] = 160, + [175] = 149, + [176] = 154, + [177] = 146, + [178] = 101, + [179] = 116, + [180] = 180, + [181] = 99, + [182] = 115, + [183] = 101, + [184] = 102, + [185] = 103, + [186] = 104, + [187] = 105, + [188] = 106, + [189] = 96, + [190] = 108, + [191] = 109, + [192] = 110, + [193] = 112, + [194] = 114, + [195] = 117, + [196] = 118, + [197] = 122, + [198] = 121, + [199] = 124, + [200] = 123, + [201] = 126, + [202] = 127, + [203] = 203, + [204] = 91, + [205] = 94, + [206] = 86, + [207] = 180, + [208] = 208, + [209] = 209, + [210] = 210, + [211] = 120, [212] = 212, - [213] = 97, - [214] = 93, - [215] = 98, - [216] = 99, - [217] = 100, - [218] = 103, - [219] = 104, - [220] = 105, - [221] = 221, - [222] = 107, - [223] = 108, - [224] = 109, - [225] = 110, - [226] = 111, - [227] = 112, - [228] = 113, - [229] = 114, - [230] = 115, - [231] = 116, - [232] = 117, - [233] = 206, - [234] = 212, - [235] = 221, - [236] = 205, - [237] = 237, - [238] = 206, - [239] = 212, - [240] = 221, - [241] = 106, - [242] = 242, - [243] = 123, - [244] = 138, - [245] = 242, - [246] = 134, - [247] = 127, - [248] = 126, - [249] = 128, - [250] = 129, - [251] = 130, - [252] = 125, - [253] = 132, - [254] = 119, - [255] = 135, - [256] = 256, - [257] = 136, - [258] = 131, - [259] = 120, - [260] = 122, + [213] = 111, + [214] = 107, + [215] = 125, + [216] = 100, + [217] = 217, + [218] = 98, + [219] = 217, + [220] = 113, + [221] = 208, + [222] = 212, + [223] = 208, + [224] = 119, + [225] = 225, + [226] = 203, + [227] = 180, + [228] = 97, + [229] = 229, + [230] = 230, + [231] = 231, + [232] = 231, + [233] = 233, + [234] = 234, + [235] = 235, + [236] = 236, + [237] = 234, + [238] = 233, + [239] = 230, + [240] = 236, + [241] = 235, + [242] = 84, + [243] = 80, + [244] = 82, + [245] = 245, + [246] = 90, + [247] = 247, + [248] = 88, + [249] = 89, + [250] = 95, + [251] = 75, + [252] = 76, + [253] = 77, + [254] = 85, + [255] = 255, + [256] = 79, + [257] = 257, + [258] = 258, + [259] = 86, + [260] = 91, [261] = 261, - [262] = 262, - [263] = 256, - [264] = 262, - [265] = 137, - [266] = 256, - [267] = 267, - [268] = 121, - [269] = 242, + [262] = 94, + [263] = 261, + [264] = 264, + [265] = 265, + [266] = 266, + [267] = 265, + [268] = 264, + [269] = 266, [270] = 270, - [271] = 262, + [271] = 271, [272] = 272, - [273] = 261, - [274] = 261, - [275] = 133, + [273] = 272, + [274] = 270, + [275] = 272, [276] = 276, [277] = 277, [278] = 278, [279] = 279, [280] = 280, - [281] = 280, - [282] = 276, - [283] = 283, - [284] = 284, - [285] = 283, - [286] = 278, - [287] = 284, - [288] = 284, - [289] = 277, - [290] = 283, + [281] = 281, + [282] = 281, + [283] = 280, + [284] = 279, + [285] = 281, + [286] = 279, + [287] = 280, + [288] = 288, + [289] = 288, + [290] = 290, [291] = 291, [292] = 292, - [293] = 84, - [294] = 87, - [295] = 86, - [296] = 101, - [297] = 297, + [293] = 293, + [294] = 291, + [295] = 292, + [296] = 296, + [297] = 296, [298] = 298, [299] = 299, - [300] = 102, + [300] = 293, [301] = 301, [302] = 302, [303] = 303, - [304] = 131, - [305] = 120, - [306] = 302, - [307] = 122, + [304] = 304, + [305] = 305, + [306] = 306, + [307] = 304, [308] = 308, - [309] = 302, - [310] = 308, - [311] = 301, - [312] = 303, + [309] = 309, + [310] = 310, + [311] = 311, + [312] = 311, [313] = 313, - [314] = 313, - [315] = 315, - [316] = 315, - [317] = 315, - [318] = 313, - [319] = 319, + [314] = 314, + [315] = 311, + [316] = 316, + [317] = 311, + [318] = 308, + [319] = 308, [320] = 320, [321] = 321, [322] = 322, [323] = 323, [324] = 324, - [325] = 322, + [325] = 325, [326] = 324, [327] = 327, - [328] = 323, - [329] = 322, - [330] = 323, - [331] = 324, + [328] = 320, + [329] = 329, + [330] = 330, + [331] = 320, [332] = 332, - [333] = 333, + [333] = 332, [334] = 334, - [335] = 335, - [336] = 334, - [337] = 337, - [338] = 338, - [339] = 339, - [340] = 332, - [341] = 339, - [342] = 334, - [343] = 343, - [344] = 339, - [345] = 338, - [346] = 332, - [347] = 333, - [348] = 338, - [349] = 333, - [350] = 350, - [351] = 351, - [352] = 352, - [353] = 353, - [354] = 354, - [355] = 355, - [356] = 353, - [357] = 357, - [358] = 357, - [359] = 357, - [360] = 360, - [361] = 361, - [362] = 352, - [363] = 353, - [364] = 364, - [365] = 352, - [366] = 366, - [367] = 367, - [368] = 352, - [369] = 353, - [370] = 370, - [371] = 371, - [372] = 372, - [373] = 373, - [374] = 371, - [375] = 375, - [376] = 376, - [377] = 377, - [378] = 371, - [379] = 373, - [380] = 380, - [381] = 373, - [382] = 382, - [383] = 382, - [384] = 377, - [385] = 376, - [386] = 386, - [387] = 387, - [388] = 382, - [389] = 376, - [390] = 390, - [391] = 391, - [392] = 377, - [393] = 393, + [335] = 322, + [336] = 336, + [337] = 330, + [338] = 330, + [339] = 322, + [340] = 340, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1361,527 +1315,608 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(21); + if (eof) ADVANCE(24); ADVANCE_MAP( - '!', 49, + '!', 56, '"', 6, - '#', 22, - '&', 59, + '#', 25, + '&', 65, '\'', 8, - '(', 80, - ')', 81, - '*', 51, - '+', 47, - ',', 42, - '-', 46, - '.', 39, - '/', 53, - '0', 27, - '1', 29, - ':', 44, - ';', 79, - '<', 69, - '=', 78, - '>', 63, - '[', 82, - ']', 83, - '^', 61, - '|', 60, + '(', 86, + ')', 87, + '*', 58, + '+', 54, + ',', 49, + '-', 53, + '.', 46, + '/', 60, + '0', 34, + '1', 36, + ':', 51, + ';', 85, + '<', 75, + '=', 84, + '>', 69, + '[', 88, + ']', 89, + '^', 67, + 't', 29, + '|', 66, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(23); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(30); + lookahead == ' ') ADVANCE(26); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(37); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); case 1: ADVANCE_MAP( - '!', 49, + '!', 55, '"', 6, - '#', 22, - '&', 59, - '\'', 8, - '(', 80, - '*', 51, - '+', 47, - '-', 46, - '.', 40, - '/', 53, - '0', 28, - ':', 44, - '<', 69, - '=', 15, - '>', 64, - '[', 82, - ']', 83, - '^', 61, - '|', 60, + '#', 25, + '(', 86, + ')', 87, + '*', 58, + '+', 54, + '-', 52, + '.', 13, + '/', 59, + '0', 35, + '<', 10, + '>', 19, + '[', 88, + ']', 89, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(23); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(30); + lookahead == ' ') ADVANCE(26); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(37); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); case 2: ADVANCE_MAP( - '!', 48, + '!', 55, '"', 6, - '#', 22, - '(', 80, - ')', 81, - '*', 51, - '+', 47, - '-', 45, - '.', 12, - '/', 52, - '0', 28, + '#', 25, + '(', 86, + '+', 54, + '-', 52, + '.', 45, + '0', 35, '<', 10, - '>', 18, - '[', 82, + '[', 88, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(23); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(30); + lookahead == ' ') ADVANCE(26); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(37); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); case 3: ADVANCE_MAP( - '!', 14, - '#', 22, - '&', 59, + '!', 15, + '#', 25, + '&', 65, '\'', 8, - '(', 80, - ')', 17, - '*', 51, - '+', 47, - ',', 42, - '-', 46, - '.', 40, - '/', 53, - ':', 44, - '<', 70, - '=', 15, - '>', 64, - '^', 61, - '|', 60, + '(', 86, + ')', 18, + '*', 58, + '+', 54, + ',', 49, + '-', 53, + '.', 47, + '/', 60, + ':', 51, + '<', 75, + '=', 16, + '>', 70, + '^', 67, + '|', 66, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(23); + lookahead == ' ') ADVANCE(26); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); case 4: ADVANCE_MAP( - '!', 14, - '#', 22, + '!', 15, + '#', 25, '\'', 8, - '*', 51, - '+', 47, - '-', 45, - '.', 38, - '/', 52, - '<', 71, - '=', 15, - '>', 62, + '*', 58, + '+', 54, + '-', 52, + '.', 45, + '/', 59, + '<', 76, + '=', 16, + '>', 68, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(23); + lookahead == ' ') ADVANCE(26); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); case 5: ADVANCE_MAP( - '!', 14, - '#', 22, - ')', 81, - '*', 51, - '+', 47, - '-', 45, - '/', 52, - '<', 71, - '=', 15, - '>', 65, + '!', 15, + '#', 25, + ')', 87, + '*', 58, + '+', 54, + '-', 52, + '/', 59, + '<', 76, + '=', 16, + '>', 71, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(23); + lookahead == ' ') ADVANCE(26); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(40); END_STATE(); case 6: - if (lookahead == '"') ADVANCE(25); + if (lookahead == '"') ADVANCE(32); if (lookahead == '\\') ADVANCE(7); if (lookahead != 0) ADVANCE(6); END_STATE(); case 7: - if (lookahead == '"') ADVANCE(26); + if (lookahead == '"') ADVANCE(33); if (lookahead == '\\') ADVANCE(7); if (lookahead != 0) ADVANCE(6); END_STATE(); case 8: - if (lookahead == '\'') ADVANCE(36); + if (lookahead == '\'') ADVANCE(43); if (lookahead == '\\') ADVANCE(9); if (lookahead != 0) ADVANCE(8); END_STATE(); case 9: - if (lookahead == '\'') ADVANCE(37); + if (lookahead == '\'') ADVANCE(44); if (lookahead == '\\') ADVANCE(9); if (lookahead != 0) ADVANCE(8); END_STATE(); case 10: - if (lookahead == '(') ADVANCE(41); - if (lookahead == '<') ADVANCE(13); + if (lookahead == '(') ADVANCE(48); + if (lookahead == '<') ADVANCE(14); END_STATE(); case 11: - if (lookahead == '.') ADVANCE(84); + if (lookahead == '.') ADVANCE(90); END_STATE(); case 12: - if (lookahead == '.') ADVANCE(11); + if (lookahead == '.') ADVANCE(81); END_STATE(); case 13: - if (lookahead == '<') ADVANCE(86); + if (lookahead == '.') ADVANCE(11); END_STATE(); case 14: - if (lookahead == '=') ADVANCE(72); + if (lookahead == '<') ADVANCE(92); END_STATE(); case 15: - if (lookahead == '=') ADVANCE(67); + if (lookahead == '=') ADVANCE(77); END_STATE(); case 16: - if (lookahead == '>') ADVANCE(87); + if (lookahead == '=') ADVANCE(73); END_STATE(); case 17: - if (lookahead == '>') ADVANCE(43); + if (lookahead == '>') ADVANCE(93); END_STATE(); case 18: - if (lookahead == '>') ADVANCE(16); + if (lookahead == '>') ADVANCE(50); END_STATE(); case 19: - if (eof) ADVANCE(21); + if (lookahead == '>') ADVANCE(17); + END_STATE(); + case 20: + if (eof) ADVANCE(24); ADVANCE_MAP( - '!', 14, - '#', 22, - '&', 59, + '!', 15, + '#', 25, + '&', 65, '\'', 8, - '(', 80, - ')', 81, - '*', 51, - '+', 47, - ',', 42, - '-', 45, - '.', 40, - '/', 53, - ':', 44, - ';', 79, - '<', 70, - '=', 78, - '>', 63, - ']', 83, - '^', 61, - '|', 60, + '(', 86, + ')', 87, + '*', 58, + '+', 54, + ',', 49, + '-', 53, + '.', 47, + '/', 60, + ':', 51, + ';', 85, + '<', 75, + '=', 84, + '>', 70, + ']', 89, + '^', 67, + 't', 29, + '|', 66, + '0', 42, + '1', 42, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(23); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(30); + lookahead == ' ') ADVANCE(26); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); - case 20: - if (eof) ADVANCE(21); + case 21: + if (eof) ADVANCE(24); ADVANCE_MAP( - '!', 14, - '#', 22, - '&', 59, - '(', 80, - ')', 81, - '*', 51, - '+', 47, - ',', 42, - '-', 46, - '.', 40, - '/', 53, - ':', 44, - ';', 79, - '<', 70, - '=', 78, - '>', 64, - ']', 83, - '^', 61, - '|', 60, - '0', 35, - '1', 35, + '!', 15, + '#', 25, + '&', 65, + '\'', 8, + '(', 86, + ')', 87, + '*', 58, + '+', 54, + ',', 49, + '-', 52, + '.', 47, + '/', 60, + ':', 51, + ';', 85, + '<', 75, + '=', 84, + '>', 69, + ']', 89, + '^', 67, + '|', 66, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(23); + lookahead == ' ') ADVANCE(26); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(37); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); - case 21: + case 22: + if (eof) ADVANCE(24); + ADVANCE_MAP( + '!', 15, + '#', 25, + '&', 65, + '(', 86, + ')', 87, + '*', 58, + '+', 54, + ',', 49, + '-', 53, + '.', 12, + '/', 60, + ':', 51, + ';', 85, + '<', 75, + '=', 84, + '>', 70, + ']', 89, + '^', 67, + '|', 66, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(26); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + END_STATE(); + case 23: + if (eof) ADVANCE(24); + ADVANCE_MAP( + '!', 15, + '#', 25, + '&', 65, + '(', 86, + ')', 87, + '*', 58, + '+', 54, + ',', 49, + '-', 52, + '.', 12, + '/', 60, + ':', 51, + ';', 85, + '<', 75, + '=', 84, + '>', 69, + ']', 89, + '^', 67, + 't', 29, + '|', 66, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(26); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + END_STATE(); + case 24: ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); - case 22: + case 25: ACCEPT_TOKEN(sym_comment); if (lookahead != 0 && - lookahead != '\n') ADVANCE(22); + lookahead != '\n') ADVANCE(25); END_STATE(); - case 23: + case 26: ACCEPT_TOKEN(sym__whitespace); END_STATE(); - case 24: + case 27: ACCEPT_TOKEN(sym_identifier); + if (lookahead == ' ') ADVANCE(83); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(24); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); - case 25: + case 28: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(30); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + END_STATE(); + case 29: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'h') ADVANCE(28); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + END_STATE(); + case 30: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'n') ADVANCE(27); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + END_STATE(); + case 31: + ACCEPT_TOKEN(sym_identifier); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + END_STATE(); + case 32: ACCEPT_TOKEN(sym_string); END_STATE(); - case 26: + case 33: ACCEPT_TOKEN(sym_string); - if (lookahead == '"') ADVANCE(25); + if (lookahead == '"') ADVANCE(32); if (lookahead == '\\') ADVANCE(7); if (lookahead != 0) ADVANCE(6); END_STATE(); - case 27: + case 34: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(34); - if (lookahead == 'o') ADVANCE(31); - if (lookahead == 'x') ADVANCE(32); + if (lookahead == 'b') ADVANCE(41); + if (lookahead == 'o') ADVANCE(38); + if (lookahead == 'x') ADVANCE(39); if (lookahead == '0' || - lookahead == '1') ADVANCE(29); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(30); + lookahead == '1') ADVANCE(36); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(37); END_STATE(); - case 28: + case 35: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(34); - if (lookahead == 'o') ADVANCE(31); - if (lookahead == 'x') ADVANCE(32); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(30); + if (lookahead == 'b') ADVANCE(41); + if (lookahead == 'o') ADVANCE(38); + if (lookahead == 'x') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(37); END_STATE(); - case 29: + case 36: ACCEPT_TOKEN(aux_sym_base_ten_token1); if (lookahead == '0' || - lookahead == '1') ADVANCE(29); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(30); + lookahead == '1') ADVANCE(36); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(37); END_STATE(); - case 30: + case 37: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(30); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(37); END_STATE(); - case 31: + case 38: ACCEPT_TOKEN(aux_sym_octal_token1); END_STATE(); - case 32: + case 39: ACCEPT_TOKEN(aux_sym_hex_token1); END_STATE(); - case 33: + case 40: ACCEPT_TOKEN(aux_sym_hex_token2); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(40); END_STATE(); - case 34: + case 41: ACCEPT_TOKEN(aux_sym_binary_token1); END_STATE(); - case 35: + case 42: ACCEPT_TOKEN(aux_sym_binary_token2); if (lookahead == '0' || - lookahead == '1') ADVANCE(35); + lookahead == '1') ADVANCE(42); END_STATE(); - case 36: + case 43: ACCEPT_TOKEN(sym_unit_quote); END_STATE(); - case 37: + case 44: ACCEPT_TOKEN(sym_unit_quote); - if (lookahead == '\'') ADVANCE(36); + if (lookahead == '\'') ADVANCE(43); if (lookahead == '\\') ADVANCE(9); if (lookahead != 0) ADVANCE(8); END_STATE(); - case 38: + case 45: ACCEPT_TOKEN(anon_sym_DOT); END_STATE(); - case 39: + case 46: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(75); + if (lookahead == '.') ADVANCE(80); END_STATE(); - case 40: + case 47: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(76); + if (lookahead == '.') ADVANCE(81); END_STATE(); - case 41: + case 48: ACCEPT_TOKEN(anon_sym_LT_LPAREN); END_STATE(); - case 42: + case 49: ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); - case 43: + case 50: ACCEPT_TOKEN(anon_sym_RPAREN_GT); END_STATE(); - case 44: + case 51: ACCEPT_TOKEN(anon_sym_COLON); END_STATE(); - case 45: + case 52: ACCEPT_TOKEN(anon_sym_DASH); END_STATE(); - case 46: + case 53: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '>') ADVANCE(85); + if (lookahead == '>') ADVANCE(91); END_STATE(); - case 47: + case 54: ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); - case 48: + case 55: ACCEPT_TOKEN(anon_sym_BANG); END_STATE(); - case 49: + case 56: ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(72); + if (lookahead == '=') ADVANCE(77); END_STATE(); - case 50: + case 57: ACCEPT_TOKEN(anon_sym_STAR_STAR); END_STATE(); - case 51: + case 58: ACCEPT_TOKEN(anon_sym_STAR); - if (lookahead == '*') ADVANCE(50); + if (lookahead == '*') ADVANCE(57); END_STATE(); - case 52: + case 59: ACCEPT_TOKEN(anon_sym_SLASH); END_STATE(); - case 53: + case 60: ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '/') ADVANCE(54); + if (lookahead == '/') ADVANCE(61); END_STATE(); - case 54: + case 61: ACCEPT_TOKEN(anon_sym_SLASH_SLASH); END_STATE(); - case 55: - ACCEPT_TOKEN(anon_sym_LT_LT); - END_STATE(); - case 56: + case 62: ACCEPT_TOKEN(anon_sym_LT_LT); - if (lookahead == '<') ADVANCE(86); END_STATE(); - case 57: + case 63: ACCEPT_TOKEN(anon_sym_GT_GT); END_STATE(); - case 58: + case 64: ACCEPT_TOKEN(anon_sym_GT_GT); - if (lookahead == '>') ADVANCE(87); + if (lookahead == '>') ADVANCE(93); END_STATE(); - case 59: + case 65: ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(73); + if (lookahead == '&') ADVANCE(78); END_STATE(); - case 60: + case 66: ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '|') ADVANCE(74); + if (lookahead == '|') ADVANCE(79); END_STATE(); - case 61: + case 67: ACCEPT_TOKEN(anon_sym_CARET); END_STATE(); - case 62: + case 68: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(66); + if (lookahead == '=') ADVANCE(72); END_STATE(); - case 63: + case 69: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(66); - if (lookahead == '>') ADVANCE(58); + if (lookahead == '=') ADVANCE(72); + if (lookahead == '>') ADVANCE(64); END_STATE(); - case 64: + case 70: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(66); - if (lookahead == '>') ADVANCE(57); + if (lookahead == '=') ADVANCE(72); + if (lookahead == '>') ADVANCE(63); END_STATE(); - case 65: + case 71: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(66); - if (lookahead == '>') ADVANCE(16); + if (lookahead == '=') ADVANCE(72); + if (lookahead == '>') ADVANCE(17); END_STATE(); - case 66: + case 72: ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); - case 67: + case 73: ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); - case 68: + case 74: ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); - case 69: - ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '(') ADVANCE(41); - if (lookahead == '<') ADVANCE(56); - if (lookahead == '=') ADVANCE(68); - END_STATE(); - case 70: + case 75: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(55); - if (lookahead == '=') ADVANCE(68); + if (lookahead == '<') ADVANCE(62); + if (lookahead == '=') ADVANCE(74); END_STATE(); - case 71: + case 76: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '=') ADVANCE(68); + if (lookahead == '=') ADVANCE(74); END_STATE(); - case 72: + case 77: ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); - case 73: + case 78: ACCEPT_TOKEN(anon_sym_AMP_AMP); END_STATE(); - case 74: + case 79: ACCEPT_TOKEN(anon_sym_PIPE_PIPE); END_STATE(); - case 75: + case 80: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '.') ADVANCE(84); - if (lookahead == '=') ADVANCE(77); + if (lookahead == '.') ADVANCE(90); + if (lookahead == '=') ADVANCE(82); END_STATE(); - case 76: + case 81: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '=') ADVANCE(77); + if (lookahead == '=') ADVANCE(82); END_STATE(); - case 77: + case 82: ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); END_STATE(); - case 78: + case 83: + ACCEPT_TOKEN(anon_sym_then); + END_STATE(); + case 84: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(67); + if (lookahead == '=') ADVANCE(73); END_STATE(); - case 79: + case 85: ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); - case 80: + case 86: ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); - case 81: + case 87: ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); - case 82: + case 88: ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); - case 83: + case 89: ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); - case 84: + case 90: ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); - case 85: + case 91: ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); - case 86: + case 92: ACCEPT_TOKEN(anon_sym_LT_LT_LT); END_STATE(); - case 87: + case 93: ACCEPT_TOKEN(anon_sym_GT_GT_GT); END_STATE(); default: @@ -1994,10 +2029,10 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [2] = {.lex_state = 1}, [3] = {.lex_state = 1}, [4] = {.lex_state = 1}, - [5] = {.lex_state = 2}, - [6] = {.lex_state = 2}, - [7] = {.lex_state = 2}, - [8] = {.lex_state = 2}, + [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}, @@ -2064,114 +2099,114 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [72] = {.lex_state = 1}, [73] = {.lex_state = 1}, [74] = {.lex_state = 1}, - [75] = {.lex_state = 1}, - [76] = {.lex_state = 1}, - [77] = {.lex_state = 1}, - [78] = {.lex_state = 1}, - [79] = {.lex_state = 1}, - [80] = {.lex_state = 1}, - [81] = {.lex_state = 1}, - [82] = {.lex_state = 1}, - [83] = {.lex_state = 1}, - [84] = {.lex_state = 1}, - [85] = {.lex_state = 1}, - [86] = {.lex_state = 1}, - [87] = {.lex_state = 1}, - [88] = {.lex_state = 1}, - [89] = {.lex_state = 1}, - [90] = {.lex_state = 1}, - [91] = {.lex_state = 1}, - [92] = {.lex_state = 1}, - [93] = {.lex_state = 1}, - [94] = {.lex_state = 1}, - [95] = {.lex_state = 1}, - [96] = {.lex_state = 1}, - [97] = {.lex_state = 1}, - [98] = {.lex_state = 1}, - [99] = {.lex_state = 1}, - [100] = {.lex_state = 1}, - [101] = {.lex_state = 1}, - [102] = {.lex_state = 1}, - [103] = {.lex_state = 1}, - [104] = {.lex_state = 1}, - [105] = {.lex_state = 1}, - [106] = {.lex_state = 1}, - [107] = {.lex_state = 1}, - [108] = {.lex_state = 1}, - [109] = {.lex_state = 1}, - [110] = {.lex_state = 1}, - [111] = {.lex_state = 1}, - [112] = {.lex_state = 1}, - [113] = {.lex_state = 1}, - [114] = {.lex_state = 1}, - [115] = {.lex_state = 1}, - [116] = {.lex_state = 1}, - [117] = {.lex_state = 1}, - [118] = {.lex_state = 1}, - [119] = {.lex_state = 1}, - [120] = {.lex_state = 1}, - [121] = {.lex_state = 1}, - [122] = {.lex_state = 1}, - [123] = {.lex_state = 1}, - [124] = {.lex_state = 1}, - [125] = {.lex_state = 1}, - [126] = {.lex_state = 1}, - [127] = {.lex_state = 1}, - [128] = {.lex_state = 1}, - [129] = {.lex_state = 1}, - [130] = {.lex_state = 1}, - [131] = {.lex_state = 1}, - [132] = {.lex_state = 1}, - [133] = {.lex_state = 1}, - [134] = {.lex_state = 1}, - [135] = {.lex_state = 1}, - [136] = {.lex_state = 1}, - [137] = {.lex_state = 1}, - [138] = {.lex_state = 1}, - [139] = {.lex_state = 19}, - [140] = {.lex_state = 19}, - [141] = {.lex_state = 19}, - [142] = {.lex_state = 19}, - [143] = {.lex_state = 19}, - [144] = {.lex_state = 20}, + [75] = {.lex_state = 21}, + [76] = {.lex_state = 21}, + [77] = {.lex_state = 21}, + [78] = {.lex_state = 20}, + [79] = {.lex_state = 21}, + [80] = {.lex_state = 20}, + [81] = {.lex_state = 20}, + [82] = {.lex_state = 20}, + [83] = {.lex_state = 20}, + [84] = {.lex_state = 20}, + [85] = {.lex_state = 21}, + [86] = {.lex_state = 23}, + [87] = {.lex_state = 20}, + [88] = {.lex_state = 20}, + [89] = {.lex_state = 20}, + [90] = {.lex_state = 20}, + [91] = {.lex_state = 23}, + [92] = {.lex_state = 20}, + [93] = {.lex_state = 20}, + [94] = {.lex_state = 23}, + [95] = {.lex_state = 20}, + [96] = {.lex_state = 22}, + [97] = {.lex_state = 20}, + [98] = {.lex_state = 22}, + [99] = {.lex_state = 22}, + [100] = {.lex_state = 20}, + [101] = {.lex_state = 22}, + [102] = {.lex_state = 22}, + [103] = {.lex_state = 22}, + [104] = {.lex_state = 22}, + [105] = {.lex_state = 22}, + [106] = {.lex_state = 22}, + [107] = {.lex_state = 22}, + [108] = {.lex_state = 22}, + [109] = {.lex_state = 22}, + [110] = {.lex_state = 20}, + [111] = {.lex_state = 20}, + [112] = {.lex_state = 22}, + [113] = {.lex_state = 20}, + [114] = {.lex_state = 20}, + [115] = {.lex_state = 20}, + [116] = {.lex_state = 20}, + [117] = {.lex_state = 20}, + [118] = {.lex_state = 22}, + [119] = {.lex_state = 22}, + [120] = {.lex_state = 20}, + [121] = {.lex_state = 20}, + [122] = {.lex_state = 20}, + [123] = {.lex_state = 22}, + [124] = {.lex_state = 20}, + [125] = {.lex_state = 20}, + [126] = {.lex_state = 20}, + [127] = {.lex_state = 20}, + [128] = {.lex_state = 3}, + [129] = {.lex_state = 20}, + [130] = {.lex_state = 3}, + [131] = {.lex_state = 20}, + [132] = {.lex_state = 3}, + [133] = {.lex_state = 3}, + [134] = {.lex_state = 3}, + [135] = {.lex_state = 3}, + [136] = {.lex_state = 3}, + [137] = {.lex_state = 3}, + [138] = {.lex_state = 3}, + [139] = {.lex_state = 20}, + [140] = {.lex_state = 20}, + [141] = {.lex_state = 3}, + [142] = {.lex_state = 20}, + [143] = {.lex_state = 3}, + [144] = {.lex_state = 3}, [145] = {.lex_state = 20}, - [146] = {.lex_state = 20}, - [147] = {.lex_state = 20}, - [148] = {.lex_state = 20}, + [146] = {.lex_state = 3}, + [147] = {.lex_state = 3}, + [148] = {.lex_state = 3}, [149] = {.lex_state = 20}, - [150] = {.lex_state = 20}, + [150] = {.lex_state = 3}, [151] = {.lex_state = 20}, [152] = {.lex_state = 20}, - [153] = {.lex_state = 19}, - [154] = {.lex_state = 20}, - [155] = {.lex_state = 20}, - [156] = {.lex_state = 20}, - [157] = {.lex_state = 20}, - [158] = {.lex_state = 20}, - [159] = {.lex_state = 20}, + [153] = {.lex_state = 3}, + [154] = {.lex_state = 3}, + [155] = {.lex_state = 3}, + [156] = {.lex_state = 3}, + [157] = {.lex_state = 3}, + [158] = {.lex_state = 3}, + [159] = {.lex_state = 3}, [160] = {.lex_state = 20}, - [161] = {.lex_state = 20}, - [162] = {.lex_state = 20}, - [163] = {.lex_state = 20}, - [164] = {.lex_state = 20}, - [165] = {.lex_state = 19}, - [166] = {.lex_state = 20}, - [167] = {.lex_state = 20}, - [168] = {.lex_state = 20}, - [169] = {.lex_state = 20}, - [170] = {.lex_state = 20}, - [171] = {.lex_state = 20}, + [161] = {.lex_state = 3}, + [162] = {.lex_state = 3}, + [163] = {.lex_state = 3}, + [164] = {.lex_state = 3}, + [165] = {.lex_state = 3}, + [166] = {.lex_state = 3}, + [167] = {.lex_state = 3}, + [168] = {.lex_state = 3}, + [169] = {.lex_state = 3}, + [170] = {.lex_state = 3}, + [171] = {.lex_state = 3}, [172] = {.lex_state = 20}, - [173] = {.lex_state = 19}, + [173] = {.lex_state = 3}, [174] = {.lex_state = 20}, [175] = {.lex_state = 20}, - [176] = {.lex_state = 20}, - [177] = {.lex_state = 20}, - [178] = {.lex_state = 20}, - [179] = {.lex_state = 20}, - [180] = {.lex_state = 3}, + [176] = {.lex_state = 3}, + [177] = {.lex_state = 3}, + [178] = {.lex_state = 3}, + [179] = {.lex_state = 3}, + [180] = {.lex_state = 20}, [181] = {.lex_state = 20}, - [182] = {.lex_state = 20}, + [182] = {.lex_state = 3}, [183] = {.lex_state = 20}, [184] = {.lex_state = 20}, [185] = {.lex_state = 20}, @@ -2181,90 +2216,90 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [189] = {.lex_state = 20}, [190] = {.lex_state = 20}, [191] = {.lex_state = 20}, - [192] = {.lex_state = 20}, - [193] = {.lex_state = 3}, + [192] = {.lex_state = 3}, + [193] = {.lex_state = 20}, [194] = {.lex_state = 3}, - [195] = {.lex_state = 20}, + [195] = {.lex_state = 3}, [196] = {.lex_state = 20}, [197] = {.lex_state = 3}, [198] = {.lex_state = 3}, [199] = {.lex_state = 3}, - [200] = {.lex_state = 3}, + [200] = {.lex_state = 20}, [201] = {.lex_state = 3}, [202] = {.lex_state = 3}, - [203] = {.lex_state = 3}, + [203] = {.lex_state = 20}, [204] = {.lex_state = 3}, [205] = {.lex_state = 3}, - [206] = {.lex_state = 20}, + [206] = {.lex_state = 3}, [207] = {.lex_state = 20}, - [208] = {.lex_state = 3}, - [209] = {.lex_state = 3}, - [210] = {.lex_state = 3}, + [208] = {.lex_state = 22}, + [209] = {.lex_state = 20}, + [210] = {.lex_state = 20}, [211] = {.lex_state = 3}, - [212] = {.lex_state = 20}, + [212] = {.lex_state = 3}, [213] = {.lex_state = 3}, - [214] = {.lex_state = 3}, + [214] = {.lex_state = 20}, [215] = {.lex_state = 3}, [216] = {.lex_state = 3}, - [217] = {.lex_state = 3}, - [218] = {.lex_state = 3}, - [219] = {.lex_state = 3}, + [217] = {.lex_state = 20}, + [218] = {.lex_state = 20}, + [219] = {.lex_state = 20}, [220] = {.lex_state = 3}, - [221] = {.lex_state = 3}, + [221] = {.lex_state = 22}, [222] = {.lex_state = 3}, - [223] = {.lex_state = 3}, - [224] = {.lex_state = 3}, - [225] = {.lex_state = 3}, - [226] = {.lex_state = 3}, - [227] = {.lex_state = 3}, + [223] = {.lex_state = 22}, + [224] = {.lex_state = 20}, + [225] = {.lex_state = 20}, + [226] = {.lex_state = 20}, + [227] = {.lex_state = 20}, [228] = {.lex_state = 3}, - [229] = {.lex_state = 3}, - [230] = {.lex_state = 3}, - [231] = {.lex_state = 3}, - [232] = {.lex_state = 3}, - [233] = {.lex_state = 20}, - [234] = {.lex_state = 20}, - [235] = {.lex_state = 3}, - [236] = {.lex_state = 3}, - [237] = {.lex_state = 20}, - [238] = {.lex_state = 20}, - [239] = {.lex_state = 20}, - [240] = {.lex_state = 3}, - [241] = {.lex_state = 3}, - [242] = {.lex_state = 3}, - [243] = {.lex_state = 3}, - [244] = {.lex_state = 3}, - [245] = {.lex_state = 3}, - [246] = {.lex_state = 3}, - [247] = {.lex_state = 3}, - [248] = {.lex_state = 3}, - [249] = {.lex_state = 3}, - [250] = {.lex_state = 3}, - [251] = {.lex_state = 3}, - [252] = {.lex_state = 3}, - [253] = {.lex_state = 3}, - [254] = {.lex_state = 3}, - [255] = {.lex_state = 3}, - [256] = {.lex_state = 20}, - [257] = {.lex_state = 3}, - [258] = {.lex_state = 3}, - [259] = {.lex_state = 3}, - [260] = {.lex_state = 3}, - [261] = {.lex_state = 20}, - [262] = {.lex_state = 20}, - [263] = {.lex_state = 20}, - [264] = {.lex_state = 20}, - [265] = {.lex_state = 3}, - [266] = {.lex_state = 20}, - [267] = {.lex_state = 20}, - [268] = {.lex_state = 3}, - [269] = {.lex_state = 3}, - [270] = {.lex_state = 20}, - [271] = {.lex_state = 20}, - [272] = {.lex_state = 20}, - [273] = {.lex_state = 20}, - [274] = {.lex_state = 20}, - [275] = {.lex_state = 3}, + [229] = {.lex_state = 1}, + [230] = {.lex_state = 1}, + [231] = {.lex_state = 1}, + [232] = {.lex_state = 1}, + [233] = {.lex_state = 1}, + [234] = {.lex_state = 1}, + [235] = {.lex_state = 1}, + [236] = {.lex_state = 1}, + [237] = {.lex_state = 1}, + [238] = {.lex_state = 1}, + [239] = {.lex_state = 1}, + [240] = {.lex_state = 1}, + [241] = {.lex_state = 1}, + [242] = {.lex_state = 2}, + [243] = {.lex_state = 2}, + [244] = {.lex_state = 2}, + [245] = {.lex_state = 1}, + [246] = {.lex_state = 2}, + [247] = {.lex_state = 1}, + [248] = {.lex_state = 1}, + [249] = {.lex_state = 1}, + [250] = {.lex_state = 1}, + [251] = {.lex_state = 4}, + [252] = {.lex_state = 4}, + [253] = {.lex_state = 4}, + [254] = {.lex_state = 4}, + [255] = {.lex_state = 5}, + [256] = {.lex_state = 4}, + [257] = {.lex_state = 5}, + [258] = {.lex_state = 5}, + [259] = {.lex_state = 4}, + [260] = {.lex_state = 4}, + [261] = {.lex_state = 4}, + [262] = {.lex_state = 4}, + [263] = {.lex_state = 4}, + [264] = {.lex_state = 4}, + [265] = {.lex_state = 4}, + [266] = {.lex_state = 4}, + [267] = {.lex_state = 1}, + [268] = {.lex_state = 1}, + [269] = {.lex_state = 1}, + [270] = {.lex_state = 1}, + [271] = {.lex_state = 0}, + [272] = {.lex_state = 1}, + [273] = {.lex_state = 1}, + [274] = {.lex_state = 1}, + [275] = {.lex_state = 1}, [276] = {.lex_state = 1}, [277] = {.lex_state = 1}, [278] = {.lex_state = 1}, @@ -2277,112 +2312,59 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [285] = {.lex_state = 1}, [286] = {.lex_state = 1}, [287] = {.lex_state = 1}, - [288] = {.lex_state = 1}, - [289] = {.lex_state = 1}, - [290] = {.lex_state = 1}, + [288] = {.lex_state = 0}, + [289] = {.lex_state = 0}, + [290] = {.lex_state = 0}, [291] = {.lex_state = 1}, - [292] = {.lex_state = 1}, - [293] = {.lex_state = 4}, - [294] = {.lex_state = 4}, - [295] = {.lex_state = 4}, - [296] = {.lex_state = 4}, - [297] = {.lex_state = 5}, - [298] = {.lex_state = 5}, - [299] = {.lex_state = 5}, - [300] = {.lex_state = 4}, - [301] = {.lex_state = 4}, - [302] = {.lex_state = 4}, - [303] = {.lex_state = 4}, - [304] = {.lex_state = 4}, - [305] = {.lex_state = 4}, - [306] = {.lex_state = 4}, - [307] = {.lex_state = 4}, - [308] = {.lex_state = 4}, - [309] = {.lex_state = 4}, - [310] = {.lex_state = 2}, - [311] = {.lex_state = 2}, - [312] = {.lex_state = 2}, - [313] = {.lex_state = 2}, - [314] = {.lex_state = 2}, - [315] = {.lex_state = 2}, - [316] = {.lex_state = 2}, - [317] = {.lex_state = 2}, - [318] = {.lex_state = 2}, - [319] = {.lex_state = 2}, + [292] = {.lex_state = 0}, + [293] = {.lex_state = 1}, + [294] = {.lex_state = 1}, + [295] = {.lex_state = 0}, + [296] = {.lex_state = 1}, + [297] = {.lex_state = 1}, + [298] = {.lex_state = 0}, + [299] = {.lex_state = 1}, + [300] = {.lex_state = 1}, + [301] = {.lex_state = 1}, + [302] = {.lex_state = 1}, + [303] = {.lex_state = 0}, + [304] = {.lex_state = 0}, + [305] = {.lex_state = 1}, + [306] = {.lex_state = 1}, + [307] = {.lex_state = 0}, + [308] = {.lex_state = 1}, + [309] = {.lex_state = 1}, + [310] = {.lex_state = 0}, + [311] = {.lex_state = 21}, + [312] = {.lex_state = 21}, + [313] = {.lex_state = 1}, + [314] = {.lex_state = 0}, + [315] = {.lex_state = 21}, + [316] = {.lex_state = 0}, + [317] = {.lex_state = 21}, + [318] = {.lex_state = 1}, + [319] = {.lex_state = 1}, [320] = {.lex_state = 0}, - [321] = {.lex_state = 2}, + [321] = {.lex_state = 21}, [322] = {.lex_state = 0}, [323] = {.lex_state = 0}, - [324] = {.lex_state = 0}, - [325] = {.lex_state = 0}, - [326] = {.lex_state = 0}, - [327] = {.lex_state = 0}, + [324] = {.lex_state = 1}, + [325] = {.lex_state = 20}, + [326] = {.lex_state = 1}, + [327] = {.lex_state = 5}, [328] = {.lex_state = 0}, [329] = {.lex_state = 0}, - [330] = {.lex_state = 0}, + [330] = {.lex_state = 1}, [331] = {.lex_state = 0}, - [332] = {.lex_state = 0}, - [333] = {.lex_state = 0}, + [332] = {.lex_state = 1}, + [333] = {.lex_state = 1}, [334] = {.lex_state = 0}, [335] = {.lex_state = 0}, [336] = {.lex_state = 0}, - [337] = {.lex_state = 2}, - [338] = {.lex_state = 0}, + [337] = {.lex_state = 1}, + [338] = {.lex_state = 1}, [339] = {.lex_state = 0}, [340] = {.lex_state = 0}, - [341] = {.lex_state = 0}, - [342] = {.lex_state = 0}, - [343] = {.lex_state = 0}, - [344] = {.lex_state = 0}, - [345] = {.lex_state = 0}, - [346] = {.lex_state = 0}, - [347] = {.lex_state = 0}, - [348] = {.lex_state = 0}, - [349] = {.lex_state = 0}, - [350] = {.lex_state = 0}, - [351] = {.lex_state = 0}, - [352] = {.lex_state = 0}, - [353] = {.lex_state = 19}, - [354] = {.lex_state = 0}, - [355] = {.lex_state = 0}, - [356] = {.lex_state = 19}, - [357] = {.lex_state = 0}, - [358] = {.lex_state = 0}, - [359] = {.lex_state = 0}, - [360] = {.lex_state = 0}, - [361] = {.lex_state = 0}, - [362] = {.lex_state = 0}, - [363] = {.lex_state = 19}, - [364] = {.lex_state = 0}, - [365] = {.lex_state = 0}, - [366] = {.lex_state = 0}, - [367] = {.lex_state = 0}, - [368] = {.lex_state = 0}, - [369] = {.lex_state = 19}, - [370] = {.lex_state = 0}, - [371] = {.lex_state = 0}, - [372] = {.lex_state = 0}, - [373] = {.lex_state = 0}, - [374] = {.lex_state = 0}, - [375] = {.lex_state = 20}, - [376] = {.lex_state = 0}, - [377] = {.lex_state = 0}, - [378] = {.lex_state = 0}, - [379] = {.lex_state = 0}, - [380] = {.lex_state = 0}, - [381] = {.lex_state = 0}, - [382] = {.lex_state = 0}, - [383] = {.lex_state = 0}, - [384] = {.lex_state = 0}, - [385] = {.lex_state = 0}, - [386] = {.lex_state = 5}, - [387] = {.lex_state = 19}, - [388] = {.lex_state = 0}, - [389] = {.lex_state = 0}, - [390] = {.lex_state = 0}, - [391] = {.lex_state = 0}, - [392] = {.lex_state = 0}, - [393] = {.lex_state = 0}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -2402,7 +2384,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [aux_sym_unsigned_integer_token1] = ACTIONS(1), [sym_unit_quote] = ACTIONS(1), [anon_sym_DOT] = ACTIONS(1), - [anon_sym_LT_LPAREN] = ACTIONS(1), [anon_sym_COMMA] = ACTIONS(1), [sym_true] = ACTIONS(1), [sym_false] = ACTIONS(1), @@ -2430,6 +2411,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_DOT_DOT] = ACTIONS(1), [anon_sym_DOT_DOT_EQ] = ACTIONS(1), [anon_sym_if] = ACTIONS(1), + [anon_sym_then] = ACTIONS(1), [anon_sym_else] = ACTIONS(1), [anon_sym_let] = ACTIONS(1), [anon_sym_in] = ACTIONS(1), @@ -2441,40 +2423,39 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_RBRACK] = ACTIONS(1), [sym_varadic_dots] = ACTIONS(1), [anon_sym_DASH_GT] = ACTIONS(1), - [anon_sym_LT_LT_LT] = ACTIONS(1), [anon_sym_GT_GT_GT] = ACTIONS(1), }, [STATE(1)] = { - [sym_source_file] = STATE(393), - [sym_base_ten] = STATE(351), - [sym_octal] = STATE(351), - [sym_hex] = STATE(351), - [sym_binary] = STATE(351), - [sym_integer] = STATE(365), - [sym_signed_integer] = STATE(184), - [sym_unsigned_integer] = STATE(184), - [sym_number] = STATE(140), - [sym__float] = STATE(141), - [sym_scalar] = STATE(184), - [sym_vector2] = STATE(184), - [sym_vector3] = STATE(184), - [sym_vector4] = STATE(184), - [sym_boolean] = STATE(184), - [sym_function_call] = STATE(184), - [sym_method_call] = STATE(184), - [sym_expression] = STATE(267), - [sym_unary_expression] = STATE(184), - [sym_binary_expression] = STATE(184), - [sym_if] = STATE(184), - [sym_let_in] = STATE(184), - [sym_identity_path] = STATE(184), - [sym_self_path] = STATE(184), - [sym_parenthesis] = STATE(184), - [sym_list] = STATE(184), - [sym_struct_definition] = STATE(163), - [sym_dictionary_construction] = STATE(184), - [sym_closure_definition] = STATE(184), - [sym_formula] = STATE(184), + [sym_source_file] = STATE(336), + [sym_base_ten] = STATE(313), + [sym_octal] = STATE(313), + [sym_hex] = STATE(313), + [sym_binary] = STATE(313), + [sym_integer] = STATE(319), + [sym_signed_integer] = STATE(120), + [sym_unsigned_integer] = STATE(120), + [sym_number] = STATE(77), + [sym__float] = STATE(76), + [sym_scalar] = STATE(120), + [sym_vector2] = STATE(120), + [sym_vector3] = STATE(120), + [sym_vector4] = STATE(120), + [sym_boolean] = STATE(120), + [sym_function_call] = STATE(120), + [sym_method_call] = STATE(120), + [sym_expression] = STATE(209), + [sym_unary_expression] = STATE(120), + [sym_binary_expression] = STATE(120), + [sym_if] = STATE(120), + [sym_let_in] = STATE(120), + [sym_identity_path] = STATE(120), + [sym_self_path] = STATE(120), + [sym_parenthesis] = STATE(120), + [sym_list] = STATE(120), + [sym_struct_definition] = STATE(119), + [sym_dictionary_construction] = STATE(120), + [sym_closure_definition] = STATE(120), + [sym_formula] = STATE(120), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2497,36 +2478,40 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(2)] = { - [sym_base_ten] = STATE(351), - [sym_octal] = STATE(351), - [sym_hex] = STATE(351), - [sym_binary] = STATE(351), - [sym_integer] = STATE(365), - [sym_signed_integer] = STATE(184), - [sym_unsigned_integer] = STATE(184), - [sym_number] = STATE(140), - [sym__float] = STATE(141), - [sym_scalar] = STATE(184), - [sym_vector2] = STATE(184), - [sym_vector3] = STATE(184), - [sym_vector4] = STATE(184), - [sym_boolean] = STATE(184), - [sym_function_call] = STATE(184), - [sym_method_call] = STATE(184), - [sym_expression] = STATE(266), - [sym_unary_expression] = STATE(184), - [sym_binary_expression] = STATE(184), - [sym_if] = STATE(184), - [sym_let_in] = STATE(184), - [sym_identity_path] = STATE(184), - [sym_self_path] = STATE(184), - [sym_parenthesis] = STATE(184), - [sym_list] = STATE(184), - [sym_struct_definition] = STATE(163), - [sym_dictionary_construction] = STATE(124), - [sym_closure_definition] = STATE(184), - [sym_formula] = STATE(184), - [sym_identifier] = ACTIONS(5), + [sym_base_ten] = STATE(313), + [sym_octal] = STATE(313), + [sym_hex] = STATE(313), + [sym_binary] = STATE(313), + [sym_integer] = STATE(319), + [sym_signed_integer] = STATE(120), + [sym_unsigned_integer] = STATE(120), + [sym_number] = STATE(77), + [sym__float] = STATE(76), + [sym_scalar] = STATE(120), + [sym_vector2] = STATE(120), + [sym_vector3] = STATE(120), + [sym_vector4] = STATE(120), + [sym_boolean] = STATE(120), + [sym_function_call] = STATE(120), + [sym_method_call] = STATE(120), + [sym_expression] = STATE(219), + [sym_unary_expression] = STATE(120), + [sym_binary_expression] = STATE(120), + [sym_if] = STATE(120), + [sym_let_in] = STATE(120), + [sym_identity_path] = STATE(120), + [sym_self_path] = STATE(120), + [sym_parenthesis] = STATE(120), + [sym_list] = STATE(120), + [sym_struct_member] = STATE(316), + [sym__struct_final_element] = STATE(320), + [sym_struct_definition] = STATE(119), + [sym_dictionary_member_assignment] = STATE(288), + [sym_dictionary_construction] = STATE(120), + [sym_closure_definition] = STATE(120), + [sym_formula] = STATE(120), + [aux_sym_struct_definition_repeat1] = STATE(272), + [sym_identifier] = ACTIONS(35), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), @@ -2538,212 +2523,52 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LT_LPAREN] = ACTIONS(19), [sym_true] = ACTIONS(21), [sym_false] = ACTIONS(21), - [anon_sym_COLON] = ACTIONS(35), - [anon_sym_DASH] = ACTIONS(37), - [anon_sym_PLUS] = ACTIONS(37), - [anon_sym_BANG] = ACTIONS(39), - [anon_sym_STAR_STAR] = ACTIONS(41), - [anon_sym_STAR] = ACTIONS(43), - [anon_sym_SLASH] = ACTIONS(43), - [anon_sym_SLASH_SLASH] = ACTIONS(45), - [anon_sym_LT_LT] = ACTIONS(47), - [anon_sym_GT_GT] = ACTIONS(49), - [anon_sym_AMP] = ACTIONS(51), - [anon_sym_PIPE] = ACTIONS(53), - [anon_sym_CARET] = ACTIONS(55), - [anon_sym_GT] = ACTIONS(57), - [anon_sym_GT_EQ] = ACTIONS(59), - [anon_sym_EQ_EQ] = ACTIONS(59), - [anon_sym_LT_EQ] = ACTIONS(59), - [anon_sym_LT] = ACTIONS(57), - [anon_sym_BANG_EQ] = ACTIONS(59), - [anon_sym_AMP_AMP] = ACTIONS(61), - [anon_sym_PIPE_PIPE] = ACTIONS(63), - [anon_sym_DOT_DOT] = ACTIONS(65), - [anon_sym_DOT_DOT_EQ] = ACTIONS(67), + [anon_sym_DASH] = ACTIONS(23), + [anon_sym_PLUS] = ACTIONS(23), + [anon_sym_BANG] = ACTIONS(23), [anon_sym_if] = ACTIONS(25), [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(69), + [anon_sym_LPAREN] = ACTIONS(29), + [anon_sym_RPAREN] = ACTIONS(37), [anon_sym_LBRACK] = ACTIONS(31), + [sym_varadic_dots] = ACTIONS(39), [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(3)] = { - [sym_base_ten] = STATE(351), - [sym_octal] = STATE(351), - [sym_hex] = STATE(351), - [sym_binary] = STATE(351), - [sym_integer] = STATE(365), - [sym_signed_integer] = STATE(184), - [sym_unsigned_integer] = STATE(184), - [sym_number] = STATE(140), - [sym__float] = STATE(141), - [sym_scalar] = STATE(184), - [sym_vector2] = STATE(184), - [sym_vector3] = STATE(184), - [sym_vector4] = STATE(184), - [sym_boolean] = STATE(184), - [sym_function_call] = STATE(184), - [sym_method_call] = STATE(184), - [sym_expression] = STATE(256), - [sym_unary_expression] = STATE(184), - [sym_binary_expression] = STATE(184), - [sym_if] = STATE(184), - [sym_let_in] = STATE(184), - [sym_identity_path] = STATE(184), - [sym_self_path] = STATE(184), - [sym_parenthesis] = STATE(184), - [sym_list] = STATE(184), - [sym_struct_definition] = STATE(163), - [sym_dictionary_construction] = STATE(124), - [sym_closure_definition] = STATE(184), - [sym_formula] = STATE(184), - [sym_identifier] = ACTIONS(5), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(7), - [sym_self] = ACTIONS(9), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [anon_sym_LT_LPAREN] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_COLON] = ACTIONS(35), - [anon_sym_DASH] = ACTIONS(37), - [anon_sym_PLUS] = ACTIONS(37), - [anon_sym_BANG] = ACTIONS(39), - [anon_sym_STAR_STAR] = ACTIONS(41), - [anon_sym_STAR] = ACTIONS(43), - [anon_sym_SLASH] = ACTIONS(43), - [anon_sym_SLASH_SLASH] = ACTIONS(45), - [anon_sym_LT_LT] = ACTIONS(47), - [anon_sym_GT_GT] = ACTIONS(49), - [anon_sym_AMP] = ACTIONS(51), - [anon_sym_PIPE] = ACTIONS(53), - [anon_sym_CARET] = ACTIONS(55), - [anon_sym_GT] = ACTIONS(57), - [anon_sym_GT_EQ] = ACTIONS(59), - [anon_sym_EQ_EQ] = ACTIONS(59), - [anon_sym_LT_EQ] = ACTIONS(59), - [anon_sym_LT] = ACTIONS(57), - [anon_sym_BANG_EQ] = ACTIONS(59), - [anon_sym_AMP_AMP] = ACTIONS(61), - [anon_sym_PIPE_PIPE] = ACTIONS(63), - [anon_sym_DOT_DOT] = ACTIONS(65), - [anon_sym_DOT_DOT_EQ] = ACTIONS(67), - [anon_sym_if] = ACTIONS(25), - [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(69), - [anon_sym_LBRACK] = ACTIONS(31), - [anon_sym_LT_LT_LT] = ACTIONS(33), - }, - [STATE(4)] = { - [sym_base_ten] = STATE(351), - [sym_octal] = STATE(351), - [sym_hex] = STATE(351), - [sym_binary] = STATE(351), - [sym_integer] = STATE(365), - [sym_signed_integer] = STATE(184), - [sym_unsigned_integer] = STATE(184), - [sym_number] = STATE(140), - [sym__float] = STATE(141), - [sym_scalar] = STATE(184), - [sym_vector2] = STATE(184), - [sym_vector3] = STATE(184), - [sym_vector4] = STATE(184), - [sym_boolean] = STATE(184), - [sym_function_call] = STATE(184), - [sym_method_call] = STATE(184), - [sym_expression] = STATE(263), - [sym_unary_expression] = STATE(184), - [sym_binary_expression] = STATE(184), - [sym_if] = STATE(184), - [sym_let_in] = STATE(184), - [sym_identity_path] = STATE(184), - [sym_self_path] = STATE(184), - [sym_parenthesis] = STATE(184), - [sym_list] = STATE(184), - [sym_struct_definition] = STATE(163), - [sym_dictionary_construction] = STATE(124), - [sym_closure_definition] = STATE(184), - [sym_formula] = STATE(184), - [sym_identifier] = ACTIONS(5), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(7), - [sym_self] = ACTIONS(9), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [anon_sym_LT_LPAREN] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_COLON] = ACTIONS(35), - [anon_sym_DASH] = ACTIONS(37), - [anon_sym_PLUS] = ACTIONS(37), - [anon_sym_BANG] = ACTIONS(39), - [anon_sym_STAR_STAR] = ACTIONS(41), - [anon_sym_STAR] = ACTIONS(43), - [anon_sym_SLASH] = ACTIONS(43), - [anon_sym_SLASH_SLASH] = ACTIONS(45), - [anon_sym_LT_LT] = ACTIONS(47), - [anon_sym_GT_GT] = ACTIONS(49), - [anon_sym_AMP] = ACTIONS(51), - [anon_sym_PIPE] = ACTIONS(53), - [anon_sym_CARET] = ACTIONS(55), - [anon_sym_GT] = ACTIONS(57), - [anon_sym_GT_EQ] = ACTIONS(59), - [anon_sym_EQ_EQ] = ACTIONS(59), - [anon_sym_LT_EQ] = ACTIONS(59), - [anon_sym_LT] = ACTIONS(57), - [anon_sym_BANG_EQ] = ACTIONS(59), - [anon_sym_AMP_AMP] = ACTIONS(61), - [anon_sym_PIPE_PIPE] = ACTIONS(63), - [anon_sym_DOT_DOT] = ACTIONS(65), - [anon_sym_DOT_DOT_EQ] = ACTIONS(67), - [anon_sym_if] = ACTIONS(25), - [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(69), - [anon_sym_LBRACK] = ACTIONS(31), - [anon_sym_LT_LT_LT] = ACTIONS(33), - }, - [STATE(5)] = { - [sym_base_ten] = STATE(351), - [sym_octal] = STATE(351), - [sym_hex] = STATE(351), - [sym_binary] = STATE(351), - [sym_integer] = STATE(365), - [sym_signed_integer] = STATE(184), - [sym_unsigned_integer] = STATE(184), - [sym_number] = STATE(140), - [sym__float] = STATE(141), - [sym_scalar] = STATE(184), - [sym_vector2] = STATE(184), - [sym_vector3] = STATE(184), - [sym_vector4] = STATE(184), - [sym_boolean] = STATE(184), - [sym_function_call] = STATE(184), - [sym_method_call] = STATE(184), - [sym_expression] = STATE(271), - [sym_unary_expression] = STATE(184), - [sym_binary_expression] = STATE(184), - [sym_if] = STATE(184), - [sym_let_in] = STATE(184), - [sym_identity_path] = STATE(184), - [sym_self_path] = STATE(184), - [sym_parenthesis] = STATE(184), - [sym_list] = STATE(184), - [sym_struct_member] = STATE(367), - [sym__struct_final_element] = STATE(384), - [sym_struct_definition] = STATE(163), - [sym_dictionary_member_assignment] = STATE(347), - [sym_dictionary_construction] = STATE(184), - [sym_closure_definition] = STATE(184), - [sym_formula] = STATE(184), - [aux_sym_struct_definition_repeat1] = STATE(316), - [sym_identifier] = ACTIONS(71), + [sym_base_ten] = STATE(313), + [sym_octal] = STATE(313), + [sym_hex] = STATE(313), + [sym_binary] = STATE(313), + [sym_integer] = STATE(319), + [sym_signed_integer] = STATE(120), + [sym_unsigned_integer] = STATE(120), + [sym_number] = STATE(77), + [sym__float] = STATE(76), + [sym_scalar] = STATE(120), + [sym_vector2] = STATE(120), + [sym_vector3] = STATE(120), + [sym_vector4] = STATE(120), + [sym_boolean] = STATE(120), + [sym_function_call] = STATE(120), + [sym_method_call] = STATE(120), + [sym_expression] = STATE(217), + [sym_unary_expression] = STATE(120), + [sym_binary_expression] = STATE(120), + [sym_if] = STATE(120), + [sym_let_in] = STATE(120), + [sym_identity_path] = STATE(120), + [sym_self_path] = STATE(120), + [sym_parenthesis] = STATE(120), + [sym_list] = STATE(120), + [sym_struct_member] = STATE(316), + [sym__struct_final_element] = STATE(328), + [sym_struct_definition] = STATE(119), + [sym_dictionary_member_assignment] = STATE(289), + [sym_dictionary_construction] = STATE(120), + [sym_closure_definition] = STATE(120), + [sym_formula] = STATE(120), + [aux_sym_struct_definition_repeat1] = STATE(275), + [sym_identifier] = ACTIONS(35), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), @@ -2761,180 +2586,9 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_if] = ACTIONS(25), [anon_sym_let] = ACTIONS(27), [anon_sym_LPAREN] = ACTIONS(29), - [anon_sym_RPAREN] = ACTIONS(73), + [anon_sym_RPAREN] = ACTIONS(41), [anon_sym_LBRACK] = ACTIONS(31), - [sym_varadic_dots] = ACTIONS(75), - [anon_sym_LT_LT_LT] = ACTIONS(33), - }, - [STATE(6)] = { - [sym_base_ten] = STATE(351), - [sym_octal] = STATE(351), - [sym_hex] = STATE(351), - [sym_binary] = STATE(351), - [sym_integer] = STATE(365), - [sym_signed_integer] = STATE(184), - [sym_unsigned_integer] = STATE(184), - [sym_number] = STATE(140), - [sym__float] = STATE(141), - [sym_scalar] = STATE(184), - [sym_vector2] = STATE(184), - [sym_vector3] = STATE(184), - [sym_vector4] = STATE(184), - [sym_boolean] = STATE(184), - [sym_function_call] = STATE(184), - [sym_method_call] = STATE(184), - [sym_expression] = STATE(262), - [sym_unary_expression] = STATE(184), - [sym_binary_expression] = STATE(184), - [sym_if] = STATE(184), - [sym_let_in] = STATE(184), - [sym_identity_path] = STATE(184), - [sym_self_path] = STATE(184), - [sym_parenthesis] = STATE(184), - [sym_list] = STATE(184), - [sym_struct_member] = STATE(367), - [sym__struct_final_element] = STATE(377), - [sym_struct_definition] = STATE(163), - [sym_dictionary_member_assignment] = STATE(349), - [sym_dictionary_construction] = STATE(184), - [sym_closure_definition] = STATE(184), - [sym_formula] = STATE(184), - [aux_sym_struct_definition_repeat1] = STATE(315), - [sym_identifier] = ACTIONS(71), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(7), - [sym_self] = ACTIONS(9), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [anon_sym_LT_LPAREN] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_DASH] = ACTIONS(23), - [anon_sym_PLUS] = ACTIONS(23), - [anon_sym_BANG] = ACTIONS(23), - [anon_sym_if] = ACTIONS(25), - [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(29), - [anon_sym_RPAREN] = ACTIONS(77), - [anon_sym_LBRACK] = ACTIONS(31), - [sym_varadic_dots] = ACTIONS(75), - [anon_sym_LT_LT_LT] = ACTIONS(33), - }, - [STATE(7)] = { - [sym_base_ten] = STATE(351), - [sym_octal] = STATE(351), - [sym_hex] = STATE(351), - [sym_binary] = STATE(351), - [sym_integer] = STATE(365), - [sym_signed_integer] = STATE(184), - [sym_unsigned_integer] = STATE(184), - [sym_number] = STATE(140), - [sym__float] = STATE(141), - [sym_scalar] = STATE(184), - [sym_vector2] = STATE(184), - [sym_vector3] = STATE(184), - [sym_vector4] = STATE(184), - [sym_boolean] = STATE(184), - [sym_function_call] = STATE(184), - [sym_method_call] = STATE(184), - [sym_expression] = STATE(271), - [sym_unary_expression] = STATE(184), - [sym_binary_expression] = STATE(184), - [sym_if] = STATE(184), - [sym_let_in] = STATE(184), - [sym_identity_path] = STATE(184), - [sym_self_path] = STATE(184), - [sym_parenthesis] = STATE(184), - [sym_list] = STATE(184), - [sym_struct_member] = STATE(367), - [sym__struct_final_element] = STATE(384), - [sym_struct_definition] = STATE(163), - [sym_dictionary_member_assignment] = STATE(349), - [sym_dictionary_construction] = STATE(184), - [sym_closure_definition] = STATE(184), - [sym_formula] = STATE(184), - [aux_sym_struct_definition_repeat1] = STATE(316), - [sym_identifier] = ACTIONS(71), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(7), - [sym_self] = ACTIONS(9), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [anon_sym_LT_LPAREN] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_DASH] = ACTIONS(23), - [anon_sym_PLUS] = ACTIONS(23), - [anon_sym_BANG] = ACTIONS(23), - [anon_sym_if] = ACTIONS(25), - [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(29), - [anon_sym_RPAREN] = ACTIONS(77), - [anon_sym_LBRACK] = ACTIONS(31), - [sym_varadic_dots] = ACTIONS(75), - [anon_sym_LT_LT_LT] = ACTIONS(33), - }, - [STATE(8)] = { - [sym_base_ten] = STATE(351), - [sym_octal] = STATE(351), - [sym_hex] = STATE(351), - [sym_binary] = STATE(351), - [sym_integer] = STATE(365), - [sym_signed_integer] = STATE(184), - [sym_unsigned_integer] = STATE(184), - [sym_number] = STATE(140), - [sym__float] = STATE(141), - [sym_scalar] = STATE(184), - [sym_vector2] = STATE(184), - [sym_vector3] = STATE(184), - [sym_vector4] = STATE(184), - [sym_boolean] = STATE(184), - [sym_function_call] = STATE(184), - [sym_method_call] = STATE(184), - [sym_expression] = STATE(264), - [sym_unary_expression] = STATE(184), - [sym_binary_expression] = STATE(184), - [sym_if] = STATE(184), - [sym_let_in] = STATE(184), - [sym_identity_path] = STATE(184), - [sym_self_path] = STATE(184), - [sym_parenthesis] = STATE(184), - [sym_list] = STATE(184), - [sym_struct_member] = STATE(367), - [sym__struct_final_element] = STATE(392), - [sym_struct_definition] = STATE(163), - [sym_dictionary_member_assignment] = STATE(333), - [sym_dictionary_construction] = STATE(184), - [sym_closure_definition] = STATE(184), - [sym_formula] = STATE(184), - [aux_sym_struct_definition_repeat1] = STATE(317), - [sym_identifier] = ACTIONS(71), - [sym_comment] = ACTIONS(3), - [sym__whitespace] = ACTIONS(3), - [sym_string] = ACTIONS(7), - [sym_self] = ACTIONS(9), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [anon_sym_LT_LPAREN] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_DASH] = ACTIONS(23), - [anon_sym_PLUS] = ACTIONS(23), - [anon_sym_BANG] = ACTIONS(23), - [anon_sym_if] = ACTIONS(25), - [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(29), - [anon_sym_RPAREN] = ACTIONS(79), - [anon_sym_LBRACK] = ACTIONS(31), - [sym_varadic_dots] = ACTIONS(75), + [sym_varadic_dots] = ACTIONS(39), [anon_sym_LT_LT_LT] = ACTIONS(33), }, }; @@ -2967,19 +2621,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - ACTIONS(81), 1, + ACTIONS(43), 1, anon_sym_RBRACK, - STATE(11), 1, + STATE(5), 1, aux_sym_list_repeat1, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(163), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(206), 1, + STATE(160), 1, sym_expression, - STATE(365), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2991,12 +2645,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3018,62 +2672,62 @@ static const uint16_t ts_small_parse_table[] = { sym_closure_definition, sym_formula, [102] = 25, - ACTIONS(83), 1, + ACTIONS(5), 1, sym_identifier, - ACTIONS(86), 1, + ACTIONS(7), 1, sym_string, - ACTIONS(89), 1, + ACTIONS(9), 1, sym_self, - ACTIONS(92), 1, + ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(95), 1, + ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(98), 1, + ACTIONS(15), 1, aux_sym_hex_token1, - ACTIONS(101), 1, + ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(104), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(113), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(116), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(119), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(122), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(125), 1, - anon_sym_RBRACK, - ACTIONS(127), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(10), 1, + ACTIONS(45), 1, + anon_sym_RBRACK, + STATE(6), 1, aux_sym_list_repeat1, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(163), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(270), 1, + STATE(149), 1, sym_expression, - STATE(365), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(107), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(110), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3095,62 +2749,62 @@ static const uint16_t ts_small_parse_table[] = { sym_closure_definition, sym_formula, [204] = 25, - ACTIONS(5), 1, + ACTIONS(47), 1, sym_identifier, - ACTIONS(7), 1, + ACTIONS(50), 1, sym_string, - ACTIONS(9), 1, + ACTIONS(53), 1, sym_self, - ACTIONS(11), 1, + ACTIONS(56), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(59), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(62), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(65), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(68), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(77), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(80), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(83), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(86), 1, anon_sym_LBRACK, - ACTIONS(33), 1, - anon_sym_LT_LT_LT, - ACTIONS(130), 1, + ACTIONS(89), 1, anon_sym_RBRACK, - STATE(10), 1, + ACTIONS(91), 1, + anon_sym_LT_LT_LT, + STATE(6), 1, aux_sym_list_repeat1, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(163), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(212), 1, + STATE(225), 1, sym_expression, - STATE(365), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(71), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(74), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3198,19 +2852,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - ACTIONS(132), 1, + ACTIONS(94), 1, anon_sym_RBRACK, - STATE(10), 1, + STATE(6), 1, aux_sym_list_repeat1, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(163), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(234), 1, + STATE(175), 1, sym_expression, - STATE(365), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3222,12 +2876,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3275,19 +2929,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - ACTIONS(134), 1, + ACTIONS(96), 1, anon_sym_RBRACK, - STATE(12), 1, + STATE(7), 1, aux_sym_list_repeat1, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(163), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(233), 1, + STATE(174), 1, sym_expression, - STATE(365), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3299,12 +2953,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3325,15 +2979,13 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [510] = 25, + [510] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -3342,29 +2994,27 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_let, ACTIONS(29), 1, anon_sym_LPAREN, ACTIONS(31), 1, anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - ACTIONS(136), 1, - anon_sym_RBRACK, - STATE(15), 1, - aux_sym_list_repeat1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, + sym__float, STATE(140), 1, sym_number, - STATE(141), 1, - sym__float, - STATE(163), 1, - sym_struct_definition, - STATE(238), 1, + STATE(207), 1, sym_expression, - STATE(365), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3372,16 +3022,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3402,15 +3052,13 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [612] = 25, + [606] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -3419,29 +3067,27 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_let, ACTIONS(29), 1, anon_sym_LPAREN, ACTIONS(31), 1, anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - ACTIONS(138), 1, - anon_sym_RBRACK, - STATE(10), 1, - aux_sym_list_repeat1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, + sym__float, STATE(140), 1, sym_number, - STATE(141), 1, - sym__float, - STATE(163), 1, - sym_struct_definition, - STATE(239), 1, + STATE(180), 1, sym_expression, - STATE(365), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3449,16 +3095,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3479,59 +3125,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [714] = 23, + [702] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(156), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(158), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + STATE(76), 1, sym__float, - STATE(94), 1, - sym_struct_definition, - STATE(110), 1, + STATE(77), 1, + sym_number, + STATE(107), 1, sym_expression, - STATE(352), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3552,7 +3198,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [810] = 23, + [798] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3579,15 +3225,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(162), 1, - sym_expression, - STATE(163), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(365), 1, + STATE(203), 1, + sym_expression, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3599,12 +3245,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3625,7 +3271,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [906] = 23, + [894] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3652,15 +3298,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(163), 1, - sym_struct_definition, - STATE(164), 1, + STATE(77), 1, + sym_number, + STATE(99), 1, sym_expression, - STATE(365), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3672,12 +3318,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3698,59 +3344,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1002] = 23, + [990] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, - sym_identifier, - ACTIONS(166), 1, - sym_string, - ACTIONS(168), 1, - sym_self, - ACTIONS(170), 1, - aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(76), 1, sym__float, - STATE(209), 1, - sym_struct_definition, - STATE(221), 1, + STATE(77), 1, + sym_number, + STATE(92), 1, sym_expression, - STATE(362), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3771,59 +3417,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1098] = 23, + [1086] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(156), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(158), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + STATE(76), 1, sym__float, - STATE(94), 1, - sym_struct_definition, - STATE(118), 1, + STATE(77), 1, + sym_number, + STATE(101), 1, sym_expression, - STATE(352), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3844,7 +3490,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1194] = 23, + [1182] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3871,15 +3517,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(163), 1, - sym_struct_definition, - STATE(272), 1, + STATE(77), 1, + sym_number, + STATE(102), 1, sym_expression, - STATE(365), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3891,12 +3537,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3917,7 +3563,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1290] = 23, + [1278] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -3944,15 +3590,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(163), 1, - sym_struct_definition, - STATE(171), 1, + STATE(77), 1, + sym_number, + STATE(103), 1, sym_expression, - STATE(365), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3964,12 +3610,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3990,7 +3636,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1386] = 23, + [1374] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4017,15 +3663,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(163), 1, - sym_struct_definition, - STATE(196), 1, + STATE(77), 1, + sym_number, + STATE(104), 1, sym_expression, - STATE(365), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4037,12 +3683,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4063,7 +3709,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1482] = 23, + [1470] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4090,15 +3736,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(163), 1, - sym_struct_definition, - STATE(237), 1, + STATE(77), 1, + sym_number, + STATE(105), 1, sym_expression, - STATE(365), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4110,12 +3756,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4136,7 +3782,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1578] = 23, + [1566] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4163,15 +3809,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(163), 1, - sym_struct_definition, - STATE(170), 1, + STATE(77), 1, + sym_number, + STATE(106), 1, sym_expression, - STATE(365), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4183,12 +3829,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4209,7 +3855,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1674] = 23, + [1662] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4236,15 +3882,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(163), 1, - sym_struct_definition, - STATE(167), 1, + STATE(77), 1, + sym_number, + STATE(96), 1, sym_expression, - STATE(365), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4256,12 +3902,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4282,7 +3928,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1770] = 23, + [1758] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4309,15 +3955,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(163), 1, - sym_struct_definition, - STATE(169), 1, + STATE(77), 1, + sym_number, + STATE(108), 1, sym_expression, - STATE(365), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4329,12 +3975,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4355,7 +4001,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1866] = 23, + [1854] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4382,15 +4028,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(163), 1, - sym_struct_definition, - STATE(207), 1, + STATE(77), 1, + sym_number, + STATE(109), 1, sym_expression, - STATE(365), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4402,12 +4048,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4428,59 +4074,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1962] = 23, + [1950] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, + ACTIONS(106), 1, sym_identifier, - ACTIONS(166), 1, + ACTIONS(108), 1, sym_string, - ACTIONS(168), 1, + ACTIONS(110), 1, sym_self, - ACTIONS(170), 1, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(130), 1, sym__float, - STATE(208), 1, - sym_expression, - STATE(209), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(362), 1, + STATE(154), 1, + sym_expression, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4501,59 +4147,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2058] = 23, + [2046] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, - sym_identifier, - ACTIONS(166), 1, - sym_string, - ACTIONS(168), 1, - sym_self, - ACTIONS(170), 1, - aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(76), 1, sym__float, - STATE(209), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(245), 1, + STATE(208), 1, sym_expression, - STATE(362), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4574,59 +4220,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2154] = 23, + [2142] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(156), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(158), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + STATE(76), 1, sym__float, - STATE(94), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(95), 1, + STATE(210), 1, sym_expression, - STATE(352), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4647,59 +4293,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2250] = 23, + [2238] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(156), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(158), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + STATE(76), 1, sym__float, - STATE(94), 1, - sym_struct_definition, - STATE(98), 1, + STATE(77), 1, + sym_number, + STATE(112), 1, sym_expression, - STATE(352), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4720,59 +4366,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2346] = 23, + [2334] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(156), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(158), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + STATE(76), 1, sym__float, - STATE(94), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(103), 1, + STATE(142), 1, sym_expression, - STATE(352), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4793,59 +4439,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2442] = 23, + [2430] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(156), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(158), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + STATE(76), 1, sym__float, - STATE(94), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(104), 1, + STATE(172), 1, sym_expression, - STATE(352), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4866,59 +4512,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2538] = 23, + [2526] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(156), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(158), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + STATE(76), 1, sym__float, - STATE(94), 1, - sym_struct_definition, - STATE(105), 1, + STATE(77), 1, + sym_number, + STATE(118), 1, sym_expression, - STATE(352), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4939,59 +4585,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2634] = 23, + [2622] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(156), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(158), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + STATE(76), 1, sym__float, - STATE(94), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(106), 1, + STATE(145), 1, sym_expression, - STATE(352), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5012,59 +4658,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2730] = 23, + [2718] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, + ACTIONS(106), 1, sym_identifier, - ACTIONS(142), 1, + ACTIONS(108), 1, sym_string, - ACTIONS(144), 1, + ACTIONS(110), 1, sym_self, - ACTIONS(146), 1, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(156), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(158), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + STATE(130), 1, sym__float, - STATE(94), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(107), 1, + STATE(146), 1, sym_expression, - STATE(352), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5085,59 +4731,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2826] = 23, + [2814] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(156), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(158), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + STATE(76), 1, sym__float, - STATE(94), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(108), 1, + STATE(123), 1, sym_expression, - STATE(352), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5158,59 +4804,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2922] = 23, + [2910] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, + ACTIONS(106), 1, sym_identifier, - ACTIONS(142), 1, + ACTIONS(108), 1, sym_string, - ACTIONS(144), 1, + ACTIONS(110), 1, sym_self, - ACTIONS(146), 1, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(156), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(158), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + STATE(130), 1, sym__float, - STATE(94), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(109), 1, + STATE(212), 1, sym_expression, - STATE(352), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5231,15 +4877,13 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3018] = 23, + [3006] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -5248,25 +4892,27 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_let, ACTIONS(29), 1, anon_sym_LPAREN, ACTIONS(31), 1, anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, + sym__float, STATE(140), 1, sym_number, - STATE(141), 1, - sym__float, - STATE(163), 1, - sym_struct_definition, - STATE(274), 1, + STATE(218), 1, sym_expression, - STATE(365), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5274,16 +4920,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5304,59 +4950,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3114] = 23, + [3102] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(156), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(158), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + STATE(76), 1, sym__float, - STATE(94), 1, - sym_struct_definition, - STATE(111), 1, + STATE(77), 1, + sym_number, + STATE(98), 1, sym_expression, - STATE(352), 1, + STATE(119), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5377,59 +5023,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3210] = 23, + [3198] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, - anon_sym_if, - ACTIONS(156), 1, - anon_sym_let, - ACTIONS(158), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym__float, - STATE(94), 1, - sym_struct_definition, - STATE(112), 1, + STATE(140), 1, + sym_number, + STATE(214), 1, sym_expression, - STATE(352), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5450,59 +5096,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3306] = 23, + [3294] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, - anon_sym_if, - ACTIONS(156), 1, - anon_sym_let, - ACTIONS(158), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym__float, - STATE(94), 1, - sym_struct_definition, - STATE(113), 1, + STATE(140), 1, + sym_number, + STATE(181), 1, sym_expression, - STATE(352), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5523,15 +5169,13 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3402] = 23, + [3390] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -5540,25 +5184,27 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_let, ACTIONS(29), 1, anon_sym_LPAREN, ACTIONS(31), 1, anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(92), 1, + sym_expression, + STATE(139), 1, + sym__float, STATE(140), 1, sym_number, - STATE(141), 1, - sym__float, - STATE(163), 1, + STATE(224), 1, sym_struct_definition, - STATE(172), 1, - sym_expression, - STATE(365), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5566,16 +5212,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5596,59 +5242,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3498] = 23, + [3486] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, - anon_sym_if, - ACTIONS(156), 1, - anon_sym_let, - ACTIONS(158), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym__float, - STATE(94), 1, - sym_struct_definition, - STATE(114), 1, + STATE(140), 1, + sym_number, + STATE(183), 1, sym_expression, - STATE(352), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5669,59 +5315,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3594] = 23, - ACTIONS(13), 1, + [3582] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, - anon_sym_if, - ACTIONS(156), 1, - anon_sym_let, - ACTIONS(158), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym__float, - STATE(94), 1, - sym_struct_definition, - STATE(116), 1, + STATE(140), 1, + sym_number, + STATE(184), 1, sym_expression, - STATE(352), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5742,15 +5388,13 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3690] = 23, + [3678] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -5759,25 +5403,27 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_let, ACTIONS(29), 1, anon_sym_LPAREN, ACTIONS(31), 1, anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, + sym__float, STATE(140), 1, sym_number, - STATE(141), 1, - sym__float, - STATE(163), 1, - sym_struct_definition, - STATE(261), 1, + STATE(186), 1, sym_expression, - STATE(365), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5785,16 +5431,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5815,59 +5461,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3786] = 23, + [3774] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, - sym_identifier, - ACTIONS(166), 1, - sym_string, - ACTIONS(168), 1, - sym_self, - ACTIONS(170), 1, - aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, - anon_sym_if, - ACTIONS(180), 1, - anon_sym_let, - ACTIONS(182), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym__float, - STATE(209), 1, - sym_struct_definition, - STATE(210), 1, + STATE(140), 1, + sym_number, + STATE(187), 1, sym_expression, - STATE(362), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5888,59 +5534,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3882] = 23, + [3870] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, - sym_identifier, - ACTIONS(166), 1, - sym_string, - ACTIONS(168), 1, - sym_self, - ACTIONS(170), 1, - aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, - anon_sym_if, - ACTIONS(180), 1, - anon_sym_let, - ACTIONS(182), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym__float, - STATE(209), 1, - sym_struct_definition, - STATE(215), 1, + STATE(140), 1, + sym_number, + STATE(188), 1, sym_expression, - STATE(362), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5961,59 +5607,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3978] = 23, + [3966] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, - sym_identifier, - ACTIONS(166), 1, - sym_string, - ACTIONS(168), 1, - sym_self, - ACTIONS(170), 1, - aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, - anon_sym_if, - ACTIONS(180), 1, - anon_sym_let, - ACTIONS(182), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym__float, - STATE(209), 1, - sym_struct_definition, - STATE(218), 1, + STATE(140), 1, + sym_number, + STATE(189), 1, sym_expression, - STATE(362), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6034,59 +5680,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4074] = 23, + [4062] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, - sym_identifier, - ACTIONS(166), 1, - sym_string, - ACTIONS(168), 1, - sym_self, - ACTIONS(170), 1, - aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, - anon_sym_if, - ACTIONS(180), 1, - anon_sym_let, - ACTIONS(182), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym__float, - STATE(209), 1, - sym_struct_definition, - STATE(219), 1, + STATE(140), 1, + sym_number, + STATE(190), 1, sym_expression, - STATE(362), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6107,59 +5753,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4170] = 23, + [4158] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, - sym_identifier, - ACTIONS(166), 1, - sym_string, - ACTIONS(168), 1, - sym_self, - ACTIONS(170), 1, - aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, - anon_sym_if, - ACTIONS(180), 1, - anon_sym_let, - ACTIONS(182), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym__float, - STATE(209), 1, - sym_struct_definition, - STATE(220), 1, + STATE(140), 1, + sym_number, + STATE(191), 1, sym_expression, - STATE(362), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6180,59 +5826,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4266] = 23, + [4254] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, - sym_identifier, - ACTIONS(166), 1, - sym_string, - ACTIONS(168), 1, - sym_self, - ACTIONS(170), 1, - aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, - anon_sym_if, - ACTIONS(180), 1, - anon_sym_let, - ACTIONS(182), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym__float, - STATE(209), 1, - sym_struct_definition, - STATE(241), 1, + STATE(140), 1, + sym_number, + STATE(193), 1, sym_expression, - STATE(362), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6253,59 +5899,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4362] = 23, + [4350] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, - sym_identifier, - ACTIONS(166), 1, - sym_string, - ACTIONS(168), 1, - sym_self, - ACTIONS(170), 1, - aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, - anon_sym_if, - ACTIONS(180), 1, - anon_sym_let, - ACTIONS(182), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym__float, - STATE(209), 1, - sym_struct_definition, - STATE(222), 1, + STATE(140), 1, + sym_number, + STATE(196), 1, sym_expression, - STATE(362), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6326,59 +5972,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4458] = 23, + [4446] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, - sym_identifier, - ACTIONS(166), 1, - sym_string, - ACTIONS(168), 1, - sym_self, - ACTIONS(170), 1, - aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, - anon_sym_if, - ACTIONS(180), 1, - anon_sym_let, - ACTIONS(182), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym__float, - STATE(209), 1, - sym_struct_definition, - STATE(223), 1, + STATE(140), 1, + sym_number, + STATE(200), 1, sym_expression, - STATE(362), 1, + STATE(224), 1, + sym_struct_definition, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6399,59 +6045,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4554] = 23, + [4542] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, + ACTIONS(106), 1, sym_identifier, - ACTIONS(166), 1, + ACTIONS(108), 1, sym_string, - ACTIONS(168), 1, + ACTIONS(110), 1, sym_self, - ACTIONS(170), 1, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(130), 1, sym__float, - STATE(209), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(224), 1, + STATE(147), 1, sym_expression, - STATE(362), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6472,59 +6118,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4650] = 23, + [4638] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, + ACTIONS(106), 1, sym_identifier, - ACTIONS(166), 1, + ACTIONS(108), 1, sym_string, - ACTIONS(168), 1, + ACTIONS(110), 1, sym_self, - ACTIONS(170), 1, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(130), 1, sym__float, - STATE(209), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(225), 1, + STATE(156), 1, sym_expression, - STATE(362), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6545,59 +6191,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4746] = 23, + [4734] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, + ACTIONS(106), 1, sym_identifier, - ACTIONS(166), 1, + ACTIONS(108), 1, sym_string, - ACTIONS(168), 1, + ACTIONS(110), 1, sym_self, - ACTIONS(170), 1, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(130), 1, sym__float, - STATE(209), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(226), 1, + STATE(159), 1, sym_expression, - STATE(362), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6618,59 +6264,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4842] = 23, + [4830] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, + ACTIONS(106), 1, sym_identifier, - ACTIONS(166), 1, + ACTIONS(108), 1, sym_string, - ACTIONS(168), 1, + ACTIONS(110), 1, sym_self, - ACTIONS(170), 1, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(130), 1, sym__float, - STATE(209), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(227), 1, + STATE(153), 1, sym_expression, - STATE(362), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6691,59 +6337,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4938] = 23, + [4926] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, + ACTIONS(106), 1, sym_identifier, - ACTIONS(166), 1, + ACTIONS(108), 1, sym_string, - ACTIONS(168), 1, + ACTIONS(110), 1, sym_self, - ACTIONS(170), 1, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(130), 1, sym__float, - STATE(209), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(228), 1, + STATE(178), 1, sym_expression, - STATE(362), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6764,59 +6410,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5034] = 23, + [5022] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, + ACTIONS(106), 1, sym_identifier, - ACTIONS(166), 1, + ACTIONS(108), 1, sym_string, - ACTIONS(168), 1, + ACTIONS(110), 1, sym_self, - ACTIONS(170), 1, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(130), 1, sym__float, - STATE(209), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(229), 1, + STATE(161), 1, sym_expression, - STATE(362), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6837,59 +6483,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5130] = 23, + [5118] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, + ACTIONS(106), 1, sym_identifier, - ACTIONS(166), 1, + ACTIONS(108), 1, sym_string, - ACTIONS(168), 1, + ACTIONS(110), 1, sym_self, - ACTIONS(170), 1, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(130), 1, sym__float, - STATE(209), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(231), 1, + STATE(162), 1, sym_expression, - STATE(362), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6910,59 +6556,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5226] = 23, + [5214] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, + ACTIONS(106), 1, sym_identifier, - ACTIONS(166), 1, + ACTIONS(108), 1, sym_string, - ACTIONS(168), 1, + ACTIONS(110), 1, sym_self, - ACTIONS(170), 1, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(130), 1, sym__float, - STATE(209), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(232), 1, + STATE(163), 1, sym_expression, - STATE(362), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6983,59 +6629,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5322] = 23, + [5310] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(140), 1, + ACTIONS(106), 1, sym_identifier, - ACTIONS(142), 1, + ACTIONS(108), 1, sym_string, - ACTIONS(144), 1, + ACTIONS(110), 1, sym_self, - ACTIONS(146), 1, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(154), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(156), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(158), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(160), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(162), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(3), 1, - sym_expression, - STATE(86), 1, - sym_number, - STATE(87), 1, + STATE(130), 1, sym__float, - STATE(94), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(352), 1, + STATE(164), 1, + sym_expression, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(138), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7056,59 +6702,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5418] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [5406] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(130), 1, sym__float, - STATE(163), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(174), 1, + STATE(165), 1, sym_expression, - STATE(365), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7129,59 +6775,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5514] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [5502] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(130), 1, sym__float, - STATE(154), 1, - sym_expression, - STATE(163), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(365), 1, + STATE(166), 1, + sym_expression, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7202,59 +6848,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5610] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [5598] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(130), 1, sym__float, - STATE(155), 1, - sym_expression, - STATE(163), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(365), 1, + STATE(167), 1, + sym_expression, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7275,59 +6921,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5706] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [5694] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(130), 1, sym__float, - STATE(156), 1, - sym_expression, - STATE(163), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(365), 1, + STATE(168), 1, + sym_expression, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7348,59 +6994,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5802] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [5790] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(130), 1, sym__float, - STATE(157), 1, - sym_expression, - STATE(163), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(365), 1, + STATE(169), 1, + sym_expression, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7421,59 +7067,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5898] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [5886] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(130), 1, sym__float, - STATE(158), 1, - sym_expression, - STATE(163), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(365), 1, + STATE(171), 1, + sym_expression, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7494,59 +7140,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5994] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [5982] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(130), 1, sym__float, - STATE(159), 1, - sym_expression, - STATE(163), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(365), 1, + STATE(173), 1, + sym_expression, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7567,59 +7213,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6090] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [6078] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(130), 1, sym__float, - STATE(160), 1, - sym_expression, - STATE(163), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(365), 1, + STATE(176), 1, + sym_expression, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7640,59 +7286,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6186] = 23, + [6174] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, - sym_identifier, - ACTIONS(166), 1, - sym_string, - ACTIONS(168), 1, - sym_self, - ACTIONS(170), 1, - aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(76), 1, sym__float, - STATE(209), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(235), 1, + STATE(221), 1, sym_expression, - STATE(362), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7713,59 +7359,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6282] = 23, + [6270] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, + ACTIONS(106), 1, sym_identifier, - ACTIONS(166), 1, + ACTIONS(108), 1, sym_string, - ACTIONS(168), 1, + ACTIONS(110), 1, sym_self, - ACTIONS(170), 1, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(130), 1, sym__float, - STATE(209), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(236), 1, + STATE(177), 1, sym_expression, - STATE(362), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7786,59 +7432,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6378] = 23, + [6366] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, + ACTIONS(106), 1, sym_identifier, - ACTIONS(166), 1, + ACTIONS(108), 1, sym_string, - ACTIONS(168), 1, + ACTIONS(110), 1, sym_self, - ACTIONS(170), 1, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(130), 1, sym__float, - STATE(209), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(242), 1, + STATE(222), 1, sym_expression, - STATE(362), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7859,7 +7505,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6474] = 23, + [6462] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -7886,15 +7532,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(161), 1, - sym_expression, - STATE(163), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(365), 1, + STATE(223), 1, + sym_expression, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7906,12 +7552,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(184), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7932,59 +7578,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6570] = 23, + [6558] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, - sym_identifier, - ACTIONS(166), 1, - sym_string, - ACTIONS(168), 1, - sym_self, - ACTIONS(170), 1, - aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(180), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(182), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + STATE(76), 1, sym__float, - STATE(209), 1, + STATE(77), 1, + sym_number, + STATE(119), 1, sym_struct_definition, - STATE(240), 1, + STATE(226), 1, sym_expression, - STATE(362), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -8005,59 +7651,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6666] = 23, + [6654] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, - sym_identifier, - ACTIONS(166), 1, - sym_string, - ACTIONS(168), 1, - sym_self, - ACTIONS(170), 1, - aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, - anon_sym_if, - ACTIONS(180), 1, - anon_sym_let, - ACTIONS(182), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym__float, - STATE(205), 1, - sym_expression, - STATE(209), 1, + STATE(140), 1, + sym_number, + STATE(224), 1, sym_struct_definition, - STATE(362), 1, + STATE(227), 1, + sym_expression, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(174), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(176), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(244), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -8078,2834 +7724,109 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6762] = 23, + [6750] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(164), 1, - sym_identifier, - ACTIONS(166), 1, - sym_string, - ACTIONS(168), 1, - sym_self, - ACTIONS(170), 1, - aux_sym_base_ten_token1, - ACTIONS(172), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(178), 1, - anon_sym_if, - ACTIONS(180), 1, - anon_sym_let, - ACTIONS(182), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(184), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(186), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(193), 1, - sym_number, - STATE(194), 1, - sym__float, - STATE(209), 1, - sym_struct_definition, - STATE(269), 1, - sym_expression, - STATE(362), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(174), 2, - sym_true, - sym_false, - ACTIONS(176), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(351), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(244), 20, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_vector2, - sym_vector3, - sym_vector4, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_let_in, - sym_identity_path, - sym_self_path, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [6858] = 23, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, - anon_sym_LT_LPAREN, - ACTIONS(154), 1, - anon_sym_if, - ACTIONS(156), 1, - anon_sym_let, - ACTIONS(158), 1, - anon_sym_LPAREN, - ACTIONS(160), 1, - anon_sym_LBRACK, - ACTIONS(162), 1, - anon_sym_LT_LT_LT, - STATE(4), 1, - sym_expression, - STATE(86), 1, - sym_number, - STATE(87), 1, - sym__float, - STATE(94), 1, - sym_struct_definition, - STATE(352), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(150), 2, - sym_true, - sym_false, - ACTIONS(152), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(351), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(138), 20, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_vector2, - sym_vector3, - sym_vector4, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_let_in, - sym_identity_path, - sym_self_path, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [6954] = 23, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, + ACTIONS(98), 1, aux_sym_base_ten_token1, - ACTIONS(148), 1, - anon_sym_LT_LPAREN, - ACTIONS(154), 1, + ACTIONS(102), 1, anon_sym_if, - ACTIONS(156), 1, + ACTIONS(104), 1, anon_sym_let, - ACTIONS(158), 1, - anon_sym_LPAREN, - ACTIONS(160), 1, - anon_sym_LBRACK, - ACTIONS(162), 1, - anon_sym_LT_LT_LT, - STATE(2), 1, - sym_expression, - STATE(86), 1, - sym_number, - STATE(87), 1, + STATE(139), 1, sym__float, - STATE(94), 1, - sym_struct_definition, - STATE(352), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(150), 2, - sym_true, - sym_false, - ACTIONS(152), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(351), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(138), 20, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_vector2, - sym_vector3, - sym_vector4, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_let_in, - sym_identity_path, - sym_self_path, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [7050] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(19), 1, - anon_sym_LT_LPAREN, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_let, - ACTIONS(29), 1, - anon_sym_LPAREN, - ACTIONS(31), 1, - anon_sym_LBRACK, - ACTIONS(33), 1, - anon_sym_LT_LT_LT, STATE(140), 1, sym_number, - STATE(141), 1, - sym__float, - STATE(163), 1, - sym_struct_definition, - STATE(273), 1, + STATE(185), 1, sym_expression, - STATE(365), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(21), 2, - sym_true, - sym_false, - ACTIONS(23), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(351), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(184), 20, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_vector2, - sym_vector3, - sym_vector4, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_let_in, - sym_identity_path, - sym_self_path, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [7146] = 23, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(140), 1, - sym_identifier, - ACTIONS(142), 1, - sym_string, - ACTIONS(144), 1, - sym_self, - ACTIONS(146), 1, - aux_sym_base_ten_token1, - ACTIONS(148), 1, - anon_sym_LT_LPAREN, - ACTIONS(154), 1, - anon_sym_if, - ACTIONS(156), 1, - anon_sym_let, - ACTIONS(158), 1, - anon_sym_LPAREN, - ACTIONS(160), 1, - anon_sym_LBRACK, - ACTIONS(162), 1, - anon_sym_LT_LT_LT, - STATE(86), 1, - sym_number, - STATE(87), 1, - sym__float, - STATE(94), 1, + STATE(224), 1, sym_struct_definition, - STATE(117), 1, - sym_expression, - STATE(352), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(150), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(152), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, - sym_binary, - STATE(138), 20, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_vector2, - sym_vector3, - sym_vector4, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_let_in, - sym_identity_path, - sym_self_path, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [7242] = 4, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(192), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(188), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - anon_sym_DOT, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(190), 23, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - sym_unit_quote, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [7296] = 5, - ACTIONS(198), 1, - anon_sym_DOT, - STATE(89), 1, - aux_sym_identity_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(194), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(196), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [7350] = 4, - ACTIONS(204), 1, - anon_sym_DOT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(200), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(202), 23, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - sym_unit_quote, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [7402] = 5, - ACTIONS(210), 1, - sym_unit_quote, - STATE(122), 1, - sym__unit, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(206), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(208), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [7456] = 5, - ACTIONS(216), 1, - anon_sym_DOT, - STATE(88), 1, - aux_sym_identity_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(212), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(214), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [7510] = 5, - ACTIONS(198), 1, - anon_sym_DOT, - STATE(88), 1, - aux_sym_identity_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(219), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(221), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [7564] = 5, - ACTIONS(227), 1, - anon_sym_DOT, - STATE(90), 1, - aux_sym_self_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(223), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(225), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [7618] = 5, - ACTIONS(234), 1, - anon_sym_DOT, - STATE(90), 1, - aux_sym_self_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(230), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(232), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [7672] = 5, - ACTIONS(234), 1, - anon_sym_DOT, - STATE(91), 1, - aux_sym_self_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(236), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(238), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [7726] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(240), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - anon_sym_DOT, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(242), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [7775] = 4, - ACTIONS(248), 1, - anon_sym_DASH_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(244), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_DASH, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(246), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [7826] = 21, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(47), 1, - anon_sym_LT_LT, - ACTIONS(49), 1, - anon_sym_GT_GT, - ACTIONS(51), 1, - anon_sym_AMP, - ACTIONS(53), 1, - anon_sym_PIPE, - ACTIONS(55), 1, - anon_sym_CARET, - ACTIONS(61), 1, - anon_sym_AMP_AMP, - ACTIONS(63), 1, - anon_sym_PIPE_PIPE, - ACTIONS(65), 1, - anon_sym_DOT_DOT, - ACTIONS(67), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(57), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(254), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(59), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(252), 7, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(250), 9, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, - anon_sym_else, - anon_sym_let, - [7911] = 4, - ACTIONS(262), 1, - anon_sym_DASH_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(258), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_DASH, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(260), 21, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [7962] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(212), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - anon_sym_DOT, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(214), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [8011] = 21, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(47), 1, - anon_sym_LT_LT, - ACTIONS(49), 1, - anon_sym_GT_GT, - ACTIONS(51), 1, - anon_sym_AMP, - ACTIONS(53), 1, - anon_sym_PIPE, - ACTIONS(55), 1, - anon_sym_CARET, - ACTIONS(61), 1, - anon_sym_AMP_AMP, - ACTIONS(63), 1, - anon_sym_PIPE_PIPE, - ACTIONS(65), 1, - anon_sym_DOT_DOT, - ACTIONS(67), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(57), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(254), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(59), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(266), 7, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(264), 9, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, - anon_sym_else, - anon_sym_let, - [8096] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(268), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_DASH, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(270), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_DASH_GT, - anon_sym_LT_LT_LT, - [8145] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(272), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_DASH, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(274), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_DASH_GT, - anon_sym_LT_LT_LT, - [8194] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(188), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(190), 23, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - sym_unit_quote, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [8243] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(276), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(278), 23, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - sym_unit_quote, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [8292] = 9, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(280), 15, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(282), 18, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [8353] = 6, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(280), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(282), 20, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [8408] = 7, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(280), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(282), 19, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [8465] = 10, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(254), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(280), 15, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(282), 16, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [8528] = 12, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(47), 1, - anon_sym_LT_LT, - ACTIONS(49), 1, - anon_sym_GT_GT, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(254), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(280), 14, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(282), 15, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [8595] = 14, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(47), 1, - anon_sym_LT_LT, - ACTIONS(49), 1, - anon_sym_GT_GT, - ACTIONS(51), 1, - anon_sym_AMP, - ACTIONS(55), 1, - anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(254), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(280), 13, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(282), 14, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [8666] = 13, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(47), 1, - anon_sym_LT_LT, - ACTIONS(49), 1, - anon_sym_GT_GT, - ACTIONS(51), 1, - anon_sym_AMP, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(254), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(280), 13, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(282), 15, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [8735] = 15, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(47), 1, - anon_sym_LT_LT, - ACTIONS(49), 1, - anon_sym_GT_GT, - ACTIONS(51), 1, - anon_sym_AMP, - ACTIONS(53), 1, - anon_sym_PIPE, - ACTIONS(55), 1, - anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(254), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(280), 12, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(282), 14, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [8808] = 17, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(47), 1, - anon_sym_LT_LT, - ACTIONS(49), 1, - anon_sym_GT_GT, - ACTIONS(51), 1, - anon_sym_AMP, - ACTIONS(53), 1, - anon_sym_PIPE, - ACTIONS(55), 1, - anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(57), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(254), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(59), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(280), 10, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(282), 10, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [8885] = 18, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(47), 1, - anon_sym_LT_LT, - ACTIONS(49), 1, - anon_sym_GT_GT, - ACTIONS(51), 1, - anon_sym_AMP, - ACTIONS(53), 1, - anon_sym_PIPE, - ACTIONS(55), 1, - anon_sym_CARET, - ACTIONS(61), 1, - anon_sym_AMP_AMP, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(57), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(254), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(59), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(282), 9, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(280), 10, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - [8964] = 19, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(47), 1, - anon_sym_LT_LT, - ACTIONS(49), 1, - anon_sym_GT_GT, - ACTIONS(51), 1, - anon_sym_AMP, - ACTIONS(53), 1, - anon_sym_PIPE, - ACTIONS(55), 1, - anon_sym_CARET, - ACTIONS(61), 1, - anon_sym_AMP_AMP, - ACTIONS(63), 1, - anon_sym_PIPE_PIPE, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(57), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(254), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(59), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(282), 8, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(280), 10, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - [9045] = 21, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(47), 1, - anon_sym_LT_LT, - ACTIONS(49), 1, - anon_sym_GT_GT, - ACTIONS(51), 1, - anon_sym_AMP, - ACTIONS(53), 1, - anon_sym_PIPE, - ACTIONS(55), 1, - anon_sym_CARET, - ACTIONS(61), 1, - anon_sym_AMP_AMP, - ACTIONS(63), 1, - anon_sym_PIPE_PIPE, - ACTIONS(65), 1, - anon_sym_DOT_DOT, - ACTIONS(67), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(57), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(254), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(59), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(286), 7, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(284), 9, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, - anon_sym_else, - anon_sym_let, - [9130] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(288), 18, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_DASH, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(290), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_DASH_GT, - anon_sym_LT_LT_LT, - [9179] = 21, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(47), 1, - anon_sym_LT_LT, - ACTIONS(49), 1, - anon_sym_GT_GT, - ACTIONS(51), 1, - anon_sym_AMP, - ACTIONS(53), 1, - anon_sym_PIPE, - ACTIONS(55), 1, - anon_sym_CARET, - ACTIONS(61), 1, - anon_sym_AMP_AMP, - ACTIONS(63), 1, - anon_sym_PIPE_PIPE, - ACTIONS(65), 1, - anon_sym_DOT_DOT, - ACTIONS(67), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(57), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(254), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(59), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(294), 7, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(292), 9, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, - anon_sym_else, - anon_sym_let, - [9264] = 21, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(47), 1, - anon_sym_LT_LT, - ACTIONS(49), 1, - anon_sym_GT_GT, - ACTIONS(51), 1, - anon_sym_AMP, - ACTIONS(53), 1, - anon_sym_PIPE, - ACTIONS(55), 1, - anon_sym_CARET, - ACTIONS(61), 1, - anon_sym_AMP_AMP, - ACTIONS(63), 1, - anon_sym_PIPE_PIPE, - ACTIONS(65), 1, - anon_sym_DOT_DOT, - ACTIONS(67), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(57), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(254), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(59), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(298), 7, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - ACTIONS(296), 9, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_if, - anon_sym_else, - anon_sym_let, - [9349] = 10, - ACTIONS(35), 1, - anon_sym_COLON, - ACTIONS(41), 1, - anon_sym_STAR_STAR, - ACTIONS(45), 1, - anon_sym_SLASH_SLASH, - ACTIONS(250), 1, - anon_sym_else, - ACTIONS(256), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(43), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(280), 14, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - ACTIONS(282), 18, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [9412] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(300), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(302), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [9460] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(304), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(306), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [9508] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(308), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(310), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [9556] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(312), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(314), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [9604] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(316), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(318), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [9652] = 4, - ACTIONS(244), 1, - anon_sym_else, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(320), 16, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_let, - ACTIONS(322), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [9702] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(320), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(322), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [9750] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(258), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(260), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [9798] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(324), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(326), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [9846] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(328), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(330), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [9894] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(332), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(334), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [9942] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(336), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(338), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [9990] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(340), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(342), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [10038] = 3, + sym_binary, + STATE(120), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6846] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 17, + ACTIONS(134), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(132), 12, sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, anon_sym_else, - anon_sym_let, - ACTIONS(346), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, + anon_sym_EQ, + ACTIONS(130), 22, + ts_builtin_sym_end, + sym_unit_quote, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, - anon_sym_GT_GT, + anon_sym_LT_LT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -10914,43 +7835,41 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [10086] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [6893] = 6, + ACTIONS(138), 1, + sym_identifier, + ACTIONS(140), 1, + sym_unit_quote, + STATE(86), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(348), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(142), 10, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, anon_sym_else, - anon_sym_let, - ACTIONS(350), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, + anon_sym_EQ, + ACTIONS(136), 21, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, - anon_sym_GT_GT, + anon_sym_LT_LT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -10959,43 +7878,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [10134] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [6942] = 4, + ACTIONS(148), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(352), 17, + ACTIONS(146), 11, sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, anon_sym_else, - anon_sym_let, - ACTIONS(354), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, + anon_sym_EQ, + ACTIONS(144), 22, + ts_builtin_sym_end, + sym_unit_quote, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, - anon_sym_GT_GT, + anon_sym_LT_LT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -11004,42 +7919,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [10182] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [6987] = 5, + ACTIONS(152), 1, + anon_sym_DOT, + STATE(81), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(356), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(154), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(358), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, + anon_sym_EQ, + ACTIONS(150), 23, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -11049,43 +7959,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [10230] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + [7033] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(360), 17, + ACTIONS(158), 11, sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, anon_sym_else, - anon_sym_let, - ACTIONS(362), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, + anon_sym_EQ, + ACTIONS(156), 22, + ts_builtin_sym_end, + sym_unit_quote, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, - anon_sym_GT_GT, + anon_sym_LT_LT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -11094,42 +7999,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [10278] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [7075] = 5, + ACTIONS(162), 1, + anon_sym_DOT, + STATE(82), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(364), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(164), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(366), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, + anon_sym_EQ, + ACTIONS(160), 23, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -11139,42 +8039,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [10326] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + [7121] = 5, + ACTIONS(152), 1, + anon_sym_DOT, + STATE(83), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(244), 17, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_BANG, + ACTIONS(168), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_if, - anon_sym_else, - anon_sym_let, - ACTIONS(246), 22, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, + anon_sym_EQ, + ACTIONS(166), 23, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, + anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, @@ -11184,32 +8080,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [10374] = 4, + anon_sym_RPAREN, + anon_sym_RBRACK, + [7167] = 5, + ACTIONS(172), 1, + anon_sym_DOT, + STATE(82), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(192), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(188), 12, - sym_identifier, - anon_sym_DOT, + ACTIONS(175), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_else, anon_sym_EQ, - ACTIONS(190), 22, + ACTIONS(170), 23, ts_builtin_sym_end, - sym_unit_quote, anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, @@ -11217,6 +8112,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -11225,32 +8121,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, + anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [10421] = 4, - ACTIONS(368), 1, + [7213] = 5, + ACTIONS(179), 1, anon_sym_DOT, + STATE(83), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(200), 11, - sym_identifier, + ACTIONS(182), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_else, anon_sym_EQ, - ACTIONS(202), 22, + ACTIONS(177), 23, ts_builtin_sym_end, - sym_unit_quote, anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, @@ -11258,6 +8153,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -11266,33 +8162,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, + anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [10466] = 6, - ACTIONS(370), 1, - sym_identifier, - ACTIONS(372), 1, - sym_unit_quote, - STATE(153), 1, - sym__unit, + [7259] = 5, + ACTIONS(162), 1, + anon_sym_DOT, + STATE(80), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(206), 10, + ACTIONS(186), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_else, anon_sym_EQ, - ACTIONS(208), 21, + ACTIONS(184), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, @@ -11301,6 +8194,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -11309,16 +8203,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, + anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [10515] = 3, + [7305] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(276), 11, + ACTIONS(132), 11, sym_identifier, anon_sym_STAR, anon_sym_SLASH, @@ -11330,7 +8225,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(278), 22, + ACTIONS(130), 22, ts_builtin_sym_end, sym_unit_quote, anon_sym_COMMA, @@ -11353,12 +8248,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [10557] = 3, + [7347] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(188), 11, - sym_identifier, + ACTIONS(190), 9, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -11367,11 +8261,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_else, anon_sym_EQ, - ACTIONS(190), 22, + ACTIONS(188), 23, ts_builtin_sym_end, - sym_unit_quote, anon_sym_COMMA, anon_sym_COLON, anon_sym_DASH, @@ -11387,20 +8279,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, + anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [10599] = 5, - ACTIONS(374), 1, - anon_sym_DOT, - STATE(144), 1, - aux_sym_identity_path_repeat1, + [7388] = 4, + ACTIONS(196), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(212), 8, + ACTIONS(194), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -11409,11 +8302,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(214), 22, + ACTIONS(192), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -11427,20 +8319,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [10644] = 5, - ACTIONS(377), 1, - anon_sym_DOT, - STATE(149), 1, - aux_sym_identity_path_repeat1, + [7431] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(194), 8, + ACTIONS(200), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -11449,11 +8339,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(196), 22, + ACTIONS(198), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -11467,20 +8356,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [10689] = 5, - ACTIONS(379), 1, - anon_sym_DOT, - STATE(146), 1, - aux_sym_self_path_repeat1, + anon_sym_DASH_GT, + [7472] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(223), 8, + ACTIONS(204), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -11489,11 +8377,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(225), 22, + ACTIONS(202), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -11507,20 +8394,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [10734] = 5, - ACTIONS(382), 1, - anon_sym_DOT, - STATE(148), 1, - aux_sym_self_path_repeat1, + anon_sym_DASH_GT, + [7513] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(236), 8, + ACTIONS(175), 9, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -11529,7 +8415,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(238), 22, + ACTIONS(170), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, @@ -11547,29 +8433,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [10779] = 5, - ACTIONS(382), 1, - anon_sym_DOT, - STATE(146), 1, - aux_sym_self_path_repeat1, + [7554] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 8, + ACTIONS(208), 9, anon_sym_STAR, anon_sym_SLASH, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(232), 22, + ACTIONS(206), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, @@ -11578,7 +8462,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -11587,20 +8470,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [10824] = 5, - ACTIONS(377), 1, - anon_sym_DOT, - STATE(144), 1, - aux_sym_identity_path_repeat1, + anon_sym_GT_GT_GT, + [7595] = 6, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + STATE(111), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 8, + ACTIONS(214), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -11609,10 +8496,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(221), 22, + ACTIONS(210), 21, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11627,17 +8513,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [10869] = 3, + [7642] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(268), 9, - anon_sym_DASH, + ACTIONS(220), 9, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -11646,10 +8532,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(270), 22, + ACTIONS(218), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -11663,27 +8550,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_DASH_GT, - [10909] = 3, + [7683] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(212), 9, - anon_sym_DOT, + ACTIONS(224), 9, anon_sym_STAR, anon_sym_SLASH, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(214), 22, + ACTIONS(222), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, @@ -11692,7 +8579,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -11701,16 +8587,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [10949] = 3, + anon_sym_GT_GT_GT, + [7724] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(272), 9, + ACTIONS(228), 9, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -11720,7 +8608,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(274), 22, + ACTIONS(226), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, @@ -11737,27 +8625,77 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_DASH_GT, - [10989] = 3, + [7765] = 16, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_SLASH_SLASH, + ACTIONS(240), 1, + anon_sym_AMP, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + STATE(111), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(312), 9, + ACTIONS(214), 2, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(230), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(238), 2, + anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(248), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(210), 9, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [7831] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(252), 8, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(314), 22, + ACTIONS(250), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, @@ -11766,6 +8704,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -11774,38 +8713,95 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [11029] = 6, - ACTIONS(384), 1, + [7871] = 20, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - STATE(188), 1, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_SLASH_SLASH, + ACTIONS(240), 1, + anon_sym_AMP, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_DOT_DOT, + ACTIONS(262), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(264), 1, + anon_sym_EQ, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(230), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(234), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(238), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(248), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(254), 6, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [7945] = 9, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_SLASH_SLASH, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(280), 8, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(214), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(282), 20, + ACTIONS(210), 18, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -11820,19 +8816,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [11075] = 7, - ACTIONS(384), 1, - anon_sym_COLON, - ACTIONS(386), 1, - anon_sym_LPAREN, - ACTIONS(388), 1, - anon_sym_STAR_STAR, - STATE(188), 1, - sym_dictionary_construction, + [7997] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(280), 8, + ACTIONS(268), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -11841,11 +8829,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(282), 19, + ACTIONS(266), 23, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -11857,40 +8847,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [11123] = 10, - ACTIONS(384), 1, + [8037] = 7, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, - anon_sym_SLASH_SLASH, - STATE(188), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(214), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(280), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(282), 16, + ACTIONS(210), 19, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -11905,39 +8894,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [11177] = 11, - ACTIONS(384), 1, + [8085] = 10, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - STATE(188), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(280), 6, + ACTIONS(214), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(282), 14, + ACTIONS(210), 16, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -11950,42 +8938,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [11233] = 13, - ACTIONS(384), 1, + [8139] = 11, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, - anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - STATE(188), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(280), 5, + ACTIONS(214), 6, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(282), 13, + ACTIONS(210), 14, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -11997,41 +8983,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [11293] = 12, - ACTIONS(384), 1, + [8195] = 13, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(240), 1, anon_sym_AMP, - STATE(188), 1, + ACTIONS(244), 1, + anon_sym_CARET, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(280), 5, + ACTIONS(214), 5, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(282), 14, + ACTIONS(210), 13, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12043,43 +9030,41 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [11351] = 14, - ACTIONS(384), 1, + [8255] = 12, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, - anon_sym_PIPE, - STATE(188), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(280), 4, + ACTIONS(214), 5, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(282), 13, + ACTIONS(210), 14, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12091,49 +9076,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [11413] = 16, - ACTIONS(384), 1, + [8313] = 14, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(242), 1, anon_sym_PIPE, - STATE(188), 1, + ACTIONS(244), 1, + anon_sym_CARET, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(280), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(214), 4, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(210), 13, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(282), 9, - ts_builtin_sym_end, - anon_sym_COMMA, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, @@ -12141,140 +9124,156 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [11479] = 17, - ACTIONS(384), 1, + [8375] = 20, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, anon_sym_AMP_AMP, - STATE(188), 1, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_DOT_DOT, + ACTIONS(262), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(272), 1, + anon_sym_EQ, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(280), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(282), 8, + ACTIONS(270), 6, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [11547] = 4, - ACTIONS(410), 1, - anon_sym_DASH_GT, + [8449] = 17, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_SLASH_SLASH, + ACTIONS(240), 1, + anon_sym_AMP, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + STATE(111), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(244), 9, - anon_sym_DASH, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, + ACTIONS(214), 2, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(246), 21, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_COLON, + ACTIONS(230), 2, + anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(234), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(210), 8, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [11589] = 18, - ACTIONS(384), 1, + [8517] = 18, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - STATE(188), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(280), 2, + ACTIONS(214), 2, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(282), 7, + ACTIONS(210), 7, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_DOT_DOT_EQ, @@ -12282,21 +9281,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [11659] = 3, + [8587] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 9, + ACTIONS(194), 8, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(342), 22, + ACTIONS(192), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, @@ -12305,6 +9303,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -12313,18 +9312,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [11699] = 3, + [8627] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(240), 9, - anon_sym_DOT, + ACTIONS(276), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -12333,7 +9331,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(242), 22, + ACTIONS(274), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, @@ -12351,71 +9349,71 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [11739] = 20, - ACTIONS(292), 1, - anon_sym_EQ, - ACTIONS(384), 1, + [8667] = 20, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, + ACTIONS(260), 1, anon_sym_DOT_DOT, - ACTIONS(416), 1, + ACTIONS(262), 1, anon_sym_DOT_DOT_EQ, - STATE(188), 1, + ACTIONS(280), 1, + anon_sym_EQ, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(294), 6, + ACTIONS(278), 6, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [11813] = 3, + [8741] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(288), 9, - anon_sym_DASH, + ACTIONS(284), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -12424,10 +9422,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(290), 22, + ACTIONS(282), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -12441,251 +9440,239 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_DASH_GT, - [11853] = 20, - ACTIONS(296), 1, + [8781] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(288), 8, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(384), 1, + ACTIONS(286), 23, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON, - ACTIONS(386), 1, - anon_sym_LPAREN, - ACTIONS(388), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, - anon_sym_AMP, - ACTIONS(400), 1, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(402), 1, - anon_sym_PIPE, - ACTIONS(408), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, - anon_sym_DOT_DOT, - ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - STATE(188), 1, - sym_dictionary_construction, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8821] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(292), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(404), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(298), 6, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(290), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [11927] = 20, - ACTIONS(250), 1, - anon_sym_EQ, - ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(386), 1, - anon_sym_LPAREN, - ACTIONS(388), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, - anon_sym_AMP, - ACTIONS(400), 1, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(402), 1, - anon_sym_PIPE, - ACTIONS(408), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, - anon_sym_DOT_DOT, - ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - STATE(188), 1, - sym_dictionary_construction, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8861] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(296), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(404), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(252), 6, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(294), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [12001] = 20, - ACTIONS(284), 1, - anon_sym_EQ, - ACTIONS(384), 1, anon_sym_COLON, - ACTIONS(386), 1, - anon_sym_LPAREN, - ACTIONS(388), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(394), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, - anon_sym_AMP, - ACTIONS(400), 1, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(402), 1, - anon_sym_PIPE, - ACTIONS(408), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, - anon_sym_DOT_DOT, - ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - STATE(188), 1, - sym_dictionary_construction, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8901] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(300), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(404), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + anon_sym_DOT_DOT, + anon_sym_EQ, + ACTIONS(298), 23, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(286), 6, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [12075] = 20, - ACTIONS(264), 1, - anon_sym_EQ, - ACTIONS(384), 1, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8941] = 20, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, + ACTIONS(260), 1, anon_sym_DOT_DOT, - ACTIONS(416), 1, + ACTIONS(262), 1, anon_sym_DOT_DOT_EQ, - STATE(188), 1, + ACTIONS(304), 1, + anon_sym_EQ, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(266), 6, + ACTIONS(302), 6, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [12149] = 3, + [9015] = 4, + ACTIONS(310), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(304), 9, + ACTIONS(308), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(306), 22, + ACTIONS(306), 21, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -12699,36 +9686,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [12189] = 9, - ACTIONS(384), 1, - anon_sym_COLON, - ACTIONS(386), 1, - anon_sym_LPAREN, - ACTIONS(388), 1, - anon_sym_STAR_STAR, - ACTIONS(394), 1, - anon_sym_SLASH_SLASH, - STATE(188), 1, - sym_dictionary_construction, + [9057] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(392), 2, + ACTIONS(308), 8, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(280), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(282), 18, + ACTIONS(306), 23, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -12739,18 +9717,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [12241] = 4, - ACTIONS(262), 1, - anon_sym_DASH_GT, + [9097] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(258), 9, - anon_sym_DASH, + ACTIONS(314), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -12759,10 +9736,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(260), 21, + ACTIONS(312), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -12776,16 +9754,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [12283] = 3, + [9137] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(300), 8, + ACTIONS(318), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -12794,7 +9773,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(302), 22, + ACTIONS(316), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, @@ -12812,52 +9791,71 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [12322] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(316), 8, - anon_sym_STAR, - anon_sym_SLASH, + [9177] = 20, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_SLASH_SLASH, + ACTIONS(240), 1, anon_sym_AMP, + ACTIONS(242), 1, anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, anon_sym_DOT_DOT, + ACTIONS(262), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(322), 1, anon_sym_EQ, - ACTIONS(318), 22, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_COLON, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(234), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + ACTIONS(320), 6, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [12361] = 3, + [9251] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(364), 8, + ACTIONS(326), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -12866,7 +9864,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(366), 22, + ACTIONS(324), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, @@ -12884,16 +9882,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [12400] = 3, + [9291] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(328), 8, + ACTIONS(330), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -12902,7 +9901,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(330), 22, + ACTIONS(328), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, @@ -12920,21 +9919,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [12439] = 4, + [9331] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(192), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(188), 9, - sym_identifier, - anon_sym_DOT, + ACTIONS(334), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -12942,10 +9937,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(190), 19, - sym_unit_quote, + anon_sym_EQ, + ACTIONS(332), 23, + ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -12961,12 +9956,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - [12480] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + [9371] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 8, + ACTIONS(338), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -12975,7 +9975,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(326), 22, + ACTIONS(336), 23, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON, @@ -12993,16 +9993,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [12519] = 3, + [9411] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 8, + ACTIONS(134), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(132), 9, + sym_identifier, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13010,10 +10016,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(334), 22, - ts_builtin_sym_end, + ACTIONS(130), 19, + sym_unit_quote, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -13029,16 +10035,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [12558] = 3, + [9452] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(336), 8, + ACTIONS(134), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(132), 9, + sym_identifier, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13046,10 +10053,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(338), 22, - ts_builtin_sym_end, - anon_sym_COMMA, + ACTIONS(130), 18, + sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -13065,16 +10070,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, + anon_sym_then, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [12597] = 3, + [9492] = 5, + STATE(206), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(244), 8, + ACTIONS(340), 2, + sym_identifier, + sym_unit_quote, + ACTIONS(142), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13082,10 +10089,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(246), 22, - ts_builtin_sym_end, + ACTIONS(136), 18, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -13101,16 +10107,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [12636] = 3, + [9533] = 8, + ACTIONS(162), 1, + anon_sym_DOT, + ACTIONS(342), 1, + anon_sym_COLON, + ACTIONS(344), 1, + anon_sym_EQ, + STATE(80), 1, + aux_sym_identity_path_repeat1, + STATE(290), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(356), 8, + ACTIONS(186), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13118,11 +10130,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(358), 22, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_COLON, + ACTIONS(184), 16, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -13137,16 +10145,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, - anon_sym_RBRACK, - [12675] = 3, + [9580] = 4, + ACTIONS(346), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 8, + ACTIONS(146), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13154,10 +10161,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(346), 22, - ts_builtin_sym_end, + ACTIONS(144), 20, + sym_identifier, + sym_unit_quote, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -13173,16 +10181,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [12714] = 3, + [9619] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(352), 8, + ACTIONS(158), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13190,10 +10194,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(354), 22, - ts_builtin_sym_end, + ACTIONS(156), 20, + sym_identifier, + sym_unit_quote, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -13209,16 +10214,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [12753] = 3, + [9655] = 5, + ACTIONS(348), 1, + anon_sym_DOT, + STATE(141), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(320), 8, + ACTIONS(186), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13226,10 +10231,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(322), 22, - ts_builtin_sym_end, + ACTIONS(184), 18, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -13245,16 +10249,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [12792] = 3, + [9695] = 5, + ACTIONS(350), 1, + anon_sym_DOT, + STATE(135), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(348), 8, + ACTIONS(182), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13262,10 +10266,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(350), 22, - ts_builtin_sym_end, + ACTIONS(177), 18, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -13281,16 +10284,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [12831] = 3, + [9735] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(308), 8, + ACTIONS(132), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13298,10 +10297,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(310), 22, - ts_builtin_sym_end, + ACTIONS(130), 20, + sym_identifier, + sym_unit_quote, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -13317,16 +10317,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [12870] = 3, + [9771] = 5, + ACTIONS(353), 1, + anon_sym_DOT, + STATE(137), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(258), 8, + ACTIONS(175), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13334,10 +10334,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(260), 22, - ts_builtin_sym_end, + ACTIONS(170), 18, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -13353,16 +10352,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [12909] = 3, + [9811] = 5, + ACTIONS(356), 1, + anon_sym_DOT, + STATE(135), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(360), 8, + ACTIONS(168), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13370,10 +10369,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(362), 22, - ts_builtin_sym_end, + ACTIONS(166), 18, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -13389,18 +10387,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [12948] = 4, - ACTIONS(418), 1, - anon_sym_DOT, + [9851] = 6, + ACTIONS(138), 1, + sym_identifier, + ACTIONS(140), 1, + sym_unit_quote, + STATE(86), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(200), 7, + ACTIONS(142), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13408,11 +10406,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(202), 20, - sym_identifier, - sym_unit_quote, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(136), 17, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -13428,17 +10422,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_LPAREN, - [12987] = 5, - STATE(260), 1, - sym__unit, + [9893] = 4, + ACTIONS(358), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, + ACTIONS(146), 8, sym_identifier, - sym_unit_quote, - ACTIONS(206), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13446,9 +10439,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(208), 18, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(144), 18, + sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -13464,22 +10456,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_LPAREN, - [13028] = 8, - ACTIONS(377), 1, + [9931] = 5, + ACTIONS(348), 1, anon_sym_DOT, - ACTIONS(422), 1, - anon_sym_COLON, - ACTIONS(424), 1, - anon_sym_EQ, - STATE(149), 1, + STATE(137), 1, aux_sym_identity_path_repeat1, - STATE(343), 1, - sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(194), 7, + ACTIONS(164), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13487,7 +10474,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(196), 16, + ACTIONS(160), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -13503,62 +10493,65 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_RPAREN, - [13075] = 20, - ACTIONS(384), 1, + [9971] = 20, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, + ACTIONS(260), 1, anon_sym_DOT_DOT, - ACTIONS(416), 1, + ACTIONS(262), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(428), 1, + ACTIONS(362), 1, anon_sym_EQ, - STATE(188), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(426), 2, + ACTIONS(360), 2, anon_sym_COMMA, anon_sym_RPAREN, - ACTIONS(406), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13145] = 3, + [10041] = 5, + ACTIONS(356), 1, + anon_sym_DOT, + STATE(138), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(276), 7, + ACTIONS(154), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13566,9 +10559,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(278), 20, - sym_identifier, - sym_unit_quote, + ACTIONS(150), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -13587,11 +10578,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13181] = 3, + [10081] = 4, + ACTIONS(364), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(188), 7, + ACTIONS(308), 8, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13599,13 +10593,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(190), 20, - sym_identifier, - sym_unit_quote, + ACTIONS(306), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -13620,85 +10611,159 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13217] = 5, - ACTIONS(430), 1, - anon_sym_DOT, - STATE(202), 1, - aux_sym_identity_path_repeat1, + [10118] = 19, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_SLASH_SLASH, + ACTIONS(240), 1, + anon_sym_AMP, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_DOT_DOT, + ACTIONS(262), 1, + anon_sym_DOT_DOT_EQ, + STATE(111), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(194), 7, + ACTIONS(230), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(238), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(196), 18, + ACTIONS(366), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(248), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [10185] = 20, + ACTIONS(368), 1, anon_sym_COMMA, + ACTIONS(370), 1, anon_sym_RPAREN_GT, + ACTIONS(372), 1, anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(376), 1, anon_sym_STAR_STAR, + ACTIONS(380), 1, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(384), 1, + anon_sym_AMP, + ACTIONS(386), 1, + anon_sym_PIPE, + ACTIONS(388), 1, anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(394), 1, anon_sym_AMP_AMP, + ACTIONS(396), 1, anon_sym_PIPE_PIPE, + ACTIONS(398), 1, + anon_sym_DOT_DOT, + ACTIONS(400), 1, anon_sym_DOT_DOT_EQ, + ACTIONS(402), 1, anon_sym_LPAREN, - [13257] = 5, - ACTIONS(432), 1, - anon_sym_DOT, - STATE(201), 1, - aux_sym_self_path_repeat1, + STATE(213), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(236), 7, + ACTIONS(374), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(382), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(390), 2, anon_sym_GT, anon_sym_LT, + ACTIONS(392), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [10254] = 19, + ACTIONS(372), 1, + anon_sym_COLON, + ACTIONS(376), 1, + anon_sym_STAR_STAR, + ACTIONS(380), 1, + anon_sym_SLASH_SLASH, + ACTIONS(384), 1, + anon_sym_AMP, + ACTIONS(386), 1, + anon_sym_PIPE, + ACTIONS(388), 1, + anon_sym_CARET, + ACTIONS(394), 1, + anon_sym_AMP_AMP, + ACTIONS(396), 1, + anon_sym_PIPE_PIPE, + ACTIONS(398), 1, anon_sym_DOT_DOT, - ACTIONS(238), 18, + ACTIONS(400), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(402), 1, + anon_sym_LPAREN, + STATE(213), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(254), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + ACTIONS(374), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(378), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(382), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(390), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(392), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - [13297] = 5, - ACTIONS(432), 1, - anon_sym_DOT, - STATE(204), 1, - aux_sym_self_path_repeat1, + [10321] = 4, + ACTIONS(196), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 7, + ACTIONS(194), 8, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13706,11 +10771,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(232), 18, + ACTIONS(192), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -13725,50 +10789,61 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13337] = 5, - ACTIONS(430), 1, - anon_sym_DOT, - STATE(203), 1, - aux_sym_identity_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(219), 7, - anon_sym_STAR, - anon_sym_SLASH, + [10358] = 20, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_SLASH_SLASH, + ACTIONS(240), 1, anon_sym_AMP, + ACTIONS(242), 1, anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, anon_sym_DOT_DOT, - ACTIONS(221), 18, + ACTIONS(262), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(404), 1, anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON, + ACTIONS(406), 1, + anon_sym_RBRACK, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(234), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - [13377] = 5, - ACTIONS(434), 1, - anon_sym_DOT, - STATE(203), 1, - aux_sym_identity_path_repeat1, + [10427] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(212), 7, + ACTIONS(220), 8, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13776,7 +10851,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(214), 18, + ACTIONS(218), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -13795,15 +10870,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13417] = 5, - ACTIONS(437), 1, - anon_sym_DOT, - STATE(204), 1, - aux_sym_self_path_repeat1, + [10462] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(223), 7, + ACTIONS(132), 8, + sym_identifier, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -13811,9 +10883,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(225), 18, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(130), 18, + sym_unit_quote, anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -13829,210 +10900,130 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_LPAREN, - [13457] = 20, - ACTIONS(440), 1, - anon_sym_COMMA, - ACTIONS(442), 1, - anon_sym_RPAREN_GT, - ACTIONS(444), 1, - anon_sym_COLON, - ACTIONS(448), 1, - anon_sym_STAR_STAR, - ACTIONS(452), 1, - anon_sym_SLASH_SLASH, - ACTIONS(456), 1, - anon_sym_AMP, - ACTIONS(458), 1, - anon_sym_PIPE, - ACTIONS(460), 1, - anon_sym_CARET, - ACTIONS(466), 1, - anon_sym_AMP_AMP, - ACTIONS(468), 1, - anon_sym_PIPE_PIPE, - ACTIONS(470), 1, - anon_sym_DOT_DOT, - ACTIONS(472), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, - anon_sym_LPAREN, - STATE(252), 1, - sym_dictionary_construction, + [10497] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(158), 8, + sym_identifier, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(462), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(464), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [13526] = 20, - ACTIONS(130), 1, - anon_sym_RBRACK, - ACTIONS(384), 1, - anon_sym_COLON, - ACTIONS(386), 1, - anon_sym_LPAREN, - ACTIONS(388), 1, - anon_sym_STAR_STAR, - ACTIONS(394), 1, - anon_sym_SLASH_SLASH, - ACTIONS(398), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, anon_sym_PIPE, - ACTIONS(408), 1, - anon_sym_AMP_AMP, - ACTIONS(412), 1, - anon_sym_PIPE_PIPE, - ACTIONS(414), 1, + anon_sym_GT, + anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(416), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(476), 1, - anon_sym_COMMA, - STATE(188), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(390), 2, + ACTIONS(156), 18, + sym_unit_quote, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(396), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(406), 4, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13595] = 19, - ACTIONS(384), 1, - anon_sym_COLON, - ACTIONS(386), 1, - anon_sym_LPAREN, - ACTIONS(388), 1, - anon_sym_STAR_STAR, - ACTIONS(394), 1, - anon_sym_SLASH_SLASH, - ACTIONS(398), 1, - anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, - anon_sym_PIPE, - ACTIONS(408), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, - anon_sym_DOT_DOT, - ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - STATE(188), 1, + anon_sym_then, + anon_sym_LPAREN, + [10532] = 6, + ACTIONS(372), 1, + anon_sym_COLON, + ACTIONS(402), 1, + anon_sym_LPAREN, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(214), 7, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(404), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(478), 2, + anon_sym_DOT_DOT, + ACTIONS(210), 16, anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(406), 4, + anon_sym_RPAREN_GT, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13662] = 20, - ACTIONS(444), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + [10573] = 20, + ACTIONS(372), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(376), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(380), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(384), 1, anon_sym_AMP, - ACTIONS(458), 1, + ACTIONS(386), 1, anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(388), 1, anon_sym_CARET, - ACTIONS(466), 1, + ACTIONS(394), 1, anon_sym_AMP_AMP, - ACTIONS(468), 1, + ACTIONS(396), 1, anon_sym_PIPE_PIPE, - ACTIONS(470), 1, + ACTIONS(398), 1, anon_sym_DOT_DOT, - ACTIONS(472), 1, + ACTIONS(400), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, + ACTIONS(402), 1, anon_sym_LPAREN, - ACTIONS(480), 1, + ACTIONS(408), 1, anon_sym_COMMA, - ACTIONS(482), 1, + ACTIONS(410), 1, anon_sym_RPAREN_GT, - STATE(252), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(374), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(382), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(390), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(464), 4, + ACTIONS(392), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13731] = 4, - ACTIONS(484), 1, - anon_sym_DASH_GT, + [10642] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(244), 8, - anon_sym_DASH, + ACTIONS(175), 8, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -14040,10 +11031,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(246), 17, + ACTIONS(170), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -14058,61 +11050,59 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13768] = 19, - ACTIONS(444), 1, + [10677] = 19, + ACTIONS(372), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(376), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(380), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(384), 1, anon_sym_AMP, - ACTIONS(458), 1, + ACTIONS(386), 1, anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(388), 1, anon_sym_CARET, - ACTIONS(466), 1, + ACTIONS(394), 1, anon_sym_AMP_AMP, - ACTIONS(468), 1, + ACTIONS(396), 1, anon_sym_PIPE_PIPE, - ACTIONS(470), 1, + ACTIONS(398), 1, anon_sym_DOT_DOT, - ACTIONS(472), 1, + ACTIONS(400), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, + ACTIONS(402), 1, anon_sym_LPAREN, - STATE(252), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(252), 2, + ACTIONS(270), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - ACTIONS(446), 2, + ACTIONS(374), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(382), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(390), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(464), 4, + ACTIONS(392), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13835] = 4, - ACTIONS(262), 1, - anon_sym_DASH_GT, + [10744] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(258), 8, + ACTIONS(200), 8, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -14121,7 +11111,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(260), 17, + ACTIONS(198), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -14139,61 +11129,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13872] = 20, - ACTIONS(384), 1, - anon_sym_COLON, - ACTIONS(386), 1, - anon_sym_LPAREN, - ACTIONS(388), 1, - anon_sym_STAR_STAR, - ACTIONS(394), 1, - anon_sym_SLASH_SLASH, - ACTIONS(398), 1, - anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, - anon_sym_PIPE, - ACTIONS(408), 1, - anon_sym_AMP_AMP, - ACTIONS(412), 1, - anon_sym_PIPE_PIPE, - ACTIONS(414), 1, - anon_sym_DOT_DOT, - ACTIONS(416), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(476), 1, - anon_sym_COMMA, - ACTIONS(486), 1, - anon_sym_RBRACK, - STATE(188), 1, - sym_dictionary_construction, + anon_sym_DASH_GT, + [10779] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(204), 8, anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(392), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(396), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(404), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(406), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [13941] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(212), 8, - anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -14201,11 +11143,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(214), 18, + ACTIONS(202), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -14220,27 +11161,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13976] = 3, + anon_sym_DASH_GT, + [10814] = 9, + ACTIONS(372), 1, + anon_sym_COLON, + ACTIONS(376), 1, + anon_sym_STAR_STAR, + ACTIONS(380), 1, + anon_sym_SLASH_SLASH, + ACTIONS(402), 1, + anon_sym_LPAREN, + STATE(213), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(240), 8, - anon_sym_DOT, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(214), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(242), 18, + ACTIONS(210), 14, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -14251,78 +11200,169 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - [14011] = 19, - ACTIONS(444), 1, + [10861] = 20, + ACTIONS(45), 1, + anon_sym_RBRACK, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(458), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(466), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(468), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(470), 1, + ACTIONS(260), 1, anon_sym_DOT_DOT, - ACTIONS(472), 1, + ACTIONS(262), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, - anon_sym_LPAREN, - STATE(252), 1, + ACTIONS(404), 1, + anon_sym_COMMA, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(266), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(446), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(464), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14078] = 3, + [10930] = 10, + ACTIONS(372), 1, + anon_sym_COLON, + ACTIONS(376), 1, + anon_sym_STAR_STAR, + ACTIONS(380), 1, + anon_sym_SLASH_SLASH, + ACTIONS(402), 1, + anon_sym_LPAREN, + STATE(213), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(268), 8, + ACTIONS(374), 2, anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(214), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(270), 18, + ACTIONS(210), 12, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + [10979] = 11, + ACTIONS(372), 1, anon_sym_COLON, - anon_sym_PLUS, + ACTIONS(376), 1, anon_sym_STAR_STAR, + ACTIONS(380), 1, anon_sym_SLASH_SLASH, + ACTIONS(402), 1, + anon_sym_LPAREN, + STATE(213), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(374), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(378), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(382), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(214), 5, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(210), 10, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + [11030] = 13, + ACTIONS(372), 1, + anon_sym_COLON, + ACTIONS(376), 1, + anon_sym_STAR_STAR, + ACTIONS(380), 1, + anon_sym_SLASH_SLASH, + ACTIONS(384), 1, + anon_sym_AMP, + ACTIONS(388), 1, anon_sym_CARET, + ACTIONS(402), 1, + anon_sym_LPAREN, + STATE(213), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(374), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(378), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(382), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(214), 4, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(210), 9, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -14330,30 +11370,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + [11085] = 12, + ACTIONS(372), 1, + anon_sym_COLON, + ACTIONS(376), 1, + anon_sym_STAR_STAR, + ACTIONS(380), 1, + anon_sym_SLASH_SLASH, + ACTIONS(384), 1, + anon_sym_AMP, + ACTIONS(402), 1, anon_sym_LPAREN, - anon_sym_DASH_GT, - [14113] = 3, + STATE(213), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(272), 8, + ACTIONS(374), 2, anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, + ACTIONS(382), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(214), 4, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(274), 18, + ACTIONS(210), 10, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -14362,39 +11411,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_DASH_GT, - [14148] = 9, - ACTIONS(444), 1, + [11138] = 14, + ACTIONS(372), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(376), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(380), 1, anon_sym_SLASH_SLASH, - ACTIONS(474), 1, + ACTIONS(384), 1, + anon_sym_AMP, + ACTIONS(386), 1, + anon_sym_PIPE, + ACTIONS(388), 1, + anon_sym_CARET, + ACTIONS(402), 1, anon_sym_LPAREN, - STATE(252), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(450), 2, + ACTIONS(374), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(280), 5, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(382), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(214), 3, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(282), 14, + ACTIONS(210), 9, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -14402,158 +11454,214 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - [14195] = 6, - ACTIONS(444), 1, + [11195] = 16, + ACTIONS(214), 1, + anon_sym_DOT_DOT, + ACTIONS(372), 1, anon_sym_COLON, - ACTIONS(474), 1, + ACTIONS(376), 1, + anon_sym_STAR_STAR, + ACTIONS(380), 1, + anon_sym_SLASH_SLASH, + ACTIONS(384), 1, + anon_sym_AMP, + ACTIONS(386), 1, + anon_sym_PIPE, + ACTIONS(388), 1, + anon_sym_CARET, + ACTIONS(402), 1, anon_sym_LPAREN, - STATE(252), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(280), 7, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(282), 16, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(374), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(378), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(382), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(390), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(392), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(210), 5, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - [14236] = 7, - ACTIONS(444), 1, + [11256] = 17, + ACTIONS(214), 1, + anon_sym_DOT_DOT, + ACTIONS(372), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(376), 1, anon_sym_STAR_STAR, - ACTIONS(474), 1, + ACTIONS(380), 1, + anon_sym_SLASH_SLASH, + ACTIONS(384), 1, + anon_sym_AMP, + ACTIONS(386), 1, + anon_sym_PIPE, + ACTIONS(388), 1, + anon_sym_CARET, + ACTIONS(394), 1, + anon_sym_AMP_AMP, + ACTIONS(402), 1, anon_sym_LPAREN, - STATE(252), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(280), 7, + ACTIONS(374), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(382), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(390), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(282), 15, + ACTIONS(210), 4, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + ACTIONS(392), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [14279] = 20, - ACTIONS(444), 1, + [11319] = 18, + ACTIONS(214), 1, + anon_sym_DOT_DOT, + ACTIONS(372), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(376), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(380), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(384), 1, anon_sym_AMP, - ACTIONS(458), 1, + ACTIONS(386), 1, anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(388), 1, anon_sym_CARET, - ACTIONS(466), 1, + ACTIONS(394), 1, anon_sym_AMP_AMP, - ACTIONS(468), 1, + ACTIONS(396), 1, anon_sym_PIPE_PIPE, - ACTIONS(470), 1, - anon_sym_DOT_DOT, - ACTIONS(472), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, + ACTIONS(402), 1, anon_sym_LPAREN, - ACTIONS(488), 1, - anon_sym_COMMA, - ACTIONS(490), 1, - anon_sym_RPAREN_GT, - STATE(252), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(374), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(382), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(390), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(464), 4, + ACTIONS(210), 3, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_DOT_DOT_EQ, + ACTIONS(392), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14348] = 11, - ACTIONS(444), 1, + [11384] = 19, + ACTIONS(372), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(376), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(380), 1, anon_sym_SLASH_SLASH, - ACTIONS(474), 1, + ACTIONS(384), 1, + anon_sym_AMP, + ACTIONS(386), 1, + anon_sym_PIPE, + ACTIONS(388), 1, + anon_sym_CARET, + ACTIONS(394), 1, + anon_sym_AMP_AMP, + ACTIONS(396), 1, + anon_sym_PIPE_PIPE, + ACTIONS(398), 1, + anon_sym_DOT_DOT, + ACTIONS(400), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(402), 1, anon_sym_LPAREN, - STATE(252), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(278), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(374), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(382), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(280), 5, + ACTIONS(390), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(392), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [11451] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(228), 8, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(282), 10, + ACTIONS(226), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -14562,324 +11670,389 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - [14399] = 13, - ACTIONS(444), 1, + anon_sym_LPAREN, + anon_sym_DASH_GT, + [11486] = 19, + ACTIONS(372), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(376), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(380), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(384), 1, anon_sym_AMP, - ACTIONS(460), 1, + ACTIONS(386), 1, + anon_sym_PIPE, + ACTIONS(388), 1, anon_sym_CARET, - ACTIONS(474), 1, + ACTIONS(394), 1, + anon_sym_AMP_AMP, + ACTIONS(396), 1, + anon_sym_PIPE_PIPE, + ACTIONS(398), 1, + anon_sym_DOT_DOT, + ACTIONS(400), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(402), 1, anon_sym_LPAREN, - STATE(252), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(302), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(374), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(382), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(280), 4, - anon_sym_PIPE, + ACTIONS(390), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(282), 9, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(392), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [14454] = 12, - ACTIONS(444), 1, + [11553] = 19, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(474), 1, - anon_sym_LPAREN, - STATE(252), 1, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_DOT_DOT, + ACTIONS(262), 1, + anon_sym_DOT_DOT_EQ, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(280), 4, - anon_sym_PIPE, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(282), 10, + ACTIONS(412), 2, anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_CARET, + anon_sym_RPAREN, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [14507] = 14, - ACTIONS(444), 1, + [11620] = 19, + ACTIONS(372), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(376), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(380), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(384), 1, anon_sym_AMP, - ACTIONS(458), 1, + ACTIONS(386), 1, anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(388), 1, anon_sym_CARET, - ACTIONS(474), 1, + ACTIONS(394), 1, + anon_sym_AMP_AMP, + ACTIONS(396), 1, + anon_sym_PIPE_PIPE, + ACTIONS(398), 1, + anon_sym_DOT_DOT, + ACTIONS(400), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(402), 1, anon_sym_LPAREN, - STATE(252), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(320), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(374), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(382), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(280), 3, + ACTIONS(390), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(282), 9, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(392), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [14564] = 16, - ACTIONS(280), 1, - anon_sym_DOT_DOT, - ACTIONS(444), 1, + [11687] = 20, + ACTIONS(94), 1, + anon_sym_RBRACK, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(458), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(474), 1, - anon_sym_LPAREN, - STATE(252), 1, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_DOT_DOT, + ACTIONS(262), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(404), 1, + anon_sym_COMMA, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(464), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(282), 5, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [14625] = 17, - ACTIONS(280), 1, - anon_sym_DOT_DOT, - ACTIONS(444), 1, + [11756] = 20, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(458), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(466), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(474), 1, - anon_sym_LPAREN, - STATE(252), 1, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_DOT_DOT, + ACTIONS(262), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(404), 1, + anon_sym_COMMA, + ACTIONS(414), 1, + anon_sym_RBRACK, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(282), 4, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - ACTIONS(464), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14688] = 18, - ACTIONS(280), 1, - anon_sym_DOT_DOT, - ACTIONS(444), 1, + [11825] = 20, + ACTIONS(372), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(376), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(380), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(384), 1, anon_sym_AMP, - ACTIONS(458), 1, + ACTIONS(386), 1, anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(388), 1, anon_sym_CARET, - ACTIONS(466), 1, + ACTIONS(394), 1, anon_sym_AMP_AMP, - ACTIONS(468), 1, + ACTIONS(396), 1, anon_sym_PIPE_PIPE, - ACTIONS(474), 1, + ACTIONS(398), 1, + anon_sym_DOT_DOT, + ACTIONS(400), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(402), 1, anon_sym_LPAREN, - STATE(252), 1, + ACTIONS(416), 1, + anon_sym_COMMA, + ACTIONS(418), 1, + anon_sym_RPAREN_GT, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(374), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(382), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(390), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(282), 3, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_DOT_DOT_EQ, - ACTIONS(464), 4, + ACTIONS(392), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14753] = 19, - ACTIONS(444), 1, + [11894] = 20, + ACTIONS(372), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(376), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(380), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(384), 1, anon_sym_AMP, - ACTIONS(458), 1, + ACTIONS(386), 1, anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(388), 1, anon_sym_CARET, - ACTIONS(466), 1, + ACTIONS(394), 1, anon_sym_AMP_AMP, - ACTIONS(468), 1, + ACTIONS(396), 1, anon_sym_PIPE_PIPE, - ACTIONS(470), 1, + ACTIONS(398), 1, anon_sym_DOT_DOT, - ACTIONS(472), 1, + ACTIONS(400), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, + ACTIONS(402), 1, anon_sym_LPAREN, - STATE(252), 1, + ACTIONS(420), 1, + anon_sym_COMMA, + ACTIONS(422), 1, + anon_sym_RPAREN_GT, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(286), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(446), 2, + ACTIONS(374), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(382), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(390), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(464), 4, + ACTIONS(392), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14820] = 3, + [11963] = 7, + ACTIONS(372), 1, + anon_sym_COLON, + ACTIONS(376), 1, + anon_sym_STAR_STAR, + ACTIONS(402), 1, + anon_sym_LPAREN, + STATE(213), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(288), 8, + ACTIONS(214), 7, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(210), 15, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + [12006] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(296), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -14887,10 +12060,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(290), 18, + ACTIONS(294), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -14905,523 +12079,511 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_DASH_GT, - [14855] = 19, - ACTIONS(444), 1, + [12040] = 19, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(426), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(430), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(434), 1, anon_sym_AMP, - ACTIONS(458), 1, + ACTIONS(436), 1, anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(438), 1, anon_sym_CARET, - ACTIONS(466), 1, + ACTIONS(444), 1, anon_sym_AMP_AMP, - ACTIONS(468), 1, + ACTIONS(446), 1, anon_sym_PIPE_PIPE, - ACTIONS(470), 1, + ACTIONS(448), 1, anon_sym_DOT_DOT, - ACTIONS(472), 1, + ACTIONS(450), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, - anon_sym_LPAREN, - STATE(252), 1, + ACTIONS(452), 1, + anon_sym_then, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(446), 2, + ACTIONS(424), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(428), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(432), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(440), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(464), 4, + ACTIONS(442), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14922] = 19, - ACTIONS(444), 1, + [12106] = 9, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(426), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(430), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(428), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(214), 5, anon_sym_AMP, - ACTIONS(458), 1, anon_sym_PIPE, - ACTIONS(460), 1, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(210), 13, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(466), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(468), 1, anon_sym_PIPE_PIPE, - ACTIONS(470), 1, - anon_sym_DOT_DOT, - ACTIONS(472), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, - anon_sym_LPAREN, - STATE(252), 1, - sym_dictionary_construction, + anon_sym_then, + [12152] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(298), 2, + ACTIONS(292), 7, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(290), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - ACTIONS(446), 2, + anon_sym_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(454), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(464), 4, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14989] = 20, - ACTIONS(132), 1, - anon_sym_RBRACK, - ACTIONS(384), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_LPAREN, + [12186] = 7, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(426), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, - anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(214), 7, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_AMP, - ACTIONS(400), 1, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_DOT_DOT, + ACTIONS(210), 14, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, - ACTIONS(402), 1, - anon_sym_PIPE, - ACTIONS(408), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(412), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, - anon_sym_DOT_DOT, - ACTIONS(416), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(476), 1, - anon_sym_COMMA, - STATE(188), 1, + anon_sym_then, + [12228] = 10, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(426), 1, + anon_sym_STAR_STAR, + ACTIONS(430), 1, + anon_sym_SLASH_SLASH, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(424), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(428), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(214), 5, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + anon_sym_DOT_DOT, + ACTIONS(210), 11, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15058] = 20, - ACTIONS(384), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_then, + [12276] = 11, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(426), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(430), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, - anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, - anon_sym_PIPE, - ACTIONS(408), 1, - anon_sym_AMP_AMP, - ACTIONS(412), 1, - anon_sym_PIPE_PIPE, - ACTIONS(414), 1, - anon_sym_DOT_DOT, - ACTIONS(416), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(476), 1, - anon_sym_COMMA, - ACTIONS(492), 1, - anon_sym_RBRACK, - STATE(188), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(424), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(428), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(432), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(214), 5, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + anon_sym_DOT_DOT, + ACTIONS(210), 9, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15127] = 20, - ACTIONS(444), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_then, + [12326] = 13, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(426), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(430), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(434), 1, anon_sym_AMP, - ACTIONS(458), 1, - anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(438), 1, anon_sym_CARET, - ACTIONS(466), 1, - anon_sym_AMP_AMP, - ACTIONS(468), 1, - anon_sym_PIPE_PIPE, - ACTIONS(470), 1, - anon_sym_DOT_DOT, - ACTIONS(472), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, - anon_sym_LPAREN, - ACTIONS(494), 1, - anon_sym_COMMA, - ACTIONS(496), 1, - anon_sym_RPAREN_GT, - STATE(252), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(424), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(428), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(432), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(214), 4, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(464), 4, + anon_sym_DOT_DOT, + ACTIONS(210), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15196] = 20, - ACTIONS(444), 1, - anon_sym_COLON, - ACTIONS(448), 1, - anon_sym_STAR_STAR, - ACTIONS(452), 1, - anon_sym_SLASH_SLASH, - ACTIONS(456), 1, - anon_sym_AMP, - ACTIONS(458), 1, - anon_sym_PIPE, - ACTIONS(460), 1, - anon_sym_CARET, - ACTIONS(466), 1, anon_sym_AMP_AMP, - ACTIONS(468), 1, anon_sym_PIPE_PIPE, - ACTIONS(470), 1, - anon_sym_DOT_DOT, - ACTIONS(472), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, + anon_sym_then, + [12380] = 12, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(498), 1, - anon_sym_COMMA, - ACTIONS(500), 1, - anon_sym_RPAREN_GT, - STATE(252), 1, + ACTIONS(426), 1, + anon_sym_STAR_STAR, + ACTIONS(430), 1, + anon_sym_SLASH_SLASH, + ACTIONS(434), 1, + anon_sym_AMP, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(424), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(428), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(432), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(214), 4, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(464), 4, + anon_sym_DOT_DOT, + ACTIONS(210), 9, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15265] = 19, - ACTIONS(384), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_then, + [12432] = 14, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(426), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(430), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(434), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(436), 1, anon_sym_PIPE, - ACTIONS(408), 1, - anon_sym_AMP_AMP, - ACTIONS(412), 1, - anon_sym_PIPE_PIPE, - ACTIONS(414), 1, - anon_sym_DOT_DOT, - ACTIONS(416), 1, - anon_sym_DOT_DOT_EQ, - STATE(188), 1, + ACTIONS(438), 1, + anon_sym_CARET, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(424), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(428), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(432), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(214), 3, anon_sym_GT, anon_sym_LT, - ACTIONS(502), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(406), 4, + anon_sym_DOT_DOT, + ACTIONS(210), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15332] = 20, - ACTIONS(138), 1, - anon_sym_RBRACK, - ACTIONS(384), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_then, + [12488] = 16, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(214), 1, + anon_sym_DOT_DOT, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(426), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(430), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(434), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(436), 1, anon_sym_PIPE, - ACTIONS(408), 1, - anon_sym_AMP_AMP, - ACTIONS(412), 1, - anon_sym_PIPE_PIPE, - ACTIONS(414), 1, - anon_sym_DOT_DOT, - ACTIONS(416), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(476), 1, - anon_sym_COMMA, - STATE(188), 1, + ACTIONS(438), 1, + anon_sym_CARET, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(424), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(428), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(432), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(440), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + ACTIONS(210), 4, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_then, + ACTIONS(442), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15401] = 20, - ACTIONS(384), 1, + [12548] = 17, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(214), 1, + anon_sym_DOT_DOT, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(426), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(430), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(434), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(436), 1, anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(438), 1, + anon_sym_CARET, + ACTIONS(444), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, - anon_sym_PIPE_PIPE, - ACTIONS(414), 1, - anon_sym_DOT_DOT, - ACTIONS(416), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(476), 1, - anon_sym_COMMA, - ACTIONS(504), 1, - anon_sym_RBRACK, - STATE(188), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(424), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(428), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(432), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(440), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + ACTIONS(210), 3, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_then, + ACTIONS(442), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15470] = 20, - ACTIONS(444), 1, + [12610] = 18, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(214), 1, + anon_sym_DOT_DOT, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(426), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(430), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(434), 1, anon_sym_AMP, - ACTIONS(458), 1, + ACTIONS(436), 1, anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(438), 1, anon_sym_CARET, - ACTIONS(466), 1, + ACTIONS(444), 1, anon_sym_AMP_AMP, - ACTIONS(468), 1, + ACTIONS(446), 1, anon_sym_PIPE_PIPE, - ACTIONS(470), 1, - anon_sym_DOT_DOT, - ACTIONS(472), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, - anon_sym_LPAREN, - ACTIONS(506), 1, - anon_sym_COMMA, - ACTIONS(508), 1, - anon_sym_RPAREN_GT, - STATE(252), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(210), 2, + anon_sym_DOT_DOT_EQ, + anon_sym_then, + ACTIONS(424), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(428), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(432), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(440), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(464), 4, + ACTIONS(442), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15539] = 10, - ACTIONS(444), 1, - anon_sym_COLON, - ACTIONS(448), 1, - anon_sym_STAR_STAR, - ACTIONS(452), 1, - anon_sym_SLASH_SLASH, - ACTIONS(474), 1, - anon_sym_LPAREN, - STATE(252), 1, - sym_dictionary_construction, + [12674] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(194), 7, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(280), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(282), 12, + ACTIONS(192), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -15432,58 +12594,59 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - [15588] = 19, - ACTIONS(444), 1, + anon_sym_LPAREN, + [12708] = 19, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(278), 1, + anon_sym_then, + ACTIONS(426), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(430), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(434), 1, anon_sym_AMP, - ACTIONS(458), 1, + ACTIONS(436), 1, anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(438), 1, anon_sym_CARET, - ACTIONS(466), 1, + ACTIONS(444), 1, anon_sym_AMP_AMP, - ACTIONS(468), 1, + ACTIONS(446), 1, anon_sym_PIPE_PIPE, - ACTIONS(470), 1, + ACTIONS(448), 1, anon_sym_DOT_DOT, - ACTIONS(472), 1, + ACTIONS(450), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, - anon_sym_LPAREN, - ACTIONS(510), 1, - anon_sym_RPAREN_GT, - STATE(252), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(424), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(428), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(432), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(440), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(464), 4, + ACTIONS(442), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15654] = 3, + [12774] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(316), 7, + ACTIONS(288), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -15491,7 +12654,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(318), 18, + ACTIONS(286), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -15510,11 +12673,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [15688] = 3, + [12808] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(244), 7, + ACTIONS(300), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -15522,7 +12685,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(246), 18, + ACTIONS(298), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -15541,58 +12704,58 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [15722] = 19, - ACTIONS(444), 1, + [12842] = 19, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(302), 1, + anon_sym_then, + ACTIONS(426), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(430), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(434), 1, anon_sym_AMP, - ACTIONS(458), 1, + ACTIONS(436), 1, anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(438), 1, anon_sym_CARET, - ACTIONS(466), 1, + ACTIONS(444), 1, anon_sym_AMP_AMP, - ACTIONS(468), 1, + ACTIONS(446), 1, anon_sym_PIPE_PIPE, - ACTIONS(470), 1, + ACTIONS(448), 1, anon_sym_DOT_DOT, - ACTIONS(472), 1, + ACTIONS(450), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, - anon_sym_LPAREN, - ACTIONS(512), 1, - anon_sym_RPAREN_GT, - STATE(252), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(424), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(428), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(432), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(440), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(464), 4, + ACTIONS(442), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15788] = 3, + [12908] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(352), 7, + ACTIONS(318), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -15600,7 +12763,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(354), 18, + ACTIONS(316), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -15619,11 +12782,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [15822] = 3, + [12942] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 7, + ACTIONS(314), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -15631,7 +12794,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(326), 18, + ACTIONS(312), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -15650,11 +12813,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [15856] = 3, + [12976] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(258), 7, + ACTIONS(326), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -15662,7 +12825,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(260), 18, + ACTIONS(324), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -15681,11 +12844,58 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [15890] = 3, + [13010] = 19, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(320), 1, + anon_sym_then, + ACTIONS(426), 1, + anon_sym_STAR_STAR, + ACTIONS(430), 1, + anon_sym_SLASH_SLASH, + ACTIONS(434), 1, + anon_sym_AMP, + ACTIONS(436), 1, + anon_sym_PIPE, + ACTIONS(438), 1, + anon_sym_CARET, + ACTIONS(444), 1, + anon_sym_AMP_AMP, + ACTIONS(446), 1, + anon_sym_PIPE_PIPE, + ACTIONS(448), 1, + anon_sym_DOT_DOT, + ACTIONS(450), 1, + anon_sym_DOT_DOT_EQ, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(424), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(428), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(432), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(440), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(442), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13076] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(328), 7, + ACTIONS(334), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -15693,7 +12903,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(330), 18, + ACTIONS(332), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -15712,11 +12922,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [15924] = 3, + [13110] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 7, + ACTIONS(338), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -15724,7 +12934,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(334), 18, + ACTIONS(336), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -15743,11 +12953,58 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [15958] = 3, + [13144] = 19, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_SLASH_SLASH, + ACTIONS(240), 1, + anon_sym_AMP, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_DOT_DOT, + ACTIONS(262), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(454), 1, + anon_sym_COMMA, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(230), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(234), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(238), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(248), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13210] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(336), 7, + ACTIONS(208), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -15755,7 +13012,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(338), 18, + ACTIONS(206), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -15774,11 +13031,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [15992] = 3, + [13244] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(320), 7, + ACTIONS(224), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -15786,7 +13043,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(322), 18, + ACTIONS(222), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -15805,11 +13062,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [16026] = 3, + [13278] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 7, + ACTIONS(190), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -15817,7 +13074,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(346), 18, + ACTIONS(188), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -15836,42 +13093,199 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [16060] = 3, + [13312] = 19, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(426), 1, + anon_sym_STAR_STAR, + ACTIONS(430), 1, + anon_sym_SLASH_SLASH, + ACTIONS(434), 1, + anon_sym_AMP, + ACTIONS(436), 1, + anon_sym_PIPE, + ACTIONS(438), 1, + anon_sym_CARET, + ACTIONS(444), 1, + anon_sym_AMP_AMP, + ACTIONS(446), 1, + anon_sym_PIPE_PIPE, + ACTIONS(448), 1, + anon_sym_DOT_DOT, + ACTIONS(450), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(456), 1, + anon_sym_then, + STATE(111), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(300), 7, + ACTIONS(424), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(428), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(432), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(440), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(302), 18, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(442), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13378] = 19, + ACTIONS(212), 1, anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_SLASH_SLASH, + ACTIONS(240), 1, + anon_sym_AMP, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_DOT_DOT, + ACTIONS(262), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(458), 1, + anon_sym_else, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(234), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(238), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(248), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13444] = 19, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, anon_sym_STAR_STAR, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, + ACTIONS(240), 1, + anon_sym_AMP, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_DOT_DOT, + ACTIONS(262), 1, + anon_sym_DOT_DOT_EQ, + ACTIONS(460), 1, + ts_builtin_sym_end, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(230), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(234), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + [13510] = 19, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_SLASH_SLASH, + ACTIONS(240), 1, + anon_sym_AMP, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, anon_sym_AMP_AMP, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_DOT_DOT, + ACTIONS(262), 1, anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - [16094] = 3, + ACTIONS(462), 1, + anon_sym_SEMI, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(230), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(234), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(238), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(248), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13576] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(356), 7, + ACTIONS(308), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -15879,7 +13293,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(358), 18, + ACTIONS(306), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -15898,58 +13312,58 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [16128] = 19, - ACTIONS(384), 1, + [13610] = 19, + ACTIONS(372), 1, anon_sym_COLON, - ACTIONS(386), 1, - anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(376), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(380), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(384), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(386), 1, anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(388), 1, + anon_sym_CARET, + ACTIONS(394), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, + ACTIONS(396), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, + ACTIONS(398), 1, anon_sym_DOT_DOT, - ACTIONS(416), 1, + ACTIONS(400), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(514), 1, - anon_sym_else, - STATE(188), 1, + ACTIONS(402), 1, + anon_sym_LPAREN, + ACTIONS(464), 1, + anon_sym_RPAREN_GT, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(374), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(382), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(390), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + ACTIONS(392), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16194] = 3, + [13676] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(360), 7, + ACTIONS(276), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -15957,7 +13371,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(362), 18, + ACTIONS(274), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -15976,42 +13390,58 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [16228] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(340), 7, - anon_sym_STAR, - anon_sym_SLASH, + [13710] = 19, + ACTIONS(212), 1, + anon_sym_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(270), 1, + anon_sym_then, + ACTIONS(426), 1, + anon_sym_STAR_STAR, + ACTIONS(430), 1, + anon_sym_SLASH_SLASH, + ACTIONS(434), 1, anon_sym_AMP, + ACTIONS(436), 1, anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, + ACTIONS(438), 1, + anon_sym_CARET, + ACTIONS(444), 1, + anon_sym_AMP_AMP, + ACTIONS(446), 1, + anon_sym_PIPE_PIPE, + ACTIONS(448), 1, anon_sym_DOT_DOT, - ACTIONS(342), 18, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON, + ACTIONS(450), 1, + anon_sym_DOT_DOT_EQ, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(424), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(428), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(432), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(440), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(442), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - [16262] = 3, + [13776] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(304), 7, + ACTIONS(330), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -16019,7 +13449,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(306), 18, + ACTIONS(328), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -16038,11 +13468,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [16296] = 3, + [13810] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(312), 7, + ACTIONS(268), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -16050,7 +13480,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(314), 18, + ACTIONS(266), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -16069,199 +13499,152 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [16330] = 19, - ACTIONS(384), 1, + [13844] = 19, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(408), 1, - anon_sym_AMP_AMP, - ACTIONS(412), 1, - anon_sym_PIPE_PIPE, - ACTIONS(414), 1, - anon_sym_DOT_DOT, - ACTIONS(416), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(516), 1, - anon_sym_COMMA, - STATE(188), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(390), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(392), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(396), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(404), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(406), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [16396] = 19, - ACTIONS(384), 1, - anon_sym_COLON, - ACTIONS(386), 1, - anon_sym_LPAREN, - ACTIONS(388), 1, - anon_sym_STAR_STAR, - ACTIONS(394), 1, - anon_sym_SLASH_SLASH, - ACTIONS(398), 1, - anon_sym_AMP, - ACTIONS(400), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(402), 1, - anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, + ACTIONS(260), 1, anon_sym_DOT_DOT, - ACTIONS(416), 1, + ACTIONS(262), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(518), 1, + ACTIONS(466), 1, anon_sym_RPAREN, - STATE(188), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16462] = 19, - ACTIONS(384), 1, + [13910] = 19, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(254), 1, + anon_sym_then, + ACTIONS(426), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(430), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(434), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(436), 1, anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(438), 1, + anon_sym_CARET, + ACTIONS(444), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, + ACTIONS(446), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, + ACTIONS(448), 1, anon_sym_DOT_DOT, - ACTIONS(416), 1, + ACTIONS(450), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(520), 1, - anon_sym_else, - STATE(188), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(424), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(428), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(432), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(440), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + ACTIONS(442), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16528] = 19, - ACTIONS(384), 1, + [13976] = 19, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, + ACTIONS(260), 1, anon_sym_DOT_DOT, - ACTIONS(416), 1, + ACTIONS(262), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(522), 1, + ACTIONS(468), 1, anon_sym_RPAREN, - STATE(188), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16594] = 3, + [14042] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(364), 7, + ACTIONS(284), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -16269,7 +13652,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(366), 18, + ACTIONS(282), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -16288,418 +13671,325 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [16628] = 19, - ACTIONS(384), 1, + [14076] = 19, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(408), 1, - anon_sym_AMP_AMP, - ACTIONS(412), 1, - anon_sym_PIPE_PIPE, - ACTIONS(414), 1, - anon_sym_DOT_DOT, - ACTIONS(416), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(524), 1, - anon_sym_else, - STATE(188), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(390), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(392), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(396), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(404), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(406), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [16694] = 19, - ACTIONS(384), 1, - anon_sym_COLON, - ACTIONS(386), 1, - anon_sym_LPAREN, - ACTIONS(388), 1, - anon_sym_STAR_STAR, - ACTIONS(394), 1, - anon_sym_SLASH_SLASH, - ACTIONS(398), 1, - anon_sym_AMP, - ACTIONS(400), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(402), 1, - anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, + ACTIONS(260), 1, anon_sym_DOT_DOT, - ACTIONS(416), 1, + ACTIONS(262), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(526), 1, - ts_builtin_sym_end, - STATE(188), 1, + ACTIONS(470), 1, + anon_sym_else, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(406), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [16760] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(308), 7, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(310), 18, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - [16794] = 19, - ACTIONS(444), 1, + [14142] = 19, + ACTIONS(372), 1, anon_sym_COLON, - ACTIONS(448), 1, + ACTIONS(376), 1, anon_sym_STAR_STAR, - ACTIONS(452), 1, + ACTIONS(380), 1, anon_sym_SLASH_SLASH, - ACTIONS(456), 1, + ACTIONS(384), 1, anon_sym_AMP, - ACTIONS(458), 1, + ACTIONS(386), 1, anon_sym_PIPE, - ACTIONS(460), 1, + ACTIONS(388), 1, anon_sym_CARET, - ACTIONS(466), 1, + ACTIONS(394), 1, anon_sym_AMP_AMP, - ACTIONS(468), 1, + ACTIONS(396), 1, anon_sym_PIPE_PIPE, - ACTIONS(470), 1, + ACTIONS(398), 1, anon_sym_DOT_DOT, - ACTIONS(472), 1, + ACTIONS(400), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, + ACTIONS(402), 1, anon_sym_LPAREN, - ACTIONS(528), 1, + ACTIONS(472), 1, anon_sym_RPAREN_GT, - STATE(252), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(446), 2, + ACTIONS(374), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(450), 2, + ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(454), 2, + ACTIONS(382), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(462), 2, + ACTIONS(390), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(464), 4, + ACTIONS(392), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16860] = 19, - ACTIONS(384), 1, + [14208] = 19, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, + ACTIONS(260), 1, anon_sym_DOT_DOT, - ACTIONS(416), 1, + ACTIONS(262), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(476), 1, - anon_sym_COMMA, - STATE(188), 1, + ACTIONS(474), 1, + anon_sym_else, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16926] = 19, - ACTIONS(384), 1, - anon_sym_COLON, - ACTIONS(386), 1, - anon_sym_LPAREN, - ACTIONS(388), 1, - anon_sym_STAR_STAR, - ACTIONS(394), 1, - anon_sym_SLASH_SLASH, - ACTIONS(398), 1, - anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, - anon_sym_PIPE, - ACTIONS(408), 1, - anon_sym_AMP_AMP, - ACTIONS(412), 1, - anon_sym_PIPE_PIPE, - ACTIONS(414), 1, - anon_sym_DOT_DOT, - ACTIONS(416), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(530), 1, - anon_sym_RPAREN, - STATE(188), 1, - sym_dictionary_construction, + [14274] = 4, + ACTIONS(476), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(308), 8, anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(392), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(404), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + anon_sym_DOT_DOT, + ACTIONS(306), 16, + anon_sym_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16992] = 19, - ACTIONS(384), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_DOT_DOT_EQ, + anon_sym_then, + anon_sym_LPAREN, + [14310] = 19, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, + ACTIONS(260), 1, anon_sym_DOT_DOT, - ACTIONS(416), 1, + ACTIONS(262), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(532), 1, - anon_sym_SEMI, - STATE(188), 1, + ACTIONS(404), 1, + anon_sym_COMMA, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [17058] = 19, - ACTIONS(384), 1, + [14376] = 19, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, + ACTIONS(260), 1, anon_sym_DOT_DOT, - ACTIONS(416), 1, + ACTIONS(262), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(534), 1, + ACTIONS(478), 1, anon_sym_COMMA, - STATE(188), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [17124] = 19, - ACTIONS(384), 1, + [14442] = 19, + ACTIONS(212), 1, anon_sym_COLON, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(388), 1, + ACTIONS(426), 1, anon_sym_STAR_STAR, - ACTIONS(394), 1, + ACTIONS(430), 1, anon_sym_SLASH_SLASH, - ACTIONS(398), 1, + ACTIONS(434), 1, anon_sym_AMP, - ACTIONS(400), 1, - anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(436), 1, anon_sym_PIPE, - ACTIONS(408), 1, + ACTIONS(438), 1, + anon_sym_CARET, + ACTIONS(444), 1, anon_sym_AMP_AMP, - ACTIONS(412), 1, + ACTIONS(446), 1, anon_sym_PIPE_PIPE, - ACTIONS(414), 1, + ACTIONS(448), 1, anon_sym_DOT_DOT, - ACTIONS(416), 1, + ACTIONS(450), 1, anon_sym_DOT_DOT_EQ, - ACTIONS(536), 1, - anon_sym_COMMA, - STATE(188), 1, + ACTIONS(480), 1, + anon_sym_then, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(390), 2, + ACTIONS(424), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(392), 2, + ACTIONS(428), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(396), 2, + ACTIONS(432), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(404), 2, + ACTIONS(440), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(406), 4, + ACTIONS(442), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [17190] = 3, + [14508] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(348), 7, + ACTIONS(252), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -16707,7 +13997,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(350), 18, + ACTIONS(250), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON, @@ -16726,124 +14016,124 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [17224] = 14, + [14542] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(538), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(540), 1, - aux_sym_base_ten_token1, - ACTIONS(544), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(294), 1, + STATE(76), 1, sym__float, - STATE(295), 1, + STATE(77), 1, sym_number, - STATE(301), 1, + STATE(271), 1, sym_formula_expression, - STATE(368), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(542), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(299), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [17277] = 14, + [14595] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(538), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(540), 1, - aux_sym_base_ten_token1, - ACTIONS(544), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(294), 1, + ACTIONS(488), 1, + aux_sym_base_ten_token1, + STATE(252), 1, sym__float, - STATE(295), 1, + STATE(253), 1, sym_number, - STATE(303), 1, + STATE(263), 1, sym_formula_expression, - STATE(368), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(542), 2, + ACTIONS(490), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(299), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [17330] = 14, + [14648] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(538), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(540), 1, - aux_sym_base_ten_token1, - ACTIONS(544), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(294), 1, + ACTIONS(488), 1, + aux_sym_base_ten_token1, + STATE(252), 1, sym__float, - STATE(295), 1, + STATE(253), 1, sym_number, - STATE(298), 1, + STATE(264), 1, sym_formula_expression, - STATE(368), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(542), 2, + ACTIONS(490), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(299), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [17383] = 14, + [14701] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -16852,76 +14142,37 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(538), 1, - sym_identifier, - ACTIONS(544), 1, - anon_sym_LPAREN, - STATE(140), 1, - sym_number, - STATE(141), 1, - sym__float, - STATE(320), 1, - sym_formula_expression, - STATE(365), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(546), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(351), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(299), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [17436] = 14, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(538), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(540), 1, - aux_sym_base_ten_token1, - ACTIONS(544), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(294), 1, + STATE(76), 1, sym__float, - STATE(295), 1, + STATE(77), 1, sym_number, - STATE(308), 1, + STATE(268), 1, sym_formula_expression, - STATE(368), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(542), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(299), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [17489] = 14, + [14754] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -16930,37 +14181,37 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(538), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(544), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(310), 1, + STATE(77), 1, + sym_number, + STATE(267), 1, sym_formula_expression, - STATE(365), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(546), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(299), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [17542] = 14, + [14807] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -16969,76 +14220,37 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(538), 1, - sym_identifier, - ACTIONS(544), 1, - anon_sym_LPAREN, - STATE(140), 1, - sym_number, - STATE(141), 1, - sym__float, - STATE(311), 1, - sym_formula_expression, - STATE(365), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(546), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(351), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(299), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [17595] = 14, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(538), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(540), 1, - aux_sym_base_ten_token1, - ACTIONS(544), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(294), 1, + STATE(76), 1, sym__float, - STATE(295), 1, + STATE(77), 1, sym_number, - STATE(306), 1, + STATE(258), 1, sym_formula_expression, - STATE(368), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(542), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(299), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [17648] = 14, + [14860] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -17047,275 +14259,359 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(538), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(544), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(140), 1, - sym_number, - STATE(141), 1, + STATE(76), 1, sym__float, - STATE(314), 1, + STATE(77), 1, + sym_number, + STATE(270), 1, sym_formula_expression, - STATE(365), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(546), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(299), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [17701] = 14, + [14913] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(538), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(540), 1, - aux_sym_base_ten_token1, - ACTIONS(544), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(294), 1, + STATE(76), 1, sym__float, - STATE(295), 1, + STATE(77), 1, sym_number, - STATE(302), 1, + STATE(269), 1, sym_formula_expression, - STATE(368), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(542), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(299), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [17754] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [14966] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(538), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(544), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(140), 1, - sym_number, - STATE(141), 1, + ACTIONS(488), 1, + aux_sym_base_ten_token1, + STATE(252), 1, sym__float, - STATE(298), 1, + STATE(253), 1, + sym_number, + STATE(258), 1, sym_formula_expression, - STATE(365), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(546), 2, + ACTIONS(490), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(299), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [17807] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [15019] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(538), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(544), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(140), 1, - sym_number, - STATE(141), 1, + ACTIONS(488), 1, + aux_sym_base_ten_token1, + STATE(252), 1, sym__float, - STATE(318), 1, + STATE(253), 1, + sym_number, + STATE(265), 1, sym_formula_expression, - STATE(365), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(546), 2, + ACTIONS(490), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(299), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [17860] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [15072] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(538), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(544), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(140), 1, - sym_number, - STATE(141), 1, + ACTIONS(488), 1, + aux_sym_base_ten_token1, + STATE(252), 1, sym__float, - STATE(313), 1, + STATE(253), 1, + sym_number, + STATE(261), 1, sym_formula_expression, - STATE(365), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(546), 2, + ACTIONS(490), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(299), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [17913] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [15125] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(538), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(544), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(140), 1, - sym_number, - STATE(141), 1, + ACTIONS(488), 1, + aux_sym_base_ten_token1, + STATE(252), 1, sym__float, - STATE(312), 1, + STATE(253), 1, + sym_number, + STATE(266), 1, sym_formula_expression, - STATE(365), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(546), 2, + ACTIONS(490), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(299), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [17966] = 14, + [15178] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(538), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(540), 1, - aux_sym_base_ten_token1, - ACTIONS(544), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(294), 1, + STATE(76), 1, sym__float, - STATE(295), 1, + STATE(77), 1, sym_number, - STATE(309), 1, + STATE(274), 1, sym_formula_expression, - STATE(368), 1, + STATE(319), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(542), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(351), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(299), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [18019] = 3, + [15231] = 5, + ACTIONS(492), 1, + anon_sym_DOT, + STATE(243), 1, + aux_sym_identity_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(186), 7, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_if, + anon_sym_let, + ACTIONS(184), 11, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [15264] = 5, + ACTIONS(492), 1, + anon_sym_DOT, + STATE(244), 1, + aux_sym_identity_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(164), 7, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_if, + anon_sym_let, + ACTIONS(160), 11, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [15297] = 5, + ACTIONS(494), 1, + anon_sym_DOT, + STATE(244), 1, + aux_sym_identity_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(175), 7, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_if, + anon_sym_let, + ACTIONS(170), 11, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [15330] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(548), 7, + ACTIONS(497), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -17323,7 +14619,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(125), 12, + ACTIONS(89), 12, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -17336,11 +14632,108 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LT_LT_LT, - [18047] = 3, + [15358] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(175), 7, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_if, + anon_sym_let, + ACTIONS(170), 12, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_DOT, + anon_sym_LT_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [15386] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(499), 7, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_if, + anon_sym_let, + ACTIONS(196), 11, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [15413] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(200), 7, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_if, + anon_sym_let, + ACTIONS(198), 11, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [15440] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(204), 7, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_if, + anon_sym_let, + ACTIONS(202), 11, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_LT_LT_LT, + [15467] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(550), 7, + ACTIONS(228), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -17348,7 +14741,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(262), 11, + ACTIONS(226), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -17360,19 +14753,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [18074] = 4, + [15494] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(192), 2, + ACTIONS(134), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(188), 4, + ACTIONS(132), 4, sym_identifier, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(190), 10, + ACTIONS(130), 10, sym_unit_quote, anon_sym_DOT, anon_sym_DASH, @@ -17383,20 +14776,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [18101] = 5, - STATE(307), 1, + [15521] = 5, + STATE(259), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(552), 2, + ACTIONS(501), 2, sym_identifier, sym_unit_quote, - ACTIONS(206), 3, + ACTIONS(142), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(208), 8, + ACTIONS(136), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -17405,17 +14798,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [18128] = 4, - ACTIONS(554), 1, + [15548] = 4, + ACTIONS(503), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(200), 3, + ACTIONS(146), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(202), 10, + ACTIONS(144), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -17426,15 +14819,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [18153] = 3, + [15573] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(188), 3, + ACTIONS(132), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(190), 10, + ACTIONS(130), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -17445,15 +14838,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [18175] = 3, + [15595] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(558), 3, + ACTIONS(507), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(556), 10, + ACTIONS(505), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -17464,15 +14857,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [18197] = 3, + [15617] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(562), 3, + ACTIONS(158), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(560), 10, + ACTIONS(156), 10, + sym_identifier, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -17481,17 +14876,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [18219] = 3, + [15639] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(566), 3, + ACTIONS(511), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(564), 10, + ACTIONS(509), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -17502,17 +14895,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [18241] = 3, + [15661] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(276), 3, + ACTIONS(515), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(278), 10, - sym_identifier, - sym_unit_quote, + ACTIONS(513), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -17521,74 +14912,72 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [18263] = 4, - ACTIONS(568), 1, - anon_sym_STAR_STAR, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [15683] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(562), 3, + ACTIONS(190), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(560), 7, + ACTIONS(188), 8, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [18285] = 7, - ACTIONS(568), 1, - anon_sym_STAR_STAR, - ACTIONS(572), 1, - anon_sym_STAR, - ACTIONS(574), 1, - anon_sym_SLASH, + [15703] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(570), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(576), 2, + ACTIONS(208), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(578), 4, + ACTIONS(206), 8, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [18313] = 6, - ACTIONS(568), 1, + [15723] = 7, + ACTIONS(519), 1, anon_sym_STAR_STAR, - ACTIONS(572), 1, + ACTIONS(521), 1, anon_sym_STAR, - ACTIONS(574), 1, + ACTIONS(523), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(562), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(560), 6, + ACTIONS(517), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(525), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(527), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [18339] = 3, + [15751] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 3, + ACTIONS(224), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(342), 8, + ACTIONS(222), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -17597,1640 +14986,1444 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [18359] = 3, + [15771] = 7, + ACTIONS(519), 1, + anon_sym_STAR_STAR, + ACTIONS(521), 1, + anon_sym_STAR, + ACTIONS(523), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(304), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(306), 8, + ACTIONS(517), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(529), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(531), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [18379] = 7, - ACTIONS(568), 1, + [15799] = 7, + ACTIONS(519), 1, anon_sym_STAR_STAR, - ACTIONS(572), 1, + ACTIONS(521), 1, anon_sym_STAR, - ACTIONS(574), 1, + ACTIONS(523), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(570), 2, + ACTIONS(517), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(580), 2, + ACTIONS(533), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(582), 4, + ACTIONS(535), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [18407] = 3, + [15827] = 6, + ACTIONS(519), 1, + anon_sym_STAR_STAR, + ACTIONS(521), 1, + anon_sym_STAR, + ACTIONS(523), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(312), 3, - anon_sym_STAR, + ACTIONS(515), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(314), 8, + ACTIONS(513), 6, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [18427] = 7, - ACTIONS(568), 1, + [15853] = 4, + ACTIONS(519), 1, anon_sym_STAR_STAR, - ACTIONS(572), 1, - anon_sym_STAR, - ACTIONS(574), 1, - anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(570), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(584), 2, + ACTIONS(515), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(586), 4, + ACTIONS(513), 7, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [18455] = 7, - ACTIONS(568), 1, + [15875] = 5, + ACTIONS(537), 1, anon_sym_STAR_STAR, - ACTIONS(572), 1, + ACTIONS(539), 1, anon_sym_STAR, - ACTIONS(574), 1, + ACTIONS(541), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(570), 2, + ACTIONS(513), 4, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(588), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(590), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [18483] = 6, - ACTIONS(594), 1, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [15895] = 6, + ACTIONS(537), 1, anon_sym_STAR_STAR, - ACTIONS(596), 1, + ACTIONS(539), 1, anon_sym_STAR, - ACTIONS(598), 1, + ACTIONS(541), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(586), 2, + ACTIONS(535), 2, anon_sym_RPAREN, anon_sym_GT_GT_GT, - ACTIONS(592), 2, + ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - [18505] = 4, - ACTIONS(562), 1, + [15917] = 4, + ACTIONS(515), 1, anon_sym_STAR, - ACTIONS(594), 1, + ACTIONS(537), 1, anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(560), 5, + ACTIONS(513), 5, anon_sym_DASH, anon_sym_PLUS, anon_sym_SLASH, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [18523] = 5, - ACTIONS(594), 1, - anon_sym_STAR_STAR, - ACTIONS(596), 1, - anon_sym_STAR, - ACTIONS(598), 1, - anon_sym_SLASH, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(560), 4, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [18543] = 6, - ACTIONS(594), 1, + [15935] = 6, + ACTIONS(537), 1, anon_sym_STAR_STAR, - ACTIONS(596), 1, + ACTIONS(539), 1, anon_sym_STAR, - ACTIONS(598), 1, + ACTIONS(541), 1, anon_sym_SLASH, - ACTIONS(600), 1, + ACTIONS(545), 1, anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(592), 2, + ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - [18564] = 6, - ACTIONS(594), 1, + [15956] = 6, + ACTIONS(537), 1, anon_sym_STAR_STAR, - ACTIONS(596), 1, + ACTIONS(539), 1, anon_sym_STAR, - ACTIONS(598), 1, + ACTIONS(541), 1, anon_sym_SLASH, - ACTIONS(602), 1, - anon_sym_GT_GT_GT, + ACTIONS(547), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(592), 2, + ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - [18585] = 7, - ACTIONS(75), 1, - sym_varadic_dots, - ACTIONS(604), 1, - sym_identifier, - ACTIONS(606), 1, - anon_sym_RPAREN, - STATE(321), 1, - aux_sym_struct_definition_repeat1, - STATE(367), 1, - sym_struct_member, - STATE(383), 1, - sym__struct_final_element, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [18608] = 7, - ACTIONS(75), 1, + [15977] = 7, + ACTIONS(39), 1, sym_varadic_dots, - ACTIONS(604), 1, + ACTIONS(549), 1, sym_identifier, - ACTIONS(608), 1, + ACTIONS(551), 1, anon_sym_RPAREN, - STATE(321), 1, + STATE(277), 1, aux_sym_struct_definition_repeat1, - STATE(367), 1, + STATE(316), 1, sym_struct_member, - STATE(388), 1, + STATE(322), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [18631] = 7, - ACTIONS(75), 1, + [16000] = 7, + ACTIONS(39), 1, sym_varadic_dots, - ACTIONS(604), 1, + ACTIONS(549), 1, sym_identifier, - ACTIONS(610), 1, + ACTIONS(553), 1, anon_sym_RPAREN, - STATE(321), 1, + STATE(277), 1, aux_sym_struct_definition_repeat1, - STATE(367), 1, + STATE(316), 1, sym_struct_member, - STATE(382), 1, + STATE(335), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [18654] = 6, - ACTIONS(594), 1, + [16023] = 6, + ACTIONS(537), 1, anon_sym_STAR_STAR, - ACTIONS(596), 1, + ACTIONS(539), 1, anon_sym_STAR, - ACTIONS(598), 1, + ACTIONS(541), 1, anon_sym_SLASH, - ACTIONS(612), 1, + ACTIONS(555), 1, anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(592), 2, + ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - [18675] = 7, - ACTIONS(75), 1, + [16044] = 7, + ACTIONS(39), 1, sym_varadic_dots, - ACTIONS(604), 1, + ACTIONS(549), 1, sym_identifier, - ACTIONS(614), 1, + ACTIONS(557), 1, anon_sym_RPAREN, - STATE(315), 1, + STATE(277), 1, aux_sym_struct_definition_repeat1, - STATE(367), 1, + STATE(316), 1, sym_struct_member, - STATE(377), 1, + STATE(339), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [18698] = 6, - ACTIONS(594), 1, - anon_sym_STAR_STAR, - ACTIONS(596), 1, - anon_sym_STAR, - ACTIONS(598), 1, - anon_sym_SLASH, - ACTIONS(616), 1, + [16067] = 7, + ACTIONS(39), 1, + sym_varadic_dots, + ACTIONS(549), 1, + sym_identifier, + ACTIONS(559), 1, anon_sym_RPAREN, + STATE(273), 1, + aux_sym_struct_definition_repeat1, + STATE(316), 1, + sym_struct_member, + STATE(331), 1, + sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(592), 2, - anon_sym_DASH, - anon_sym_PLUS, - [18719] = 5, - ACTIONS(618), 1, + [16090] = 5, + ACTIONS(561), 1, sym_identifier, - STATE(321), 1, + STATE(277), 1, aux_sym_struct_definition_repeat1, - STATE(391), 1, + STATE(334), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(621), 2, + ACTIONS(564), 2, anon_sym_RPAREN, sym_varadic_dots, - [18737] = 4, - ACTIONS(623), 1, + [16108] = 4, + ACTIONS(566), 1, sym_identifier, - ACTIONS(625), 1, + ACTIONS(569), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(327), 2, + STATE(278), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [18752] = 4, - ACTIONS(623), 1, + [16123] = 4, + ACTIONS(571), 1, sym_identifier, - ACTIONS(627), 1, + ACTIONS(573), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(322), 2, + STATE(283), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [18767] = 4, - ACTIONS(629), 1, - sym_identifier, - ACTIONS(631), 1, - anon_sym_LPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - STATE(46), 2, - sym_identity_path, - sym_struct_definition, - [18782] = 4, - ACTIONS(623), 1, + [16138] = 4, + ACTIONS(571), 1, sym_identifier, - ACTIONS(633), 1, + ACTIONS(575), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(327), 2, + STATE(278), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [18797] = 4, - ACTIONS(629), 1, + [16153] = 4, + ACTIONS(577), 1, sym_identifier, - ACTIONS(631), 1, + ACTIONS(579), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(62), 2, + STATE(49), 2, sym_identity_path, sym_struct_definition, - [18812] = 4, - ACTIONS(635), 1, - sym_identifier, - ACTIONS(638), 1, - anon_sym_in, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - STATE(327), 2, - sym_let_in_assignment, - aux_sym_let_in_repeat1, - [18827] = 4, - ACTIONS(623), 1, + [16168] = 4, + ACTIONS(577), 1, sym_identifier, - ACTIONS(640), 1, - anon_sym_in, + ACTIONS(579), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(329), 2, - sym_let_in_assignment, - aux_sym_let_in_repeat1, - [18842] = 4, - ACTIONS(623), 1, + STATE(65), 2, + sym_identity_path, + sym_struct_definition, + [16183] = 4, + ACTIONS(571), 1, sym_identifier, - ACTIONS(642), 1, + ACTIONS(581), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(327), 2, + STATE(278), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [18857] = 4, - ACTIONS(623), 1, + [16198] = 4, + ACTIONS(571), 1, sym_identifier, - ACTIONS(644), 1, + ACTIONS(583), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(325), 2, + STATE(280), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [18872] = 4, - ACTIONS(629), 1, + [16213] = 4, + ACTIONS(577), 1, sym_identifier, - ACTIONS(631), 1, + ACTIONS(579), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(26), 2, + STATE(30), 2, sym_identity_path, sym_struct_definition, - [18887] = 4, - ACTIONS(646), 1, + [16228] = 4, + ACTIONS(571), 1, sym_identifier, - ACTIONS(648), 1, - anon_sym_RPAREN, - STATE(355), 1, - sym_dictionary_member_assignment, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [18901] = 4, - ACTIONS(650), 1, - anon_sym_COMMA, - ACTIONS(652), 1, - anon_sym_RPAREN, - STATE(339), 1, - aux_sym_dictionary_construction_repeat1, + ACTIONS(585), 1, + anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - [18915] = 4, - ACTIONS(646), 1, + STATE(287), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [16243] = 4, + ACTIONS(571), 1, sym_identifier, - ACTIONS(654), 1, - anon_sym_RPAREN, - STATE(349), 1, - sym_dictionary_member_assignment, + ACTIONS(587), 1, + anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - [18929] = 4, - ACTIONS(656), 1, + STATE(278), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [16258] = 4, + ACTIONS(589), 1, anon_sym_COMMA, - ACTIONS(659), 1, + ACTIONS(591), 1, anon_sym_RPAREN, - STATE(335), 1, + STATE(295), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [18943] = 4, - ACTIONS(646), 1, - sym_identifier, - ACTIONS(661), 1, + [16272] = 4, + ACTIONS(593), 1, + anon_sym_COMMA, + ACTIONS(595), 1, anon_sym_RPAREN, - STATE(333), 1, - sym_dictionary_member_assignment, + STATE(292), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [18957] = 2, + [16286] = 3, + ACTIONS(599), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(621), 3, - sym_identifier, + ACTIONS(597), 2, + anon_sym_COMMA, anon_sym_RPAREN, - sym_varadic_dots, - [18967] = 4, - ACTIONS(646), 1, + [16298] = 4, + ACTIONS(601), 1, sym_identifier, - ACTIONS(663), 1, + ACTIONS(603), 1, anon_sym_RPAREN, - STATE(355), 1, + STATE(314), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [18981] = 4, - ACTIONS(663), 1, + [16312] = 4, + ACTIONS(603), 1, anon_sym_RPAREN, - ACTIONS(665), 1, + ACTIONS(605), 1, anon_sym_COMMA, - STATE(335), 1, + STATE(298), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [18995] = 4, - ACTIONS(646), 1, + [16326] = 4, + ACTIONS(601), 1, sym_identifier, - ACTIONS(667), 1, + ACTIONS(607), 1, anon_sym_RPAREN, - STATE(355), 1, + STATE(288), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19009] = 4, - ACTIONS(669), 1, - anon_sym_COMMA, - ACTIONS(671), 1, - anon_sym_RPAREN, - STATE(335), 1, - aux_sym_dictionary_construction_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [19023] = 4, - ACTIONS(646), 1, + [16340] = 4, + ACTIONS(601), 1, sym_identifier, - ACTIONS(673), 1, + ACTIONS(609), 1, anon_sym_RPAREN, - STATE(347), 1, + STATE(314), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19037] = 3, - ACTIONS(677), 1, - anon_sym_EQ, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(675), 2, - anon_sym_COMMA, + [16354] = 4, + ACTIONS(609), 1, anon_sym_RPAREN, - [19049] = 4, - ACTIONS(679), 1, + ACTIONS(611), 1, anon_sym_COMMA, - ACTIONS(681), 1, - anon_sym_RPAREN, - STATE(335), 1, + STATE(298), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19063] = 4, - ACTIONS(646), 1, + [16368] = 4, + ACTIONS(601), 1, sym_identifier, - ACTIONS(671), 1, + ACTIONS(613), 1, anon_sym_RPAREN, - STATE(355), 1, + STATE(314), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19077] = 4, - ACTIONS(646), 1, + [16382] = 4, + ACTIONS(601), 1, sym_identifier, - ACTIONS(683), 1, + ACTIONS(615), 1, anon_sym_RPAREN, - STATE(355), 1, + STATE(314), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19091] = 4, - ACTIONS(685), 1, + [16396] = 4, + ACTIONS(617), 1, anon_sym_COMMA, - ACTIONS(687), 1, + ACTIONS(620), 1, anon_sym_RPAREN, - STATE(344), 1, + STATE(298), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19105] = 4, - ACTIONS(646), 1, - sym_identifier, - ACTIONS(681), 1, - anon_sym_RPAREN, - STATE(355), 1, - sym_dictionary_member_assignment, + [16410] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19119] = 4, - ACTIONS(689), 1, - anon_sym_COMMA, - ACTIONS(691), 1, + ACTIONS(564), 3, + sym_identifier, anon_sym_RPAREN, - STATE(341), 1, - aux_sym_dictionary_construction_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [19133] = 2, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(693), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [19142] = 2, + sym_varadic_dots, + [16420] = 4, + ACTIONS(601), 1, + sym_identifier, + ACTIONS(622), 1, + anon_sym_RPAREN, + STATE(289), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(695), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [19151] = 3, - ACTIONS(697), 1, - aux_sym_signed_integer_token1, - ACTIONS(699), 1, - aux_sym_unsigned_integer_token1, + [16434] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19162] = 3, - ACTIONS(701), 1, - aux_sym_base_ten_token1, - STATE(300), 1, - sym_number, + ACTIONS(624), 2, + sym_identifier, + anon_sym_in, + [16443] = 3, + ACTIONS(601), 1, + sym_identifier, + STATE(314), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19173] = 3, - ACTIONS(422), 1, + [16454] = 3, + ACTIONS(342), 1, anon_sym_COLON, - STATE(343), 1, + STATE(290), 1, sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19184] = 2, + [16465] = 3, + ACTIONS(402), 1, + anon_sym_LPAREN, + STATE(195), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(659), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - [19193] = 3, - ACTIONS(703), 1, - aux_sym_base_ten_token1, - STATE(142), 1, - sym_number, + [16476] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19204] = 3, - ACTIONS(474), 1, - anon_sym_LPAREN, - STATE(251), 1, - sym_dictionary_construction, + ACTIONS(626), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [16485] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19215] = 3, - ACTIONS(256), 1, + ACTIONS(628), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [16494] = 3, + ACTIONS(216), 1, anon_sym_LPAREN, - STATE(130), 1, + STATE(117), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19226] = 3, - ACTIONS(386), 1, - anon_sym_LPAREN, - STATE(183), 1, - sym_dictionary_construction, + [16505] = 3, + ACTIONS(630), 1, + aux_sym_signed_integer_token1, + ACTIONS(632), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19237] = 2, + [16516] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(705), 2, + ACTIONS(634), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [19246] = 2, + [16525] = 3, + ACTIONS(636), 1, + anon_sym_COMMA, + ACTIONS(638), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(707), 2, - sym_identifier, - anon_sym_in, - [19255] = 3, - ACTIONS(709), 1, - aux_sym_signed_integer_token1, - ACTIONS(711), 1, - aux_sym_unsigned_integer_token1, + [16536] = 3, + ACTIONS(640), 1, + aux_sym_base_ten_token1, + STATE(256), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19266] = 3, - ACTIONS(713), 1, + [16547] = 3, + ACTIONS(642), 1, aux_sym_base_ten_token1, - STATE(197), 1, + STATE(133), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19277] = 2, + [16558] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(715), 2, + ACTIONS(644), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [19286] = 3, - ACTIONS(717), 1, - aux_sym_signed_integer_token1, - ACTIONS(719), 1, - aux_sym_unsigned_integer_token1, + [16567] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19297] = 3, - ACTIONS(721), 1, + ACTIONS(620), 2, anon_sym_COMMA, - ACTIONS(723), 1, anon_sym_RPAREN, + [16576] = 3, + ACTIONS(646), 1, + aux_sym_base_ten_token1, + STATE(152), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19308] = 3, - ACTIONS(723), 1, + [16587] = 3, + ACTIONS(638), 1, anon_sym_RPAREN, - ACTIONS(725), 1, + ACTIONS(648), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19319] = 3, - ACTIONS(727), 1, - aux_sym_signed_integer_token1, - ACTIONS(729), 1, - aux_sym_unsigned_integer_token1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [19330] = 3, - ACTIONS(731), 1, + [16598] = 3, + ACTIONS(650), 1, aux_sym_base_ten_token1, - STATE(102), 1, + STATE(79), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19341] = 3, - ACTIONS(646), 1, - sym_identifier, - STATE(355), 1, - sym_dictionary_member_assignment, + [16609] = 3, + ACTIONS(652), 1, + aux_sym_signed_integer_token1, + ACTIONS(654), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19352] = 2, - ACTIONS(733), 1, - sym_identifier, + [16620] = 3, + ACTIONS(656), 1, + aux_sym_signed_integer_token1, + ACTIONS(658), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19360] = 2, - ACTIONS(735), 1, - anon_sym_EQ, + [16631] = 2, + ACTIONS(660), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19368] = 2, - ACTIONS(737), 1, - sym_identifier, + [16639] = 2, + ACTIONS(662), 1, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19376] = 2, - ACTIONS(739), 1, - sym_identifier, + [16647] = 2, + ACTIONS(664), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19384] = 2, - ACTIONS(741), 1, - aux_sym_binary_token2, + [16655] = 2, + ACTIONS(666), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19392] = 2, - ACTIONS(743), 1, + [16663] = 2, + ACTIONS(668), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19400] = 2, - ACTIONS(745), 1, - anon_sym_RPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [19408] = 2, - ACTIONS(747), 1, - sym_identifier, + [16671] = 2, + ACTIONS(670), 1, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19416] = 2, - ACTIONS(749), 1, + [16679] = 2, + ACTIONS(672), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19424] = 2, - ACTIONS(751), 1, - anon_sym_EQ, + [16687] = 2, + ACTIONS(674), 1, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19432] = 2, - ACTIONS(753), 1, - sym_identifier, + [16695] = 2, + ACTIONS(676), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19440] = 2, - ACTIONS(755), 1, - anon_sym_RPAREN, + [16703] = 2, + ACTIONS(678), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19448] = 2, - ACTIONS(757), 1, - anon_sym_RPAREN, + [16711] = 2, + ACTIONS(680), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19456] = 2, - ACTIONS(759), 1, + [16719] = 2, + ACTIONS(682), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19464] = 2, - ACTIONS(761), 1, + [16727] = 2, + ACTIONS(684), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19472] = 2, - ACTIONS(763), 1, - aux_sym_hex_token2, + [16735] = 2, + ACTIONS(686), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19480] = 2, - ACTIONS(765), 1, - aux_sym_base_ten_token1, + [16743] = 2, + ACTIONS(648), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19488] = 2, - ACTIONS(767), 1, + [16751] = 2, + ACTIONS(688), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19496] = 2, - ACTIONS(769), 1, - sym_identifier, + [16759] = 2, + ACTIONS(690), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19504] = 2, - ACTIONS(771), 1, - anon_sym_RPAREN, + [16767] = 2, + ACTIONS(692), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19512] = 2, - ACTIONS(725), 1, - anon_sym_COMMA, + [16775] = 2, + ACTIONS(694), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19520] = 2, - ACTIONS(773), 1, + [16783] = 2, + ACTIONS(696), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19528] = 2, - ACTIONS(775), 1, - ts_builtin_sym_end, + [16791] = 2, + ACTIONS(698), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, }; static const uint32_t ts_small_parse_table_map[] = { - [SMALL_STATE(9)] = 0, - [SMALL_STATE(10)] = 102, - [SMALL_STATE(11)] = 204, - [SMALL_STATE(12)] = 306, - [SMALL_STATE(13)] = 408, - [SMALL_STATE(14)] = 510, - [SMALL_STATE(15)] = 612, - [SMALL_STATE(16)] = 714, - [SMALL_STATE(17)] = 810, - [SMALL_STATE(18)] = 906, - [SMALL_STATE(19)] = 1002, - [SMALL_STATE(20)] = 1098, - [SMALL_STATE(21)] = 1194, - [SMALL_STATE(22)] = 1290, - [SMALL_STATE(23)] = 1386, - [SMALL_STATE(24)] = 1482, - [SMALL_STATE(25)] = 1578, - [SMALL_STATE(26)] = 1674, - [SMALL_STATE(27)] = 1770, - [SMALL_STATE(28)] = 1866, - [SMALL_STATE(29)] = 1962, - [SMALL_STATE(30)] = 2058, - [SMALL_STATE(31)] = 2154, - [SMALL_STATE(32)] = 2250, - [SMALL_STATE(33)] = 2346, - [SMALL_STATE(34)] = 2442, - [SMALL_STATE(35)] = 2538, - [SMALL_STATE(36)] = 2634, - [SMALL_STATE(37)] = 2730, - [SMALL_STATE(38)] = 2826, - [SMALL_STATE(39)] = 2922, - [SMALL_STATE(40)] = 3018, - [SMALL_STATE(41)] = 3114, - [SMALL_STATE(42)] = 3210, - [SMALL_STATE(43)] = 3306, - [SMALL_STATE(44)] = 3402, - [SMALL_STATE(45)] = 3498, - [SMALL_STATE(46)] = 3594, - [SMALL_STATE(47)] = 3690, - [SMALL_STATE(48)] = 3786, - [SMALL_STATE(49)] = 3882, - [SMALL_STATE(50)] = 3978, - [SMALL_STATE(51)] = 4074, - [SMALL_STATE(52)] = 4170, - [SMALL_STATE(53)] = 4266, - [SMALL_STATE(54)] = 4362, - [SMALL_STATE(55)] = 4458, - [SMALL_STATE(56)] = 4554, - [SMALL_STATE(57)] = 4650, - [SMALL_STATE(58)] = 4746, - [SMALL_STATE(59)] = 4842, - [SMALL_STATE(60)] = 4938, - [SMALL_STATE(61)] = 5034, - [SMALL_STATE(62)] = 5130, - [SMALL_STATE(63)] = 5226, - [SMALL_STATE(64)] = 5322, - [SMALL_STATE(65)] = 5418, - [SMALL_STATE(66)] = 5514, - [SMALL_STATE(67)] = 5610, - [SMALL_STATE(68)] = 5706, - [SMALL_STATE(69)] = 5802, - [SMALL_STATE(70)] = 5898, - [SMALL_STATE(71)] = 5994, - [SMALL_STATE(72)] = 6090, - [SMALL_STATE(73)] = 6186, - [SMALL_STATE(74)] = 6282, - [SMALL_STATE(75)] = 6378, - [SMALL_STATE(76)] = 6474, - [SMALL_STATE(77)] = 6570, - [SMALL_STATE(78)] = 6666, - [SMALL_STATE(79)] = 6762, - [SMALL_STATE(80)] = 6858, - [SMALL_STATE(81)] = 6954, - [SMALL_STATE(82)] = 7050, - [SMALL_STATE(83)] = 7146, - [SMALL_STATE(84)] = 7242, - [SMALL_STATE(85)] = 7296, - [SMALL_STATE(86)] = 7350, - [SMALL_STATE(87)] = 7402, - [SMALL_STATE(88)] = 7456, - [SMALL_STATE(89)] = 7510, - [SMALL_STATE(90)] = 7564, - [SMALL_STATE(91)] = 7618, - [SMALL_STATE(92)] = 7672, - [SMALL_STATE(93)] = 7726, - [SMALL_STATE(94)] = 7775, - [SMALL_STATE(95)] = 7826, - [SMALL_STATE(96)] = 7911, - [SMALL_STATE(97)] = 7962, - [SMALL_STATE(98)] = 8011, - [SMALL_STATE(99)] = 8096, - [SMALL_STATE(100)] = 8145, - [SMALL_STATE(101)] = 8194, - [SMALL_STATE(102)] = 8243, - [SMALL_STATE(103)] = 8292, - [SMALL_STATE(104)] = 8353, - [SMALL_STATE(105)] = 8408, - [SMALL_STATE(106)] = 8465, - [SMALL_STATE(107)] = 8528, - [SMALL_STATE(108)] = 8595, - [SMALL_STATE(109)] = 8666, - [SMALL_STATE(110)] = 8735, - [SMALL_STATE(111)] = 8808, - [SMALL_STATE(112)] = 8885, - [SMALL_STATE(113)] = 8964, - [SMALL_STATE(114)] = 9045, - [SMALL_STATE(115)] = 9130, - [SMALL_STATE(116)] = 9179, - [SMALL_STATE(117)] = 9264, - [SMALL_STATE(118)] = 9349, - [SMALL_STATE(119)] = 9412, - [SMALL_STATE(120)] = 9460, - [SMALL_STATE(121)] = 9508, - [SMALL_STATE(122)] = 9556, - [SMALL_STATE(123)] = 9604, - [SMALL_STATE(124)] = 9652, - [SMALL_STATE(125)] = 9702, - [SMALL_STATE(126)] = 9750, - [SMALL_STATE(127)] = 9798, - [SMALL_STATE(128)] = 9846, - [SMALL_STATE(129)] = 9894, - [SMALL_STATE(130)] = 9942, - [SMALL_STATE(131)] = 9990, - [SMALL_STATE(132)] = 10038, - [SMALL_STATE(133)] = 10086, - [SMALL_STATE(134)] = 10134, - [SMALL_STATE(135)] = 10182, - [SMALL_STATE(136)] = 10230, - [SMALL_STATE(137)] = 10278, - [SMALL_STATE(138)] = 10326, - [SMALL_STATE(139)] = 10374, - [SMALL_STATE(140)] = 10421, - [SMALL_STATE(141)] = 10466, - [SMALL_STATE(142)] = 10515, - [SMALL_STATE(143)] = 10557, - [SMALL_STATE(144)] = 10599, - [SMALL_STATE(145)] = 10644, - [SMALL_STATE(146)] = 10689, - [SMALL_STATE(147)] = 10734, - [SMALL_STATE(148)] = 10779, - [SMALL_STATE(149)] = 10824, - [SMALL_STATE(150)] = 10869, - [SMALL_STATE(151)] = 10909, - [SMALL_STATE(152)] = 10949, - [SMALL_STATE(153)] = 10989, - [SMALL_STATE(154)] = 11029, - [SMALL_STATE(155)] = 11075, - [SMALL_STATE(156)] = 11123, - [SMALL_STATE(157)] = 11177, - [SMALL_STATE(158)] = 11233, - [SMALL_STATE(159)] = 11293, - [SMALL_STATE(160)] = 11351, - [SMALL_STATE(161)] = 11413, - [SMALL_STATE(162)] = 11479, - [SMALL_STATE(163)] = 11547, - [SMALL_STATE(164)] = 11589, - [SMALL_STATE(165)] = 11659, - [SMALL_STATE(166)] = 11699, - [SMALL_STATE(167)] = 11739, - [SMALL_STATE(168)] = 11813, - [SMALL_STATE(169)] = 11853, - [SMALL_STATE(170)] = 11927, - [SMALL_STATE(171)] = 12001, - [SMALL_STATE(172)] = 12075, - [SMALL_STATE(173)] = 12149, - [SMALL_STATE(174)] = 12189, - [SMALL_STATE(175)] = 12241, - [SMALL_STATE(176)] = 12283, - [SMALL_STATE(177)] = 12322, - [SMALL_STATE(178)] = 12361, - [SMALL_STATE(179)] = 12400, - [SMALL_STATE(180)] = 12439, - [SMALL_STATE(181)] = 12480, - [SMALL_STATE(182)] = 12519, - [SMALL_STATE(183)] = 12558, - [SMALL_STATE(184)] = 12597, - [SMALL_STATE(185)] = 12636, - [SMALL_STATE(186)] = 12675, - [SMALL_STATE(187)] = 12714, - [SMALL_STATE(188)] = 12753, - [SMALL_STATE(189)] = 12792, - [SMALL_STATE(190)] = 12831, - [SMALL_STATE(191)] = 12870, - [SMALL_STATE(192)] = 12909, - [SMALL_STATE(193)] = 12948, - [SMALL_STATE(194)] = 12987, - [SMALL_STATE(195)] = 13028, - [SMALL_STATE(196)] = 13075, - [SMALL_STATE(197)] = 13145, - [SMALL_STATE(198)] = 13181, - [SMALL_STATE(199)] = 13217, - [SMALL_STATE(200)] = 13257, - [SMALL_STATE(201)] = 13297, - [SMALL_STATE(202)] = 13337, - [SMALL_STATE(203)] = 13377, - [SMALL_STATE(204)] = 13417, - [SMALL_STATE(205)] = 13457, - [SMALL_STATE(206)] = 13526, - [SMALL_STATE(207)] = 13595, - [SMALL_STATE(208)] = 13662, - [SMALL_STATE(209)] = 13731, - [SMALL_STATE(210)] = 13768, - [SMALL_STATE(211)] = 13835, - [SMALL_STATE(212)] = 13872, - [SMALL_STATE(213)] = 13941, - [SMALL_STATE(214)] = 13976, - [SMALL_STATE(215)] = 14011, - [SMALL_STATE(216)] = 14078, - [SMALL_STATE(217)] = 14113, - [SMALL_STATE(218)] = 14148, - [SMALL_STATE(219)] = 14195, - [SMALL_STATE(220)] = 14236, - [SMALL_STATE(221)] = 14279, - [SMALL_STATE(222)] = 14348, - [SMALL_STATE(223)] = 14399, - [SMALL_STATE(224)] = 14454, - [SMALL_STATE(225)] = 14507, - [SMALL_STATE(226)] = 14564, - [SMALL_STATE(227)] = 14625, - [SMALL_STATE(228)] = 14688, - [SMALL_STATE(229)] = 14753, - [SMALL_STATE(230)] = 14820, - [SMALL_STATE(231)] = 14855, - [SMALL_STATE(232)] = 14922, - [SMALL_STATE(233)] = 14989, - [SMALL_STATE(234)] = 15058, - [SMALL_STATE(235)] = 15127, - [SMALL_STATE(236)] = 15196, - [SMALL_STATE(237)] = 15265, - [SMALL_STATE(238)] = 15332, - [SMALL_STATE(239)] = 15401, - [SMALL_STATE(240)] = 15470, - [SMALL_STATE(241)] = 15539, - [SMALL_STATE(242)] = 15588, - [SMALL_STATE(243)] = 15654, - [SMALL_STATE(244)] = 15688, - [SMALL_STATE(245)] = 15722, - [SMALL_STATE(246)] = 15788, - [SMALL_STATE(247)] = 15822, - [SMALL_STATE(248)] = 15856, - [SMALL_STATE(249)] = 15890, - [SMALL_STATE(250)] = 15924, - [SMALL_STATE(251)] = 15958, - [SMALL_STATE(252)] = 15992, - [SMALL_STATE(253)] = 16026, - [SMALL_STATE(254)] = 16060, - [SMALL_STATE(255)] = 16094, - [SMALL_STATE(256)] = 16128, - [SMALL_STATE(257)] = 16194, - [SMALL_STATE(258)] = 16228, - [SMALL_STATE(259)] = 16262, - [SMALL_STATE(260)] = 16296, - [SMALL_STATE(261)] = 16330, - [SMALL_STATE(262)] = 16396, - [SMALL_STATE(263)] = 16462, - [SMALL_STATE(264)] = 16528, - [SMALL_STATE(265)] = 16594, - [SMALL_STATE(266)] = 16628, - [SMALL_STATE(267)] = 16694, - [SMALL_STATE(268)] = 16760, - [SMALL_STATE(269)] = 16794, - [SMALL_STATE(270)] = 16860, - [SMALL_STATE(271)] = 16926, - [SMALL_STATE(272)] = 16992, - [SMALL_STATE(273)] = 17058, - [SMALL_STATE(274)] = 17124, - [SMALL_STATE(275)] = 17190, - [SMALL_STATE(276)] = 17224, - [SMALL_STATE(277)] = 17277, - [SMALL_STATE(278)] = 17330, - [SMALL_STATE(279)] = 17383, - [SMALL_STATE(280)] = 17436, - [SMALL_STATE(281)] = 17489, - [SMALL_STATE(282)] = 17542, - [SMALL_STATE(283)] = 17595, - [SMALL_STATE(284)] = 17648, - [SMALL_STATE(285)] = 17701, - [SMALL_STATE(286)] = 17754, - [SMALL_STATE(287)] = 17807, - [SMALL_STATE(288)] = 17860, - [SMALL_STATE(289)] = 17913, - [SMALL_STATE(290)] = 17966, - [SMALL_STATE(291)] = 18019, - [SMALL_STATE(292)] = 18047, - [SMALL_STATE(293)] = 18074, - [SMALL_STATE(294)] = 18101, - [SMALL_STATE(295)] = 18128, - [SMALL_STATE(296)] = 18153, - [SMALL_STATE(297)] = 18175, - [SMALL_STATE(298)] = 18197, - [SMALL_STATE(299)] = 18219, - [SMALL_STATE(300)] = 18241, - [SMALL_STATE(301)] = 18263, - [SMALL_STATE(302)] = 18285, - [SMALL_STATE(303)] = 18313, - [SMALL_STATE(304)] = 18339, - [SMALL_STATE(305)] = 18359, - [SMALL_STATE(306)] = 18379, - [SMALL_STATE(307)] = 18407, - [SMALL_STATE(308)] = 18427, - [SMALL_STATE(309)] = 18455, - [SMALL_STATE(310)] = 18483, - [SMALL_STATE(311)] = 18505, - [SMALL_STATE(312)] = 18523, - [SMALL_STATE(313)] = 18543, - [SMALL_STATE(314)] = 18564, - [SMALL_STATE(315)] = 18585, - [SMALL_STATE(316)] = 18608, - [SMALL_STATE(317)] = 18631, - [SMALL_STATE(318)] = 18654, - [SMALL_STATE(319)] = 18675, - [SMALL_STATE(320)] = 18698, - [SMALL_STATE(321)] = 18719, - [SMALL_STATE(322)] = 18737, - [SMALL_STATE(323)] = 18752, - [SMALL_STATE(324)] = 18767, - [SMALL_STATE(325)] = 18782, - [SMALL_STATE(326)] = 18797, - [SMALL_STATE(327)] = 18812, - [SMALL_STATE(328)] = 18827, - [SMALL_STATE(329)] = 18842, - [SMALL_STATE(330)] = 18857, - [SMALL_STATE(331)] = 18872, - [SMALL_STATE(332)] = 18887, - [SMALL_STATE(333)] = 18901, - [SMALL_STATE(334)] = 18915, - [SMALL_STATE(335)] = 18929, - [SMALL_STATE(336)] = 18943, - [SMALL_STATE(337)] = 18957, - [SMALL_STATE(338)] = 18967, - [SMALL_STATE(339)] = 18981, - [SMALL_STATE(340)] = 18995, - [SMALL_STATE(341)] = 19009, - [SMALL_STATE(342)] = 19023, - [SMALL_STATE(343)] = 19037, - [SMALL_STATE(344)] = 19049, - [SMALL_STATE(345)] = 19063, - [SMALL_STATE(346)] = 19077, - [SMALL_STATE(347)] = 19091, - [SMALL_STATE(348)] = 19105, - [SMALL_STATE(349)] = 19119, - [SMALL_STATE(350)] = 19133, - [SMALL_STATE(351)] = 19142, - [SMALL_STATE(352)] = 19151, - [SMALL_STATE(353)] = 19162, - [SMALL_STATE(354)] = 19173, - [SMALL_STATE(355)] = 19184, - [SMALL_STATE(356)] = 19193, - [SMALL_STATE(357)] = 19204, - [SMALL_STATE(358)] = 19215, - [SMALL_STATE(359)] = 19226, - [SMALL_STATE(360)] = 19237, - [SMALL_STATE(361)] = 19246, - [SMALL_STATE(362)] = 19255, - [SMALL_STATE(363)] = 19266, - [SMALL_STATE(364)] = 19277, - [SMALL_STATE(365)] = 19286, - [SMALL_STATE(366)] = 19297, - [SMALL_STATE(367)] = 19308, - [SMALL_STATE(368)] = 19319, - [SMALL_STATE(369)] = 19330, - [SMALL_STATE(370)] = 19341, - [SMALL_STATE(371)] = 19352, - [SMALL_STATE(372)] = 19360, - [SMALL_STATE(373)] = 19368, - [SMALL_STATE(374)] = 19376, - [SMALL_STATE(375)] = 19384, - [SMALL_STATE(376)] = 19392, - [SMALL_STATE(377)] = 19400, - [SMALL_STATE(378)] = 19408, - [SMALL_STATE(379)] = 19416, - [SMALL_STATE(380)] = 19424, - [SMALL_STATE(381)] = 19432, - [SMALL_STATE(382)] = 19440, - [SMALL_STATE(383)] = 19448, - [SMALL_STATE(384)] = 19456, - [SMALL_STATE(385)] = 19464, - [SMALL_STATE(386)] = 19472, - [SMALL_STATE(387)] = 19480, - [SMALL_STATE(388)] = 19488, - [SMALL_STATE(389)] = 19496, - [SMALL_STATE(390)] = 19504, - [SMALL_STATE(391)] = 19512, - [SMALL_STATE(392)] = 19520, - [SMALL_STATE(393)] = 19528, + [SMALL_STATE(4)] = 0, + [SMALL_STATE(5)] = 102, + [SMALL_STATE(6)] = 204, + [SMALL_STATE(7)] = 306, + [SMALL_STATE(8)] = 408, + [SMALL_STATE(9)] = 510, + [SMALL_STATE(10)] = 606, + [SMALL_STATE(11)] = 702, + [SMALL_STATE(12)] = 798, + [SMALL_STATE(13)] = 894, + [SMALL_STATE(14)] = 990, + [SMALL_STATE(15)] = 1086, + [SMALL_STATE(16)] = 1182, + [SMALL_STATE(17)] = 1278, + [SMALL_STATE(18)] = 1374, + [SMALL_STATE(19)] = 1470, + [SMALL_STATE(20)] = 1566, + [SMALL_STATE(21)] = 1662, + [SMALL_STATE(22)] = 1758, + [SMALL_STATE(23)] = 1854, + [SMALL_STATE(24)] = 1950, + [SMALL_STATE(25)] = 2046, + [SMALL_STATE(26)] = 2142, + [SMALL_STATE(27)] = 2238, + [SMALL_STATE(28)] = 2334, + [SMALL_STATE(29)] = 2430, + [SMALL_STATE(30)] = 2526, + [SMALL_STATE(31)] = 2622, + [SMALL_STATE(32)] = 2718, + [SMALL_STATE(33)] = 2814, + [SMALL_STATE(34)] = 2910, + [SMALL_STATE(35)] = 3006, + [SMALL_STATE(36)] = 3102, + [SMALL_STATE(37)] = 3198, + [SMALL_STATE(38)] = 3294, + [SMALL_STATE(39)] = 3390, + [SMALL_STATE(40)] = 3486, + [SMALL_STATE(41)] = 3582, + [SMALL_STATE(42)] = 3678, + [SMALL_STATE(43)] = 3774, + [SMALL_STATE(44)] = 3870, + [SMALL_STATE(45)] = 3966, + [SMALL_STATE(46)] = 4062, + [SMALL_STATE(47)] = 4158, + [SMALL_STATE(48)] = 4254, + [SMALL_STATE(49)] = 4350, + [SMALL_STATE(50)] = 4446, + [SMALL_STATE(51)] = 4542, + [SMALL_STATE(52)] = 4638, + [SMALL_STATE(53)] = 4734, + [SMALL_STATE(54)] = 4830, + [SMALL_STATE(55)] = 4926, + [SMALL_STATE(56)] = 5022, + [SMALL_STATE(57)] = 5118, + [SMALL_STATE(58)] = 5214, + [SMALL_STATE(59)] = 5310, + [SMALL_STATE(60)] = 5406, + [SMALL_STATE(61)] = 5502, + [SMALL_STATE(62)] = 5598, + [SMALL_STATE(63)] = 5694, + [SMALL_STATE(64)] = 5790, + [SMALL_STATE(65)] = 5886, + [SMALL_STATE(66)] = 5982, + [SMALL_STATE(67)] = 6078, + [SMALL_STATE(68)] = 6174, + [SMALL_STATE(69)] = 6270, + [SMALL_STATE(70)] = 6366, + [SMALL_STATE(71)] = 6462, + [SMALL_STATE(72)] = 6558, + [SMALL_STATE(73)] = 6654, + [SMALL_STATE(74)] = 6750, + [SMALL_STATE(75)] = 6846, + [SMALL_STATE(76)] = 6893, + [SMALL_STATE(77)] = 6942, + [SMALL_STATE(78)] = 6987, + [SMALL_STATE(79)] = 7033, + [SMALL_STATE(80)] = 7075, + [SMALL_STATE(81)] = 7121, + [SMALL_STATE(82)] = 7167, + [SMALL_STATE(83)] = 7213, + [SMALL_STATE(84)] = 7259, + [SMALL_STATE(85)] = 7305, + [SMALL_STATE(86)] = 7347, + [SMALL_STATE(87)] = 7388, + [SMALL_STATE(88)] = 7431, + [SMALL_STATE(89)] = 7472, + [SMALL_STATE(90)] = 7513, + [SMALL_STATE(91)] = 7554, + [SMALL_STATE(92)] = 7595, + [SMALL_STATE(93)] = 7642, + [SMALL_STATE(94)] = 7683, + [SMALL_STATE(95)] = 7724, + [SMALL_STATE(96)] = 7765, + [SMALL_STATE(97)] = 7831, + [SMALL_STATE(98)] = 7871, + [SMALL_STATE(99)] = 7945, + [SMALL_STATE(100)] = 7997, + [SMALL_STATE(101)] = 8037, + [SMALL_STATE(102)] = 8085, + [SMALL_STATE(103)] = 8139, + [SMALL_STATE(104)] = 8195, + [SMALL_STATE(105)] = 8255, + [SMALL_STATE(106)] = 8313, + [SMALL_STATE(107)] = 8375, + [SMALL_STATE(108)] = 8449, + [SMALL_STATE(109)] = 8517, + [SMALL_STATE(110)] = 8587, + [SMALL_STATE(111)] = 8627, + [SMALL_STATE(112)] = 8667, + [SMALL_STATE(113)] = 8741, + [SMALL_STATE(114)] = 8781, + [SMALL_STATE(115)] = 8821, + [SMALL_STATE(116)] = 8861, + [SMALL_STATE(117)] = 8901, + [SMALL_STATE(118)] = 8941, + [SMALL_STATE(119)] = 9015, + [SMALL_STATE(120)] = 9057, + [SMALL_STATE(121)] = 9097, + [SMALL_STATE(122)] = 9137, + [SMALL_STATE(123)] = 9177, + [SMALL_STATE(124)] = 9251, + [SMALL_STATE(125)] = 9291, + [SMALL_STATE(126)] = 9331, + [SMALL_STATE(127)] = 9371, + [SMALL_STATE(128)] = 9411, + [SMALL_STATE(129)] = 9452, + [SMALL_STATE(130)] = 9492, + [SMALL_STATE(131)] = 9533, + [SMALL_STATE(132)] = 9580, + [SMALL_STATE(133)] = 9619, + [SMALL_STATE(134)] = 9655, + [SMALL_STATE(135)] = 9695, + [SMALL_STATE(136)] = 9735, + [SMALL_STATE(137)] = 9771, + [SMALL_STATE(138)] = 9811, + [SMALL_STATE(139)] = 9851, + [SMALL_STATE(140)] = 9893, + [SMALL_STATE(141)] = 9931, + [SMALL_STATE(142)] = 9971, + [SMALL_STATE(143)] = 10041, + [SMALL_STATE(144)] = 10081, + [SMALL_STATE(145)] = 10118, + [SMALL_STATE(146)] = 10185, + [SMALL_STATE(147)] = 10254, + [SMALL_STATE(148)] = 10321, + [SMALL_STATE(149)] = 10358, + [SMALL_STATE(150)] = 10427, + [SMALL_STATE(151)] = 10462, + [SMALL_STATE(152)] = 10497, + [SMALL_STATE(153)] = 10532, + [SMALL_STATE(154)] = 10573, + [SMALL_STATE(155)] = 10642, + [SMALL_STATE(156)] = 10677, + [SMALL_STATE(157)] = 10744, + [SMALL_STATE(158)] = 10779, + [SMALL_STATE(159)] = 10814, + [SMALL_STATE(160)] = 10861, + [SMALL_STATE(161)] = 10930, + [SMALL_STATE(162)] = 10979, + [SMALL_STATE(163)] = 11030, + [SMALL_STATE(164)] = 11085, + [SMALL_STATE(165)] = 11138, + [SMALL_STATE(166)] = 11195, + [SMALL_STATE(167)] = 11256, + [SMALL_STATE(168)] = 11319, + [SMALL_STATE(169)] = 11384, + [SMALL_STATE(170)] = 11451, + [SMALL_STATE(171)] = 11486, + [SMALL_STATE(172)] = 11553, + [SMALL_STATE(173)] = 11620, + [SMALL_STATE(174)] = 11687, + [SMALL_STATE(175)] = 11756, + [SMALL_STATE(176)] = 11825, + [SMALL_STATE(177)] = 11894, + [SMALL_STATE(178)] = 11963, + [SMALL_STATE(179)] = 12006, + [SMALL_STATE(180)] = 12040, + [SMALL_STATE(181)] = 12106, + [SMALL_STATE(182)] = 12152, + [SMALL_STATE(183)] = 12186, + [SMALL_STATE(184)] = 12228, + [SMALL_STATE(185)] = 12276, + [SMALL_STATE(186)] = 12326, + [SMALL_STATE(187)] = 12380, + [SMALL_STATE(188)] = 12432, + [SMALL_STATE(189)] = 12488, + [SMALL_STATE(190)] = 12548, + [SMALL_STATE(191)] = 12610, + [SMALL_STATE(192)] = 12674, + [SMALL_STATE(193)] = 12708, + [SMALL_STATE(194)] = 12774, + [SMALL_STATE(195)] = 12808, + [SMALL_STATE(196)] = 12842, + [SMALL_STATE(197)] = 12908, + [SMALL_STATE(198)] = 12942, + [SMALL_STATE(199)] = 12976, + [SMALL_STATE(200)] = 13010, + [SMALL_STATE(201)] = 13076, + [SMALL_STATE(202)] = 13110, + [SMALL_STATE(203)] = 13144, + [SMALL_STATE(204)] = 13210, + [SMALL_STATE(205)] = 13244, + [SMALL_STATE(206)] = 13278, + [SMALL_STATE(207)] = 13312, + [SMALL_STATE(208)] = 13378, + [SMALL_STATE(209)] = 13444, + [SMALL_STATE(210)] = 13510, + [SMALL_STATE(211)] = 13576, + [SMALL_STATE(212)] = 13610, + [SMALL_STATE(213)] = 13676, + [SMALL_STATE(214)] = 13710, + [SMALL_STATE(215)] = 13776, + [SMALL_STATE(216)] = 13810, + [SMALL_STATE(217)] = 13844, + [SMALL_STATE(218)] = 13910, + [SMALL_STATE(219)] = 13976, + [SMALL_STATE(220)] = 14042, + [SMALL_STATE(221)] = 14076, + [SMALL_STATE(222)] = 14142, + [SMALL_STATE(223)] = 14208, + [SMALL_STATE(224)] = 14274, + [SMALL_STATE(225)] = 14310, + [SMALL_STATE(226)] = 14376, + [SMALL_STATE(227)] = 14442, + [SMALL_STATE(228)] = 14508, + [SMALL_STATE(229)] = 14542, + [SMALL_STATE(230)] = 14595, + [SMALL_STATE(231)] = 14648, + [SMALL_STATE(232)] = 14701, + [SMALL_STATE(233)] = 14754, + [SMALL_STATE(234)] = 14807, + [SMALL_STATE(235)] = 14860, + [SMALL_STATE(236)] = 14913, + [SMALL_STATE(237)] = 14966, + [SMALL_STATE(238)] = 15019, + [SMALL_STATE(239)] = 15072, + [SMALL_STATE(240)] = 15125, + [SMALL_STATE(241)] = 15178, + [SMALL_STATE(242)] = 15231, + [SMALL_STATE(243)] = 15264, + [SMALL_STATE(244)] = 15297, + [SMALL_STATE(245)] = 15330, + [SMALL_STATE(246)] = 15358, + [SMALL_STATE(247)] = 15386, + [SMALL_STATE(248)] = 15413, + [SMALL_STATE(249)] = 15440, + [SMALL_STATE(250)] = 15467, + [SMALL_STATE(251)] = 15494, + [SMALL_STATE(252)] = 15521, + [SMALL_STATE(253)] = 15548, + [SMALL_STATE(254)] = 15573, + [SMALL_STATE(255)] = 15595, + [SMALL_STATE(256)] = 15617, + [SMALL_STATE(257)] = 15639, + [SMALL_STATE(258)] = 15661, + [SMALL_STATE(259)] = 15683, + [SMALL_STATE(260)] = 15703, + [SMALL_STATE(261)] = 15723, + [SMALL_STATE(262)] = 15751, + [SMALL_STATE(263)] = 15771, + [SMALL_STATE(264)] = 15799, + [SMALL_STATE(265)] = 15827, + [SMALL_STATE(266)] = 15853, + [SMALL_STATE(267)] = 15875, + [SMALL_STATE(268)] = 15895, + [SMALL_STATE(269)] = 15917, + [SMALL_STATE(270)] = 15935, + [SMALL_STATE(271)] = 15956, + [SMALL_STATE(272)] = 15977, + [SMALL_STATE(273)] = 16000, + [SMALL_STATE(274)] = 16023, + [SMALL_STATE(275)] = 16044, + [SMALL_STATE(276)] = 16067, + [SMALL_STATE(277)] = 16090, + [SMALL_STATE(278)] = 16108, + [SMALL_STATE(279)] = 16123, + [SMALL_STATE(280)] = 16138, + [SMALL_STATE(281)] = 16153, + [SMALL_STATE(282)] = 16168, + [SMALL_STATE(283)] = 16183, + [SMALL_STATE(284)] = 16198, + [SMALL_STATE(285)] = 16213, + [SMALL_STATE(286)] = 16228, + [SMALL_STATE(287)] = 16243, + [SMALL_STATE(288)] = 16258, + [SMALL_STATE(289)] = 16272, + [SMALL_STATE(290)] = 16286, + [SMALL_STATE(291)] = 16298, + [SMALL_STATE(292)] = 16312, + [SMALL_STATE(293)] = 16326, + [SMALL_STATE(294)] = 16340, + [SMALL_STATE(295)] = 16354, + [SMALL_STATE(296)] = 16368, + [SMALL_STATE(297)] = 16382, + [SMALL_STATE(298)] = 16396, + [SMALL_STATE(299)] = 16410, + [SMALL_STATE(300)] = 16420, + [SMALL_STATE(301)] = 16434, + [SMALL_STATE(302)] = 16443, + [SMALL_STATE(303)] = 16454, + [SMALL_STATE(304)] = 16465, + [SMALL_STATE(305)] = 16476, + [SMALL_STATE(306)] = 16485, + [SMALL_STATE(307)] = 16494, + [SMALL_STATE(308)] = 16505, + [SMALL_STATE(309)] = 16516, + [SMALL_STATE(310)] = 16525, + [SMALL_STATE(311)] = 16536, + [SMALL_STATE(312)] = 16547, + [SMALL_STATE(313)] = 16558, + [SMALL_STATE(314)] = 16567, + [SMALL_STATE(315)] = 16576, + [SMALL_STATE(316)] = 16587, + [SMALL_STATE(317)] = 16598, + [SMALL_STATE(318)] = 16609, + [SMALL_STATE(319)] = 16620, + [SMALL_STATE(320)] = 16631, + [SMALL_STATE(321)] = 16639, + [SMALL_STATE(322)] = 16647, + [SMALL_STATE(323)] = 16655, + [SMALL_STATE(324)] = 16663, + [SMALL_STATE(325)] = 16671, + [SMALL_STATE(326)] = 16679, + [SMALL_STATE(327)] = 16687, + [SMALL_STATE(328)] = 16695, + [SMALL_STATE(329)] = 16703, + [SMALL_STATE(330)] = 16711, + [SMALL_STATE(331)] = 16719, + [SMALL_STATE(332)] = 16727, + [SMALL_STATE(333)] = 16735, + [SMALL_STATE(334)] = 16743, + [SMALL_STATE(335)] = 16751, + [SMALL_STATE(336)] = 16759, + [SMALL_STATE(337)] = 16767, + [SMALL_STATE(338)] = 16775, + [SMALL_STATE(339)] = 16783, + [SMALL_STATE(340)] = 16791, }; 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 = false}}, SHIFT(145), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(184), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(147), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(139), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(387), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(386), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(375), - [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), - [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(187), - [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(64), - [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(330), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), - [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), - [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(373), - [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), - [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), - [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36), - [49] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(37), - [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38), - [55] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), - [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), - [63] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), - [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), - [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [69] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(195), - [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), - [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(366), - [77] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), - [79] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), - [81] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181), - [83] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(145), - [86] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(184), - [89] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(147), - [92] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(139), - [95] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(387), - [98] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(386), - [101] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(375), - [104] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(47), - [107] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(187), - [110] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(25), - [113] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(64), - [116] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(330), - [119] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(5), - [122] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(9), - [125] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [127] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(285), - [130] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), - [132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), - [136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), - [138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), - [140] = {.entry = {.count = 1, .reusable = false}}, SHIFT(85), - [142] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), - [144] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), - [146] = {.entry = {.count = 1, .reusable = false}}, SHIFT(84), - [148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), - [150] = {.entry = {.count = 1, .reusable = false}}, SHIFT(134), - [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [154] = {.entry = {.count = 1, .reusable = false}}, SHIFT(80), - [156] = {.entry = {.count = 1, .reusable = false}}, SHIFT(328), - [158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), - [160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(283), - [164] = {.entry = {.count = 1, .reusable = false}}, SHIFT(199), - [166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), - [168] = {.entry = {.count = 1, .reusable = false}}, SHIFT(200), - [170] = {.entry = {.count = 1, .reusable = false}}, SHIFT(180), - [172] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), - [174] = {.entry = {.count = 1, .reusable = false}}, SHIFT(246), - [176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), - [178] = {.entry = {.count = 1, .reusable = false}}, SHIFT(81), - [180] = {.entry = {.count = 1, .reusable = false}}, SHIFT(323), - [182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), - [184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [186] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), - [188] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), - [190] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), - [192] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), - [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), - [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), - [198] = {.entry = {.count = 1, .reusable = false}}, SHIFT(376), - [200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [204] = {.entry = {.count = 1, .reusable = false}}, SHIFT(369), - [206] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [208] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [210] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [212] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), - [214] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), - [216] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(376), - [219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 2, 0, 0), - [221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 2, 0, 0), - [223] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [225] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [227] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(374), - [230] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 2, 0, 3), - [232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 2, 0, 3), - [234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(374), - [236] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), - [238] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), - [240] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), - [242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), - [244] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [246] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), - [250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 4), - [252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 4), - [254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(334), - [258] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [262] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), - [264] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 10), - [266] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 10), - [268] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 12), - [270] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 12), - [272] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 14), - [274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 14), - [276] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), - [278] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), - [280] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 16), - [282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 16), - [284] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 17), - [286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 17), - [288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 20), - [290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 20), - [292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 22), - [294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 22), - [296] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 5, 0, 24), - [298] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 5, 0, 24), - [300] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 27), - [302] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 27), - [304] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 5), - [306] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 5), - [308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 13), - [310] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 13), - [312] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 6), - [314] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 6), - [316] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [318] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [320] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 7), - [322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 7), - [324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [328] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 19), - [330] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 19), - [332] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [334] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [336] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 21), - [338] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 21), - [340] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 5), - [342] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 5), - [344] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 23), - [346] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 23), - [348] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 29), - [350] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 29), - [352] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [356] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 28), - [358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 28), - [360] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 30), - [362] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 30), - [364] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [366] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [368] = {.entry = {.count = 1, .reusable = false}}, SHIFT(356), - [370] = {.entry = {.count = 1, .reusable = false}}, SHIFT(153), - [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), - [374] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(389), - [377] = {.entry = {.count = 1, .reusable = false}}, SHIFT(389), - [379] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(378), - [382] = {.entry = {.count = 1, .reusable = false}}, SHIFT(378), - [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(381), - [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(342), - [388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [392] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), - [394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [398] = {.entry = {.count = 1, .reusable = false}}, SHIFT(69), - [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), - [402] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70), - [404] = {.entry = {.count = 1, .reusable = false}}, SHIFT(72), - [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), - [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(331), - [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [414] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), - [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [418] = {.entry = {.count = 1, .reusable = false}}, SHIFT(363), - [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), - [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [424] = {.entry = {.count = 1, .reusable = false}}, SHIFT(24), - [426] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), - [428] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), - [430] = {.entry = {.count = 1, .reusable = false}}, SHIFT(385), - [432] = {.entry = {.count = 1, .reusable = false}}, SHIFT(371), - [434] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(385), - [437] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(371), - [440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), - [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275), - [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(379), - [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [450] = {.entry = {.count = 1, .reusable = false}}, SHIFT(52), - [452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), - [454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [456] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), - [458] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), - [460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), - [462] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), - [464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), - [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), - [470] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), - [472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(336), - [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), - [478] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 26), - [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), - [484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(326), - [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), - [488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), - [492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), - [494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), - [496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), - [498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), - [500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), - [502] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 18), - [504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), - [506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), - [508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), - [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), - [512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), - [514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), - [516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), - [520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(265), - [524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [526] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), - [530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), - [532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(361), - [534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), - [538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), - [540] = {.entry = {.count = 1, .reusable = false}}, SHIFT(293), - [542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(280), - [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(279), - [546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), - [548] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [550] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), - [552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), - [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(353), - [556] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [558] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [560] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), - [562] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), - [564] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), - [566] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), - [568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278), - [570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(277), - [572] = {.entry = {.count = 1, .reusable = false}}, SHIFT(276), - [574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), - [576] = {.entry = {.count = 1, .reusable = false}}, SHIFT(288), - [578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), - [580] = {.entry = {.count = 1, .reusable = false}}, SHIFT(284), - [582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), - [584] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), - [586] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), - [588] = {.entry = {.count = 1, .reusable = false}}, SHIFT(287), - [590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), - [592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), - [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(286), - [596] = {.entry = {.count = 1, .reusable = false}}, SHIFT(282), - [598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), - [600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), - [602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), - [604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(354), - [606] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), - [608] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), - [610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), - [612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(255), - [614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), - [616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), - [618] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(354), - [621] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [623] = {.entry = {.count = 1, .reusable = false}}, SHIFT(380), - [625] = {.entry = {.count = 1, .reusable = false}}, SHIFT(61), - [627] = {.entry = {.count = 1, .reusable = false}}, SHIFT(49), - [629] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [631] = {.entry = {.count = 1, .reusable = true}}, SHIFT(319), - [633] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), - [635] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(380), - [638] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), - [640] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), - [642] = {.entry = {.count = 1, .reusable = false}}, SHIFT(45), - [644] = {.entry = {.count = 1, .reusable = false}}, SHIFT(44), - [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(372), - [648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), - [650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(338), - [652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(268), - [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [656] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(370), - [659] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [661] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), - [663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), - [665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(340), - [667] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254), - [669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(346), - [671] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), - [673] = {.entry = {.count = 1, .reusable = true}}, SHIFT(191), - [675] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 11), - [677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(332), - [681] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), - [683] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), - [685] = {.entry = {.count = 1, .reusable = true}}, SHIFT(348), - [687] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), - [689] = {.entry = {.count = 1, .reusable = true}}, SHIFT(345), - [691] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [693] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [695] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), - [699] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), - [701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), - [703] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), - [705] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [707] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 25), - [709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(258), - [711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), - [713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), - [715] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [717] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), - [719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), - [721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(390), - [723] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [725] = {.entry = {.count = 1, .reusable = true}}, SHIFT(337), - [727] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), - [729] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), - [731] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), - [733] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), - [735] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [737] = {.entry = {.count = 1, .reusable = true}}, SHIFT(358), - [739] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [741] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360), - [743] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), - [745] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), - [747] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), - [749] = {.entry = {.count = 1, .reusable = true}}, SHIFT(357), - [751] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [753] = {.entry = {.count = 1, .reusable = true}}, SHIFT(359), - [755] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), - [757] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), - [759] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [761] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), - [763] = {.entry = {.count = 1, .reusable = true}}, SHIFT(364), - [765] = {.entry = {.count = 1, .reusable = true}}, SHIFT(350), - [767] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), - [769] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [771] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [773] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), - [775] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(84), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), + [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(115), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(9), + [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(279), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), + [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [47] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(84), + [50] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(120), + [53] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(78), + [56] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(75), + [59] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(321), + [62] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(327), + [65] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(325), + [68] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(12), + [71] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(115), + [74] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(36), + [77] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(9), + [80] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(279), + [83] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), + [86] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(4), + [89] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [91] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(230), + [94] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), + [96] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), + [98] = {.entry = {.count = 1, .reusable = false}}, SHIFT(129), + [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(73), + [104] = {.entry = {.count = 1, .reusable = false}}, SHIFT(286), + [106] = {.entry = {.count = 1, .reusable = false}}, SHIFT(134), + [108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), + [110] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), + [112] = {.entry = {.count = 1, .reusable = false}}, SHIFT(128), + [114] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [116] = {.entry = {.count = 1, .reusable = false}}, SHIFT(182), + [118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [120] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), + [122] = {.entry = {.count = 1, .reusable = false}}, SHIFT(284), + [124] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), + [130] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [132] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), + [136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [138] = {.entry = {.count = 1, .reusable = false}}, SHIFT(86), + [140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [146] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [148] = {.entry = {.count = 1, .reusable = false}}, SHIFT(317), + [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), + [152] = {.entry = {.count = 1, .reusable = false}}, SHIFT(332), + [154] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), + [156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), + [158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), + [160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 2, 0, 0), + [162] = {.entry = {.count = 1, .reusable = false}}, SHIFT(338), + [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 2, 0, 0), + [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 2, 0, 3), + [168] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 2, 0, 3), + [170] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), + [172] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(338), + [175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), + [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), + [179] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(332), + [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), + [184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), + [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), + [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 6), + [190] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 6), + [192] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), + [198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 12), + [200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 12), + [202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 14), + [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 14), + [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 5), + [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 5), + [210] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 16), + [212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), + [214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 16), + [216] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), + [218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), + [220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), + [222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 5), + [224] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 5), + [226] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 20), + [228] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 20), + [230] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), + [236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [240] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), + [242] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), + [244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [246] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), + [248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [250] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [252] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [254] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 4), + [256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), + [262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [264] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 4), + [266] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 13), + [268] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 13), + [270] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 10), + [272] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 10), + [274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 7), + [276] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 7), + [278] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 17), + [280] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 17), + [282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [284] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 19), + [288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 19), + [290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [296] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [298] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 21), + [300] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 21), + [302] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 22), + [304] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 22), + [306] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), + [312] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 26), + [314] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 26), + [316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 23), + [318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 23), + [320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 6, 0, 28), + [322] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 6, 0, 28), + [324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 27), + [326] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 27), + [328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [330] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 29), + [334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 29), + [336] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 30), + [338] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 30), + [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), + [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [344] = {.entry = {.count = 1, .reusable = false}}, SHIFT(29), + [346] = {.entry = {.count = 1, .reusable = false}}, SHIFT(312), + [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(330), + [350] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(333), + [353] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(330), + [356] = {.entry = {.count = 1, .reusable = false}}, SHIFT(333), + [358] = {.entry = {.count = 1, .reusable = false}}, SHIFT(315), + [360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), + [362] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), + [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), + [366] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 25), + [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(326), + [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [378] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), + [382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [384] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), + [386] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), + [388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [390] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), + [392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), + [396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [398] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), + [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(293), + [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245), + [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [412] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 18), + [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), + [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), + [424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [428] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), + [430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [434] = {.entry = {.count = 1, .reusable = false}}, SHIFT(74), + [436] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), + [438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [440] = {.entry = {.count = 1, .reusable = false}}, SHIFT(44), + [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [448] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), + [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [460] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(301), + [464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), + [470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), + [478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), + [484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), + [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), + [488] = {.entry = {.count = 1, .reusable = false}}, SHIFT(251), + [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), + [492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(337), + [494] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(337), + [497] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [499] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), + [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), + [505] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [507] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [509] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), + [511] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), + [513] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), + [515] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), + [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), + [519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237), + [521] = {.entry = {.count = 1, .reusable = false}}, SHIFT(240), + [523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), + [525] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), + [527] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), + [529] = {.entry = {.count = 1, .reusable = false}}, SHIFT(235), + [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), + [533] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), + [535] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), + [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(234), + [539] = {.entry = {.count = 1, .reusable = false}}, SHIFT(236), + [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), + [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), + [545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(255), + [549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), + [551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), + [555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), + [557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), + [561] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(303), + [564] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [566] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(323), + [569] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), + [571] = {.entry = {.count = 1, .reusable = false}}, SHIFT(323), + [573] = {.entry = {.count = 1, .reusable = false}}, SHIFT(11), + [575] = {.entry = {.count = 1, .reusable = false}}, SHIFT(64), + [577] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), + [579] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), + [581] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), + [583] = {.entry = {.count = 1, .reusable = false}}, SHIFT(52), + [585] = {.entry = {.count = 1, .reusable = false}}, SHIFT(37), + [587] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), + [589] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), + [591] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), + [593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), + [595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [597] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 11), + [599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(329), + [603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), + [607] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), + [609] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), + [611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), + [613] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), + [615] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [617] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(302), + [620] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), + [624] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 24), + [626] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [628] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), + [632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), + [634] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(340), + [638] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254), + [642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [644] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), + [650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), + [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), + [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), + [664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), + [670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), + [672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), + [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), + [676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), + [684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), + [690] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), + [694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [698] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/if.txt b/crates/tree-sitter-command-cad-model/test/corpus/if.txt index 912b50d..6c2ff2c 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/if.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/if.txt @@ -2,7 +2,7 @@ If else ================== -if true "" else "" +if true then "" else "" --- @@ -20,7 +20,7 @@ if true "" else "" With other operations ================== -1 + if true "" else "" +1 + if true then "" else "" --- From 0bb9ea86812e7c42f7eb7a3cc94d112224420a49 Mon Sep 17 00:00:00 2001 From: James Carl Date: Thu, 1 Jan 2026 17:30:56 -0500 Subject: [PATCH 056/106] Finish unit tests for Vectors --- crates/interpreter/src/execution/values/vector.rs | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/crates/interpreter/src/execution/values/vector.rs b/crates/interpreter/src/execution/values/vector.rs index 1ee1b59..6431c3a 100644 --- a/crates/interpreter/src/execution/values/vector.rs +++ b/crates/interpreter/src/execution/values/vector.rs @@ -1369,9 +1369,7 @@ mod test { let product = test_run("<(0m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - let notice_me = 0; - // TODO we can't implement this test until we have working if statements. - // test_run("<(0m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Any if (c == 0m) 1m else 1 'm^2')").unwrap(); + test_run("<(0m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); } #[test] @@ -1382,9 +1380,7 @@ mod test { let product = test_run("<(0m, 1m, 2m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2', 2 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - let notice_me = 0; - // TODO we can't implement this test until we have working if statements. - // test_run("<(0m, 1m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Any if (c == 0m) 1m else 1 'm^2')").unwrap_err(); + test_run("<(0m, 1m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); } #[test] @@ -1395,9 +1391,7 @@ mod test { let product = test_run("<(0m, 1m, 2m, 3m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2', 2 'm^2', 3 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - let notice_me = 0; - // TODO we can't implement this test until we have working if statements. - // test_run("<(0m, 1m, 1m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Any if (c == 0m) 1m else 1 'm^2')").unwrap_err(); + test_run("<(0m, 1m, 1m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); } #[test] From 52c4e02daf3414abf2addac6aae4e9379a342936 Mon Sep 17 00:00:00 2001 From: James Carl Date: Thu, 1 Jan 2026 21:34:20 -0500 Subject: [PATCH 057/106] Add scalar methods --- crates/interpreter/src/compile/expressions.rs | 4 +- crates/interpreter/src/execution/mod.rs | 2 +- .../src/execution/standard_environment.rs | 16 +- .../src/execution/values/closure.rs | 6 +- .../src/execution/values/scalar.rs | 1239 +++++--- .../src/execution/values/value_type.rs | 8 +- .../src/execution/values/vector.rs | 80 +- .../tree-sitter-command-cad-model/grammar.js | 2 +- .../src/grammar.json | 2 +- .../src/node-types.json | 4 + .../src/parser.c | 2715 +++++++++-------- .../test/corpus/closure.txt | 25 +- 12 files changed, 2278 insertions(+), 1825 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 315e16d..90ab25f 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -2063,7 +2063,7 @@ mod test { #[test] fn method_call_no_arguments() { - let root = full_compile("5u:c()"); + let root = full_compile("5u::c()"); let call = root.node.as_methodcall().unwrap(); let to_call = &call.node.to_call; assert_eq!( @@ -2105,7 +2105,7 @@ mod test { #[test] fn method_call_with_arguments() { - let root = full_compile("83u:c(value = 95u)"); + let root = full_compile("83u::c(value = 95u)"); let call = root.node.as_methodcall().unwrap(); let to_call = &call.node.to_call; let dict = &call.node.argument.node; diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index beb99dc..bc58e19 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -345,7 +345,7 @@ pub fn execute_if_expression( pub(crate) fn test_run(input: &str) -> ExpressionResult { use standard_environment::build_prelude; - let root = compile::full_compile(input); + let root = dbg!(compile::full_compile(input)); let prelude = build_prelude(); let mut stack = Stack::new(prelude); diff --git a/crates/interpreter/src/execution/standard_environment.rs b/crates/interpreter/src/execution/standard_environment.rs index 883b24f..44d667f 100644 --- a/crates/interpreter/src/execution/standard_environment.rs +++ b/crates/interpreter/src/execution/standard_environment.rs @@ -1,8 +1,8 @@ use std::collections::HashMap; -use common_data_types::Dimension; +use common_data_types::{Dimension, Float}; -use crate::execution::values::ValueNone; +use crate::execution::values::{Scalar, ValueNone}; use super::values::{Dictionary, Value, ValueType}; @@ -39,7 +39,17 @@ fn build_std() -> Dictionary { /// Adds library for constants. fn build_consts() -> Dictionary { - let types: HashMap = HashMap::from_iter([("None".into(), ValueNone.into())]); + let types: HashMap = HashMap::from_iter([ + ("None".into(), ValueNone.into()), + ( + "Infinity".into(), + Scalar { + dimension: Dimension::zero(), + value: Float::new(common_data_types::RawFloat::INFINITY).expect("Infinity was NaN"), + } + .into(), + ), + ]); Dictionary::from(types) } diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 64d6b2e..dadccbb 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -681,7 +681,7 @@ mod test { #[test] fn call_custom_method() { let product = test_run( - "let object = (value = 5u, method = () -> std.types.UInt: self.value;); in object:method()", + "let object = (value = 5u, method = () -> std.types.UInt: self.value;); in object::method()", ) .unwrap(); assert_eq!(product, values::UnsignedInteger::from(5).into()); @@ -859,7 +859,7 @@ mod test { use crate::execution::standard_environment::build_prelude; let root = crate::compile::full_compile( - "let object = (value = 5u, test_method = provided_test_method); in object:test_method()", + "let object = (value = 5u, test_method = provided_test_method); in object::test_method()", ); let prelude = build_prelude(); let mut stack = Stack::new(prelude); @@ -884,7 +884,7 @@ mod test { use crate::execution::standard_environment::build_prelude; let root = crate::compile::full_compile( - "let object = (value = 5u, test_method = provided_test_method); in object:test_method(to_add = 10u)", + "let object = (value = 5u, test_method = provided_test_method); in object::test_method(to_add = 10u)", ); let prelude = build_prelude(); let mut stack = Stack::new(prelude); diff --git a/crates/interpreter/src/execution/values/scalar.rs b/crates/interpreter/src/execution/values/scalar.rs index 0f68eea..940821e 100644 --- a/crates/interpreter/src/execution/values/scalar.rs +++ b/crates/interpreter/src/execution/values/scalar.rs @@ -15,7 +15,7 @@ * You should have received a copy of the GNU Affero General Public License along with this * program. If not, see . */ -use std::{borrow::Cow, cmp::Ordering}; +use std::{borrow::Cow, cmp::Ordering, f64::consts::PI}; use common_data_types::{Dimension, Float, FloatIsNan}; @@ -24,8 +24,9 @@ use crate::{ execution::{ errors::{ExpressionResult, GenericFailure, Raise}, logging::RuntimeLog, - values::StaticType, + values::{self, MissingAttributeError, StaticType, Vector2}, }, + static_method, }; use super::{value_type::ValueType, DowncastError, Object, StaticTypeName, Value}; @@ -187,7 +188,7 @@ impl Object for Scalar { stack_trace: &[SourceReference], rhs: Value, ) -> ExpressionResult { - let rhs = self.unpack_for_addition_or_subtraction(stack_trace, rhs)?; + let rhs = self.unpack_same_dimension(stack_trace, rhs)?; let value = Float::new(*self.value + *rhs.value).unwrap_not_nan(stack_trace)?; @@ -203,7 +204,7 @@ impl Object for Scalar { stack_trace: &[SourceReference], rhs: Value, ) -> ExpressionResult { - let rhs = self.unpack_for_addition_or_subtraction(stack_trace, rhs)?; + let rhs = self.unpack_same_dimension(stack_trace, rhs)?; let value = Float::new(*self.value - *rhs.value).unwrap_not_nan(stack_trace)?; @@ -268,407 +269,510 @@ impl Object for Scalar { .to_error(stack_trace)) } } - // fn method_call( - // &self, - // context: &mut ExecutionContext, - // stack_trace: &[SourceReference], - // attribute: &S, - // arguments: Vec, - // expressions: &[Expression], - // ) -> ExpressionResult { - // match attribute.as_str() { - // "to_number" => |_context: &mut ExecutionContext, - // stack_trace: &[SourceReference], - // ty: SString| - // -> ExpressionResult { - // self.convert_to_number(span, &ty.as_str(span)?) - // } - // .auto_call(context, span, arguments, expressions), - // "abs" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // Ok(Self { - // value: Float::new(self.value.abs()).unwrap_not_nan(span)?, - // ..self.clone() - // } - // .into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "clamp" => |_context: &mut ExecutionContext, - // stack_trace: &[SourceReference], - // min: Value, - // max: Value| - // -> ExpressionResult { - // let min = self.unpack_for_addition_or_subtraction(span, &min)?; - // let max = self.unpack_for_addition_or_subtraction(span, &max)?; - - // Ok(Self { - // value: self.value.clamp(min.value, max.value), - // ..self.clone() - // } - // .into()) - // } - // .auto_call(context, span, arguments, expressions), - // "copysign" => |_context: &mut ExecutionContext, - // stack_trace: &[SourceReference], - // sign: Number| - // -> ExpressionResult { - // let sign = sign.to_index(); - - // Ok(Self { - // value: Float::new(self.value.copysign(sign as RawFloat)) - // .unwrap_not_nan(span)?, - // ..self.clone() - // } - // .into()) - // } - // .auto_call(context, span, arguments, expressions), - // "hypot" => |_context: &mut ExecutionContext, - // stack_trace: &[SourceReference], - // other: Value| - // -> ExpressionResult { - // let other = self.unpack_for_addition_or_subtraction(span, &other)?; - - // Ok(Self { - // value: Float::new(self.value.hypot(*other.value)).unwrap_not_nan(span)?, - // ..self.clone() - // } - // .into()) - // } - // .auto_call(context, span, arguments, expressions), - // "is_finite" => { - // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { - // Ok(self.value.is_finite().into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "is_infinite" => { - // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { - // Ok(self.value.is_infinite().into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "is_normal" => { - // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { - // Ok(self.value.is_normal().into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "cbrt" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // Ok(Self { - // dimension: self.dimension / 3, - // value: Float::new(self.value.cbrt()).unwrap_not_nan(span)?, - // } - // .into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "pow" => |_context: &mut ExecutionContext, - // _stack_trace: &[SourceReference], - // exponent: Scalar| - // -> ExpressionResult { - // let exponent = exponent.to_number(span)?; - - // self.check_is_zero_dimension(span)?; - - // Ok(Self { - // dimension: self.dimension, - // value: Float::new(self.value.powf(exponent.into_inner())) - // .unwrap_not_nan(span)?, - // } - // .into()) - // } - // .auto_call(context, span, arguments, expressions), - // "powi" => |_context: &mut ExecutionContext, - // _stack_trace: &[SourceReference], - // exponent: Number| - // -> ExpressionResult { - // let exponent = exponent.to_index() as i8; - - // Ok(Self { - // dimension: self.dimension * exponent, - // value: Float::new(self.value.powi(exponent as i32)).unwrap_not_nan(span)?, - // } - // .into()) - // } - // .auto_call(context, span, arguments, expressions), - // "sqrt" => { - // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { - // Ok(Self { - // dimension: self.dimension / 2, - // value: Float::new(self.value.sqrt()).unwrap_not_nan(span)?, - // } - // .into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "is_sign_negative" => { - // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { - // Ok(self.value.is_sign_negative().into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "is_sign_positive" => { - // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { - // Ok(self.value.is_sign_positive().into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "recip" => { - // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { - // Ok(Self { - // dimension: -self.dimension, - // value: Float::new(1.0 / self.value.into_inner()).unwrap_not_nan(span)?, - // } - // .into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "round" => |_context: &mut ExecutionContext, - // stack_trace: &[SourceReference], - // unit: Value| - // -> ExpressionResult { - // let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; - - // let value = conversion_factor.convert_from_measurement_to_number(span, self)?; - // let value = Float::new(value.round()).unwrap_not_nan(span)?; - - // Ok(Self { - // dimension: self.dimension, - // value: conversion_factor.convert_to_base_unit(value), - // } - // .into()) - // } - // .auto_call_optional(context, span, arguments, expressions), - // "trunc" => |_context: &mut ExecutionContext, - // stack_trace: &[SourceReference], - // unit: Value| - // -> ExpressionResult { - // let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; - - // let value = conversion_factor.convert_from_measurement_to_number(span, self)?; - // let value = Float::new(value.trunc()).unwrap_not_nan(span)?; - - // Ok(Self { - // dimension: self.dimension, - // value: conversion_factor.convert_to_base_unit(value), - // } - // .into()) - // } - // .auto_call_optional(context, span, arguments, expressions), - // "fract" => |_context: &mut ExecutionContext, - // stack_trace: &[SourceReference], - // unit: Value| - // -> ExpressionResult { - // let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; - - // let value = conversion_factor.convert_from_measurement_to_number(span, self)?; - // let value = Float::new(value.fract()).unwrap_not_nan(span)?; - - // Ok(Self { - // dimension: self.dimension, - // value: conversion_factor.convert_to_base_unit(value), - // } - // .into()) - // } - // .auto_call_optional(context, span, arguments, expressions), - // "floor" => |_context: &mut ExecutionContext, - // stack_trace: &[SourceReference], - // unit: Value| - // -> ExpressionResult { - // let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; - - // let value = conversion_factor.convert_from_measurement_to_number(span, self)?; - // let value = Float::new(value.floor()).unwrap_not_nan(span)?; - - // Ok(Self { - // dimension: self.dimension, - // value: conversion_factor.convert_to_base_unit(value), - // } - // .into()) - // } - // .auto_call_optional(context, span, arguments, expressions), - // "ceil" => |_context: &mut ExecutionContext, - // stack_trace: &[SourceReference], - // unit: Value| - // -> ExpressionResult { - // let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; - - // let value = conversion_factor.convert_from_measurement_to_number(span, self)?; - // let value = Float::new(value.ceil()).unwrap_not_nan(span)?; - - // Ok(Self { - // dimension: self.dimension, - // value: conversion_factor.convert_to_base_unit(value), - // } - // .into()) - // } - // .auto_call_optional(context, span, arguments, expressions), - // "max" => |_context: &mut ExecutionContext, - // _stack_trace: &[SourceReference], - // other: Value| - // -> ExpressionResult { - // let other = self.unpack_for_addition_or_subtraction(span, &other)?; - // Ok(Float::new(*self.value.max(other.value)) - // .unwrap_not_nan(span)? - // .into()) - // } - // .auto_call(context, span, arguments, expressions), - // "min" => |_context: &mut ExecutionContext, - // _stack_trace: &[SourceReference], - // other: Value| - // -> ExpressionResult { - // let other = self.unpack_for_addition_or_subtraction(span, &other)?; - // Ok(Float::new(*self.value.min(other.value)) - // .unwrap_not_nan(span)? - // .into()) - // } - // .auto_call(context, span, arguments, expressions), - // "mul_add" => |context: &mut ExecutionContext, - // stack_trace: &[SourceReference], - // a: Value, - // b: Value| - // -> ExpressionResult { - // let multiply_result = self.multiply(context.log, span, &b)?; - // let add_result = multiply_result.addition(context.log, span, &a)?; - - // Ok(add_result) - // } - // .auto_call(context, span, arguments, expressions), - // "signum" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // Float::new(self.value.signum()) - // .unwrap_not_nan(span) - // .map(|n| n.into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "acos" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // self.check_inverse_trig_compatible(span)?; - // Float::new((self.value * consts::PI).acos()) - // .unwrap_not_nan(span) - // .map(|n| n.into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "acosh" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // self.check_inverse_trig_compatible(span)?; - // Float::new((self.value * consts::PI).acosh()) - // .unwrap_not_nan(span) - // .map(|n| n.into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "asin" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // self.check_inverse_trig_compatible(span)?; - // Float::new((self.value * consts::PI).asin()) - // .unwrap_not_nan(span) - // .map(|n| n.into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "asinh" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // self.check_inverse_trig_compatible(span)?; - // Float::new((self.value * consts::PI).asinh()) - // .unwrap_not_nan(span) - // .map(|n| n.into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "atan" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // self.check_inverse_trig_compatible(span)?; - // Float::new((self.value * consts::PI).atan()) - // .unwrap_not_nan(span) - // .map(|n| n.into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "atanh" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // self.check_inverse_trig_compatible(span)?; - // Float::new((self.value * consts::PI).atanh()) - // .unwrap_not_nan(span) - // .map(|n| n.into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "cos" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // self.check_trig_compatible(span)?; - // Float::new((self.value * consts::PI).cos()) - // .unwrap_not_nan(span) - // .map(|n| n.into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "cosh" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // self.check_trig_compatible(span)?; - // Float::new((self.value * consts::PI).cosh()) - // .unwrap_not_nan(span) - // .map(|n| n.into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "sin" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // self.check_trig_compatible(span)?; - // Float::new((self.value * consts::PI).sin()) - // .unwrap_not_nan(span) - // .map(|n| n.into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "sin_cos" => { - // |_context: &mut ExecutionContext, _stack_trace: &[SourceReference]| -> ExpressionResult { - // self.check_trig_compatible(span)?; - // let (sin, cos) = (self.value * consts::PI).sin_cos(); - - // Ok(Vector2 { - // dimension: Dimension::zero(), - // value: NVector::>::new(cos, sin), - // } - // .into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "sinh" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // self.check_trig_compatible(span)?; - // Float::new((self.value * consts::PI).sinh()) - // .unwrap_not_nan(span) - // .map(|n| n.into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "tan" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // self.check_trig_compatible(span)?; - // Float::new((self.value * consts::PI).tan()) - // .unwrap_not_nan(span) - // .map(|n| n.into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // "tanh" => { - // |_context: &mut ExecutionContext, stack_trace: &[SourceReference]| -> ExpressionResult { - // self.check_trig_compatible(span)?; - // Float::new((self.value * consts::PI).tanh()) - // .unwrap_not_nan(span) - // .map(|n| n.into()) - // } - // .auto_call(context, span, arguments, expressions) - // } - // // TODO we need functions to convert zero dimensional types to: Angles, Constitute Concentration, Information, Solid Angle, and Temperature. - // _ => Err(Failure::UnknownAttribute(attribute.clone())), - // } - // } + + fn get_attribute( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + attribute: &str, + ) -> ExpressionResult { + match attribute { + "to_signed_integer" => Ok(static_method!( + Scalar_to_signed_integer( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::SignedInteger + { + if this.dimension.is_zero_dimension() { + Ok(values::SignedInteger::from(*this.value as i64).into()) + } else { + Err(GenericFailure("Only zero dimensional scalars can be converted into an integer") + .to_error(stack_trace.iter())) + } + }).clone()), + "to_unsigned_integer" => Ok(static_method!( + Scalar_to_unsigned_integer( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::UnsignedInteger + { + if this.dimension.is_zero_dimension() { + if *this.value >= 0.0 { + Ok(values::UnsignedInteger::from(*this.value as u64).into()) + } else { + Err(GenericFailure("Negative values cannot be converted to signed integers") + .to_error(stack_trace.iter())) + } + } else { + Err(GenericFailure("Only zero dimensional scalars can be converted into an integer") + .to_error(stack_trace.iter())) + } + }).clone()), + "abs" => Ok(static_method!( + Scalar_abs( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::UnsignedInteger + { + Ok(Self { + dimension: this.dimension, + value: Float::new(this.value.abs()).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "clamp" => Ok(static_method!( + Scalar_clamp( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self, + min: Value, + max: Value) -> ValueType::UnsignedInteger + { + let min = this.unpack_same_dimension(stack_trace, min)?; + let max = this.unpack_same_dimension(stack_trace, max)?; + + Ok(Self { + dimension: this.dimension, + value: this.value.clamp(min.value, max.value) + }.into()) + }).clone()), + "copysign" => Ok(static_method!( + Scalar_copysign( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self, + sign: Zero) -> ValueType::UnsignedInteger + { + Ok(Self { + dimension: Dimension::zero(), + value: Float::new(this.value.copysign(*sign.value)).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "hypot" => Ok(static_method!( + Scalar_hypot( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self, + other: Value) -> ValueType::UnsignedInteger + { + let other = this.unpack_same_dimension(stack_trace, other)?; + + Ok(Self { + dimension: Dimension::zero(), + value: Float::new(this.value.hypot(*other.value)).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "is_finite" => Ok(static_method!( + Scalar_is_finite( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + Ok(values::Boolean(this.value.is_finite()).into()) + }).clone()), + "is_infinite" => Ok(static_method!( + Scalar_is_infinite( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + Ok(values::Boolean(this.value.is_infinite()).into()) + }).clone()), + "is_normal" => Ok(static_method!( + Scalar_is_normal( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + Ok(values::Boolean(this.value.is_normal()).into()) + }).clone()), + "cbrt" => Ok(static_method!( + Scalar_cbrt( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + Ok(Self { + dimension: this.dimension / 3, + value: Float::new(this.value.cbrt()).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "pow" => Ok(static_method!( + Scalar_pow( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self, + exp: Zero) -> ValueType::Boolean + { + Ok(Self { + dimension: this.dimension * *exp.value as i8, + value: Float::new(this.value.powf(*exp.value)).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "sqrt" => Ok(static_method!( + Scalar_sqrt( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + Ok(Self { + dimension: this.dimension / 2, + value: Float::new(this.value.sqrt()).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "is_sign_negative" => Ok(static_method!( + Scalar_is_sign_negative( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + Ok(values::Boolean(this.value.is_sign_negative()).into()) + }).clone()), + "is_sign_positive" => Ok(static_method!( + Scalar_is_sign_positive( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + Ok(values::Boolean(this.value.is_sign_positive()).into()) + }).clone()), + "recip" => Ok(static_method!( + Scalar_recip( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + Ok(Self { + dimension: -this.dimension, + value: Float::new(this.value.recip()).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "round" => Ok(static_method!( + Scalar_round( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self, + unit: Value) -> ValueType::Boolean + { + let unit = this.unpack_same_dimension(stack_trace, unit)?; + + let value = this.value / unit.value; + + Ok(Self { + dimension: this.dimension, + value: Float::new(value.round() * *unit.value).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "trunc" => Ok(static_method!( + Scalar_trunc( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self, + unit: Value) -> ValueType::Boolean + { + let unit = this.unpack_same_dimension(stack_trace, unit)?; + + let value = this.value / unit.value; + + Ok(Self { + dimension: this.dimension, + value: Float::new(value.trunc() * *unit.value).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "fract" => Ok(static_method!( + Scalar_fract( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self, + unit: Value) -> ValueType::Boolean + { + let unit = this.unpack_same_dimension(stack_trace, unit)?; + + let value = this.value / unit.value; + + Ok(Self { + dimension: this.dimension, + value: Float::new(value.fract() * *unit.value).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "floor" => Ok(static_method!( + Scalar_floor( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self, + unit: Value) -> ValueType::Boolean + { + let unit = this.unpack_same_dimension(stack_trace, unit)?; + + let value = this.value / unit.value; + + Ok(Self { + dimension: this.dimension, + value: Float::new(value.floor() * *unit.value).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "ceil" => Ok(static_method!( + Scalar_ceil( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self, + unit: Value) -> ValueType::Boolean + { + let unit = this.unpack_same_dimension(stack_trace, unit)?; + + let value = this.value / unit.value; + + Ok(Self { + dimension: this.dimension, + value: Float::new(value.ceil() * *unit.value).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "max" => Ok(static_method!( + Scalar_max( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self, + other: Value) -> ValueType::Boolean + { + let other = this.unpack_same_dimension(stack_trace, other)?; + + Ok(Self { + dimension: this.dimension, + value: this.value.max(other.value) + }.into()) + }).clone()), + "min" => Ok(static_method!( + Scalar_min( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self, + other: Value) -> ValueType::Boolean + { + let other = this.unpack_same_dimension(stack_trace, other)?; + + Ok(Self { + dimension: this.dimension, + value: this.value.min(other.value) + }.into()) + }).clone()), + "signum" => Ok(static_method!( + Scalar_signum( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + Ok(Self { + dimension: Dimension::zero(), + value: Float::new(this.value.signum()).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "acos" => Ok(static_method!( + Scalar_acos( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + this.check_inverse_trig_compatible(stack_trace)?; + + Ok(Self { + dimension: Dimension::angle(), + value: Float::new((this.value * PI).acos()).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "acosh" => Ok(static_method!( + Scalar_acosh( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + this.check_inverse_trig_compatible(stack_trace)?; + + Ok(Self { + dimension: Dimension::angle(), + value: Float::new((this.value).acosh() / PI).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "cos" => Ok(static_method!( + Scalar_cos( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + this.check_trig_compatible(stack_trace)?; + + Ok(Self { + dimension: Dimension::zero(), + value: Float::new((this.value * PI).cos()).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "cosh" => Ok(static_method!( + Scalar_cosh( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + this.check_trig_compatible(stack_trace)?; + + Ok(Self { + dimension: Dimension::zero(), + value: Float::new((this.value * PI).cosh()).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "asin" => Ok(static_method!( + Scalar_asin( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + this.check_inverse_trig_compatible(stack_trace)?; + + Ok(Self { + dimension: Dimension::angle(), + value: Float::new((this.value * PI).asin()).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "asinh" => Ok(static_method!( + Scalar_asinh( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + this.check_inverse_trig_compatible(stack_trace)?; + + Ok(Self { + dimension: Dimension::angle(), + value: Float::new((this.value).asinh() / PI).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "sin" => Ok(static_method!( + Scalar_sin( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + this.check_trig_compatible(stack_trace)?; + + Ok(Self { + dimension: Dimension::zero(), + value: Float::new((this.value * PI).sin()).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "sinh" => Ok(static_method!( + Scalar_sinh( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + this.check_trig_compatible(stack_trace)?; + + Ok(Self { + dimension: Dimension::zero(), + value: Float::new((this.value * PI).sinh()).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "cossin" => Ok(static_method!( + Scalar_cossin( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + this.check_trig_compatible(stack_trace)?; + + let (sin, cos) = (this.value * PI).sin_cos(); + Ok(Vector2::new(stack_trace, Dimension::zero(), [cos, sin])?.into()) + }).clone()), + "atan" => Ok(static_method!( + Scalar_atan( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + this.check_inverse_trig_compatible(stack_trace)?; + + Ok(Self { + dimension: Dimension::angle(), + value: Float::new((this.value * PI).atan()).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "atanh" => Ok(static_method!( + Scalar_atanh( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + this.check_inverse_trig_compatible(stack_trace)?; + + Ok(Self { + dimension: Dimension::angle(), + value: Float::new((this.value).atanh() / PI).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "tan" => Ok(static_method!( + Scalar_tan( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + this.check_trig_compatible(stack_trace)?; + + Ok(Self { + dimension: Dimension::zero(), + value: Float::new((this.value * PI).tan()).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + "tanh" => Ok(static_method!( + Scalar_tanh( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + this: Self) -> ValueType::Boolean + { + this.check_trig_compatible(stack_trace)?; + + Ok(Self { + dimension: Dimension::zero(), + value: Float::new((this.value * PI).tanh()).unwrap_not_nan(stack_trace)? + }.into()) + }).clone()), + _ => Err(MissingAttributeError { + name: attribute.into(), + }.to_error(stack_trace)), + } + } // fn export( // &self, @@ -714,14 +818,6 @@ impl Scalar { Ok(Self { dimension, value }) } - fn check_is_zero_dimension(&self, stack_trace: &[SourceReference]) -> ExpressionResult<()> { - if self.dimension.is_zero_dimension() { - Ok(()) - } else { - Err(GenericFailure("Expected zero dimensional type").to_error(stack_trace)) - } - } - fn check_inverse_trig_compatible( &self, stack_trace: &[SourceReference], @@ -744,11 +840,7 @@ impl Scalar { } } - fn is_number(&self) -> bool { - self.dimension.is_zero_dimension() && self.dimension.ratio_type_hint.0 == 0 - } - - fn unpack_for_addition_or_subtraction( + fn unpack_same_dimension( self, stack_trace: &[SourceReference], rhs: Value, @@ -773,6 +865,47 @@ impl Scalar { } } +macro_rules! build_scalar_type { + ($name:ident = $dimension:expr) => { + struct $name(Scalar); + + impl StaticType for $name { + fn static_type() -> ValueType { + ValueType::Scalar(Some($dimension)) + } + } + + impl StaticTypeName for $name { + fn static_type_name() -> &'static str { + stringify!($name) + } + } + + impl enum_downcast::IntoVariant<$name> for Value { + fn into_variant(self) -> Result<$name, Value> { + Ok($name(self.into_variant()?)) + } + } + + impl Into for $name { + fn into(self) -> Scalar { + self.0 + } + } + + impl std::ops::Deref for $name { + type Target = Scalar; + + fn deref(&self) -> &Self::Target { + &self.0 + } + } + }; +} + +build_scalar_type!(Zero = Dimension::zero()); +build_scalar_type!(Angle = Dimension::angle()); + #[cfg(test)] mod test { @@ -885,4 +1018,274 @@ mod test { let product = test_run("2m * 2m == 4'm^2'").unwrap(); assert_eq!(product, Boolean(true).into()); } + + #[test] + fn to_signed_integer() { + let product = test_run("100::to_signed_integer() == 100i").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("(-100)::to_signed_integer() == -100i").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("(100m / 1m)::to_signed_integer() == 100i").unwrap(); + assert_eq!(product, Boolean(true).into()); + + test_run("100m::to_signed_integer()").unwrap_err(); + } + + #[test] + fn to_unsigned_integer() { + let product = test_run("100::to_unsigned_integer() == 100u").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("(100m / 1m)::to_unsigned_integer() == 100u").unwrap(); + assert_eq!(product, Boolean(true).into()); + + test_run("(-100)::to_unsigned_integer()").unwrap_err(); + test_run("100m::to_unsigned_integer()").unwrap_err(); + } + + #[test] + fn abs() { + let product = test_run("(-100)::abs() == 100").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn clamp() { + let product = test_run("(-100)::clamp(min = -50, max = 50) == -50").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("(100)::clamp(min = -50, max = 50) == 50").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn copysign() { + let product = test_run("100::copysign(sign = -50) == -100").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn hypot() { + // 141.4213562373095 was calculated Using `math.sqrt(100 ** 2 + 100 ** 2)` in Python 3.13.9. + let product = test_run("100::hypot(other = 100) - 141.4213562373095 < 0.0001").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn is_finite() { + let product = test_run("std.consts.Infinity::is_finite()").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("5::is_finite()").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("(std.consts.Infinity * 5)::is_finite()").unwrap(); + assert_eq!(product, Boolean(false).into()); + } + + #[test] + fn is_infinite() { + let product = test_run("std.consts.Infinity::is_infinite()").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("5::is_infinite()").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("(std.consts.Infinity * 5)::is_infinite()").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn is_normal() { + let product = test_run("std.consts.Infinity::is_normal()").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("0::is_normal()").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("5::is_normal()").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("(-5)::is_normal()").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn cbrt() { + let product = test_run("(64 'm^3')::cbrt() == 4m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn pow() { + let product = test_run("2m::pow(exp = 2) == 4 'm^2'").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn sqrt() { + let product = test_run("(16 'm^2')::sqrt() == 4m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn is_sign_negative() { + let product = test_run("0::is_sign_negative()").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("(-0)::is_sign_negative()").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("5::is_sign_negative()").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("(-5)::is_sign_negative()").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn is_sign_positive() { + let product = test_run("0::is_sign_positive()").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("(-0)::is_sign_positive()").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("5::is_sign_positive()").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("(-5)::is_sign_positive()").unwrap(); + assert_eq!(product, Boolean(false).into()); + } + + #[test] + fn recip() { + let product = test_run("16ft::recip() == 1 / 16ft").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn round() { + let product = test_run("16.8ft::round(unit = 1ft) == 17ft").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("16.2ft::round(unit = 1ft) == 16ft").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn trunc() { + let product = test_run("16.8ft::trunc(unit = 1ft) == 16ft").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("16.2ft::trunc(unit = 1ft) == 16ft").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn fract() { + let product = test_run("16.8ft::fract(unit = 1ft) - 0.8ft < 0.0000000000001ft").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn floor() { + let product = test_run("16.5ft::floor(unit = 1ft) == 16ft").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn ceil() { + let product = test_run("16.5ft::ceil(unit = 1ft) == 17ft").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn max() { + let product = test_run("16m::max(other = 15m) == 16m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn min() { + let product = test_run("16m::min(other = 15m) == 15m").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signum() { + let product = test_run("16m::signum() == 1").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("(-16m)::signum() == -1").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("0m::signum() == 1").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("(-0m)::signum() == -1").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn acos() { + let product = test_run("0::acos() - 90deg < 0.000000000001deg").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn cosh_acosh() { + let product = test_run("1rad::cosh()::acosh() - 1rad < 0.000000000001rad").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn cos() { + let product = test_run("90deg::cos() - 1 < 0.000000000001").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn asin() { + let product = test_run("0::asin() - 90deg < 0.000000000001deg").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn sinh_asinh() { + let product = test_run("1rad::sinh()::asinh() - 1rad < 0.000000000001rad").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn sin() { + let product = test_run("90deg::sin() - 1 < 0.000000000001").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn cossin() { + let product = test_run("let angle = 45deg; in (angle::cossin() - <(angle::cos(), angle::sin())>)::norm() < 0.0000000001").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn atan() { + let product = test_run("0::atan() == 0deg").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn tanh_atanh() { + let product = test_run("1rad::tanh()::atanh() - 1rad < 0.000000000001rad").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn tan() { + let product = test_run("0deg::tan() == 0").unwrap(); + assert_eq!(product, Boolean(true).into()); + } } diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 7cb484c..9aaa0f4 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -784,18 +784,18 @@ mod test { #[test] fn try_qualify_method() { - let result = test_run("std.types.Bool:try_qualify(to_qualify = true)").unwrap(); + let result = test_run("std.types.Bool::try_qualify(to_qualify = true)").unwrap(); assert_eq!(result, values::Boolean(true).into()); - let result = test_run("std.types.Bool:try_qualify(to_qualify = 5u)").unwrap(); + let result = test_run("std.types.Bool::try_qualify(to_qualify = 5u)").unwrap(); assert_eq!(result, values::Boolean(false).into()); } #[test] fn qualify_method() { - let result = test_run("std.types.Bool:qualify(to_qualify = true)").unwrap(); + let result = test_run("std.types.Bool::qualify(to_qualify = true)").unwrap(); assert_eq!(result, values::ValueNone.into()); - test_run("std.types.Bool:qualify(to_qualify = 5u)").unwrap_err(); + test_run("std.types.Bool::qualify(to_qualify = 5u)").unwrap_err(); } } diff --git a/crates/interpreter/src/execution/values/vector.rs b/crates/interpreter/src/execution/values/vector.rs index 6431c3a..29907ca 100644 --- a/crates/interpreter/src/execution/values/vector.rs +++ b/crates/interpreter/src/execution/values/vector.rs @@ -1194,209 +1194,209 @@ mod test { #[test] fn abs_vector2() { - let product = test_run("<(-1m, -2m)>:abs() == <(1m, 2m)>").unwrap(); + let product = test_run("<(-1m, -2m)>::abs() == <(1m, 2m)>").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn abs_vector3() { - let product = test_run("<(-1m, -2m, -3m)>:abs() == <(1m, 2m, 3m)>").unwrap(); + let product = test_run("<(-1m, -2m, -3m)>::abs() == <(1m, 2m, 3m)>").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn abs_vector4() { - let product = test_run("<(-1m, -2m, -3m, -4m)>:abs() == <(1m, 2m, 3m, 4m)>").unwrap(); + let product = test_run("<(-1m, -2m, -3m, -4m)>::abs() == <(1m, 2m, 3m, 4m)>").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn add_scalar_vector2() { - let product = test_run("<(1m, 2m)>:add_scalar(value = 1m) == <(2m, 3m)>").unwrap(); + let product = test_run("<(1m, 2m)>::add_scalar(value = 1m) == <(2m, 3m)>").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn add_scalar_vector3() { - let product = test_run("<(1m, 2m, 3m)>:add_scalar(value = 1m) == <(2m, 3m, 4m)>").unwrap(); + let product = test_run("<(1m, 2m, 3m)>::add_scalar(value = 1m) == <(2m, 3m, 4m)>").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn add_scalar_vector4() { let product = - test_run("<(1m, 2m, 3m, 4m)>:add_scalar(value = 1m) == <(2m, 3m, 4m, 5m)>").unwrap(); + test_run("<(1m, 2m, 3m, 4m)>::add_scalar(value = 1m) == <(2m, 3m, 4m, 5m)>").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn amax_vector2() { - let product = test_run("<(1m, 2m)>:amax() == 2m").unwrap(); + let product = test_run("<(1m, 2m)>::amax() == 2m").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn amax_vector3() { - let product = test_run("<(1m, 2m, 3m)>:amax() == 3m").unwrap(); + let product = test_run("<(1m, 2m, 3m)>::amax() == 3m").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn amax_vector4() { - let product = test_run("<(1m, 2m, 3m, 4m)>:amax() == 4m").unwrap(); + let product = test_run("<(1m, 2m, 3m, 4m)>::amax() == 4m").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn dot_vector2() { - let product = test_run("<(1m, 0m)>:dot(rhs = <(0.5m, 10m)>) == 0.5m").unwrap(); + let product = test_run("<(1m, 0m)>::dot(rhs = <(0.5m, 10m)>) == 0.5m").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn dot_vector3() { - let product = test_run("<(1m, 0m, 0m)>:dot(rhs = <(0.5m, 10m, 10m)>) == 0.5m").unwrap(); + let product = test_run("<(1m, 0m, 0m)>::dot(rhs = <(0.5m, 10m, 10m)>) == 0.5m").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn dot_vector4() { let product = - test_run("<(1m, 0m, 0m, 0m)>:dot(rhs = <(0.5m, 10m, 10m, 10m)>) == 0.5m").unwrap(); + test_run("<(1m, 0m, 0m, 0m)>::dot(rhs = <(0.5m, 10m, 10m, 10m)>) == 0.5m").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn norm_vector2() { - let product = test_run("<(1m, 0m)>:norm() == 1m").unwrap(); + let product = test_run("<(1m, 0m)>::norm() == 1m").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn norm_vector3() { - let product = test_run("<(1m, 0m, 0m)>:norm() == 1m").unwrap(); + let product = test_run("<(1m, 0m, 0m)>::norm() == 1m").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn norm_vector4() { - let product = test_run("<(1m, 0m, 0m, 0m)>:norm() == 1m").unwrap(); + let product = test_run("<(1m, 0m, 0m, 0m)>::norm() == 1m").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn length_vector2() { - let product = test_run("<(1m, 0m)>:length() == 1m").unwrap(); + let product = test_run("<(1m, 0m)>::length() == 1m").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn length_vector3() { - let product = test_run("<(1m, 0m, 0m)>:length() == 1m").unwrap(); + let product = test_run("<(1m, 0m, 0m)>::length() == 1m").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn length_vector4() { - let product = test_run("<(1m, 0m, 0m, 0m)>:length() == 1m").unwrap(); + let product = test_run("<(1m, 0m, 0m, 0m)>::length() == 1m").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn normalize_vector2() { - let product = test_run("<(5m, 0m)>:normalize() == <(1, 0)>").unwrap(); + let product = test_run("<(5m, 0m)>::normalize() == <(1, 0)>").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn normalize_vector3() { - let product = test_run("<(5m, 0m, 0m)>:normalize() == <(1, 0, 0)>").unwrap(); + let product = test_run("<(5m, 0m, 0m)>::normalize() == <(1, 0, 0)>").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn normalize_vector4() { - let product = test_run("<(5m, 0m, 0m, 0m)>:normalize() == <(1, 0, 0, 0)>").unwrap(); + let product = test_run("<(5m, 0m, 0m, 0m)>::normalize() == <(1, 0, 0, 0)>").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn normalize_zero_vector2() { - test_run("<(0m, 0m)>:normalize()").unwrap_err(); + test_run("<(0m, 0m)>::normalize()").unwrap_err(); } #[test] fn normalize_zero_vector3() { - test_run("<(0m, 0m, 0m)>:normalize()").unwrap_err(); + test_run("<(0m, 0m, 0m)>::normalize()").unwrap_err(); } #[test] fn normalize_zero_vector4() { - test_run("<(0m, 0m, 0m, 0m)>:normalize()").unwrap_err(); + test_run("<(0m, 0m, 0m, 0m)>::normalize()").unwrap_err(); } #[test] fn cross_vector3() { let product = - test_run("<(1m, 0m, 0m)>:cross(rhs = <(0m, 1m, 0m)>) == <(0m, 0m, 1m)>").unwrap(); + test_run("<(1m, 0m, 0m)>::cross(rhs = <(0m, 1m, 0m)>) == <(0m, 0m, 1m)>").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn angle_vector2() { - let product = test_run("<(1m, 0m)>:angle(other = <(0m, 1m)>) - 90deg < 0.001deg").unwrap(); + let product = test_run("<(1m, 0m)>::angle(other = <(0m, 1m)>) - 90deg < 0.001deg").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn angle_vector3() { - let product = test_run("<(1m, 0m, 0m)>:angle(other = <(0m, 1m, 0m)>) - 90deg < 0.001deg").unwrap(); + let product = test_run("<(1m, 0m, 0m)>::angle(other = <(0m, 1m, 0m)>) - 90deg < 0.001deg").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn angle_vector4() { let product = - test_run("<(1m, 0m, 0m, 0m)>:angle(other = <(0m, 1m, 0m, 0m)>) - 90deg < 0.001deg").unwrap(); + test_run("<(1m, 0m, 0m, 0m)>::angle(other = <(0m, 1m, 0m, 0m)>) - 90deg < 0.001deg").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn apply_vector2() { - let product = test_run("<(0m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m)>").unwrap(); + let product = test_run("<(0m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m)>").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("<(0m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2')>").unwrap(); + let product = test_run("<(0m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - test_run("<(0m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); + test_run("<(0m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); } #[test] fn apply_vector3() { - let product = test_run("<(0m, 1m, 2m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m, 3m)>").unwrap(); + let product = test_run("<(0m, 1m, 2m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m, 3m)>").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("<(0m, 1m, 2m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2', 2 'm^2')>").unwrap(); + let product = test_run("<(0m, 1m, 2m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2', 2 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - test_run("<(0m, 1m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); + test_run("<(0m, 1m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); } #[test] fn apply_vector4() { - let product = test_run("<(0m, 1m, 2m, 3m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m, 3m, 4m)>").unwrap(); + let product = test_run("<(0m, 1m, 2m, 3m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m, 3m, 4m)>").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("<(0m, 1m, 2m, 3m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2', 2 'm^2', 3 'm^2')>").unwrap(); + let product = test_run("<(0m, 1m, 2m, 3m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2', 2 'm^2', 3 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - test_run("<(0m, 1m, 1m, 1m)>:apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); + test_run("<(0m, 1m, 1m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); } #[test] fn fold_vector2() { - let product = test_run("<(1m, 2m)>:fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); + let product = test_run("<(1m, 2m)>::fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); assert_eq!(product, Scalar { dimension: Dimension::length(), value: common_data_types::Float::new(3.0).unwrap() @@ -1405,7 +1405,7 @@ mod test { #[test] fn fold_vector3() { - let product = test_run("<(1m, 2m, 3m)>:fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); + let product = test_run("<(1m, 2m, 3m)>::fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); assert_eq!(product, Scalar { dimension: Dimension::length(), value: common_data_types::Float::new(6.0).unwrap() @@ -1414,7 +1414,7 @@ mod test { #[test] fn fold_vector4() { - let product = test_run("<(1m, 2m, 3m, 4m)>:fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); + let product = test_run("<(1m, 2m, 3m, 4m)>::fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); assert_eq!(product, Scalar { dimension: Dimension::length(), value: common_data_types::Float::new(10.0).unwrap() diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 8aadccd..9f2d786 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -136,7 +136,7 @@ module.exports = grammar({ method_call: $ => seq( prec.left(PREC.method_call, seq( - field('self_dictionary', $.expression), ':', field('to_call', $.identifier), field("argument", $.dictionary_construction) + field('self_dictionary', $.expression), '::', field('to_call', $.identifier), field("argument", $.dictionary_construction) )) ), diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index df539f4..1119cab 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -450,7 +450,7 @@ }, { "type": "STRING", - "value": ":" + "value": "::" }, { "type": "FIELD", diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 938f11e..ae4d17a 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -1179,6 +1179,10 @@ "type": ":", "named": false }, + { + "type": "::", + "named": false + }, { "type": ";", "named": false diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 6bd1edd..23304ce 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -9,9 +9,9 @@ #define LANGUAGE_VERSION 15 #define STATE_COUNT 341 #define LARGE_STATE_COUNT 4 -#define SYMBOL_COUNT 105 +#define SYMBOL_COUNT 106 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 59 +#define TOKEN_COUNT 60 #define EXTERNAL_TOKEN_COUNT 0 #define FIELD_COUNT 30 #define MAX_ALIAS_SEQUENCE_LENGTH 9 @@ -40,7 +40,7 @@ enum ts_symbol_identifiers { anon_sym_RPAREN_GT = 18, sym_true = 19, sym_false = 20, - anon_sym_COLON = 21, + anon_sym_COLON_COLON = 21, anon_sym_DASH = 22, anon_sym_PLUS = 23, anon_sym_BANG = 24, @@ -70,60 +70,61 @@ enum ts_symbol_identifiers { anon_sym_in = 48, anon_sym_EQ = 49, anon_sym_SEMI = 50, - anon_sym_LPAREN = 51, - anon_sym_RPAREN = 52, - anon_sym_LBRACK = 53, - anon_sym_RBRACK = 54, - sym_varadic_dots = 55, - anon_sym_DASH_GT = 56, - anon_sym_LT_LT_LT = 57, - anon_sym_GT_GT_GT = 58, - sym_source_file = 59, - sym_base_ten = 60, - sym_octal = 61, - sym_hex = 62, - sym_binary = 63, - sym_integer = 64, - sym_signed_integer = 65, - sym_unsigned_integer = 66, - sym_number = 67, - sym__float = 68, - sym__unit = 69, - sym_scalar = 70, - sym_vector2 = 71, - sym_vector3 = 72, - sym_vector4 = 73, - sym_boolean = 74, - sym_function_call = 75, - sym_method_call = 76, - sym_expression = 77, - sym_unary_expression = 78, - sym_binary_expression = 79, - sym_if = 80, - sym_let_in = 81, - sym_let_in_assignment = 82, - sym_identity_path = 83, - sym_self_path = 84, - sym_declaration_type = 85, - sym_parenthesis = 86, - sym_list = 87, - sym_struct_member = 88, - sym__struct_final_element = 89, - sym_struct_definition = 90, - sym_dictionary_member_assignment = 91, - sym_dictionary_construction = 92, - sym_closure_definition = 93, - sym_formula = 94, - sym_formula_expression = 95, - sym_formula_parenthesis = 96, - sym_formula_unary_expression = 97, - sym_formula_binary_expression = 98, - aux_sym_let_in_repeat1 = 99, - aux_sym_identity_path_repeat1 = 100, - aux_sym_self_path_repeat1 = 101, - aux_sym_list_repeat1 = 102, - aux_sym_struct_definition_repeat1 = 103, - aux_sym_dictionary_construction_repeat1 = 104, + anon_sym_COLON = 51, + anon_sym_LPAREN = 52, + anon_sym_RPAREN = 53, + anon_sym_LBRACK = 54, + anon_sym_RBRACK = 55, + sym_varadic_dots = 56, + anon_sym_DASH_GT = 57, + anon_sym_LT_LT_LT = 58, + anon_sym_GT_GT_GT = 59, + sym_source_file = 60, + sym_base_ten = 61, + sym_octal = 62, + sym_hex = 63, + sym_binary = 64, + sym_integer = 65, + sym_signed_integer = 66, + sym_unsigned_integer = 67, + sym_number = 68, + sym__float = 69, + sym__unit = 70, + sym_scalar = 71, + sym_vector2 = 72, + sym_vector3 = 73, + sym_vector4 = 74, + sym_boolean = 75, + sym_function_call = 76, + sym_method_call = 77, + sym_expression = 78, + sym_unary_expression = 79, + sym_binary_expression = 80, + sym_if = 81, + sym_let_in = 82, + sym_let_in_assignment = 83, + sym_identity_path = 84, + sym_self_path = 85, + sym_declaration_type = 86, + sym_parenthesis = 87, + sym_list = 88, + sym_struct_member = 89, + sym__struct_final_element = 90, + sym_struct_definition = 91, + sym_dictionary_member_assignment = 92, + sym_dictionary_construction = 93, + sym_closure_definition = 94, + sym_formula = 95, + sym_formula_expression = 96, + sym_formula_parenthesis = 97, + sym_formula_unary_expression = 98, + sym_formula_binary_expression = 99, + aux_sym_let_in_repeat1 = 100, + aux_sym_identity_path_repeat1 = 101, + aux_sym_self_path_repeat1 = 102, + aux_sym_list_repeat1 = 103, + aux_sym_struct_definition_repeat1 = 104, + aux_sym_dictionary_construction_repeat1 = 105, }; static const char * const ts_symbol_names[] = { @@ -148,7 +149,7 @@ static const char * const ts_symbol_names[] = { [anon_sym_RPAREN_GT] = ")>", [sym_true] = "true", [sym_false] = "false", - [anon_sym_COLON] = ":", + [anon_sym_COLON_COLON] = "::", [anon_sym_DASH] = "-", [anon_sym_PLUS] = "+", [anon_sym_BANG] = "!", @@ -178,6 +179,7 @@ static const char * const ts_symbol_names[] = { [anon_sym_in] = "in", [anon_sym_EQ] = "=", [anon_sym_SEMI] = ";", + [anon_sym_COLON] = ":", [anon_sym_LPAREN] = "(", [anon_sym_RPAREN] = ")", [anon_sym_LBRACK] = "[", @@ -256,7 +258,7 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_RPAREN_GT] = anon_sym_RPAREN_GT, [sym_true] = sym_true, [sym_false] = sym_false, - [anon_sym_COLON] = anon_sym_COLON, + [anon_sym_COLON_COLON] = anon_sym_COLON_COLON, [anon_sym_DASH] = anon_sym_DASH, [anon_sym_PLUS] = anon_sym_PLUS, [anon_sym_BANG] = anon_sym_BANG, @@ -286,6 +288,7 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_in] = anon_sym_in, [anon_sym_EQ] = anon_sym_EQ, [anon_sym_SEMI] = anon_sym_SEMI, + [anon_sym_COLON] = anon_sym_COLON, [anon_sym_LPAREN] = anon_sym_LPAREN, [anon_sym_RPAREN] = anon_sym_RPAREN, [anon_sym_LBRACK] = anon_sym_LBRACK, @@ -427,7 +430,7 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [anon_sym_COLON] = { + [anon_sym_COLON_COLON] = { .visible = true, .named = false, }, @@ -547,6 +550,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, + [anon_sym_COLON] = { + .visible = true, + .named = false, + }, [anon_sym_LPAREN] = { .visible = true, .named = false, @@ -1096,9 +1103,9 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [126] = 126, [127] = 127, [128] = 75, - [129] = 75, - [130] = 76, - [131] = 131, + [129] = 129, + [130] = 75, + [131] = 76, [132] = 77, [133] = 79, [134] = 84, @@ -1136,10 +1143,10 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [166] = 96, [167] = 108, [168] = 109, - [169] = 112, - [170] = 95, - [171] = 118, - [172] = 172, + [169] = 169, + [170] = 112, + [171] = 95, + [172] = 118, [173] = 123, [174] = 160, [175] = 149, @@ -1274,19 +1281,19 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [304] = 304, [305] = 305, [306] = 306, - [307] = 304, + [307] = 305, [308] = 308, [309] = 309, [310] = 310, - [311] = 311, - [312] = 311, + [311] = 302, + [312] = 302, [313] = 313, [314] = 314, - [315] = 311, + [315] = 302, [316] = 316, - [317] = 311, + [317] = 308, [318] = 308, - [319] = 308, + [319] = 319, [320] = 320, [321] = 321, [322] = 322, @@ -1299,10 +1306,10 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [329] = 329, [330] = 330, [331] = 320, - [332] = 332, - [333] = 332, + [332] = 322, + [333] = 333, [334] = 334, - [335] = 322, + [335] = 333, [336] = 336, [337] = 330, [338] = 330, @@ -1315,608 +1322,615 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(24); + if (eof) ADVANCE(25); ADVANCE_MAP( - '!', 56, + '!', 57, '"', 6, - '#', 25, - '&', 65, + '#', 26, + '&', 66, '\'', 8, - '(', 86, - ')', 87, - '*', 58, - '+', 54, - ',', 49, - '-', 53, - '.', 46, - '/', 60, - '0', 34, - '1', 36, - ':', 51, - ';', 85, - '<', 75, - '=', 84, - '>', 69, - '[', 88, - ']', 89, - '^', 67, - 't', 29, - '|', 66, + '(', 88, + ')', 89, + '*', 59, + '+', 55, + ',', 50, + '-', 54, + '.', 47, + '/', 61, + '0', 35, + '1', 37, + ':', 87, + ';', 86, + '<', 76, + '=', 85, + '>', 70, + '[', 90, + ']', 91, + '^', 68, + 't', 30, + '|', 67, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(37); + lookahead == ' ') ADVANCE(27); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(38); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); END_STATE(); case 1: ADVANCE_MAP( - '!', 55, + '!', 56, '"', 6, - '#', 25, - '(', 86, - ')', 87, - '*', 58, - '+', 54, - '-', 52, + '#', 26, + '(', 88, + ')', 89, + '*', 59, + '+', 55, + '-', 53, '.', 13, - '/', 59, - '0', 35, + '/', 60, + '0', 36, '<', 10, - '>', 19, - '[', 88, - ']', 89, + '>', 20, + '[', 90, + ']', 91, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(37); + lookahead == ' ') ADVANCE(27); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(38); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); END_STATE(); case 2: ADVANCE_MAP( - '!', 55, + '!', 56, '"', 6, - '#', 25, - '(', 86, - '+', 54, - '-', 52, - '.', 45, - '0', 35, + '#', 26, + '(', 88, + '+', 55, + '-', 53, + '.', 46, + '0', 36, '<', 10, - '[', 88, + '[', 90, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(37); + lookahead == ' ') ADVANCE(27); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(38); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); END_STATE(); case 3: ADVANCE_MAP( - '!', 15, - '#', 25, - '&', 65, + '!', 16, + '#', 26, + '&', 66, '\'', 8, - '(', 86, - ')', 18, - '*', 58, - '+', 54, - ',', 49, - '-', 53, - '.', 47, - '/', 60, - ':', 51, - '<', 75, - '=', 16, - '>', 70, - '^', 67, - '|', 66, + '(', 88, + ')', 19, + '*', 59, + '+', 55, + ',', 50, + '-', 54, + '.', 48, + '/', 61, + ':', 14, + '<', 76, + '=', 17, + '>', 71, + '^', 68, + '|', 67, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); + lookahead == ' ') ADVANCE(27); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); END_STATE(); case 4: ADVANCE_MAP( - '!', 15, - '#', 25, + '!', 16, + '#', 26, '\'', 8, - '*', 58, - '+', 54, - '-', 52, - '.', 45, - '/', 59, - '<', 76, - '=', 16, - '>', 68, + '*', 59, + '+', 55, + '-', 53, + '.', 46, + '/', 60, + '<', 77, + '=', 17, + '>', 69, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); + lookahead == ' ') ADVANCE(27); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); END_STATE(); case 5: ADVANCE_MAP( - '!', 15, - '#', 25, - ')', 87, - '*', 58, - '+', 54, - '-', 52, - '/', 59, - '<', 76, - '=', 16, - '>', 71, + '!', 16, + '#', 26, + ')', 89, + '*', 59, + '+', 55, + '-', 53, + '/', 60, + '<', 77, + '=', 17, + '>', 72, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); + lookahead == ' ') ADVANCE(27); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(40); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(41); END_STATE(); case 6: - if (lookahead == '"') ADVANCE(32); + if (lookahead == '"') ADVANCE(33); if (lookahead == '\\') ADVANCE(7); if (lookahead != 0) ADVANCE(6); END_STATE(); case 7: - if (lookahead == '"') ADVANCE(33); + if (lookahead == '"') ADVANCE(34); if (lookahead == '\\') ADVANCE(7); if (lookahead != 0) ADVANCE(6); END_STATE(); case 8: - if (lookahead == '\'') ADVANCE(43); + if (lookahead == '\'') ADVANCE(44); if (lookahead == '\\') ADVANCE(9); if (lookahead != 0) ADVANCE(8); END_STATE(); case 9: - if (lookahead == '\'') ADVANCE(44); + if (lookahead == '\'') ADVANCE(45); if (lookahead == '\\') ADVANCE(9); if (lookahead != 0) ADVANCE(8); END_STATE(); case 10: - if (lookahead == '(') ADVANCE(48); - if (lookahead == '<') ADVANCE(14); + if (lookahead == '(') ADVANCE(49); + if (lookahead == '<') ADVANCE(15); END_STATE(); case 11: - if (lookahead == '.') ADVANCE(90); + if (lookahead == '.') ADVANCE(92); END_STATE(); case 12: - if (lookahead == '.') ADVANCE(81); + if (lookahead == '.') ADVANCE(82); END_STATE(); case 13: if (lookahead == '.') ADVANCE(11); END_STATE(); case 14: - if (lookahead == '<') ADVANCE(92); + if (lookahead == ':') ADVANCE(52); END_STATE(); case 15: - if (lookahead == '=') ADVANCE(77); + if (lookahead == '<') ADVANCE(94); END_STATE(); case 16: - if (lookahead == '=') ADVANCE(73); + if (lookahead == '=') ADVANCE(78); END_STATE(); case 17: - if (lookahead == '>') ADVANCE(93); + if (lookahead == '=') ADVANCE(74); END_STATE(); case 18: - if (lookahead == '>') ADVANCE(50); + if (lookahead == '>') ADVANCE(95); END_STATE(); case 19: - if (lookahead == '>') ADVANCE(17); + if (lookahead == '>') ADVANCE(51); END_STATE(); case 20: - if (eof) ADVANCE(24); + if (lookahead == '>') ADVANCE(18); + END_STATE(); + case 21: + if (eof) ADVANCE(25); ADVANCE_MAP( - '!', 15, - '#', 25, - '&', 65, + '!', 16, + '#', 26, + '&', 66, '\'', 8, - '(', 86, - ')', 87, - '*', 58, - '+', 54, - ',', 49, - '-', 53, - '.', 47, - '/', 60, - ':', 51, - ';', 85, - '<', 75, - '=', 84, - '>', 70, - ']', 89, - '^', 67, - 't', 29, - '|', 66, - '0', 42, - '1', 42, + '(', 88, + ')', 89, + '*', 59, + '+', 55, + ',', 50, + '-', 54, + '.', 48, + '/', 61, + ':', 87, + ';', 86, + '<', 76, + '=', 85, + '>', 71, + ']', 91, + '^', 68, + 't', 30, + '|', 67, + '0', 43, + '1', 43, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); + lookahead == ' ') ADVANCE(27); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); END_STATE(); - case 21: - if (eof) ADVANCE(24); + case 22: + if (eof) ADVANCE(25); ADVANCE_MAP( - '!', 15, - '#', 25, - '&', 65, + '!', 16, + '#', 26, + '&', 66, '\'', 8, - '(', 86, - ')', 87, - '*', 58, - '+', 54, - ',', 49, - '-', 52, - '.', 47, - '/', 60, - ':', 51, - ';', 85, - '<', 75, - '=', 84, - '>', 69, - ']', 89, - '^', 67, - '|', 66, + '(', 88, + ')', 89, + '*', 59, + '+', 55, + ',', 50, + '-', 53, + '.', 48, + '/', 61, + ':', 14, + ';', 86, + '<', 76, + '=', 85, + '>', 70, + ']', 91, + '^', 68, + '|', 67, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(37); + lookahead == ' ') ADVANCE(27); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(38); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); END_STATE(); - case 22: - if (eof) ADVANCE(24); + case 23: + if (eof) ADVANCE(25); ADVANCE_MAP( - '!', 15, - '#', 25, - '&', 65, - '(', 86, - ')', 87, - '*', 58, - '+', 54, - ',', 49, - '-', 53, + '!', 16, + '#', 26, + '&', 66, + '(', 88, + ')', 89, + '*', 59, + '+', 55, + ',', 50, + '-', 54, '.', 12, - '/', 60, - ':', 51, - ';', 85, - '<', 75, - '=', 84, - '>', 70, - ']', 89, - '^', 67, - '|', 66, + '/', 61, + ':', 14, + ';', 86, + '<', 76, + '=', 85, + '>', 71, + ']', 91, + '^', 68, + '|', 67, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); + lookahead == ' ') ADVANCE(27); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); END_STATE(); - case 23: - if (eof) ADVANCE(24); + case 24: + if (eof) ADVANCE(25); ADVANCE_MAP( - '!', 15, - '#', 25, - '&', 65, - '(', 86, - ')', 87, - '*', 58, - '+', 54, - ',', 49, - '-', 52, + '!', 16, + '#', 26, + '&', 66, + '(', 88, + ')', 89, + '*', 59, + '+', 55, + ',', 50, + '-', 53, '.', 12, - '/', 60, - ':', 51, - ';', 85, - '<', 75, - '=', 84, - '>', 69, - ']', 89, - '^', 67, - 't', 29, - '|', 66, + '/', 61, + ':', 14, + ';', 86, + '<', 76, + '=', 85, + '>', 70, + ']', 91, + '^', 68, + 't', 30, + '|', 67, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); + lookahead == ' ') ADVANCE(27); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); END_STATE(); - case 24: + case 25: ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); - case 25: + case 26: ACCEPT_TOKEN(sym_comment); if (lookahead != 0 && - lookahead != '\n') ADVANCE(25); - END_STATE(); - case 26: - ACCEPT_TOKEN(sym__whitespace); + lookahead != '\n') ADVANCE(26); END_STATE(); case 27: - ACCEPT_TOKEN(sym_identifier); - if (lookahead == ' ') ADVANCE(83); - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'Z') || - lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ACCEPT_TOKEN(sym__whitespace); END_STATE(); case 28: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'e') ADVANCE(30); + if (lookahead == ' ') ADVANCE(84); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); END_STATE(); case 29: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'h') ADVANCE(28); + if (lookahead == 'e') ADVANCE(31); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); END_STATE(); case 30: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'n') ADVANCE(27); + if (lookahead == 'h') ADVANCE(29); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); END_STATE(); case 31: ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'n') ADVANCE(28); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); END_STATE(); case 32: - ACCEPT_TOKEN(sym_string); + ACCEPT_TOKEN(sym_identifier); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); END_STATE(); case 33: ACCEPT_TOKEN(sym_string); - if (lookahead == '"') ADVANCE(32); - if (lookahead == '\\') ADVANCE(7); - if (lookahead != 0) ADVANCE(6); END_STATE(); case 34: - ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(41); - if (lookahead == 'o') ADVANCE(38); - if (lookahead == 'x') ADVANCE(39); - if (lookahead == '0' || - lookahead == '1') ADVANCE(36); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(37); + ACCEPT_TOKEN(sym_string); + if (lookahead == '"') ADVANCE(33); + if (lookahead == '\\') ADVANCE(7); + if (lookahead != 0) ADVANCE(6); END_STATE(); case 35: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(41); - if (lookahead == 'o') ADVANCE(38); - if (lookahead == 'x') ADVANCE(39); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(37); + if (lookahead == 'b') ADVANCE(42); + if (lookahead == 'o') ADVANCE(39); + if (lookahead == 'x') ADVANCE(40); + if (lookahead == '0' || + lookahead == '1') ADVANCE(37); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(38); END_STATE(); case 36: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == '0' || - lookahead == '1') ADVANCE(36); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(37); + if (lookahead == 'b') ADVANCE(42); + if (lookahead == 'o') ADVANCE(39); + if (lookahead == 'x') ADVANCE(40); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(38); END_STATE(); case 37: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(37); + if (lookahead == '0' || + lookahead == '1') ADVANCE(37); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(38); END_STATE(); case 38: - ACCEPT_TOKEN(aux_sym_octal_token1); + ACCEPT_TOKEN(aux_sym_base_ten_token1); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(38); END_STATE(); case 39: - ACCEPT_TOKEN(aux_sym_hex_token1); + ACCEPT_TOKEN(aux_sym_octal_token1); END_STATE(); case 40: + ACCEPT_TOKEN(aux_sym_hex_token1); + END_STATE(); + case 41: ACCEPT_TOKEN(aux_sym_hex_token2); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(40); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(41); END_STATE(); - case 41: + case 42: ACCEPT_TOKEN(aux_sym_binary_token1); END_STATE(); - case 42: + case 43: ACCEPT_TOKEN(aux_sym_binary_token2); if (lookahead == '0' || - lookahead == '1') ADVANCE(42); + lookahead == '1') ADVANCE(43); END_STATE(); - case 43: + case 44: ACCEPT_TOKEN(sym_unit_quote); END_STATE(); - case 44: + case 45: ACCEPT_TOKEN(sym_unit_quote); - if (lookahead == '\'') ADVANCE(43); + if (lookahead == '\'') ADVANCE(44); if (lookahead == '\\') ADVANCE(9); if (lookahead != 0) ADVANCE(8); END_STATE(); - case 45: - ACCEPT_TOKEN(anon_sym_DOT); - END_STATE(); case 46: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(80); END_STATE(); case 47: ACCEPT_TOKEN(anon_sym_DOT); if (lookahead == '.') ADVANCE(81); END_STATE(); case 48: - ACCEPT_TOKEN(anon_sym_LT_LPAREN); + ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(82); END_STATE(); case 49: - ACCEPT_TOKEN(anon_sym_COMMA); + ACCEPT_TOKEN(anon_sym_LT_LPAREN); END_STATE(); case 50: - ACCEPT_TOKEN(anon_sym_RPAREN_GT); + ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); case 51: - ACCEPT_TOKEN(anon_sym_COLON); + ACCEPT_TOKEN(anon_sym_RPAREN_GT); END_STATE(); case 52: - ACCEPT_TOKEN(anon_sym_DASH); + ACCEPT_TOKEN(anon_sym_COLON_COLON); END_STATE(); case 53: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '>') ADVANCE(91); END_STATE(); case 54: - ACCEPT_TOKEN(anon_sym_PLUS); + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '>') ADVANCE(93); END_STATE(); case 55: - ACCEPT_TOKEN(anon_sym_BANG); + ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); case 56: ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(77); END_STATE(); case 57: - ACCEPT_TOKEN(anon_sym_STAR_STAR); + ACCEPT_TOKEN(anon_sym_BANG); + if (lookahead == '=') ADVANCE(78); END_STATE(); case 58: - ACCEPT_TOKEN(anon_sym_STAR); - if (lookahead == '*') ADVANCE(57); + ACCEPT_TOKEN(anon_sym_STAR_STAR); END_STATE(); case 59: - ACCEPT_TOKEN(anon_sym_SLASH); + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '*') ADVANCE(58); END_STATE(); case 60: ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '/') ADVANCE(61); END_STATE(); case 61: - ACCEPT_TOKEN(anon_sym_SLASH_SLASH); + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '/') ADVANCE(62); END_STATE(); case 62: - ACCEPT_TOKEN(anon_sym_LT_LT); + ACCEPT_TOKEN(anon_sym_SLASH_SLASH); END_STATE(); case 63: - ACCEPT_TOKEN(anon_sym_GT_GT); + ACCEPT_TOKEN(anon_sym_LT_LT); END_STATE(); case 64: ACCEPT_TOKEN(anon_sym_GT_GT); - if (lookahead == '>') ADVANCE(93); END_STATE(); case 65: - ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(78); + ACCEPT_TOKEN(anon_sym_GT_GT); + if (lookahead == '>') ADVANCE(95); END_STATE(); case 66: - ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '|') ADVANCE(79); + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(79); END_STATE(); case 67: - ACCEPT_TOKEN(anon_sym_CARET); + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '|') ADVANCE(80); END_STATE(); case 68: - ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(72); + ACCEPT_TOKEN(anon_sym_CARET); END_STATE(); case 69: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(72); - if (lookahead == '>') ADVANCE(64); + if (lookahead == '=') ADVANCE(73); END_STATE(); case 70: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(72); - if (lookahead == '>') ADVANCE(63); + if (lookahead == '=') ADVANCE(73); + if (lookahead == '>') ADVANCE(65); END_STATE(); case 71: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(72); - if (lookahead == '>') ADVANCE(17); + if (lookahead == '=') ADVANCE(73); + if (lookahead == '>') ADVANCE(64); END_STATE(); case 72: - ACCEPT_TOKEN(anon_sym_GT_EQ); + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(73); + if (lookahead == '>') ADVANCE(18); END_STATE(); case 73: - ACCEPT_TOKEN(anon_sym_EQ_EQ); + ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); case 74: - ACCEPT_TOKEN(anon_sym_LT_EQ); + ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); case 75: - ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(62); - if (lookahead == '=') ADVANCE(74); + ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); case 76: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '=') ADVANCE(74); + if (lookahead == '<') ADVANCE(63); + if (lookahead == '=') ADVANCE(75); END_STATE(); case 77: - ACCEPT_TOKEN(anon_sym_BANG_EQ); + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '=') ADVANCE(75); END_STATE(); case 78: - ACCEPT_TOKEN(anon_sym_AMP_AMP); + ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); case 79: - ACCEPT_TOKEN(anon_sym_PIPE_PIPE); + ACCEPT_TOKEN(anon_sym_AMP_AMP); END_STATE(); case 80: - ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '.') ADVANCE(90); - if (lookahead == '=') ADVANCE(82); + ACCEPT_TOKEN(anon_sym_PIPE_PIPE); END_STATE(); case 81: ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '=') ADVANCE(82); + if (lookahead == '.') ADVANCE(92); + if (lookahead == '=') ADVANCE(83); END_STATE(); case 82: - ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); + ACCEPT_TOKEN(anon_sym_DOT_DOT); + if (lookahead == '=') ADVANCE(83); END_STATE(); case 83: - ACCEPT_TOKEN(anon_sym_then); + ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); END_STATE(); case 84: - ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(73); + ACCEPT_TOKEN(anon_sym_then); END_STATE(); case 85: - ACCEPT_TOKEN(anon_sym_SEMI); + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '=') ADVANCE(74); END_STATE(); case 86: - ACCEPT_TOKEN(anon_sym_LPAREN); + ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); case 87: - ACCEPT_TOKEN(anon_sym_RPAREN); + ACCEPT_TOKEN(anon_sym_COLON); + if (lookahead == ':') ADVANCE(52); END_STATE(); case 88: - ACCEPT_TOKEN(anon_sym_LBRACK); + ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); case 89: - ACCEPT_TOKEN(anon_sym_RBRACK); + ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); case 90: - ACCEPT_TOKEN(sym_varadic_dots); + ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); case 91: - ACCEPT_TOKEN(anon_sym_DASH_GT); + ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); case 92: - ACCEPT_TOKEN(anon_sym_LT_LT_LT); + ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); case 93: + ACCEPT_TOKEN(anon_sym_DASH_GT); + END_STATE(); + case 94: + ACCEPT_TOKEN(anon_sym_LT_LT_LT); + END_STATE(); + case 95: ACCEPT_TOKEN(anon_sym_GT_GT_GT); END_STATE(); default: @@ -2099,63 +2113,63 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [72] = {.lex_state = 1}, [73] = {.lex_state = 1}, [74] = {.lex_state = 1}, - [75] = {.lex_state = 21}, - [76] = {.lex_state = 21}, - [77] = {.lex_state = 21}, - [78] = {.lex_state = 20}, - [79] = {.lex_state = 21}, - [80] = {.lex_state = 20}, - [81] = {.lex_state = 20}, - [82] = {.lex_state = 20}, - [83] = {.lex_state = 20}, - [84] = {.lex_state = 20}, - [85] = {.lex_state = 21}, - [86] = {.lex_state = 23}, - [87] = {.lex_state = 20}, - [88] = {.lex_state = 20}, - [89] = {.lex_state = 20}, - [90] = {.lex_state = 20}, - [91] = {.lex_state = 23}, - [92] = {.lex_state = 20}, - [93] = {.lex_state = 20}, - [94] = {.lex_state = 23}, - [95] = {.lex_state = 20}, - [96] = {.lex_state = 22}, - [97] = {.lex_state = 20}, - [98] = {.lex_state = 22}, - [99] = {.lex_state = 22}, - [100] = {.lex_state = 20}, - [101] = {.lex_state = 22}, - [102] = {.lex_state = 22}, - [103] = {.lex_state = 22}, - [104] = {.lex_state = 22}, - [105] = {.lex_state = 22}, - [106] = {.lex_state = 22}, - [107] = {.lex_state = 22}, - [108] = {.lex_state = 22}, - [109] = {.lex_state = 22}, - [110] = {.lex_state = 20}, - [111] = {.lex_state = 20}, - [112] = {.lex_state = 22}, - [113] = {.lex_state = 20}, - [114] = {.lex_state = 20}, - [115] = {.lex_state = 20}, - [116] = {.lex_state = 20}, - [117] = {.lex_state = 20}, - [118] = {.lex_state = 22}, - [119] = {.lex_state = 22}, - [120] = {.lex_state = 20}, - [121] = {.lex_state = 20}, - [122] = {.lex_state = 20}, - [123] = {.lex_state = 22}, - [124] = {.lex_state = 20}, - [125] = {.lex_state = 20}, - [126] = {.lex_state = 20}, - [127] = {.lex_state = 20}, + [75] = {.lex_state = 22}, + [76] = {.lex_state = 22}, + [77] = {.lex_state = 22}, + [78] = {.lex_state = 21}, + [79] = {.lex_state = 22}, + [80] = {.lex_state = 21}, + [81] = {.lex_state = 21}, + [82] = {.lex_state = 21}, + [83] = {.lex_state = 21}, + [84] = {.lex_state = 21}, + [85] = {.lex_state = 22}, + [86] = {.lex_state = 24}, + [87] = {.lex_state = 21}, + [88] = {.lex_state = 21}, + [89] = {.lex_state = 21}, + [90] = {.lex_state = 21}, + [91] = {.lex_state = 24}, + [92] = {.lex_state = 21}, + [93] = {.lex_state = 21}, + [94] = {.lex_state = 24}, + [95] = {.lex_state = 21}, + [96] = {.lex_state = 23}, + [97] = {.lex_state = 21}, + [98] = {.lex_state = 23}, + [99] = {.lex_state = 23}, + [100] = {.lex_state = 21}, + [101] = {.lex_state = 23}, + [102] = {.lex_state = 23}, + [103] = {.lex_state = 23}, + [104] = {.lex_state = 23}, + [105] = {.lex_state = 23}, + [106] = {.lex_state = 23}, + [107] = {.lex_state = 23}, + [108] = {.lex_state = 23}, + [109] = {.lex_state = 23}, + [110] = {.lex_state = 21}, + [111] = {.lex_state = 21}, + [112] = {.lex_state = 23}, + [113] = {.lex_state = 21}, + [114] = {.lex_state = 21}, + [115] = {.lex_state = 21}, + [116] = {.lex_state = 21}, + [117] = {.lex_state = 21}, + [118] = {.lex_state = 23}, + [119] = {.lex_state = 23}, + [120] = {.lex_state = 21}, + [121] = {.lex_state = 21}, + [122] = {.lex_state = 21}, + [123] = {.lex_state = 23}, + [124] = {.lex_state = 21}, + [125] = {.lex_state = 21}, + [126] = {.lex_state = 21}, + [127] = {.lex_state = 21}, [128] = {.lex_state = 3}, - [129] = {.lex_state = 20}, - [130] = {.lex_state = 3}, - [131] = {.lex_state = 20}, + [129] = {.lex_state = 21}, + [130] = {.lex_state = 21}, + [131] = {.lex_state = 3}, [132] = {.lex_state = 3}, [133] = {.lex_state = 3}, [134] = {.lex_state = 3}, @@ -2163,20 +2177,20 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [136] = {.lex_state = 3}, [137] = {.lex_state = 3}, [138] = {.lex_state = 3}, - [139] = {.lex_state = 20}, - [140] = {.lex_state = 20}, + [139] = {.lex_state = 21}, + [140] = {.lex_state = 21}, [141] = {.lex_state = 3}, - [142] = {.lex_state = 20}, + [142] = {.lex_state = 21}, [143] = {.lex_state = 3}, [144] = {.lex_state = 3}, - [145] = {.lex_state = 20}, + [145] = {.lex_state = 21}, [146] = {.lex_state = 3}, [147] = {.lex_state = 3}, [148] = {.lex_state = 3}, - [149] = {.lex_state = 20}, + [149] = {.lex_state = 21}, [150] = {.lex_state = 3}, - [151] = {.lex_state = 20}, - [152] = {.lex_state = 20}, + [151] = {.lex_state = 21}, + [152] = {.lex_state = 21}, [153] = {.lex_state = 3}, [154] = {.lex_state = 3}, [155] = {.lex_state = 3}, @@ -2184,7 +2198,7 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [157] = {.lex_state = 3}, [158] = {.lex_state = 3}, [159] = {.lex_state = 3}, - [160] = {.lex_state = 20}, + [160] = {.lex_state = 21}, [161] = {.lex_state = 3}, [162] = {.lex_state = 3}, [163] = {.lex_state = 3}, @@ -2193,65 +2207,65 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [166] = {.lex_state = 3}, [167] = {.lex_state = 3}, [168] = {.lex_state = 3}, - [169] = {.lex_state = 3}, + [169] = {.lex_state = 21}, [170] = {.lex_state = 3}, [171] = {.lex_state = 3}, - [172] = {.lex_state = 20}, + [172] = {.lex_state = 3}, [173] = {.lex_state = 3}, - [174] = {.lex_state = 20}, - [175] = {.lex_state = 20}, + [174] = {.lex_state = 21}, + [175] = {.lex_state = 21}, [176] = {.lex_state = 3}, [177] = {.lex_state = 3}, [178] = {.lex_state = 3}, [179] = {.lex_state = 3}, - [180] = {.lex_state = 20}, - [181] = {.lex_state = 20}, + [180] = {.lex_state = 21}, + [181] = {.lex_state = 21}, [182] = {.lex_state = 3}, - [183] = {.lex_state = 20}, - [184] = {.lex_state = 20}, - [185] = {.lex_state = 20}, - [186] = {.lex_state = 20}, - [187] = {.lex_state = 20}, - [188] = {.lex_state = 20}, - [189] = {.lex_state = 20}, - [190] = {.lex_state = 20}, - [191] = {.lex_state = 20}, + [183] = {.lex_state = 21}, + [184] = {.lex_state = 21}, + [185] = {.lex_state = 21}, + [186] = {.lex_state = 21}, + [187] = {.lex_state = 21}, + [188] = {.lex_state = 21}, + [189] = {.lex_state = 21}, + [190] = {.lex_state = 21}, + [191] = {.lex_state = 21}, [192] = {.lex_state = 3}, - [193] = {.lex_state = 20}, + [193] = {.lex_state = 21}, [194] = {.lex_state = 3}, [195] = {.lex_state = 3}, - [196] = {.lex_state = 20}, + [196] = {.lex_state = 21}, [197] = {.lex_state = 3}, [198] = {.lex_state = 3}, [199] = {.lex_state = 3}, - [200] = {.lex_state = 20}, + [200] = {.lex_state = 21}, [201] = {.lex_state = 3}, [202] = {.lex_state = 3}, - [203] = {.lex_state = 20}, + [203] = {.lex_state = 21}, [204] = {.lex_state = 3}, [205] = {.lex_state = 3}, [206] = {.lex_state = 3}, - [207] = {.lex_state = 20}, - [208] = {.lex_state = 22}, - [209] = {.lex_state = 20}, - [210] = {.lex_state = 20}, + [207] = {.lex_state = 21}, + [208] = {.lex_state = 23}, + [209] = {.lex_state = 21}, + [210] = {.lex_state = 21}, [211] = {.lex_state = 3}, [212] = {.lex_state = 3}, [213] = {.lex_state = 3}, - [214] = {.lex_state = 20}, + [214] = {.lex_state = 21}, [215] = {.lex_state = 3}, [216] = {.lex_state = 3}, - [217] = {.lex_state = 20}, - [218] = {.lex_state = 20}, - [219] = {.lex_state = 20}, + [217] = {.lex_state = 21}, + [218] = {.lex_state = 21}, + [219] = {.lex_state = 21}, [220] = {.lex_state = 3}, - [221] = {.lex_state = 22}, + [221] = {.lex_state = 23}, [222] = {.lex_state = 3}, - [223] = {.lex_state = 22}, - [224] = {.lex_state = 20}, - [225] = {.lex_state = 20}, - [226] = {.lex_state = 20}, - [227] = {.lex_state = 20}, + [223] = {.lex_state = 23}, + [224] = {.lex_state = 21}, + [225] = {.lex_state = 21}, + [226] = {.lex_state = 21}, + [227] = {.lex_state = 21}, [228] = {.lex_state = 3}, [229] = {.lex_state = 1}, [230] = {.lex_state = 1}, @@ -2326,41 +2340,41 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [299] = {.lex_state = 1}, [300] = {.lex_state = 1}, [301] = {.lex_state = 1}, - [302] = {.lex_state = 1}, + [302] = {.lex_state = 22}, [303] = {.lex_state = 0}, - [304] = {.lex_state = 0}, - [305] = {.lex_state = 1}, + [304] = {.lex_state = 1}, + [305] = {.lex_state = 0}, [306] = {.lex_state = 1}, [307] = {.lex_state = 0}, [308] = {.lex_state = 1}, [309] = {.lex_state = 1}, [310] = {.lex_state = 0}, - [311] = {.lex_state = 21}, - [312] = {.lex_state = 21}, + [311] = {.lex_state = 22}, + [312] = {.lex_state = 22}, [313] = {.lex_state = 1}, [314] = {.lex_state = 0}, - [315] = {.lex_state = 21}, + [315] = {.lex_state = 22}, [316] = {.lex_state = 0}, - [317] = {.lex_state = 21}, + [317] = {.lex_state = 1}, [318] = {.lex_state = 1}, [319] = {.lex_state = 1}, [320] = {.lex_state = 0}, - [321] = {.lex_state = 21}, + [321] = {.lex_state = 0}, [322] = {.lex_state = 0}, [323] = {.lex_state = 0}, [324] = {.lex_state = 1}, - [325] = {.lex_state = 20}, + [325] = {.lex_state = 22}, [326] = {.lex_state = 1}, [327] = {.lex_state = 5}, [328] = {.lex_state = 0}, [329] = {.lex_state = 0}, [330] = {.lex_state = 1}, [331] = {.lex_state = 0}, - [332] = {.lex_state = 1}, + [332] = {.lex_state = 0}, [333] = {.lex_state = 1}, [334] = {.lex_state = 0}, - [335] = {.lex_state = 0}, - [336] = {.lex_state = 0}, + [335] = {.lex_state = 1}, + [336] = {.lex_state = 21}, [337] = {.lex_state = 1}, [338] = {.lex_state = 1}, [339] = {.lex_state = 0}, @@ -2387,7 +2401,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_COMMA] = ACTIONS(1), [sym_true] = ACTIONS(1), [sym_false] = ACTIONS(1), - [anon_sym_COLON] = ACTIONS(1), + [anon_sym_COLON_COLON] = ACTIONS(1), [anon_sym_DASH] = ACTIONS(1), [anon_sym_PLUS] = ACTIONS(1), [anon_sym_BANG] = ACTIONS(1), @@ -2417,6 +2431,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_in] = ACTIONS(1), [anon_sym_EQ] = ACTIONS(1), [anon_sym_SEMI] = ACTIONS(1), + [anon_sym_COLON] = ACTIONS(1), [anon_sym_LPAREN] = ACTIONS(1), [anon_sym_RPAREN] = ACTIONS(1), [anon_sym_LBRACK] = ACTIONS(1), @@ -2426,12 +2441,12 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_GT_GT_GT] = ACTIONS(1), }, [STATE(1)] = { - [sym_source_file] = STATE(336), + [sym_source_file] = STATE(340), [sym_base_ten] = STATE(313), [sym_octal] = STATE(313), [sym_hex] = STATE(313), [sym_binary] = STATE(313), - [sym_integer] = STATE(319), + [sym_integer] = STATE(318), [sym_signed_integer] = STATE(120), [sym_unsigned_integer] = STATE(120), [sym_number] = STATE(77), @@ -2482,7 +2497,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_octal] = STATE(313), [sym_hex] = STATE(313), [sym_binary] = STATE(313), - [sym_integer] = STATE(319), + [sym_integer] = STATE(318), [sym_signed_integer] = STATE(120), [sym_unsigned_integer] = STATE(120), [sym_number] = STATE(77), @@ -2539,7 +2554,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym_octal] = STATE(313), [sym_hex] = STATE(313), [sym_binary] = STATE(313), - [sym_integer] = STATE(319), + [sym_integer] = STATE(318), [sym_signed_integer] = STATE(120), [sym_unsigned_integer] = STATE(120), [sym_number] = STATE(77), @@ -2633,7 +2648,7 @@ static const uint16_t ts_small_parse_table[] = { sym_struct_definition, STATE(160), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2710,7 +2725,7 @@ static const uint16_t ts_small_parse_table[] = { sym_struct_definition, STATE(149), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2787,7 +2802,7 @@ static const uint16_t ts_small_parse_table[] = { sym_struct_definition, STATE(225), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2864,7 +2879,7 @@ static const uint16_t ts_small_parse_table[] = { sym_struct_definition, STATE(175), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2941,7 +2956,7 @@ static const uint16_t ts_small_parse_table[] = { sym_struct_definition, STATE(174), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3014,7 +3029,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3087,7 +3102,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3160,7 +3175,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3233,7 +3248,7 @@ static const uint16_t ts_small_parse_table[] = { sym_struct_definition, STATE(203), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3306,7 +3321,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3379,7 +3394,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3452,7 +3467,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3525,7 +3540,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3598,7 +3613,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3671,7 +3686,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3744,7 +3759,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3817,7 +3832,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3890,7 +3905,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3963,7 +3978,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4036,7 +4051,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4101,7 +4116,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -4182,7 +4197,7 @@ static const uint16_t ts_small_parse_table[] = { sym_struct_definition, STATE(208), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4255,7 +4270,7 @@ static const uint16_t ts_small_parse_table[] = { sym_struct_definition, STATE(210), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4328,7 +4343,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4399,9 +4414,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(119), 1, sym_struct_definition, - STATE(142), 1, + STATE(169), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4472,9 +4487,9 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(119), 1, sym_struct_definition, - STATE(172), 1, + STATE(142), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4547,7 +4562,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4620,7 +4635,7 @@ static const uint16_t ts_small_parse_table[] = { sym_struct_definition, STATE(145), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4685,7 +4700,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -4766,7 +4781,7 @@ static const uint16_t ts_small_parse_table[] = { sym_struct_definition, STATE(123), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4831,7 +4846,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -4912,7 +4927,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4985,7 +5000,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(119), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5058,7 +5073,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5131,7 +5146,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5204,7 +5219,7 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5277,7 +5292,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5350,7 +5365,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5423,7 +5438,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5496,7 +5511,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5569,7 +5584,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5642,7 +5657,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5715,7 +5730,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5788,7 +5803,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5861,7 +5876,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5934,7 +5949,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6007,7 +6022,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6072,7 +6087,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -6145,7 +6160,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -6218,7 +6233,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -6291,7 +6306,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -6364,7 +6379,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -6437,7 +6452,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -6510,7 +6525,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -6583,7 +6598,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -6656,7 +6671,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -6729,7 +6744,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -6802,7 +6817,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -6875,7 +6890,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -6948,7 +6963,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -7021,13 +7036,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, STATE(144), 1, sym_struct_definition, - STATE(169), 1, + STATE(170), 1, sym_expression, STATE(308), 1, sym_integer, @@ -7094,13 +7109,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, STATE(144), 1, sym_struct_definition, - STATE(171), 1, + STATE(172), 1, sym_expression, STATE(308), 1, sym_integer, @@ -7167,7 +7182,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -7240,7 +7255,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -7321,7 +7336,7 @@ static const uint16_t ts_small_parse_table[] = { sym_struct_definition, STATE(221), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7386,7 +7401,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -7459,7 +7474,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(130), 1, + STATE(131), 1, sym__float, STATE(132), 1, sym_number, @@ -7540,7 +7555,7 @@ static const uint16_t ts_small_parse_table[] = { sym_struct_definition, STATE(223), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7613,7 +7628,7 @@ static const uint16_t ts_small_parse_table[] = { sym_struct_definition, STATE(226), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7686,7 +7701,7 @@ static const uint16_t ts_small_parse_table[] = { sym_struct_definition, STATE(227), 1, sym_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7759,7 +7774,7 @@ static const uint16_t ts_small_parse_table[] = { sym_expression, STATE(224), 1, sym_struct_definition, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7821,7 +7836,7 @@ static const uint16_t ts_small_parse_table[] = { ts_builtin_sym_end, sym_unit_quote, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -7864,7 +7879,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(136), 21, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -7905,7 +7920,7 @@ static const uint16_t ts_small_parse_table[] = { ts_builtin_sym_end, sym_unit_quote, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -7944,7 +7959,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(150), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -7985,7 +8000,7 @@ static const uint16_t ts_small_parse_table[] = { ts_builtin_sym_end, sym_unit_quote, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8024,7 +8039,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(160), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8065,7 +8080,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(166), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8106,7 +8121,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(170), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8147,7 +8162,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(177), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8188,7 +8203,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(184), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8229,7 +8244,7 @@ static const uint16_t ts_small_parse_table[] = { ts_builtin_sym_end, sym_unit_quote, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8265,7 +8280,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(188), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8305,7 +8320,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(192), 22, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -8342,7 +8357,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(198), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -8380,7 +8395,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(202), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -8418,7 +8433,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(170), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8456,7 +8471,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(206), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8479,7 +8494,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_GT_GT, [7595] = 6, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, STATE(111), 1, @@ -8535,7 +8550,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(218), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8573,7 +8588,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(222), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8611,7 +8626,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(226), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -8634,7 +8649,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH_GT, [7765] = 16, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -8698,7 +8713,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(250), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8721,7 +8736,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, [7871] = 20, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -8775,7 +8790,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, [7945] = 9, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -8832,7 +8847,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(266), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8855,7 +8870,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, [8037] = 7, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -8896,7 +8911,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, [8085] = 10, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -8940,7 +8955,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, [8139] = 11, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -8985,7 +9000,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, [8195] = 13, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -9032,7 +9047,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, [8255] = 12, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -9078,7 +9093,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, [8313] = 14, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -9126,7 +9141,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, [8375] = 20, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -9180,7 +9195,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, [8449] = 17, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -9231,7 +9246,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, [8517] = 18, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -9297,7 +9312,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(192), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9334,7 +9349,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(274), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9357,7 +9372,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, [8667] = 20, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -9425,7 +9440,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(282), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9462,7 +9477,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(286), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9499,7 +9514,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(290), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9536,7 +9551,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(294), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9573,7 +9588,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(298), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9596,7 +9611,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, [8941] = 20, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -9667,7 +9682,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(306), 21, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -9702,7 +9717,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(306), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9739,7 +9754,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(312), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9776,7 +9791,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(316), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9799,7 +9814,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, [9177] = 20, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -9867,7 +9882,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(324), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9904,7 +9919,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(328), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9941,7 +9956,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(332), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -9978,7 +9993,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(336), 23, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10020,7 +10035,7 @@ static const uint16_t ts_small_parse_table[] = { sym_unit_quote, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10036,16 +10051,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9452] = 4, + [9452] = 8, + ACTIONS(162), 1, + anon_sym_DOT, + ACTIONS(340), 1, + anon_sym_EQ, + ACTIONS(342), 1, + anon_sym_COLON, + STATE(80), 1, + aux_sym_identity_path_repeat1, + STATE(290), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(134), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(132), 9, - sym_identifier, - anon_sym_DOT, + ACTIONS(186), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -10053,9 +10073,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(130), 18, - sym_unit_quote, - anon_sym_COLON, + ACTIONS(184), 17, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10070,18 +10089,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - anon_sym_then, anon_sym_LPAREN, - [9492] = 5, - STATE(206), 1, - sym__unit, + anon_sym_RPAREN, + [9500] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(340), 2, + ACTIONS(134), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(132), 9, sym_identifier, - sym_unit_quote, - ACTIONS(142), 7, + anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -10089,10 +10108,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(136), 18, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON, + ACTIONS(130), 18, + sym_unit_quote, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10107,22 +10125,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_LPAREN, - [9533] = 8, - ACTIONS(162), 1, - anon_sym_DOT, - ACTIONS(342), 1, - anon_sym_COLON, - ACTIONS(344), 1, - anon_sym_EQ, - STATE(80), 1, - aux_sym_identity_path_repeat1, - STATE(290), 1, - sym_declaration_type, + [9540] = 5, + STATE(206), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 7, + ACTIONS(344), 2, + sym_identifier, + sym_unit_quote, + ACTIONS(142), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, @@ -10130,7 +10144,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_DOT_DOT, - ACTIONS(184), 16, + ACTIONS(136), 18, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10146,8 +10163,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_RPAREN, - [9580] = 4, + [9581] = 4, ACTIONS(346), 1, anon_sym_DOT, ACTIONS(3), 2, @@ -10166,7 +10182,7 @@ static const uint16_t ts_small_parse_table[] = { sym_unit_quote, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10182,7 +10198,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9619] = 3, + [9620] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10199,7 +10215,7 @@ static const uint16_t ts_small_parse_table[] = { sym_unit_quote, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10215,7 +10231,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9655] = 5, + [9656] = 5, ACTIONS(348), 1, anon_sym_DOT, STATE(141), 1, @@ -10234,7 +10250,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(184), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10250,7 +10266,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9695] = 5, + [9696] = 5, ACTIONS(350), 1, anon_sym_DOT, STATE(135), 1, @@ -10269,7 +10285,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(177), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10285,7 +10301,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9735] = 3, + [9736] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10302,7 +10318,7 @@ static const uint16_t ts_small_parse_table[] = { sym_unit_quote, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10318,7 +10334,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9771] = 5, + [9772] = 5, ACTIONS(353), 1, anon_sym_DOT, STATE(137), 1, @@ -10337,7 +10353,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(170), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10353,7 +10369,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9811] = 5, + [9812] = 5, ACTIONS(356), 1, anon_sym_DOT, STATE(135), 1, @@ -10372,7 +10388,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(166), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10388,7 +10404,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9851] = 6, + [9852] = 6, ACTIONS(138), 1, sym_identifier, ACTIONS(140), 1, @@ -10407,7 +10423,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, ACTIONS(136), 17, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10424,7 +10440,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_LPAREN, - [9893] = 4, + [9894] = 4, ACTIONS(358), 1, anon_sym_DOT, ACTIONS(3), 2, @@ -10441,7 +10457,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, ACTIONS(144), 18, sym_unit_quote, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10458,7 +10474,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_LPAREN, - [9931] = 5, + [9932] = 5, ACTIONS(348), 1, anon_sym_DOT, STATE(137), 1, @@ -10477,7 +10493,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(160), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10493,9 +10509,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9971] = 20, + [9972] = 20, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -10543,7 +10559,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10041] = 5, + [10042] = 5, ACTIONS(356), 1, anon_sym_DOT, STATE(138), 1, @@ -10562,7 +10578,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(150), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10578,7 +10594,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [10081] = 4, + [10082] = 4, ACTIONS(364), 1, anon_sym_DASH_GT, ACTIONS(3), 2, @@ -10596,7 +10612,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(306), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -10611,9 +10627,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [10118] = 19, + [10119] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -10659,13 +10675,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10185] = 20, + [10186] = 20, ACTIONS(368), 1, anon_sym_COMMA, ACTIONS(370), 1, anon_sym_RPAREN_GT, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -10708,9 +10724,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10254] = 19, + [10255] = 19, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -10756,7 +10772,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10321] = 4, + [10322] = 4, ACTIONS(196), 1, anon_sym_DASH_GT, ACTIONS(3), 2, @@ -10774,7 +10790,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(192), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -10789,9 +10805,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [10358] = 20, + [10359] = 20, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -10838,7 +10854,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10427] = 3, + [10428] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10854,7 +10870,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(218), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10870,7 +10886,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [10462] = 3, + [10463] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10885,7 +10901,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, ACTIONS(130), 18, sym_unit_quote, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10902,7 +10918,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_LPAREN, - [10497] = 3, + [10498] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10917,7 +10933,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT, ACTIONS(156), 18, sym_unit_quote, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10934,9 +10950,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_LPAREN, - [10532] = 6, + [10533] = 6, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(402), 1, anon_sym_LPAREN, STATE(213), 1, @@ -10969,9 +10985,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - [10573] = 20, + [10574] = 20, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11018,7 +11034,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10642] = 3, + [10643] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11034,7 +11050,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(170), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -11050,9 +11066,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [10677] = 19, + [10678] = 19, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11098,7 +11114,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10744] = 3, + [10745] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11114,7 +11130,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(198), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -11130,7 +11146,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_DASH_GT, - [10779] = 3, + [10780] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11146,7 +11162,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(202), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -11162,9 +11178,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_DASH_GT, - [10814] = 9, + [10815] = 9, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11200,11 +11216,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - [10861] = 20, + [10862] = 20, ACTIONS(45), 1, anon_sym_RBRACK, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -11249,9 +11265,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10930] = 10, + [10931] = 10, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11288,9 +11304,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - [10979] = 11, + [10980] = 11, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11328,9 +11344,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - [11030] = 13, + [11031] = 13, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11370,9 +11386,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - [11085] = 12, + [11086] = 12, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11411,9 +11427,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - [11138] = 14, + [11139] = 14, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11454,11 +11470,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - [11195] = 16, + [11196] = 16, ACTIONS(214), 1, anon_sym_DOT_DOT, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11499,11 +11515,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - [11256] = 17, + [11257] = 17, ACTIONS(214), 1, anon_sym_DOT_DOT, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11545,11 +11561,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11319] = 18, + [11320] = 18, ACTIONS(214), 1, anon_sym_DOT_DOT, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11592,9 +11608,57 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11384] = 19, + [11385] = 19, + ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_SLASH_SLASH, + ACTIONS(240), 1, + anon_sym_AMP, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_DOT_DOT, + ACTIONS(262), 1, + anon_sym_DOT_DOT_EQ, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(230), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(234), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(238), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(412), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(248), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [11452] = 19, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11640,7 +11704,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11451] = 3, + [11519] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -11656,7 +11720,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(226), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -11672,9 +11736,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, anon_sym_DASH_GT, - [11486] = 19, + [11554] = 19, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11720,57 +11784,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11553] = 19, - ACTIONS(212), 1, - anon_sym_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_SLASH_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, - anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, - ACTIONS(258), 1, - anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - STATE(111), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(230), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(234), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(238), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(412), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(248), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [11620] = 19, + [11621] = 19, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11816,11 +11832,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11687] = 20, + [11688] = 20, ACTIONS(94), 1, anon_sym_RBRACK, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -11865,9 +11881,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11756] = 20, + [11757] = 20, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -11914,9 +11930,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11825] = 20, + [11826] = 20, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -11963,9 +11979,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11894] = 20, + [11895] = 20, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -12012,9 +12028,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11963] = 7, + [11964] = 7, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(402), 1, @@ -12048,7 +12064,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, - [12006] = 3, + [12007] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -12063,7 +12079,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(294), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -12079,9 +12095,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [12040] = 19, + [12041] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(426), 1, @@ -12126,9 +12142,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12106] = 9, + [12107] = 9, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(426), 1, @@ -12163,7 +12179,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_then, - [12152] = 3, + [12153] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -12178,7 +12194,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(290), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -12194,9 +12210,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [12186] = 7, + [12187] = 7, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(426), 1, @@ -12229,9 +12245,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_then, - [12228] = 10, + [12229] = 10, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(426), 1, @@ -12267,9 +12283,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_then, - [12276] = 11, + [12277] = 11, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(426), 1, @@ -12306,9 +12322,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_then, - [12326] = 13, + [12327] = 13, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(426), 1, @@ -12347,9 +12363,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_then, - [12380] = 12, + [12381] = 12, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(426), 1, @@ -12387,9 +12403,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_then, - [12432] = 14, + [12433] = 14, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(426), 1, @@ -12429,9 +12445,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_then, - [12488] = 16, + [12489] = 16, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(214), 1, anon_sym_DOT_DOT, ACTIONS(216), 1, @@ -12473,9 +12489,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12548] = 17, + [12549] = 17, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(214), 1, anon_sym_DOT_DOT, ACTIONS(216), 1, @@ -12518,9 +12534,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12610] = 18, + [12611] = 18, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(214), 1, anon_sym_DOT_DOT, ACTIONS(216), 1, @@ -12564,7 +12580,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12674] = 3, + [12675] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -12579,7 +12595,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(192), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -12595,9 +12611,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [12708] = 19, + [12709] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(278), 1, @@ -12642,7 +12658,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12774] = 3, + [12775] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -12657,7 +12673,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(286), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -12673,7 +12689,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [12808] = 3, + [12809] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -12688,7 +12704,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(298), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -12704,9 +12720,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [12842] = 19, + [12843] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(302), 1, @@ -12751,7 +12767,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12908] = 3, + [12909] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -12766,7 +12782,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(316), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -12782,7 +12798,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [12942] = 3, + [12943] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -12797,7 +12813,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(312), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -12813,7 +12829,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [12976] = 3, + [12977] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -12828,7 +12844,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(324), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -12844,9 +12860,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13010] = 19, + [13011] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(320), 1, @@ -12891,7 +12907,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13076] = 3, + [13077] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -12906,7 +12922,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(332), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -12922,7 +12938,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13110] = 3, + [13111] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -12937,7 +12953,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(336), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -12953,9 +12969,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13144] = 19, + [13145] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -13000,7 +13016,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13210] = 3, + [13211] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -13015,7 +13031,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(206), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -13031,7 +13047,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13244] = 3, + [13245] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -13046,7 +13062,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(222), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -13062,7 +13078,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13278] = 3, + [13279] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -13077,7 +13093,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(188), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -13093,9 +13109,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13312] = 19, + [13313] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(426), 1, @@ -13140,9 +13156,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13378] = 19, + [13379] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -13187,9 +13203,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13444] = 19, + [13445] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -13234,9 +13250,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13510] = 19, + [13511] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -13281,7 +13297,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13576] = 3, + [13577] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -13296,7 +13312,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(306), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -13312,9 +13328,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13610] = 19, + [13611] = 19, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -13359,7 +13375,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13676] = 3, + [13677] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -13374,7 +13390,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(274), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -13390,9 +13406,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13710] = 19, + [13711] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(270), 1, @@ -13437,7 +13453,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13776] = 3, + [13777] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -13452,7 +13468,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(328), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -13468,7 +13484,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13810] = 3, + [13811] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -13483,7 +13499,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(266), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -13499,9 +13515,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13844] = 19, + [13845] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -13546,9 +13562,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13910] = 19, + [13911] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(254), 1, @@ -13593,9 +13609,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13976] = 19, + [13977] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -13640,7 +13656,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14042] = 3, + [14043] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -13655,7 +13671,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(282), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -13671,9 +13687,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [14076] = 19, + [14077] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -13718,9 +13734,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14142] = 19, + [14143] = 19, ACTIONS(372), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(376), 1, anon_sym_STAR_STAR, ACTIONS(380), 1, @@ -13765,9 +13781,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14208] = 19, + [14209] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -13812,7 +13828,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14274] = 4, + [14275] = 4, ACTIONS(476), 1, anon_sym_DASH_GT, ACTIONS(3), 2, @@ -13828,7 +13844,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_DOT_DOT, ACTIONS(306), 16, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -13844,9 +13860,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_LPAREN, - [14310] = 19, + [14311] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -13891,9 +13907,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14376] = 19, + [14377] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(232), 1, @@ -13938,9 +13954,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14442] = 19, + [14443] = 19, ACTIONS(212), 1, - anon_sym_COLON, + anon_sym_COLON_COLON, ACTIONS(216), 1, anon_sym_LPAREN, ACTIONS(426), 1, @@ -13985,7 +14001,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14508] = 3, + [14509] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14000,7 +14016,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(250), 18, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14016,7 +14032,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [14542] = 14, + [14543] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -14035,7 +14051,7 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(271), 1, sym_formula_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14055,7 +14071,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14595] = 14, + [14596] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -14074,7 +14090,7 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(263), 1, sym_formula_expression, - STATE(318), 1, + STATE(317), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14094,7 +14110,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14648] = 14, + [14649] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -14113,7 +14129,7 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(264), 1, sym_formula_expression, - STATE(318), 1, + STATE(317), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14133,7 +14149,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14701] = 14, + [14702] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -14152,7 +14168,7 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(268), 1, sym_formula_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14172,7 +14188,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14754] = 14, + [14755] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -14191,7 +14207,7 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(267), 1, sym_formula_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14211,7 +14227,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14807] = 14, + [14808] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -14230,7 +14246,7 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(258), 1, sym_formula_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14250,7 +14266,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14860] = 14, + [14861] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -14269,7 +14285,7 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(270), 1, sym_formula_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14289,7 +14305,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14913] = 14, + [14914] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -14308,7 +14324,7 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(269), 1, sym_formula_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14328,7 +14344,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14966] = 14, + [14967] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -14347,7 +14363,7 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(258), 1, sym_formula_expression, - STATE(318), 1, + STATE(317), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14367,7 +14383,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15019] = 14, + [15020] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -14386,7 +14402,7 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(265), 1, sym_formula_expression, - STATE(318), 1, + STATE(317), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14406,7 +14422,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15072] = 14, + [15073] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -14425,7 +14441,7 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(261), 1, sym_formula_expression, - STATE(318), 1, + STATE(317), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14445,7 +14461,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15125] = 14, + [15126] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -14464,7 +14480,7 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(266), 1, sym_formula_expression, - STATE(318), 1, + STATE(317), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14484,7 +14500,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15178] = 14, + [15179] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -14503,7 +14519,7 @@ static const uint16_t ts_small_parse_table[] = { sym_number, STATE(274), 1, sym_formula_expression, - STATE(319), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14523,7 +14539,7 @@ static const uint16_t ts_small_parse_table[] = { sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15231] = 5, + [15232] = 5, ACTIONS(492), 1, anon_sym_DOT, STATE(243), 1, @@ -14551,7 +14567,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15264] = 5, + [15265] = 5, ACTIONS(492), 1, anon_sym_DOT, STATE(244), 1, @@ -14579,7 +14595,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15297] = 5, + [15298] = 5, ACTIONS(494), 1, anon_sym_DOT, STATE(244), 1, @@ -14607,7 +14623,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15330] = 3, + [15331] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14632,7 +14648,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LT_LT_LT, - [15358] = 3, + [15359] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14657,7 +14673,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15386] = 3, + [15387] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14681,7 +14697,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15413] = 3, + [15414] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14705,7 +14721,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15440] = 3, + [15441] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14729,7 +14745,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15467] = 3, + [15468] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14753,7 +14769,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15494] = 4, + [15495] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14776,7 +14792,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15521] = 5, + [15522] = 5, STATE(259), 1, sym__unit, ACTIONS(3), 2, @@ -14798,7 +14814,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15548] = 4, + [15549] = 4, ACTIONS(503), 1, anon_sym_DOT, ACTIONS(3), 2, @@ -14819,7 +14835,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15573] = 3, + [15574] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14838,7 +14854,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15595] = 3, + [15596] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14857,7 +14873,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [15617] = 3, + [15618] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14876,7 +14892,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15639] = 3, + [15640] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14895,7 +14911,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [15661] = 3, + [15662] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14914,7 +14930,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [15683] = 3, + [15684] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14931,7 +14947,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15703] = 3, + [15704] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14948,7 +14964,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15723] = 7, + [15724] = 7, ACTIONS(519), 1, anon_sym_STAR_STAR, ACTIONS(521), 1, @@ -14969,7 +14985,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15751] = 3, + [15752] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14986,7 +15002,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15771] = 7, + [15772] = 7, ACTIONS(519), 1, anon_sym_STAR_STAR, ACTIONS(521), 1, @@ -15007,7 +15023,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15799] = 7, + [15800] = 7, ACTIONS(519), 1, anon_sym_STAR_STAR, ACTIONS(521), 1, @@ -15028,7 +15044,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15827] = 6, + [15828] = 6, ACTIONS(519), 1, anon_sym_STAR_STAR, ACTIONS(521), 1, @@ -15048,7 +15064,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15853] = 4, + [15854] = 4, ACTIONS(519), 1, anon_sym_STAR_STAR, ACTIONS(3), 2, @@ -15066,7 +15082,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15875] = 5, + [15876] = 5, ACTIONS(537), 1, anon_sym_STAR_STAR, ACTIONS(539), 1, @@ -15081,7 +15097,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [15895] = 6, + [15896] = 6, ACTIONS(537), 1, anon_sym_STAR_STAR, ACTIONS(539), 1, @@ -15097,7 +15113,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - [15917] = 4, + [15918] = 4, ACTIONS(515), 1, anon_sym_STAR, ACTIONS(537), 1, @@ -15111,7 +15127,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SLASH, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [15935] = 6, + [15936] = 6, ACTIONS(537), 1, anon_sym_STAR_STAR, ACTIONS(539), 1, @@ -15126,7 +15142,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - [15956] = 6, + [15957] = 6, ACTIONS(537), 1, anon_sym_STAR_STAR, ACTIONS(539), 1, @@ -15141,7 +15157,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - [15977] = 7, + [15978] = 7, ACTIONS(39), 1, sym_varadic_dots, ACTIONS(549), 1, @@ -15157,7 +15173,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16000] = 7, + [16001] = 7, ACTIONS(39), 1, sym_varadic_dots, ACTIONS(549), 1, @@ -15168,12 +15184,12 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_struct_definition_repeat1, STATE(316), 1, sym_struct_member, - STATE(335), 1, + STATE(332), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16023] = 6, + [16024] = 6, ACTIONS(537), 1, anon_sym_STAR_STAR, ACTIONS(539), 1, @@ -15188,7 +15204,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - [16044] = 7, + [16045] = 7, ACTIONS(39), 1, sym_varadic_dots, ACTIONS(549), 1, @@ -15204,7 +15220,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16067] = 7, + [16068] = 7, ACTIONS(39), 1, sym_varadic_dots, ACTIONS(549), 1, @@ -15220,7 +15236,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16090] = 5, + [16091] = 5, ACTIONS(561), 1, sym_identifier, STATE(277), 1, @@ -15233,7 +15249,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(564), 2, anon_sym_RPAREN, sym_varadic_dots, - [16108] = 4, + [16109] = 4, ACTIONS(566), 1, sym_identifier, ACTIONS(569), 1, @@ -15244,7 +15260,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(278), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16123] = 4, + [16124] = 4, ACTIONS(571), 1, sym_identifier, ACTIONS(573), 1, @@ -15255,7 +15271,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(283), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16138] = 4, + [16139] = 4, ACTIONS(571), 1, sym_identifier, ACTIONS(575), 1, @@ -15266,7 +15282,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(278), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16153] = 4, + [16154] = 4, ACTIONS(577), 1, sym_identifier, ACTIONS(579), 1, @@ -15277,7 +15293,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(49), 2, sym_identity_path, sym_struct_definition, - [16168] = 4, + [16169] = 4, ACTIONS(577), 1, sym_identifier, ACTIONS(579), 1, @@ -15288,7 +15304,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(65), 2, sym_identity_path, sym_struct_definition, - [16183] = 4, + [16184] = 4, ACTIONS(571), 1, sym_identifier, ACTIONS(581), 1, @@ -15299,7 +15315,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(278), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16198] = 4, + [16199] = 4, ACTIONS(571), 1, sym_identifier, ACTIONS(583), 1, @@ -15310,7 +15326,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(280), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16213] = 4, + [16214] = 4, ACTIONS(577), 1, sym_identifier, ACTIONS(579), 1, @@ -15321,7 +15337,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(30), 2, sym_identity_path, sym_struct_definition, - [16228] = 4, + [16229] = 4, ACTIONS(571), 1, sym_identifier, ACTIONS(585), 1, @@ -15332,7 +15348,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(287), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16243] = 4, + [16244] = 4, ACTIONS(571), 1, sym_identifier, ACTIONS(587), 1, @@ -15343,7 +15359,7 @@ static const uint16_t ts_small_parse_table[] = { STATE(278), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16258] = 4, + [16259] = 4, ACTIONS(589), 1, anon_sym_COMMA, ACTIONS(591), 1, @@ -15353,7 +15369,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16272] = 4, + [16273] = 4, ACTIONS(593), 1, anon_sym_COMMA, ACTIONS(595), 1, @@ -15363,7 +15379,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16286] = 3, + [16287] = 3, ACTIONS(599), 1, anon_sym_EQ, ACTIONS(3), 2, @@ -15372,7 +15388,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(597), 2, anon_sym_COMMA, anon_sym_RPAREN, - [16298] = 4, + [16299] = 4, ACTIONS(601), 1, sym_identifier, ACTIONS(603), 1, @@ -15382,7 +15398,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16312] = 4, + [16313] = 4, ACTIONS(603), 1, anon_sym_RPAREN, ACTIONS(605), 1, @@ -15392,7 +15408,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16326] = 4, + [16327] = 4, ACTIONS(601), 1, sym_identifier, ACTIONS(607), 1, @@ -15402,7 +15418,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16340] = 4, + [16341] = 4, ACTIONS(601), 1, sym_identifier, ACTIONS(609), 1, @@ -15412,7 +15428,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16354] = 4, + [16355] = 4, ACTIONS(609), 1, anon_sym_RPAREN, ACTIONS(611), 1, @@ -15422,7 +15438,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16368] = 4, + [16369] = 4, ACTIONS(601), 1, sym_identifier, ACTIONS(613), 1, @@ -15432,7 +15448,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16382] = 4, + [16383] = 4, ACTIONS(601), 1, sym_identifier, ACTIONS(615), 1, @@ -15442,7 +15458,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16396] = 4, + [16397] = 4, ACTIONS(617), 1, anon_sym_COMMA, ACTIONS(620), 1, @@ -15452,7 +15468,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16410] = 2, + [16411] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -15460,7 +15476,7 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, anon_sym_RPAREN, sym_varadic_dots, - [16420] = 4, + [16421] = 4, ACTIONS(601), 1, sym_identifier, ACTIONS(622), 1, @@ -15470,30 +15486,37 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16434] = 2, + [16435] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(624), 2, sym_identifier, anon_sym_in, - [16443] = 3, - ACTIONS(601), 1, - sym_identifier, - STATE(314), 1, - sym_dictionary_member_assignment, + [16444] = 3, + ACTIONS(626), 1, + aux_sym_base_ten_token1, + STATE(79), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16454] = 3, - ACTIONS(342), 1, + [16455] = 3, + ACTIONS(628), 1, anon_sym_COLON, STATE(290), 1, sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16465] = 3, + [16466] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(630), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [16475] = 3, ACTIONS(402), 1, anon_sym_LPAREN, STATE(195), 1, @@ -15501,21 +15524,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16476] = 2, + [16486] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(626), 2, + ACTIONS(632), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [16485] = 2, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(628), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [16494] = 3, + [16495] = 3, ACTIONS(216), 1, anon_sym_LPAREN, STATE(117), 1, @@ -15523,225 +15539,225 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - [16505] = 3, - ACTIONS(630), 1, + [16506] = 3, + ACTIONS(634), 1, aux_sym_signed_integer_token1, - ACTIONS(632), 1, + ACTIONS(636), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16516] = 2, + [16517] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(634), 2, + ACTIONS(638), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [16525] = 3, - ACTIONS(636), 1, + [16526] = 3, + ACTIONS(640), 1, anon_sym_COMMA, - ACTIONS(638), 1, + ACTIONS(642), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16536] = 3, - ACTIONS(640), 1, + [16537] = 3, + ACTIONS(644), 1, aux_sym_base_ten_token1, STATE(256), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16547] = 3, - ACTIONS(642), 1, + [16548] = 3, + ACTIONS(646), 1, aux_sym_base_ten_token1, STATE(133), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16558] = 2, + [16559] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(644), 2, + ACTIONS(648), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [16567] = 2, + [16568] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(620), 2, anon_sym_COMMA, anon_sym_RPAREN, - [16576] = 3, - ACTIONS(646), 1, + [16577] = 3, + ACTIONS(650), 1, aux_sym_base_ten_token1, STATE(152), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16587] = 3, - ACTIONS(638), 1, + [16588] = 3, + ACTIONS(642), 1, anon_sym_RPAREN, - ACTIONS(648), 1, + ACTIONS(652), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16598] = 3, - ACTIONS(650), 1, - aux_sym_base_ten_token1, - STATE(79), 1, - sym_number, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [16609] = 3, - ACTIONS(652), 1, - aux_sym_signed_integer_token1, + [16599] = 3, ACTIONS(654), 1, + aux_sym_signed_integer_token1, + ACTIONS(656), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16620] = 3, - ACTIONS(656), 1, - aux_sym_signed_integer_token1, + [16610] = 3, ACTIONS(658), 1, + aux_sym_signed_integer_token1, + ACTIONS(660), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16631] = 2, - ACTIONS(660), 1, - anon_sym_RPAREN, + [16621] = 3, + ACTIONS(601), 1, + sym_identifier, + STATE(314), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16639] = 2, + [16632] = 2, ACTIONS(662), 1, - aux_sym_base_ten_token1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16647] = 2, + [16640] = 2, ACTIONS(664), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16655] = 2, + [16648] = 2, ACTIONS(666), 1, - anon_sym_EQ, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16663] = 2, + [16656] = 2, ACTIONS(668), 1, - sym_identifier, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16671] = 2, + [16664] = 2, ACTIONS(670), 1, - aux_sym_binary_token2, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16679] = 2, + [16672] = 2, ACTIONS(672), 1, - sym_identifier, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16687] = 2, + [16680] = 2, ACTIONS(674), 1, - aux_sym_hex_token2, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16695] = 2, + [16688] = 2, ACTIONS(676), 1, - anon_sym_RPAREN, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16703] = 2, + [16696] = 2, ACTIONS(678), 1, - anon_sym_EQ, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16711] = 2, + [16704] = 2, ACTIONS(680), 1, - sym_identifier, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16719] = 2, + [16712] = 2, ACTIONS(682), 1, - anon_sym_RPAREN, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16727] = 2, + [16720] = 2, ACTIONS(684), 1, - sym_identifier, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16735] = 2, + [16728] = 2, ACTIONS(686), 1, - sym_identifier, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16743] = 2, - ACTIONS(648), 1, - anon_sym_COMMA, + [16736] = 2, + ACTIONS(688), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16751] = 2, - ACTIONS(688), 1, - anon_sym_RPAREN, + [16744] = 2, + ACTIONS(652), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16759] = 2, + [16752] = 2, ACTIONS(690), 1, - ts_builtin_sym_end, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16767] = 2, + [16760] = 2, ACTIONS(692), 1, - sym_identifier, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16775] = 2, + [16768] = 2, ACTIONS(694), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16783] = 2, + [16776] = 2, ACTIONS(696), 1, - anon_sym_RPAREN, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16791] = 2, + [16784] = 2, ACTIONS(698), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, + [16792] = 2, + ACTIONS(700), 1, + ts_builtin_sym_end, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, }; static const uint32_t ts_small_parse_table_map[] = { @@ -15871,217 +15887,217 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(127)] = 9371, [SMALL_STATE(128)] = 9411, [SMALL_STATE(129)] = 9452, - [SMALL_STATE(130)] = 9492, - [SMALL_STATE(131)] = 9533, - [SMALL_STATE(132)] = 9580, - [SMALL_STATE(133)] = 9619, - [SMALL_STATE(134)] = 9655, - [SMALL_STATE(135)] = 9695, - [SMALL_STATE(136)] = 9735, - [SMALL_STATE(137)] = 9771, - [SMALL_STATE(138)] = 9811, - [SMALL_STATE(139)] = 9851, - [SMALL_STATE(140)] = 9893, - [SMALL_STATE(141)] = 9931, - [SMALL_STATE(142)] = 9971, - [SMALL_STATE(143)] = 10041, - [SMALL_STATE(144)] = 10081, - [SMALL_STATE(145)] = 10118, - [SMALL_STATE(146)] = 10185, - [SMALL_STATE(147)] = 10254, - [SMALL_STATE(148)] = 10321, - [SMALL_STATE(149)] = 10358, - [SMALL_STATE(150)] = 10427, - [SMALL_STATE(151)] = 10462, - [SMALL_STATE(152)] = 10497, - [SMALL_STATE(153)] = 10532, - [SMALL_STATE(154)] = 10573, - [SMALL_STATE(155)] = 10642, - [SMALL_STATE(156)] = 10677, - [SMALL_STATE(157)] = 10744, - [SMALL_STATE(158)] = 10779, - [SMALL_STATE(159)] = 10814, - [SMALL_STATE(160)] = 10861, - [SMALL_STATE(161)] = 10930, - [SMALL_STATE(162)] = 10979, - [SMALL_STATE(163)] = 11030, - [SMALL_STATE(164)] = 11085, - [SMALL_STATE(165)] = 11138, - [SMALL_STATE(166)] = 11195, - [SMALL_STATE(167)] = 11256, - [SMALL_STATE(168)] = 11319, - [SMALL_STATE(169)] = 11384, - [SMALL_STATE(170)] = 11451, - [SMALL_STATE(171)] = 11486, - [SMALL_STATE(172)] = 11553, - [SMALL_STATE(173)] = 11620, - [SMALL_STATE(174)] = 11687, - [SMALL_STATE(175)] = 11756, - [SMALL_STATE(176)] = 11825, - [SMALL_STATE(177)] = 11894, - [SMALL_STATE(178)] = 11963, - [SMALL_STATE(179)] = 12006, - [SMALL_STATE(180)] = 12040, - [SMALL_STATE(181)] = 12106, - [SMALL_STATE(182)] = 12152, - [SMALL_STATE(183)] = 12186, - [SMALL_STATE(184)] = 12228, - [SMALL_STATE(185)] = 12276, - [SMALL_STATE(186)] = 12326, - [SMALL_STATE(187)] = 12380, - [SMALL_STATE(188)] = 12432, - [SMALL_STATE(189)] = 12488, - [SMALL_STATE(190)] = 12548, - [SMALL_STATE(191)] = 12610, - [SMALL_STATE(192)] = 12674, - [SMALL_STATE(193)] = 12708, - [SMALL_STATE(194)] = 12774, - [SMALL_STATE(195)] = 12808, - [SMALL_STATE(196)] = 12842, - [SMALL_STATE(197)] = 12908, - [SMALL_STATE(198)] = 12942, - [SMALL_STATE(199)] = 12976, - [SMALL_STATE(200)] = 13010, - [SMALL_STATE(201)] = 13076, - [SMALL_STATE(202)] = 13110, - [SMALL_STATE(203)] = 13144, - [SMALL_STATE(204)] = 13210, - [SMALL_STATE(205)] = 13244, - [SMALL_STATE(206)] = 13278, - [SMALL_STATE(207)] = 13312, - [SMALL_STATE(208)] = 13378, - [SMALL_STATE(209)] = 13444, - [SMALL_STATE(210)] = 13510, - [SMALL_STATE(211)] = 13576, - [SMALL_STATE(212)] = 13610, - [SMALL_STATE(213)] = 13676, - [SMALL_STATE(214)] = 13710, - [SMALL_STATE(215)] = 13776, - [SMALL_STATE(216)] = 13810, - [SMALL_STATE(217)] = 13844, - [SMALL_STATE(218)] = 13910, - [SMALL_STATE(219)] = 13976, - [SMALL_STATE(220)] = 14042, - [SMALL_STATE(221)] = 14076, - [SMALL_STATE(222)] = 14142, - [SMALL_STATE(223)] = 14208, - [SMALL_STATE(224)] = 14274, - [SMALL_STATE(225)] = 14310, - [SMALL_STATE(226)] = 14376, - [SMALL_STATE(227)] = 14442, - [SMALL_STATE(228)] = 14508, - [SMALL_STATE(229)] = 14542, - [SMALL_STATE(230)] = 14595, - [SMALL_STATE(231)] = 14648, - [SMALL_STATE(232)] = 14701, - [SMALL_STATE(233)] = 14754, - [SMALL_STATE(234)] = 14807, - [SMALL_STATE(235)] = 14860, - [SMALL_STATE(236)] = 14913, - [SMALL_STATE(237)] = 14966, - [SMALL_STATE(238)] = 15019, - [SMALL_STATE(239)] = 15072, - [SMALL_STATE(240)] = 15125, - [SMALL_STATE(241)] = 15178, - [SMALL_STATE(242)] = 15231, - [SMALL_STATE(243)] = 15264, - [SMALL_STATE(244)] = 15297, - [SMALL_STATE(245)] = 15330, - [SMALL_STATE(246)] = 15358, - [SMALL_STATE(247)] = 15386, - [SMALL_STATE(248)] = 15413, - [SMALL_STATE(249)] = 15440, - [SMALL_STATE(250)] = 15467, - [SMALL_STATE(251)] = 15494, - [SMALL_STATE(252)] = 15521, - [SMALL_STATE(253)] = 15548, - [SMALL_STATE(254)] = 15573, - [SMALL_STATE(255)] = 15595, - [SMALL_STATE(256)] = 15617, - [SMALL_STATE(257)] = 15639, - [SMALL_STATE(258)] = 15661, - [SMALL_STATE(259)] = 15683, - [SMALL_STATE(260)] = 15703, - [SMALL_STATE(261)] = 15723, - [SMALL_STATE(262)] = 15751, - [SMALL_STATE(263)] = 15771, - [SMALL_STATE(264)] = 15799, - [SMALL_STATE(265)] = 15827, - [SMALL_STATE(266)] = 15853, - [SMALL_STATE(267)] = 15875, - [SMALL_STATE(268)] = 15895, - [SMALL_STATE(269)] = 15917, - [SMALL_STATE(270)] = 15935, - [SMALL_STATE(271)] = 15956, - [SMALL_STATE(272)] = 15977, - [SMALL_STATE(273)] = 16000, - [SMALL_STATE(274)] = 16023, - [SMALL_STATE(275)] = 16044, - [SMALL_STATE(276)] = 16067, - [SMALL_STATE(277)] = 16090, - [SMALL_STATE(278)] = 16108, - [SMALL_STATE(279)] = 16123, - [SMALL_STATE(280)] = 16138, - [SMALL_STATE(281)] = 16153, - [SMALL_STATE(282)] = 16168, - [SMALL_STATE(283)] = 16183, - [SMALL_STATE(284)] = 16198, - [SMALL_STATE(285)] = 16213, - [SMALL_STATE(286)] = 16228, - [SMALL_STATE(287)] = 16243, - [SMALL_STATE(288)] = 16258, - [SMALL_STATE(289)] = 16272, - [SMALL_STATE(290)] = 16286, - [SMALL_STATE(291)] = 16298, - [SMALL_STATE(292)] = 16312, - [SMALL_STATE(293)] = 16326, - [SMALL_STATE(294)] = 16340, - [SMALL_STATE(295)] = 16354, - [SMALL_STATE(296)] = 16368, - [SMALL_STATE(297)] = 16382, - [SMALL_STATE(298)] = 16396, - [SMALL_STATE(299)] = 16410, - [SMALL_STATE(300)] = 16420, - [SMALL_STATE(301)] = 16434, - [SMALL_STATE(302)] = 16443, - [SMALL_STATE(303)] = 16454, - [SMALL_STATE(304)] = 16465, - [SMALL_STATE(305)] = 16476, - [SMALL_STATE(306)] = 16485, - [SMALL_STATE(307)] = 16494, - [SMALL_STATE(308)] = 16505, - [SMALL_STATE(309)] = 16516, - [SMALL_STATE(310)] = 16525, - [SMALL_STATE(311)] = 16536, - [SMALL_STATE(312)] = 16547, - [SMALL_STATE(313)] = 16558, - [SMALL_STATE(314)] = 16567, - [SMALL_STATE(315)] = 16576, - [SMALL_STATE(316)] = 16587, - [SMALL_STATE(317)] = 16598, - [SMALL_STATE(318)] = 16609, - [SMALL_STATE(319)] = 16620, - [SMALL_STATE(320)] = 16631, - [SMALL_STATE(321)] = 16639, - [SMALL_STATE(322)] = 16647, - [SMALL_STATE(323)] = 16655, - [SMALL_STATE(324)] = 16663, - [SMALL_STATE(325)] = 16671, - [SMALL_STATE(326)] = 16679, - [SMALL_STATE(327)] = 16687, - [SMALL_STATE(328)] = 16695, - [SMALL_STATE(329)] = 16703, - [SMALL_STATE(330)] = 16711, - [SMALL_STATE(331)] = 16719, - [SMALL_STATE(332)] = 16727, - [SMALL_STATE(333)] = 16735, - [SMALL_STATE(334)] = 16743, - [SMALL_STATE(335)] = 16751, - [SMALL_STATE(336)] = 16759, - [SMALL_STATE(337)] = 16767, - [SMALL_STATE(338)] = 16775, - [SMALL_STATE(339)] = 16783, - [SMALL_STATE(340)] = 16791, + [SMALL_STATE(130)] = 9500, + [SMALL_STATE(131)] = 9540, + [SMALL_STATE(132)] = 9581, + [SMALL_STATE(133)] = 9620, + [SMALL_STATE(134)] = 9656, + [SMALL_STATE(135)] = 9696, + [SMALL_STATE(136)] = 9736, + [SMALL_STATE(137)] = 9772, + [SMALL_STATE(138)] = 9812, + [SMALL_STATE(139)] = 9852, + [SMALL_STATE(140)] = 9894, + [SMALL_STATE(141)] = 9932, + [SMALL_STATE(142)] = 9972, + [SMALL_STATE(143)] = 10042, + [SMALL_STATE(144)] = 10082, + [SMALL_STATE(145)] = 10119, + [SMALL_STATE(146)] = 10186, + [SMALL_STATE(147)] = 10255, + [SMALL_STATE(148)] = 10322, + [SMALL_STATE(149)] = 10359, + [SMALL_STATE(150)] = 10428, + [SMALL_STATE(151)] = 10463, + [SMALL_STATE(152)] = 10498, + [SMALL_STATE(153)] = 10533, + [SMALL_STATE(154)] = 10574, + [SMALL_STATE(155)] = 10643, + [SMALL_STATE(156)] = 10678, + [SMALL_STATE(157)] = 10745, + [SMALL_STATE(158)] = 10780, + [SMALL_STATE(159)] = 10815, + [SMALL_STATE(160)] = 10862, + [SMALL_STATE(161)] = 10931, + [SMALL_STATE(162)] = 10980, + [SMALL_STATE(163)] = 11031, + [SMALL_STATE(164)] = 11086, + [SMALL_STATE(165)] = 11139, + [SMALL_STATE(166)] = 11196, + [SMALL_STATE(167)] = 11257, + [SMALL_STATE(168)] = 11320, + [SMALL_STATE(169)] = 11385, + [SMALL_STATE(170)] = 11452, + [SMALL_STATE(171)] = 11519, + [SMALL_STATE(172)] = 11554, + [SMALL_STATE(173)] = 11621, + [SMALL_STATE(174)] = 11688, + [SMALL_STATE(175)] = 11757, + [SMALL_STATE(176)] = 11826, + [SMALL_STATE(177)] = 11895, + [SMALL_STATE(178)] = 11964, + [SMALL_STATE(179)] = 12007, + [SMALL_STATE(180)] = 12041, + [SMALL_STATE(181)] = 12107, + [SMALL_STATE(182)] = 12153, + [SMALL_STATE(183)] = 12187, + [SMALL_STATE(184)] = 12229, + [SMALL_STATE(185)] = 12277, + [SMALL_STATE(186)] = 12327, + [SMALL_STATE(187)] = 12381, + [SMALL_STATE(188)] = 12433, + [SMALL_STATE(189)] = 12489, + [SMALL_STATE(190)] = 12549, + [SMALL_STATE(191)] = 12611, + [SMALL_STATE(192)] = 12675, + [SMALL_STATE(193)] = 12709, + [SMALL_STATE(194)] = 12775, + [SMALL_STATE(195)] = 12809, + [SMALL_STATE(196)] = 12843, + [SMALL_STATE(197)] = 12909, + [SMALL_STATE(198)] = 12943, + [SMALL_STATE(199)] = 12977, + [SMALL_STATE(200)] = 13011, + [SMALL_STATE(201)] = 13077, + [SMALL_STATE(202)] = 13111, + [SMALL_STATE(203)] = 13145, + [SMALL_STATE(204)] = 13211, + [SMALL_STATE(205)] = 13245, + [SMALL_STATE(206)] = 13279, + [SMALL_STATE(207)] = 13313, + [SMALL_STATE(208)] = 13379, + [SMALL_STATE(209)] = 13445, + [SMALL_STATE(210)] = 13511, + [SMALL_STATE(211)] = 13577, + [SMALL_STATE(212)] = 13611, + [SMALL_STATE(213)] = 13677, + [SMALL_STATE(214)] = 13711, + [SMALL_STATE(215)] = 13777, + [SMALL_STATE(216)] = 13811, + [SMALL_STATE(217)] = 13845, + [SMALL_STATE(218)] = 13911, + [SMALL_STATE(219)] = 13977, + [SMALL_STATE(220)] = 14043, + [SMALL_STATE(221)] = 14077, + [SMALL_STATE(222)] = 14143, + [SMALL_STATE(223)] = 14209, + [SMALL_STATE(224)] = 14275, + [SMALL_STATE(225)] = 14311, + [SMALL_STATE(226)] = 14377, + [SMALL_STATE(227)] = 14443, + [SMALL_STATE(228)] = 14509, + [SMALL_STATE(229)] = 14543, + [SMALL_STATE(230)] = 14596, + [SMALL_STATE(231)] = 14649, + [SMALL_STATE(232)] = 14702, + [SMALL_STATE(233)] = 14755, + [SMALL_STATE(234)] = 14808, + [SMALL_STATE(235)] = 14861, + [SMALL_STATE(236)] = 14914, + [SMALL_STATE(237)] = 14967, + [SMALL_STATE(238)] = 15020, + [SMALL_STATE(239)] = 15073, + [SMALL_STATE(240)] = 15126, + [SMALL_STATE(241)] = 15179, + [SMALL_STATE(242)] = 15232, + [SMALL_STATE(243)] = 15265, + [SMALL_STATE(244)] = 15298, + [SMALL_STATE(245)] = 15331, + [SMALL_STATE(246)] = 15359, + [SMALL_STATE(247)] = 15387, + [SMALL_STATE(248)] = 15414, + [SMALL_STATE(249)] = 15441, + [SMALL_STATE(250)] = 15468, + [SMALL_STATE(251)] = 15495, + [SMALL_STATE(252)] = 15522, + [SMALL_STATE(253)] = 15549, + [SMALL_STATE(254)] = 15574, + [SMALL_STATE(255)] = 15596, + [SMALL_STATE(256)] = 15618, + [SMALL_STATE(257)] = 15640, + [SMALL_STATE(258)] = 15662, + [SMALL_STATE(259)] = 15684, + [SMALL_STATE(260)] = 15704, + [SMALL_STATE(261)] = 15724, + [SMALL_STATE(262)] = 15752, + [SMALL_STATE(263)] = 15772, + [SMALL_STATE(264)] = 15800, + [SMALL_STATE(265)] = 15828, + [SMALL_STATE(266)] = 15854, + [SMALL_STATE(267)] = 15876, + [SMALL_STATE(268)] = 15896, + [SMALL_STATE(269)] = 15918, + [SMALL_STATE(270)] = 15936, + [SMALL_STATE(271)] = 15957, + [SMALL_STATE(272)] = 15978, + [SMALL_STATE(273)] = 16001, + [SMALL_STATE(274)] = 16024, + [SMALL_STATE(275)] = 16045, + [SMALL_STATE(276)] = 16068, + [SMALL_STATE(277)] = 16091, + [SMALL_STATE(278)] = 16109, + [SMALL_STATE(279)] = 16124, + [SMALL_STATE(280)] = 16139, + [SMALL_STATE(281)] = 16154, + [SMALL_STATE(282)] = 16169, + [SMALL_STATE(283)] = 16184, + [SMALL_STATE(284)] = 16199, + [SMALL_STATE(285)] = 16214, + [SMALL_STATE(286)] = 16229, + [SMALL_STATE(287)] = 16244, + [SMALL_STATE(288)] = 16259, + [SMALL_STATE(289)] = 16273, + [SMALL_STATE(290)] = 16287, + [SMALL_STATE(291)] = 16299, + [SMALL_STATE(292)] = 16313, + [SMALL_STATE(293)] = 16327, + [SMALL_STATE(294)] = 16341, + [SMALL_STATE(295)] = 16355, + [SMALL_STATE(296)] = 16369, + [SMALL_STATE(297)] = 16383, + [SMALL_STATE(298)] = 16397, + [SMALL_STATE(299)] = 16411, + [SMALL_STATE(300)] = 16421, + [SMALL_STATE(301)] = 16435, + [SMALL_STATE(302)] = 16444, + [SMALL_STATE(303)] = 16455, + [SMALL_STATE(304)] = 16466, + [SMALL_STATE(305)] = 16475, + [SMALL_STATE(306)] = 16486, + [SMALL_STATE(307)] = 16495, + [SMALL_STATE(308)] = 16506, + [SMALL_STATE(309)] = 16517, + [SMALL_STATE(310)] = 16526, + [SMALL_STATE(311)] = 16537, + [SMALL_STATE(312)] = 16548, + [SMALL_STATE(313)] = 16559, + [SMALL_STATE(314)] = 16568, + [SMALL_STATE(315)] = 16577, + [SMALL_STATE(316)] = 16588, + [SMALL_STATE(317)] = 16599, + [SMALL_STATE(318)] = 16610, + [SMALL_STATE(319)] = 16621, + [SMALL_STATE(320)] = 16632, + [SMALL_STATE(321)] = 16640, + [SMALL_STATE(322)] = 16648, + [SMALL_STATE(323)] = 16656, + [SMALL_STATE(324)] = 16664, + [SMALL_STATE(325)] = 16672, + [SMALL_STATE(326)] = 16680, + [SMALL_STATE(327)] = 16688, + [SMALL_STATE(328)] = 16696, + [SMALL_STATE(329)] = 16704, + [SMALL_STATE(330)] = 16712, + [SMALL_STATE(331)] = 16720, + [SMALL_STATE(332)] = 16728, + [SMALL_STATE(333)] = 16736, + [SMALL_STATE(334)] = 16744, + [SMALL_STATE(335)] = 16752, + [SMALL_STATE(336)] = 16760, + [SMALL_STATE(337)] = 16768, + [SMALL_STATE(338)] = 16776, + [SMALL_STATE(339)] = 16784, + [SMALL_STATE(340)] = 16792, }; static const TSParseActionEntry ts_parse_actions[] = { @@ -16092,9 +16108,9 @@ static const TSParseActionEntry ts_parse_actions[] = { [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(336), [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(115), [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), @@ -16103,7 +16119,7 @@ static const TSParseActionEntry ts_parse_actions[] = { [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), - [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(129), [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), @@ -16113,9 +16129,9 @@ static const TSParseActionEntry ts_parse_actions[] = { [50] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(120), [53] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(78), [56] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(75), - [59] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(321), + [59] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(325), [62] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(327), - [65] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(325), + [65] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(336), [68] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(12), [71] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(115), [74] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(36), @@ -16127,7 +16143,7 @@ static const TSParseActionEntry ts_parse_actions[] = { [91] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(230), [94] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), [96] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), - [98] = {.entry = {.count = 1, .reusable = false}}, SHIFT(129), + [98] = {.entry = {.count = 1, .reusable = false}}, SHIFT(130), [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), [102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(73), [104] = {.entry = {.count = 1, .reusable = false}}, SHIFT(286), @@ -16152,9 +16168,9 @@ static const TSParseActionEntry ts_parse_actions[] = { [142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), [144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), [146] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [148] = {.entry = {.count = 1, .reusable = false}}, SHIFT(317), + [148] = {.entry = {.count = 1, .reusable = false}}, SHIFT(302), [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), - [152] = {.entry = {.count = 1, .reusable = false}}, SHIFT(332), + [152] = {.entry = {.count = 1, .reusable = false}}, SHIFT(333), [154] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), [156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), [158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), @@ -16167,7 +16183,7 @@ static const TSParseActionEntry ts_parse_actions[] = { [172] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(338), [175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [179] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(332), + [179] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(333), [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), [184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), @@ -16247,14 +16263,14 @@ static const TSParseActionEntry ts_parse_actions[] = { [334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 29), [336] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 30), [338] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 30), - [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), - [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [344] = {.entry = {.count = 1, .reusable = false}}, SHIFT(29), + [340] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), + [342] = {.entry = {.count = 1, .reusable = false}}, SHIFT(29), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), [346] = {.entry = {.count = 1, .reusable = false}}, SHIFT(312), [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(330), - [350] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(333), + [350] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(335), [353] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(330), - [356] = {.entry = {.count = 1, .reusable = false}}, SHIFT(333), + [356] = {.entry = {.count = 1, .reusable = false}}, SHIFT(335), [358] = {.entry = {.count = 1, .reusable = false}}, SHIFT(315), [360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), [362] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), @@ -16383,47 +16399,48 @@ static const TSParseActionEntry ts_parse_actions[] = { [611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), [613] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), [615] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [617] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(302), + [617] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(319), [620] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), [622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), [624] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 24), - [626] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [628] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), - [632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), - [634] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(340), - [638] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254), - [642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), - [644] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), - [650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), - [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), - [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), - [658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), - [660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), - [662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), - [664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), - [666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), - [670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), + [626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [630] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [632] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), + [636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), + [638] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [642] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254), + [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), + [648] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), + [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), + [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), + [658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [664] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), [672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), - [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), - [676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), - [682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), - [684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), - [690] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), - [694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), - [696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), - [698] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), + [676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), + [678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), + [686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), + [688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), + [694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), + [696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [698] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [700] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index aed22e5..b3f1493 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -137,7 +137,7 @@ value.value(value=value) Call method ================== -value:value(value=value) +value::value(value=value) --- @@ -159,7 +159,7 @@ value:value(value=value) Call method no arguments ================== -value:value() +value::value() --- @@ -176,7 +176,7 @@ value:value() Call method deep in tree ================== -value.value:value(value=value) +value.value::value(value=value) --- @@ -195,3 +195,22 @@ value.value:value(value=value) (identity_path (identifier)))))))) +================== +Call method inside parenthasis +================== + +(value::value()) + +--- + +(source_file + (expression + (parenthesis + (expression + (method_call + (expression + (identity_path + (identifier))) + (identifier) + (dictionary_construction)))))) + From 177ad45e050806b0ec78a7031b917e97fe6fb9f9 Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 2 Jan 2026 03:48:36 -0500 Subject: [PATCH 058/106] Remove range syntax --- crates/interpreter/src/compile/expressions.rs | 10 +- crates/interpreter/src/execution/mod.rs | 2 - .../tree-sitter-command-cad-model/grammar.js | 36 +- .../src/grammar.json | 122 +- .../src/node-types.json | 16 - .../src/parser.c | 10165 +++++++--------- 6 files changed, 4721 insertions(+), 5630 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 90ab25f..17fa1e2 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -563,8 +563,6 @@ pub enum BinaryExpressionOperation { MulMul, Add, Sub, - DotDot, - DotDotEq, Div, DivDiv, Lt, @@ -592,7 +590,7 @@ impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for BinaryExpression { input: &'i str, value: nodes::BinaryExpression<'t>, ) -> Result, Error<'t, 'i>> { - type Operation<'t> = nodes::anon_unions::Anon40940481278423458606720242092326701826<'t>; + type Operation<'t> = nodes::anon_unions::NotEq_And_AndAnd_Mul_MulMul_Add_Sub_Div_DivDiv_Lt_LtLt_LtEq_EqEq_Gt_GtEq_GtGt_BitXor_Or_OrOr<'t>; let operation = value.op()?; @@ -610,12 +608,6 @@ impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for BinaryExpression { } Operation::Add(add) => AstNode::new(file, &add, BinaryExpressionOperation::Add), Operation::Sub(sub) => AstNode::new(file, &sub, BinaryExpressionOperation::Sub), - Operation::DotDot(dot_dot) => { - AstNode::new(file, &dot_dot, BinaryExpressionOperation::DotDot) - } - Operation::DotDotEq(dot_dot_eq) => { - AstNode::new(file, &dot_dot_eq, BinaryExpressionOperation::DotDotEq) - } Operation::Div(div) => AstNode::new(file, &div, BinaryExpressionOperation::Div), Operation::DivDiv(div_div) => { AstNode::new(file, &div_div, BinaryExpressionOperation::DivDiv) diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index bc58e19..0edbd58 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -278,8 +278,6 @@ fn execute_binary_expression( BinaryExpressionOperation::MulMul => value_a.exponent(log, stack_trace, value_b), BinaryExpressionOperation::Add => value_a.addition(log, stack_trace, value_b), BinaryExpressionOperation::Sub => value_a.subtraction(log, stack_trace, value_b), - BinaryExpressionOperation::DotDot => todo!(), - BinaryExpressionOperation::DotDotEq => todo!(), BinaryExpressionOperation::Div => value_a.divide(log, stack_trace, value_b), BinaryExpressionOperation::DivDiv => { value_a.floor_divide(log, stack_trace, value_b) diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 9f2d786..65da2eb 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -8,23 +8,22 @@ // @ts-check const PREC = { - struct_member: 18, - unit: 17, - method_call: 16, - function_call: 15, - field: 14, - unary: 12, - exponential: 11, - multiplicative: 10, - additive: 9, - shift: 8, - bitand: 7, - bitxor: 6, - bitor: 5, - comparative: 4, - and: 3, - or: 2, - range: 1, + struct_member: 16, + unit: 15, + method_call: 14, + function_call: 13, + field: 12, + unary: 11, + exponential: 10, + multiplicative: 9, + additive: 8, + shift: 7, + bitand: 6, + bitxor: 5, + bitor: 4, + comparative: 3, + and: 2, + or: 1, assign: 0, closure: -1, struct_def: -2, @@ -65,9 +64,6 @@ const binary_operator_table = [ [PREC.and, '&&'], [PREC.or, '||'], - - [PREC.range, '..'], - [PREC.range, '..='], ]; const formula_binary_operator_table = [ diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 1119cab..5c0c71b 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -218,7 +218,7 @@ }, "scalar": { "type": "PREC_LEFT", - "value": 17, + "value": 15, "content": { "type": "SEQ", "members": [ @@ -406,7 +406,7 @@ "members": [ { "type": "PREC_LEFT", - "value": 15, + "value": 13, "content": { "type": "SEQ", "members": [ @@ -436,7 +436,7 @@ "members": [ { "type": "PREC_LEFT", - "value": 16, + "value": 14, "content": { "type": "SEQ", "members": [ @@ -642,7 +642,7 @@ "members": [ { "type": "PREC_LEFT", - "value": 11, + "value": 10, "content": { "type": "SEQ", "members": [ @@ -675,7 +675,7 @@ }, { "type": "PREC_LEFT", - "value": 10, + "value": 9, "content": { "type": "SEQ", "members": [ @@ -708,7 +708,7 @@ }, { "type": "PREC_LEFT", - "value": 10, + "value": 9, "content": { "type": "SEQ", "members": [ @@ -741,7 +741,7 @@ }, { "type": "PREC_LEFT", - "value": 10, + "value": 9, "content": { "type": "SEQ", "members": [ @@ -774,7 +774,7 @@ }, { "type": "PREC_LEFT", - "value": 9, + "value": 8, "content": { "type": "SEQ", "members": [ @@ -807,7 +807,7 @@ }, { "type": "PREC_LEFT", - "value": 9, + "value": 8, "content": { "type": "SEQ", "members": [ @@ -840,7 +840,7 @@ }, { "type": "PREC_LEFT", - "value": 8, + "value": 7, "content": { "type": "SEQ", "members": [ @@ -873,7 +873,7 @@ }, { "type": "PREC_LEFT", - "value": 8, + "value": 7, "content": { "type": "SEQ", "members": [ @@ -906,7 +906,7 @@ }, { "type": "PREC_LEFT", - "value": 7, + "value": 6, "content": { "type": "SEQ", "members": [ @@ -939,7 +939,7 @@ }, { "type": "PREC_LEFT", - "value": 5, + "value": 4, "content": { "type": "SEQ", "members": [ @@ -972,7 +972,7 @@ }, { "type": "PREC_LEFT", - "value": 6, + "value": 5, "content": { "type": "SEQ", "members": [ @@ -1005,7 +1005,7 @@ }, { "type": "PREC_LEFT", - "value": 4, + "value": 3, "content": { "type": "SEQ", "members": [ @@ -1038,7 +1038,7 @@ }, { "type": "PREC_LEFT", - "value": 4, + "value": 3, "content": { "type": "SEQ", "members": [ @@ -1071,7 +1071,7 @@ }, { "type": "PREC_LEFT", - "value": 4, + "value": 3, "content": { "type": "SEQ", "members": [ @@ -1104,7 +1104,7 @@ }, { "type": "PREC_LEFT", - "value": 4, + "value": 3, "content": { "type": "SEQ", "members": [ @@ -1137,7 +1137,7 @@ }, { "type": "PREC_LEFT", - "value": 4, + "value": 3, "content": { "type": "SEQ", "members": [ @@ -1168,39 +1168,6 @@ ] } }, - { - "type": "PREC_LEFT", - "value": 4, - "content": { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "a", - "content": { - "type": "SYMBOL", - "name": "expression" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "!=" - } - }, - { - "type": "FIELD", - "name": "b", - "content": { - "type": "SYMBOL", - "name": "expression" - } - } - ] - } - }, { "type": "PREC_LEFT", "value": 3, @@ -1220,7 +1187,7 @@ "name": "op", "content": { "type": "STRING", - "value": "&&" + "value": "!=" } }, { @@ -1253,40 +1220,7 @@ "name": "op", "content": { "type": "STRING", - "value": "||" - } - }, - { - "type": "FIELD", - "name": "b", - "content": { - "type": "SYMBOL", - "name": "expression" - } - } - ] - } - }, - { - "type": "PREC_LEFT", - "value": 1, - "content": { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "a", - "content": { - "type": "SYMBOL", - "name": "expression" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": ".." + "value": "&&" } }, { @@ -1319,7 +1253,7 @@ "name": "op", "content": { "type": "STRING", - "value": "..=" + "value": "||" } }, { @@ -1573,7 +1507,7 @@ }, "struct_member": { "type": "PREC_LEFT", - "value": 18, + "value": 16, "content": { "type": "SEQ", "members": [ @@ -2017,7 +1951,7 @@ "members": [ { "type": "PREC_LEFT", - "value": 11, + "value": 10, "content": { "type": "SEQ", "members": [ @@ -2050,7 +1984,7 @@ }, { "type": "PREC_LEFT", - "value": 10, + "value": 9, "content": { "type": "SEQ", "members": [ @@ -2083,7 +2017,7 @@ }, { "type": "PREC_LEFT", - "value": 10, + "value": 9, "content": { "type": "SEQ", "members": [ @@ -2116,7 +2050,7 @@ }, { "type": "PREC_LEFT", - "value": 9, + "value": 8, "content": { "type": "SEQ", "members": [ @@ -2149,7 +2083,7 @@ }, { "type": "PREC_LEFT", - "value": 9, + "value": 8, "content": { "type": "SEQ", "members": [ diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index ae4d17a..7a06fde 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -65,14 +65,6 @@ "type": "-", "named": false }, - { - "type": "..", - "named": false - }, - { - "type": "..=", - "named": false - }, { "type": "/", "named": false @@ -1159,14 +1151,6 @@ "type": ".", "named": false }, - { - "type": "..", - "named": false - }, - { - "type": "..=", - "named": false - }, { "type": "/", "named": false diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 23304ce..9ac9532 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -7,11 +7,11 @@ #endif #define LANGUAGE_VERSION 15 -#define STATE_COUNT 341 +#define STATE_COUNT 335 #define LARGE_STATE_COUNT 4 -#define SYMBOL_COUNT 106 +#define SYMBOL_COUNT 104 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 60 +#define TOKEN_COUNT 58 #define EXTERNAL_TOKEN_COUNT 0 #define FIELD_COUNT 30 #define MAX_ALIAS_SEQUENCE_LENGTH 9 @@ -61,70 +61,68 @@ enum ts_symbol_identifiers { anon_sym_BANG_EQ = 39, anon_sym_AMP_AMP = 40, anon_sym_PIPE_PIPE = 41, - anon_sym_DOT_DOT = 42, - anon_sym_DOT_DOT_EQ = 43, - anon_sym_if = 44, - anon_sym_then = 45, - anon_sym_else = 46, - anon_sym_let = 47, - anon_sym_in = 48, - anon_sym_EQ = 49, - anon_sym_SEMI = 50, - anon_sym_COLON = 51, - anon_sym_LPAREN = 52, - anon_sym_RPAREN = 53, - anon_sym_LBRACK = 54, - anon_sym_RBRACK = 55, - sym_varadic_dots = 56, - anon_sym_DASH_GT = 57, - anon_sym_LT_LT_LT = 58, - anon_sym_GT_GT_GT = 59, - sym_source_file = 60, - sym_base_ten = 61, - sym_octal = 62, - sym_hex = 63, - sym_binary = 64, - sym_integer = 65, - sym_signed_integer = 66, - sym_unsigned_integer = 67, - sym_number = 68, - sym__float = 69, - sym__unit = 70, - sym_scalar = 71, - sym_vector2 = 72, - sym_vector3 = 73, - sym_vector4 = 74, - sym_boolean = 75, - sym_function_call = 76, - sym_method_call = 77, - sym_expression = 78, - sym_unary_expression = 79, - sym_binary_expression = 80, - sym_if = 81, - sym_let_in = 82, - sym_let_in_assignment = 83, - sym_identity_path = 84, - sym_self_path = 85, - sym_declaration_type = 86, - sym_parenthesis = 87, - sym_list = 88, - sym_struct_member = 89, - sym__struct_final_element = 90, - sym_struct_definition = 91, - sym_dictionary_member_assignment = 92, - sym_dictionary_construction = 93, - sym_closure_definition = 94, - sym_formula = 95, - sym_formula_expression = 96, - sym_formula_parenthesis = 97, - sym_formula_unary_expression = 98, - sym_formula_binary_expression = 99, - aux_sym_let_in_repeat1 = 100, - aux_sym_identity_path_repeat1 = 101, - aux_sym_self_path_repeat1 = 102, - aux_sym_list_repeat1 = 103, - aux_sym_struct_definition_repeat1 = 104, - aux_sym_dictionary_construction_repeat1 = 105, + anon_sym_if = 42, + anon_sym_then = 43, + anon_sym_else = 44, + anon_sym_let = 45, + anon_sym_in = 46, + anon_sym_EQ = 47, + anon_sym_SEMI = 48, + anon_sym_COLON = 49, + anon_sym_LPAREN = 50, + anon_sym_RPAREN = 51, + anon_sym_LBRACK = 52, + anon_sym_RBRACK = 53, + sym_varadic_dots = 54, + anon_sym_DASH_GT = 55, + anon_sym_LT_LT_LT = 56, + anon_sym_GT_GT_GT = 57, + sym_source_file = 58, + sym_base_ten = 59, + sym_octal = 60, + sym_hex = 61, + sym_binary = 62, + sym_integer = 63, + sym_signed_integer = 64, + sym_unsigned_integer = 65, + sym_number = 66, + sym__float = 67, + sym__unit = 68, + sym_scalar = 69, + sym_vector2 = 70, + sym_vector3 = 71, + sym_vector4 = 72, + sym_boolean = 73, + sym_function_call = 74, + sym_method_call = 75, + sym_expression = 76, + sym_unary_expression = 77, + sym_binary_expression = 78, + sym_if = 79, + sym_let_in = 80, + sym_let_in_assignment = 81, + sym_identity_path = 82, + sym_self_path = 83, + sym_declaration_type = 84, + sym_parenthesis = 85, + sym_list = 86, + sym_struct_member = 87, + sym__struct_final_element = 88, + sym_struct_definition = 89, + sym_dictionary_member_assignment = 90, + sym_dictionary_construction = 91, + sym_closure_definition = 92, + sym_formula = 93, + sym_formula_expression = 94, + sym_formula_parenthesis = 95, + sym_formula_unary_expression = 96, + sym_formula_binary_expression = 97, + aux_sym_let_in_repeat1 = 98, + aux_sym_identity_path_repeat1 = 99, + aux_sym_self_path_repeat1 = 100, + aux_sym_list_repeat1 = 101, + aux_sym_struct_definition_repeat1 = 102, + aux_sym_dictionary_construction_repeat1 = 103, }; static const char * const ts_symbol_names[] = { @@ -170,8 +168,6 @@ static const char * const ts_symbol_names[] = { [anon_sym_BANG_EQ] = "!=", [anon_sym_AMP_AMP] = "&&", [anon_sym_PIPE_PIPE] = "||", - [anon_sym_DOT_DOT] = "..", - [anon_sym_DOT_DOT_EQ] = "..=", [anon_sym_if] = "if", [anon_sym_then] = "then ", [anon_sym_else] = "else", @@ -279,8 +275,6 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_BANG_EQ] = anon_sym_BANG_EQ, [anon_sym_AMP_AMP] = anon_sym_AMP_AMP, [anon_sym_PIPE_PIPE] = anon_sym_PIPE_PIPE, - [anon_sym_DOT_DOT] = anon_sym_DOT_DOT, - [anon_sym_DOT_DOT_EQ] = anon_sym_DOT_DOT_EQ, [anon_sym_if] = anon_sym_if, [anon_sym_then] = anon_sym_then, [anon_sym_else] = anon_sym_else, @@ -514,14 +508,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, - [anon_sym_DOT_DOT] = { - .visible = true, - .named = false, - }, - [anon_sym_DOT_DOT_EQ] = { - .visible = true, - .named = false, - }, [anon_sym_if] = { .visible = true, .named = false, @@ -1009,46 +995,46 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [32] = 32, [33] = 33, [34] = 34, - [35] = 35, - [36] = 35, - [37] = 11, - [38] = 13, - [39] = 14, - [40] = 15, - [41] = 16, + [35] = 34, + [36] = 11, + [37] = 13, + [38] = 14, + [39] = 15, + [40] = 16, + [41] = 17, [42] = 18, [43] = 19, [44] = 20, - [45] = 21, - [46] = 22, - [47] = 23, - [48] = 27, - [49] = 30, - [50] = 33, - [51] = 35, - [52] = 11, - [53] = 13, - [54] = 14, - [55] = 15, - [56] = 16, - [57] = 17, - [58] = 18, - [59] = 19, - [60] = 20, - [61] = 21, - [62] = 22, - [63] = 23, - [64] = 27, - [65] = 30, - [66] = 33, - [67] = 24, - [68] = 25, - [69] = 32, - [70] = 34, - [71] = 25, - [72] = 12, - [73] = 9, - [74] = 17, + [45] = 22, + [46] = 26, + [47] = 29, + [48] = 32, + [49] = 34, + [50] = 11, + [51] = 13, + [52] = 14, + [53] = 15, + [54] = 16, + [55] = 17, + [56] = 18, + [57] = 19, + [58] = 20, + [59] = 21, + [60] = 22, + [61] = 26, + [62] = 29, + [63] = 32, + [64] = 23, + [65] = 24, + [66] = 31, + [67] = 33, + [68] = 24, + [69] = 12, + [70] = 9, + [71] = 21, + [72] = 72, + [73] = 73, + [74] = 74, [75] = 75, [76] = 76, [77] = 77, @@ -1098,223 +1084,217 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [121] = 121, [122] = 122, [123] = 123, - [124] = 124, + [124] = 72, [125] = 125, - [126] = 126, - [127] = 127, - [128] = 75, - [129] = 129, - [130] = 75, - [131] = 76, - [132] = 77, - [133] = 79, - [134] = 84, - [135] = 83, - [136] = 85, - [137] = 82, - [138] = 81, - [139] = 76, - [140] = 77, - [141] = 80, - [142] = 142, - [143] = 78, - [144] = 119, - [145] = 145, + [126] = 72, + [127] = 74, + [128] = 73, + [129] = 74, + [130] = 77, + [131] = 82, + [132] = 73, + [133] = 80, + [134] = 79, + [135] = 76, + [136] = 75, + [137] = 78, + [138] = 138, + [139] = 81, + [140] = 97, + [141] = 141, + [142] = 81, + [143] = 77, + [144] = 88, + [145] = 114, [146] = 146, - [147] = 98, - [148] = 87, - [149] = 149, - [150] = 93, + [147] = 87, + [148] = 113, + [149] = 115, + [150] = 86, [151] = 85, - [152] = 79, - [153] = 92, - [154] = 154, - [155] = 90, - [156] = 107, - [157] = 88, - [158] = 89, - [159] = 99, - [160] = 160, - [161] = 102, - [162] = 103, - [163] = 104, - [164] = 105, - [165] = 106, - [166] = 96, - [167] = 108, - [168] = 109, - [169] = 169, - [170] = 112, - [171] = 95, - [172] = 118, - [173] = 123, - [174] = 160, - [175] = 149, - [176] = 154, - [177] = 146, - [178] = 101, - [179] = 116, - [180] = 180, - [181] = 99, - [182] = 115, - [183] = 101, - [184] = 102, - [185] = 103, - [186] = 104, - [187] = 105, - [188] = 106, - [189] = 96, - [190] = 108, - [191] = 109, - [192] = 110, - [193] = 112, - [194] = 114, - [195] = 117, - [196] = 118, - [197] = 122, - [198] = 121, - [199] = 124, - [200] = 123, - [201] = 126, - [202] = 127, - [203] = 203, - [204] = 91, - [205] = 94, - [206] = 86, - [207] = 180, + [152] = 102, + [153] = 104, + [154] = 105, + [155] = 106, + [156] = 156, + [157] = 108, + [158] = 123, + [159] = 110, + [160] = 111, + [161] = 116, + [162] = 92, + [163] = 120, + [164] = 84, + [165] = 165, + [166] = 83, + [167] = 141, + [168] = 168, + [169] = 165, + [170] = 168, + [171] = 146, + [172] = 172, + [173] = 107, + [174] = 103, + [175] = 175, + [176] = 100, + [177] = 115, + [178] = 94, + [179] = 96, + [180] = 98, + [181] = 102, + [182] = 104, + [183] = 105, + [184] = 106, + [185] = 107, + [186] = 108, + [187] = 123, + [188] = 110, + [189] = 111, + [190] = 112, + [191] = 116, + [192] = 117, + [193] = 118, + [194] = 119, + [195] = 120, + [196] = 122, + [197] = 109, + [198] = 198, + [199] = 97, + [200] = 101, + [201] = 91, + [202] = 89, + [203] = 90, + [204] = 204, + [205] = 205, + [206] = 206, + [207] = 93, [208] = 208, - [209] = 209, - [210] = 210, - [211] = 120, - [212] = 212, - [213] = 111, - [214] = 107, - [215] = 125, - [216] = 100, - [217] = 217, - [218] = 98, - [219] = 217, - [220] = 113, - [221] = 208, - [222] = 212, - [223] = 208, - [224] = 119, + [209] = 99, + [210] = 198, + [211] = 113, + [212] = 175, + [213] = 121, + [214] = 214, + [215] = 206, + [216] = 214, + [217] = 114, + [218] = 214, + [219] = 219, + [220] = 204, + [221] = 198, + [222] = 95, + [223] = 223, + [224] = 224, [225] = 225, - [226] = 203, - [227] = 180, - [228] = 97, - [229] = 229, + [226] = 223, + [227] = 227, + [228] = 228, + [229] = 228, [230] = 230, - [231] = 231, - [232] = 231, - [233] = 233, + [231] = 227, + [232] = 225, + [233] = 230, [234] = 234, - [235] = 235, - [236] = 236, - [237] = 234, - [238] = 233, - [239] = 230, - [240] = 236, - [241] = 235, - [242] = 84, - [243] = 80, - [244] = 82, - [245] = 245, - [246] = 90, - [247] = 247, - [248] = 88, - [249] = 89, - [250] = 95, - [251] = 75, - [252] = 76, - [253] = 77, - [254] = 85, + [235] = 234, + [236] = 76, + [237] = 75, + [238] = 78, + [239] = 239, + [240] = 87, + [241] = 241, + [242] = 86, + [243] = 92, + [244] = 85, + [245] = 72, + [246] = 73, + [247] = 74, + [248] = 77, + [249] = 81, + [250] = 250, + [251] = 251, + [252] = 252, + [253] = 253, + [254] = 89, [255] = 255, - [256] = 79, - [257] = 257, + [256] = 256, + [257] = 253, [258] = 258, - [259] = 86, + [259] = 90, [260] = 91, - [261] = 261, - [262] = 94, - [263] = 261, + [261] = 258, + [262] = 256, + [263] = 255, [264] = 264, - [265] = 265, + [265] = 264, [266] = 266, - [267] = 265, - [268] = 264, - [269] = 266, - [270] = 270, + [267] = 267, + [268] = 268, + [269] = 268, + [270] = 264, [271] = 271, [272] = 272, - [273] = 272, - [274] = 270, - [275] = 272, - [276] = 276, - [277] = 277, - [278] = 278, - [279] = 279, + [273] = 273, + [274] = 274, + [275] = 273, + [276] = 274, + [277] = 273, + [278] = 272, + [279] = 274, [280] = 280, - [281] = 281, - [282] = 281, - [283] = 280, - [284] = 279, - [285] = 281, - [286] = 279, - [287] = 280, + [281] = 272, + [282] = 282, + [283] = 283, + [284] = 284, + [285] = 284, + [286] = 282, + [287] = 287, [288] = 288, - [289] = 288, + [289] = 283, [290] = 290, [291] = 291, - [292] = 292, - [293] = 293, - [294] = 291, - [295] = 292, + [292] = 290, + [293] = 291, + [294] = 294, + [295] = 295, [296] = 296, - [297] = 296, + [297] = 297, [298] = 298, - [299] = 299, - [300] = 293, + [299] = 295, + [300] = 297, [301] = 301, - [302] = 302, - [303] = 303, + [302] = 298, + [303] = 298, [304] = 304, [305] = 305, [306] = 306, - [307] = 305, + [307] = 307, [308] = 308, [309] = 309, - [310] = 310, - [311] = 302, - [312] = 302, + [310] = 298, + [311] = 311, + [312] = 297, [313] = 313, [314] = 314, - [315] = 302, + [315] = 314, [316] = 316, - [317] = 308, - [318] = 308, - [319] = 319, + [317] = 317, + [318] = 318, + [319] = 316, [320] = 320, - [321] = 321, + [321] = 317, [322] = 322, - [323] = 323, - [324] = 324, - [325] = 325, - [326] = 324, + [323] = 320, + [324] = 318, + [325] = 316, + [326] = 326, [327] = 327, - [328] = 320, + [328] = 318, [329] = 329, [330] = 330, - [331] = 320, - [332] = 322, + [331] = 331, + [332] = 332, [333] = 333, - [334] = 334, - [335] = 333, - [336] = 336, - [337] = 330, - [338] = 330, - [339] = 322, - [340] = 340, + [334] = 314, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1322,615 +1302,594 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(25); + if (eof) ADVANCE(24); ADVANCE_MAP( - '!', 57, + '!', 55, '"', 6, - '#', 26, - '&', 66, + '#', 25, + '&', 64, '\'', 8, - '(', 88, - ')', 89, - '*', 59, - '+', 55, - ',', 50, - '-', 54, - '.', 47, - '/', 61, - '0', 35, - '1', 37, - ':', 87, - ';', 86, - '<', 76, - '=', 85, - '>', 70, - '[', 90, - ']', 91, - '^', 68, - 't', 30, - '|', 67, + '(', 83, + ')', 84, + '*', 57, + '+', 53, + ',', 48, + '-', 52, + '.', 46, + '/', 59, + '0', 34, + '1', 36, + ':', 82, + ';', 81, + '<', 74, + '=', 80, + '>', 68, + '[', 85, + ']', 86, + '^', 66, + 't', 29, + '|', 65, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(27); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(38); + lookahead == ' ') ADVANCE(26); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(37); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); case 1: ADVANCE_MAP( - '!', 56, + '!', 54, '"', 6, - '#', 26, - '(', 88, - ')', 89, - '*', 59, - '+', 55, - '-', 53, - '.', 13, - '/', 60, - '0', 36, + '#', 25, + '(', 83, + ')', 84, + '*', 57, + '+', 53, + '-', 51, + '.', 11, + '/', 58, + '0', 35, '<', 10, - '>', 20, - '[', 90, - ']', 91, + '>', 19, + '[', 85, + ']', 86, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(27); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(38); + lookahead == ' ') ADVANCE(26); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(37); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); case 2: ADVANCE_MAP( - '!', 56, + '!', 54, '"', 6, - '#', 26, - '(', 88, - '+', 55, - '-', 53, - '.', 46, - '0', 36, + '#', 25, + '(', 83, + '+', 53, + '-', 51, + '.', 45, + '0', 35, '<', 10, - '[', 90, + '[', 85, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(27); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(38); + lookahead == ' ') ADVANCE(26); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(37); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); case 3: ADVANCE_MAP( - '!', 16, - '#', 26, - '&', 66, + '!', 15, + '#', 25, + '&', 64, '\'', 8, - '(', 88, - ')', 19, - '*', 59, - '+', 55, - ',', 50, - '-', 54, - '.', 48, - '/', 61, - ':', 14, - '<', 76, - '=', 17, - '>', 71, - '^', 68, - '|', 67, + '(', 83, + ')', 18, + '*', 57, + '+', 53, + ',', 48, + '-', 52, + '.', 45, + '/', 59, + ':', 13, + '<', 74, + '=', 16, + '>', 69, + '^', 66, + '|', 65, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(27); + lookahead == ' ') ADVANCE(26); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); case 4: ADVANCE_MAP( - '!', 16, - '#', 26, + '!', 15, + '#', 25, '\'', 8, - '*', 59, - '+', 55, - '-', 53, - '.', 46, - '/', 60, - '<', 77, - '=', 17, - '>', 69, + '*', 57, + '+', 53, + '-', 51, + '.', 45, + '/', 58, + '<', 75, + '=', 16, + '>', 67, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(27); + lookahead == ' ') ADVANCE(26); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); case 5: ADVANCE_MAP( - '!', 16, - '#', 26, - ')', 89, - '*', 59, - '+', 55, - '-', 53, - '/', 60, - '<', 77, - '=', 17, - '>', 72, + '!', 15, + '#', 25, + ')', 84, + '*', 57, + '+', 53, + '-', 51, + '/', 58, + '<', 75, + '=', 16, + '>', 70, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(27); + lookahead == ' ') ADVANCE(26); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(41); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(40); END_STATE(); case 6: - if (lookahead == '"') ADVANCE(33); + if (lookahead == '"') ADVANCE(32); if (lookahead == '\\') ADVANCE(7); if (lookahead != 0) ADVANCE(6); END_STATE(); case 7: - if (lookahead == '"') ADVANCE(34); + if (lookahead == '"') ADVANCE(33); if (lookahead == '\\') ADVANCE(7); if (lookahead != 0) ADVANCE(6); END_STATE(); case 8: - if (lookahead == '\'') ADVANCE(44); + if (lookahead == '\'') ADVANCE(43); if (lookahead == '\\') ADVANCE(9); if (lookahead != 0) ADVANCE(8); END_STATE(); case 9: - if (lookahead == '\'') ADVANCE(45); + if (lookahead == '\'') ADVANCE(44); if (lookahead == '\\') ADVANCE(9); if (lookahead != 0) ADVANCE(8); END_STATE(); case 10: - if (lookahead == '(') ADVANCE(49); - if (lookahead == '<') ADVANCE(15); + if (lookahead == '(') ADVANCE(47); + if (lookahead == '<') ADVANCE(14); END_STATE(); case 11: - if (lookahead == '.') ADVANCE(92); + if (lookahead == '.') ADVANCE(12); END_STATE(); case 12: - if (lookahead == '.') ADVANCE(82); + if (lookahead == '.') ADVANCE(87); END_STATE(); case 13: - if (lookahead == '.') ADVANCE(11); + if (lookahead == ':') ADVANCE(50); END_STATE(); case 14: - if (lookahead == ':') ADVANCE(52); + if (lookahead == '<') ADVANCE(89); END_STATE(); case 15: - if (lookahead == '<') ADVANCE(94); + if (lookahead == '=') ADVANCE(76); END_STATE(); case 16: - if (lookahead == '=') ADVANCE(78); + if (lookahead == '=') ADVANCE(72); END_STATE(); case 17: - if (lookahead == '=') ADVANCE(74); + if (lookahead == '>') ADVANCE(90); END_STATE(); case 18: - if (lookahead == '>') ADVANCE(95); + if (lookahead == '>') ADVANCE(49); END_STATE(); case 19: - if (lookahead == '>') ADVANCE(51); + if (lookahead == '>') ADVANCE(17); END_STATE(); case 20: - if (lookahead == '>') ADVANCE(18); - END_STATE(); - case 21: - if (eof) ADVANCE(25); + if (eof) ADVANCE(24); ADVANCE_MAP( - '!', 16, - '#', 26, - '&', 66, + '!', 15, + '#', 25, + '&', 64, '\'', 8, - '(', 88, - ')', 89, - '*', 59, - '+', 55, - ',', 50, - '-', 54, - '.', 48, - '/', 61, - ':', 87, - ';', 86, - '<', 76, - '=', 85, - '>', 71, - ']', 91, - '^', 68, - 't', 30, - '|', 67, - '0', 43, - '1', 43, + '(', 83, + ')', 84, + '*', 57, + '+', 53, + ',', 48, + '-', 52, + '.', 45, + '/', 59, + ':', 82, + ';', 81, + '<', 74, + '=', 80, + '>', 69, + ']', 86, + '^', 66, + 't', 29, + '|', 65, + '0', 42, + '1', 42, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(27); + lookahead == ' ') ADVANCE(26); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); - case 22: - if (eof) ADVANCE(25); + case 21: + if (eof) ADVANCE(24); ADVANCE_MAP( - '!', 16, - '#', 26, - '&', 66, + '!', 15, + '#', 25, + '&', 64, '\'', 8, - '(', 88, - ')', 89, - '*', 59, - '+', 55, - ',', 50, - '-', 53, - '.', 48, - '/', 61, - ':', 14, - ';', 86, - '<', 76, - '=', 85, - '>', 70, - ']', 91, - '^', 68, - '|', 67, + '(', 83, + ')', 84, + '*', 57, + '+', 53, + ',', 48, + '-', 51, + '.', 45, + '/', 59, + ':', 13, + ';', 81, + '<', 74, + '=', 80, + '>', 68, + ']', 86, + '^', 66, + '|', 65, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(27); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(38); + lookahead == ' ') ADVANCE(26); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(37); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); - case 23: - if (eof) ADVANCE(25); + case 22: + if (eof) ADVANCE(24); ADVANCE_MAP( - '!', 16, - '#', 26, - '&', 66, - '(', 88, - ')', 89, - '*', 59, - '+', 55, - ',', 50, - '-', 54, - '.', 12, - '/', 61, - ':', 14, - ';', 86, - '<', 76, - '=', 85, - '>', 71, - ']', 91, - '^', 68, - '|', 67, + '!', 15, + '#', 25, + '&', 64, + '(', 83, + ')', 84, + '*', 57, + '+', 53, + ',', 48, + '-', 52, + '/', 59, + ':', 13, + ';', 81, + '<', 74, + '=', 80, + '>', 69, + ']', 86, + '^', 66, + '|', 65, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(27); + lookahead == ' ') ADVANCE(26); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); - case 24: - if (eof) ADVANCE(25); + case 23: + if (eof) ADVANCE(24); ADVANCE_MAP( - '!', 16, - '#', 26, - '&', 66, - '(', 88, - ')', 89, - '*', 59, - '+', 55, - ',', 50, - '-', 53, - '.', 12, - '/', 61, - ':', 14, - ';', 86, - '<', 76, - '=', 85, - '>', 70, - ']', 91, - '^', 68, - 't', 30, - '|', 67, + '!', 15, + '#', 25, + '&', 64, + '(', 83, + ')', 84, + '*', 57, + '+', 53, + ',', 48, + '-', 51, + '/', 59, + ':', 13, + ';', 81, + '<', 74, + '=', 80, + '>', 68, + ']', 86, + '^', 66, + 't', 29, + '|', 65, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(27); + lookahead == ' ') ADVANCE(26); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); - case 25: + case 24: ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); - case 26: + case 25: ACCEPT_TOKEN(sym_comment); if (lookahead != 0 && - lookahead != '\n') ADVANCE(26); + lookahead != '\n') ADVANCE(25); END_STATE(); - case 27: + case 26: ACCEPT_TOKEN(sym__whitespace); END_STATE(); - case 28: + case 27: ACCEPT_TOKEN(sym_identifier); - if (lookahead == ' ') ADVANCE(84); + if (lookahead == ' ') ADVANCE(79); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); - case 29: + case 28: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'e') ADVANCE(31); + if (lookahead == 'e') ADVANCE(30); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); - case 30: + case 29: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'h') ADVANCE(29); + if (lookahead == 'h') ADVANCE(28); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); - case 31: + case 30: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'n') ADVANCE(28); + if (lookahead == 'n') ADVANCE(27); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); - case 32: + case 31: ACCEPT_TOKEN(sym_identifier); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(32); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); END_STATE(); - case 33: + case 32: ACCEPT_TOKEN(sym_string); END_STATE(); - case 34: + case 33: ACCEPT_TOKEN(sym_string); - if (lookahead == '"') ADVANCE(33); + if (lookahead == '"') ADVANCE(32); if (lookahead == '\\') ADVANCE(7); if (lookahead != 0) ADVANCE(6); END_STATE(); - case 35: + case 34: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(42); - if (lookahead == 'o') ADVANCE(39); - if (lookahead == 'x') ADVANCE(40); + if (lookahead == 'b') ADVANCE(41); + if (lookahead == 'o') ADVANCE(38); + if (lookahead == 'x') ADVANCE(39); if (lookahead == '0' || - lookahead == '1') ADVANCE(37); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(38); + lookahead == '1') ADVANCE(36); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(37); END_STATE(); - case 36: + case 35: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(42); - if (lookahead == 'o') ADVANCE(39); - if (lookahead == 'x') ADVANCE(40); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(38); + if (lookahead == 'b') ADVANCE(41); + if (lookahead == 'o') ADVANCE(38); + if (lookahead == 'x') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(37); END_STATE(); - case 37: + case 36: ACCEPT_TOKEN(aux_sym_base_ten_token1); if (lookahead == '0' || - lookahead == '1') ADVANCE(37); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(38); + lookahead == '1') ADVANCE(36); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(37); END_STATE(); - case 38: + case 37: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(38); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(37); END_STATE(); - case 39: + case 38: ACCEPT_TOKEN(aux_sym_octal_token1); END_STATE(); - case 40: + case 39: ACCEPT_TOKEN(aux_sym_hex_token1); END_STATE(); - case 41: + case 40: ACCEPT_TOKEN(aux_sym_hex_token2); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(41); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(40); END_STATE(); - case 42: + case 41: ACCEPT_TOKEN(aux_sym_binary_token1); END_STATE(); - case 43: + case 42: ACCEPT_TOKEN(aux_sym_binary_token2); if (lookahead == '0' || - lookahead == '1') ADVANCE(43); + lookahead == '1') ADVANCE(42); END_STATE(); - case 44: + case 43: ACCEPT_TOKEN(sym_unit_quote); END_STATE(); - case 45: + case 44: ACCEPT_TOKEN(sym_unit_quote); - if (lookahead == '\'') ADVANCE(44); + if (lookahead == '\'') ADVANCE(43); if (lookahead == '\\') ADVANCE(9); if (lookahead != 0) ADVANCE(8); END_STATE(); + case 45: + ACCEPT_TOKEN(anon_sym_DOT); + END_STATE(); case 46: ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(12); END_STATE(); case 47: - ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(81); + ACCEPT_TOKEN(anon_sym_LT_LPAREN); END_STATE(); case 48: - ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(82); + ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); case 49: - ACCEPT_TOKEN(anon_sym_LT_LPAREN); + ACCEPT_TOKEN(anon_sym_RPAREN_GT); END_STATE(); case 50: - ACCEPT_TOKEN(anon_sym_COMMA); + ACCEPT_TOKEN(anon_sym_COLON_COLON); END_STATE(); case 51: - ACCEPT_TOKEN(anon_sym_RPAREN_GT); + ACCEPT_TOKEN(anon_sym_DASH); END_STATE(); case 52: - ACCEPT_TOKEN(anon_sym_COLON_COLON); + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '>') ADVANCE(88); END_STATE(); case 53: - ACCEPT_TOKEN(anon_sym_DASH); + ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); case 54: - ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '>') ADVANCE(93); + ACCEPT_TOKEN(anon_sym_BANG); END_STATE(); case 55: - ACCEPT_TOKEN(anon_sym_PLUS); + ACCEPT_TOKEN(anon_sym_BANG); + if (lookahead == '=') ADVANCE(76); END_STATE(); case 56: - ACCEPT_TOKEN(anon_sym_BANG); + ACCEPT_TOKEN(anon_sym_STAR_STAR); END_STATE(); case 57: - ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(78); + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '*') ADVANCE(56); END_STATE(); case 58: - ACCEPT_TOKEN(anon_sym_STAR_STAR); + ACCEPT_TOKEN(anon_sym_SLASH); END_STATE(); case 59: - ACCEPT_TOKEN(anon_sym_STAR); - if (lookahead == '*') ADVANCE(58); + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '/') ADVANCE(60); END_STATE(); case 60: - ACCEPT_TOKEN(anon_sym_SLASH); + ACCEPT_TOKEN(anon_sym_SLASH_SLASH); END_STATE(); case 61: - ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '/') ADVANCE(62); + ACCEPT_TOKEN(anon_sym_LT_LT); END_STATE(); case 62: - ACCEPT_TOKEN(anon_sym_SLASH_SLASH); + ACCEPT_TOKEN(anon_sym_GT_GT); END_STATE(); case 63: - ACCEPT_TOKEN(anon_sym_LT_LT); + ACCEPT_TOKEN(anon_sym_GT_GT); + if (lookahead == '>') ADVANCE(90); END_STATE(); case 64: - ACCEPT_TOKEN(anon_sym_GT_GT); + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(77); END_STATE(); case 65: - ACCEPT_TOKEN(anon_sym_GT_GT); - if (lookahead == '>') ADVANCE(95); + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '|') ADVANCE(78); END_STATE(); case 66: - ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(79); + ACCEPT_TOKEN(anon_sym_CARET); END_STATE(); case 67: - ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '|') ADVANCE(80); + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(71); END_STATE(); case 68: - ACCEPT_TOKEN(anon_sym_CARET); + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(71); + if (lookahead == '>') ADVANCE(63); END_STATE(); case 69: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(73); + if (lookahead == '=') ADVANCE(71); + if (lookahead == '>') ADVANCE(62); END_STATE(); case 70: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(73); - if (lookahead == '>') ADVANCE(65); + if (lookahead == '=') ADVANCE(71); + if (lookahead == '>') ADVANCE(17); END_STATE(); case 71: - ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(73); - if (lookahead == '>') ADVANCE(64); - END_STATE(); - case 72: - ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(73); - if (lookahead == '>') ADVANCE(18); - END_STATE(); - case 73: ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); - case 74: + case 72: ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); - case 75: + case 73: ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); - case 76: + case 74: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(63); - if (lookahead == '=') ADVANCE(75); + if (lookahead == '<') ADVANCE(61); + if (lookahead == '=') ADVANCE(73); END_STATE(); - case 77: + case 75: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '=') ADVANCE(75); + if (lookahead == '=') ADVANCE(73); END_STATE(); - case 78: + case 76: ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); - case 79: + case 77: ACCEPT_TOKEN(anon_sym_AMP_AMP); END_STATE(); - case 80: + case 78: ACCEPT_TOKEN(anon_sym_PIPE_PIPE); END_STATE(); - case 81: - ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '.') ADVANCE(92); - if (lookahead == '=') ADVANCE(83); - END_STATE(); - case 82: - ACCEPT_TOKEN(anon_sym_DOT_DOT); - if (lookahead == '=') ADVANCE(83); - END_STATE(); - case 83: - ACCEPT_TOKEN(anon_sym_DOT_DOT_EQ); - END_STATE(); - case 84: + case 79: ACCEPT_TOKEN(anon_sym_then); END_STATE(); - case 85: + case 80: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(74); + if (lookahead == '=') ADVANCE(72); END_STATE(); - case 86: + case 81: ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); - case 87: + case 82: ACCEPT_TOKEN(anon_sym_COLON); - if (lookahead == ':') ADVANCE(52); + if (lookahead == ':') ADVANCE(50); END_STATE(); - case 88: + case 83: ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); - case 89: + case 84: ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); - case 90: + case 85: ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); - case 91: + case 86: ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); - case 92: + case 87: ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); - case 93: + case 88: ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); - case 94: + case 89: ACCEPT_TOKEN(anon_sym_LT_LT_LT); END_STATE(); - case 95: + case 90: ACCEPT_TOKEN(anon_sym_GT_GT_GT); END_STATE(); default: @@ -2110,163 +2069,163 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [69] = {.lex_state = 1}, [70] = {.lex_state = 1}, [71] = {.lex_state = 1}, - [72] = {.lex_state = 1}, - [73] = {.lex_state = 1}, - [74] = {.lex_state = 1}, - [75] = {.lex_state = 22}, - [76] = {.lex_state = 22}, - [77] = {.lex_state = 22}, - [78] = {.lex_state = 21}, - [79] = {.lex_state = 22}, - [80] = {.lex_state = 21}, + [72] = {.lex_state = 21}, + [73] = {.lex_state = 21}, + [74] = {.lex_state = 21}, + [75] = {.lex_state = 20}, + [76] = {.lex_state = 20}, + [77] = {.lex_state = 21}, + [78] = {.lex_state = 20}, + [79] = {.lex_state = 20}, + [80] = {.lex_state = 20}, [81] = {.lex_state = 21}, - [82] = {.lex_state = 21}, - [83] = {.lex_state = 21}, - [84] = {.lex_state = 21}, - [85] = {.lex_state = 22}, - [86] = {.lex_state = 24}, - [87] = {.lex_state = 21}, - [88] = {.lex_state = 21}, - [89] = {.lex_state = 21}, - [90] = {.lex_state = 21}, - [91] = {.lex_state = 24}, - [92] = {.lex_state = 21}, - [93] = {.lex_state = 21}, - [94] = {.lex_state = 24}, - [95] = {.lex_state = 21}, - [96] = {.lex_state = 23}, - [97] = {.lex_state = 21}, - [98] = {.lex_state = 23}, - [99] = {.lex_state = 23}, - [100] = {.lex_state = 21}, - [101] = {.lex_state = 23}, - [102] = {.lex_state = 23}, - [103] = {.lex_state = 23}, - [104] = {.lex_state = 23}, - [105] = {.lex_state = 23}, - [106] = {.lex_state = 23}, - [107] = {.lex_state = 23}, - [108] = {.lex_state = 23}, - [109] = {.lex_state = 23}, - [110] = {.lex_state = 21}, - [111] = {.lex_state = 21}, - [112] = {.lex_state = 23}, - [113] = {.lex_state = 21}, - [114] = {.lex_state = 21}, - [115] = {.lex_state = 21}, - [116] = {.lex_state = 21}, - [117] = {.lex_state = 21}, - [118] = {.lex_state = 23}, - [119] = {.lex_state = 23}, - [120] = {.lex_state = 21}, - [121] = {.lex_state = 21}, - [122] = {.lex_state = 21}, - [123] = {.lex_state = 23}, - [124] = {.lex_state = 21}, - [125] = {.lex_state = 21}, - [126] = {.lex_state = 21}, - [127] = {.lex_state = 21}, + [82] = {.lex_state = 20}, + [83] = {.lex_state = 20}, + [84] = {.lex_state = 20}, + [85] = {.lex_state = 20}, + [86] = {.lex_state = 20}, + [87] = {.lex_state = 20}, + [88] = {.lex_state = 20}, + [89] = {.lex_state = 23}, + [90] = {.lex_state = 23}, + [91] = {.lex_state = 23}, + [92] = {.lex_state = 20}, + [93] = {.lex_state = 20}, + [94] = {.lex_state = 20}, + [95] = {.lex_state = 20}, + [96] = {.lex_state = 20}, + [97] = {.lex_state = 22}, + [98] = {.lex_state = 20}, + [99] = {.lex_state = 20}, + [100] = {.lex_state = 20}, + [101] = {.lex_state = 20}, + [102] = {.lex_state = 22}, + [103] = {.lex_state = 20}, + [104] = {.lex_state = 22}, + [105] = {.lex_state = 22}, + [106] = {.lex_state = 22}, + [107] = {.lex_state = 22}, + [108] = {.lex_state = 22}, + [109] = {.lex_state = 20}, + [110] = {.lex_state = 22}, + [111] = {.lex_state = 22}, + [112] = {.lex_state = 20}, + [113] = {.lex_state = 22}, + [114] = {.lex_state = 22}, + [115] = {.lex_state = 22}, + [116] = {.lex_state = 22}, + [117] = {.lex_state = 20}, + [118] = {.lex_state = 20}, + [119] = {.lex_state = 20}, + [120] = {.lex_state = 22}, + [121] = {.lex_state = 20}, + [122] = {.lex_state = 20}, + [123] = {.lex_state = 22}, + [124] = {.lex_state = 3}, + [125] = {.lex_state = 20}, + [126] = {.lex_state = 20}, + [127] = {.lex_state = 3}, [128] = {.lex_state = 3}, - [129] = {.lex_state = 21}, - [130] = {.lex_state = 21}, + [129] = {.lex_state = 20}, + [130] = {.lex_state = 3}, [131] = {.lex_state = 3}, - [132] = {.lex_state = 3}, + [132] = {.lex_state = 20}, [133] = {.lex_state = 3}, [134] = {.lex_state = 3}, [135] = {.lex_state = 3}, [136] = {.lex_state = 3}, [137] = {.lex_state = 3}, - [138] = {.lex_state = 3}, - [139] = {.lex_state = 21}, - [140] = {.lex_state = 21}, - [141] = {.lex_state = 3}, - [142] = {.lex_state = 21}, - [143] = {.lex_state = 3}, + [138] = {.lex_state = 20}, + [139] = {.lex_state = 3}, + [140] = {.lex_state = 3}, + [141] = {.lex_state = 20}, + [142] = {.lex_state = 20}, + [143] = {.lex_state = 20}, [144] = {.lex_state = 3}, - [145] = {.lex_state = 21}, + [145] = {.lex_state = 3}, [146] = {.lex_state = 3}, [147] = {.lex_state = 3}, [148] = {.lex_state = 3}, - [149] = {.lex_state = 21}, + [149] = {.lex_state = 3}, [150] = {.lex_state = 3}, - [151] = {.lex_state = 21}, - [152] = {.lex_state = 21}, + [151] = {.lex_state = 3}, + [152] = {.lex_state = 3}, [153] = {.lex_state = 3}, [154] = {.lex_state = 3}, [155] = {.lex_state = 3}, - [156] = {.lex_state = 3}, + [156] = {.lex_state = 20}, [157] = {.lex_state = 3}, [158] = {.lex_state = 3}, [159] = {.lex_state = 3}, - [160] = {.lex_state = 21}, + [160] = {.lex_state = 3}, [161] = {.lex_state = 3}, [162] = {.lex_state = 3}, [163] = {.lex_state = 3}, [164] = {.lex_state = 3}, - [165] = {.lex_state = 3}, + [165] = {.lex_state = 20}, [166] = {.lex_state = 3}, - [167] = {.lex_state = 3}, + [167] = {.lex_state = 20}, [168] = {.lex_state = 3}, - [169] = {.lex_state = 21}, + [169] = {.lex_state = 20}, [170] = {.lex_state = 3}, [171] = {.lex_state = 3}, - [172] = {.lex_state = 3}, + [172] = {.lex_state = 20}, [173] = {.lex_state = 3}, - [174] = {.lex_state = 21}, - [175] = {.lex_state = 21}, + [174] = {.lex_state = 3}, + [175] = {.lex_state = 20}, [176] = {.lex_state = 3}, - [177] = {.lex_state = 3}, + [177] = {.lex_state = 20}, [178] = {.lex_state = 3}, [179] = {.lex_state = 3}, - [180] = {.lex_state = 21}, - [181] = {.lex_state = 21}, - [182] = {.lex_state = 3}, - [183] = {.lex_state = 21}, - [184] = {.lex_state = 21}, - [185] = {.lex_state = 21}, - [186] = {.lex_state = 21}, - [187] = {.lex_state = 21}, - [188] = {.lex_state = 21}, - [189] = {.lex_state = 21}, - [190] = {.lex_state = 21}, - [191] = {.lex_state = 21}, + [180] = {.lex_state = 3}, + [181] = {.lex_state = 20}, + [182] = {.lex_state = 20}, + [183] = {.lex_state = 20}, + [184] = {.lex_state = 20}, + [185] = {.lex_state = 20}, + [186] = {.lex_state = 20}, + [187] = {.lex_state = 20}, + [188] = {.lex_state = 20}, + [189] = {.lex_state = 20}, + [190] = {.lex_state = 3}, + [191] = {.lex_state = 20}, [192] = {.lex_state = 3}, - [193] = {.lex_state = 21}, + [193] = {.lex_state = 3}, [194] = {.lex_state = 3}, - [195] = {.lex_state = 3}, - [196] = {.lex_state = 21}, + [195] = {.lex_state = 20}, + [196] = {.lex_state = 3}, [197] = {.lex_state = 3}, - [198] = {.lex_state = 3}, - [199] = {.lex_state = 3}, - [200] = {.lex_state = 21}, + [198] = {.lex_state = 20}, + [199] = {.lex_state = 20}, + [200] = {.lex_state = 3}, [201] = {.lex_state = 3}, [202] = {.lex_state = 3}, - [203] = {.lex_state = 21}, - [204] = {.lex_state = 3}, - [205] = {.lex_state = 3}, + [203] = {.lex_state = 3}, + [204] = {.lex_state = 20}, + [205] = {.lex_state = 20}, [206] = {.lex_state = 3}, - [207] = {.lex_state = 21}, - [208] = {.lex_state = 23}, - [209] = {.lex_state = 21}, - [210] = {.lex_state = 21}, - [211] = {.lex_state = 3}, - [212] = {.lex_state = 3}, + [207] = {.lex_state = 3}, + [208] = {.lex_state = 20}, + [209] = {.lex_state = 3}, + [210] = {.lex_state = 20}, + [211] = {.lex_state = 20}, + [212] = {.lex_state = 20}, [213] = {.lex_state = 3}, - [214] = {.lex_state = 21}, + [214] = {.lex_state = 22}, [215] = {.lex_state = 3}, - [216] = {.lex_state = 3}, - [217] = {.lex_state = 21}, - [218] = {.lex_state = 21}, - [219] = {.lex_state = 21}, - [220] = {.lex_state = 3}, - [221] = {.lex_state = 23}, + [216] = {.lex_state = 22}, + [217] = {.lex_state = 20}, + [218] = {.lex_state = 22}, + [219] = {.lex_state = 20}, + [220] = {.lex_state = 20}, + [221] = {.lex_state = 20}, [222] = {.lex_state = 3}, - [223] = {.lex_state = 23}, - [224] = {.lex_state = 21}, - [225] = {.lex_state = 21}, - [226] = {.lex_state = 21}, - [227] = {.lex_state = 21}, - [228] = {.lex_state = 3}, + [223] = {.lex_state = 1}, + [224] = {.lex_state = 1}, + [225] = {.lex_state = 1}, + [226] = {.lex_state = 1}, + [227] = {.lex_state = 1}, + [228] = {.lex_state = 1}, [229] = {.lex_state = 1}, [230] = {.lex_state = 1}, [231] = {.lex_state = 1}, @@ -2274,42 +2233,42 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [233] = {.lex_state = 1}, [234] = {.lex_state = 1}, [235] = {.lex_state = 1}, - [236] = {.lex_state = 1}, - [237] = {.lex_state = 1}, - [238] = {.lex_state = 1}, + [236] = {.lex_state = 2}, + [237] = {.lex_state = 2}, + [238] = {.lex_state = 2}, [239] = {.lex_state = 1}, - [240] = {.lex_state = 1}, + [240] = {.lex_state = 2}, [241] = {.lex_state = 1}, - [242] = {.lex_state = 2}, - [243] = {.lex_state = 2}, - [244] = {.lex_state = 2}, - [245] = {.lex_state = 1}, - [246] = {.lex_state = 2}, - [247] = {.lex_state = 1}, - [248] = {.lex_state = 1}, - [249] = {.lex_state = 1}, - [250] = {.lex_state = 1}, - [251] = {.lex_state = 4}, - [252] = {.lex_state = 4}, + [242] = {.lex_state = 1}, + [243] = {.lex_state = 1}, + [244] = {.lex_state = 1}, + [245] = {.lex_state = 4}, + [246] = {.lex_state = 4}, + [247] = {.lex_state = 4}, + [248] = {.lex_state = 4}, + [249] = {.lex_state = 4}, + [250] = {.lex_state = 5}, + [251] = {.lex_state = 5}, + [252] = {.lex_state = 5}, [253] = {.lex_state = 4}, [254] = {.lex_state = 4}, - [255] = {.lex_state = 5}, + [255] = {.lex_state = 4}, [256] = {.lex_state = 4}, - [257] = {.lex_state = 5}, - [258] = {.lex_state = 5}, + [257] = {.lex_state = 4}, + [258] = {.lex_state = 4}, [259] = {.lex_state = 4}, [260] = {.lex_state = 4}, - [261] = {.lex_state = 4}, - [262] = {.lex_state = 4}, - [263] = {.lex_state = 4}, - [264] = {.lex_state = 4}, - [265] = {.lex_state = 4}, - [266] = {.lex_state = 4}, + [261] = {.lex_state = 1}, + [262] = {.lex_state = 1}, + [263] = {.lex_state = 1}, + [264] = {.lex_state = 1}, + [265] = {.lex_state = 1}, + [266] = {.lex_state = 0}, [267] = {.lex_state = 1}, [268] = {.lex_state = 1}, [269] = {.lex_state = 1}, [270] = {.lex_state = 1}, - [271] = {.lex_state = 0}, + [271] = {.lex_state = 1}, [272] = {.lex_state = 1}, [273] = {.lex_state = 1}, [274] = {.lex_state = 1}, @@ -2320,65 +2279,59 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [279] = {.lex_state = 1}, [280] = {.lex_state = 1}, [281] = {.lex_state = 1}, - [282] = {.lex_state = 1}, + [282] = {.lex_state = 0}, [283] = {.lex_state = 1}, [284] = {.lex_state = 1}, [285] = {.lex_state = 1}, - [286] = {.lex_state = 1}, + [286] = {.lex_state = 0}, [287] = {.lex_state = 1}, [288] = {.lex_state = 0}, - [289] = {.lex_state = 0}, - [290] = {.lex_state = 0}, - [291] = {.lex_state = 1}, - [292] = {.lex_state = 0}, - [293] = {.lex_state = 1}, - [294] = {.lex_state = 1}, + [289] = {.lex_state = 1}, + [290] = {.lex_state = 1}, + [291] = {.lex_state = 0}, + [292] = {.lex_state = 1}, + [293] = {.lex_state = 0}, + [294] = {.lex_state = 0}, [295] = {.lex_state = 0}, - [296] = {.lex_state = 1}, + [296] = {.lex_state = 0}, [297] = {.lex_state = 1}, - [298] = {.lex_state = 0}, - [299] = {.lex_state = 1}, + [298] = {.lex_state = 21}, + [299] = {.lex_state = 0}, [300] = {.lex_state = 1}, - [301] = {.lex_state = 1}, - [302] = {.lex_state = 22}, - [303] = {.lex_state = 0}, + [301] = {.lex_state = 0}, + [302] = {.lex_state = 21}, + [303] = {.lex_state = 21}, [304] = {.lex_state = 1}, - [305] = {.lex_state = 0}, + [305] = {.lex_state = 1}, [306] = {.lex_state = 1}, [307] = {.lex_state = 0}, [308] = {.lex_state = 1}, [309] = {.lex_state = 1}, - [310] = {.lex_state = 0}, - [311] = {.lex_state = 22}, - [312] = {.lex_state = 22}, - [313] = {.lex_state = 1}, + [310] = {.lex_state = 21}, + [311] = {.lex_state = 1}, + [312] = {.lex_state = 1}, + [313] = {.lex_state = 0}, [314] = {.lex_state = 0}, - [315] = {.lex_state = 22}, + [315] = {.lex_state = 0}, [316] = {.lex_state = 0}, [317] = {.lex_state = 1}, [318] = {.lex_state = 1}, - [319] = {.lex_state = 1}, - [320] = {.lex_state = 0}, - [321] = {.lex_state = 0}, + [319] = {.lex_state = 0}, + [320] = {.lex_state = 1}, + [321] = {.lex_state = 1}, [322] = {.lex_state = 0}, - [323] = {.lex_state = 0}, + [323] = {.lex_state = 1}, [324] = {.lex_state = 1}, - [325] = {.lex_state = 22}, - [326] = {.lex_state = 1}, - [327] = {.lex_state = 5}, - [328] = {.lex_state = 0}, + [325] = {.lex_state = 0}, + [326] = {.lex_state = 0}, + [327] = {.lex_state = 0}, + [328] = {.lex_state = 1}, [329] = {.lex_state = 0}, - [330] = {.lex_state = 1}, - [331] = {.lex_state = 0}, - [332] = {.lex_state = 0}, - [333] = {.lex_state = 1}, + [330] = {.lex_state = 0}, + [331] = {.lex_state = 5}, + [332] = {.lex_state = 21}, + [333] = {.lex_state = 20}, [334] = {.lex_state = 0}, - [335] = {.lex_state = 1}, - [336] = {.lex_state = 21}, - [337] = {.lex_state = 1}, - [338] = {.lex_state = 1}, - [339] = {.lex_state = 0}, - [340] = {.lex_state = 0}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -2422,8 +2375,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_BANG_EQ] = ACTIONS(1), [anon_sym_AMP_AMP] = ACTIONS(1), [anon_sym_PIPE_PIPE] = ACTIONS(1), - [anon_sym_DOT_DOT] = ACTIONS(1), - [anon_sym_DOT_DOT_EQ] = ACTIONS(1), [anon_sym_if] = ACTIONS(1), [anon_sym_then] = ACTIONS(1), [anon_sym_else] = ACTIONS(1), @@ -2441,36 +2392,36 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_GT_GT_GT] = ACTIONS(1), }, [STATE(1)] = { - [sym_source_file] = STATE(340), - [sym_base_ten] = STATE(313), - [sym_octal] = STATE(313), - [sym_hex] = STATE(313), - [sym_binary] = STATE(313), - [sym_integer] = STATE(318), - [sym_signed_integer] = STATE(120), - [sym_unsigned_integer] = STATE(120), - [sym_number] = STATE(77), - [sym__float] = STATE(76), - [sym_scalar] = STATE(120), - [sym_vector2] = STATE(120), - [sym_vector3] = STATE(120), - [sym_vector4] = STATE(120), - [sym_boolean] = STATE(120), - [sym_function_call] = STATE(120), - [sym_method_call] = STATE(120), - [sym_expression] = STATE(209), - [sym_unary_expression] = STATE(120), - [sym_binary_expression] = STATE(120), - [sym_if] = STATE(120), - [sym_let_in] = STATE(120), - [sym_identity_path] = STATE(120), - [sym_self_path] = STATE(120), - [sym_parenthesis] = STATE(120), - [sym_list] = STATE(120), - [sym_struct_definition] = STATE(119), - [sym_dictionary_construction] = STATE(120), - [sym_closure_definition] = STATE(120), - [sym_formula] = STATE(120), + [sym_source_file] = STATE(329), + [sym_base_ten] = STATE(311), + [sym_octal] = STATE(311), + [sym_hex] = STATE(311), + [sym_binary] = STATE(311), + [sym_integer] = STATE(312), + [sym_signed_integer] = STATE(93), + [sym_unsigned_integer] = STATE(93), + [sym_number] = STATE(74), + [sym__float] = STATE(73), + [sym_scalar] = STATE(93), + [sym_vector2] = STATE(93), + [sym_vector3] = STATE(93), + [sym_vector4] = STATE(93), + [sym_boolean] = STATE(93), + [sym_function_call] = STATE(93), + [sym_method_call] = STATE(93), + [sym_expression] = STATE(205), + [sym_unary_expression] = STATE(93), + [sym_binary_expression] = STATE(93), + [sym_if] = STATE(93), + [sym_let_in] = STATE(93), + [sym_identity_path] = STATE(93), + [sym_self_path] = STATE(93), + [sym_parenthesis] = STATE(93), + [sym_list] = STATE(93), + [sym_struct_definition] = STATE(114), + [sym_dictionary_construction] = STATE(93), + [sym_closure_definition] = STATE(93), + [sym_formula] = STATE(93), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2493,39 +2444,39 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(2)] = { - [sym_base_ten] = STATE(313), - [sym_octal] = STATE(313), - [sym_hex] = STATE(313), - [sym_binary] = STATE(313), - [sym_integer] = STATE(318), - [sym_signed_integer] = STATE(120), - [sym_unsigned_integer] = STATE(120), - [sym_number] = STATE(77), - [sym__float] = STATE(76), - [sym_scalar] = STATE(120), - [sym_vector2] = STATE(120), - [sym_vector3] = STATE(120), - [sym_vector4] = STATE(120), - [sym_boolean] = STATE(120), - [sym_function_call] = STATE(120), - [sym_method_call] = STATE(120), - [sym_expression] = STATE(219), - [sym_unary_expression] = STATE(120), - [sym_binary_expression] = STATE(120), - [sym_if] = STATE(120), - [sym_let_in] = STATE(120), - [sym_identity_path] = STATE(120), - [sym_self_path] = STATE(120), - [sym_parenthesis] = STATE(120), - [sym_list] = STATE(120), - [sym_struct_member] = STATE(316), - [sym__struct_final_element] = STATE(320), - [sym_struct_definition] = STATE(119), - [sym_dictionary_member_assignment] = STATE(288), - [sym_dictionary_construction] = STATE(120), - [sym_closure_definition] = STATE(120), - [sym_formula] = STATE(120), - [aux_sym_struct_definition_repeat1] = STATE(272), + [sym_base_ten] = STATE(311), + [sym_octal] = STATE(311), + [sym_hex] = STATE(311), + [sym_binary] = STATE(311), + [sym_integer] = STATE(312), + [sym_signed_integer] = STATE(93), + [sym_unsigned_integer] = STATE(93), + [sym_number] = STATE(74), + [sym__float] = STATE(73), + [sym_scalar] = STATE(93), + [sym_vector2] = STATE(93), + [sym_vector3] = STATE(93), + [sym_vector4] = STATE(93), + [sym_boolean] = STATE(93), + [sym_function_call] = STATE(93), + [sym_method_call] = STATE(93), + [sym_expression] = STATE(212), + [sym_unary_expression] = STATE(93), + [sym_binary_expression] = STATE(93), + [sym_if] = STATE(93), + [sym_let_in] = STATE(93), + [sym_identity_path] = STATE(93), + [sym_self_path] = STATE(93), + [sym_parenthesis] = STATE(93), + [sym_list] = STATE(93), + [sym_struct_member] = STATE(301), + [sym__struct_final_element] = STATE(314), + [sym_struct_definition] = STATE(114), + [sym_dictionary_member_assignment] = STATE(291), + [sym_dictionary_construction] = STATE(93), + [sym_closure_definition] = STATE(93), + [sym_formula] = STATE(93), + [aux_sym_struct_definition_repeat1] = STATE(270), [sym_identifier] = ACTIONS(35), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2550,39 +2501,39 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(3)] = { - [sym_base_ten] = STATE(313), - [sym_octal] = STATE(313), - [sym_hex] = STATE(313), - [sym_binary] = STATE(313), - [sym_integer] = STATE(318), - [sym_signed_integer] = STATE(120), - [sym_unsigned_integer] = STATE(120), - [sym_number] = STATE(77), - [sym__float] = STATE(76), - [sym_scalar] = STATE(120), - [sym_vector2] = STATE(120), - [sym_vector3] = STATE(120), - [sym_vector4] = STATE(120), - [sym_boolean] = STATE(120), - [sym_function_call] = STATE(120), - [sym_method_call] = STATE(120), - [sym_expression] = STATE(217), - [sym_unary_expression] = STATE(120), - [sym_binary_expression] = STATE(120), - [sym_if] = STATE(120), - [sym_let_in] = STATE(120), - [sym_identity_path] = STATE(120), - [sym_self_path] = STATE(120), - [sym_parenthesis] = STATE(120), - [sym_list] = STATE(120), - [sym_struct_member] = STATE(316), - [sym__struct_final_element] = STATE(328), - [sym_struct_definition] = STATE(119), - [sym_dictionary_member_assignment] = STATE(289), - [sym_dictionary_construction] = STATE(120), - [sym_closure_definition] = STATE(120), - [sym_formula] = STATE(120), - [aux_sym_struct_definition_repeat1] = STATE(275), + [sym_base_ten] = STATE(311), + [sym_octal] = STATE(311), + [sym_hex] = STATE(311), + [sym_binary] = STATE(311), + [sym_integer] = STATE(312), + [sym_signed_integer] = STATE(93), + [sym_unsigned_integer] = STATE(93), + [sym_number] = STATE(74), + [sym__float] = STATE(73), + [sym_scalar] = STATE(93), + [sym_vector2] = STATE(93), + [sym_vector3] = STATE(93), + [sym_vector4] = STATE(93), + [sym_boolean] = STATE(93), + [sym_function_call] = STATE(93), + [sym_method_call] = STATE(93), + [sym_expression] = STATE(175), + [sym_unary_expression] = STATE(93), + [sym_binary_expression] = STATE(93), + [sym_if] = STATE(93), + [sym_let_in] = STATE(93), + [sym_identity_path] = STATE(93), + [sym_self_path] = STATE(93), + [sym_parenthesis] = STATE(93), + [sym_list] = STATE(93), + [sym_struct_member] = STATE(301), + [sym__struct_final_element] = STATE(315), + [sym_struct_definition] = STATE(114), + [sym_dictionary_member_assignment] = STATE(293), + [sym_dictionary_construction] = STATE(93), + [sym_closure_definition] = STATE(93), + [sym_formula] = STATE(93), + [aux_sym_struct_definition_repeat1] = STATE(264), [sym_identifier] = ACTIONS(35), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2640,15 +2591,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, STATE(5), 1, aux_sym_list_repeat1, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(160), 1, + STATE(141), 1, sym_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2660,12 +2611,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2717,15 +2668,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, STATE(6), 1, aux_sym_list_repeat1, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(149), 1, + STATE(165), 1, sym_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2737,12 +2688,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2794,15 +2745,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(6), 1, aux_sym_list_repeat1, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(225), 1, + STATE(208), 1, sym_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2814,12 +2765,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2871,15 +2822,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, STATE(6), 1, aux_sym_list_repeat1, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(175), 1, + STATE(169), 1, sym_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2891,12 +2842,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2948,15 +2899,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, STATE(7), 1, aux_sym_list_repeat1, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(174), 1, + STATE(167), 1, sym_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2968,12 +2919,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3021,15 +2972,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(207), 1, + STATE(132), 1, + sym__float, + STATE(210), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3041,12 +2992,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3094,15 +3045,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(180), 1, + STATE(132), 1, + sym__float, + STATE(198), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3114,12 +3065,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3167,15 +3118,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(107), 1, - sym_expression, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(318), 1, + STATE(115), 1, + sym_expression, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3187,12 +3138,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3240,15 +3191,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(203), 1, + STATE(204), 1, sym_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3260,12 +3211,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3313,15 +3264,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(99), 1, + STATE(102), 1, sym_expression, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3333,12 +3284,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3386,15 +3337,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(92), 1, + STATE(88), 1, sym_expression, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3406,12 +3357,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3459,15 +3410,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(101), 1, + STATE(104), 1, sym_expression, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3479,12 +3430,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3532,15 +3483,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(102), 1, + STATE(105), 1, sym_expression, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3552,12 +3503,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3605,15 +3556,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(103), 1, + STATE(106), 1, sym_expression, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3625,12 +3576,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3678,15 +3629,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(104), 1, + STATE(107), 1, sym_expression, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3698,12 +3649,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3751,15 +3702,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(105), 1, + STATE(108), 1, sym_expression, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3771,12 +3722,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3824,15 +3775,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(106), 1, - sym_expression, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(318), 1, + STATE(123), 1, + sym_expression, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3844,12 +3795,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3897,15 +3848,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(96), 1, + STATE(110), 1, sym_expression, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3917,12 +3868,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3970,15 +3921,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(108), 1, + STATE(111), 1, sym_expression, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3990,12 +3941,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4017,79 +3968,6 @@ static const uint16_t ts_small_parse_table[] = { sym_closure_definition, sym_formula, [1854] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(19), 1, - anon_sym_LT_LPAREN, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_let, - ACTIONS(29), 1, - anon_sym_LPAREN, - ACTIONS(31), 1, - anon_sym_LBRACK, - ACTIONS(33), 1, - anon_sym_LT_LT_LT, - STATE(76), 1, - sym__float, - STATE(77), 1, - sym_number, - STATE(109), 1, - sym_expression, - STATE(119), 1, - sym_struct_definition, - STATE(318), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(21), 2, - sym_true, - sym_false, - ACTIONS(23), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(313), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(120), 20, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_vector2, - sym_vector3, - sym_vector4, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_let_in, - sym_identity_path, - sym_self_path, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [1950] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4116,15 +3994,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(154), 1, + STATE(168), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4136,12 +4014,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4162,7 +4040,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2046] = 23, + [1950] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4189,15 +4067,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(208), 1, + STATE(218), 1, sym_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4209,12 +4087,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4235,7 +4113,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2142] = 23, + [2046] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4262,15 +4140,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(210), 1, + STATE(219), 1, sym_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4282,12 +4160,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4308,7 +4186,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2238] = 23, + [2142] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4335,15 +4213,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(112), 1, - sym_expression, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(318), 1, + STATE(116), 1, + sym_expression, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4355,12 +4233,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4381,7 +4259,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2334] = 23, + [2238] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4408,15 +4286,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(169), 1, + STATE(172), 1, sym_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4428,12 +4306,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4454,7 +4332,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2430] = 23, + [2334] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4481,15 +4359,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(142), 1, + STATE(138), 1, sym_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4501,12 +4379,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4527,7 +4405,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2526] = 23, + [2430] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4554,15 +4432,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(118), 1, - sym_expression, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(318), 1, + STATE(120), 1, + sym_expression, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4574,12 +4452,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4600,7 +4478,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2622] = 23, + [2526] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4627,15 +4505,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(145), 1, + STATE(156), 1, sym_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4647,12 +4525,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4673,7 +4551,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2718] = 23, + [2622] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4700,15 +4578,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, STATE(146), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4720,12 +4598,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4746,7 +4624,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2814] = 23, + [2718] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4773,15 +4651,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(119), 1, - sym_struct_definition, - STATE(123), 1, + STATE(97), 1, sym_expression, - STATE(318), 1, + STATE(114), 1, + sym_struct_definition, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4793,12 +4671,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4819,7 +4697,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2910] = 23, + [2814] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4846,15 +4724,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(212), 1, + STATE(206), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4866,12 +4744,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4892,7 +4770,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3006] = 23, + [2910] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4919,15 +4797,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(218), 1, + STATE(132), 1, + sym__float, + STATE(211), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4939,12 +4817,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4965,7 +4843,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3102] = 23, + [3006] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4992,15 +4870,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(98), 1, + STATE(113), 1, sym_expression, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5012,12 +4890,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5038,7 +4916,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3198] = 23, + [3102] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5065,15 +4943,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(214), 1, + STATE(132), 1, + sym__float, + STATE(177), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5085,12 +4963,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5111,7 +4989,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3294] = 23, + [3198] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5138,15 +5016,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, + STATE(132), 1, + sym__float, STATE(181), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5158,12 +5036,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5184,7 +5062,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3390] = 23, + [3294] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5211,15 +5089,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(92), 1, + STATE(88), 1, sym_expression, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(224), 1, + STATE(132), 1, + sym__float, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5231,12 +5109,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5257,7 +5135,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3486] = 23, + [3390] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5284,15 +5162,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(183), 1, + STATE(132), 1, + sym__float, + STATE(182), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5304,12 +5182,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5330,7 +5208,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3582] = 23, + [3486] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5357,15 +5235,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(184), 1, + STATE(132), 1, + sym__float, + STATE(183), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5377,12 +5255,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5403,7 +5281,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3678] = 23, + [3582] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5430,15 +5308,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(186), 1, + STATE(132), 1, + sym__float, + STATE(184), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5450,12 +5328,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5476,7 +5354,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3774] = 23, + [3678] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5503,15 +5381,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(187), 1, + STATE(132), 1, + sym__float, + STATE(185), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5523,12 +5401,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5549,7 +5427,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3870] = 23, + [3774] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5576,15 +5454,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(188), 1, + STATE(132), 1, + sym__float, + STATE(186), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5596,12 +5474,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5622,7 +5500,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3966] = 23, + [3870] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5649,15 +5527,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(189), 1, + STATE(132), 1, + sym__float, + STATE(187), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5669,12 +5547,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5695,7 +5573,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4062] = 23, + [3966] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5722,15 +5600,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(190), 1, + STATE(132), 1, + sym__float, + STATE(189), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5742,12 +5620,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5768,7 +5646,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4158] = 23, + [4062] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5795,15 +5673,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, + STATE(132), 1, + sym__float, STATE(191), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5815,12 +5693,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5841,7 +5719,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4254] = 23, + [4158] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5868,15 +5746,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(193), 1, + STATE(132), 1, + sym__float, + STATE(195), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5888,12 +5766,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5914,7 +5792,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4350] = 23, + [4254] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5941,15 +5819,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(196), 1, + STATE(132), 1, + sym__float, + STATE(199), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5961,12 +5839,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5987,59 +5865,132 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4446] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, + [4350] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(120), 1, + anon_sym_if, + ACTIONS(122), 1, + anon_sym_let, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + STATE(127), 1, + sym_number, + STATE(128), 1, + sym__float, + STATE(145), 1, + sym_struct_definition, + STATE(148), 1, + sym_expression, + STATE(300), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(116), 2, + sym_true, + sym_false, + ACTIONS(118), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(311), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(207), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [4446] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(114), 1, + anon_sym_LT_LPAREN, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(122), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + ACTIONS(124), 1, + anon_sym_LPAREN, + ACTIONS(126), 1, + anon_sym_LBRACK, + ACTIONS(128), 1, + anon_sym_LT_LT_LT, + STATE(127), 1, sym_number, - STATE(200), 1, - sym_expression, - STATE(224), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(318), 1, + STATE(149), 1, + sym_expression, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6087,15 +6038,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(147), 1, + STATE(152), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6107,12 +6058,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6160,15 +6111,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, + STATE(128), 1, + sym__float, STATE(144), 1, - sym_struct_definition, - STATE(156), 1, sym_expression, - STATE(308), 1, + STATE(145), 1, + sym_struct_definition, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6180,12 +6131,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6233,15 +6184,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(159), 1, + STATE(153), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6253,12 +6204,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6306,15 +6257,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(153), 1, + STATE(154), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6326,12 +6277,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6379,15 +6330,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(178), 1, + STATE(155), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6399,12 +6350,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6452,15 +6403,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(161), 1, + STATE(173), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6472,12 +6423,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6525,15 +6476,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(162), 1, + STATE(157), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6545,12 +6496,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6598,15 +6549,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(163), 1, + STATE(158), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6618,12 +6569,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6671,15 +6622,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(164), 1, + STATE(159), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6691,12 +6642,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6744,15 +6695,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(165), 1, + STATE(160), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6764,12 +6715,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6817,15 +6768,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(166), 1, + STATE(161), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6837,12 +6788,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6890,15 +6841,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(167), 1, + STATE(163), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6910,12 +6861,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6963,15 +6914,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, - sym_struct_definition, - STATE(168), 1, + STATE(128), 1, + sym__float, + STATE(140), 1, sym_expression, - STATE(308), 1, + STATE(145), 1, + sym_struct_definition, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6983,12 +6934,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7036,15 +6987,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, STATE(170), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7056,12 +7007,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7083,58 +7034,58 @@ static const uint16_t ts_small_parse_table[] = { sym_closure_definition, sym_formula, [5886] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, - sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, - aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(131), 1, + STATE(73), 1, sym__float, - STATE(132), 1, + STATE(74), 1, sym_number, - STATE(144), 1, + STATE(114), 1, sym_struct_definition, - STATE(172), 1, + STATE(214), 1, sym_expression, - STATE(308), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7182,15 +7133,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(173), 1, + STATE(171), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7202,12 +7153,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7255,15 +7206,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(127), 1, sym_number, - STATE(144), 1, + STATE(128), 1, + sym__float, + STATE(145), 1, sym_struct_definition, - STATE(176), 1, + STATE(215), 1, sym_expression, - STATE(308), 1, + STATE(300), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7275,12 +7226,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(207), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7328,15 +7279,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(119), 1, + STATE(114), 1, sym_struct_definition, - STATE(221), 1, + STATE(216), 1, sym_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7348,12 +7299,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7375,58 +7326,58 @@ static const uint16_t ts_small_parse_table[] = { sym_closure_definition, sym_formula, [6270] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, - sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, - aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(131), 1, + STATE(73), 1, sym__float, - STATE(132), 1, + STATE(74), 1, sym_number, - STATE(144), 1, + STATE(114), 1, sym_struct_definition, - STATE(177), 1, + STATE(220), 1, sym_expression, - STATE(308), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7448,225 +7399,6 @@ static const uint16_t ts_small_parse_table[] = { sym_closure_definition, sym_formula, [6366] = 23, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, - sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, - aux_sym_base_ten_token1, - ACTIONS(114), 1, - anon_sym_LT_LPAREN, - ACTIONS(120), 1, - anon_sym_if, - ACTIONS(122), 1, - anon_sym_let, - ACTIONS(124), 1, - anon_sym_LPAREN, - ACTIONS(126), 1, - anon_sym_LBRACK, - ACTIONS(128), 1, - anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, - sym_number, - STATE(144), 1, - sym_struct_definition, - STATE(222), 1, - sym_expression, - STATE(308), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(116), 2, - sym_true, - sym_false, - ACTIONS(118), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(313), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(211), 20, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_vector2, - sym_vector3, - sym_vector4, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_let_in, - sym_identity_path, - sym_self_path, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [6462] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(19), 1, - anon_sym_LT_LPAREN, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_let, - ACTIONS(29), 1, - anon_sym_LPAREN, - ACTIONS(31), 1, - anon_sym_LBRACK, - ACTIONS(33), 1, - anon_sym_LT_LT_LT, - STATE(76), 1, - sym__float, - STATE(77), 1, - sym_number, - STATE(119), 1, - sym_struct_definition, - STATE(223), 1, - sym_expression, - STATE(318), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(21), 2, - sym_true, - sym_false, - ACTIONS(23), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(313), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(120), 20, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_vector2, - sym_vector3, - sym_vector4, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_let_in, - sym_identity_path, - sym_self_path, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [6558] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(19), 1, - anon_sym_LT_LPAREN, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_let, - ACTIONS(29), 1, - anon_sym_LPAREN, - ACTIONS(31), 1, - anon_sym_LBRACK, - ACTIONS(33), 1, - anon_sym_LT_LT_LT, - STATE(76), 1, - sym__float, - STATE(77), 1, - sym_number, - STATE(119), 1, - sym_struct_definition, - STATE(226), 1, - sym_expression, - STATE(318), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(21), 2, - sym_true, - sym_false, - ACTIONS(23), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(313), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(120), 20, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_vector2, - sym_vector3, - sym_vector4, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_let_in, - sym_identity_path, - sym_self_path, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [6654] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -7693,15 +7425,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(224), 1, + STATE(132), 1, + sym__float, + STATE(217), 1, sym_struct_definition, - STATE(227), 1, + STATE(221), 1, sym_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7713,12 +7445,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7739,7 +7471,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6750] = 23, + [6462] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -7766,15 +7498,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(139), 1, - sym__float, - STATE(140), 1, + STATE(129), 1, sym_number, - STATE(185), 1, + STATE(132), 1, + sym__float, + STATE(188), 1, sym_expression, - STATE(224), 1, + STATE(217), 1, sym_struct_definition, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7786,12 +7518,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(93), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7812,16 +7544,15 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6846] = 4, + [6558] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(134), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(132), 12, + ACTIONS(132), 10, sym_identifier, - anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -7829,12 +7560,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, ACTIONS(130), 22, ts_builtin_sym_end, sym_unit_quote, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -7849,23 +7580,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6893] = 6, + [6603] = 6, ACTIONS(138), 1, sym_identifier, ACTIONS(140), 1, sym_unit_quote, - STATE(86), 1, + STATE(90), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(142), 10, + ACTIONS(142), 9, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -7873,10 +7603,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(136), 21, + ACTIONS(136), 20, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -7892,19 +7621,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6942] = 4, + [6650] = 4, ACTIONS(148), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(146), 11, + ACTIONS(146), 10, sym_identifier, anon_sym_STAR, anon_sym_SLASH, @@ -7913,10 +7641,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_else, anon_sym_EQ, - ACTIONS(144), 22, + ACTIONS(144), 21, ts_builtin_sym_end, sym_unit_quote, anon_sym_COMMA, @@ -7933,30 +7660,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6987] = 5, + [6693] = 5, ACTIONS(152), 1, anon_sym_DOT, - STATE(81), 1, - aux_sym_self_path_repeat1, + STATE(78), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(154), 8, + ACTIONS(154), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(150), 23, + ACTIONS(150), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -7973,32 +7698,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7033] = 3, + [6737] = 5, + ACTIONS(152), 1, + anon_sym_DOT, + STATE(75), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 11, - sym_identifier, + ACTIONS(158), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_else, anon_sym_EQ, ACTIONS(156), 22, ts_builtin_sym_end, - sym_unit_quote, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8006,6 +7729,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8013,31 +7737,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + anon_sym_then, + anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7075] = 5, - ACTIONS(162), 1, - anon_sym_DOT, - STATE(82), 1, - aux_sym_identity_path_repeat1, + [6781] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 8, + ACTIONS(162), 10, + sym_identifier, anon_sym_STAR, anon_sym_SLASH, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, + anon_sym_else, anon_sym_EQ, - ACTIONS(160), 23, + ACTIONS(160), 21, ts_builtin_sym_end, + sym_unit_quote, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8045,7 +7768,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8053,31 +7775,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, - anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7121] = 5, - ACTIONS(152), 1, + anon_sym_GT_GT_GT, + [6821] = 5, + ACTIONS(166), 1, anon_sym_DOT, - STATE(83), 1, - aux_sym_self_path_repeat1, + STATE(78), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(168), 8, + ACTIONS(169), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(166), 23, + ACTIONS(164), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8094,31 +7813,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7167] = 5, - ACTIONS(172), 1, + [6865] = 5, + ACTIONS(173), 1, anon_sym_DOT, - STATE(82), 1, - aux_sym_identity_path_repeat1, + STATE(79), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(175), 8, + ACTIONS(176), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(170), 23, + ACTIONS(171), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8135,31 +7852,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7213] = 5, - ACTIONS(179), 1, + [6909] = 5, + ACTIONS(180), 1, anon_sym_DOT, - STATE(83), 1, + STATE(79), 1, aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(182), 8, + ACTIONS(182), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(177), 23, + ACTIONS(178), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8176,32 +7891,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7259] = 5, - ACTIONS(162), 1, - anon_sym_DOT, - STATE(80), 1, - aux_sym_identity_path_repeat1, + [6953] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 8, + ACTIONS(132), 10, + sym_identifier, anon_sym_STAR, anon_sym_SLASH, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, + anon_sym_else, anon_sym_EQ, - ACTIONS(184), 23, + ACTIONS(130), 21, ts_builtin_sym_end, + sym_unit_quote, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8209,7 +7922,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8217,32 +7929,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, - anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7305] = 3, + anon_sym_GT_GT_GT, + [6993] = 5, + ACTIONS(180), 1, + anon_sym_DOT, + STATE(80), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(132), 11, - sym_identifier, + ACTIONS(186), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_else, anon_sym_EQ, - ACTIONS(130), 22, + ACTIONS(184), 22, ts_builtin_sym_end, - sym_unit_quote, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8250,6 +7959,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8257,28 +7967,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + anon_sym_then, + anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7347] = 3, + [7037] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(190), 9, + ACTIONS(190), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, ACTIONS(188), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8286,6 +7995,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8293,21 +8003,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7388] = 4, + [7076] = 4, ACTIONS(196), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(194), 9, + ACTIONS(194), 8, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -8315,9 +8023,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(192), 22, + ACTIONS(192), 21, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8333,18 +8040,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7431] = 3, + [7117] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(200), 9, + ACTIONS(200), 8, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -8352,9 +8058,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(198), 23, + ACTIONS(198), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8370,7 +8075,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, @@ -8378,11 +8082,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_DASH_GT, - [7472] = 3, + [7156] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 9, + ACTIONS(204), 8, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -8390,9 +8094,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(202), 23, + ACTIONS(202), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8408,7 +8111,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, @@ -8416,22 +8118,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_DASH_GT, - [7513] = 3, + [7195] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(175), 9, - anon_sym_DOT, + ACTIONS(169), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(170), 23, + ACTIONS(164), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8447,36 +8148,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7554] = 3, + [7234] = 6, + ACTIONS(208), 1, + anon_sym_COLON_COLON, + ACTIONS(212), 1, + anon_sym_LPAREN, + STATE(100), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(208), 9, + ACTIONS(210), 7, anon_sym_STAR, anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(206), 23, + ACTIONS(206), 20, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8484,42 +8188,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7595] = 6, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - STATE(111), 1, - sym_dictionary_construction, + [7279] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 8, + ACTIONS(216), 8, anon_sym_STAR, anon_sym_SLASH, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(210), 21, + ACTIONS(214), 22, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8527,27 +8222,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7642] = 3, + anon_sym_GT_GT_GT, + [7318] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(220), 9, - anon_sym_DOT, + ACTIONS(220), 8, anon_sym_STAR, anon_sym_SLASH, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(218), 23, + ACTIONS(218), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8556,7 +8251,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8564,18 +8258,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7683] = 3, + anon_sym_GT_GT_GT, + [7357] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(224), 9, + ACTIONS(224), 8, anon_sym_STAR, anon_sym_SLASH, anon_sym_GT_GT, @@ -8583,9 +8277,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(222), 23, + ACTIONS(222), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8601,7 +8294,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, @@ -8609,11 +8301,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7724] = 3, + [7396] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(228), 9, + ACTIONS(228), 8, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -8621,9 +8313,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(226), 23, + ACTIONS(226), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8639,7 +8330,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, @@ -8647,70 +8337,124 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_DASH_GT, - [7765] = 16, - ACTIONS(212), 1, + [7435] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(232), 7, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + ACTIONS(230), 22, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(236), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, - STATE(111), 1, - sym_dictionary_construction, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [7473] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 2, - anon_sym_DOT_DOT, + ACTIONS(236), 7, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, anon_sym_EQ, - ACTIONS(230), 2, + ACTIONS(234), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(238), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(248), 4, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(210), 9, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [7511] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(240), 7, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + ACTIONS(238), 22, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7831] = 3, + [7549] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(252), 8, + ACTIONS(244), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(250), 23, + ACTIONS(242), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8727,96 +8471,82 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7871] = 20, - ACTIONS(212), 1, + [7587] = 18, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(264), 1, + ACTIONS(272), 1, anon_sym_EQ, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(254), 6, + ACTIONS(246), 6, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [7945] = 9, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_SLASH_SLASH, - STATE(111), 1, - sym_dictionary_construction, + [7655] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(234), 2, + ACTIONS(276), 7, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(214), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(210), 18, + ACTIONS(274), 22, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -8826,25 +8556,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7997] = 3, + [7693] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(268), 8, + ACTIONS(280), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(266), 23, + ACTIONS(278), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8861,39 +8591,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8037] = 7, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - STATE(111), 1, - sym_dictionary_construction, + [7731] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 8, + ACTIONS(284), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(210), 19, + ACTIONS(282), 22, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -8904,41 +8626,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8085] = 10, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_SLASH_SLASH, - STATE(111), 1, - sym_dictionary_construction, + [7769] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(288), 7, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(214), 6, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(210), 16, + ACTIONS(286), 22, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -8948,44 +8661,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8139] = 11, - ACTIONS(212), 1, + [7807] = 9, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(214), 6, + ACTIONS(210), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(210), 14, + ACTIONS(206), 17, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -8993,92 +8704,73 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8195] = 13, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_SLASH_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(244), 1, - anon_sym_CARET, - STATE(111), 1, - sym_dictionary_construction, + [7857] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(292), 7, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(214), 5, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(210), 13, + ACTIONS(290), 22, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8255] = 12, - ACTIONS(212), 1, + [7895] = 7, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_SLASH_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(210), 7, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(214), 5, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(210), 14, + ACTIONS(206), 18, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -9086,230 +8778,197 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8313] = 14, - ACTIONS(212), 1, + [7941] = 10, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, - anon_sym_CARET, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(214), 4, - anon_sym_GT, + ACTIONS(210), 5, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(210), 13, + ACTIONS(206), 15, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8375] = 20, - ACTIONS(212), 1, + [7993] = 11, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, - anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, - ACTIONS(258), 1, - anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(272), 1, - anon_sym_EQ, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(210), 5, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + anon_sym_EQ, + ACTIONS(206), 13, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(270), 6, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8449] = 17, - ACTIONS(212), 1, + [8047] = 13, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(210), 4, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + anon_sym_EQ, + ACTIONS(206), 12, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(210), 8, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8517] = 18, - ACTIONS(212), 1, + [8105] = 12, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, - anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, ACTIONS(258), 1, - anon_sym_PIPE_PIPE, - STATE(111), 1, + anon_sym_AMP, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 2, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(210), 4, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + anon_sym_EQ, + ACTIONS(206), 13, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(210), 7, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_DOT_DOT_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8587] = 3, + [8161] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(194), 8, + ACTIONS(296), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(192), 23, + ACTIONS(294), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -9326,27 +8985,122 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8627] = 3, + [8199] = 16, + ACTIONS(208), 1, + anon_sym_COLON_COLON, + ACTIONS(210), 1, + anon_sym_EQ, + ACTIONS(212), 1, + anon_sym_LPAREN, + ACTIONS(250), 1, + anon_sym_STAR_STAR, + ACTIONS(254), 1, + anon_sym_SLASH_SLASH, + ACTIONS(258), 1, + anon_sym_AMP, + ACTIONS(260), 1, + anon_sym_PIPE, + ACTIONS(262), 1, + anon_sym_CARET, + STATE(100), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(248), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(252), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(256), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(264), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(266), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(206), 8, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8263] = 17, + ACTIONS(208), 1, + anon_sym_COLON_COLON, + ACTIONS(210), 1, + anon_sym_EQ, + ACTIONS(212), 1, + anon_sym_LPAREN, + ACTIONS(250), 1, + anon_sym_STAR_STAR, + ACTIONS(254), 1, + anon_sym_SLASH_SLASH, + ACTIONS(258), 1, + anon_sym_AMP, + ACTIONS(260), 1, + anon_sym_PIPE, + ACTIONS(262), 1, + anon_sym_CARET, + ACTIONS(268), 1, + anon_sym_AMP_AMP, + STATE(100), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(248), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(252), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(256), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(264), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(266), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(206), 7, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8329] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(276), 8, + ACTIONS(194), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(274), 23, + ACTIONS(192), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -9363,85 +9117,81 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8667] = 20, - ACTIONS(212), 1, + [8367] = 18, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(280), 1, + ACTIONS(300), 1, anon_sym_EQ, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(278), 6, + ACTIONS(298), 6, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8741] = 3, + [8435] = 4, + ACTIONS(302), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(284), 8, + ACTIONS(232), 8, + anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(282), 23, + ACTIONS(230), 20, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -9454,64 +9204,124 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8781] = 3, + [8475] = 18, + ACTIONS(208), 1, + anon_sym_COLON_COLON, + ACTIONS(212), 1, + anon_sym_LPAREN, + ACTIONS(250), 1, + anon_sym_STAR_STAR, + ACTIONS(254), 1, + anon_sym_SLASH_SLASH, + ACTIONS(258), 1, + anon_sym_AMP, + ACTIONS(260), 1, + anon_sym_PIPE, + ACTIONS(262), 1, + anon_sym_CARET, + ACTIONS(268), 1, + anon_sym_AMP_AMP, + ACTIONS(270), 1, + anon_sym_PIPE_PIPE, + ACTIONS(306), 1, + anon_sym_EQ, + STATE(100), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(288), 8, + ACTIONS(248), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(256), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(286), 23, + ACTIONS(266), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(304), 6, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8543] = 18, + ACTIONS(208), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(212), 1, + anon_sym_LPAREN, + ACTIONS(250), 1, anon_sym_STAR_STAR, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, + ACTIONS(258), 1, + anon_sym_AMP, + ACTIONS(260), 1, + anon_sym_PIPE, + ACTIONS(262), 1, + anon_sym_CARET, + ACTIONS(268), 1, + anon_sym_AMP_AMP, + ACTIONS(270), 1, + anon_sym_PIPE_PIPE, + ACTIONS(310), 1, + anon_sym_EQ, + STATE(100), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(248), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(252), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(264), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, + ACTIONS(308), 6, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8821] = 3, + [8611] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 8, + ACTIONS(314), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(290), 23, + ACTIONS(312), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -9528,27 +9338,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8861] = 3, + [8649] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 8, + ACTIONS(318), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(294), 23, + ACTIONS(316), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -9565,27 +9373,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8901] = 3, + [8687] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(300), 8, + ACTIONS(322), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(298), 23, + ACTIONS(320), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -9602,87 +9408,79 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8941] = 20, - ACTIONS(212), 1, + [8725] = 18, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(304), 1, + ACTIONS(326), 1, anon_sym_EQ, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(302), 6, + ACTIONS(324), 6, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [9015] = 4, - ACTIONS(310), 1, - anon_sym_DASH_GT, + [8793] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(308), 9, - anon_sym_DASH, + ACTIONS(330), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(306), 21, + ACTIONS(328), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -9695,63 +9493,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [9057] = 3, + [8831] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(308), 8, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(306), 23, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9097] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(314), 8, + ACTIONS(334), 7, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, anon_sym_EQ, - ACTIONS(312), 23, + ACTIONS(332), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -9768,120 +9528,78 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [9137] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(318), 8, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(316), 23, - ts_builtin_sym_end, - anon_sym_COMMA, + [8869] = 14, + ACTIONS(208), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9177] = 20, ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, - anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, ACTIONS(258), 1, - anon_sym_PIPE_PIPE, + anon_sym_AMP, ACTIONS(260), 1, - anon_sym_DOT_DOT, + anon_sym_PIPE, ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(322), 1, - anon_sym_EQ, - STATE(111), 1, + anon_sym_CARET, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(210), 3, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + anon_sym_EQ, + ACTIONS(206), 12, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(320), 6, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [9251] = 3, + [8929] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(326), 8, + ACTIONS(134), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(132), 7, + sym_identifier, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(324), 23, - ts_builtin_sym_end, + ACTIONS(130), 19, + sym_unit_quote, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9896,29 +9614,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9291] = 3, + [8968] = 8, + ACTIONS(152), 1, + anon_sym_DOT, + ACTIONS(336), 1, + anon_sym_EQ, + ACTIONS(338), 1, + anon_sym_COLON, + STATE(75), 1, + aux_sym_identity_path_repeat1, + STATE(288), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(330), 8, + ACTIONS(158), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(328), 23, - ts_builtin_sym_end, - anon_sym_COMMA, + ACTIONS(156), 16, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9933,29 +9651,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, - anon_sym_RBRACK, - [9331] = 3, + [9014] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(334), 8, + ACTIONS(134), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(132), 7, + sym_identifier, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(332), 23, - ts_builtin_sym_end, - anon_sym_COMMA, + ACTIONS(130), 18, + sym_unit_quote, + anon_sym_DOT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9970,29 +9685,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9371] = 3, + [9052] = 4, + ACTIONS(340), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(338), 8, + ACTIONS(146), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - anon_sym_EQ, - ACTIONS(336), 23, - ts_builtin_sym_end, + ACTIONS(144), 19, + sym_identifier, + sym_unit_quote, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10007,32 +9719,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9411] = 4, + [9089] = 5, + STATE(203), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(134), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(132), 9, + ACTIONS(342), 2, sym_identifier, - anon_sym_DOT, + sym_unit_quote, + ACTIONS(142), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(130), 19, - sym_unit_quote, + ACTIONS(136), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10049,31 +9753,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9452] = 8, - ACTIONS(162), 1, + [9128] = 4, + ACTIONS(344), 1, anon_sym_DOT, - ACTIONS(340), 1, - anon_sym_EQ, - ACTIONS(342), 1, - anon_sym_COLON, - STATE(80), 1, - aux_sym_identity_path_repeat1, - STATE(290), 1, - sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 7, + ACTIONS(146), 7, + sym_identifier, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(184), 17, + ACTIONS(144), 17, + sym_unit_quote, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10088,28 +9784,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_LPAREN, - anon_sym_RPAREN, - [9500] = 4, + [9164] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(134), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(132), 9, - sym_identifier, - anon_sym_DOT, + ACTIONS(162), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(130), 18, + ACTIONS(160), 19, + sym_identifier, sym_unit_quote, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10124,27 +9816,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, anon_sym_LPAREN, - [9540] = 5, - STATE(206), 1, - sym__unit, + [9198] = 5, + ACTIONS(346), 1, + anon_sym_DOT, + STATE(133), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, - sym_identifier, - sym_unit_quote, - ACTIONS(142), 7, + ACTIONS(186), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(136), 18, + ACTIONS(184), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10161,27 +9849,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9581] = 4, - ACTIONS(346), 1, - anon_sym_DOT, + [9236] = 6, + ACTIONS(138), 1, + sym_identifier, + ACTIONS(140), 1, + sym_unit_quote, + STATE(90), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(146), 7, + ACTIONS(142), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(144), 20, - sym_identifier, - sym_unit_quote, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(136), 16, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10196,23 +9882,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_LPAREN, - [9620] = 3, + [9276] = 5, + ACTIONS(346), 1, + anon_sym_DOT, + STATE(134), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 7, + ACTIONS(182), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(156), 20, - sym_identifier, - sym_unit_quote, + ACTIONS(178), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10229,25 +9916,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9656] = 5, + [9314] = 5, ACTIONS(348), 1, anon_sym_DOT, - STATE(141), 1, - aux_sym_identity_path_repeat1, + STATE(134), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 7, + ACTIONS(176), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(184), 18, + ACTIONS(171), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10264,25 +9949,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9696] = 5, - ACTIONS(350), 1, + [9352] = 5, + ACTIONS(351), 1, anon_sym_DOT, - STATE(135), 1, - aux_sym_self_path_repeat1, + STATE(136), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(182), 7, + ACTIONS(158), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(177), 18, + ACTIONS(156), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10299,23 +9982,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9736] = 3, + [9390] = 5, + ACTIONS(351), 1, + anon_sym_DOT, + STATE(137), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(132), 7, + ACTIONS(154), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(130), 20, - sym_identifier, - sym_unit_quote, + ACTIONS(150), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10332,9 +10015,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9772] = 5, + [9428] = 5, ACTIONS(353), 1, anon_sym_DOT, STATE(137), 1, @@ -10342,15 +10024,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(175), 7, + ACTIONS(169), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(170), 18, + ACTIONS(164), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10367,25 +10048,67 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9812] = 5, - ACTIONS(356), 1, - anon_sym_DOT, - STATE(135), 1, - aux_sym_self_path_repeat1, + [9466] = 18, + ACTIONS(208), 1, + anon_sym_COLON_COLON, + ACTIONS(212), 1, + anon_sym_LPAREN, + ACTIONS(250), 1, + anon_sym_STAR_STAR, + ACTIONS(254), 1, + anon_sym_SLASH_SLASH, + ACTIONS(258), 1, + anon_sym_AMP, + ACTIONS(260), 1, + anon_sym_PIPE, + ACTIONS(262), 1, + anon_sym_CARET, + ACTIONS(268), 1, + anon_sym_AMP_AMP, + ACTIONS(270), 1, + anon_sym_PIPE_PIPE, + ACTIONS(358), 1, + anon_sym_EQ, + STATE(100), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(248), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(252), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(256), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(264), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(356), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(266), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9530] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(168), 7, + ACTIONS(132), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(166), 18, + ACTIONS(130), 19, + sym_identifier, + sym_unit_quote, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10402,51 +10125,101 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [9852] = 6, - ACTIONS(138), 1, - sym_identifier, - ACTIONS(140), 1, - sym_unit_quote, - STATE(86), 1, - sym__unit, + [9564] = 17, + ACTIONS(360), 1, + anon_sym_COLON_COLON, + ACTIONS(364), 1, + anon_sym_STAR_STAR, + ACTIONS(368), 1, + anon_sym_SLASH_SLASH, + ACTIONS(372), 1, + anon_sym_AMP, + ACTIONS(374), 1, + anon_sym_PIPE, + ACTIONS(376), 1, + anon_sym_CARET, + ACTIONS(382), 1, + anon_sym_AMP_AMP, + ACTIONS(384), 1, + anon_sym_PIPE_PIPE, + ACTIONS(386), 1, + anon_sym_LPAREN, + STATE(176), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(142), 7, + ACTIONS(246), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(362), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(370), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(378), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(136), 17, + ACTIONS(380), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9625] = 18, + ACTIONS(45), 1, + anon_sym_RBRACK, + ACTIONS(208), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(212), 1, + anon_sym_LPAREN, + ACTIONS(250), 1, anon_sym_STAR_STAR, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, + ACTIONS(258), 1, + anon_sym_AMP, + ACTIONS(260), 1, + anon_sym_PIPE, + ACTIONS(262), 1, + anon_sym_CARET, + ACTIONS(268), 1, + anon_sym_AMP_AMP, + ACTIONS(270), 1, + anon_sym_PIPE_PIPE, + ACTIONS(388), 1, + anon_sym_COMMA, + STATE(100), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(248), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(252), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(264), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, - anon_sym_LPAREN, - [9894] = 4, - ACTIONS(358), 1, - anon_sym_DOT, + [9688] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(146), 8, + ACTIONS(132), 7, sym_identifier, anon_sym_STAR, anon_sym_SLASH, @@ -10454,8 +10227,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(144), 18, + ACTIONS(130), 17, sym_unit_quote, anon_sym_COLON_COLON, anon_sym_DASH, @@ -10471,28 +10243,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_LPAREN, - [9932] = 5, - ACTIONS(348), 1, - anon_sym_DOT, - STATE(137), 1, - aux_sym_identity_path_repeat1, + [9721] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 7, + ACTIONS(162), 7, + sym_identifier, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(160), 18, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(160), 17, + sym_unit_quote, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10507,78 +10273,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, + anon_sym_then, anon_sym_LPAREN, - [9972] = 20, - ACTIONS(212), 1, + [9754] = 6, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(386), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_SLASH_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, - anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, - ACTIONS(258), 1, - anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(362), 1, - anon_sym_EQ, - STATE(111), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(234), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(238), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(360), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(248), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [10042] = 5, - ACTIONS(356), 1, - anon_sym_DOT, - STATE(138), 1, - aux_sym_self_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(154), 7, + ACTIONS(210), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(150), 18, + ACTIONS(206), 15, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -10592,15 +10308,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - [10082] = 4, - ACTIONS(364), 1, + [9793] = 4, + ACTIONS(390), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(308), 8, + ACTIONS(232), 7, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -10608,8 +10322,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(306), 17, + ACTIONS(230), 16, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10625,160 +10338,175 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [10119] = 19, - ACTIONS(212), 1, + [9828] = 18, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(372), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(374), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(376), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(382), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(384), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - STATE(111), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(392), 1, + anon_sym_COMMA, + ACTIONS(394), 1, + anon_sym_RPAREN_GT, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(378), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(366), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(248), 4, + ACTIONS(380), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10186] = 20, - ACTIONS(368), 1, + [9891] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(169), 6, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + ACTIONS(164), 18, + anon_sym_DOT, anon_sym_COMMA, - ACTIONS(370), 1, anon_sym_RPAREN_GT, - ACTIONS(372), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(380), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LPAREN, + [9924] = 17, + ACTIONS(360), 1, + anon_sym_COLON_COLON, + ACTIONS(364), 1, + anon_sym_STAR_STAR, + ACTIONS(368), 1, + anon_sym_SLASH_SLASH, + ACTIONS(372), 1, anon_sym_AMP, - ACTIONS(386), 1, + ACTIONS(374), 1, anon_sym_PIPE, - ACTIONS(388), 1, + ACTIONS(376), 1, anon_sym_CARET, - ACTIONS(394), 1, + ACTIONS(382), 1, anon_sym_AMP_AMP, - ACTIONS(396), 1, + ACTIONS(384), 1, anon_sym_PIPE_PIPE, - ACTIONS(398), 1, - anon_sym_DOT_DOT, - ACTIONS(400), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(402), 1, + ACTIONS(386), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 2, + ACTIONS(298), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(390), 2, + ACTIONS(378), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(392), 4, + ACTIONS(380), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10255] = 19, - ACTIONS(372), 1, + [9985] = 17, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, + ACTIONS(372), 1, anon_sym_AMP, - ACTIONS(386), 1, + ACTIONS(374), 1, anon_sym_PIPE, - ACTIONS(388), 1, + ACTIONS(376), 1, anon_sym_CARET, - ACTIONS(394), 1, + ACTIONS(382), 1, anon_sym_AMP_AMP, - ACTIONS(396), 1, + ACTIONS(384), 1, anon_sym_PIPE_PIPE, - ACTIONS(398), 1, - anon_sym_DOT_DOT, - ACTIONS(400), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(402), 1, + ACTIONS(386), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(254), 2, + ACTIONS(304), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - ACTIONS(374), 2, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(390), 2, + ACTIONS(378), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(392), 4, + ACTIONS(380), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10322] = 4, - ACTIONS(196), 1, - anon_sym_DASH_GT, + [10046] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(194), 8, + ACTIONS(204), 7, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -10786,8 +10514,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(192), 17, + ACTIONS(202), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10803,75 +10530,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - [10359] = 20, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_SLASH_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, - anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, - ACTIONS(258), 1, - anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(404), 1, - anon_sym_COMMA, - ACTIONS(406), 1, - anon_sym_RBRACK, - STATE(111), 1, - sym_dictionary_construction, + anon_sym_DASH_GT, + [10079] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(200), 7, anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(234), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(238), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(248), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [10428] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(220), 8, - anon_sym_DOT, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(218), 18, + ACTIONS(198), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -10884,60 +10560,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [10463] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(132), 8, - sym_identifier, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(130), 18, - sym_unit_quote, + anon_sym_DASH_GT, + [10112] = 9, + ACTIONS(360), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(364), 1, anon_sym_STAR_STAR, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, + ACTIONS(386), 1, anon_sym_LPAREN, - [10498] = 3, + STATE(176), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 8, - sym_identifier, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(210), 4, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(156), 18, - sym_unit_quote, - anon_sym_COLON_COLON, + ACTIONS(206), 13, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -10947,33 +10598,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, - anon_sym_LPAREN, - [10533] = 6, - ACTIONS(372), 1, + [10157] = 7, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(402), 1, + ACTIONS(364), 1, + anon_sym_STAR_STAR, + ACTIONS(386), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 7, + ACTIONS(210), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 16, + ACTIONS(206), 14, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -10984,77 +10632,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [10574] = 20, - ACTIONS(372), 1, + [10198] = 10, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, - anon_sym_AMP, ACTIONS(386), 1, - anon_sym_PIPE, - ACTIONS(388), 1, - anon_sym_CARET, - ACTIONS(394), 1, - anon_sym_AMP_AMP, - ACTIONS(396), 1, - anon_sym_PIPE_PIPE, - ACTIONS(398), 1, - anon_sym_DOT_DOT, - ACTIONS(400), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(402), 1, anon_sym_LPAREN, - ACTIONS(408), 1, - anon_sym_COMMA, - ACTIONS(410), 1, - anon_sym_RPAREN_GT, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 2, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(382), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(390), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(392), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [10643] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(175), 8, - anon_sym_DOT, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(210), 4, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(170), 18, + ACTIONS(206), 11, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -11064,110 +10669,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - [10678] = 19, - ACTIONS(372), 1, + [10245] = 11, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, - anon_sym_AMP, ACTIONS(386), 1, - anon_sym_PIPE, - ACTIONS(388), 1, - anon_sym_CARET, - ACTIONS(394), 1, - anon_sym_AMP_AMP, - ACTIONS(396), 1, - anon_sym_PIPE_PIPE, - ACTIONS(398), 1, - anon_sym_DOT_DOT, - ACTIONS(400), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(402), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(270), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(374), 2, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(390), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(392), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [10745] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(200), 8, - anon_sym_DASH, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(198), 18, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_DASH_GT, - [10780] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(204), 8, - anon_sym_DASH, - anon_sym_STAR, - anon_sym_SLASH, + ACTIONS(210), 4, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(202), 18, + ACTIONS(206), 9, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -11175,165 +10707,80 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - anon_sym_DASH_GT, - [10815] = 9, - ACTIONS(372), 1, + [10294] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, - anon_sym_STAR_STAR, - ACTIONS(380), 1, - anon_sym_SLASH_SLASH, - ACTIONS(402), 1, - anon_sym_LPAREN, - STATE(213), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(378), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(214), 5, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 14, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [10862] = 20, - ACTIONS(45), 1, - anon_sym_RBRACK, ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(404), 1, - anon_sym_COMMA, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [10931] = 10, - ACTIONS(372), 1, - anon_sym_COLON_COLON, - ACTIONS(376), 1, - anon_sym_STAR_STAR, - ACTIONS(380), 1, - anon_sym_SLASH_SLASH, - ACTIONS(402), 1, - anon_sym_LPAREN, - STATE(213), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(374), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(378), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(214), 5, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 12, + ACTIONS(396), 2, anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, + anon_sym_RPAREN, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [10980] = 11, - ACTIONS(372), 1, + [10355] = 12, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(402), 1, + ACTIONS(372), 1, + anon_sym_AMP, + ACTIONS(386), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 2, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(214), 5, - anon_sym_AMP, + ACTIONS(210), 3, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 10, + ACTIONS(206), 9, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_CARET, @@ -11343,40 +10790,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [11031] = 13, - ACTIONS(372), 1, + [10406] = 14, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, + ACTIONS(372), 1, anon_sym_AMP, - ACTIONS(388), 1, + ACTIONS(374), 1, + anon_sym_PIPE, + ACTIONS(376), 1, anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(386), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 2, + ACTIONS(210), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(214), 4, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 9, + ACTIONS(206), 8, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_GT_EQ, @@ -11385,342 +10831,302 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [11086] = 12, - ACTIONS(372), 1, + [10461] = 15, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, + ACTIONS(372), 1, anon_sym_AMP, - ACTIONS(402), 1, + ACTIONS(374), 1, + anon_sym_PIPE, + ACTIONS(376), 1, + anon_sym_CARET, + ACTIONS(386), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 2, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(214), 4, - anon_sym_PIPE, + ACTIONS(378), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 10, + ACTIONS(206), 4, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_CARET, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(380), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [11139] = 14, - ACTIONS(372), 1, + [10518] = 16, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, + ACTIONS(372), 1, anon_sym_AMP, - ACTIONS(386), 1, + ACTIONS(374), 1, anon_sym_PIPE, - ACTIONS(388), 1, + ACTIONS(376), 1, anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(382), 1, + anon_sym_AMP_AMP, + ACTIONS(386), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 2, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(214), 3, + ACTIONS(378), 2, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 9, + ACTIONS(206), 3, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_PIPE_PIPE, + ACTIONS(380), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [11196] = 16, - ACTIONS(214), 1, - anon_sym_DOT_DOT, - ACTIONS(372), 1, + [10577] = 17, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, + ACTIONS(372), 1, anon_sym_AMP, - ACTIONS(386), 1, + ACTIONS(374), 1, anon_sym_PIPE, - ACTIONS(388), 1, + ACTIONS(376), 1, anon_sym_CARET, - ACTIONS(402), 1, + ACTIONS(382), 1, + anon_sym_AMP_AMP, + ACTIONS(384), 1, + anon_sym_PIPE_PIPE, + ACTIONS(386), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 2, + ACTIONS(308), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(390), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(392), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(210), 5, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [11257] = 17, - ACTIONS(214), 1, - anon_sym_DOT_DOT, - ACTIONS(372), 1, - anon_sym_COLON_COLON, - ACTIONS(376), 1, - anon_sym_STAR_STAR, - ACTIONS(380), 1, - anon_sym_SLASH_SLASH, - ACTIONS(384), 1, - anon_sym_AMP, - ACTIONS(386), 1, - anon_sym_PIPE, - ACTIONS(388), 1, - anon_sym_CARET, - ACTIONS(394), 1, - anon_sym_AMP_AMP, - ACTIONS(402), 1, - anon_sym_LPAREN, - STATE(213), 1, - sym_dictionary_construction, + ACTIONS(378), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(380), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [10638] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 2, + ACTIONS(228), 7, anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(378), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(390), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 4, + ACTIONS(226), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - ACTIONS(392), 4, + anon_sym_COLON_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11320] = 18, - ACTIONS(214), 1, - anon_sym_DOT_DOT, - ACTIONS(372), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LPAREN, + anon_sym_DASH_GT, + [10671] = 17, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, + ACTIONS(372), 1, anon_sym_AMP, - ACTIONS(386), 1, + ACTIONS(374), 1, anon_sym_PIPE, - ACTIONS(388), 1, + ACTIONS(376), 1, anon_sym_CARET, - ACTIONS(394), 1, + ACTIONS(382), 1, anon_sym_AMP_AMP, - ACTIONS(396), 1, + ACTIONS(384), 1, anon_sym_PIPE_PIPE, - ACTIONS(402), 1, + ACTIONS(386), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 2, + ACTIONS(324), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(390), 2, + ACTIONS(378), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 3, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_DOT_DOT_EQ, - ACTIONS(392), 4, + ACTIONS(380), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11385] = 19, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_SLASH_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, - anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, - ACTIONS(258), 1, - anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - STATE(111), 1, - sym_dictionary_construction, + [10732] = 4, + ACTIONS(196), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(194), 7, anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(234), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(246), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(412), 2, + ACTIONS(192), 16, anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(248), 4, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11452] = 19, - ACTIONS(372), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LPAREN, + [10767] = 18, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(212), 1, + anon_sym_LPAREN, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(386), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(388), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(394), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(396), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, + ACTIONS(388), 1, + anon_sym_COMMA, ACTIONS(398), 1, - anon_sym_DOT_DOT, - ACTIONS(400), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(402), 1, - anon_sym_LPAREN, - STATE(213), 1, + anon_sym_RBRACK, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(278), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(374), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(390), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(392), 4, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11519] = 3, + [10830] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(228), 8, - anon_sym_DASH, + ACTIONS(190), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(226), 18, + ACTIONS(188), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, @@ -11733,326 +11139,334 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - anon_sym_DASH_GT, - [11554] = 19, - ACTIONS(372), 1, + [10863] = 18, + ACTIONS(94), 1, + anon_sym_RBRACK, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(212), 1, + anon_sym_LPAREN, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(386), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(388), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(394), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(396), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, - ACTIONS(398), 1, - anon_sym_DOT_DOT, - ACTIONS(400), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(402), 1, - anon_sym_LPAREN, - STATE(213), 1, + ACTIONS(388), 1, + anon_sym_COMMA, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(302), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(374), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(390), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(392), 4, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11621] = 19, - ACTIONS(372), 1, + [10926] = 18, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, + ACTIONS(372), 1, anon_sym_AMP, - ACTIONS(386), 1, + ACTIONS(374), 1, anon_sym_PIPE, - ACTIONS(388), 1, + ACTIONS(376), 1, anon_sym_CARET, - ACTIONS(394), 1, + ACTIONS(382), 1, anon_sym_AMP_AMP, - ACTIONS(396), 1, + ACTIONS(384), 1, anon_sym_PIPE_PIPE, - ACTIONS(398), 1, - anon_sym_DOT_DOT, + ACTIONS(386), 1, + anon_sym_LPAREN, ACTIONS(400), 1, - anon_sym_DOT_DOT_EQ, + anon_sym_COMMA, ACTIONS(402), 1, - anon_sym_LPAREN, - STATE(213), 1, + anon_sym_RPAREN_GT, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(320), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(374), 2, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(390), 2, + ACTIONS(378), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(392), 4, + ACTIONS(380), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11688] = 20, - ACTIONS(94), 1, - anon_sym_RBRACK, - ACTIONS(212), 1, + [10989] = 18, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(404), 1, + ACTIONS(388), 1, anon_sym_COMMA, - STATE(111), 1, + ACTIONS(404), 1, + anon_sym_RBRACK, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11757] = 20, - ACTIONS(212), 1, + [11052] = 18, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(372), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(374), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(376), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(382), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(384), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(404), 1, + ACTIONS(386), 1, + anon_sym_LPAREN, + ACTIONS(406), 1, anon_sym_COMMA, - ACTIONS(414), 1, - anon_sym_RBRACK, - STATE(111), 1, + ACTIONS(408), 1, + anon_sym_RPAREN_GT, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(378), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(380), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11826] = 20, - ACTIONS(372), 1, + [11115] = 18, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, + ACTIONS(372), 1, anon_sym_AMP, - ACTIONS(386), 1, + ACTIONS(374), 1, anon_sym_PIPE, - ACTIONS(388), 1, + ACTIONS(376), 1, anon_sym_CARET, - ACTIONS(394), 1, + ACTIONS(382), 1, anon_sym_AMP_AMP, - ACTIONS(396), 1, + ACTIONS(384), 1, anon_sym_PIPE_PIPE, - ACTIONS(398), 1, - anon_sym_DOT_DOT, - ACTIONS(400), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(402), 1, + ACTIONS(386), 1, anon_sym_LPAREN, - ACTIONS(416), 1, + ACTIONS(410), 1, anon_sym_COMMA, - ACTIONS(418), 1, + ACTIONS(412), 1, anon_sym_RPAREN_GT, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 2, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(366), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(370), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, ACTIONS(378), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(380), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [11178] = 17, + ACTIONS(208), 1, + anon_sym_COLON_COLON, + ACTIONS(212), 1, + anon_sym_LPAREN, + ACTIONS(250), 1, + anon_sym_STAR_STAR, + ACTIONS(254), 1, + anon_sym_SLASH_SLASH, + ACTIONS(258), 1, + anon_sym_AMP, + ACTIONS(260), 1, + anon_sym_PIPE, + ACTIONS(262), 1, + anon_sym_CARET, + ACTIONS(268), 1, + anon_sym_AMP_AMP, + ACTIONS(270), 1, + anon_sym_PIPE_PIPE, + STATE(100), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(248), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(390), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(392), 4, + ACTIONS(414), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11895] = 20, - ACTIONS(372), 1, + [11239] = 13, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, + ACTIONS(372), 1, anon_sym_AMP, - ACTIONS(386), 1, - anon_sym_PIPE, - ACTIONS(388), 1, + ACTIONS(376), 1, anon_sym_CARET, - ACTIONS(394), 1, - anon_sym_AMP_AMP, - ACTIONS(396), 1, - anon_sym_PIPE_PIPE, - ACTIONS(398), 1, - anon_sym_DOT_DOT, - ACTIONS(400), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(402), 1, + ACTIONS(386), 1, anon_sym_LPAREN, - ACTIONS(420), 1, - anon_sym_COMMA, - ACTIONS(422), 1, - anon_sym_RPAREN_GT, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 2, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(390), 2, + ACTIONS(210), 3, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(392), 4, + ACTIONS(206), 8, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11964] = 7, - ACTIONS(372), 1, - anon_sym_COLON_COLON, - ACTIONS(376), 1, - anon_sym_STAR_STAR, - ACTIONS(402), 1, - anon_sym_LPAREN, - STATE(213), 1, - sym_dictionary_construction, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + [11292] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 7, + ACTIONS(292), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 15, + ACTIONS(290), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -12063,20 +11477,62 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - [12007] = 3, + anon_sym_LPAREN, + [11324] = 17, + ACTIONS(208), 1, + anon_sym_COLON_COLON, + ACTIONS(212), 1, + anon_sym_LPAREN, + ACTIONS(250), 1, + anon_sym_STAR_STAR, + ACTIONS(254), 1, + anon_sym_SLASH_SLASH, + ACTIONS(258), 1, + anon_sym_AMP, + ACTIONS(260), 1, + anon_sym_PIPE, + ACTIONS(262), 1, + anon_sym_CARET, + ACTIONS(268), 1, + anon_sym_AMP_AMP, + ACTIONS(270), 1, + anon_sym_PIPE_PIPE, + ACTIONS(416), 1, + anon_sym_RPAREN, + STATE(100), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 7, + ACTIONS(248), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(252), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(256), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(264), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(266), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [11384] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(284), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(294), 18, + ACTIONS(282), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12093,81 +11549,69 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [12041] = 19, - ACTIONS(212), 1, + [11416] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(426), 1, + ACTIONS(304), 1, + anon_sym_then, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(430), 1, + ACTIONS(424), 1, anon_sym_SLASH_SLASH, - ACTIONS(434), 1, + ACTIONS(428), 1, anon_sym_AMP, - ACTIONS(436), 1, + ACTIONS(430), 1, anon_sym_PIPE, - ACTIONS(438), 1, + ACTIONS(432), 1, anon_sym_CARET, - ACTIONS(444), 1, + ACTIONS(438), 1, anon_sym_AMP_AMP, - ACTIONS(446), 1, + ACTIONS(440), 1, anon_sym_PIPE_PIPE, - ACTIONS(448), 1, - anon_sym_DOT_DOT, - ACTIONS(450), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(452), 1, - anon_sym_then, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(424), 2, + ACTIONS(418), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(422), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(432), 2, + ACTIONS(426), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(440), 2, + ACTIONS(434), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(442), 4, + ACTIONS(436), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12107] = 9, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(426), 1, - anon_sym_STAR_STAR, - ACTIONS(430), 1, - anon_sym_SLASH_SLASH, - STATE(111), 1, - sym_dictionary_construction, + [11476] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(428), 2, + ACTIONS(236), 6, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(214), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 13, + ACTIONS(234), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -12177,21 +11621,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, - [12153] = 3, + anon_sym_LPAREN, + [11508] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 7, + ACTIONS(244), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(290), 18, + ACTIONS(242), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12208,31 +11650,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - [12187] = 7, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(426), 1, - anon_sym_STAR_STAR, - STATE(111), 1, - sym_dictionary_construction, + [11540] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 7, + ACTIONS(276), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 14, + ACTIONS(274), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -12243,35 +11679,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, - [12229] = 10, - ACTIONS(212), 1, + anon_sym_LPAREN, + [11572] = 9, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(426), 1, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(430), 1, + ACTIONS(424), 1, anon_sym_SLASH_SLASH, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(424), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(422), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(214), 5, + ACTIONS(210), 4, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 11, + ACTIONS(206), 12, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_CARET, @@ -12281,38 +11714,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, - [12277] = 11, - ACTIONS(212), 1, + [11616] = 7, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(426), 1, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(430), 1, - anon_sym_SLASH_SLASH, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(424), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(210), 6, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(432), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(214), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 9, + ACTIONS(206), 13, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -12320,80 +11747,72 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, - [12327] = 13, - ACTIONS(212), 1, + [11656] = 10, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(426), 1, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(430), 1, + ACTIONS(424), 1, anon_sym_SLASH_SLASH, - ACTIONS(434), 1, - anon_sym_AMP, - ACTIONS(438), 1, - anon_sym_CARET, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(424), 2, + ACTIONS(418), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(422), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(432), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(214), 4, + ACTIONS(210), 4, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 8, + ACTIONS(206), 10, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, - [12381] = 12, - ACTIONS(212), 1, + [11702] = 11, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(426), 1, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(430), 1, + ACTIONS(424), 1, anon_sym_SLASH_SLASH, - ACTIONS(434), 1, - anon_sym_AMP, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(424), 2, + ACTIONS(418), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(422), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(432), 2, + ACTIONS(426), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(214), 4, + ACTIONS(210), 4, + anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 9, + ACTIONS(206), 8, anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, @@ -12401,307 +11820,219 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, - [12433] = 14, - ACTIONS(212), 1, + [11750] = 13, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(426), 1, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(430), 1, + ACTIONS(424), 1, anon_sym_SLASH_SLASH, - ACTIONS(434), 1, + ACTIONS(428), 1, anon_sym_AMP, - ACTIONS(436), 1, - anon_sym_PIPE, - ACTIONS(438), 1, + ACTIONS(432), 1, anon_sym_CARET, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(424), 2, + ACTIONS(418), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(422), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(432), 2, + ACTIONS(426), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(214), 3, + ACTIONS(210), 3, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(210), 8, + ACTIONS(206), 7, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, - [12489] = 16, - ACTIONS(212), 1, + [11802] = 12, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(214), 1, - anon_sym_DOT_DOT, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(426), 1, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(430), 1, + ACTIONS(424), 1, anon_sym_SLASH_SLASH, - ACTIONS(434), 1, + ACTIONS(428), 1, anon_sym_AMP, - ACTIONS(436), 1, - anon_sym_PIPE, - ACTIONS(438), 1, - anon_sym_CARET, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(424), 2, + ACTIONS(418), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(422), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(432), 2, + ACTIONS(426), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(440), 2, + ACTIONS(210), 3, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 4, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_then, - ACTIONS(442), 4, + ACTIONS(206), 8, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12549] = 17, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(214), 1, - anon_sym_DOT_DOT, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(426), 1, - anon_sym_STAR_STAR, - ACTIONS(430), 1, - anon_sym_SLASH_SLASH, - ACTIONS(434), 1, - anon_sym_AMP, - ACTIONS(436), 1, - anon_sym_PIPE, - ACTIONS(438), 1, - anon_sym_CARET, - ACTIONS(444), 1, anon_sym_AMP_AMP, - STATE(111), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(424), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(428), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(432), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(440), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(210), 3, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, - ACTIONS(442), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [12611] = 18, - ACTIONS(212), 1, + [11852] = 14, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(214), 1, - anon_sym_DOT_DOT, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(426), 1, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(430), 1, + ACTIONS(424), 1, anon_sym_SLASH_SLASH, - ACTIONS(434), 1, + ACTIONS(428), 1, anon_sym_AMP, - ACTIONS(436), 1, + ACTIONS(430), 1, anon_sym_PIPE, - ACTIONS(438), 1, + ACTIONS(432), 1, anon_sym_CARET, - ACTIONS(444), 1, - anon_sym_AMP_AMP, - ACTIONS(446), 1, - anon_sym_PIPE_PIPE, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(210), 2, - anon_sym_DOT_DOT_EQ, - anon_sym_then, - ACTIONS(424), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(428), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(432), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(440), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(442), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [12675] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(194), 7, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(192), 18, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(418), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(422), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(426), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(206), 7, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - [12709] = 19, - ACTIONS(212), 1, + anon_sym_then, + [11906] = 15, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(278), 1, - anon_sym_then, - ACTIONS(426), 1, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(430), 1, + ACTIONS(424), 1, anon_sym_SLASH_SLASH, - ACTIONS(434), 1, + ACTIONS(428), 1, anon_sym_AMP, - ACTIONS(436), 1, + ACTIONS(430), 1, anon_sym_PIPE, - ACTIONS(438), 1, + ACTIONS(432), 1, anon_sym_CARET, - ACTIONS(444), 1, - anon_sym_AMP_AMP, - ACTIONS(446), 1, - anon_sym_PIPE_PIPE, - ACTIONS(448), 1, - anon_sym_DOT_DOT, - ACTIONS(450), 1, - anon_sym_DOT_DOT_EQ, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(424), 2, + ACTIONS(418), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(422), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(432), 2, + ACTIONS(426), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(440), 2, + ACTIONS(434), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(442), 4, + ACTIONS(206), 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_then, + ACTIONS(436), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12775] = 3, + [11962] = 16, + ACTIONS(208), 1, + anon_sym_COLON_COLON, + ACTIONS(212), 1, + anon_sym_LPAREN, + ACTIONS(420), 1, + anon_sym_STAR_STAR, + ACTIONS(424), 1, + anon_sym_SLASH_SLASH, + ACTIONS(428), 1, + anon_sym_AMP, + ACTIONS(430), 1, + anon_sym_PIPE, + ACTIONS(432), 1, + anon_sym_CARET, + ACTIONS(438), 1, + anon_sym_AMP_AMP, + STATE(100), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(288), 7, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(286), 18, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(206), 2, + anon_sym_PIPE_PIPE, + anon_sym_then, + ACTIONS(418), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(422), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(426), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(434), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(436), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - [12809] = 3, + [12020] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(300), 7, + ACTIONS(194), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(298), 18, + ACTIONS(192), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12718,68 +12049,62 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [12843] = 19, - ACTIONS(212), 1, + [12052] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(302), 1, + ACTIONS(308), 1, anon_sym_then, - ACTIONS(426), 1, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(430), 1, + ACTIONS(424), 1, anon_sym_SLASH_SLASH, - ACTIONS(434), 1, + ACTIONS(428), 1, anon_sym_AMP, - ACTIONS(436), 1, + ACTIONS(430), 1, anon_sym_PIPE, - ACTIONS(438), 1, + ACTIONS(432), 1, anon_sym_CARET, - ACTIONS(444), 1, + ACTIONS(438), 1, anon_sym_AMP_AMP, - ACTIONS(446), 1, + ACTIONS(440), 1, anon_sym_PIPE_PIPE, - ACTIONS(448), 1, - anon_sym_DOT_DOT, - ACTIONS(450), 1, - anon_sym_DOT_DOT_EQ, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(424), 2, + ACTIONS(418), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(422), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(432), 2, + ACTIONS(426), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(440), 2, + ACTIONS(434), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(442), 4, + ACTIONS(436), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12909] = 3, + [12112] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 7, + ACTIONS(314), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(316), 18, + ACTIONS(312), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12796,21 +12121,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [12943] = 3, + [12144] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 7, + ACTIONS(318), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(312), 18, + ACTIONS(316), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12827,21 +12150,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [12977] = 3, + [12176] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(326), 7, + ACTIONS(322), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(324), 18, + ACTIONS(320), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12858,68 +12179,62 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13011] = 19, - ACTIONS(212), 1, + [12208] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(320), 1, + ACTIONS(324), 1, anon_sym_then, - ACTIONS(426), 1, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(430), 1, + ACTIONS(424), 1, anon_sym_SLASH_SLASH, - ACTIONS(434), 1, + ACTIONS(428), 1, anon_sym_AMP, - ACTIONS(436), 1, + ACTIONS(430), 1, anon_sym_PIPE, - ACTIONS(438), 1, + ACTIONS(432), 1, anon_sym_CARET, - ACTIONS(444), 1, + ACTIONS(438), 1, anon_sym_AMP_AMP, - ACTIONS(446), 1, + ACTIONS(440), 1, anon_sym_PIPE_PIPE, - ACTIONS(448), 1, - anon_sym_DOT_DOT, - ACTIONS(450), 1, - anon_sym_DOT_DOT_EQ, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(424), 2, + ACTIONS(418), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(422), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(432), 2, + ACTIONS(426), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(440), 2, + ACTIONS(434), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(442), 4, + ACTIONS(436), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13077] = 3, + [12268] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(334), 7, + ACTIONS(334), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(332), 18, + ACTIONS(332), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12936,21 +12251,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13111] = 3, + [12300] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(338), 7, + ACTIONS(296), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(336), 18, + ACTIONS(294), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12967,68 +12280,105 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13145] = 19, + [12332] = 17, + ACTIONS(208), 1, + anon_sym_COLON_COLON, ACTIONS(212), 1, + anon_sym_LPAREN, + ACTIONS(420), 1, + anon_sym_STAR_STAR, + ACTIONS(424), 1, + anon_sym_SLASH_SLASH, + ACTIONS(428), 1, + anon_sym_AMP, + ACTIONS(430), 1, + anon_sym_PIPE, + ACTIONS(432), 1, + anon_sym_CARET, + ACTIONS(438), 1, + anon_sym_AMP_AMP, + ACTIONS(440), 1, + anon_sym_PIPE_PIPE, + ACTIONS(442), 1, + anon_sym_then, + STATE(100), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(418), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(422), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(426), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(434), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(436), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [12392] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(246), 1, + anon_sym_then, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(424), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(428), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(430), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(432), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(438), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(440), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(454), 1, - anon_sym_COMMA, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(418), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(422), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(426), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(434), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(436), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13211] = 3, + [12452] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(208), 7, + ACTIONS(288), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(206), 18, + ACTIONS(286), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13045,21 +12395,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13245] = 3, + [12484] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(224), 7, + ACTIONS(224), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(222), 18, + ACTIONS(222), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13076,21 +12424,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13279] = 3, + [12516] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(190), 7, + ACTIONS(216), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(188), 18, + ACTIONS(214), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13107,287 +12453,177 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13313] = 19, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(426), 1, - anon_sym_STAR_STAR, - ACTIONS(430), 1, - anon_sym_SLASH_SLASH, - ACTIONS(434), 1, - anon_sym_AMP, - ACTIONS(436), 1, - anon_sym_PIPE, - ACTIONS(438), 1, - anon_sym_CARET, - ACTIONS(444), 1, - anon_sym_AMP_AMP, - ACTIONS(446), 1, - anon_sym_PIPE_PIPE, - ACTIONS(448), 1, - anon_sym_DOT_DOT, - ACTIONS(450), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(456), 1, - anon_sym_then, - STATE(111), 1, - sym_dictionary_construction, + [12548] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(424), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(220), 6, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(432), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(440), 2, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(442), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [13379] = 19, - ACTIONS(212), 1, + ACTIONS(218), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_SLASH_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, - anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, - ACTIONS(258), 1, - anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(458), 1, - anon_sym_else, - STATE(111), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(238), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(248), 4, + anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13445] = 19, - ACTIONS(212), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LPAREN, + [12580] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(460), 1, - ts_builtin_sym_end, - STATE(111), 1, + ACTIONS(444), 1, + anon_sym_COMMA, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13511] = 19, - ACTIONS(212), 1, + [12640] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(462), 1, - anon_sym_SEMI, - STATE(111), 1, + ACTIONS(446), 1, + ts_builtin_sym_end, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13577] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(308), 7, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(306), 18, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + [12700] = 17, + ACTIONS(360), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(364), 1, anon_sym_STAR_STAR, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - [13611] = 19, ACTIONS(372), 1, - anon_sym_COLON_COLON, - ACTIONS(376), 1, - anon_sym_STAR_STAR, - ACTIONS(380), 1, - anon_sym_SLASH_SLASH, - ACTIONS(384), 1, anon_sym_AMP, - ACTIONS(386), 1, + ACTIONS(374), 1, anon_sym_PIPE, - ACTIONS(388), 1, + ACTIONS(376), 1, anon_sym_CARET, - ACTIONS(394), 1, + ACTIONS(382), 1, anon_sym_AMP_AMP, - ACTIONS(396), 1, + ACTIONS(384), 1, anon_sym_PIPE_PIPE, - ACTIONS(398), 1, - anon_sym_DOT_DOT, - ACTIONS(400), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(402), 1, + ACTIONS(386), 1, anon_sym_LPAREN, - ACTIONS(464), 1, + ACTIONS(448), 1, anon_sym_RPAREN_GT, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 2, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(390), 2, + ACTIONS(378), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(392), 4, + ACTIONS(380), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13677] = 3, + [12760] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(276), 7, + ACTIONS(232), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(274), 18, + ACTIONS(230), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13404,68 +12640,62 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13711] = 19, - ACTIONS(212), 1, + [12792] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(270), 1, - anon_sym_then, - ACTIONS(426), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(430), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(434), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(436), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(438), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(444), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(446), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, - ACTIONS(448), 1, - anon_sym_DOT_DOT, - ACTIONS(450), 1, - anon_sym_DOT_DOT_EQ, - STATE(111), 1, + ACTIONS(388), 1, + anon_sym_COMMA, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(424), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(432), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(440), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(442), 4, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13777] = 3, + [12852] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(330), 7, + ACTIONS(280), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(328), 18, + ACTIONS(278), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13482,193 +12712,148 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [13811] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(268), 7, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(266), 18, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + [12884] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, - anon_sym_LPAREN, - [13845] = 19, ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(424), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(428), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(430), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(432), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(438), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(440), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(466), 1, - anon_sym_RPAREN, - STATE(111), 1, + ACTIONS(450), 1, + anon_sym_then, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(418), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(422), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(426), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(434), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(436), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13911] = 19, - ACTIONS(212), 1, + [12944] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(254), 1, + ACTIONS(298), 1, anon_sym_then, - ACTIONS(426), 1, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(430), 1, + ACTIONS(424), 1, anon_sym_SLASH_SLASH, - ACTIONS(434), 1, + ACTIONS(428), 1, anon_sym_AMP, - ACTIONS(436), 1, + ACTIONS(430), 1, anon_sym_PIPE, - ACTIONS(438), 1, + ACTIONS(432), 1, anon_sym_CARET, - ACTIONS(444), 1, + ACTIONS(438), 1, anon_sym_AMP_AMP, - ACTIONS(446), 1, + ACTIONS(440), 1, anon_sym_PIPE_PIPE, - ACTIONS(448), 1, - anon_sym_DOT_DOT, - ACTIONS(450), 1, - anon_sym_DOT_DOT_EQ, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(424), 2, + ACTIONS(418), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(422), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(432), 2, + ACTIONS(426), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(440), 2, + ACTIONS(434), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(442), 4, + ACTIONS(436), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13977] = 19, - ACTIONS(212), 1, + [13004] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(468), 1, + ACTIONS(452), 1, anon_sym_RPAREN, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14043] = 3, + [13064] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(284), 7, + ACTIONS(330), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(282), 18, + ACTIONS(328), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13685,156 +12870,143 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [14077] = 19, - ACTIONS(212), 1, + [13096] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(470), 1, + ACTIONS(454), 1, anon_sym_else, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14143] = 19, - ACTIONS(372), 1, + [13156] = 17, + ACTIONS(360), 1, anon_sym_COLON_COLON, - ACTIONS(376), 1, + ACTIONS(364), 1, anon_sym_STAR_STAR, - ACTIONS(380), 1, + ACTIONS(368), 1, anon_sym_SLASH_SLASH, - ACTIONS(384), 1, + ACTIONS(372), 1, anon_sym_AMP, - ACTIONS(386), 1, + ACTIONS(374), 1, anon_sym_PIPE, - ACTIONS(388), 1, + ACTIONS(376), 1, anon_sym_CARET, - ACTIONS(394), 1, + ACTIONS(382), 1, anon_sym_AMP_AMP, - ACTIONS(396), 1, + ACTIONS(384), 1, anon_sym_PIPE_PIPE, - ACTIONS(398), 1, - anon_sym_DOT_DOT, - ACTIONS(400), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(402), 1, + ACTIONS(386), 1, anon_sym_LPAREN, - ACTIONS(472), 1, + ACTIONS(456), 1, anon_sym_RPAREN_GT, - STATE(213), 1, + STATE(176), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(374), 2, + ACTIONS(362), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(366), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(382), 2, + ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(390), 2, + ACTIONS(378), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(392), 4, + ACTIONS(380), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14209] = 19, - ACTIONS(212), 1, + [13216] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(474), 1, + ACTIONS(458), 1, anon_sym_else, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14275] = 4, - ACTIONS(476), 1, + [13276] = 4, + ACTIONS(460), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(308), 8, + ACTIONS(232), 7, anon_sym_DASH, anon_sym_STAR, anon_sym_SLASH, @@ -13842,8 +13014,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(306), 16, + ACTIONS(230), 15, anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -13857,163 +13028,192 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_then, anon_sym_LPAREN, - [14311] = 19, - ACTIONS(212), 1, + [13310] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_DOT_DOT, - ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(404), 1, - anon_sym_COMMA, - STATE(111), 1, + ACTIONS(462), 1, + anon_sym_else, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14377] = 19, - ACTIONS(212), 1, + [13370] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(250), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(254), 1, anon_sym_SLASH_SLASH, - ACTIONS(240), 1, + ACTIONS(258), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(268), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(270), 1, anon_sym_PIPE_PIPE, + ACTIONS(464), 1, + anon_sym_SEMI, + STATE(100), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(248), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(252), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(256), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(264), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(266), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13430] = 17, + ACTIONS(208), 1, + anon_sym_COLON_COLON, + ACTIONS(212), 1, + anon_sym_LPAREN, + ACTIONS(250), 1, + anon_sym_STAR_STAR, + ACTIONS(254), 1, + anon_sym_SLASH_SLASH, + ACTIONS(258), 1, + anon_sym_AMP, ACTIONS(260), 1, - anon_sym_DOT_DOT, + anon_sym_PIPE, ACTIONS(262), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(478), 1, + anon_sym_CARET, + ACTIONS(268), 1, + anon_sym_AMP_AMP, + ACTIONS(270), 1, + anon_sym_PIPE_PIPE, + ACTIONS(466), 1, anon_sym_COMMA, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(248), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(234), 2, + ACTIONS(252), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(238), 2, + ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(264), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14443] = 19, - ACTIONS(212), 1, + [13490] = 17, + ACTIONS(208), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(212), 1, anon_sym_LPAREN, - ACTIONS(426), 1, + ACTIONS(420), 1, anon_sym_STAR_STAR, - ACTIONS(430), 1, + ACTIONS(424), 1, anon_sym_SLASH_SLASH, - ACTIONS(434), 1, + ACTIONS(428), 1, anon_sym_AMP, - ACTIONS(436), 1, + ACTIONS(430), 1, anon_sym_PIPE, - ACTIONS(438), 1, + ACTIONS(432), 1, anon_sym_CARET, - ACTIONS(444), 1, + ACTIONS(438), 1, anon_sym_AMP_AMP, - ACTIONS(446), 1, + ACTIONS(440), 1, anon_sym_PIPE_PIPE, - ACTIONS(448), 1, - anon_sym_DOT_DOT, - ACTIONS(450), 1, - anon_sym_DOT_DOT_EQ, - ACTIONS(480), 1, + ACTIONS(468), 1, anon_sym_then, - STATE(111), 1, + STATE(100), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(424), 2, + ACTIONS(418), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(422), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(432), 2, + ACTIONS(426), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(440), 2, + ACTIONS(434), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(442), 4, + ACTIONS(436), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14509] = 3, + [13550] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(252), 7, + ACTIONS(240), 6, anon_sym_STAR, anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - anon_sym_DOT_DOT, - ACTIONS(250), 18, + ACTIONS(238), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -14030,126 +13230,125 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_DOT_DOT_EQ, anon_sym_LPAREN, - [14543] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [13582] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(470), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(472), 1, + aux_sym_base_ten_token1, + ACTIONS(476), 1, anon_sym_LPAREN, - STATE(76), 1, + STATE(246), 1, sym__float, - STATE(77), 1, + STATE(247), 1, sym_number, - STATE(271), 1, + STATE(255), 1, sym_formula_expression, - STATE(318), 1, + STATE(297), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(474), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(250), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14596] = 14, + [13635] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(470), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(476), 1, anon_sym_LPAREN, - ACTIONS(488), 1, - aux_sym_base_ten_token1, - STATE(252), 1, + STATE(73), 1, sym__float, - STATE(253), 1, + STATE(74), 1, sym_number, - STATE(263), 1, + STATE(266), 1, sym_formula_expression, - STATE(317), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(490), 2, + ACTIONS(478), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(250), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14649] = 14, + [13688] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(470), 1, sym_identifier, - ACTIONS(486), 1, - anon_sym_LPAREN, - ACTIONS(488), 1, + ACTIONS(472), 1, aux_sym_base_ten_token1, - STATE(252), 1, + ACTIONS(476), 1, + anon_sym_LPAREN, + STATE(246), 1, sym__float, - STATE(253), 1, + STATE(247), 1, sym_number, - STATE(264), 1, + STATE(256), 1, sym_formula_expression, - STATE(317), 1, + STATE(297), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(490), 2, + ACTIONS(474), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(250), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14702] = 14, + [13741] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -14158,37 +13357,37 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(470), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(476), 1, anon_sym_LPAREN, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(268), 1, + STATE(263), 1, sym_formula_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(478), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(250), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14755] = 14, + [13794] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -14197,37 +13396,37 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(470), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(476), 1, anon_sym_LPAREN, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(267), 1, + STATE(252), 1, sym_formula_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(478), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(250), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14808] = 14, + [13847] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -14236,76 +13435,76 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(470), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(476), 1, anon_sym_LPAREN, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(258), 1, + STATE(261), 1, sym_formula_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(478), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(250), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14861] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [13900] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(470), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(472), 1, + aux_sym_base_ten_token1, + ACTIONS(476), 1, anon_sym_LPAREN, - STATE(76), 1, + STATE(246), 1, sym__float, - STATE(77), 1, + STATE(247), 1, sym_number, - STATE(270), 1, + STATE(258), 1, sym_formula_expression, - STATE(318), 1, + STATE(297), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(474), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(250), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14914] = 14, + [13953] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -14314,240 +13513,240 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(470), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(476), 1, anon_sym_LPAREN, - STATE(76), 1, + STATE(73), 1, sym__float, - STATE(77), 1, + STATE(74), 1, sym_number, - STATE(269), 1, + STATE(268), 1, sym_formula_expression, - STATE(318), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(478), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(250), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14967] = 14, + [14006] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(470), 1, sym_identifier, - ACTIONS(486), 1, - anon_sym_LPAREN, - ACTIONS(488), 1, + ACTIONS(472), 1, aux_sym_base_ten_token1, - STATE(252), 1, + ACTIONS(476), 1, + anon_sym_LPAREN, + STATE(246), 1, sym__float, - STATE(253), 1, + STATE(247), 1, sym_number, - STATE(258), 1, + STATE(252), 1, sym_formula_expression, - STATE(317), 1, + STATE(297), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(490), 2, + ACTIONS(474), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(250), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15020] = 14, + [14059] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(470), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(476), 1, anon_sym_LPAREN, - ACTIONS(488), 1, - aux_sym_base_ten_token1, - STATE(252), 1, + STATE(73), 1, sym__float, - STATE(253), 1, + STATE(74), 1, sym_number, - STATE(265), 1, + STATE(262), 1, sym_formula_expression, - STATE(317), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(490), 2, + ACTIONS(478), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(250), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15073] = 14, + [14112] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(470), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(476), 1, anon_sym_LPAREN, - ACTIONS(488), 1, - aux_sym_base_ten_token1, - STATE(252), 1, + STATE(73), 1, sym__float, - STATE(253), 1, + STATE(74), 1, sym_number, - STATE(261), 1, + STATE(269), 1, sym_formula_expression, - STATE(317), 1, + STATE(312), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(490), 2, + ACTIONS(478), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(250), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15126] = 14, + [14165] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(470), 1, sym_identifier, - ACTIONS(486), 1, - anon_sym_LPAREN, - ACTIONS(488), 1, + ACTIONS(472), 1, aux_sym_base_ten_token1, - STATE(252), 1, + ACTIONS(476), 1, + anon_sym_LPAREN, + STATE(246), 1, sym__float, - STATE(253), 1, + STATE(247), 1, sym_number, - STATE(266), 1, + STATE(253), 1, sym_formula_expression, - STATE(317), 1, + STATE(297), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(490), 2, + ACTIONS(474), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(250), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15179] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [14218] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(470), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(472), 1, + aux_sym_base_ten_token1, + ACTIONS(476), 1, anon_sym_LPAREN, - STATE(76), 1, + STATE(246), 1, sym__float, - STATE(77), 1, + STATE(247), 1, sym_number, - STATE(274), 1, + STATE(257), 1, sym_formula_expression, - STATE(318), 1, + STATE(297), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(474), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(311), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(250), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15232] = 5, - ACTIONS(492), 1, + [14271] = 5, + ACTIONS(480), 1, anon_sym_DOT, - STATE(243), 1, + STATE(237), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 7, + ACTIONS(158), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -14555,7 +13754,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(184), 11, + ACTIONS(156), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -14567,15 +13766,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15265] = 5, - ACTIONS(492), 1, + [14304] = 5, + ACTIONS(480), 1, anon_sym_DOT, - STATE(244), 1, + STATE(238), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 7, + ACTIONS(154), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -14583,7 +13782,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(160), 11, + ACTIONS(150), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -14595,15 +13794,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15298] = 5, - ACTIONS(494), 1, + [14337] = 5, + ACTIONS(482), 1, anon_sym_DOT, - STATE(244), 1, + STATE(238), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(175), 7, + ACTIONS(169), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -14611,7 +13810,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(170), 11, + ACTIONS(164), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -14623,11 +13822,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15331] = 3, + [14370] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(497), 7, + ACTIONS(485), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -14648,11 +13847,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LT_LT_LT, - [15359] = 3, + [14398] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(175), 7, + ACTIONS(169), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -14660,7 +13859,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(170), 12, + ACTIONS(164), 12, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -14673,11 +13872,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15387] = 3, + [14426] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(499), 7, + ACTIONS(487), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -14697,11 +13896,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15414] = 3, + [14453] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(200), 7, + ACTIONS(204), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -14709,7 +13908,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(198), 11, + ACTIONS(202), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -14721,11 +13920,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15441] = 3, + [14480] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 7, + ACTIONS(228), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -14733,7 +13932,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(202), 11, + ACTIONS(226), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -14745,11 +13944,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15468] = 3, + [14507] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(228), 7, + ACTIONS(200), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -14757,7 +13956,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(226), 11, + ACTIONS(198), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -14769,7 +13968,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [15495] = 4, + [14534] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14792,13 +13991,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15522] = 5, + [14561] = 5, STATE(259), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(501), 2, + ACTIONS(489), 2, sym_identifier, sym_unit_quote, ACTIONS(142), 3, @@ -14814,8 +14013,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15549] = 4, - ACTIONS(503), 1, + [14588] = 4, + ACTIONS(491), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, @@ -14835,15 +14034,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15574] = 3, + [14613] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(132), 3, + ACTIONS(162), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(130), 10, + ACTIONS(160), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -14854,15 +14053,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15596] = 3, + [14635] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(507), 3, + ACTIONS(132), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(505), 10, + ACTIONS(130), 10, + sym_identifier, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14871,19 +14072,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [15618] = 3, + [14657] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 3, + ACTIONS(495), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(156), 10, - sym_identifier, - sym_unit_quote, + ACTIONS(493), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14892,15 +14089,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15640] = 3, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [14679] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(511), 3, + ACTIONS(499), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(509), 10, + ACTIONS(497), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14911,15 +14110,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [15662] = 3, + [14701] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(515), 3, + ACTIONS(503), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(513), 10, + ACTIONS(501), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14930,32 +14129,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [15684] = 3, + [14723] = 7, + ACTIONS(507), 1, + anon_sym_STAR_STAR, + ACTIONS(509), 1, + anon_sym_STAR, + ACTIONS(511), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(190), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(188), 8, + ACTIONS(505), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(513), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(515), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15704] = 3, + [14751] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(208), 3, + ACTIONS(216), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 8, + ACTIONS(214), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14964,361 +14167,335 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15724] = 7, - ACTIONS(519), 1, + [14771] = 4, + ACTIONS(507), 1, anon_sym_STAR_STAR, - ACTIONS(521), 1, - anon_sym_STAR, - ACTIONS(523), 1, - anon_sym_SLASH, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(517), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(525), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(527), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15752] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(224), 3, + ACTIONS(503), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 8, + ACTIONS(501), 7, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15772] = 7, - ACTIONS(519), 1, + [14793] = 7, + ACTIONS(507), 1, anon_sym_STAR_STAR, - ACTIONS(521), 1, + ACTIONS(509), 1, anon_sym_STAR, - ACTIONS(523), 1, + ACTIONS(511), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(517), 2, + ACTIONS(505), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(529), 2, + ACTIONS(517), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(531), 4, + ACTIONS(519), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15800] = 7, - ACTIONS(519), 1, + [14821] = 7, + ACTIONS(507), 1, anon_sym_STAR_STAR, - ACTIONS(521), 1, + ACTIONS(509), 1, anon_sym_STAR, - ACTIONS(523), 1, + ACTIONS(511), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(517), 2, + ACTIONS(505), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(533), 2, + ACTIONS(521), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(535), 4, + ACTIONS(523), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15828] = 6, - ACTIONS(519), 1, + [14849] = 6, + ACTIONS(507), 1, anon_sym_STAR_STAR, - ACTIONS(521), 1, + ACTIONS(509), 1, anon_sym_STAR, - ACTIONS(523), 1, + ACTIONS(511), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(515), 2, + ACTIONS(503), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(513), 6, + ACTIONS(501), 6, anon_sym_DASH, anon_sym_PLUS, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15854] = 4, - ACTIONS(519), 1, + [14875] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(220), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(218), 8, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14895] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(515), 3, + ACTIONS(224), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(513), 7, + ACTIONS(222), 8, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15876] = 5, - ACTIONS(537), 1, + [14915] = 5, + ACTIONS(525), 1, anon_sym_STAR_STAR, - ACTIONS(539), 1, + ACTIONS(527), 1, anon_sym_STAR, - ACTIONS(541), 1, + ACTIONS(529), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(513), 4, + ACTIONS(501), 4, anon_sym_DASH, anon_sym_PLUS, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [15896] = 6, - ACTIONS(537), 1, + [14935] = 6, + ACTIONS(525), 1, anon_sym_STAR_STAR, - ACTIONS(539), 1, + ACTIONS(527), 1, anon_sym_STAR, - ACTIONS(541), 1, + ACTIONS(529), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(535), 2, + ACTIONS(519), 2, anon_sym_RPAREN, anon_sym_GT_GT_GT, - ACTIONS(543), 2, + ACTIONS(531), 2, anon_sym_DASH, anon_sym_PLUS, - [15918] = 4, - ACTIONS(515), 1, + [14957] = 4, + ACTIONS(503), 1, anon_sym_STAR, - ACTIONS(537), 1, + ACTIONS(525), 1, anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(513), 5, + ACTIONS(501), 5, anon_sym_DASH, anon_sym_PLUS, anon_sym_SLASH, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [15936] = 6, - ACTIONS(537), 1, - anon_sym_STAR_STAR, - ACTIONS(539), 1, - anon_sym_STAR, - ACTIONS(541), 1, - anon_sym_SLASH, - ACTIONS(545), 1, - anon_sym_GT_GT_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(543), 2, - anon_sym_DASH, - anon_sym_PLUS, - [15957] = 6, - ACTIONS(537), 1, - anon_sym_STAR_STAR, - ACTIONS(539), 1, - anon_sym_STAR, - ACTIONS(541), 1, - anon_sym_SLASH, - ACTIONS(547), 1, - anon_sym_RPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(543), 2, - anon_sym_DASH, - anon_sym_PLUS, - [15978] = 7, + [14975] = 7, ACTIONS(39), 1, sym_varadic_dots, - ACTIONS(549), 1, + ACTIONS(533), 1, sym_identifier, - ACTIONS(551), 1, + ACTIONS(535), 1, anon_sym_RPAREN, - STATE(277), 1, + STATE(271), 1, aux_sym_struct_definition_repeat1, - STATE(316), 1, + STATE(301), 1, sym_struct_member, - STATE(322), 1, + STATE(319), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16001] = 7, + [14998] = 7, ACTIONS(39), 1, sym_varadic_dots, - ACTIONS(549), 1, + ACTIONS(533), 1, sym_identifier, - ACTIONS(553), 1, + ACTIONS(537), 1, anon_sym_RPAREN, - STATE(277), 1, + STATE(271), 1, aux_sym_struct_definition_repeat1, - STATE(316), 1, + STATE(301), 1, sym_struct_member, - STATE(332), 1, + STATE(325), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16024] = 6, - ACTIONS(537), 1, + [15021] = 6, + ACTIONS(525), 1, anon_sym_STAR_STAR, - ACTIONS(539), 1, + ACTIONS(527), 1, anon_sym_STAR, - ACTIONS(541), 1, + ACTIONS(529), 1, anon_sym_SLASH, - ACTIONS(555), 1, - anon_sym_GT_GT_GT, + ACTIONS(539), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(543), 2, + ACTIONS(531), 2, anon_sym_DASH, anon_sym_PLUS, - [16045] = 7, + [15042] = 7, ACTIONS(39), 1, sym_varadic_dots, - ACTIONS(549), 1, + ACTIONS(533), 1, sym_identifier, - ACTIONS(557), 1, + ACTIONS(541), 1, anon_sym_RPAREN, - STATE(277), 1, + STATE(265), 1, aux_sym_struct_definition_repeat1, - STATE(316), 1, + STATE(301), 1, sym_struct_member, - STATE(339), 1, + STATE(334), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16068] = 7, + [15065] = 6, + ACTIONS(525), 1, + anon_sym_STAR_STAR, + ACTIONS(527), 1, + anon_sym_STAR, + ACTIONS(529), 1, + anon_sym_SLASH, + ACTIONS(543), 1, + anon_sym_GT_GT_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(531), 2, + anon_sym_DASH, + anon_sym_PLUS, + [15086] = 6, + ACTIONS(525), 1, + anon_sym_STAR_STAR, + ACTIONS(527), 1, + anon_sym_STAR, + ACTIONS(529), 1, + anon_sym_SLASH, + ACTIONS(545), 1, + anon_sym_GT_GT_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(531), 2, + anon_sym_DASH, + anon_sym_PLUS, + [15107] = 7, ACTIONS(39), 1, sym_varadic_dots, - ACTIONS(549), 1, + ACTIONS(533), 1, sym_identifier, - ACTIONS(559), 1, + ACTIONS(547), 1, anon_sym_RPAREN, - STATE(273), 1, + STATE(271), 1, aux_sym_struct_definition_repeat1, - STATE(316), 1, + STATE(301), 1, sym_struct_member, - STATE(331), 1, + STATE(316), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16091] = 5, - ACTIONS(561), 1, + [15130] = 5, + ACTIONS(549), 1, sym_identifier, - STATE(277), 1, + STATE(271), 1, aux_sym_struct_definition_repeat1, - STATE(334), 1, + STATE(330), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(564), 2, + ACTIONS(552), 2, anon_sym_RPAREN, sym_varadic_dots, - [16109] = 4, - ACTIONS(566), 1, - sym_identifier, - ACTIONS(569), 1, - anon_sym_in, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - STATE(278), 2, - sym_let_in_assignment, - aux_sym_let_in_repeat1, - [16124] = 4, - ACTIONS(571), 1, + [15148] = 4, + ACTIONS(554), 1, sym_identifier, - ACTIONS(573), 1, - anon_sym_in, + ACTIONS(556), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(283), 2, - sym_let_in_assignment, - aux_sym_let_in_repeat1, - [16139] = 4, - ACTIONS(571), 1, + STATE(47), 2, + sym_identity_path, + sym_struct_definition, + [15163] = 4, + ACTIONS(558), 1, sym_identifier, - ACTIONS(575), 1, + ACTIONS(560), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(278), 2, + STATE(274), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16154] = 4, - ACTIONS(577), 1, - sym_identifier, - ACTIONS(579), 1, - anon_sym_LPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - STATE(49), 2, - sym_identity_path, - sym_struct_definition, - [16169] = 4, - ACTIONS(577), 1, + [15178] = 4, + ACTIONS(558), 1, sym_identifier, - ACTIONS(579), 1, - anon_sym_LPAREN, + ACTIONS(562), 1, + anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(65), 2, - sym_identity_path, - sym_struct_definition, - [16184] = 4, - ACTIONS(571), 1, + STATE(280), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [15193] = 4, + ACTIONS(558), 1, sym_identifier, - ACTIONS(581), 1, + ACTIONS(564), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(278), 2, + STATE(276), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16199] = 4, - ACTIONS(571), 1, + [15208] = 4, + ACTIONS(558), 1, sym_identifier, - ACTIONS(583), 1, + ACTIONS(566), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, @@ -15326,435 +14503,457 @@ static const uint16_t ts_small_parse_table[] = { STATE(280), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16214] = 4, - ACTIONS(577), 1, + [15223] = 4, + ACTIONS(558), 1, sym_identifier, - ACTIONS(579), 1, + ACTIONS(568), 1, + anon_sym_in, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + STATE(279), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [15238] = 4, + ACTIONS(554), 1, + sym_identifier, + ACTIONS(556), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(30), 2, + STATE(62), 2, sym_identity_path, sym_struct_definition, - [16229] = 4, - ACTIONS(571), 1, + [15253] = 4, + ACTIONS(558), 1, sym_identifier, - ACTIONS(585), 1, + ACTIONS(570), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(287), 2, + STATE(280), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16244] = 4, - ACTIONS(571), 1, + [15268] = 4, + ACTIONS(572), 1, sym_identifier, - ACTIONS(587), 1, + ACTIONS(575), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(278), 2, + STATE(280), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16259] = 4, - ACTIONS(589), 1, - anon_sym_COMMA, - ACTIONS(591), 1, - anon_sym_RPAREN, - STATE(295), 1, - aux_sym_dictionary_construction_repeat1, + [15283] = 4, + ACTIONS(554), 1, + sym_identifier, + ACTIONS(556), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16273] = 4, - ACTIONS(593), 1, + STATE(29), 2, + sym_identity_path, + sym_struct_definition, + [15298] = 4, + ACTIONS(577), 1, anon_sym_COMMA, - ACTIONS(595), 1, + ACTIONS(579), 1, anon_sym_RPAREN, - STATE(292), 1, + STATE(294), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16287] = 3, - ACTIONS(599), 1, - anon_sym_EQ, + [15312] = 4, + ACTIONS(581), 1, + sym_identifier, + ACTIONS(583), 1, + anon_sym_RPAREN, + STATE(291), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(597), 2, - anon_sym_COMMA, + [15326] = 4, + ACTIONS(579), 1, anon_sym_RPAREN, - [16299] = 4, - ACTIONS(601), 1, + ACTIONS(581), 1, sym_identifier, - ACTIONS(603), 1, + STATE(296), 1, + sym_dictionary_member_assignment, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [15340] = 4, + ACTIONS(581), 1, + sym_identifier, + ACTIONS(585), 1, anon_sym_RPAREN, - STATE(314), 1, + STATE(296), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16313] = 4, - ACTIONS(603), 1, + [15354] = 4, + ACTIONS(585), 1, anon_sym_RPAREN, - ACTIONS(605), 1, + ACTIONS(587), 1, anon_sym_COMMA, - STATE(298), 1, + STATE(294), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16327] = 4, - ACTIONS(601), 1, - sym_identifier, - ACTIONS(607), 1, - anon_sym_RPAREN, - STATE(288), 1, - sym_dictionary_member_assignment, + [15368] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16341] = 4, - ACTIONS(601), 1, + ACTIONS(552), 3, sym_identifier, - ACTIONS(609), 1, anon_sym_RPAREN, - STATE(314), 1, - sym_dictionary_member_assignment, + sym_varadic_dots, + [15378] = 3, + ACTIONS(591), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16355] = 4, - ACTIONS(609), 1, - anon_sym_RPAREN, - ACTIONS(611), 1, + ACTIONS(589), 2, anon_sym_COMMA, - STATE(298), 1, - aux_sym_dictionary_construction_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [16369] = 4, - ACTIONS(601), 1, + anon_sym_RPAREN, + [15390] = 4, + ACTIONS(581), 1, sym_identifier, - ACTIONS(613), 1, + ACTIONS(593), 1, anon_sym_RPAREN, - STATE(314), 1, + STATE(293), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16383] = 4, - ACTIONS(601), 1, + [15404] = 4, + ACTIONS(581), 1, sym_identifier, - ACTIONS(615), 1, + ACTIONS(595), 1, anon_sym_RPAREN, - STATE(314), 1, + STATE(296), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16397] = 4, - ACTIONS(617), 1, + [15418] = 4, + ACTIONS(597), 1, anon_sym_COMMA, - ACTIONS(620), 1, + ACTIONS(599), 1, anon_sym_RPAREN, - STATE(298), 1, + STATE(286), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16411] = 2, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(564), 3, + [15432] = 4, + ACTIONS(581), 1, sym_identifier, - anon_sym_RPAREN, - sym_varadic_dots, - [16421] = 4, ACTIONS(601), 1, - sym_identifier, - ACTIONS(622), 1, anon_sym_RPAREN, - STATE(289), 1, + STATE(296), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16435] = 2, + [15446] = 4, + ACTIONS(603), 1, + anon_sym_COMMA, + ACTIONS(605), 1, + anon_sym_RPAREN, + STATE(282), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(624), 2, - sym_identifier, - anon_sym_in, - [16444] = 3, - ACTIONS(626), 1, - aux_sym_base_ten_token1, - STATE(79), 1, - sym_number, + [15460] = 4, + ACTIONS(607), 1, + anon_sym_COMMA, + ACTIONS(610), 1, + anon_sym_RPAREN, + STATE(294), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16455] = 3, - ACTIONS(628), 1, - anon_sym_COLON, - STATE(290), 1, - sym_declaration_type, + [15474] = 3, + ACTIONS(386), 1, + anon_sym_LPAREN, + STATE(194), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16466] = 2, + [15485] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(630), 2, + ACTIONS(610), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + [15494] = 3, + ACTIONS(612), 1, aux_sym_signed_integer_token1, + ACTIONS(614), 1, aux_sym_unsigned_integer_token1, - [16475] = 3, - ACTIONS(402), 1, - anon_sym_LPAREN, - STATE(195), 1, - sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16486] = 2, + [15505] = 3, + ACTIONS(616), 1, + aux_sym_base_ten_token1, + STATE(77), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(632), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [16495] = 3, - ACTIONS(216), 1, + [15516] = 3, + ACTIONS(212), 1, anon_sym_LPAREN, - STATE(117), 1, + STATE(119), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16506] = 3, - ACTIONS(634), 1, + [15527] = 3, + ACTIONS(618), 1, aux_sym_signed_integer_token1, - ACTIONS(636), 1, + ACTIONS(620), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16517] = 2, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(638), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [16526] = 3, - ACTIONS(640), 1, + [15538] = 3, + ACTIONS(622), 1, anon_sym_COMMA, - ACTIONS(642), 1, + ACTIONS(624), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16537] = 3, - ACTIONS(644), 1, + [15549] = 3, + ACTIONS(626), 1, aux_sym_base_ten_token1, - STATE(256), 1, + STATE(248), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16548] = 3, - ACTIONS(646), 1, + [15560] = 3, + ACTIONS(628), 1, aux_sym_base_ten_token1, - STATE(133), 1, + STATE(130), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16559] = 2, + [15571] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(630), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [15580] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(648), 2, + ACTIONS(632), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [16568] = 2, + [15589] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(620), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - [16577] = 3, - ACTIONS(650), 1, + ACTIONS(634), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [15598] = 3, + ACTIONS(636), 1, + anon_sym_COLON, + STATE(288), 1, + sym_declaration_type, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [15609] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(638), 2, + sym_identifier, + anon_sym_in, + [15618] = 3, + ACTIONS(581), 1, + sym_identifier, + STATE(296), 1, + sym_dictionary_member_assignment, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [15629] = 3, + ACTIONS(640), 1, aux_sym_base_ten_token1, - STATE(152), 1, + STATE(143), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16588] = 3, - ACTIONS(642), 1, - anon_sym_RPAREN, - ACTIONS(652), 1, - anon_sym_COMMA, + [15640] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16599] = 3, - ACTIONS(654), 1, + ACTIONS(642), 2, aux_sym_signed_integer_token1, - ACTIONS(656), 1, aux_sym_unsigned_integer_token1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [16610] = 3, - ACTIONS(658), 1, + [15649] = 3, + ACTIONS(644), 1, aux_sym_signed_integer_token1, - ACTIONS(660), 1, + ACTIONS(646), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16621] = 3, - ACTIONS(601), 1, - sym_identifier, - STATE(314), 1, - sym_dictionary_member_assignment, + [15660] = 3, + ACTIONS(624), 1, + anon_sym_RPAREN, + ACTIONS(648), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16632] = 2, - ACTIONS(662), 1, + [15671] = 2, + ACTIONS(650), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16640] = 2, - ACTIONS(664), 1, + [15679] = 2, + ACTIONS(652), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16648] = 2, - ACTIONS(666), 1, + [15687] = 2, + ACTIONS(654), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16656] = 2, - ACTIONS(668), 1, - anon_sym_EQ, + [15695] = 2, + ACTIONS(656), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16664] = 2, - ACTIONS(670), 1, + [15703] = 2, + ACTIONS(658), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16672] = 2, - ACTIONS(672), 1, - aux_sym_base_ten_token1, + [15711] = 2, + ACTIONS(660), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16680] = 2, - ACTIONS(674), 1, + [15719] = 2, + ACTIONS(662), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16688] = 2, - ACTIONS(676), 1, - aux_sym_hex_token2, + [15727] = 2, + ACTIONS(664), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16696] = 2, - ACTIONS(678), 1, + [15735] = 2, + ACTIONS(666), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16704] = 2, - ACTIONS(680), 1, - anon_sym_EQ, + [15743] = 2, + ACTIONS(668), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16712] = 2, - ACTIONS(682), 1, + [15751] = 2, + ACTIONS(670), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16720] = 2, - ACTIONS(684), 1, + [15759] = 2, + ACTIONS(672), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16728] = 2, - ACTIONS(686), 1, - anon_sym_RPAREN, + [15767] = 2, + ACTIONS(674), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16736] = 2, - ACTIONS(688), 1, - sym_identifier, + [15775] = 2, + ACTIONS(676), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16744] = 2, - ACTIONS(652), 1, - anon_sym_COMMA, + [15783] = 2, + ACTIONS(678), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16752] = 2, - ACTIONS(690), 1, - sym_identifier, + [15791] = 2, + ACTIONS(680), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16760] = 2, - ACTIONS(692), 1, - aux_sym_binary_token2, + [15799] = 2, + ACTIONS(622), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16768] = 2, - ACTIONS(694), 1, - sym_identifier, + [15807] = 2, + ACTIONS(682), 1, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16776] = 2, - ACTIONS(696), 1, - sym_identifier, + [15815] = 2, + ACTIONS(684), 1, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16784] = 2, - ACTIONS(698), 1, - anon_sym_RPAREN, + [15823] = 2, + ACTIONS(686), 1, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16792] = 2, - ACTIONS(700), 1, - ts_builtin_sym_end, + [15831] = 2, + ACTIONS(688), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -15830,617 +15029,605 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(70)] = 6366, [SMALL_STATE(71)] = 6462, [SMALL_STATE(72)] = 6558, - [SMALL_STATE(73)] = 6654, - [SMALL_STATE(74)] = 6750, - [SMALL_STATE(75)] = 6846, - [SMALL_STATE(76)] = 6893, - [SMALL_STATE(77)] = 6942, - [SMALL_STATE(78)] = 6987, - [SMALL_STATE(79)] = 7033, - [SMALL_STATE(80)] = 7075, - [SMALL_STATE(81)] = 7121, - [SMALL_STATE(82)] = 7167, - [SMALL_STATE(83)] = 7213, - [SMALL_STATE(84)] = 7259, - [SMALL_STATE(85)] = 7305, - [SMALL_STATE(86)] = 7347, - [SMALL_STATE(87)] = 7388, - [SMALL_STATE(88)] = 7431, - [SMALL_STATE(89)] = 7472, - [SMALL_STATE(90)] = 7513, - [SMALL_STATE(91)] = 7554, - [SMALL_STATE(92)] = 7595, - [SMALL_STATE(93)] = 7642, - [SMALL_STATE(94)] = 7683, - [SMALL_STATE(95)] = 7724, - [SMALL_STATE(96)] = 7765, - [SMALL_STATE(97)] = 7831, - [SMALL_STATE(98)] = 7871, - [SMALL_STATE(99)] = 7945, - [SMALL_STATE(100)] = 7997, - [SMALL_STATE(101)] = 8037, - [SMALL_STATE(102)] = 8085, - [SMALL_STATE(103)] = 8139, - [SMALL_STATE(104)] = 8195, - [SMALL_STATE(105)] = 8255, - [SMALL_STATE(106)] = 8313, - [SMALL_STATE(107)] = 8375, - [SMALL_STATE(108)] = 8449, - [SMALL_STATE(109)] = 8517, - [SMALL_STATE(110)] = 8587, - [SMALL_STATE(111)] = 8627, - [SMALL_STATE(112)] = 8667, - [SMALL_STATE(113)] = 8741, - [SMALL_STATE(114)] = 8781, - [SMALL_STATE(115)] = 8821, - [SMALL_STATE(116)] = 8861, - [SMALL_STATE(117)] = 8901, - [SMALL_STATE(118)] = 8941, - [SMALL_STATE(119)] = 9015, - [SMALL_STATE(120)] = 9057, - [SMALL_STATE(121)] = 9097, - [SMALL_STATE(122)] = 9137, - [SMALL_STATE(123)] = 9177, - [SMALL_STATE(124)] = 9251, - [SMALL_STATE(125)] = 9291, - [SMALL_STATE(126)] = 9331, - [SMALL_STATE(127)] = 9371, - [SMALL_STATE(128)] = 9411, - [SMALL_STATE(129)] = 9452, - [SMALL_STATE(130)] = 9500, - [SMALL_STATE(131)] = 9540, - [SMALL_STATE(132)] = 9581, - [SMALL_STATE(133)] = 9620, - [SMALL_STATE(134)] = 9656, - [SMALL_STATE(135)] = 9696, - [SMALL_STATE(136)] = 9736, - [SMALL_STATE(137)] = 9772, - [SMALL_STATE(138)] = 9812, - [SMALL_STATE(139)] = 9852, - [SMALL_STATE(140)] = 9894, - [SMALL_STATE(141)] = 9932, - [SMALL_STATE(142)] = 9972, - [SMALL_STATE(143)] = 10042, - [SMALL_STATE(144)] = 10082, - [SMALL_STATE(145)] = 10119, - [SMALL_STATE(146)] = 10186, - [SMALL_STATE(147)] = 10255, - [SMALL_STATE(148)] = 10322, - [SMALL_STATE(149)] = 10359, - [SMALL_STATE(150)] = 10428, - [SMALL_STATE(151)] = 10463, - [SMALL_STATE(152)] = 10498, - [SMALL_STATE(153)] = 10533, - [SMALL_STATE(154)] = 10574, - [SMALL_STATE(155)] = 10643, - [SMALL_STATE(156)] = 10678, - [SMALL_STATE(157)] = 10745, - [SMALL_STATE(158)] = 10780, - [SMALL_STATE(159)] = 10815, - [SMALL_STATE(160)] = 10862, - [SMALL_STATE(161)] = 10931, - [SMALL_STATE(162)] = 10980, - [SMALL_STATE(163)] = 11031, - [SMALL_STATE(164)] = 11086, - [SMALL_STATE(165)] = 11139, - [SMALL_STATE(166)] = 11196, - [SMALL_STATE(167)] = 11257, - [SMALL_STATE(168)] = 11320, - [SMALL_STATE(169)] = 11385, - [SMALL_STATE(170)] = 11452, - [SMALL_STATE(171)] = 11519, - [SMALL_STATE(172)] = 11554, - [SMALL_STATE(173)] = 11621, - [SMALL_STATE(174)] = 11688, - [SMALL_STATE(175)] = 11757, - [SMALL_STATE(176)] = 11826, - [SMALL_STATE(177)] = 11895, - [SMALL_STATE(178)] = 11964, - [SMALL_STATE(179)] = 12007, - [SMALL_STATE(180)] = 12041, - [SMALL_STATE(181)] = 12107, - [SMALL_STATE(182)] = 12153, - [SMALL_STATE(183)] = 12187, - [SMALL_STATE(184)] = 12229, - [SMALL_STATE(185)] = 12277, - [SMALL_STATE(186)] = 12327, - [SMALL_STATE(187)] = 12381, - [SMALL_STATE(188)] = 12433, - [SMALL_STATE(189)] = 12489, - [SMALL_STATE(190)] = 12549, - [SMALL_STATE(191)] = 12611, - [SMALL_STATE(192)] = 12675, - [SMALL_STATE(193)] = 12709, - [SMALL_STATE(194)] = 12775, - [SMALL_STATE(195)] = 12809, - [SMALL_STATE(196)] = 12843, - [SMALL_STATE(197)] = 12909, - [SMALL_STATE(198)] = 12943, - [SMALL_STATE(199)] = 12977, - [SMALL_STATE(200)] = 13011, - [SMALL_STATE(201)] = 13077, - [SMALL_STATE(202)] = 13111, - [SMALL_STATE(203)] = 13145, - [SMALL_STATE(204)] = 13211, - [SMALL_STATE(205)] = 13245, - [SMALL_STATE(206)] = 13279, - [SMALL_STATE(207)] = 13313, - [SMALL_STATE(208)] = 13379, - [SMALL_STATE(209)] = 13445, - [SMALL_STATE(210)] = 13511, - [SMALL_STATE(211)] = 13577, - [SMALL_STATE(212)] = 13611, - [SMALL_STATE(213)] = 13677, - [SMALL_STATE(214)] = 13711, - [SMALL_STATE(215)] = 13777, - [SMALL_STATE(216)] = 13811, - [SMALL_STATE(217)] = 13845, - [SMALL_STATE(218)] = 13911, - [SMALL_STATE(219)] = 13977, - [SMALL_STATE(220)] = 14043, - [SMALL_STATE(221)] = 14077, - [SMALL_STATE(222)] = 14143, - [SMALL_STATE(223)] = 14209, - [SMALL_STATE(224)] = 14275, - [SMALL_STATE(225)] = 14311, - [SMALL_STATE(226)] = 14377, - [SMALL_STATE(227)] = 14443, - [SMALL_STATE(228)] = 14509, - [SMALL_STATE(229)] = 14543, - [SMALL_STATE(230)] = 14596, - [SMALL_STATE(231)] = 14649, - [SMALL_STATE(232)] = 14702, - [SMALL_STATE(233)] = 14755, - [SMALL_STATE(234)] = 14808, - [SMALL_STATE(235)] = 14861, - [SMALL_STATE(236)] = 14914, - [SMALL_STATE(237)] = 14967, - [SMALL_STATE(238)] = 15020, - [SMALL_STATE(239)] = 15073, - [SMALL_STATE(240)] = 15126, - [SMALL_STATE(241)] = 15179, - [SMALL_STATE(242)] = 15232, - [SMALL_STATE(243)] = 15265, - [SMALL_STATE(244)] = 15298, - [SMALL_STATE(245)] = 15331, - [SMALL_STATE(246)] = 15359, - [SMALL_STATE(247)] = 15387, - [SMALL_STATE(248)] = 15414, - [SMALL_STATE(249)] = 15441, - [SMALL_STATE(250)] = 15468, - [SMALL_STATE(251)] = 15495, - [SMALL_STATE(252)] = 15522, - [SMALL_STATE(253)] = 15549, - [SMALL_STATE(254)] = 15574, - [SMALL_STATE(255)] = 15596, - [SMALL_STATE(256)] = 15618, - [SMALL_STATE(257)] = 15640, - [SMALL_STATE(258)] = 15662, - [SMALL_STATE(259)] = 15684, - [SMALL_STATE(260)] = 15704, - [SMALL_STATE(261)] = 15724, - [SMALL_STATE(262)] = 15752, - [SMALL_STATE(263)] = 15772, - [SMALL_STATE(264)] = 15800, - [SMALL_STATE(265)] = 15828, - [SMALL_STATE(266)] = 15854, - [SMALL_STATE(267)] = 15876, - [SMALL_STATE(268)] = 15896, - [SMALL_STATE(269)] = 15918, - [SMALL_STATE(270)] = 15936, - [SMALL_STATE(271)] = 15957, - [SMALL_STATE(272)] = 15978, - [SMALL_STATE(273)] = 16001, - [SMALL_STATE(274)] = 16024, - [SMALL_STATE(275)] = 16045, - [SMALL_STATE(276)] = 16068, - [SMALL_STATE(277)] = 16091, - [SMALL_STATE(278)] = 16109, - [SMALL_STATE(279)] = 16124, - [SMALL_STATE(280)] = 16139, - [SMALL_STATE(281)] = 16154, - [SMALL_STATE(282)] = 16169, - [SMALL_STATE(283)] = 16184, - [SMALL_STATE(284)] = 16199, - [SMALL_STATE(285)] = 16214, - [SMALL_STATE(286)] = 16229, - [SMALL_STATE(287)] = 16244, - [SMALL_STATE(288)] = 16259, - [SMALL_STATE(289)] = 16273, - [SMALL_STATE(290)] = 16287, - [SMALL_STATE(291)] = 16299, - [SMALL_STATE(292)] = 16313, - [SMALL_STATE(293)] = 16327, - [SMALL_STATE(294)] = 16341, - [SMALL_STATE(295)] = 16355, - [SMALL_STATE(296)] = 16369, - [SMALL_STATE(297)] = 16383, - [SMALL_STATE(298)] = 16397, - [SMALL_STATE(299)] = 16411, - [SMALL_STATE(300)] = 16421, - [SMALL_STATE(301)] = 16435, - [SMALL_STATE(302)] = 16444, - [SMALL_STATE(303)] = 16455, - [SMALL_STATE(304)] = 16466, - [SMALL_STATE(305)] = 16475, - [SMALL_STATE(306)] = 16486, - [SMALL_STATE(307)] = 16495, - [SMALL_STATE(308)] = 16506, - [SMALL_STATE(309)] = 16517, - [SMALL_STATE(310)] = 16526, - [SMALL_STATE(311)] = 16537, - [SMALL_STATE(312)] = 16548, - [SMALL_STATE(313)] = 16559, - [SMALL_STATE(314)] = 16568, - [SMALL_STATE(315)] = 16577, - [SMALL_STATE(316)] = 16588, - [SMALL_STATE(317)] = 16599, - [SMALL_STATE(318)] = 16610, - [SMALL_STATE(319)] = 16621, - [SMALL_STATE(320)] = 16632, - [SMALL_STATE(321)] = 16640, - [SMALL_STATE(322)] = 16648, - [SMALL_STATE(323)] = 16656, - [SMALL_STATE(324)] = 16664, - [SMALL_STATE(325)] = 16672, - [SMALL_STATE(326)] = 16680, - [SMALL_STATE(327)] = 16688, - [SMALL_STATE(328)] = 16696, - [SMALL_STATE(329)] = 16704, - [SMALL_STATE(330)] = 16712, - [SMALL_STATE(331)] = 16720, - [SMALL_STATE(332)] = 16728, - [SMALL_STATE(333)] = 16736, - [SMALL_STATE(334)] = 16744, - [SMALL_STATE(335)] = 16752, - [SMALL_STATE(336)] = 16760, - [SMALL_STATE(337)] = 16768, - [SMALL_STATE(338)] = 16776, - [SMALL_STATE(339)] = 16784, - [SMALL_STATE(340)] = 16792, + [SMALL_STATE(73)] = 6603, + [SMALL_STATE(74)] = 6650, + [SMALL_STATE(75)] = 6693, + [SMALL_STATE(76)] = 6737, + [SMALL_STATE(77)] = 6781, + [SMALL_STATE(78)] = 6821, + [SMALL_STATE(79)] = 6865, + [SMALL_STATE(80)] = 6909, + [SMALL_STATE(81)] = 6953, + [SMALL_STATE(82)] = 6993, + [SMALL_STATE(83)] = 7037, + [SMALL_STATE(84)] = 7076, + [SMALL_STATE(85)] = 7117, + [SMALL_STATE(86)] = 7156, + [SMALL_STATE(87)] = 7195, + [SMALL_STATE(88)] = 7234, + [SMALL_STATE(89)] = 7279, + [SMALL_STATE(90)] = 7318, + [SMALL_STATE(91)] = 7357, + [SMALL_STATE(92)] = 7396, + [SMALL_STATE(93)] = 7435, + [SMALL_STATE(94)] = 7473, + [SMALL_STATE(95)] = 7511, + [SMALL_STATE(96)] = 7549, + [SMALL_STATE(97)] = 7587, + [SMALL_STATE(98)] = 7655, + [SMALL_STATE(99)] = 7693, + [SMALL_STATE(100)] = 7731, + [SMALL_STATE(101)] = 7769, + [SMALL_STATE(102)] = 7807, + [SMALL_STATE(103)] = 7857, + [SMALL_STATE(104)] = 7895, + [SMALL_STATE(105)] = 7941, + [SMALL_STATE(106)] = 7993, + [SMALL_STATE(107)] = 8047, + [SMALL_STATE(108)] = 8105, + [SMALL_STATE(109)] = 8161, + [SMALL_STATE(110)] = 8199, + [SMALL_STATE(111)] = 8263, + [SMALL_STATE(112)] = 8329, + [SMALL_STATE(113)] = 8367, + [SMALL_STATE(114)] = 8435, + [SMALL_STATE(115)] = 8475, + [SMALL_STATE(116)] = 8543, + [SMALL_STATE(117)] = 8611, + [SMALL_STATE(118)] = 8649, + [SMALL_STATE(119)] = 8687, + [SMALL_STATE(120)] = 8725, + [SMALL_STATE(121)] = 8793, + [SMALL_STATE(122)] = 8831, + [SMALL_STATE(123)] = 8869, + [SMALL_STATE(124)] = 8929, + [SMALL_STATE(125)] = 8968, + [SMALL_STATE(126)] = 9014, + [SMALL_STATE(127)] = 9052, + [SMALL_STATE(128)] = 9089, + [SMALL_STATE(129)] = 9128, + [SMALL_STATE(130)] = 9164, + [SMALL_STATE(131)] = 9198, + [SMALL_STATE(132)] = 9236, + [SMALL_STATE(133)] = 9276, + [SMALL_STATE(134)] = 9314, + [SMALL_STATE(135)] = 9352, + [SMALL_STATE(136)] = 9390, + [SMALL_STATE(137)] = 9428, + [SMALL_STATE(138)] = 9466, + [SMALL_STATE(139)] = 9530, + [SMALL_STATE(140)] = 9564, + [SMALL_STATE(141)] = 9625, + [SMALL_STATE(142)] = 9688, + [SMALL_STATE(143)] = 9721, + [SMALL_STATE(144)] = 9754, + [SMALL_STATE(145)] = 9793, + [SMALL_STATE(146)] = 9828, + [SMALL_STATE(147)] = 9891, + [SMALL_STATE(148)] = 9924, + [SMALL_STATE(149)] = 9985, + [SMALL_STATE(150)] = 10046, + [SMALL_STATE(151)] = 10079, + [SMALL_STATE(152)] = 10112, + [SMALL_STATE(153)] = 10157, + [SMALL_STATE(154)] = 10198, + [SMALL_STATE(155)] = 10245, + [SMALL_STATE(156)] = 10294, + [SMALL_STATE(157)] = 10355, + [SMALL_STATE(158)] = 10406, + [SMALL_STATE(159)] = 10461, + [SMALL_STATE(160)] = 10518, + [SMALL_STATE(161)] = 10577, + [SMALL_STATE(162)] = 10638, + [SMALL_STATE(163)] = 10671, + [SMALL_STATE(164)] = 10732, + [SMALL_STATE(165)] = 10767, + [SMALL_STATE(166)] = 10830, + [SMALL_STATE(167)] = 10863, + [SMALL_STATE(168)] = 10926, + [SMALL_STATE(169)] = 10989, + [SMALL_STATE(170)] = 11052, + [SMALL_STATE(171)] = 11115, + [SMALL_STATE(172)] = 11178, + [SMALL_STATE(173)] = 11239, + [SMALL_STATE(174)] = 11292, + [SMALL_STATE(175)] = 11324, + [SMALL_STATE(176)] = 11384, + [SMALL_STATE(177)] = 11416, + [SMALL_STATE(178)] = 11476, + [SMALL_STATE(179)] = 11508, + [SMALL_STATE(180)] = 11540, + [SMALL_STATE(181)] = 11572, + [SMALL_STATE(182)] = 11616, + [SMALL_STATE(183)] = 11656, + [SMALL_STATE(184)] = 11702, + [SMALL_STATE(185)] = 11750, + [SMALL_STATE(186)] = 11802, + [SMALL_STATE(187)] = 11852, + [SMALL_STATE(188)] = 11906, + [SMALL_STATE(189)] = 11962, + [SMALL_STATE(190)] = 12020, + [SMALL_STATE(191)] = 12052, + [SMALL_STATE(192)] = 12112, + [SMALL_STATE(193)] = 12144, + [SMALL_STATE(194)] = 12176, + [SMALL_STATE(195)] = 12208, + [SMALL_STATE(196)] = 12268, + [SMALL_STATE(197)] = 12300, + [SMALL_STATE(198)] = 12332, + [SMALL_STATE(199)] = 12392, + [SMALL_STATE(200)] = 12452, + [SMALL_STATE(201)] = 12484, + [SMALL_STATE(202)] = 12516, + [SMALL_STATE(203)] = 12548, + [SMALL_STATE(204)] = 12580, + [SMALL_STATE(205)] = 12640, + [SMALL_STATE(206)] = 12700, + [SMALL_STATE(207)] = 12760, + [SMALL_STATE(208)] = 12792, + [SMALL_STATE(209)] = 12852, + [SMALL_STATE(210)] = 12884, + [SMALL_STATE(211)] = 12944, + [SMALL_STATE(212)] = 13004, + [SMALL_STATE(213)] = 13064, + [SMALL_STATE(214)] = 13096, + [SMALL_STATE(215)] = 13156, + [SMALL_STATE(216)] = 13216, + [SMALL_STATE(217)] = 13276, + [SMALL_STATE(218)] = 13310, + [SMALL_STATE(219)] = 13370, + [SMALL_STATE(220)] = 13430, + [SMALL_STATE(221)] = 13490, + [SMALL_STATE(222)] = 13550, + [SMALL_STATE(223)] = 13582, + [SMALL_STATE(224)] = 13635, + [SMALL_STATE(225)] = 13688, + [SMALL_STATE(226)] = 13741, + [SMALL_STATE(227)] = 13794, + [SMALL_STATE(228)] = 13847, + [SMALL_STATE(229)] = 13900, + [SMALL_STATE(230)] = 13953, + [SMALL_STATE(231)] = 14006, + [SMALL_STATE(232)] = 14059, + [SMALL_STATE(233)] = 14112, + [SMALL_STATE(234)] = 14165, + [SMALL_STATE(235)] = 14218, + [SMALL_STATE(236)] = 14271, + [SMALL_STATE(237)] = 14304, + [SMALL_STATE(238)] = 14337, + [SMALL_STATE(239)] = 14370, + [SMALL_STATE(240)] = 14398, + [SMALL_STATE(241)] = 14426, + [SMALL_STATE(242)] = 14453, + [SMALL_STATE(243)] = 14480, + [SMALL_STATE(244)] = 14507, + [SMALL_STATE(245)] = 14534, + [SMALL_STATE(246)] = 14561, + [SMALL_STATE(247)] = 14588, + [SMALL_STATE(248)] = 14613, + [SMALL_STATE(249)] = 14635, + [SMALL_STATE(250)] = 14657, + [SMALL_STATE(251)] = 14679, + [SMALL_STATE(252)] = 14701, + [SMALL_STATE(253)] = 14723, + [SMALL_STATE(254)] = 14751, + [SMALL_STATE(255)] = 14771, + [SMALL_STATE(256)] = 14793, + [SMALL_STATE(257)] = 14821, + [SMALL_STATE(258)] = 14849, + [SMALL_STATE(259)] = 14875, + [SMALL_STATE(260)] = 14895, + [SMALL_STATE(261)] = 14915, + [SMALL_STATE(262)] = 14935, + [SMALL_STATE(263)] = 14957, + [SMALL_STATE(264)] = 14975, + [SMALL_STATE(265)] = 14998, + [SMALL_STATE(266)] = 15021, + [SMALL_STATE(267)] = 15042, + [SMALL_STATE(268)] = 15065, + [SMALL_STATE(269)] = 15086, + [SMALL_STATE(270)] = 15107, + [SMALL_STATE(271)] = 15130, + [SMALL_STATE(272)] = 15148, + [SMALL_STATE(273)] = 15163, + [SMALL_STATE(274)] = 15178, + [SMALL_STATE(275)] = 15193, + [SMALL_STATE(276)] = 15208, + [SMALL_STATE(277)] = 15223, + [SMALL_STATE(278)] = 15238, + [SMALL_STATE(279)] = 15253, + [SMALL_STATE(280)] = 15268, + [SMALL_STATE(281)] = 15283, + [SMALL_STATE(282)] = 15298, + [SMALL_STATE(283)] = 15312, + [SMALL_STATE(284)] = 15326, + [SMALL_STATE(285)] = 15340, + [SMALL_STATE(286)] = 15354, + [SMALL_STATE(287)] = 15368, + [SMALL_STATE(288)] = 15378, + [SMALL_STATE(289)] = 15390, + [SMALL_STATE(290)] = 15404, + [SMALL_STATE(291)] = 15418, + [SMALL_STATE(292)] = 15432, + [SMALL_STATE(293)] = 15446, + [SMALL_STATE(294)] = 15460, + [SMALL_STATE(295)] = 15474, + [SMALL_STATE(296)] = 15485, + [SMALL_STATE(297)] = 15494, + [SMALL_STATE(298)] = 15505, + [SMALL_STATE(299)] = 15516, + [SMALL_STATE(300)] = 15527, + [SMALL_STATE(301)] = 15538, + [SMALL_STATE(302)] = 15549, + [SMALL_STATE(303)] = 15560, + [SMALL_STATE(304)] = 15571, + [SMALL_STATE(305)] = 15580, + [SMALL_STATE(306)] = 15589, + [SMALL_STATE(307)] = 15598, + [SMALL_STATE(308)] = 15609, + [SMALL_STATE(309)] = 15618, + [SMALL_STATE(310)] = 15629, + [SMALL_STATE(311)] = 15640, + [SMALL_STATE(312)] = 15649, + [SMALL_STATE(313)] = 15660, + [SMALL_STATE(314)] = 15671, + [SMALL_STATE(315)] = 15679, + [SMALL_STATE(316)] = 15687, + [SMALL_STATE(317)] = 15695, + [SMALL_STATE(318)] = 15703, + [SMALL_STATE(319)] = 15711, + [SMALL_STATE(320)] = 15719, + [SMALL_STATE(321)] = 15727, + [SMALL_STATE(322)] = 15735, + [SMALL_STATE(323)] = 15743, + [SMALL_STATE(324)] = 15751, + [SMALL_STATE(325)] = 15759, + [SMALL_STATE(326)] = 15767, + [SMALL_STATE(327)] = 15775, + [SMALL_STATE(328)] = 15783, + [SMALL_STATE(329)] = 15791, + [SMALL_STATE(330)] = 15799, + [SMALL_STATE(331)] = 15807, + [SMALL_STATE(332)] = 15815, + [SMALL_STATE(333)] = 15823, + [SMALL_STATE(334)] = 15831, }; 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 = false}}, SHIFT(84), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(336), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(72), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(332), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(331), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(333), [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(115), - [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(99), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(9), - [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(279), + [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(277), [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), - [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(129), - [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), - [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), - [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), - [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), - [47] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(84), - [50] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(120), - [53] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(78), - [56] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(75), - [59] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(325), - [62] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(327), - [65] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(336), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), + [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), + [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(313), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), + [47] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(76), + [50] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(93), + [53] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(82), + [56] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(72), + [59] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(332), + [62] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(331), + [65] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(333), [68] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(12), - [71] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(115), - [74] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(36), + [71] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(99), + [74] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(35), [77] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(9), - [80] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(279), + [80] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(277), [83] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), [86] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(4), [89] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [91] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(230), - [94] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), - [96] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), - [98] = {.entry = {.count = 1, .reusable = false}}, SHIFT(130), - [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(73), - [104] = {.entry = {.count = 1, .reusable = false}}, SHIFT(286), - [106] = {.entry = {.count = 1, .reusable = false}}, SHIFT(134), - [108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), - [110] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), - [112] = {.entry = {.count = 1, .reusable = false}}, SHIFT(128), - [114] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [116] = {.entry = {.count = 1, .reusable = false}}, SHIFT(182), - [118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [91] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(235), + [94] = {.entry = {.count = 1, .reusable = true}}, SHIFT(180), + [96] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), + [98] = {.entry = {.count = 1, .reusable = false}}, SHIFT(126), + [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70), + [104] = {.entry = {.count = 1, .reusable = false}}, SHIFT(273), + [106] = {.entry = {.count = 1, .reusable = false}}, SHIFT(135), + [108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), + [110] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), + [112] = {.entry = {.count = 1, .reusable = false}}, SHIFT(124), + [114] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [116] = {.entry = {.count = 1, .reusable = false}}, SHIFT(209), + [118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), [120] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), - [122] = {.entry = {.count = 1, .reusable = false}}, SHIFT(284), + [122] = {.entry = {.count = 1, .reusable = false}}, SHIFT(275), [124] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), [126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), - [128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), + [128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(234), [130] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), [132] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), [134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), [136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [138] = {.entry = {.count = 1, .reusable = false}}, SHIFT(86), - [140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [138] = {.entry = {.count = 1, .reusable = false}}, SHIFT(90), + [140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), [142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), [144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), [146] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [148] = {.entry = {.count = 1, .reusable = false}}, SHIFT(302), - [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), - [152] = {.entry = {.count = 1, .reusable = false}}, SHIFT(333), - [154] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), - [156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), - [158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), - [160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 2, 0, 0), - [162] = {.entry = {.count = 1, .reusable = false}}, SHIFT(338), - [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 2, 0, 0), - [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 2, 0, 3), - [168] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 2, 0, 3), - [170] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), - [172] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(338), - [175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), - [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [179] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(333), - [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), - [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), - [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 6), - [190] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 6), + [148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(298), + [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 2, 0, 0), + [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), + [154] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 2, 0, 0), + [156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), + [158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), + [160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), + [162] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), + [164] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), + [166] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(324), + [169] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), + [171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), + [173] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(317), + [176] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), + [178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 2, 0, 3), + [180] = {.entry = {.count = 1, .reusable = true}}, SHIFT(317), + [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 2, 0, 3), + [184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), + [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), + [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), + [190] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), [192] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), - [198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 12), - [200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 12), - [202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 14), - [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 14), - [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 5), - [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 5), - [210] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 16), - [212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), - [214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 16), - [216] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), - [218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), - [220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), - [222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 5), - [224] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 5), + [198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 14), + [200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 14), + [202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 12), + [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 12), + [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 16), + [208] = {.entry = {.count = 1, .reusable = true}}, SHIFT(323), + [210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 16), + [212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), + [214] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 5), + [216] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 5), + [218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 6), + [220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 6), + [222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 5), + [224] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 5), [226] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 20), [228] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 20), - [230] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), - [236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [240] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), - [242] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), - [244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [246] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), - [248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [250] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [252] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [254] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 4), - [256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), - [262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [264] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 4), - [266] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 13), - [268] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 13), - [270] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 10), - [272] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 10), - [274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 7), - [276] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 7), - [278] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 17), - [280] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 17), - [282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [284] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 19), - [288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 19), - [290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [296] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [298] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 21), - [300] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 21), - [302] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 22), - [304] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 22), - [306] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), - [312] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 26), - [314] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 26), - [316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 23), - [318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 23), - [320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 6, 0, 28), - [322] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 6, 0, 28), - [324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 27), - [326] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 27), - [328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [330] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 29), - [334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 29), - [336] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 30), - [338] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 30), - [340] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), - [342] = {.entry = {.count = 1, .reusable = false}}, SHIFT(29), - [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), - [346] = {.entry = {.count = 1, .reusable = false}}, SHIFT(312), - [348] = {.entry = {.count = 1, .reusable = false}}, SHIFT(330), - [350] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(335), - [353] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(330), - [356] = {.entry = {.count = 1, .reusable = false}}, SHIFT(335), - [358] = {.entry = {.count = 1, .reusable = false}}, SHIFT(315), - [360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), - [362] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), - [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), - [366] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 25), - [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(326), - [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), - [378] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), - [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), - [382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), - [384] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), - [386] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), - [388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), - [390] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), - [392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [398] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), - [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(293), - [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245), - [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), - [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [412] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 18), - [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), - [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), - [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), - [424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [428] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), - [430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), - [432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), - [434] = {.entry = {.count = 1, .reusable = false}}, SHIFT(74), - [436] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), - [438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [440] = {.entry = {.count = 1, .reusable = false}}, SHIFT(44), - [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [448] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), - [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), - [452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), - [454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [460] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(301), - [464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), - [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), - [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), - [470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), - [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), - [478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), - [484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), - [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), - [488] = {.entry = {.count = 1, .reusable = false}}, SHIFT(251), - [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), - [492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(337), - [494] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(337), - [497] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [499] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), - [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), - [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), - [505] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [507] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [509] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), - [511] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), - [513] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), - [515] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), - [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), - [519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237), - [521] = {.entry = {.count = 1, .reusable = false}}, SHIFT(240), - [523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), - [525] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), - [527] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), - [529] = {.entry = {.count = 1, .reusable = false}}, SHIFT(235), - [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), - [533] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), - [535] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), - [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(234), - [539] = {.entry = {.count = 1, .reusable = false}}, SHIFT(236), - [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), - [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), - [545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), - [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(255), - [549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), - [551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), - [553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), - [555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), - [557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), - [561] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(303), - [564] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [566] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(323), - [569] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), - [571] = {.entry = {.count = 1, .reusable = false}}, SHIFT(323), - [573] = {.entry = {.count = 1, .reusable = false}}, SHIFT(11), - [575] = {.entry = {.count = 1, .reusable = false}}, SHIFT(64), - [577] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), - [579] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), - [581] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), - [583] = {.entry = {.count = 1, .reusable = false}}, SHIFT(52), - [585] = {.entry = {.count = 1, .reusable = false}}, SHIFT(37), - [587] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), - [589] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), - [591] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), - [593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), - [595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), - [597] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 11), - [599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(329), - [603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), - [605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), - [607] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), - [609] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), - [611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), - [613] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), - [615] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [617] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(319), - [620] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), - [624] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 24), - [626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [232] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [234] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [236] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [238] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 27), + [240] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 27), + [242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 13), + [244] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 13), + [246] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 6, 0, 28), + [248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [252] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), + [254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [258] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), + [260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), + [262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [264] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), + [266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [272] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 6, 0, 28), + [274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [276] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [278] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [280] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 7), + [284] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 7), + [286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 29), + [288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 29), + [290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 30), + [292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 30), + [294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 26), + [296] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 26), + [298] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 4), + [300] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 4), + [302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), + [304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 10), + [306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 10), + [308] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 17), + [310] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 17), + [312] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 19), + [314] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 19), + [316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 21), + [322] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 21), + [324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 22), + [326] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 22), + [328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [330] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 23), + [334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 23), + [336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), + [338] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), + [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), + [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), + [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [348] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(321), + [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(328), + [353] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(328), + [356] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), + [358] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), + [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(320), + [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [366] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), + [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [372] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [374] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), + [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [378] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), + [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(283), + [388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), + [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278), + [392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [396] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 25), + [398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), + [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), + [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), + [414] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 18), + [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [422] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), + [424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [428] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), + [430] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), + [432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [434] = {.entry = {.count = 1, .reusable = false}}, SHIFT(44), + [436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [446] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), + [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), + [454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), + [458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(272), + [462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308), + [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), + [472] = {.entry = {.count = 1, .reusable = false}}, SHIFT(245), + [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), + [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), + [478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), + [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(318), + [482] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(318), + [485] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [487] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(302), + [493] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), + [495] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), + [497] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [499] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [501] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), + [503] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), + [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), + [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), + [509] = {.entry = {.count = 1, .reusable = false}}, SHIFT(223), + [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), + [513] = {.entry = {.count = 1, .reusable = false}}, SHIFT(233), + [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), + [517] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), + [519] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), + [521] = {.entry = {.count = 1, .reusable = false}}, SHIFT(230), + [523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), + [525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), + [527] = {.entry = {.count = 1, .reusable = false}}, SHIFT(226), + [529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), + [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), + [533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), + [535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), + [539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251), + [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), + [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), + [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [549] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(307), + [552] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), + [556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(267), + [558] = {.entry = {.count = 1, .reusable = false}}, SHIFT(326), + [560] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36), + [562] = {.entry = {.count = 1, .reusable = false}}, SHIFT(46), + [564] = {.entry = {.count = 1, .reusable = false}}, SHIFT(50), + [566] = {.entry = {.count = 1, .reusable = false}}, SHIFT(61), + [568] = {.entry = {.count = 1, .reusable = false}}, SHIFT(11), + [570] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), + [572] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(326), + [575] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), + [577] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), + [579] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [581] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), + [583] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), + [585] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), + [587] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), + [589] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 11), + [591] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), + [597] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), + [599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), + [603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), + [605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [607] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(309), + [610] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), + [614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254), + [616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), + [620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), + [624] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), + [628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), [630] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [632] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), - [636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), - [638] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), - [642] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254), - [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), - [648] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), - [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), - [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), - [658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), - [660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), - [662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), - [664] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), - [668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), - [672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), - [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), - [676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), - [678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), - [684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), - [686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), - [688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), - [694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), - [696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), - [698] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), - [700] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [632] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [634] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [638] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 24), + [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [642] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(322), + [650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), + [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), + [660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), + [662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), + [664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), + [666] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), + [670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), + [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [680] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), + [684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), + [686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), + [688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), }; #ifdef __cplusplus From 5e1f19eeee04bc1bbc94eb3b3e6f9ea7b09748e3 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 3 Jan 2026 04:59:09 -0500 Subject: [PATCH 059/106] Callable overhaul --- Cargo.lock | 1 + crates/interpreter/Cargo.toml | 1 + crates/interpreter/src/execution/mod.rs | 112 +- .../src/execution/standard_environment.rs | 37 +- .../src/execution/values/boolean.rs | 7 +- .../src/execution/values/closure.rs | 601 ++++++-- .../src/execution/values/dictionary.rs | 70 +- .../src/execution/values/integer.rs | 4 +- .../interpreter/src/execution/values/list.rs | 80 +- .../interpreter/src/execution/values/mod.rs | 6 +- .../src/execution/values/scalar.rs | 1290 ++++++++++------- .../src/execution/values/string.rs | 67 +- .../src/execution/values/value_type.rs | 134 +- .../src/execution/values/vector.rs | 713 +++++---- .../interpreter/src/execution/values/void.rs | 10 +- 15 files changed, 1981 insertions(+), 1152 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2244a92..548f9d7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1061,6 +1061,7 @@ dependencies = [ "imstr 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "nalgebra 0.34.1", "num-traits", + "paste", "pretty_assertions", "stack", "tree-sitter", diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index 596855c..99b1c8f 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -19,6 +19,7 @@ hashable-map = "0.4.0" imstr = "0.2.0" nalgebra = "0.34.1" stack = "0.4.0" +paste = "1.0.15" [build-dependencies] type-sitter-gen = "0.8" diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 0edbd58..e3f44a1 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -22,7 +22,7 @@ use crate::{ compile::{ self, AstNode, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation, }, - execution::stack::ScopeType, + execution::{stack::ScopeType, values::BuiltinCallableDatabase}, }; mod errors; @@ -40,6 +40,7 @@ pub fn find_value<'p, 's>( log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], stack: &'s mut Stack, + database: &BuiltinCallableDatabase, path_iter: impl IntoIterator>, ) -> ExpressionResult { let mut path_iter = path_iter.into_iter().peekable(); @@ -59,6 +60,7 @@ pub fn find_value<'p, 's>( let mut value = stack_value.get_attribute( log, stack_trace, + database, &LocatedStr { location: sub_path.reference.clone(), string: &sub_path.node, @@ -74,6 +76,7 @@ pub fn find_value<'p, 's>( let final_value = value.get_attribute( log, stack_trace, + database, &LocatedStr { location: sub_path.reference.clone(), string: &sub_path.node, @@ -85,6 +88,7 @@ pub fn find_value<'p, 's>( value = value.get_attribute( log, stack_trace, + database, &LocatedStr { location: sub_path.reference.clone(), string: &sub_path.node, @@ -104,33 +108,37 @@ pub fn execute_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, expression: &compile::AstNode, ) -> ExpressionResult { stack_trace.stack_scope( expression.reference.clone(), |stack_trace| match &expression.node { compile::Expression::BinaryExpression(ast_node) => { - execute_binary_expression(log, stack_trace, stack, ast_node) + execute_binary_expression(log, stack_trace, stack, database, ast_node) } compile::Expression::Boolean(ast_node) => Ok(values::Boolean(ast_node.node).into()), compile::Expression::ClosureDefinition(ast_node) => { - Ok(values::UserClosure::from_ast(log, stack_trace, stack, ast_node)?.into()) - } - compile::Expression::DictionaryConstruction(ast_node) => { - Ok(values::Dictionary::from_ast(log, stack_trace, stack, ast_node)?.into()) + Ok( + values::UserClosure::from_ast(log, stack_trace, stack, database, ast_node)? + .into(), + ) } + compile::Expression::DictionaryConstruction(ast_node) => Ok( + values::Dictionary::from_ast(log, stack_trace, stack, database, ast_node)?.into(), + ), compile::Expression::If(ast_node) => { - execute_if_expression(log, stack_trace, stack, ast_node) + execute_if_expression(log, stack_trace, stack, database, ast_node) } compile::Expression::List(ast_node) => { - Ok(values::List::from_ast(log, stack_trace, stack, ast_node)?.into()) + Ok(values::List::from_ast(log, stack_trace, stack, database, ast_node)?.into()) } compile::Expression::Parenthesis(ast_node) => { - execute_expression(log, stack_trace, stack, &ast_node) + execute_expression(log, stack_trace, stack, database, &ast_node) } compile::Expression::IdentityPath(ast_node) => { let path_iter = ast_node.node.path.iter(); - Ok(find_value(log, stack_trace, stack, path_iter)?) + Ok(find_value(log, stack_trace, stack, database, path_iter)?) } compile::Expression::SelfPath(ast_node) => { let self_code = AstNode { @@ -138,7 +146,7 @@ pub fn execute_expression( node: String::from("self"), }; let path_iter = [&self_code].into_iter().chain(ast_node.node.path.iter()); - Ok(find_value(log, stack_trace, stack, path_iter)?) + Ok(find_value(log, stack_trace, stack, database, path_iter)?) } compile::Expression::Scalar(ast_node) => Ok(values::Scalar { @@ -147,13 +155,13 @@ pub fn execute_expression( } .into()), compile::Expression::Vector2(vector) => { - Ok(values::Vector2::from_ast(log, stack_trace, stack, vector)?.into()) + Ok(values::Vector2::from_ast(log, stack_trace, stack, database, vector)?.into()) } compile::Expression::Vector3(vector) => { - Ok(values::Vector3::from_ast(log, stack_trace, stack, vector)?.into()) + Ok(values::Vector3::from_ast(log, stack_trace, stack, database, vector)?.into()) } compile::Expression::Vector4(vector) => { - Ok(values::Vector4::from_ast(log, stack_trace, stack, vector)?.into()) + Ok(values::Vector4::from_ast(log, stack_trace, stack, database, vector)?.into()) } compile::Expression::SignedInteger(ast_node) => { Ok(values::SignedInteger::from(ast_node.node).into()) @@ -162,23 +170,23 @@ pub fn execute_expression( Ok(values::IString::from(ast_node.node.clone()).into()) } compile::Expression::StructDefinition(ast_node) => Ok(ValueType::from( - values::StructDefinition::new(log, stack_trace, stack, ast_node)?, + values::StructDefinition::new(log, stack_trace, stack, database, ast_node)?, ) .into()), compile::Expression::UnaryExpression(ast_node) => { - execute_unary_expression(log, stack_trace, stack, ast_node) + execute_unary_expression(log, stack_trace, stack, database, ast_node) } compile::Expression::UnsignedInteger(ast_node) => { Ok(values::UnsignedInteger::from(ast_node.node).into()) } compile::Expression::FunctionCall(ast_node) => { - execute_function_call(log, stack_trace, stack, ast_node) + execute_function_call(log, stack_trace, stack, database, ast_node) } compile::Expression::MethodCall(ast_node) => { - execute_method_call(log, stack_trace, stack, ast_node) + execute_method_call(log, stack_trace, stack, database, ast_node) } compile::Expression::LetIn(ast_node) => { - execute_let_in(log, stack_trace, stack, ast_node) + execute_let_in(log, stack_trace, stack, database, ast_node) } }, ) @@ -188,11 +196,12 @@ fn execute_unary_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, expression: &compile::AstNode>, ) -> ExpressionResult { stack_trace.stack_scope(expression.reference.clone(), |stack_trace| { let node = &expression.node; - let value = execute_expression(log, stack_trace, stack, &node.expression)?; + let value = execute_expression(log, stack_trace, stack, database, &node.expression)?; match node.operation.node { UnaryExpressionOperation::Add => value.unary_plus(log, stack_trace), UnaryExpressionOperation::Sub => value.unary_minus(log, stack_trace), @@ -205,13 +214,15 @@ fn execute_function_call( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, call: &compile::AstNode>, ) -> ExpressionResult { - let to_call = execute_expression(log, stack_trace, stack, &call.node.to_call)?; - let argument = values::Dictionary::from_ast(log, stack_trace, stack, &call.node.argument)?; + let to_call = execute_expression(log, stack_trace, stack, database, &call.node.to_call)?; + let argument = + values::Dictionary::from_ast(log, stack_trace, stack, database, &call.node.argument)?; stack.scope(stack_trace, ScopeType::Isolated, |stack, stack_trace| { - to_call.call(log, stack_trace, stack, argument) + to_call.call(log, stack_trace, stack, database, argument) })? } @@ -219,18 +230,26 @@ fn execute_method_call( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, call: &compile::AstNode>, ) -> ExpressionResult { - let self_dictionary = execute_expression(log, stack_trace, stack, &call.node.self_dictionary)?; + let self_dictionary = execute_expression( + log, + stack_trace, + stack, + database, + &call.node.self_dictionary, + )?; let to_call = self_dictionary - .get_attribute(log, stack_trace, &call.node.to_call.node)? + .get_attribute(log, stack_trace, database, &call.node.to_call.node)? .clone(); - let argument = values::Dictionary::from_ast(log, stack_trace, stack, &call.node.argument)?; + let argument = + values::Dictionary::from_ast(log, stack_trace, stack, database, &call.node.argument)?; stack.scope(stack_trace, ScopeType::Isolated, |stack, stack_trace| { stack.insert_value("self", self_dictionary); - to_call.call(log, stack_trace, stack, argument) + to_call.call(log, stack_trace, stack, database, argument) })? } @@ -238,16 +257,18 @@ fn execute_let_in( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, expression: &compile::AstNode>, ) -> ExpressionResult { stack_trace.stack_scope(expression.reference.clone(), |stack_trace| { for assignment in expression.node.assignments.iter() { - let value = execute_expression(log, stack_trace, stack, &assignment.node.value)?; + let value = + execute_expression(log, stack_trace, stack, database, &assignment.node.value)?; stack.insert_value(assignment.node.ident.node.clone(), value); } let node = &expression.node; - execute_expression(log, stack_trace, stack, &node.expression) + execute_expression(log, stack_trace, stack, database, &node.expression) }) } @@ -255,14 +276,15 @@ fn execute_binary_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, expression: &compile::AstNode>, ) -> ExpressionResult { stack_trace.stack_scope( expression.reference.clone(), |stack_trace: &mut Vec| { let node = &expression.node; - let value_a = execute_expression(log, stack_trace, stack, &node.a)?; - let value_b = execute_expression(log, stack_trace, stack, &node.b)?; + let value_a = execute_expression(log, stack_trace, stack, database, &node.a)?; + let value_b = execute_expression(log, stack_trace, stack, database, &node.b)?; match node.operation.node { BinaryExpressionOperation::NotEq => Ok(values::Boolean( !value_a @@ -324,11 +346,18 @@ pub fn execute_if_expression( log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, expression: &compile::AstNode>, ) -> ExpressionResult { - let condition = execute_expression(log, stack_trace, stack, &expression.node.condition)? - .downcast::(stack_trace)? - .0; + let condition = execute_expression( + log, + stack_trace, + stack, + database, + &expression.node.condition, + )? + .downcast::(stack_trace)? + .0; let expression = if condition { &expression.node.on_true @@ -336,18 +365,25 @@ pub fn execute_if_expression( &expression.node.on_false }; - execute_expression(log, stack_trace, stack, expression) + execute_expression(log, stack_trace, stack, database, expression) } #[cfg(test)] pub(crate) fn test_run(input: &str) -> ExpressionResult { use standard_environment::build_prelude; - let root = dbg!(compile::full_compile(input)); - let prelude = build_prelude(); + let root = compile::full_compile(input); + let database = BuiltinCallableDatabase::new(); + let prelude = build_prelude(&database); let mut stack = Stack::new(prelude); - execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root) + execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut stack, + &database, + &root, + ) } #[cfg(test)] diff --git a/crates/interpreter/src/execution/standard_environment.rs b/crates/interpreter/src/execution/standard_environment.rs index 44d667f..eb5fb35 100644 --- a/crates/interpreter/src/execution/standard_environment.rs +++ b/crates/interpreter/src/execution/standard_environment.rs @@ -2,43 +2,43 @@ use std::collections::HashMap; use common_data_types::{Dimension, Float}; -use crate::execution::values::{Scalar, ValueNone}; +use crate::execution::values::{BuiltinCallableDatabase, Scalar, ValueNone}; use super::values::{Dictionary, Value, ValueType}; /// Builds standard library. -pub fn build_prelude() -> HashMap { - let global = HashMap::from([("std".into(), build_std().into())]); +pub fn build_prelude(database: &BuiltinCallableDatabase) -> HashMap { + let global = HashMap::from([("std".into(), build_std(database).into())]); global } -fn build_std() -> Dictionary { +fn build_std(database: &BuiltinCallableDatabase) -> Dictionary { let std = HashMap::from([ - ("types".into(), build_types().into()), + ("types".into(), build_types(database).into()), ( "scalar".into(), - build_dimension_types(ValueType::Scalar).into(), + build_dimension_types(database, ValueType::Scalar).into(), ), ( "vector2".into(), - build_dimension_types(ValueType::Vector2).into(), + build_dimension_types(database, ValueType::Vector2).into(), ), ( "vector3".into(), - build_dimension_types(ValueType::Vector3).into(), + build_dimension_types(database, ValueType::Vector3).into(), ), ( "vector4".into(), - build_dimension_types(ValueType::Vector4).into(), + build_dimension_types(database, ValueType::Vector4).into(), ), - ("consts".into(), build_consts().into()), + ("consts".into(), build_consts(database).into()), ]); - Dictionary::from(std) + Dictionary::new(database, std) } /// Adds library for constants. -fn build_consts() -> Dictionary { +fn build_consts(database: &BuiltinCallableDatabase) -> Dictionary { let types: HashMap = HashMap::from_iter([ ("None".into(), ValueNone.into()), ( @@ -50,11 +50,11 @@ fn build_consts() -> Dictionary { .into(), ), ]); - Dictionary::from(types) + Dictionary::new(database, types) } /// Adds library for type safety. -fn build_types() -> Dictionary { +fn build_types(database: &BuiltinCallableDatabase) -> Dictionary { let types: HashMap = HashMap::from_iter( [ ("None".into(), ValueType::TypeNone.into()), @@ -69,10 +69,13 @@ fn build_types() -> Dictionary { ] .into_iter(), ); - Dictionary::from(types) + Dictionary::new(database, types) } -fn build_dimension_types(type_builder: impl Fn(Option) -> ValueType) -> Dictionary { +fn build_dimension_types( + database: &BuiltinCallableDatabase, + type_builder: impl Fn(Option) -> ValueType, +) -> Dictionary { let types: HashMap = HashMap::from_iter( units::list_named_dimensions() .map(|(name, dimension)| (name, Some(dimension))) @@ -80,5 +83,5 @@ fn build_dimension_types(type_builder: impl Fn(Option) -> ValueType) .map(move |(name, dimension)| (name.into(), type_builder(dimension).into())), ); - Dictionary::from(types) + Dictionary::new(database, types) } diff --git a/crates/interpreter/src/execution/values/boolean.rs b/crates/interpreter/src/execution/values/boolean.rs index f8d9563..da5465a 100644 --- a/crates/interpreter/src/execution/values/boolean.rs +++ b/crates/interpreter/src/execution/values/boolean.rs @@ -18,7 +18,10 @@ use crate::{ compile::SourceReference, - execution::{logging::RuntimeLog, values::StaticType}, + execution::{ + logging::RuntimeLog, + values::{closure::BuiltinCallableDatabase, StaticType}, + }, }; use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; @@ -27,7 +30,7 @@ use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Val pub struct Boolean(pub bool); impl Object for Boolean { - fn get_type(&self) -> ValueType { + fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { ValueType::Boolean } diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index dadccbb..257e9ab 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -16,7 +16,7 @@ * program. If not, see . */ -use std::{fmt::Display, sync::Arc}; +use std::{any::TypeId, collections::HashMap, fmt::Display, sync::Arc}; use hashable_map::HashableMap; @@ -28,12 +28,100 @@ use crate::{ find_value, logging::{RuntimeLog, StackScope}, stack::{ScopeType, Stack}, - values::{Dictionary, Value}, + values::{Dictionary, MissingAttributeError, Value}, }, }; use super::{Object, StaticTypeName, StructDefinition, ValueType}; +#[derive(Debug, Default)] +pub struct BuiltinCallableDatabase { + callables: HashMap, + names: HashMap, +} + +impl BuiltinCallableDatabase { + pub fn new() -> Self { + let mut database = Self::default(); + + super::scalar::register_methods(&mut database); + super::vector::register_methods(&mut database); + super::value_type::register_methods(&mut database); + + database + } + + fn register_internal( + &mut self, + forward: Box, + inverse: Option, + ) { + if self + .names + .insert(forward.name().to_string(), TypeId::of::()) + .is_some() + { + panic!("Duplicate bultin function name: {}", forward.name()); + } + + if self + .callables + .insert( + TypeId::of::(), + CallableStorage { + forward, + reverse: inverse, + }, + ) + .is_some() + { + panic!("Duplicate bultin function tag: {:?}", TypeId::of::()); + } + } + + pub fn register(&mut self, callable: Box) { + self.register_internal::(callable, Option::None); + } + + pub fn register_with_inverse( + &mut self, + forward: Box, + inverse: Box, + ) { + self.register_internal::(forward, Some(TypeId::of::())); + self.register_internal::(inverse, Some(TypeId::of::())); + } + + fn get_forward(&self, id: TypeId) -> &CallableStorage { + self.callables + .get(&id) + .expect("Forward callable was not present") + } + + fn get_inverse(&self, id: TypeId) -> Option { + let forward = self + .callables + .get(&id) + .expect("Forward callable was not present"); + + forward.reverse.clone() + } +} + +#[derive(Debug)] +struct CallableStorage { + forward: Box, + reverse: Option, +} + +impl std::ops::Deref for CallableStorage { + type Target = dyn BuiltinCallable; + + fn deref(&self) -> &Self::Target { + self.forward.as_ref() + } +} + /// Signature of a closure, used for type comparison. #[derive(Debug, Eq, PartialEq)] pub struct Signature { @@ -231,13 +319,19 @@ impl UserClosure { log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, source: &AstNode>, ) -> ExpressionResult { let argument_type = stack_trace.stack_scope( source.node.argument_type.reference.clone(), |stack_trace| { - let argument_type = - StructDefinition::new(log, stack_trace, stack, &source.node.argument_type)?; + let argument_type = StructDefinition::new( + log, + stack_trace, + stack, + database, + &source.node.argument_type, + )?; Ok(argument_type) }, @@ -245,7 +339,7 @@ impl UserClosure { let return_type = stack_trace.stack_scope(source.node.return_type.reference.clone(), |stack_trace| { - execute_expression(log, stack_trace, stack, &source.node.return_type)? + execute_expression(log, stack_trace, stack, database, &source.node.return_type)? .downcast::(stack_trace) })?; @@ -258,7 +352,7 @@ impl UserClosure { let mut captured_values = HashableMap::new(); find_all_variable_accesses_in_closure_capture(&source.node, &mut |field_name| { - let value = find_value(log, stack_trace, stack, [field_name])?; + let value = find_value(log, stack_trace, stack, database, [field_name])?; captured_values.insert(field_name.node.clone(), value); @@ -276,7 +370,7 @@ impl UserClosure { } impl Object for UserClosure { - fn get_type(&self) -> ValueType { + fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { ValueType::Closure(self.data.signature.clone()) } @@ -285,6 +379,7 @@ impl Object for UserClosure { log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, argument: Dictionary, ) -> ExpressionResult { self.data @@ -304,12 +399,13 @@ impl Object for UserClosure { stack.insert_value(name, value.clone()); } - let result = execute_expression(log, stack_trace, stack, &self.data.expression)?; + let result = + execute_expression(log, stack_trace, stack, database, &self.data.expression)?; self.data .signature .return_type - .check_other_qualifies(&result.get_type()) + .check_other_qualifies(&result.get_type(database)) .map_err(|error| error.to_error(stack_trace.iter()))?; Ok(result) @@ -323,12 +419,13 @@ impl StaticTypeName for UserClosure { } } -pub trait Callable: Sync + Send { +pub trait BuiltinCallable: Sync + Send { fn call( &self, runtime: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, argument: Dictionary, ) -> ExpressionResult; @@ -337,6 +434,15 @@ pub trait Callable: Sync + Send { fn signature(&self) -> &Arc; } +impl std::fmt::Debug for dyn BuiltinCallable { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("Builtin") + .field("name", &self.name()) + .field("signature", self.signature()) + .finish() + } +} + #[macro_export] macro_rules! build_member_from_sig { ($name:ident: $ty:ty) => { @@ -362,29 +468,29 @@ macro_rules! build_member_from_sig { #[macro_export] macro_rules! build_argument_signature_list { ($($arg:ident: $ty:path $(= $default:expr)?),*) => {{ - let list: [(String, crate::execution::values::value_type::StructMember); _] = [$($crate::build_member_from_sig!($arg: $ty $(= $default)?),)*]; + let list: [(String, $crate::execution::values::value_type::StructMember); _] = [$($crate::build_member_from_sig!($arg: $ty $(= $default)?),)*]; list }}; } #[macro_export] macro_rules! build_closure_signature { - (($($arg:ident: $ty:path $(= $default:expr)?),*) -> $return_type:path) => {{ + (($($arg:ident: $ty:path $(= $default:expr)?),*) -> $return_type:ty) => {{ let members = std::sync::Arc::new(hashable_map::HashableMap::from(std::collections::HashMap::from($crate::build_argument_signature_list!($($arg: $ty $(= $default)?),*)))); - std::sync::Arc::new(crate::execution::values::closure::Signature { + std::sync::Arc::new($crate::execution::values::closure::Signature { argument_type: crate::execution::values::StructDefinition { members, variadic: false, }, - return_type: $return_type, + return_type: <$return_type as $crate::execution::values::StaticType>::static_type(), }) }}; } #[macro_export] macro_rules! build_closure_type { - ($name:ident($($arg:ident: $ty:path $(= $default:expr)?),*) -> $return_type:path) => { + ($name:ident($($arg:ident: $ty:path $(= $default:expr)?),*) -> $return_type:ty) => { struct $name(pub $crate::execution::values::UserClosure); impl $crate::execution::values::StaticType for $name { @@ -427,22 +533,23 @@ macro_rules! build_closure_type { } #[macro_export] -macro_rules! build_function { - ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ - struct BuiltFunction, &mut Stack $(, $($ty),*)?) -> ExpressionResult> { +macro_rules! build_function_callable { + ($name:literal ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $database:ident: &BuiltinCallableDatabase $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block) => {{ + struct BuiltFunction, &mut Stack, &BuiltinCallableDatabase $(, $($ty),*)?) -> ExpressionResult<$crate::execution::values::Value>> { function: F, - signature: std::sync::Arc, + signature: std::sync::Arc<$crate::execution::values::closure::Signature>, } - impl, &mut Stack $(, $($ty),*)?) -> ExpressionResult + Send + Sync> crate::execution::values::closure::Callable for BuiltFunction { + impl, &mut Stack, &BuiltinCallableDatabase $(, $($ty),*)?) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync> $crate::execution::values::closure::BuiltinCallable for BuiltFunction { fn call( &self, runtime: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, - argument: crate::execution::values::Dictionary, - ) -> crate::execution::errors::ExpressionResult { - use crate::execution::errors::Raise; + database: &BuiltinCallableDatabase, + argument: $crate::execution::values::Dictionary, + ) -> $crate::execution::errors::ExpressionResult<$crate::execution::values::Value> { + use $crate::execution::errors::Raise; self.signature .argument_type .check_other_qualifies(argument.struct_def()) @@ -455,37 +562,56 @@ macro_rules! build_function { $($(let $arg: $ty = _data.members.remove(stringify!($arg)) .expect("Argument was not present after argument check.").downcast(stack_trace)?;)*)? - (self.function)(runtime, stack_trace, stack $(, $($arg),*)?) + (self.function)(runtime, stack_trace, stack, database $(, $($arg),*)?) } fn name(&self) -> &str { - stringify!($name) + $name } - fn signature(&self) -> &std::sync::Arc { + fn signature(&self) -> &std::sync::Arc<$crate::execution::values::closure::Signature> { &self.signature } } - crate::execution::values::closure::BuiltinFunction { - callable: std::sync::Arc::new(BuiltFunction { - function: move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack $(, $($arg: $ty),*)?| -> ExpressionResult { $code }, + BuiltFunction { + function: move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $database: &BuiltinCallableDatabase $(, $($arg: $ty),*)?| -> ExpressionResult<$crate::execution::values::Value> { let result: $return_type = $code?; Ok(result.into()) }, signature: $crate::build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type), - }) } }}; } #[macro_export] -macro_rules! build_method { - ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ - struct BuiltFunction, &mut crate::execution::Stack, S $(, $($ty),*)?) -> ExpressionResult> { +macro_rules! build_function { + ($database:ident, + forward = $ident:ident, $name:literal, ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $call_database:ident: &BuiltinCallableDatabase $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block + ) => {{ + let callable = $crate::build_function_callable!($name ($log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $call_database: &BuiltinCallableDatabase $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code); + + $database.register::<$ident>(Box::new(callable)) + }}; + ($database:ident, + forward = $forward_ident:ident, $forward_name:literal, ($forward_log:ident: &mut dyn RuntimeLog, $forward_stack_trace:ident: &mut Vec, $forward_stack:ident: &mut Stack, $forward_database:ident: &BuiltinCallableDatabase $(, $($forward_arg:ident: $forward_ty:path $(= $forward_default:expr)?),+)?) -> $forward_return_type:ty $forward_code:block, + reverse = $reverse_ident:ident, $reverse_name:literal, ($reverse_log:ident: &mut dyn RuntimeLog, $reverse_stack_trace:ident: &mut Vec, $reverse_stack:ident: &mut Stack, $reverse_database:ident: &BuiltinCallableDatabase $(, $($reverse_arg:ident: $reverse_ty:path $(= $reverse_default:expr)?),+)?) -> $reverse_return_type:ty $reverse_code:block + ) => {{ + let forward = $crate::build_function_callable!($forward_name ($forward_log: &mut dyn RuntimeLog, $forward_stack_trace: &mut Vec, $forward_stack: &mut Stack, $forward_database: &BuiltinCallableDatabase $(, $($forward_arg: $forward_ty $(= $forward_default)?),+)?) -> $forward_return_type $forward_code); + let reverse = $crate::build_function_callable!($reverse_name ($reverse_log: &mut dyn RuntimeLog, $reverse_stack_trace: &mut Vec, $reverse_stack: &mut Stack, $reverse_database: &BuiltinCallableDatabase $(, $($reverse_arg: $reverse_ty $(= $reverse_default)?),+)?) -> $reverse_return_type $reverse_code); + + $database.register_with_inverse::<$forward_ident, $reverse_ident>(Box::new(forward), Box::new(reverse)) + }}; +} + +#[macro_export] +macro_rules! build_method_callable { + ($name:expr, ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $database:ident: &BuiltinCallableDatabase, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block) => {{ + struct BuiltFunction, &mut crate::execution::Stack, &BuiltinCallableDatabase, S $(, $($ty),*)?) -> ExpressionResult> { function: F, signature: std::sync::Arc, + name: String, _self_type: std::marker::PhantomData } - impl, &mut $crate::execution::Stack, S $(, $($ty),*)?) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync> $crate::execution::values::closure::Callable for BuiltFunction + impl, &mut $crate::execution::Stack, &BuiltinCallableDatabase, S $(, $($ty),*)?) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync> $crate::execution::values::closure::BuiltinCallable for BuiltFunction where S: Send + Sync + Clone + StaticTypeName, $crate::execution::values::Value: enum_downcast::AsVariant @@ -495,6 +621,7 @@ macro_rules! build_method { runtime: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut $crate::execution::Stack, + database: &BuiltinCallableDatabase, argument: $crate::execution::values::Dictionary, ) -> $crate::execution::errors::ExpressionResult<$crate::execution::values::Value> { use $crate::execution::errors::Raise; @@ -519,11 +646,11 @@ macro_rules! build_method { $($(let $arg: $ty = _data.members.remove(stringify!($arg)) .expect("Argument was not present after argument check.").downcast(stack_trace)?;)*)? - (self.function)(runtime, stack_trace, stack, this $(, $($arg),*)?) + (self.function)(runtime, stack_trace, stack, database, this $(, $($arg),*)?) } fn name(&self) -> &str { - stringify!($name) + &self.name } fn signature(&self) -> &std::sync::Arc<$crate::execution::values::closure::Signature> { @@ -531,57 +658,47 @@ macro_rules! build_method { } } - $crate::execution::values::closure::BuiltinFunction { - callable: std::sync::Arc::new(BuiltFunction { - function: - move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut $crate::execution::Stack, $this: $this_type $(, $($arg: $ty),*)?| -> $crate::execution::ExpressionResult { $code }, - signature: $crate::build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type), - _self_type: std::marker::PhantomData - }) + BuiltFunction { + function: move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $database: &BuiltinCallableDatabase, $this: $this_type $(, $($arg: $ty),*)?| -> ExpressionResult<$crate::execution::values::Value> { let result: $return_type = $code?; Ok(result.into()) }, + signature: $crate::build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type), + name: $name.into(), + _self_type: std::marker::PhantomData } }}; } #[macro_export] -macro_rules! static_method { - ($name:ident ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $this:ident: $this_type:path $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block) => {{ - static METHOD: std::sync::OnceLock = std::sync::OnceLock::new(); - METHOD.get_or_init(|| $crate::build_method!($name ($log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $this: $this_type $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code).into()) - }}; -} +macro_rules! build_method { + ($database:ident, + forward = $ident:ty, $name:expr, ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $call_database:ident: &BuiltinCallableDatabase, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block + ) => {{ + let callable = $crate::build_method_callable!($name, ($log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $call_database: &BuiltinCallableDatabase, $this: $this_type $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code); -#[derive(Clone)] -pub struct BuiltinFunction { - pub callable: Arc, + $database.register::<$ident>(Box::new(callable)) + }}; + ($database:ident, + forward = $forward_ident:ty, $forward_name:expr, ($forward_log:ident: &mut dyn RuntimeLog, $forward_stack_trace:ident: &mut Vec, $forward_stack:ident: &mut Stack, $forward_call_database:ident: &BuiltinCallableDatabase, $forward_this:ident: $forward_this_type:ty $(, $($forward_arg:ident: $forward_ty:path $(= $forward_default:expr)?),+)?) -> $forward_return_type:path $forward_code:block, + reverse = $reverse_ident:ty, $reverse_name:expr, ($reverse_log:ident: &mut dyn RuntimeLog, $reverse_stack_trace:ident: &mut Vec, $reverse_stack:ident: &mut Stack, $reverse_call_database:ident: &BuiltinCallableDatabase, $reverse_this:ident: $reverse_this_type:ty $(, $($reverse_arg:ident: $reverse_ty:path $(= $reverse_default:expr)?),+)?) -> $reverse_return_type:path $reverse_code:block + ) => {{ + let forward = $crate::build_method_callable!($forward_name, ($forward_log: &mut dyn RuntimeLog, $forward_stack_trace: &mut Vec, $forward_stack: &mut Stack, $forward_call_database: &BuiltinCallableDatabase, $forward_this: $forward_this_type $(, $($forward_arg: $forward_ty $(= $forward_default)?),+)?) -> $forward_return_type $forward_code); + let reverse = $crate::build_method_callable!($reverse_name, ($reverse_log: &mut dyn RuntimeLog, $reverse_stack_trace: &mut Vec, $reverse_stack: &mut Stack, $reverse_call_database: &BuiltinCallableDatabase, $reverse_this: $reverse_this_type $(, $($reverse_arg: $reverse_ty $(= $reverse_default)?),+)?) -> $reverse_return_type $reverse_code); + + $database.register_with_inverse::<$forward_ident, $reverse_ident>(Box::new(forward), Box::new(reverse)) + }}; } -impl std::fmt::Debug for BuiltinFunction { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("BuiltinFunction") - .field("name", &self.callable.name()) - .field("signature", self.callable.signature()) - .finish() - } -} +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct BuiltinFunction(pub TypeId); impl BuiltinFunction { - pub fn new(function: Arc) -> BuiltinFunction { - BuiltinFunction { callable: function } - } -} - -impl Eq for BuiltinFunction {} - -impl PartialEq for BuiltinFunction { - fn eq(&self, other: &Self) -> bool { - self.callable.signature() == other.callable.signature() - && self.callable.name() == other.callable.name() + pub fn new() -> Self { + Self(TypeId::of::()) } } impl Object for BuiltinFunction { - fn get_type(&self) -> ValueType { - ValueType::Closure(self.callable.signature().clone()) + fn get_type(&self, callable_database: &BuiltinCallableDatabase) -> ValueType { + ValueType::Closure(callable_database.get_forward(self.0).signature().clone()) } fn call( @@ -589,9 +706,39 @@ impl Object for BuiltinFunction { log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + callable_database: &BuiltinCallableDatabase, argument: Dictionary, ) -> ExpressionResult { - self.callable.call(log, stack_trace, stack, argument) + callable_database.get_forward(self.0).call( + log, + stack_trace, + stack, + callable_database, + argument, + ) + } + + // TODO the user should be able to get the inverse function. + fn get_attribute( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + callable_database: &BuiltinCallableDatabase, + attribute: &str, + ) -> ExpressionResult { + match attribute { + "inverse" => { + if let Some(inverse) = callable_database.get_inverse(self.0) { + Ok(BuiltinFunction(inverse).into()) + } else { + todo!() + } + } + _ => Err(MissingAttributeError { + name: attribute.into(), + } + .to_error(stack_trace)), + } } } @@ -764,95 +911,224 @@ mod test { #[test] fn builtin_function_no_args() { - let test_function = build_function!( - test_function(_log: &mut dyn RuntimeLog, _stack_trace: &mut Vec, _stack: &mut Stack) -> ValueType::UnsignedInteger { - Ok(values::UnsignedInteger::from(846).into()) + let mut database = BuiltinCallableDatabase::default(); + + struct TestFunction; + build_function!( + database, + forward = TestFunction, "test_function", ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase + ) -> UnsignedInteger { + Ok(values::UnsignedInteger::from(846)) } ); use crate::execution::standard_environment::build_prelude; let root = crate::compile::full_compile("test_function()"); - let prelude = build_prelude(); + let prelude = build_prelude(&database); let mut stack = Stack::new(prelude); - stack.insert_value("test_function", test_function.into()); + stack.insert_value( + "test_function", + BuiltinFunction::new::().into(), + ); - let product = - execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut stack, + &database, + &root, + ) + .unwrap(); assert_eq!(product, values::UnsignedInteger::from(846).into()); } #[test] fn builtin_function_with_args() { - let test_function = build_function!( - test_function(_log: &mut dyn RuntimeLog, _stack_trace: &mut Vec, _stack: &mut Stack, a: UnsignedInteger, b: UnsignedInteger) -> ValueType::UnsignedInteger { - Ok(values::UnsignedInteger::from(a.0 + b.0).into()) + let mut database = BuiltinCallableDatabase::default(); + + struct TestFunction; + build_function!( + database, + forward = TestFunction, "test_function", ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + a: UnsignedInteger, + b: UnsignedInteger + ) -> UnsignedInteger { + Ok(values::UnsignedInteger::from(a.0 + b.0)) } ); use crate::execution::standard_environment::build_prelude; let root = crate::compile::full_compile("test_function(a = 1u, b = 2u)"); - let prelude = build_prelude(); + let prelude = build_prelude(&database); let mut stack = Stack::new(prelude); - stack.insert_value("test_function", test_function.into()); + stack.insert_value( + "test_function", + BuiltinFunction::new::().into(), + ); - let product = - execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut stack, + &database, + &root, + ) + .unwrap(); assert_eq!(product, values::UnsignedInteger::from(3).into()); } + #[test] + fn builtin_function_with_inverse() { + let mut database = BuiltinCallableDatabase::default(); + + struct TestFunction; + struct TestInverse; + build_function!( + database, + forward = TestFunction, "test_function", ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + input: UnsignedInteger + ) -> UnsignedInteger { + Ok(values::UnsignedInteger::from(input.0 + 1)) + }, + reverse = TestInverse, "test_inverse", ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + input: UnsignedInteger + ) -> UnsignedInteger { + Ok(values::UnsignedInteger::from(input.0 - 1)) + } + ); + + use crate::execution::standard_environment::build_prelude; + + let root = crate::compile::full_compile("test_inverse(input = test_function(input = 1u))"); + let prelude = build_prelude(&database); + let mut stack = Stack::new(prelude); + stack.insert_value( + "test_function", + BuiltinFunction::new::().into(), + ); + stack.insert_value("test_inverse", BuiltinFunction::new::().into()); + + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut stack, + &database, + &root, + ) + .unwrap(); + + assert_eq!(product, values::UnsignedInteger::from(1).into()); + } + #[test] fn builtin_function_with_default_value() { - let test_function = build_function!( - test_function(_log: &mut dyn RuntimeLog, _stack_trace: &mut Vec, _stack: &mut Stack, a: UnsignedInteger, b: UnsignedInteger = UnsignedInteger::from(2).into()) -> ValueType::UnsignedInteger { - Ok(values::UnsignedInteger::from(a.0 + b.0).into()) + let mut database = BuiltinCallableDatabase::default(); + struct TestFunction; + build_function!( + database, + forward = TestFunction, "test_function", ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + a: UnsignedInteger, + b: UnsignedInteger = UnsignedInteger::from(2).into() + ) -> UnsignedInteger { + Ok(values::UnsignedInteger::from(a.0 + b.0)) } ); use crate::execution::standard_environment::build_prelude; let root = crate::compile::full_compile("test_function(a = 1u)"); - let prelude = build_prelude(); + let prelude = build_prelude(&database); let mut stack = Stack::new(prelude); - stack.insert_value("test_function", test_function.into()); + stack.insert_value( + "test_function", + BuiltinFunction::new::().into(), + ); - let product = - execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut stack, + &database, + &root, + ) + .unwrap(); assert_eq!(product, values::UnsignedInteger::from(3).into()); } #[test] fn builtin_function_captured_value() { + let mut database = BuiltinCallableDatabase::default(); let b = 2; - let test_function = build_function!( - test_function(_log: &mut dyn RuntimeLog, _stack_trace: &mut Vec, _stack: &mut Stack, a: UnsignedInteger) -> ValueType::UnsignedInteger { - Ok(values::UnsignedInteger::from(a.0 + b).into()) + struct TestFunction; + build_function!( + database, + forward = TestFunction, "test_function", ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + a: UnsignedInteger + ) -> UnsignedInteger { + Ok(values::UnsignedInteger::from(a.0 + b)) } ); use crate::execution::standard_environment::build_prelude; let root = crate::compile::full_compile("test_function(a = 1u)"); - let prelude = build_prelude(); + let prelude = build_prelude(&database); let mut stack = Stack::new(prelude); - stack.insert_value("test_function", test_function.into()); + stack.insert_value( + "test_function", + BuiltinFunction::new::().into(), + ); - let product = - execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut stack, + &database, + &root, + ) + .unwrap(); assert_eq!(product, values::UnsignedInteger::from(3).into()); } #[test] fn builtin_method() { - let test_method = build_method!( - test_method(log: &mut dyn RuntimeLog, stack_trace: &mut Vec, _stack: &mut Stack, this: Dictionary) -> ValueType::UnsignedInteger { - this.get_attribute(log, stack_trace, "value") + let mut database = BuiltinCallableDatabase::default(); + struct TestMethod; + build_method!( + database, + forward = TestMethod, "test_method", (log: &mut dyn RuntimeLog, stack_trace: &mut Vec, _stack: &mut Stack, database: &BuiltinCallableDatabase, this: Dictionary) -> Value { + this.get_attribute(log, stack_trace, database, "value") } ); @@ -861,23 +1137,43 @@ mod test { let root = crate::compile::full_compile( "let object = (value = 5u, test_method = provided_test_method); in object::test_method()", ); - let prelude = build_prelude(); + let prelude = build_prelude(&database); let mut stack = Stack::new(prelude); - stack.insert_value("provided_test_method", test_method.into()); + stack.insert_value( + "provided_test_method", + BuiltinFunction::new::().into(), + ); - let product = - execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut stack, + &database, + &root, + ) + .unwrap(); assert_eq!(product, values::UnsignedInteger::from(5).into()); } #[test] fn builtin_method_with_argument() { - let test_method = build_method!( - test_method(log: &mut dyn RuntimeLog, stack_trace: &mut Vec, _stack: &mut Stack, this: Dictionary, to_add: UnsignedInteger) -> ValueType::UnsignedInteger { - let value: UnsignedInteger = this.get_attribute(log, stack_trace, "value")?.downcast(stack_trace)?; + let mut database = BuiltinCallableDatabase::default(); + struct TestMethod; - Ok(values::UnsignedInteger::from(value.0 + to_add.0).into()) + build_method!( + database, + forward = TestMethod, "test_method", ( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: Dictionary, + to_add: UnsignedInteger + ) -> UnsignedInteger { + let value: UnsignedInteger = this.get_attribute(log, stack_trace, database, "value")?.downcast(stack_trace)?; + + Ok(values::UnsignedInteger::from(value.0 + to_add.0)) } ); @@ -886,13 +1182,84 @@ mod test { let root = crate::compile::full_compile( "let object = (value = 5u, test_method = provided_test_method); in object::test_method(to_add = 10u)", ); - let prelude = build_prelude(); + + let prelude = build_prelude(&database); let mut stack = Stack::new(prelude); - stack.insert_value("provided_test_method", test_method.into()); + stack.insert_value( + "provided_test_method", + BuiltinFunction::new::().into(), + ); - let product = - execute_expression(&mut Vec::new(), &mut Vec::new(), &mut stack, &root).unwrap(); + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut stack, + &database, + &root, + ) + .unwrap(); assert_eq!(product, values::UnsignedInteger::from(15).into()); } + + #[test] + fn builtin_method_with_inverse() { + let mut database = BuiltinCallableDatabase::default(); + struct TestMethod; + struct InverseMethod; + build_method!( + database, + forward = TestMethod, "test_method", ( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: Dictionary, + input: UnsignedInteger + ) -> UnsignedInteger { + let value: UnsignedInteger = this.get_attribute(log, stack_trace, database, "value")?.downcast(stack_trace)?; + + Ok(UnsignedInteger::from(input.0 + value.0)) + }, + reverse = InverseMethod, "reverse_method", ( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: Dictionary, + input: UnsignedInteger + ) -> UnsignedInteger { + let value: UnsignedInteger = this.get_attribute(log, stack_trace, database, "value")?.downcast(stack_trace)?; + + Ok(UnsignedInteger::from(input.0 - value.0)) + } + ); + + use crate::execution::standard_environment::build_prelude; + + let root = crate::compile::full_compile( + "let object = (value = 5u, test_method = provided_test_method, inverse_method = provided_inverse_method); in object::inverse_method(input = object::test_method(input = 2u))", + ); + let prelude = build_prelude(&database); + let mut stack = Stack::new(prelude); + stack.insert_value( + "provided_test_method", + BuiltinFunction::new::().into(), + ); + stack.insert_value( + "provided_inverse_method", + BuiltinFunction::new::().into(), + ); + + let product = execute_expression( + &mut Vec::new(), + &mut Vec::new(), + &mut stack, + &database, + &root, + ) + .unwrap(); + + assert_eq!(product, values::UnsignedInteger::from(2).into()); + } } diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index 849721c..6abc27f 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -27,7 +27,7 @@ use crate::{ errors::{ErrorType, ExpressionResult, Raise as _}, logging::RuntimeLog, stack::{ScopeType, Stack}, - values::StaticType, + values::closure::BuiltinCallableDatabase, }, }; @@ -53,7 +53,7 @@ pub struct Dictionary { } impl Object for Dictionary { - fn get_type(&self) -> ValueType { + fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { self.data.struct_def.clone().into() } @@ -61,6 +61,7 @@ impl Object for Dictionary { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _callable_database: &BuiltinCallableDatabase, attribute: &str, ) -> ExpressionResult { if let Some(member) = self.data.members.get(attribute) { @@ -80,35 +81,6 @@ impl StaticTypeName for Dictionary { } } -// TODO we should derive StaticType for structs that can be used to automatically unpack -// dictionaries. - -impl From> for Dictionary { - fn from(map: HashMap) -> Self { - let mut struct_members = HashMap::with_capacity(map.len()); - - for (name, value) in map.iter() { - let member = StructMember { - ty: value.get_type(), - default: None, - }; - - struct_members.insert(name.clone(), member); - } - - // HashableMap is just a wrapper around HashMap, so this has no additional cost. - let data = Arc::new(DictionaryData { - members: HashableMap::from(map), - struct_def: StructDefinition { - members: Arc::new(HashableMap::from(struct_members)), - variadic: false, - }, - }); - - Self { data } - } -} - impl Dictionary { pub fn struct_def(&self) -> &StructDefinition { &self.data.struct_def @@ -118,6 +90,7 @@ impl Dictionary { log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, ast_node: &AstNode, ) -> ExpressionResult { let mut members = HashMap::with_capacity(ast_node.node.assignments.len()); @@ -125,8 +98,13 @@ impl Dictionary { stack.scope(stack_trace, ScopeType::Inherited, |stack, stack_trace| { for assignment in ast_node.node.assignments.iter() { let name = assignment.node.name.node.clone(); - let value = - execute_expression(log, stack_trace, stack, &assignment.node.assignment)?; + let value = execute_expression( + log, + stack_trace, + stack, + database, + &assignment.node.assignment, + )?; if members.insert(name.clone(), value.clone()).is_some() { // That's a duplicate member. @@ -142,7 +120,31 @@ impl Dictionary { Ok(()) })??; - Ok(Self::from(members)) + Ok(Self::new(database, members)) + } + + pub fn new(database: &BuiltinCallableDatabase, map: HashMap) -> Self { + let mut struct_members = HashMap::with_capacity(map.len()); + + for (name, value) in map.iter() { + let member = StructMember { + ty: value.get_type(database), + default: None, + }; + + struct_members.insert(name.clone(), member); + } + + // HashableMap is just a wrapper around HashMap, so this has no additional cost. + let data = Arc::new(DictionaryData { + members: HashableMap::from(map), + struct_def: StructDefinition { + members: Arc::new(HashableMap::from(struct_members)), + variadic: false, + }, + }); + + Self { data } } pub fn iter(&self) -> impl Iterator { diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index 64b2601..8ba852d 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -31,7 +31,7 @@ use crate::{ execution::{ errors::{ExpressionResult, GenericFailure, Raise}, logging::RuntimeLog, - values::StaticType, + values::{closure::BuiltinCallableDatabase, StaticType}, }, }; @@ -70,7 +70,7 @@ where Self: StaticTypeName + Into, Value: AsVariant, { - fn get_type(&self) -> ValueType { + fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { I::get_type() } diff --git a/crates/interpreter/src/execution/values/list.rs b/crates/interpreter/src/execution/values/list.rs index 91ec451..f1a75aa 100644 --- a/crates/interpreter/src/execution/values/list.rs +++ b/crates/interpreter/src/execution/values/list.rs @@ -19,7 +19,11 @@ use crate::{ compile::{AstNode, Expression, SourceReference}, execute_expression, - execution::{logging::RuntimeLog, stack::Stack, values::StaticType}, + execution::{ + logging::RuntimeLog, + stack::Stack, + values::{closure::BuiltinCallableDatabase, StaticType}, + }, }; use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; @@ -41,34 +45,33 @@ impl List { log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, ast_node: &AstNode>>, ) -> ExpressionResult { let values: ExpressionResult> = ast_node .node .iter() - .map(|expression| execute_expression(log, stack_trace, stack, expression)) + .map(|expression| execute_expression(log, stack_trace, stack, database, expression)) .collect(); - Ok(List::from_iter(values?)) + Ok(List::from_iter(database, values?)) } -} -impl FromIterator for List { - fn from_iter(iterator: I) -> Self + pub fn from_iter(database: &BuiltinCallableDatabase, iterator: I) -> Self where I: IntoIterator, { let values: Vec<_> = iterator.into_iter().collect(); - let internal_type = if let Some(initial_type) = values.first().map(|first| first.get_type()) - { - Some(values.iter().fold(initial_type, |accumulated, next| { - accumulated.merge(next.get_type()) - })) - } else { - // This is an empty list. - None - }; + let internal_type = + if let Some(initial_type) = values.first().map(|first| first.get_type(database)) { + Some(values.iter().fold(initial_type, |accumulated, next| { + accumulated.merge(next.get_type(database)) + })) + } else { + // This is an empty list. + None + }; Self { internal_type, @@ -78,7 +81,7 @@ impl FromIterator for List { } impl Object for List { - fn get_type(&self) -> ValueType { + fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { ValueType::List(self.internal_type.clone().map(Box::new)) } @@ -115,46 +118,59 @@ mod test { #[test] fn create_empty() { + let database = BuiltinCallableDatabase::default(); let product = test_run("[]").unwrap(); - assert_eq!(product, List::from_iter([]).into()); + assert_eq!(product, List::from_iter(&database, []).into()); } #[test] fn create() { + let database = BuiltinCallableDatabase::default(); let product = test_run("[1u, 2u, 3u]").unwrap(); assert_eq!( product, - List::from_iter([ - values::UnsignedInteger::from(1).into(), - values::UnsignedInteger::from(2).into(), - values::UnsignedInteger::from(3).into() - ]) + List::from_iter( + &database, + [ + values::UnsignedInteger::from(1).into(), + values::UnsignedInteger::from(2).into(), + values::UnsignedInteger::from(3).into() + ] + ) .into() ); } #[test] fn create_multi_type() { + let database = BuiltinCallableDatabase::default(); let product = test_run("[1u, 2i, 3u]").unwrap(); assert_eq!( product, - List::from_iter([ - values::UnsignedInteger::from(1).into(), - values::SignedInteger::from(2).into(), - values::UnsignedInteger::from(3).into() - ]) + List::from_iter( + &database, + [ + values::UnsignedInteger::from(1).into(), + values::SignedInteger::from(2).into(), + values::UnsignedInteger::from(3).into() + ] + ) .into() ); } #[test] fn type_detection() { + let database = BuiltinCallableDatabase::default(); assert_eq!( - List::from_iter([ - values::UnsignedInteger::from(1).into(), - values::SignedInteger::from(2).into(), - values::UnsignedInteger::from(3).into() - ]) + List::from_iter( + &database, + [ + values::UnsignedInteger::from(1).into(), + values::SignedInteger::from(2).into(), + values::UnsignedInteger::from(3).into() + ] + ) .internal_type, Some(ValueType::MultiType( Box::new(ValueType::UnsignedInteger), diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index e3438c4..7ddb197 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -45,7 +45,7 @@ mod vector; pub use vector::{Vector2, Vector3, Vector4}; mod closure; -pub use closure::{BuiltinFunction, UserClosure}; +pub use closure::{BuiltinCallableDatabase, BuiltinFunction, UserClosure}; mod dictionary; pub use dictionary::Dictionary; @@ -120,7 +120,7 @@ impl Display for MissingAttributeError { #[enum_dispatch] pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { - fn get_type(&self) -> ValueType; + fn get_type(&self, callable_database: &BuiltinCallableDatabase) -> ValueType; // fn format( // &self, @@ -269,6 +269,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _callable_database: &BuiltinCallableDatabase, attribute: &str, ) -> ExpressionResult { Err(MissingAttributeError { @@ -281,6 +282,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { _log: &mut dyn RuntimeLog, stack_trace: &mut Vec, _stack: &mut Stack, + _callable_database: &BuiltinCallableDatabase, _argument: Dictionary, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "call") diff --git a/crates/interpreter/src/execution/values/scalar.rs b/crates/interpreter/src/execution/values/scalar.rs index 940821e..6b07516 100644 --- a/crates/interpreter/src/execution/values/scalar.rs +++ b/crates/interpreter/src/execution/values/scalar.rs @@ -20,13 +20,17 @@ use std::{borrow::Cow, cmp::Ordering, f64::consts::PI}; use common_data_types::{Dimension, Float, FloatIsNan}; use crate::{ + build_method, compile::SourceReference, execution::{ errors::{ExpressionResult, GenericFailure, Raise}, logging::RuntimeLog, - values::{self, MissingAttributeError, StaticType, Vector2}, + values::{ + self, closure::BuiltinCallableDatabase, Boolean, BuiltinFunction, + MissingAttributeError, SignedInteger, StaticType, UnsignedInteger, Vector2, + }, + Stack, }, - static_method, }; use super::{value_type::ValueType, DowncastError, Object, StaticTypeName, Value}; @@ -53,7 +57,7 @@ pub struct Scalar { } impl Object for Scalar { - fn get_type(&self) -> ValueType { + fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { ValueType::Scalar(Some(self.dimension)) } @@ -274,503 +278,52 @@ impl Object for Scalar { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _callable_database: &BuiltinCallableDatabase, attribute: &str, ) -> ExpressionResult { match attribute { - "to_signed_integer" => Ok(static_method!( - Scalar_to_signed_integer( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::SignedInteger - { - if this.dimension.is_zero_dimension() { - Ok(values::SignedInteger::from(*this.value as i64).into()) - } else { - Err(GenericFailure("Only zero dimensional scalars can be converted into an integer") - .to_error(stack_trace.iter())) - } - }).clone()), - "to_unsigned_integer" => Ok(static_method!( - Scalar_to_unsigned_integer( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::UnsignedInteger - { - if this.dimension.is_zero_dimension() { - if *this.value >= 0.0 { - Ok(values::UnsignedInteger::from(*this.value as u64).into()) - } else { - Err(GenericFailure("Negative values cannot be converted to signed integers") - .to_error(stack_trace.iter())) - } - } else { - Err(GenericFailure("Only zero dimensional scalars can be converted into an integer") - .to_error(stack_trace.iter())) - } - }).clone()), - "abs" => Ok(static_method!( - Scalar_abs( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::UnsignedInteger - { - Ok(Self { - dimension: this.dimension, - value: Float::new(this.value.abs()).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "clamp" => Ok(static_method!( - Scalar_clamp( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self, - min: Value, - max: Value) -> ValueType::UnsignedInteger - { - let min = this.unpack_same_dimension(stack_trace, min)?; - let max = this.unpack_same_dimension(stack_trace, max)?; - - Ok(Self { - dimension: this.dimension, - value: this.value.clamp(min.value, max.value) - }.into()) - }).clone()), - "copysign" => Ok(static_method!( - Scalar_copysign( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self, - sign: Zero) -> ValueType::UnsignedInteger - { - Ok(Self { - dimension: Dimension::zero(), - value: Float::new(this.value.copysign(*sign.value)).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "hypot" => Ok(static_method!( - Scalar_hypot( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self, - other: Value) -> ValueType::UnsignedInteger - { - let other = this.unpack_same_dimension(stack_trace, other)?; - - Ok(Self { - dimension: Dimension::zero(), - value: Float::new(this.value.hypot(*other.value)).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "is_finite" => Ok(static_method!( - Scalar_is_finite( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - Ok(values::Boolean(this.value.is_finite()).into()) - }).clone()), - "is_infinite" => Ok(static_method!( - Scalar_is_infinite( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - Ok(values::Boolean(this.value.is_infinite()).into()) - }).clone()), - "is_normal" => Ok(static_method!( - Scalar_is_normal( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - Ok(values::Boolean(this.value.is_normal()).into()) - }).clone()), - "cbrt" => Ok(static_method!( - Scalar_cbrt( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - Ok(Self { - dimension: this.dimension / 3, - value: Float::new(this.value.cbrt()).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "pow" => Ok(static_method!( - Scalar_pow( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self, - exp: Zero) -> ValueType::Boolean - { - Ok(Self { - dimension: this.dimension * *exp.value as i8, - value: Float::new(this.value.powf(*exp.value)).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "sqrt" => Ok(static_method!( - Scalar_sqrt( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - Ok(Self { - dimension: this.dimension / 2, - value: Float::new(this.value.sqrt()).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "is_sign_negative" => Ok(static_method!( - Scalar_is_sign_negative( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - Ok(values::Boolean(this.value.is_sign_negative()).into()) - }).clone()), - "is_sign_positive" => Ok(static_method!( - Scalar_is_sign_positive( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - Ok(values::Boolean(this.value.is_sign_positive()).into()) - }).clone()), - "recip" => Ok(static_method!( - Scalar_recip( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - Ok(Self { - dimension: -this.dimension, - value: Float::new(this.value.recip()).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "round" => Ok(static_method!( - Scalar_round( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self, - unit: Value) -> ValueType::Boolean - { - let unit = this.unpack_same_dimension(stack_trace, unit)?; - - let value = this.value / unit.value; - - Ok(Self { - dimension: this.dimension, - value: Float::new(value.round() * *unit.value).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "trunc" => Ok(static_method!( - Scalar_trunc( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self, - unit: Value) -> ValueType::Boolean - { - let unit = this.unpack_same_dimension(stack_trace, unit)?; - - let value = this.value / unit.value; - - Ok(Self { - dimension: this.dimension, - value: Float::new(value.trunc() * *unit.value).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "fract" => Ok(static_method!( - Scalar_fract( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self, - unit: Value) -> ValueType::Boolean - { - let unit = this.unpack_same_dimension(stack_trace, unit)?; - - let value = this.value / unit.value; - - Ok(Self { - dimension: this.dimension, - value: Float::new(value.fract() * *unit.value).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "floor" => Ok(static_method!( - Scalar_floor( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self, - unit: Value) -> ValueType::Boolean - { - let unit = this.unpack_same_dimension(stack_trace, unit)?; - - let value = this.value / unit.value; - - Ok(Self { - dimension: this.dimension, - value: Float::new(value.floor() * *unit.value).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "ceil" => Ok(static_method!( - Scalar_ceil( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self, - unit: Value) -> ValueType::Boolean - { - let unit = this.unpack_same_dimension(stack_trace, unit)?; - - let value = this.value / unit.value; - - Ok(Self { - dimension: this.dimension, - value: Float::new(value.ceil() * *unit.value).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "max" => Ok(static_method!( - Scalar_max( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self, - other: Value) -> ValueType::Boolean - { - let other = this.unpack_same_dimension(stack_trace, other)?; - - Ok(Self { - dimension: this.dimension, - value: this.value.max(other.value) - }.into()) - }).clone()), - "min" => Ok(static_method!( - Scalar_min( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self, - other: Value) -> ValueType::Boolean - { - let other = this.unpack_same_dimension(stack_trace, other)?; - - Ok(Self { - dimension: this.dimension, - value: this.value.min(other.value) - }.into()) - }).clone()), - "signum" => Ok(static_method!( - Scalar_signum( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - Ok(Self { - dimension: Dimension::zero(), - value: Float::new(this.value.signum()).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "acos" => Ok(static_method!( - Scalar_acos( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - this.check_inverse_trig_compatible(stack_trace)?; - - Ok(Self { - dimension: Dimension::angle(), - value: Float::new((this.value * PI).acos()).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "acosh" => Ok(static_method!( - Scalar_acosh( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - this.check_inverse_trig_compatible(stack_trace)?; - - Ok(Self { - dimension: Dimension::angle(), - value: Float::new((this.value).acosh() / PI).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "cos" => Ok(static_method!( - Scalar_cos( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - this.check_trig_compatible(stack_trace)?; - - Ok(Self { - dimension: Dimension::zero(), - value: Float::new((this.value * PI).cos()).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "cosh" => Ok(static_method!( - Scalar_cosh( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - this.check_trig_compatible(stack_trace)?; - - Ok(Self { - dimension: Dimension::zero(), - value: Float::new((this.value * PI).cosh()).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "asin" => Ok(static_method!( - Scalar_asin( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - this.check_inverse_trig_compatible(stack_trace)?; - - Ok(Self { - dimension: Dimension::angle(), - value: Float::new((this.value * PI).asin()).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "asinh" => Ok(static_method!( - Scalar_asinh( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - this.check_inverse_trig_compatible(stack_trace)?; - - Ok(Self { - dimension: Dimension::angle(), - value: Float::new((this.value).asinh() / PI).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "sin" => Ok(static_method!( - Scalar_sin( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - this.check_trig_compatible(stack_trace)?; - - Ok(Self { - dimension: Dimension::zero(), - value: Float::new((this.value * PI).sin()).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "sinh" => Ok(static_method!( - Scalar_sinh( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - this.check_trig_compatible(stack_trace)?; - - Ok(Self { - dimension: Dimension::zero(), - value: Float::new((this.value * PI).sinh()).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "cossin" => Ok(static_method!( - Scalar_cossin( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - this.check_trig_compatible(stack_trace)?; - - let (sin, cos) = (this.value * PI).sin_cos(); - Ok(Vector2::new(stack_trace, Dimension::zero(), [cos, sin])?.into()) - }).clone()), - "atan" => Ok(static_method!( - Scalar_atan( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - this.check_inverse_trig_compatible(stack_trace)?; - - Ok(Self { - dimension: Dimension::angle(), - value: Float::new((this.value * PI).atan()).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "atanh" => Ok(static_method!( - Scalar_atanh( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - this.check_inverse_trig_compatible(stack_trace)?; - - Ok(Self { - dimension: Dimension::angle(), - value: Float::new((this.value).atanh() / PI).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "tan" => Ok(static_method!( - Scalar_tan( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - this.check_trig_compatible(stack_trace)?; - - Ok(Self { - dimension: Dimension::zero(), - value: Float::new((this.value * PI).tan()).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), - "tanh" => Ok(static_method!( - Scalar_tanh( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Boolean - { - this.check_trig_compatible(stack_trace)?; - - Ok(Self { - dimension: Dimension::zero(), - value: Float::new((this.value * PI).tanh()).unwrap_not_nan(stack_trace)? - }.into()) - }).clone()), + "to_signed_integer" => Ok(BuiltinFunction::new::().into()), + "to_unsigned_integer" => { + Ok(BuiltinFunction::new::().into()) + } + "abs" => Ok(BuiltinFunction::new::().into()), + "clamp" => Ok(BuiltinFunction::new::().into()), + "copysign" => Ok(BuiltinFunction::new::().into()), + "hypot" => Ok(BuiltinFunction::new::().into()), + "is_finite" => Ok(BuiltinFunction::new::().into()), + "is_infinite" => Ok(BuiltinFunction::new::().into()), + "is_normal" => Ok(BuiltinFunction::new::().into()), + "cbrt" => Ok(BuiltinFunction::new::().into()), + "pow" => Ok(BuiltinFunction::new::().into()), + "sqrt" => Ok(BuiltinFunction::new::().into()), + "is_sign_negative" => Ok(BuiltinFunction::new::().into()), + "is_sign_positive" => Ok(BuiltinFunction::new::().into()), + "recip" => Ok(BuiltinFunction::new::().into()), + "round" => Ok(BuiltinFunction::new::().into()), + "trunc" => Ok(BuiltinFunction::new::().into()), + "fract" => Ok(BuiltinFunction::new::().into()), + "floor" => Ok(BuiltinFunction::new::().into()), + "ceil" => Ok(BuiltinFunction::new::().into()), + "max" => Ok(BuiltinFunction::new::().into()), + "min" => Ok(BuiltinFunction::new::().into()), + "signum" => Ok(BuiltinFunction::new::().into()), + "acos" => Ok(BuiltinFunction::new::().into()), + "acosh" => Ok(BuiltinFunction::new::().into()), + "cos" => Ok(BuiltinFunction::new::().into()), + "cosh" => Ok(BuiltinFunction::new::().into()), + "asin" => Ok(BuiltinFunction::new::().into()), + "asinh" => Ok(BuiltinFunction::new::().into()), + "sin" => Ok(BuiltinFunction::new::().into()), + "sinh" => Ok(BuiltinFunction::new::().into()), + "cossin" => Ok(BuiltinFunction::new::().into()), + "atan" => Ok(BuiltinFunction::new::().into()), + "atanh" => Ok(BuiltinFunction::new::().into()), + "tan" => Ok(BuiltinFunction::new::().into()), + "tanh" => Ok(BuiltinFunction::new::().into()), _ => Err(MissingAttributeError { name: attribute.into(), - }.to_error(stack_trace)), + } + .to_error(stack_trace)), } } @@ -865,6 +418,661 @@ impl Scalar { } } +mod methods { + pub struct ToSignedInteger; + pub struct ToUnsignedInteger; + pub struct Abs; + pub struct Clamp; + pub struct Copysign; + pub struct Hypot; + pub struct IsFinite; + pub struct IsInfinite; + pub struct IsNormal; + pub struct Cbrt; + pub struct Pow; + pub struct Sqrt; + pub struct IsSignNegative; + pub struct IsSignPositive; + pub struct Recip; + pub struct Round; + pub struct Trunc; + pub struct Fract; + pub struct Floor; + pub struct Ceil; + pub struct Max; + pub struct Min; + pub struct Signum; + pub struct Acos; + pub struct Acosh; + pub struct Cos; + pub struct Cosh; + pub struct Asin; + pub struct Asinh; + pub struct Sin; + pub struct Sinh; + pub struct CosSin; + pub struct Atan; + pub struct Atanh; + pub struct Tan; + pub struct Tanh; +} + +pub fn register_methods(database: &mut BuiltinCallableDatabase) { + // build_method!( + // database, + // forward = methods::Qualify, "ValueType::qualify", ( + // _log: &mut dyn RuntimeLog, + // stack_trace: &mut Vec, + // _stack: &mut Stack, + // database: &BuiltinCallableDatabase, + // this: ValueType, + // to_qualify: Value) -> ValueNone + // { + // this.check_other_qualifies(&to_qualify.get_type(database)).map_err(|error| error.to_error(stack_trace.iter()))?; + // Ok(values::ValueNone) + // } + // ); + build_method!( + database, + forward = methods::ToSignedInteger, "Scalar::to_signed_integer", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> SignedInteger + { + if this.dimension.is_zero_dimension() { + Ok(values::SignedInteger::from(*this.value as i64).into()) + } else { + Err(GenericFailure("Only zero dimensional scalars can be converted into an integer") + .to_error(stack_trace.iter())) + } + } + ); + build_method!( + database, + forward = methods::ToUnsignedInteger, "Scalar::to_unsigned_integer", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> UnsignedInteger + { + if this.dimension.is_zero_dimension() { + if *this.value >= 0.0 { + Ok(values::UnsignedInteger::from(*this.value as u64).into()) + } else { + Err(GenericFailure("Negative values cannot be converted to signed integers") + .to_error(stack_trace.iter())) + } + } else { + Err(GenericFailure("Only zero dimensional scalars can be converted into an integer") + .to_error(stack_trace.iter())) + } + } + ); + build_method!( + database, + forward = methods::Abs, "Scalar::abs", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + Ok(Scalar { + dimension: this.dimension, + value: Float::new(this.value.abs()).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Clamp, "Scalar::clamp", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar, + min: Value, + max: Value) -> Scalar + { + let min = this.unpack_same_dimension(stack_trace, min)?; + let max = this.unpack_same_dimension(stack_trace, max)?; + + Ok(Scalar { + dimension: this.dimension, + value: this.value.clamp(min.value, max.value) + }) + } + ); + build_method!( + database, + forward = methods::Copysign, "Scalar::copysign", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar, + sign: Zero) -> Scalar + { + Ok(Scalar { + dimension: Dimension::zero(), + value: Float::new(this.value.copysign(*sign.value)).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Hypot, "Scalar::hypot", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar, + other: Value) -> Scalar + { + let other = this.unpack_same_dimension(stack_trace, other)?; + + Ok(Scalar { + dimension: Dimension::zero(), + value: Float::new(this.value.hypot(*other.value)).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::IsFinite, "Scalar::is_finite", ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Boolean + { + Ok(values::Boolean(this.value.is_finite())) + } + ); + build_method!( + database, + forward = methods::IsInfinite, "Scalar::is_infinite", ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Boolean + { + Ok(values::Boolean(this.value.is_infinite())) + } + ); + build_method!( + database, + forward = methods::IsNormal, "Scalar::is_normal", ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Boolean + { + Ok(values::Boolean(this.value.is_normal()).into()) + } + ); + build_method!( + database, + forward = methods::Cbrt, "Scalar::cbrt", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + Ok(Scalar { + dimension: this.dimension / 3, + value: Float::new(this.value.cbrt()).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Pow, "Scalar::pow", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar, + exp: Zero) -> Scalar + { + Ok(Scalar { + dimension: this.dimension * *exp.value as i8, + value: Float::new(this.value.powf(*exp.value)).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Sqrt, "Scalar::sqrt", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + Ok(Scalar { + dimension: this.dimension / 2, + value: Float::new(this.value.sqrt()).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::IsSignNegative, "Scalar::is_sign_negative", ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Boolean + { + Ok(Boolean(this.value.is_sign_negative())) + } + ); + build_method!( + database, + forward = methods::IsSignPositive, "Scalar::is_sign_positive", ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Boolean + { + Ok(Boolean(this.value.is_sign_positive())) + } + ); + build_method!( + database, + forward = methods::Recip, "Scalar::recip", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + Ok(Scalar { + dimension: -this.dimension, + value: Float::new(this.value.recip()).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Round, "Scalar::round", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar, + unit: Value) -> Scalar + { + let unit = this.unpack_same_dimension(stack_trace, unit)?; + + let value = this.value / unit.value; + + Ok(Scalar { + dimension: this.dimension, + value: Float::new(value.round() * *unit.value).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Trunc, "Scalar::trunc", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar, + unit: Value) -> Scalar + { + let unit = this.unpack_same_dimension(stack_trace, unit)?; + + let value = this.value / unit.value; + + Ok(Scalar { + dimension: this.dimension, + value: Float::new(value.trunc() * *unit.value).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Fract, "Scalar::fract", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar, + unit: Value) -> Scalar + { + let unit = this.unpack_same_dimension(stack_trace, unit)?; + + let value = this.value / unit.value; + + Ok(Scalar { + dimension: this.dimension, + value: Float::new(value.fract() * *unit.value).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Floor, "Scalar::floor", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar, + unit: Value) -> Scalar + { + let unit = this.unpack_same_dimension(stack_trace, unit)?; + + let value = this.value / unit.value; + + Ok(Scalar { + dimension: this.dimension, + value: Float::new(value.floor() * *unit.value).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Ceil, "Scalar::ceil", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar, + unit: Value) -> Scalar + { + let unit = this.unpack_same_dimension(stack_trace, unit)?; + + let value = this.value / unit.value; + + Ok(Scalar { + dimension: this.dimension, + value: Float::new(value.ceil() * *unit.value).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Max, "Scalar::max", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar, + other: Value) -> Scalar + { + let other = this.unpack_same_dimension(stack_trace, other)?; + + Ok(Scalar { + dimension: this.dimension, + value: this.value.max(other.value) + }) + } + ); + build_method!( + database, + forward = methods::Min, "Scalar::min", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar, + other: Value) -> Scalar + { + let other = this.unpack_same_dimension(stack_trace, other)?; + + Ok(Scalar { + dimension: this.dimension, + value: this.value.min(other.value) + }) + } + ); + build_method!( + database, + forward = methods::Signum, "Scalar::signum", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + Ok(Scalar { + dimension: Dimension::zero(), + value: Float::new(this.value.signum()).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Acos, "Scalar::acos", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + this.check_inverse_trig_compatible(stack_trace)?; + + Ok(Scalar { + dimension: Dimension::angle(), + value: Float::new((this.value * PI).acos()).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Acosh, "Scalar::acosh", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + this.check_inverse_trig_compatible(stack_trace)?; + + Ok(Scalar { + dimension: Dimension::angle(), + value: Float::new((this.value).acosh() / PI).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Cos, "Scalar::cos", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + this.check_trig_compatible(stack_trace)?; + + Ok(Scalar { + dimension: Dimension::zero(), + value: Float::new((this.value * PI).cos()).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Cosh, "Scalar::cosh", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + this.check_trig_compatible(stack_trace)?; + + Ok(Scalar { + dimension: Dimension::zero(), + value: Float::new((this.value * PI).cosh()).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Asin, "Scalar::asin", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + this.check_inverse_trig_compatible(stack_trace)?; + + Ok(Scalar { + dimension: Dimension::angle(), + value: Float::new((this.value * PI).asin()).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Asinh, "Scalar::asinh", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + this.check_inverse_trig_compatible(stack_trace)?; + + Ok(Scalar { + dimension: Dimension::angle(), + value: Float::new((this.value).asinh() / PI).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Sin, "Scalar::sin", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + this.check_trig_compatible(stack_trace)?; + + Ok(Scalar { + dimension: Dimension::zero(), + value: Float::new((this.value * PI).sin()).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Sinh, "Scalar::sinh", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + this.check_trig_compatible(stack_trace)?; + + Ok(Scalar { + dimension: Dimension::zero(), + value: Float::new((this.value * PI).sinh()).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::CosSin, "Scalar::cossin", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Vector2 + { + this.check_trig_compatible(stack_trace)?; + + let (sin, cos) = (this.value * PI).sin_cos(); + Vector2::new(stack_trace, Dimension::zero(), [cos, sin]) + } + ); + build_method!( + database, + forward = methods::Atan, "Scalar::atan", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + this.check_inverse_trig_compatible(stack_trace)?; + + Ok(Scalar { + dimension: Dimension::angle(), + value: Float::new((this.value * PI).atan()).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Atanh, "Scalar::atanh", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + this.check_inverse_trig_compatible(stack_trace)?; + + Ok(Scalar { + dimension: Dimension::angle(), + value: Float::new((this.value).atanh() / PI).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Tan, "Scalar::tan", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + this.check_trig_compatible(stack_trace)?; + + Ok(Scalar { + dimension: Dimension::zero(), + value: Float::new((this.value * PI).tan()).unwrap_not_nan(stack_trace)? + }) + } + ); + build_method!( + database, + forward = methods::Tanh, "Scalar::tanh", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Scalar) -> Scalar + { + this.check_trig_compatible(stack_trace)?; + + Ok(Scalar { + dimension: Dimension::zero(), + value: Float::new((this.value * PI).tanh()).unwrap_not_nan(stack_trace)? + }) + } + ); +} + macro_rules! build_scalar_type { ($name:ident = $dimension:expr) => { struct $name(Scalar); @@ -1050,68 +1258,68 @@ mod test { let product = test_run("(-100)::abs() == 100").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn clamp() { let product = test_run("(-100)::clamp(min = -50, max = 50) == -50").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("(100)::clamp(min = -50, max = 50) == 50").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn copysign() { let product = test_run("100::copysign(sign = -50) == -100").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn hypot() { // 141.4213562373095 was calculated Using `math.sqrt(100 ** 2 + 100 ** 2)` in Python 3.13.9. let product = test_run("100::hypot(other = 100) - 141.4213562373095 < 0.0001").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn is_finite() { let product = test_run("std.consts.Infinity::is_finite()").unwrap(); assert_eq!(product, Boolean(false).into()); - + let product = test_run("5::is_finite()").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("(std.consts.Infinity * 5)::is_finite()").unwrap(); assert_eq!(product, Boolean(false).into()); } - + #[test] fn is_infinite() { let product = test_run("std.consts.Infinity::is_infinite()").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("5::is_infinite()").unwrap(); assert_eq!(product, Boolean(false).into()); - + let product = test_run("(std.consts.Infinity * 5)::is_infinite()").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn is_normal() { let product = test_run("std.consts.Infinity::is_normal()").unwrap(); assert_eq!(product, Boolean(false).into()); - + let product = test_run("0::is_normal()").unwrap(); assert_eq!(product, Boolean(false).into()); - + let product = test_run("5::is_normal()").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("(-5)::is_normal()").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn cbrt() { let product = test_run("(64 'm^3')::cbrt() == 4m").unwrap(); @@ -1123,108 +1331,108 @@ mod test { let product = test_run("2m::pow(exp = 2) == 4 'm^2'").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn sqrt() { let product = test_run("(16 'm^2')::sqrt() == 4m").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn is_sign_negative() { let product = test_run("0::is_sign_negative()").unwrap(); assert_eq!(product, Boolean(false).into()); - + let product = test_run("(-0)::is_sign_negative()").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("5::is_sign_negative()").unwrap(); assert_eq!(product, Boolean(false).into()); - + let product = test_run("(-5)::is_sign_negative()").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn is_sign_positive() { let product = test_run("0::is_sign_positive()").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("(-0)::is_sign_positive()").unwrap(); assert_eq!(product, Boolean(false).into()); - + let product = test_run("5::is_sign_positive()").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("(-5)::is_sign_positive()").unwrap(); assert_eq!(product, Boolean(false).into()); } - + #[test] fn recip() { let product = test_run("16ft::recip() == 1 / 16ft").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn round() { let product = test_run("16.8ft::round(unit = 1ft) == 17ft").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("16.2ft::round(unit = 1ft) == 16ft").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn trunc() { let product = test_run("16.8ft::trunc(unit = 1ft) == 16ft").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("16.2ft::trunc(unit = 1ft) == 16ft").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn fract() { let product = test_run("16.8ft::fract(unit = 1ft) - 0.8ft < 0.0000000000001ft").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn floor() { let product = test_run("16.5ft::floor(unit = 1ft) == 16ft").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn ceil() { let product = test_run("16.5ft::ceil(unit = 1ft) == 17ft").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn max() { let product = test_run("16m::max(other = 15m) == 16m").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn min() { let product = test_run("16m::min(other = 15m) == 15m").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn signum() { let product = test_run("16m::signum() == 1").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("(-16m)::signum() == -1").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("0m::signum() == 1").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("(-0m)::signum() == -1").unwrap(); assert_eq!(product, Boolean(true).into()); } @@ -1234,31 +1442,31 @@ mod test { let product = test_run("0::acos() - 90deg < 0.000000000001deg").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn cosh_acosh() { let product = test_run("1rad::cosh()::acosh() - 1rad < 0.000000000001rad").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn cos() { let product = test_run("90deg::cos() - 1 < 0.000000000001").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn asin() { let product = test_run("0::asin() - 90deg < 0.000000000001deg").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn sinh_asinh() { let product = test_run("1rad::sinh()::asinh() - 1rad < 0.000000000001rad").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn sin() { let product = test_run("90deg::sin() - 1 < 0.000000000001").unwrap(); @@ -1270,19 +1478,19 @@ mod test { let product = test_run("let angle = 45deg; in (angle::cossin() - <(angle::cos(), angle::sin())>)::norm() < 0.0000000001").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn atan() { let product = test_run("0::atan() == 0deg").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn tanh_atanh() { let product = test_run("1rad::tanh()::atanh() - 1rad < 0.000000000001rad").unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn tan() { let product = test_run("0deg::tan() == 0").unwrap(); diff --git a/crates/interpreter/src/execution/values/string.rs b/crates/interpreter/src/execution/values/string.rs index cfb0a3e..c63119b 100644 --- a/crates/interpreter/src/execution/values/string.rs +++ b/crates/interpreter/src/execution/values/string.rs @@ -19,14 +19,12 @@ use imstr::ImString; use crate::{ - build_closure_signature, build_closure_type, compile::SourceReference, execution::{ errors::Raise, logging::RuntimeLog, - values::{MissingAttributeError, StaticType, UserClosure}, + values::{closure::BuiltinCallableDatabase, MissingAttributeError, StaticType}, }, - static_method, }; use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; @@ -35,7 +33,7 @@ use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Val pub struct IString(pub ImString); impl Object for IString { - fn get_type(&self) -> ValueType { + fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { ValueType::Boolean } @@ -53,40 +51,41 @@ impl Object for IString { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, attribute: &str, ) -> ExpressionResult { - build_closure_type!(MapClosure(character: IString) -> ValueType::Any); - build_closure_type!(FoldClosure(previous: Value, character: IString) -> ValueType::Any); + // build_closure_type!(MapClosure(character: IString) -> ValueType::Any); + // build_closure_type!(FoldClosure(previous: Value, character: IString) -> ValueType::Any); match attribute { - "map" => { - let value = static_method!( - String_map( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: ValueType, - for_each: MapClosure) -> ValueType::TypeNone - { - todo!() - } - ); - Ok(value.clone()) - } - "fold" => { - let value = static_method!( - String_map( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: ValueType, - for_each: FoldClosure) -> ValueType::TypeNone - { - todo!() - } - ); - Ok(value.clone()) - } + // "map" => { + // let value = static_method!( + // String_map( + // _log: &mut dyn RuntimeLog, + // stack_trace: &mut Vec, + // _stack: &mut Stack, + // this: ValueType, + // for_each: MapClosure) -> ValueType::TypeNone + // { + // todo!() + // } + // ); + // Ok(value.clone()) + // } + // "fold" => { + // let value = static_method!( + // String_map( + // _log: &mut dyn RuntimeLog, + // stack_trace: &mut Vec, + // _stack: &mut Stack, + // this: ValueType, + // for_each: FoldClosure) -> ValueType::TypeNone + // { + // todo!() + // } + // ); + // Ok(value.clone()) + // } _ => Err(MissingAttributeError { name: attribute.into(), } diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 9aaa0f4..907b6d0 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -26,15 +26,18 @@ use super::{ }; use crate::{ + build_method, compile::{self, AstNode, SourceReference}, execute_expression, execution::{ errors::{ErrorType, ExpressionResult, Raise}, logging::RuntimeLog, stack::Stack, - values::{self, dictionary::DictionaryData, Dictionary, IString, MissingAttributeError}, + values::{ + self, closure::BuiltinCallableDatabase, dictionary::DictionaryData, BuiltinFunction, + Dictionary, IString, MissingAttributeError, + }, }, - static_method, }; #[derive(Debug, Eq, Clone, PartialEq)] @@ -172,7 +175,7 @@ impl Display for ValueType { } impl Object for ValueType { - fn get_type(&self) -> ValueType { + fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { ValueType::ValueType } @@ -191,38 +194,12 @@ impl Object for ValueType { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, attribute: &str, ) -> ExpressionResult { match attribute { - "qualify" => { - let value = static_method!( - ValueType_qualify( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: ValueType, - to_qualify: Value) -> ValueType::TypeNone - { - this.check_other_qualifies(&to_qualify.get_type()).map_err(|error| error.to_error(stack_trace.iter()))?; - Ok(values::ValueNone.into()) - } - ); - Ok(value.clone()) - } - "try_qualify" => { - let value = static_method!( - ValueType_try_qualify( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - this: ValueType, - to_qualify: Value) -> ValueType::Boolean - { - Ok(values::Boolean(this.check_other_qualifies(&to_qualify.get_type()).is_ok()).into()) - } - ); - Ok(value.clone()) - } + "qualify" => Ok(BuiltinFunction::new::().into()), + "try_qualify" => Ok(BuiltinFunction::new::().into()), _ => Err(MissingAttributeError { name: attribute.into(), } @@ -237,6 +214,42 @@ impl StaticTypeName for ValueType { } } +mod methods { + pub struct Qualify; + pub struct TryQualify; +} + +pub fn register_methods(database: &mut BuiltinCallableDatabase) { + build_method!( + database, + forward = methods::Qualify, "ValueType::qualify", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: ValueType, + to_qualify: Value) -> ValueNone + { + this.check_other_qualifies(&to_qualify.get_type(database)).map_err(|error| error.to_error(stack_trace.iter()))?; + Ok(values::ValueNone) + } + ); + + build_method!( + database, + forward = methods::TryQualify, "ValueType::try_qualify", ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: ValueType, + to_qualify: Value) -> values::Boolean + { + Ok(values::Boolean(this.check_other_qualifies(&to_qualify.get_type(database)).is_ok())) + } + ); +} + #[derive(Debug, Eq, Clone, PartialEq)] pub struct StructMember { pub ty: ValueType, @@ -248,12 +261,19 @@ impl StructMember { log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, source: &AstNode, ) -> ExpressionResult { - let ty = execute_expression(log, stack_trace, stack, &source.node.ty)? + let ty = execute_expression(log, stack_trace, stack, database, &source.node.ty)? .downcast::(stack_trace)?; let default = if let Some(default) = source.node.default.as_ref() { - Some(execute_expression(log, stack_trace, stack, default)?) + Some(execute_expression( + log, + stack_trace, + stack, + database, + default, + )?) } else { None }; @@ -283,12 +303,16 @@ impl StructDefinition { log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, source: &AstNode, ) -> ExpressionResult { let mut members = HashMap::new(); for member in source.node.members.iter() { let name = member.node.name.node.clone(); - members.insert(name, StructMember::new(log, stack_trace, stack, member)?); + members.insert( + name, + StructMember::new(log, stack_trace, stack, database, member)?, + ); } let members = Arc::new(HashableMap::from(members)); @@ -605,9 +629,11 @@ mod test { let closure = test_run("() -> std.types.None std.consts.None").unwrap(); let closure = closure.as_userclosure().unwrap(); + let database = BuiltinCallableDatabase::default(); + closure - .get_type() - .check_other_qualifies(&closure.get_type()) + .get_type(&database) + .check_other_qualifies(&closure.get_type(&database)) .unwrap(); } @@ -619,9 +645,11 @@ mod test { let dictionary = test_run("()").unwrap(); let dictionary = dictionary.as_dictionary().unwrap(); + let database = BuiltinCallableDatabase::default(); + structure - .get_type() - .check_other_qualifies(&dictionary.get_type()) + .get_type(&database) + .check_other_qualifies(&dictionary.get_type(&database)) .unwrap(); } @@ -633,8 +661,10 @@ mod test { let dictionary = test_run("(a = std.consts.None)").unwrap(); let dictionary = dictionary.as_dictionary().unwrap(); + let database = BuiltinCallableDatabase::default(); + structure - .check_other_qualifies(&dictionary.get_type()) + .check_other_qualifies(&dictionary.get_type(&database)) .unwrap(); } @@ -646,8 +676,10 @@ mod test { let dictionary = test_run("(a = 1m)").unwrap(); let dictionary = dictionary.as_dictionary().unwrap(); + let database = BuiltinCallableDatabase::default(); + structure - .check_other_qualifies(&dictionary.get_type()) + .check_other_qualifies(&dictionary.get_type(&database)) .unwrap(); } @@ -659,8 +691,10 @@ mod test { let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); let dictionary = dictionary.as_dictionary().unwrap(); + let database = BuiltinCallableDatabase::default(); + structure - .check_other_qualifies(&dictionary.get_type()) + .check_other_qualifies(&dictionary.get_type(&database)) .unwrap_err(); } @@ -672,8 +706,10 @@ mod test { let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); let dictionary = dictionary.as_dictionary().unwrap(); + let database = BuiltinCallableDatabase::default(); + structure - .check_other_qualifies(&dictionary.get_type()) + .check_other_qualifies(&dictionary.get_type(&database)) .unwrap(); } @@ -685,8 +721,10 @@ mod test { let dictionary = test_run("(a = (b = std.consts.None))").unwrap(); let dictionary = dictionary.as_dictionary().unwrap(); + let database = BuiltinCallableDatabase::default(); + structure - .check_other_qualifies(&dictionary.get_type()) + .check_other_qualifies(&dictionary.get_type(&database)) .unwrap(); } @@ -766,15 +804,19 @@ mod test { let closure = test_run("() -> std.types.None std.consts.None").unwrap(); let closure = closure.as_userclosure().unwrap(); + let database = BuiltinCallableDatabase::default(); + ValueType::Any - .check_other_qualifies(&closure.get_type()) + .check_other_qualifies(&closure.get_type(&database)) .unwrap(); let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); let dictionary = dictionary.as_dictionary().unwrap(); + let database = BuiltinCallableDatabase::default(); + ValueType::Any - .check_other_qualifies(&dictionary.get_type()) + .check_other_qualifies(&dictionary.get_type(&database)) .unwrap(); ValueType::Any diff --git a/crates/interpreter/src/execution/values/vector.rs b/crates/interpreter/src/execution/values/vector.rs index 29907ca..1520978 100644 --- a/crates/interpreter/src/execution/values/vector.rs +++ b/crates/interpreter/src/execution/values/vector.rs @@ -1,23 +1,25 @@ use common_data_types::Dimension; use enum_downcast::{AsVariant, IntoVariant}; use nalgebra::{Dim, RawStorage}; -use stack::ArrayVec; use crate::{ - build_closure_type, build_method, compile::{self, AstNode, SourceReference}, execute_expression, execution::{ + build_closure_type, build_method, + compile::{self, AstNode, SourceReference}, + execute_expression, + execution::{ errors::{ExpressionResult, GenericFailure, Raise as _}, logging::RuntimeLog, stack::Stack, values::{ - Dictionary, DowncastError, MissingAttributeError, Object, Scalar, StaticType, StaticTypeName, Value, ValueType, scalar::UnwrapNotNan + closure::BuiltinCallableDatabase, scalar::UnwrapNotNan, BuiltinFunction, DowncastError, + MissingAttributeError, Object, Scalar, StaticType, StaticTypeName, Value, ValueType, }, - } + }, }; use std::{ hash::Hash, ops::{Add, Div, Mul, Neg, Sub}, - collections::HashMap, }; type Float = f64; @@ -40,7 +42,7 @@ where Self: StaticTypeName + Into, Value: IntoVariant + AsVariant, { - fn get_type(&self) -> ValueType { + fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { I::get_type(self.dimension) } @@ -123,6 +125,7 @@ where &self, log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, attribute: &str, ) -> ExpressionResult { if let Some(value) = @@ -131,222 +134,46 @@ where { Ok(value) } else { - - const ANY_SCALAR: ValueType = ValueType::Scalar(None); - build_closure_type!(ApplyClosure(c: Scalar) -> ANY_SCALAR); - build_closure_type!(MapClosure(c: Scalar) -> ANY_SCALAR); - build_closure_type!(FoldClosure(previous: Scalar, c: Scalar) -> ANY_SCALAR); - match attribute { - "abs" => Ok(build_method!( - Vector_abs( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Any - { - let value = this.value.abs(); - - Ok(Self { - dimension: this.dimension, - value - }.into()) - } - ) + "abs" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::Abs, + >() .into()), - "add_scalar" => Ok(build_method!( - Vector_add_scalar( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self, - value: Scalar) -> ValueType::Any - { - if this.dimension == value.dimension { - let value = this.value.add_scalar(*value.value); - - Ok(Self { - dimension: this.dimension, - value - }.into()) - } else { - Err(DowncastError { - expected: this.type_name(), - got: value.type_name(), - } - .to_error(stack_trace.iter())) - } - } - ) + "add_scalar" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::AddScalar, + >() .into()), - "amax" => Ok(build_method!( - Vector_amax( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Any - { - let value = common_data_types::Float::new(this.value.amax()).unwrap_not_nan(stack_trace)?; - - Ok(Scalar { - dimension: this.dimension, - value - }.into()) - } - ) + "amax" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::AMax, + >() .into()), - "amin" => Ok(build_method!( - Vector_amin( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Any - { - let value = common_data_types::Float::new(this.value.amin()).unwrap_not_nan(stack_trace)?; - - Ok(Scalar { - dimension: this.dimension, - value - }.into()) - } - ) + "amin" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::AMin, + >() .into()), - "dot" => Ok(build_method!( - Vector_dot( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self, - rhs: Value) -> ValueType::TypeNone - { - let rhs = rhs.downcast::(stack_trace)?; - if this.dimension == rhs.dimension { - let value = common_data_types::Float::new(this.value.dot(&rhs.value)).unwrap_not_nan(stack_trace)?; - - Ok(Scalar { - dimension: this.dimension, - value - }.into()) - } else { - Err(DowncastError { - expected: this.type_name(), - got: rhs.type_name(), - } - .to_error(stack_trace.iter())) - } - } - ) + "dot" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::Dot, + >() .into()), - "norm" | "length" => Ok(build_method!( - Vector_norm( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Any - { - let value = common_data_types::Float::new(this.value.norm()).unwrap_not_nan(stack_trace)?; - - Ok(Scalar { - dimension: this.dimension, - value - }.into()) - } - ) + "norm" | "length" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::Norm, + >() .into()), - "normalize" => Ok(build_method!( - Vector_normalize( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self) -> ValueType::Any - { - let value = this.value.normalize(); - Ok(Self::new_raw(stack_trace, Dimension::zero(), value)?.into()) - } - ) + "normalize" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::Normalize, + >() .into()), - "angle" => Ok(build_method!( - Vector_angle( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Self, - other: Value) -> ValueType::Any - { - let other = other.downcast::(stack_trace)?; - let value = common_data_types::Float::new(this.value.angle(&other.value)).unwrap_not_nan(stack_trace)?; - - Ok(Scalar { - dimension: Dimension::angle(), - value - }.into()) - } - ) + "angle" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::Angle, + >() .into()), - "apply" | "map" => Ok(build_method!( - Vector_apply( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - this: Self, - f: ApplyClosure) -> ValueType::Any - { - let operations: ArrayVec<[Value; 4]> = this.value.iter().map(|c| f.call(log, stack_trace, stack, Dictionary::from(HashMap::from_iter([ - ( - "c".into(), - Scalar { - dimension: this.dimension, - value: common_data_types::Float::new(c).unwrap_not_nan(stack_trace)? - }.into() - ) - ])))).collect::>()?; - - let result: ArrayVec<[Scalar; 4]> = operations.into_iter().map(|v| v.downcast::(stack_trace)).collect::>()?; - - // The smallest vector we support is 2, so this should never panic. - let dimension = result[0].dimension; - - for component in result.iter() { - if component.dimension != dimension { - return Err(GenericFailure("All components of a vector must match") - .to_error(stack_trace.iter())); - } - } - - Ok(Self::new_raw(stack_trace, dimension, I::from_iterator(result.iter().map(|c| *c.value)))?.into()) - } - ) + "apply" | "map" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::Map, + >() .into()), - "fold" => Ok(build_method!( - Vector_fold( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - this: Self, - init: Value, - f: FoldClosure) -> ValueType::Any - { - - let mut accumulator = init; - for component in this.value.iter() { - accumulator = f.call(log, stack_trace, stack, Dictionary::from(HashMap::from_iter([ - ( - "c".into(), - Scalar { - dimension: this.dimension, - value: common_data_types::Float::new(component).unwrap_not_nan(stack_trace)? - }.into() - ), - ( - "previous".into(), - accumulator - ) - ])))?; - } - - Ok(accumulator) - } - ) + "fold" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::Fold, + >() .into()), _ => Err(MissingAttributeError { name: attribute.into(), @@ -377,9 +204,10 @@ where log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, ast_node: &AstNode>, ) -> ExpressionResult { - I::from_ast(log, stack_trace, stack, ast_node) + I::from_ast(log, stack_trace, stack, database, ast_node) } fn new_raw( @@ -431,6 +259,320 @@ where } } +mod methods { + use stack::ArrayVec; + use std::collections::HashMap; + + use super::*; + use crate::{ + build_method, + execution::values::{BuiltinCallableDatabase, Dictionary}, + }; + + pub trait MethodSet { + type Abs; + type AddScalar; + type AMax; + type AMin; + type Dot; + type Norm; + type Normalize; + type Angle; + type Map; + type Fold; + } + + macro_rules! build_method_set { + ($name:ident) => { + paste::paste! { + pub struct [<$name Abs>]; + pub struct [<$name AddScalar>]; + pub struct [<$name AMax>]; + pub struct [<$name AMin>]; + pub struct [<$name Dot>]; + pub struct [<$name Norm>]; + pub struct [<$name Normalize>]; + pub struct [<$name Angle>]; + pub struct [<$name Map>]; + pub struct [<$name Fold>]; + + pub struct [<$name MethodSet>]; + impl MethodSet for [<$name MethodSet>] { + type Abs = [<$name Abs>]; + type AddScalar = [<$name AddScalar>]; + type AMax = [<$name AMax>]; + type AMin = [<$name AMin>]; + type Dot = [<$name Dot>]; + type Norm = [<$name Norm>]; + type Normalize = [<$name Normalize>]; + type Angle = [<$name Angle>]; + type Map = [<$name Map>]; + type Fold = [<$name Fold>]; + } + } + }; + } + + build_method_set!(Vector2); + build_method_set!(Vector3); + build_method_set!(Vector4); + + pub struct Vector3Cross; + + pub fn register_methods(database: &mut BuiltinCallableDatabase, dimension: usize) + where + I: VectorInternalType, + Vector: StaticTypeName + Into, + Value: IntoVariant> + AsVariant>, + M: MethodSet + 'static, + { + build_closure_type!(MapClosure(c: Scalar) -> Scalar); + build_closure_type!(FoldClosure(previous: Scalar, c: Scalar) -> Scalar); + + build_method!( + database, + forward = M::Abs, format!("Vector{dimension}::abs"), ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Vector) -> Vector + { + let value = this.value.abs(); + Vector::new_raw(stack_trace, this.dimension, value) + } + ); + build_method!( + database, + forward = M::AddScalar, format!("Vector{dimension}::add_scalar"), ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Vector, + value: Scalar) -> Vector + { + if this.dimension == value.dimension { + let value = this.value.add_scalar(*value.value); + Vector::new_raw(stack_trace, this.dimension, value) + } else { + Err(DowncastError { + expected: this.type_name(), + got: value.type_name(), + } + .to_error(stack_trace.iter())) + } + } + ); + build_method!( + database, + forward = M::AMax, format!("Vector{dimension}::amax"), ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Vector) -> Scalar + { + let value = common_data_types::Float::new(this.value.amax()).unwrap_not_nan(stack_trace)?; + + Ok(Scalar { + dimension: this.dimension, + value + }) + } + ); + build_method!( + database, + forward = M::AMin, format!("Vector{dimension}::amin"), ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Vector) -> Scalar + { + let value = common_data_types::Float::new(this.value.amin()).unwrap_not_nan(stack_trace)?; + + Ok(Scalar { + dimension: this.dimension, + value + }) + } + ); + build_method!( + database, + forward = M::Dot, format!("Vector{dimension}::dot"), ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Vector, + rhs: Value) -> Scalar + { + let rhs = rhs.downcast::>(stack_trace)?; + if this.dimension == rhs.dimension { + let value = common_data_types::Float::new(this.value.dot(&rhs.value)).unwrap_not_nan(stack_trace)?; + + Ok(Scalar { + dimension: this.dimension, + value + }) + } else { + Err(DowncastError { + expected: this.type_name(), + got: rhs.type_name(), + } + .to_error(stack_trace.iter())) + } + } + ); + build_method!( + database, + forward = M::Norm, format!("Vector{dimension}::norm"),( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Vector) -> Scalar + { + let value = common_data_types::Float::new(this.value.norm()).unwrap_not_nan(stack_trace)?; + + Ok(Scalar { + dimension: this.dimension, + value + }) + } + ); + build_method!( + database, + forward = M::Normalize, format!("Vector{dimension}::normalize"),( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Vector) -> Vector + { + let value = this.value.normalize(); + Vector::::new_raw(stack_trace, Dimension::zero(), value) + } + ); + build_method!( + database, + forward = M::Angle, format!("Vector{dimension}::angle"),( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Vector, + other: Value) -> Scalar + { + let other = other.downcast::>(stack_trace)?; + let value = common_data_types::Float::new(this.value.angle(&other.value)).unwrap_not_nan(stack_trace)?; + + Ok(Scalar { + dimension: Dimension::angle(), + value + }) + } + ); + build_method!( + database, + forward = M::Map, format!("Vector{dimension}::map"),( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: Vector, + f: MapClosure) -> Vector + { + let operations: ArrayVec<[Value; 4]> = this.value.iter().map(|c| f.call(log, stack_trace, stack, database, Dictionary::new(database, HashMap::from_iter([ + ( + "c".into(), + Scalar { + dimension: this.dimension, + value: common_data_types::Float::new(c).unwrap_not_nan(stack_trace)? + }.into() + ) + ])))).collect::>()?; + + let result: ArrayVec<[Scalar; 4]> = operations.into_iter().map(|v| v.downcast::(stack_trace)).collect::>()?; + + // The smallest vector we support is 2, so this should never panic. + let dimension = result[0].dimension; + + for component in result.iter() { + if component.dimension != dimension { + return Err(GenericFailure("All components of a vector must match") + .to_error(stack_trace.iter())); + } + } + + Ok(Vector::::new_raw(stack_trace, dimension, I::from_iterator(result.iter().map(|c| *c.value)))?) + } + ); + build_method!( + database, + forward = M::Fold, format!("Vector{dimension}::fold"),( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: Vector, + init: Value, + f: FoldClosure) -> Value + { + + let mut accumulator = init; + for component in this.value.iter() { + accumulator = f.call(log, stack_trace, stack, database, Dictionary::new(database, HashMap::from_iter([ + ( + "c".into(), + Scalar { + dimension: this.dimension, + value: common_data_types::Float::new(component).unwrap_not_nan(stack_trace)? + }.into() + ), + ( + "previous".into(), + accumulator + ) + ])))?; + } + + Ok(accumulator) + } + ); + } +} + +pub fn register_methods(database: &mut BuiltinCallableDatabase) { + methods::register_methods::, methods::Vector2MethodSet>(database, 2); + methods::register_methods::, methods::Vector3MethodSet>(database, 3); + methods::register_methods::, methods::Vector4MethodSet>(database, 4); + + build_method!( + database, + forward = methods::Vector3Cross, "Vector3::cross", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Vector3, + rhs: Vector3) -> Vector3 + { + if this.dimension == rhs.dimension { + let value = this.value.cross(&rhs.value); + Vector3::new_raw(stack_trace, this.dimension, value) + } else { + Err(DowncastError { + expected: this.type_name(), + got: rhs.type_name(), + } + .to_error(stack_trace.iter())) + } + } + ); +} + pub trait VectorInternalType: Add + Div @@ -449,6 +591,7 @@ pub trait VectorInternalType: { type BuildFrom; type NodeType; + type MethodSet: methods::MethodSet; fn get_type(dimension: Dimension) -> ValueType; fn build(value: Self::BuildFrom) -> Self; @@ -456,6 +599,7 @@ pub trait VectorInternalType: log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, ast_node: &AstNode>, ) -> ExpressionResult>; fn from_iterator(iterator: I) -> Self @@ -497,8 +641,8 @@ where } macro_rules! get_component { - ($log:ident, $stack_trace:ident, $stack:ident, $ast_node:ident, $c:ident) => { - execute_expression($log, $stack_trace, $stack, &$ast_node.node.$c)? + ($log:ident, $stack_trace:ident, $stack:ident, $database:ident, $ast_node:ident, $c:ident) => { + execute_expression($log, $stack_trace, $stack, $database, &$ast_node.node.$c)? .downcast::($stack_trace)? }; } @@ -506,6 +650,7 @@ macro_rules! get_component { impl VectorInternalType for nalgebra::Vector2 { type BuildFrom = [Float; 2]; type NodeType = compile::Vector2; + type MethodSet = methods::Vector2MethodSet; fn get_type(dimension: Dimension) -> ValueType { ValueType::Vector2(Some(dimension)) @@ -519,10 +664,11 @@ impl VectorInternalType for nalgebra::Vector2 { log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, ast_node: &AstNode>, ) -> ExpressionResult> { - let x = get_component!(log, stack_trace, stack, ast_node, x); - let y = get_component!(log, stack_trace, stack, ast_node, y); + let x = get_component!(log, stack_trace, stack, database, ast_node, x); + let y = get_component!(log, stack_trace, stack, database, ast_node, y); if x.dimension == y.dimension { Ok(Vector { @@ -534,10 +680,11 @@ impl VectorInternalType for nalgebra::Vector2 { .to_error(stack_trace.iter())) } } - + fn from_iterator(iterator: I) -> Self where - I: IntoIterator { + I: IntoIterator, + { Self::from_iterator(iterator) } @@ -598,7 +745,7 @@ impl VectorInternalType for nalgebra::Vector2 { fn angle(&self, other: &Self) -> Float { nalgebra::Vector2::angle(self, other) } - + fn iter(&self) -> impl Iterator { self.iter().copied() } @@ -618,6 +765,7 @@ impl StaticType for nalgebra::Vector2 { impl VectorInternalType for nalgebra::Vector3 { type BuildFrom = [Float; 3]; type NodeType = compile::Vector3; + type MethodSet = methods::Vector3MethodSet; fn get_type(dimension: Dimension) -> ValueType { ValueType::Vector3(Some(dimension)) @@ -631,11 +779,12 @@ impl VectorInternalType for nalgebra::Vector3 { log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, ast_node: &AstNode>, ) -> ExpressionResult> { - let x = get_component!(log, stack_trace, stack, ast_node, x); - let y = get_component!(log, stack_trace, stack, ast_node, y); - let z = get_component!(log, stack_trace, stack, ast_node, z); + let x = get_component!(log, stack_trace, stack, database, ast_node, x); + let y = get_component!(log, stack_trace, stack, database, ast_node, y); + let z = get_component!(log, stack_trace, stack, database, ast_node, z); if x.dimension == y.dimension && x.dimension == z.dimension { Ok(Vector { @@ -647,10 +796,11 @@ impl VectorInternalType for nalgebra::Vector3 { .to_error(stack_trace.iter())) } } - + fn from_iterator(iterator: I) -> Self where - I: IntoIterator { + I: IntoIterator, + { Self::from_iterator(iterator) } @@ -683,33 +833,7 @@ impl VectorInternalType for nalgebra::Vector3 { } .into(), )), - "cross" => { - let vector_type = ValueType::Vector3(Some(dimension)); - - Ok(Some( - build_method!( - Vector_normalize( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - this: Vector3, - rhs: Vector3) -> vector_type - { - if this.dimension == rhs.dimension { - let value = this.value.cross(&rhs.value); - Ok(Vector3::new_raw(stack_trace, this.dimension, value)?.into()) - } else { - Err(DowncastError { - expected: this.type_name(), - got: rhs.type_name(), - } - .to_error(stack_trace.iter())) - } - } - ) - .into(), - )) - } + "cross" => Ok(Some(BuiltinFunction::new::().into())), _ => Ok(None), } } @@ -745,7 +869,7 @@ impl VectorInternalType for nalgebra::Vector3 { fn angle(&self, other: &Self) -> Float { nalgebra::Vector3::angle(self, other) } - + fn iter(&self) -> impl Iterator { self.iter().copied() } @@ -765,6 +889,7 @@ impl StaticType for nalgebra::Vector3 { impl VectorInternalType for nalgebra::Vector4 { type BuildFrom = [Float; 4]; type NodeType = compile::Vector4; + type MethodSet = methods::Vector4MethodSet; fn get_type(dimension: Dimension) -> ValueType { ValueType::Vector4(Some(dimension)) @@ -778,12 +903,13 @@ impl VectorInternalType for nalgebra::Vector4 { log: &mut dyn RuntimeLog, stack_trace: &mut Vec, stack: &mut Stack, + database: &BuiltinCallableDatabase, ast_node: &AstNode>, ) -> ExpressionResult> { - let x = get_component!(log, stack_trace, stack, ast_node, x); - let y = get_component!(log, stack_trace, stack, ast_node, y); - let z = get_component!(log, stack_trace, stack, ast_node, z); - let w = get_component!(log, stack_trace, stack, ast_node, w); + let x = get_component!(log, stack_trace, stack, database, ast_node, x); + let y = get_component!(log, stack_trace, stack, database, ast_node, y); + let z = get_component!(log, stack_trace, stack, database, ast_node, z); + let w = get_component!(log, stack_trace, stack, database, ast_node, w); if x.dimension == y.dimension && x.dimension == z.dimension && x.dimension == w.dimension { Ok(Vector { @@ -795,10 +921,11 @@ impl VectorInternalType for nalgebra::Vector4 { .to_error(stack_trace.iter())) } } - + fn from_iterator(iterator: I) -> Self where - I: IntoIterator { + I: IntoIterator, + { Self::from_iterator(iterator) } @@ -872,7 +999,7 @@ impl VectorInternalType for nalgebra::Vector4 { fn angle(&self, other: &Self) -> Float { nalgebra::Vector4::angle(self, other) } - + fn iter(&self) -> impl Iterator { self.iter().copied() } @@ -1350,74 +1477,88 @@ mod test { #[test] fn angle_vector3() { - let product = test_run("<(1m, 0m, 0m)>::angle(other = <(0m, 1m, 0m)>) - 90deg < 0.001deg").unwrap(); + let product = + test_run("<(1m, 0m, 0m)>::angle(other = <(0m, 1m, 0m)>) - 90deg < 0.001deg").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn angle_vector4() { let product = - test_run("<(1m, 0m, 0m, 0m)>::angle(other = <(0m, 1m, 0m, 0m)>) - 90deg < 0.001deg").unwrap(); + test_run("<(1m, 0m, 0m, 0m)>::angle(other = <(0m, 1m, 0m, 0m)>) - 90deg < 0.001deg") + .unwrap(); assert_eq!(product, Boolean(true).into()); } - + #[test] fn apply_vector2() { let product = test_run("<(0m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m)>").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("<(0m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - + test_run("<(0m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); } - + #[test] fn apply_vector3() { let product = test_run("<(0m, 1m, 2m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m, 3m)>").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("<(0m, 1m, 2m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2', 2 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - + test_run("<(0m, 1m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); } - + #[test] fn apply_vector4() { let product = test_run("<(0m, 1m, 2m, 3m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m, 3m, 4m)>").unwrap(); assert_eq!(product, Boolean(true).into()); - + let product = test_run("<(0m, 1m, 2m, 3m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2', 2 'm^2', 3 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - + test_run("<(0m, 1m, 1m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); } - + #[test] fn fold_vector2() { let product = test_run("<(1m, 2m)>::fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); - assert_eq!(product, Scalar { - dimension: Dimension::length(), - value: common_data_types::Float::new(3.0).unwrap() - }.into()); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(3.0).unwrap() + } + .into() + ); } - + #[test] fn fold_vector3() { let product = test_run("<(1m, 2m, 3m)>::fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); - assert_eq!(product, Scalar { - dimension: Dimension::length(), - value: common_data_types::Float::new(6.0).unwrap() - }.into()); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(6.0).unwrap() + } + .into() + ); } - + #[test] fn fold_vector4() { let product = test_run("<(1m, 2m, 3m, 4m)>::fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); - assert_eq!(product, Scalar { - dimension: Dimension::length(), - value: common_data_types::Float::new(10.0).unwrap() - }.into()); + assert_eq!( + product, + Scalar { + dimension: Dimension::length(), + value: common_data_types::Float::new(10.0).unwrap() + } + .into() + ); } } diff --git a/crates/interpreter/src/execution/values/void.rs b/crates/interpreter/src/execution/values/void.rs index e16bc57..58d4aa1 100644 --- a/crates/interpreter/src/execution/values/void.rs +++ b/crates/interpreter/src/execution/values/void.rs @@ -16,13 +16,15 @@ * program. If not, see . */ +use crate::execution::values::{closure::BuiltinCallableDatabase, StaticType}; + use super::{value_type::ValueType, Object, StaticTypeName}; #[derive(Debug, Hash, Clone, Copy, Eq, PartialEq)] pub struct ValueNone; impl Object for ValueNone { - fn get_type(&self) -> ValueType { + fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { ValueType::TypeNone } } @@ -32,3 +34,9 @@ impl StaticTypeName for ValueNone { "None" } } + +impl StaticType for ValueNone { + fn static_type() -> ValueType { + ValueType::TypeNone + } +} From d3ec5a9ce09796a4835e5a39d6366ae521def1c0 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 4 Jan 2026 02:46:54 -0500 Subject: [PATCH 060/106] WIP add methods to integers --- crates/interpreter/src/execution/mod.rs | 2 + .../src/execution/standard_environment.rs | 16 +- .../src/execution/values/closure.rs | 1 + .../src/execution/values/integer.rs | 231 +++++++++++++++--- 4 files changed, 211 insertions(+), 39 deletions(-) diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index e3f44a1..6a7ac16 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -36,6 +36,8 @@ use logging::{LocatedStr, RuntimeLog, StackScope}; use stack::Stack; use values::{Object, Value, ValueType}; +pub use standard_environment::build_prelude; + pub fn find_value<'p, 's>( log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], diff --git a/crates/interpreter/src/execution/standard_environment.rs b/crates/interpreter/src/execution/standard_environment.rs index eb5fb35..4b0db7f 100644 --- a/crates/interpreter/src/execution/standard_environment.rs +++ b/crates/interpreter/src/execution/standard_environment.rs @@ -2,7 +2,9 @@ use std::collections::HashMap; use common_data_types::{Dimension, Float}; -use crate::execution::values::{BuiltinCallableDatabase, Scalar, ValueNone}; +use crate::execution::values::{ + BuiltinCallableDatabase, Scalar, SignedInteger, UnsignedInteger, ValueNone, +}; use super::values::{Dictionary, Value, ValueType}; @@ -49,6 +51,18 @@ fn build_consts(database: &BuiltinCallableDatabase) -> Dictionary { } .into(), ), + ("UIntMax".into(), UnsignedInteger::from(u64::MAX).into()), + ("UIntMin".into(), UnsignedInteger::from(u64::MIN).into()), + ( + "UIntBits".into(), + UnsignedInteger::from(u64::BITS as u64).into(), + ), + ("SIntMax".into(), SignedInteger::from(i64::MAX).into()), + ("SIntMin".into(), SignedInteger::from(i64::MIN).into()), + ( + "SIntBits".into(), + UnsignedInteger::from(i64::BITS as u64).into(), + ), ]); Dictionary::new(database, types) } diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 257e9ab..d2e9557 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -44,6 +44,7 @@ impl BuiltinCallableDatabase { pub fn new() -> Self { let mut database = Self::default(); + super::integer::register_methods(&mut database); super::scalar::register_methods(&mut database); super::vector::register_methods(&mut database); super::value_type::register_methods(&mut database); diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index 8ba852d..66178b1 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -48,30 +48,12 @@ impl From for Integer { impl Object for Integer where - I: CheckedAdd - + CheckedDiv - + CheckedMul - + CheckedSub - + CheckedAdd - + Ord - + GetType - + Hash - + Copy - + Eq - + BitAnd - + BitOr - + BitXor - + Shl - + Shr - + Neg - + Not - + One - + ToPrimitive, + I: IntOps, Self: StaticTypeName + Into, Value: AsVariant, { fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { - I::get_type() + I::static_type() } fn bit_and( @@ -245,32 +227,129 @@ where impl StaticType for Integer where - I: GetType, + I: StaticType, { fn static_type() -> ValueType { - I::get_type() + I::static_type() } } -trait GetType { - fn get_type() -> ValueType; -} - -/// Custom version of the std::ops::Neg trait that can fail. -trait Neg { +trait IntOps: + CheckedAdd + + CheckedDiv + + CheckedMul + + CheckedSub + + CheckedAdd + + Ord + + Hash + + Copy + + Eq + + BitAnd + + BitOr + + BitXor + + Shl + + Shr + + Not + + One + + ToPrimitive + + StaticType +{ fn neg(&self, stack_trace: &[SourceReference]) -> ExpressionResult; -} -impl GetType for i64 { - fn get_type() -> ValueType { - ValueType::SignedInteger - } + fn count_ones(&self) -> u64; + fn count_zeros(&self) -> u64; + + fn leading_zeros(&self) -> u64; + fn trailing_zeros(&self) -> u64; + + fn leading_ones(&self) -> u64; + fn trailing_ones(&self) -> u64; + + fn rotate_left(&self, by: u64) -> Self; + fn rotate_right(&self, by: u64) -> Self; + + fn reverse_bits(&self) -> Self; + + fn abs(&self) -> Self; + fn sqrt(&self) -> Self; + + fn abs_diff(&self, rhs: Self) -> u64; + fn signum(&self) -> i64; + fn is_positive(&self) -> bool; + fn is_negative(&self) -> bool; + fn midpoint(&self, rhs: Self) -> Self; } -impl Neg for i64 { +// TODO cast_signed and cast_unsigned + +impl IntOps for i64 { fn neg(&self, _stack_trace: &[SourceReference]) -> ExpressionResult { Ok(SignedInteger::from(-self).into()) } + + fn count_ones(&self) -> u64 { + i64::count_ones(*self) as u64 + } + + fn count_zeros(&self) -> u64 { + i64::count_zeros(*self) as u64 + } + + fn leading_zeros(&self) -> u64 { + i64::leading_zeros(*self) as u64 + } + + fn trailing_zeros(&self) -> u64 { + i64::trailing_zeros(*self) as u64 + } + + fn leading_ones(&self) -> u64 { + i64::leading_ones(*self) as u64 + } + + fn trailing_ones(&self) -> u64 { + i64::trailing_ones(*self) as u64 + } + + fn rotate_left(&self, by: u64) -> Self { + i64::rotate_left(*self, by.min(u32::MIN as u64) as u32) + } + + fn rotate_right(&self, by: u64) -> Self { + i64::rotate_right(*self, by.min(u32::MIN as u64) as u32) + } + + fn reverse_bits(&self) -> Self { + i64::reverse_bits(*self) + } + + fn abs(&self) -> Self { + i64::abs(*self) + } + + fn sqrt(&self) -> Self { + i64::isqrt(*self) + } + + fn abs_diff(&self, rhs: Self) -> u64 { + i64::abs_diff(*self, rhs) + } + + fn signum(&self) -> i64 { + i64::signum(*self) + } + + fn is_positive(&self) -> bool { + i64::is_positive(*self) + } + + fn is_negative(&self) -> bool { + i64::is_negative(*self) + } + + fn midpoint(&self, rhs: Self) -> Self { + i64::midpoint(*self, rhs) + } } impl StaticTypeName for Integer { @@ -279,13 +358,13 @@ impl StaticTypeName for Integer { } } -impl GetType for u64 { - fn get_type() -> ValueType { - ValueType::UnsignedInteger +impl StaticType for i64 { + fn static_type() -> ValueType { + ValueType::SignedInteger } } -impl Neg for u64 { +impl IntOps for u64 { fn neg(&self, stack_trace: &[SourceReference]) -> ExpressionResult { Err(super::UnsupportedOperationError { type_name: UnsignedInteger::static_type_name().into(), @@ -293,6 +372,74 @@ impl Neg for u64 { } .to_error(stack_trace)) } + + fn count_ones(&self) -> u64 { + u64::count_ones(*self) as u64 + } + + fn count_zeros(&self) -> u64 { + u64::count_zeros(*self) as u64 + } + + fn leading_zeros(&self) -> u64 { + u64::leading_zeros(*self) as u64 + } + + fn trailing_zeros(&self) -> u64 { + u64::trailing_zeros(*self) as u64 + } + + fn leading_ones(&self) -> u64 { + u64::leading_ones(*self) as u64 + } + + fn trailing_ones(&self) -> u64 { + u64::trailing_ones(*self) as u64 + } + + fn rotate_left(&self, by: u64) -> Self { + u64::rotate_left(*self, by.min(u32::MIN as u64) as u32) + } + + fn rotate_right(&self, by: u64) -> Self { + u64::rotate_right(*self, by.min(u32::MIN as u64) as u32) + } + + fn reverse_bits(&self) -> Self { + u64::reverse_bits(*self) + } + + fn abs(&self) -> Self { + *self + } + + fn sqrt(&self) -> Self { + u64::isqrt(*self) + } + + fn abs_diff(&self, rhs: Self) -> u64 { + u64::abs_diff(*self, rhs) + } + + fn signum(&self) -> i64 { + if *self > 0 { + 1 + } else { + 0 + } + } + + fn is_positive(&self) -> bool { + *self > 0 + } + + fn is_negative(&self) -> bool { + false + } + + fn midpoint(&self, rhs: Self) -> Self { + u64::midpoint(*self, rhs) + } } impl StaticTypeName for Integer { @@ -301,9 +448,17 @@ impl StaticTypeName for Integer { } } +impl StaticType for u64 { + fn static_type() -> ValueType { + ValueType::UnsignedInteger + } +} + pub type SignedInteger = Integer; pub type UnsignedInteger = Integer; +pub fn register_methods(database: &mut BuiltinCallableDatabase) {} + #[cfg(test)] mod test { use crate::execution::{test_run, values::Boolean}; From 2b5a50175219ddd2f5542f26588b614ed578ee45 Mon Sep 17 00:00:00 2001 From: James Carl Date: Mon, 5 Jan 2026 19:00:30 -0500 Subject: [PATCH 061/106] Flush out integer methods --- .../src/execution/values/integer.rs | 612 +++++++++++++++++- 1 file changed, 606 insertions(+), 6 deletions(-) diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index 66178b1..8f8d34c 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -31,7 +31,11 @@ use crate::{ execution::{ errors::{ExpressionResult, GenericFailure, Raise}, logging::RuntimeLog, - values::{closure::BuiltinCallableDatabase, StaticType}, + values::{ + closure::BuiltinCallableDatabase, integer::methods::MethodSet, BuiltinFunction, + MissingAttributeError, StaticType, + }, + Stack, }, }; @@ -223,6 +227,84 @@ where ) -> ExpressionResult { Ok(Self(!self.0).into()) } + fn get_attribute( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, + attribute: &str, + ) -> ExpressionResult { + match attribute { + "count_ones" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::CountOnes, + >() + .into()), + "count_zeros" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::CountZeros, + >() + .into()), + "leading_zeros" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::LeadingZeros, + >() + .into()), + "trailing_zeros" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::TrailingZeros, + >() + .into()), + "leading_ones" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::LeadingOnes, + >() + .into()), + "trailing_ones" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::TrailingOnes, + >() + .into()), + "rotate_left" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::RotateLeft, + >() + .into()), + "rotate_right" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::RotateRight, + >() + .into()), + "reverse_bits" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::ReverseBits, + >() + .into()), + "abs" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::Abs, + >() + .into()), + "sqrt" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::Sqrt, + >() + .into()), + "abs_diff" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::AbsDiff, + >() + .into()), + "signum" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::Signum, + >() + .into()), + "is_positive" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::IsPositive, + >() + .into()), + "is_negative" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::IsNegative, + >() + .into()), + "midpoint" => Ok(BuiltinFunction::new::< + <::MethodSet as methods::MethodSet>::Midpoint, + >() + .into()), + _ => Err(MissingAttributeError { + name: attribute.into(), + } + .to_error(stack_trace)), + } + } } impl StaticType for Integer @@ -254,6 +336,8 @@ trait IntOps: + ToPrimitive + StaticType { + type MethodSet: MethodSet + 'static; + fn neg(&self, stack_trace: &[SourceReference]) -> ExpressionResult; fn count_ones(&self) -> u64; @@ -283,6 +367,8 @@ trait IntOps: // TODO cast_signed and cast_unsigned impl IntOps for i64 { + type MethodSet = methods::SignedIntegerMethodSet; + fn neg(&self, _stack_trace: &[SourceReference]) -> ExpressionResult { Ok(SignedInteger::from(-self).into()) } @@ -312,11 +398,11 @@ impl IntOps for i64 { } fn rotate_left(&self, by: u64) -> Self { - i64::rotate_left(*self, by.min(u32::MIN as u64) as u32) + i64::rotate_left(*self, by.min(u32::MAX as u64) as u32) } fn rotate_right(&self, by: u64) -> Self { - i64::rotate_right(*self, by.min(u32::MIN as u64) as u32) + i64::rotate_right(*self, by.min(u32::MAX as u64) as u32) } fn reverse_bits(&self) -> Self { @@ -365,6 +451,8 @@ impl StaticType for i64 { } impl IntOps for u64 { + type MethodSet = methods::UnsignedIntegerMethodSet; + fn neg(&self, stack_trace: &[SourceReference]) -> ExpressionResult { Err(super::UnsupportedOperationError { type_name: UnsignedInteger::static_type_name().into(), @@ -398,11 +486,11 @@ impl IntOps for u64 { } fn rotate_left(&self, by: u64) -> Self { - u64::rotate_left(*self, by.min(u32::MIN as u64) as u32) + u64::rotate_left(*self, by.min(u32::MAX as u64) as u32) } fn rotate_right(&self, by: u64) -> Self { - u64::rotate_right(*self, by.min(u32::MIN as u64) as u32) + u64::rotate_right(*self, by.min(u32::MAX as u64) as u32) } fn reverse_bits(&self) -> Self { @@ -454,10 +542,297 @@ impl StaticType for u64 { } } +mod methods { + use enum_downcast::IntoVariant; + + use super::*; + use crate::{build_method, execution::values::Boolean}; + + pub trait MethodSet { + type CountOnes; + type CountZeros; + + type LeadingZeros; + type TrailingZeros; + + type LeadingOnes; + type TrailingOnes; + + type RotateLeft; + type RotateRight; + + type ReverseBits; + + type Abs; + type Sqrt; + + type AbsDiff; + type Signum; + type IsPositive; + type IsNegative; + type Midpoint; + } + + macro_rules! build_method_set { + ($name:ident) => { + paste::paste! { + pub struct [<$name CountOnes>]; + pub struct [<$name CountZeros>]; + pub struct [<$name LeadingZeros>]; + pub struct [<$name TrailingZeros>]; + pub struct [<$name LeadingOnes>]; + pub struct [<$name TrailingOnes>]; + pub struct [<$name RotateLeft>]; + pub struct [<$name RotateRight>]; + pub struct [<$name ReverseBitsf>]; + pub struct [<$name Abs>]; + pub struct [<$name Sqrt>]; + pub struct [<$name AbsDiff>]; + pub struct [<$name Signum>]; + pub struct [<$name IsPositive>]; + pub struct [<$name IsNegative>]; + pub struct [<$name Midpoint>]; + + pub struct [<$name MethodSet>]; + impl MethodSet for [<$name MethodSet>] { + type CountOnes = [<$name CountOnes>]; + type CountZeros = [<$name CountZeros>]; + type LeadingZeros = [<$name LeadingZeros>]; + type TrailingZeros = [<$name TrailingZeros>]; + type LeadingOnes = [<$name LeadingOnes>]; + type TrailingOnes = [<$name TrailingOnes>]; + type RotateLeft = [<$name RotateLeft>]; + type RotateRight = [<$name RotateRight>]; + type ReverseBits = [<$name ReverseBitsf>]; + type Abs = [<$name Abs>]; + type Sqrt = [<$name Sqrt>]; + type AbsDiff = [<$name AbsDiff>]; + type Signum = [<$name Signum>]; + type IsPositive = [<$name IsPositive>]; + type IsNegative = [<$name IsNegative>]; + type Midpoint = [<$name Midpoint>]; + } + } + }; + } + + build_method_set!(SignedInteger); + build_method_set!(UnsignedInteger); + + pub fn register_methods(database: &mut BuiltinCallableDatabase) + where + I: IntOps + Send + Sync + std::fmt::Debug + std::fmt::LowerHex, + Integer: StaticTypeName + 'static + Into, + Value: IntoVariant> + AsVariant>, + { + build_method!( + database, + forward = ::CountOnes, format!("{}::count_ones", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer) -> UnsignedInteger + { + Ok(UnsignedInteger::from(this.0.count_ones())) + } + ); + build_method!( + database, + forward = ::CountZeros, format!("{}::count_zeros", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer) -> UnsignedInteger + { + Ok(UnsignedInteger::from(this.0.count_zeros())) + } + ); + build_method!( + database, + forward = ::LeadingZeros, format!("{}::leading_zeros", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer) -> UnsignedInteger + { + Ok(UnsignedInteger::from(this.0.leading_zeros())) + } + ); + build_method!( + database, + forward = ::TrailingZeros, format!("{}::trailing_zeros", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer) -> UnsignedInteger + { + Ok(UnsignedInteger::from(this.0.trailing_zeros())) + } + ); + build_method!( + database, + forward = ::LeadingOnes, format!("{}::leading_ones", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer) -> UnsignedInteger + { + Ok(UnsignedInteger::from(this.0.leading_ones())) + } + ); + build_method!( + database, + forward = ::TrailingOnes, format!("{}::trailing_ones", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer) -> UnsignedInteger + { + Ok(UnsignedInteger::from(this.0.trailing_ones())) + } + ); + build_method!( + database, + forward = ::RotateLeft, format!("{}::rotate_left", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer, + n: UnsignedInteger) -> Integer + { + Ok(Integer::::from(this.0.rotate_left(n.0))) + } + ); + build_method!( + database, + forward = ::RotateRight, format!("{}::rotate_right", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer, + n: UnsignedInteger) -> Integer + { + Ok(Integer::::from(this.0.rotate_right(n.0))) + } + ); + build_method!( + database, + forward = ::ReverseBits, format!("{}::reverse_bits", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer) -> Integer + { + Ok(Integer::::from(this.0.reverse_bits())) + } + ); + build_method!( + database, + forward = ::Abs, format!("{}::abs", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer) -> Integer + { + Ok(Integer::::from(this.0.abs())) + } + ); + build_method!( + database, + forward = ::Sqrt, format!("{}::sqrt", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer) -> Integer + { + Ok(Integer::::from(this.0.sqrt())) + } + ); + build_method!( + database, + forward = ::AbsDiff, format!("{}::abs_diff", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer, + other: Value) -> UnsignedInteger + { + let other = other.downcast::>(stack_trace)?; + Ok(UnsignedInteger::from(this.0.abs_diff(other.0))) + } + ); + build_method!( + database, + forward = ::Signum, format!("{}::signum", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer) -> SignedInteger + { + Ok(SignedInteger::from(this.0.signum())) + } + ); + build_method!( + database, + forward = ::IsPositive, format!("{}::is_positive", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer) -> Boolean + { + Ok(Boolean(this.0.is_positive())) + } + ); + build_method!( + database, + forward = ::IsNegative, format!("{}::is_negative", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer) -> Boolean + { + Ok(Boolean(this.0.is_negative())) + } + ); + build_method!( + database, + forward = ::Midpoint, format!("{}::midpoint", Integer::::static_type_name()), ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: Integer, + rhs: Value) -> Integer + { + let rhs = rhs.downcast::>(stack_trace)?; + Ok(Integer::::from(this.0.midpoint(rhs.0))) + } + ); + } +} + pub type SignedInteger = Integer; pub type UnsignedInteger = Integer; -pub fn register_methods(database: &mut BuiltinCallableDatabase) {} +pub fn register_methods(database: &mut BuiltinCallableDatabase) { + methods::register_methods::(database); + methods::register_methods::(database); +} #[cfg(test)] mod test { @@ -729,4 +1104,229 @@ mod test { let product = test_run("!0xAAu").unwrap(); assert_eq!(product, UnsignedInteger::from(!0xAA).into()); } + + #[test] + fn unsigned_count_ones() { + let product = test_run("0x00FF00FF00FF00FFu::count_ones() == 32u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_count_ones() { + let product = test_run("0x00FF00FF00FF00FFi::count_ones() == 32u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_count_zeros() { + let product = test_run("0x00FF00FF00FF00FFu::count_zeros() == 32u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_count_zeros() { + let product = test_run("0x00FF00FF00FF00FFi::count_zeros() == 32u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_leading_zeros() { + let product = test_run("0x00FF00FF00FF00FFu::leading_zeros() == 8u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_leading_zeros() { + let product = test_run("0x00FF00FF00FF00FFi::leading_zeros() == 8u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_trailing_zeros() { + let product = test_run("0xFF00FF00FF00FF00u::trailing_zeros() == 8u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_trailing_zeros() { + let product = test_run("0x0000FF00FF00FF00i::trailing_zeros() == 8u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_leading_ones() { + let product = test_run("0xFF00FF00FF00FF00u::leading_ones() == 8u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_leading_ones() { + let product = test_run("(-1i)::leading_ones() == 64u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_trailing_ones() { + let product = test_run("0x00FF00FF00FF00FFu::trailing_ones() == 8u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_trailing_ones() { + let product = test_run("0x00FF00FF00FF00FFi::trailing_ones() == 8u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_rotate_left() { + let product = + test_run("0x00FF00FF00FF00FFu::rotate_left(n = 4u) == 0x0FF00FF00FF00FF0u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_rotate_left() { + let product = + test_run("0x00FF00FF00FF00FFi::rotate_left(n = 4u) == 0x0FF00FF00FF00FF0i").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_rotate_right() { + let product = + test_run("0x00FF00FF00FF00FFu::rotate_right(n = 4u) == 0xF00FF00FF00FF00Fu").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_rotate_right() { + let product = test_run("0xAAi::rotate_right(n = 12u) == 0x0AA0000000000000i").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_reverse_bits() { + let product = + test_run("0x5555555555555555u::reverse_bits() == 0xAAAAAAAAAAAAAAAAu").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_reverse_bits() { + let product = + test_run("0x00000000FFFF0000i::reverse_bits() == 0x0000FFFF00000000i").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_abs() { + let product = test_run("10u::abs() == 10u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_abs() { + let product = test_run("(-10i)::abs() == 10i").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_sqrt() { + let product = test_run("64u::sqrt() == 8u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_sqrt() { + let product = test_run("64i::sqrt() == 8i").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_abs_diff() { + let product = test_run("10u::abs_diff(other = 5u) == 5u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_abs_diff() { + let product = test_run("(-10i)::abs_diff(other = 5i) == 15u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_signum() { + let product = test_run("10u::signum() == 1i").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("0u::signum() == 0i").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_signum() { + let product = test_run("10i::signum() == 1i").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("0i::signum() == 0i").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("(-1i)::signum() == -1i").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unsigned_is_positive() { + let product = test_run("10u::is_positive()").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("0u::is_positive()").unwrap(); + assert_eq!(product, Boolean(false).into()); + } + + #[test] + fn signed_is_positive() { + let product = test_run("10i::is_positive()").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("0i::is_positive()").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("(-1i)::is_positive()").unwrap(); + assert_eq!(product, Boolean(false).into()); + } + + #[test] + fn unsigned_is_negative() { + let product = test_run("10u::is_negative()").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("0u::is_negative()").unwrap(); + assert_eq!(product, Boolean(false).into()); + } + + #[test] + fn signed_is_negative() { + let product = test_run("10i::is_negative()").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("0i::is_negative()").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("(-1i)::is_negative()").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + // type Midpoint = [<$name Midpoint>]; + #[test] + fn unsigned_midpoint() { + let product = test_run("10u::midpoint(rhs = 10u) == 10u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_midpoint() { + let product = test_run("10i::midpoint(rhs = 10i) == 10i").unwrap(); + assert_eq!(product, Boolean(true).into()); + } } From 10620f4899a315baf0d79f22b1d89dba0a23aaf1 Mon Sep 17 00:00:00 2001 From: James Carl Date: Mon, 5 Jan 2026 19:00:44 -0500 Subject: [PATCH 062/106] Update flake.lock --- flake.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/flake.lock b/flake.lock index 54ef702..fd396b7 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "crane": { "locked": { - "lastModified": 1763938834, - "narHash": "sha256-j8iB0Yr4zAvQLueCZ5abxfk6fnG/SJ5JnGUziETjwfg=", + "lastModified": 1767461147, + "narHash": "sha256-TH/xTeq/RI+DOzo+c+4F431eVuBpYVwQwBxzURe7kcI=", "owner": "ipetkov", "repo": "crane", - "rev": "d9e753122e51cee64eb8d2dddfe11148f339f5a2", + "rev": "7d59256814085fd9666a2ae3e774dc5ee216b630", "type": "github" }, "original": { @@ -23,11 +23,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1763880175, - "narHash": "sha256-WfItZn6duisxCxyltbu7Hs7kxzNeylgZGOwCYwHe26g=", + "lastModified": 1767596244, + "narHash": "sha256-P4NRZUjYbeuzv4hGrXxfdg0QpdGVoeNn0CMmzIyr398=", "owner": "nix-community", "repo": "fenix", - "rev": "a563f057979806c59da53070297502eb7af22f62", + "rev": "eedfb5a27900e82ec0390acc83d4d226ce86e714", "type": "github" }, "original": { @@ -56,11 +56,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1763966396, - "narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=", + "lastModified": 1767379071, + "narHash": "sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf+Okucw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "5ae3b07d8d6527c42f17c876e404993199144b6a", + "rev": "fb7944c166a3b630f177938e478f0378e64ce108", "type": "github" }, "original": { @@ -81,11 +81,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1763846202, - "narHash": "sha256-f5PvQONttEQCjnQ52zAEVJvXDZ5l2gbItLfDyfcyGgk=", + "lastModified": 1767551763, + "narHash": "sha256-lcA/e3++3aZQSj6xCsBi2VpYyC3Q+oO/oukgfHiL+Ts=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "50621856a594a357c3aff0c5176ba8db4118133d", + "rev": "6a1246b69ca761480b9278df019f717b549cface", "type": "github" }, "original": { From 8405da5bd7f3bc859cd1a0749a518a5d0f295d3b Mon Sep 17 00:00:00 2001 From: James Carl Date: Wed, 7 Jan 2026 18:46:27 -0500 Subject: [PATCH 063/106] Add methods to list --- crates/interpreter/src/compile/expressions.rs | 10 +- crates/interpreter/src/execution/mod.rs | 70 +- .../src/execution/values/boolean.rs | 11 +- .../src/execution/values/closure.rs | 15 +- .../src/execution/values/dictionary.rs | 6 +- .../src/execution/values/integer.rs | 31 +- .../interpreter/src/execution/values/list.rs | 963 +- .../interpreter/src/execution/values/mod.rs | 112 +- .../src/execution/values/scalar.rs | 43 +- .../src/execution/values/string.rs | 7 +- .../src/execution/values/value_type.rs | 13 +- .../src/execution/values/vector.rs | 22 +- .../interpreter/src/execution/values/void.rs | 6 +- .../tree-sitter-command-cad-model/grammar.js | 35 +- .../src/grammar.json | 76 +- .../src/node-types.json | 16 +- .../src/parser.c | 9767 +++++++++-------- 17 files changed, 6318 insertions(+), 4885 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 17fa1e2..0976868 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -564,7 +564,6 @@ pub enum BinaryExpressionOperation { Add, Sub, Div, - DivDiv, Lt, LtLt, LtEq, @@ -573,6 +572,7 @@ pub enum BinaryExpressionOperation { GtEq, GtGt, BitXor, + Xor, Or, OrOr, } @@ -590,7 +590,7 @@ impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for BinaryExpression { input: &'i str, value: nodes::BinaryExpression<'t>, ) -> Result, Error<'t, 'i>> { - type Operation<'t> = nodes::anon_unions::NotEq_And_AndAnd_Mul_MulMul_Add_Sub_Div_DivDiv_Lt_LtLt_LtEq_EqEq_Gt_GtEq_GtGt_BitXor_Or_OrOr<'t>; + type Operation<'t> = nodes::anon_unions::NotEq_And_AndAnd_Mul_MulMul_Add_Sub_Div_Lt_LtLt_LtEq_EqEq_Gt_GtEq_GtGt_BitXor_BitXorBitXor_Or_OrOr<'t>; let operation = value.op()?; @@ -609,9 +609,6 @@ impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for BinaryExpression { Operation::Add(add) => AstNode::new(file, &add, BinaryExpressionOperation::Add), Operation::Sub(sub) => AstNode::new(file, &sub, BinaryExpressionOperation::Sub), Operation::Div(div) => AstNode::new(file, &div, BinaryExpressionOperation::Div), - Operation::DivDiv(div_div) => { - AstNode::new(file, &div_div, BinaryExpressionOperation::DivDiv) - } Operation::Lt(lt) => AstNode::new(file, <, BinaryExpressionOperation::Lt), Operation::LtLt(lt_lt) => AstNode::new(file, <_lt, BinaryExpressionOperation::LtLt), Operation::LtEq(lt_eq) => AstNode::new(file, <_eq, BinaryExpressionOperation::LtEq), @@ -622,6 +619,9 @@ impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for BinaryExpression { Operation::BitXor(bit_xor) => { AstNode::new(file, &bit_xor, BinaryExpressionOperation::BitXor) } + Operation::BitXorBitXor(xor_xor) => { + AstNode::new(file, &xor_xor, BinaryExpressionOperation::Xor) + } Operation::Or(or) => AstNode::new(file, &or, BinaryExpressionOperation::Or), Operation::OrOr(or_or) => AstNode::new(file, &or_or, BinaryExpressionOperation::OrOr), }; diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 6a7ac16..b92b911 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -205,9 +205,9 @@ fn execute_unary_expression( let node = &expression.node; let value = execute_expression(log, stack_trace, stack, database, &node.expression)?; match node.operation.node { - UnaryExpressionOperation::Add => value.unary_plus(log, stack_trace), - UnaryExpressionOperation::Sub => value.unary_minus(log, stack_trace), - UnaryExpressionOperation::Not => value.unary_not(log, stack_trace), + UnaryExpressionOperation::Add => value.unary_plus(log, stack_trace, database), + UnaryExpressionOperation::Sub => value.unary_minus(log, stack_trace, database), + UnaryExpressionOperation::Not => value.unary_not(log, stack_trace, database), } }) } @@ -291,54 +291,74 @@ fn execute_binary_expression( BinaryExpressionOperation::NotEq => Ok(values::Boolean( !value_a .clone() - .cmp(log, stack_trace, value_b.clone()) + .cmp(log, stack_trace, database, value_b.clone()) .map(|ord| matches!(ord, Ordering::Equal)) - .or_else(|_| value_a.eq(log, stack_trace, value_b))?, + .or_else(|_| value_a.eq(log, stack_trace, database, value_b))?, ) .into()), - BinaryExpressionOperation::And => value_a.bit_and(log, stack_trace, value_b), - BinaryExpressionOperation::AndAnd => value_a.and(log, stack_trace, value_b), - BinaryExpressionOperation::Mul => value_a.multiply(log, stack_trace, value_b), - BinaryExpressionOperation::MulMul => value_a.exponent(log, stack_trace, value_b), - BinaryExpressionOperation::Add => value_a.addition(log, stack_trace, value_b), - BinaryExpressionOperation::Sub => value_a.subtraction(log, stack_trace, value_b), - BinaryExpressionOperation::Div => value_a.divide(log, stack_trace, value_b), - BinaryExpressionOperation::DivDiv => { - value_a.floor_divide(log, stack_trace, value_b) + BinaryExpressionOperation::And => { + value_a.bit_and(log, stack_trace, database, value_b) + } + BinaryExpressionOperation::AndAnd => { + value_a.and(log, stack_trace, database, value_b) + } + BinaryExpressionOperation::Mul => { + value_a.multiply(log, stack_trace, database, value_b) + } + BinaryExpressionOperation::MulMul => { + value_a.exponent(log, stack_trace, database, value_b) + } + BinaryExpressionOperation::Add => { + value_a.addition(log, stack_trace, database, value_b) + } + BinaryExpressionOperation::Sub => { + value_a.subtraction(log, stack_trace, database, value_b) + } + BinaryExpressionOperation::Div => { + value_a.divide(log, stack_trace, database, value_b) } BinaryExpressionOperation::Lt => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, value_b)?, + value_a.cmp(log, stack_trace, database, value_b)?, Ordering::Less )) .into()), - BinaryExpressionOperation::LtLt => value_a.left_shift(log, stack_trace, value_b), + BinaryExpressionOperation::LtLt => { + value_a.left_shift(log, stack_trace, database, value_b) + } BinaryExpressionOperation::LtEq => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, value_b)?, + value_a.cmp(log, stack_trace, database, value_b)?, Ordering::Less | Ordering::Equal )) .into()), BinaryExpressionOperation::EqEq => Ok(values::Boolean( value_a .clone() - .cmp(log, stack_trace, value_b.clone()) + .cmp(log, stack_trace, database, value_b.clone()) .map(|ord| matches!(ord, Ordering::Equal)) - .or_else(|_| value_a.eq(log, stack_trace, value_b))?, + .or_else(|_| value_a.eq(log, stack_trace, database, value_b))?, ) .into()), BinaryExpressionOperation::Gt => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, value_b)?, + value_a.cmp(log, stack_trace, database, value_b)?, Ordering::Greater )) .into()), BinaryExpressionOperation::GtEq => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, value_b)?, + value_a.cmp(log, stack_trace, database, value_b)?, Ordering::Equal | Ordering::Greater )) .into()), - BinaryExpressionOperation::GtGt => value_a.right_shift(log, stack_trace, value_b), - BinaryExpressionOperation::BitXor => value_a.bit_xor(log, stack_trace, value_b), - BinaryExpressionOperation::Or => value_a.bit_or(log, stack_trace, value_b), - BinaryExpressionOperation::OrOr => value_a.or(log, stack_trace, value_b), + BinaryExpressionOperation::GtGt => { + value_a.right_shift(log, stack_trace, database, value_b) + } + BinaryExpressionOperation::BitXor => { + value_a.bit_xor(log, stack_trace, database, value_b) + } + BinaryExpressionOperation::Xor => value_a.xor(log, stack_trace, database, value_b), + BinaryExpressionOperation::Or => { + value_a.bit_or(log, stack_trace, database, value_b) + } + BinaryExpressionOperation::OrOr => value_a.or(log, stack_trace, database, value_b), } }, ) diff --git a/crates/interpreter/src/execution/values/boolean.rs b/crates/interpreter/src/execution/values/boolean.rs index da5465a..5c279c1 100644 --- a/crates/interpreter/src/execution/values/boolean.rs +++ b/crates/interpreter/src/execution/values/boolean.rs @@ -26,6 +26,8 @@ use crate::{ use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; +use std::borrow::Cow; + #[derive(Debug, Hash, Clone, Copy, Eq, PartialEq)] pub struct Boolean(pub bool); @@ -38,6 +40,7 @@ impl Object for Boolean { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -47,6 +50,7 @@ impl Object for Boolean { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -57,6 +61,7 @@ impl Object for Boolean { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -67,6 +72,7 @@ impl Object for Boolean { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -77,14 +83,15 @@ impl Object for Boolean { self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, ) -> ExpressionResult { Ok(Self(!self.0).into()) } } impl StaticTypeName for Boolean { - fn static_type_name() -> &'static str { - "Boolean" + fn static_type_name() -> Cow<'static, str> { + "Boolean".into() } } diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index d2e9557..b33d0fa 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -16,7 +16,7 @@ * program. If not, see . */ -use std::{any::TypeId, collections::HashMap, fmt::Display, sync::Arc}; +use std::{any::TypeId, borrow::Cow, collections::HashMap, fmt::Display, sync::Arc}; use hashable_map::HashableMap; @@ -48,6 +48,7 @@ impl BuiltinCallableDatabase { super::scalar::register_methods(&mut database); super::vector::register_methods(&mut database); super::value_type::register_methods(&mut database); + super::list::register_methods(&mut database); database } @@ -415,8 +416,8 @@ impl Object for UserClosure { } impl StaticTypeName for UserClosure { - fn static_type_name() -> &'static str { - "Closure" + fn static_type_name() -> Cow<'static, str> { + "Closure".into() } } @@ -506,8 +507,8 @@ macro_rules! build_closure_type { } impl $crate::execution::values::StaticTypeName for $name { - fn static_type_name() -> &'static str { - "Closure" + fn static_type_name() -> std::borrow::Cow<'static, str> { + "Closure".into() } } @@ -744,8 +745,8 @@ impl Object for BuiltinFunction { } impl StaticTypeName for BuiltinFunction { - fn static_type_name() -> &'static str { - "Builtin Function" + fn static_type_name() -> Cow<'static, str> { + "Builtin Function".into() } } diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index 6abc27f..a4f88f2 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -16,7 +16,7 @@ * program. If not, see . */ -use std::{collections::HashMap, fmt::Display, sync::Arc}; +use std::{borrow::Cow, collections::HashMap, fmt::Display, sync::Arc}; use hashable_map::HashableMap; @@ -76,8 +76,8 @@ impl Object for Dictionary { } impl StaticTypeName for Dictionary { - fn static_type_name() -> &'static str { - "Dictionary" + fn static_type_name() -> Cow<'static, str> { + "Dictionary".into() } } diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index 8f8d34c..abaa2d0 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -21,6 +21,7 @@ use num_traits::{ pow::checked_pow, CheckedAdd, CheckedDiv, CheckedMul, CheckedSub, One, ToPrimitive, }; use std::{ + borrow::Cow, cmp::Ordering, hash::Hash, ops::{BitAnd, BitOr, BitXor, Not, Shl, Shr}, @@ -64,6 +65,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -73,6 +75,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -82,6 +85,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -92,6 +96,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -101,6 +106,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -116,6 +122,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -131,6 +138,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -146,6 +154,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -156,18 +165,11 @@ where ) .into()) } - fn floor_divide( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - rhs: Value, - ) -> ExpressionResult { - self.divide(log, stack_trace, rhs) - } fn exponent( self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -192,6 +194,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -201,6 +204,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -210,6 +214,7 @@ where self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, ) -> ExpressionResult { Ok(self.clone().into()) } @@ -217,6 +222,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, ) -> ExpressionResult { self.0.neg(stack_trace).into() } @@ -224,6 +230,7 @@ where self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, ) -> ExpressionResult { Ok(Self(!self.0).into()) } @@ -439,8 +446,8 @@ impl IntOps for i64 { } impl StaticTypeName for Integer { - fn static_type_name() -> &'static str { - "Signed Integer" + fn static_type_name() -> Cow<'static, str> { + "Signed Integer".into() } } @@ -531,8 +538,8 @@ impl IntOps for u64 { } impl StaticTypeName for Integer { - fn static_type_name() -> &'static str { - "Unsigned Integer" + fn static_type_name() -> Cow<'static, str> { + "Unsigned Integer".into() } } diff --git a/crates/interpreter/src/execution/values/list.rs b/crates/interpreter/src/execution/values/list.rs index f1a75aa..449f42f 100644 --- a/crates/interpreter/src/execution/values/list.rs +++ b/crates/interpreter/src/execution/values/list.rs @@ -17,18 +17,23 @@ */ use crate::{ + build_closure_type, build_method, compile::{AstNode, Expression, SourceReference}, execute_expression, execution::{ + errors::{Error, ErrorType, GenericFailure, Raise as _}, logging::RuntimeLog, stack::Stack, - values::{closure::BuiltinCallableDatabase, StaticType}, + values::{ + closure::BuiltinCallableDatabase, Boolean, BuiltinFunction, Dictionary, + MissingAttributeError, StaticType, UnsignedInteger, ValueNone, + }, }, }; use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; -use std::sync::Arc; +use std::{borrow::Cow, cmp::Ordering, collections::HashMap, sync::Arc}; #[derive(Debug, Clone, Eq, PartialEq)] pub struct List { @@ -78,6 +83,41 @@ impl List { values: Arc::new(values), } } + + fn map_raw( + &self, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + operation_name: &'static str, + mut operation: impl FnMut(&Value) -> ExpressionResult, + ) -> ExpressionResult { + let values: Vec = self + .values + .iter() + .enumerate() + .map(|(index, value)| { + operation(value).map_err(|error| OperationMappingError { + operation_name, + index, + error, + }) + }) + .collect::>() + .map_err(|error| error.to_error(stack_trace))?; + + Ok(Self::from_iter(database, values)) + } + + fn map_operation( + &self, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + operation_name: &'static str, + operation: impl FnMut(&Value) -> ExpressionResult, + ) -> ExpressionResult { + self.map_raw(stack_trace, database, operation_name, operation) + .map(|value| value.into()) + } } impl Object for List { @@ -89,19 +129,247 @@ impl Object for List { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(self.values == rhs.values) } - // TODO set operations - // Append operations + fn get_attribute( + &self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + _callable_database: &BuiltinCallableDatabase, + attribute: &str, + ) -> ExpressionResult { + match attribute { + "append" => Ok(BuiltinFunction::new::().into()), + "slice" => Ok(BuiltinFunction::new::().into()), + "get" => Ok(BuiltinFunction::new::().into()), + "chunks" => Ok(BuiltinFunction::new::().into()), + + "map" => Ok(BuiltinFunction::new::().into()), + "fold" => Ok(BuiltinFunction::new::().into()), + "retain" => Ok(BuiltinFunction::new::().into()), + + "sort" => Ok(BuiltinFunction::new::().into()), + "reverse" => Ok(BuiltinFunction::new::().into()), + "truncate" => Ok(BuiltinFunction::new::().into()), + + "deduplicate" => Ok(BuiltinFunction::new::().into()), + "union" => Ok(BuiltinFunction::new::().into()), + "intersection" => Ok(BuiltinFunction::new::().into()), + "difference" => Ok(BuiltinFunction::new::().into()), + "symmetric_difference" => { + Ok(BuiltinFunction::new::().into()) + } + "cartesian_product" => Ok(BuiltinFunction::new::().into()), + _ => Err(MissingAttributeError { + name: attribute.into(), + } + .to_error(stack_trace)), + } + } + + fn and( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + rhs: Value, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "and", move |value| { + value.clone().and(log, stack_trace, database, rhs.clone()) + }) + } + fn or( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + rhs: Value, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "or", move |value| { + value.clone().or(log, stack_trace, database, rhs.clone()) + }) + } + fn xor( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + rhs: Value, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "xor", move |value| { + value.clone().xor(log, stack_trace, database, rhs.clone()) + }) + } + fn bit_and( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + rhs: Value, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "bit and", move |value| { + value + .clone() + .bit_and(log, stack_trace, database, rhs.clone()) + }) + } + fn bit_or( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + rhs: Value, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "bit or", move |value| { + value + .clone() + .bit_or(log, stack_trace, database, rhs.clone()) + }) + } + fn bit_xor( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + rhs: Value, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "bit xor", move |value| { + value + .clone() + .bit_xor(log, stack_trace, database, rhs.clone()) + }) + } + fn addition( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + rhs: Value, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "addition", move |value| { + value + .clone() + .addition(log, stack_trace, database, rhs.clone()) + }) + } + fn subtraction( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + rhs: Value, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "subtraction", move |value| { + value + .clone() + .subtraction(log, stack_trace, database, rhs.clone()) + }) + } + fn multiply( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + rhs: Value, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "multiply", move |value| { + value + .clone() + .multiply(log, stack_trace, database, rhs.clone()) + }) + } + fn divide( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + rhs: Value, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "divide", move |value| { + value + .clone() + .divide(log, stack_trace, database, rhs.clone()) + }) + } + fn exponent( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + rhs: Value, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "exponent", move |value| { + value + .clone() + .exponent(log, stack_trace, database, rhs.clone()) + }) + } + fn left_shift( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + rhs: Value, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "left shift", move |value| { + value + .clone() + .left_shift(log, stack_trace, database, rhs.clone()) + }) + } + fn right_shift( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + rhs: Value, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "right shift", move |value| { + value + .clone() + .right_shift(log, stack_trace, database, rhs.clone()) + }) + } + fn unary_plus( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "unary plus", move |value| { + value.clone().unary_plus(log, stack_trace, database) + }) + } + fn unary_minus( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "unary minus", move |value| { + value.clone().unary_minus(log, stack_trace, database) + }) + } + fn unary_not( + self, + log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, + ) -> ExpressionResult { + self.map_operation(stack_trace, database, "unary not", move |value| { + value.clone().unary_not(log, stack_trace, database) + }) + } } impl StaticTypeName for List { - fn static_type_name() -> &'static str { - "List" + fn static_type_name() -> Cow<'static, str> { + "List".into() } } @@ -111,10 +379,455 @@ impl StaticType for List { } } +#[derive(Debug)] +struct OperationMappingError { + pub operation_name: &'static str, + pub index: usize, + pub error: Error, +} + +impl ErrorType for OperationMappingError {} + +impl std::fmt::Display for OperationMappingError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "Failed to map operation `{}` to index {}: {}", + self.operation_name, self.index, self.error + ) + } +} + +#[derive(Debug)] +struct SortingError { + pub errors: Vec, +} + +impl ErrorType for SortingError {} + +impl std::fmt::Display for SortingError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + if self.errors.len() == 1 { + write!( + f, + "Failed to sort. An element of the list could not be compared: {}", + self.errors[0] + ) + } else { + writeln!( + f, + "Failed to sort. Multiple elements could not be compared:", + )?; + + for error in self.errors.iter() { + writeln!(f, "\t{}", error)?; + } + + Ok(()) + } + } +} + +mod methods { + pub struct Append; + pub struct Slice; + pub struct Get; + pub struct Chunks; + + pub struct Map; + pub struct Fold; + pub struct Retain; + + pub struct Sort; + pub struct Reverse; + pub struct Truncate; + + pub struct Deduplicate; + pub struct Union; + pub struct Intersection; + pub struct Difference; + pub struct SymmetricDifference; + pub struct CartesianProduct; +} + +pub fn register_methods(database: &mut BuiltinCallableDatabase) { + build_closure_type!(MapClosure(c: Value) -> Value); + build_closure_type!(FoldClosure(previous: Value, c: Value) -> Value); + build_closure_type!(RetainClosure(c: Value) -> Boolean); + + build_method!( + database, + forward = methods::Append, "List::append", ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List, + rhs: List + ) -> List { + let mut content = Arc::unwrap_or_clone(this.values); + content.extend_from_slice(&rhs.values); + + Ok(List::from_iter(database, content)) + } + ); + build_method!( + database, + forward = methods::Slice, "List::slice", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List, + start: Option = ValueNone.into(), + end: Option = ValueNone.into() + ) -> List { + + let start = if let Some(start) = start { + start.0 as usize + } else { + 0usize + }; + + let end = if let Some(end) = end { + end.0 as usize + } else { + this.values.len() + }; + + let slice = this.values.get(start..end); + + if let Some(slice) = slice { + Ok(List::from_iter(database, slice.into_iter().cloned())) + } else { + Err(GenericFailure("Slice out of range").to_error(stack_trace.iter())) + } + } + ); + build_method!( + database, + forward = methods::Get, "List::get", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: List, + i: UnsignedInteger + ) -> Value { + let slice = this.values.get(i.0 as usize); + + if let Some(slice) = slice { + Ok(slice.clone()) + } else { + Err(GenericFailure("Index out of range").to_error(stack_trace.iter())) + } + } + ); + build_method!( + database, + forward = methods::Chunks, "List::chunks", ( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List, + size: UnsignedInteger, + strict: Boolean = Boolean(true).into() + ) -> List { + fn wrap_chunks<'i, I: Iterator>(database: &BuiltinCallableDatabase, chunks: I) -> List { + let mut list = Vec::new(); + for chunk in chunks { + list.push(List::from_iter(database, chunk.into_iter().cloned()).into()); + } + List::from_iter(database, list.into_iter()) + } + + let chunks = if strict.0 { + wrap_chunks(database, this.values.chunks_exact(size.0 as usize)) + } else { + wrap_chunks(database, this.values.chunks(size.0 as usize)) + }; + + Ok(chunks) + + } + ); + build_method!( + database, + forward = methods::Map, "List::map",( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List, + f: MapClosure) -> List + { + let values: Vec = this.values.iter().map(|c| f.call(log, stack_trace, stack, database, Dictionary::new(database, HashMap::from_iter([ + ( + "c".into(), + c.clone() + ) + ])))).collect::>()?; + + Ok(List::from_iter(database, values.into_iter())) + } + ); + build_method!( + database, + forward = methods::Fold, "List::fold",( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List, + init: Value, + f: FoldClosure) -> Value + { + + let mut accumulator = init; + for component in this.values.iter() { + accumulator = f.call(log, stack_trace, stack, database, Dictionary::new(database, HashMap::from_iter([ + ( + "c".into(), + component.clone() + ), + ( + "previous".into(), + accumulator + ) + ])))?; + } + + Ok(accumulator) + } + ); + build_method!( + database, + forward = methods::Retain, "List::retain",( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List, + f: RetainClosure) -> List + { + let mut values: Vec = Vec::with_capacity(this.values.len()); + + for value in this.values.iter() { + let retain = f.call(log, stack_trace, stack, database, Dictionary::new(database, HashMap::from_iter([ + ( + "c".into(), + value.clone() + ) + ])))?.downcast::(stack_trace)?; + + if retain.0 { + values.push(value.clone()); + } + } + + Ok(List::from_iter(database, values.into_iter())) + } + ); + build_method!( + database, + forward = methods::Sort, "List::sort",( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List) -> List + { + let mut errors: Vec = vec![]; + let mut values: Vec = Arc::unwrap_or_clone(this.values); + values.sort_unstable_by(|left: &Value, right: &Value| { + let result = left.clone().cmp(log, stack_trace, database, right.clone()); + match result { + Ok(cmp) => cmp, + Err(error) => { + errors.push(error); + Ordering::Less + } + } + }); + + if errors.is_empty() { + Ok(List::from_iter(database, values.into_iter())) + } else { + Err(SortingError { errors }.to_error(stack_trace.iter())) + } + } + ); + build_method!( + database, + forward = methods::Reverse, "List::reverse",( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List) -> List + { + let mut values: Vec = Arc::unwrap_or_clone(this.values); + values.reverse(); + + Ok(List::from_iter(database, values.into_iter())) + } + ); + build_method!( + database, + forward = methods::Truncate, "List::truncate",( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List, + length: UnsignedInteger) -> List + { + let mut values: Vec = Arc::unwrap_or_clone(this.values); + values.truncate(length.0 as usize); + + Ok(List::from_iter(database, values.into_iter())) + } + ); + build_method!( + database, + forward = methods::Deduplicate, "List::deduplicate",( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List) -> List + { + let mut values: Vec = Arc::unwrap_or_clone(this.values); + values.dedup_by(|left, right| left.clone().eq(log, stack_trace, database, right.clone()).unwrap_or(false)); + + Ok(List::from_iter(database, values.into_iter())) + } + ); + build_method!( + database, + forward = methods::Union, "List::union",( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List, + other: List) -> List + { + let mut values: Vec = Arc::unwrap_or_clone(this.values); + + for new in other.values.iter() { + if !values.iter().any(|old| old.clone().eq(log, stack_trace, database, new.clone()).unwrap_or(false)) { + values.push(new.clone()); + } + } + + Ok(List::from_iter(database, values.into_iter())) + } + ); + build_method!( + database, + forward = methods::Intersection, "List::intersection",( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List, + other: List) -> List + { + let mut values: Vec = Vec::new(); + + for new in other.values.iter() { + if this.values.iter().any(|old| old.clone().eq(log, stack_trace, database, new.clone()).unwrap_or(false)) { + values.push(new.clone()); + } + } + + Ok(List::from_iter(database, values.into_iter())) + } + ); + build_method!( + database, + forward = methods::Difference, "List::difference",( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List, + other: List) -> List + { + let mut values: Vec = Vec::new(); + + // Add values from ourselves that the other list does not have. + for new in this.values.iter() { + if !other.values.iter().any(|old| old.clone().eq(log, stack_trace, database, new.clone()).unwrap_or(false)) { + values.push(new.clone()); + } + } + + Ok(List::from_iter(database, values.into_iter())) + } + ); + build_method!( + database, + forward = methods::SymmetricDifference, "List::symmetric_difference",( + log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List, + other: List) -> List + { + let mut values: Vec = Vec::new(); + + // Add values from ourselves that the other list does not have. + for new in this.values.iter() { + if !other.values.iter().any(|old| old.clone().eq(log, stack_trace, database, new.clone()).unwrap_or(false)) { + values.push(new.clone()); + } + } + + // Add values from the other list that are not already in the new list. + for new in other.values.iter() { + if !this.values.iter().any(|old| old.clone().eq(log, stack_trace, database, new.clone()).unwrap_or(false)) { + values.push(new.clone()); + } + } + + Ok(List::from_iter(database, values.into_iter())) + } + ); + build_method!( + database, + forward = methods::CartesianProduct, "List::cartesian_product",( + _log: &mut dyn RuntimeLog, + _stack_trace: &mut Vec, + _stack: &mut Stack, + database: &BuiltinCallableDatabase, + this: List, + other: List) -> List + { + let mut values: Vec = Vec::with_capacity(this.values.len() * other.values.len()); + + for a in this.values.iter() { + for b in other.values.iter() { + let list = List::from_iter(database, [a.clone(), b.clone()].into_iter()); + values.push(list.into()); + } + } + + Ok(List::from_iter(database, values.into_iter())) + } + ); +} + #[cfg(test)] mod test { use super::*; - use crate::execution::{test_run, values}; + use crate::execution::{ + test_run, + values::{Boolean, SignedInteger, UnsignedInteger}, + }; #[test] fn create_empty() { @@ -132,9 +845,9 @@ mod test { List::from_iter( &database, [ - values::UnsignedInteger::from(1).into(), - values::UnsignedInteger::from(2).into(), - values::UnsignedInteger::from(3).into() + UnsignedInteger::from(1).into(), + UnsignedInteger::from(2).into(), + UnsignedInteger::from(3).into() ] ) .into() @@ -150,9 +863,9 @@ mod test { List::from_iter( &database, [ - values::UnsignedInteger::from(1).into(), - values::SignedInteger::from(2).into(), - values::UnsignedInteger::from(3).into() + UnsignedInteger::from(1).into(), + SignedInteger::from(2).into(), + UnsignedInteger::from(3).into() ] ) .into() @@ -166,9 +879,9 @@ mod test { List::from_iter( &database, [ - values::UnsignedInteger::from(1).into(), - values::SignedInteger::from(2).into(), - values::UnsignedInteger::from(3).into() + UnsignedInteger::from(1).into(), + SignedInteger::from(2).into(), + UnsignedInteger::from(3).into() ] ) .internal_type, @@ -178,4 +891,222 @@ mod test { )) ); } + + #[test] + fn and() { + let product = test_run("([true, false] && true) == [true, false]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn or() { + let product = test_run("([true, false] || true) == [true, true]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn xor() { + let product = test_run("([true, false] ^^ false) == [false, true]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn bit_and() { + let product = test_run("([0xFFFFFFFFFFFFFFFFu, 0x0000000000000000u] & 0x0F0F0F0F0F0F0F0Fu) == [0x0F0F0F0F0F0F0F0Fu, 0x0000000000000000u]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn bit_or() { + let product = test_run("([0xFFFFFFFFFFFFFFFFu, 0x0000000000000000u] | 0x0F0F0F0F0F0F0F0Fu) == [0xFFFFFFFFFFFFFFFFu, 0x0F0F0F0F0F0F0F0Fu]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn bit_xor() { + let product = test_run("([0xFFFFFFFFFFFFFFFFu, 0x0000000000000000u] ^ 0x0F0F0F0F0F0F0F0Fu) == [0xF0F0F0F0F0F0F0F0u, 0x0F0F0F0F0F0F0F0Fu]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn addition() { + let product = test_run("([1, 2] + 10) == [11, 12]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn subtraction() { + let product = test_run("([1, 2] - 10) == [-9, -8]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn multiply() { + let product = test_run("([1, 2] * 10) == [10, 20]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn divide() { + let product = test_run("([5, 10] / 2) == [2.5, 5]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn exponent() { + let product = test_run("([2, 10] ** 3) == [8, 1000]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn left_shift() { + let product = test_run("([0x0Au, 0x0Fu] << 4u) == [0xA0u, 0xF0u]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn right_shift() { + let product = test_run("([0xA0u, 0xF0u] >> 4u) == [0x0Au, 0x0Fu]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unary_plus() { + let product = test_run("(+[1, 2]) == [1, 2]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unary_minus() { + let product = test_run("(-[1, 2]) == [-1, -2]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn unary_not() { + let product = test_run("(![true, false]) == [false, true]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_append() { + let product = test_run("[1, 2]::append(rhs = [3, 4]) == [1, 2, 3, 4]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_slice() { + let product = test_run("[1, 2, 3, 4]::slice(start = 1u, end = 3u) == [2, 3]").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("[1, 2, 3, 4]::slice(end = 3u) == [1, 2, 3]").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("[1, 2, 3, 4]::slice(start = 1u) == [2, 3, 4]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_get() { + let product = test_run("let list = [1, 2, 3, 4]; in list::get(i = 0u) == 1 && list::get(i = 1u) == 2 && list::get(i = 2u) == 3 && list::get(i = 3u) == 4").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_chunks() { + let product = + test_run("[1, 2, 3, 4, 5, 6, 7]::chunks(size = 2u) == [[1, 2], [3, 4], [5, 6]]") + .unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run( + "[1, 2, 3, 4, 5, 6, 7]::chunks(size = 2u, strict = true) == [[1, 2], [3, 4], [5, 6]]", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("[1, 2, 3, 4, 5, 6, 7]::chunks(size = 2u, strict = false) == [[1, 2], [3, 4], [5, 6], [7]]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_map() { + let product = test_run( + "[1u, 2u, 3u, 4u]::map(f= (c: std.types.UInt) -> std.types.UInt c + 1u) == [2u, 3u, 4u, 5u]", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_fold() { + let product = + test_run("[1u, 2u, 3u, 4u]::fold(init = 0u, f = (previous: std.types.UInt, c: std.types.UInt) -> std.types.UInt (previous + c)) == 10u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_retain() { + let product = test_run( + "[1u, 2u, 3u, 4u]::retain(f = (c: std.types.UInt) -> std.types.Bool (c == 1u || c == 3u)) == [1u, 3u]", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_sort() { + let product = test_run("[3, 2, 4, 1]::sort() == [1, 2, 3, 4]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_reverse() { + let product = test_run("[1, 2, 3, 4]::reverse() == [4, 3, 2, 1]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_truncate() { + let product = test_run("[1, 2, 3, 4]::truncate(length = 2u) == [1, 2]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_deduplicate() { + let product = + test_run("[1, 2, 1, 4, 3, 4, 3]::sort()::deduplicate() == [1, 2, 3, 4]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_union() { + let product = test_run("[1, 2, 3]::union(other = [3, 4, 5]) == [1, 2, 3, 4, 5]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_intersection() { + let product = test_run("[1, 2, 3]::intersection(other = [3, 4, 5]) == [3]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_difference() { + let product = test_run("[1, 2, 3]::difference(other = [3, 4, 5]) == [1, 2]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_symmetric_difference() { + let product = + test_run("[1, 2, 3]::symmetric_difference(other = [3, 4, 5]) == [1, 2, 4, 5]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_cartesian_product() { + let product = test_run("[1, 2, 3]::cartesian_product(other = [3, 4, 5]) == [[1, 3], [1, 4], [1, 5], [2, 3], [2, 4], [2, 5], [3, 3], [3, 4], [3, 5]]").unwrap(); + assert_eq!(product, Boolean(true).into()); + } } diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 7ddb197..5eb1fb7 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -62,7 +62,40 @@ pub use value_type::{StructDefinition, StructMember, ValueType}; pub trait StaticTypeName { /// Provides the type name without having an instance of the object. /// This is used for formatting error messages when failing to cast to an expected type. - fn static_type_name() -> &'static str; + fn static_type_name() -> Cow<'static, str>; +} + +impl StaticTypeName for Option +where + V: StaticTypeName, +{ + fn static_type_name() -> Cow<'static, str> { + format!("None | {}", V::static_type_name()).into() + } +} + +impl IntoVariant> for Value +where + Value: IntoVariant + IntoVariant, +{ + fn into_variant(self) -> Result, Self> + where + Self: Sized, + { + let value: Result = self.into_variant(); + + match value { + Ok(value) => Ok(Some(value)), + Err(original) => { + let value: Result = original.into_variant(); + + match value { + Ok(_none) => Ok(Option::None), + Err(original) => Err(original), + } + } + } + } } pub trait StaticType { @@ -73,6 +106,15 @@ pub trait StaticType { fn static_type() -> ValueType; } +impl StaticType for Option +where + V: StaticType, +{ + fn static_type() -> ValueType { + ValueType::MultiType(Box::new(ValueType::TypeNone), Box::new(V::static_type())) + } +} + #[derive(Debug, Eq, PartialEq)] struct UnsupportedOperationError { pub type_name: Cow<'static, str>, @@ -141,6 +183,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, _rhs: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "logical and") @@ -149,6 +192,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, _rhs: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "logical or") @@ -157,6 +201,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, _rhs: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "logical xor") @@ -165,6 +210,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, _rhs: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "binary and") @@ -173,6 +219,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, _rhs: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "binary or") @@ -181,6 +228,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, _rhs: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "binary xor") @@ -189,6 +237,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, _rhs: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "compare") @@ -197,14 +246,19 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { - Ok(matches!(self.cmp(log, stack_trace, rhs)?, Ordering::Equal)) + Ok(matches!( + self.cmp(log, stack_trace, database, rhs)?, + Ordering::Equal + )) } fn addition( self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, _rhs: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "addition") @@ -213,6 +267,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, _rhs: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "subtraction") @@ -221,6 +276,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, _rhs: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "multiply") @@ -229,22 +285,16 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, _rhs: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "divide") } - fn floor_divide( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "floor_divide") - } fn exponent( self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, _rhs: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "exponent") @@ -253,6 +303,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, _rhs: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "left shift") @@ -261,6 +312,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, _rhs: Value, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "right shift") @@ -269,7 +321,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { &self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], - _callable_database: &BuiltinCallableDatabase, + _database: &BuiltinCallableDatabase, attribute: &str, ) -> ExpressionResult { Err(MissingAttributeError { @@ -282,30 +334,16 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { _log: &mut dyn RuntimeLog, stack_trace: &mut Vec, _stack: &mut Stack, - _callable_database: &BuiltinCallableDatabase, + _database: &BuiltinCallableDatabase, _argument: Dictionary, ) -> ExpressionResult { UnsupportedOperationError::raise(self, stack_trace, "call") } - fn index( - &self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _index: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "index") - } - fn iterate( - &self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - ) -> ExpressionResult>> { - UnsupportedOperationError::raise(self, stack_trace, "iterate") - } fn unary_plus( self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "unary plus") } @@ -313,6 +351,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "unary minus") } @@ -320,6 +359,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, ) -> ExpressionResult { UnsupportedOperationError::raise(&self, stack_trace, "unary not") } @@ -347,29 +387,15 @@ pub enum Value { Dictionary(Dictionary), List(List), String(IString), - // Range(Range), - // Closure(Closure), Vector2(Vector2), Vector3(Vector3), Vector4(Vector4), - // Transform2D, - // Transform3D, // Quaternion, - // Cycle, - // Region, - // Sketch, - // Surface, - // Solid, - // Shell, - // Face, - // Curve, - // HalfEdge, - // Vertex, } impl StaticTypeName for Value { - fn static_type_name() -> &'static str { - "Value" + fn static_type_name() -> Cow<'static, str> { + "Value".into() } } diff --git a/crates/interpreter/src/execution/values/scalar.rs b/crates/interpreter/src/execution/values/scalar.rs index 6b07516..ade8a7e 100644 --- a/crates/interpreter/src/execution/values/scalar.rs +++ b/crates/interpreter/src/execution/values/scalar.rs @@ -190,6 +190,7 @@ impl Object for Scalar { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs = self.unpack_same_dimension(stack_trace, rhs)?; @@ -206,6 +207,7 @@ impl Object for Scalar { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs = self.unpack_same_dimension(stack_trace, rhs)?; @@ -222,6 +224,7 @@ impl Object for Scalar { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs = rhs.downcast_ref::(stack_trace)?; @@ -232,16 +235,32 @@ impl Object for Scalar { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs = rhs.downcast_ref::(stack_trace)?; self.divide_by_measurement(stack_trace, rhs) .map(|rhs| rhs.into()) } + fn exponent( + self, + _log: &mut dyn RuntimeLog, + stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, + rhs: Value, + ) -> ExpressionResult { + let rhs = rhs.downcast::(stack_trace)?; + Ok(Scalar { + dimension: self.dimension * *rhs.value as i8, + value: Float::new(self.value.powf(*rhs.value)).unwrap_not_nan(stack_trace)?, + } + .into()) + } fn unary_plus( self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, ) -> ExpressionResult { Ok(self.clone().into()) } @@ -249,6 +268,7 @@ impl Object for Scalar { self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, ) -> ExpressionResult { Ok(Self { value: -self.value, @@ -260,6 +280,7 @@ impl Object for Scalar { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs = rhs.downcast_ref::(stack_trace)?; @@ -337,8 +358,8 @@ impl Object for Scalar { } impl StaticTypeName for Scalar { - fn static_type_name() -> &'static str { - "Scalar" + fn static_type_name() -> Cow<'static, str> { + "Scalar".into() } } @@ -458,20 +479,6 @@ mod methods { } pub fn register_methods(database: &mut BuiltinCallableDatabase) { - // build_method!( - // database, - // forward = methods::Qualify, "ValueType::qualify", ( - // _log: &mut dyn RuntimeLog, - // stack_trace: &mut Vec, - // _stack: &mut Stack, - // database: &BuiltinCallableDatabase, - // this: ValueType, - // to_qualify: Value) -> ValueNone - // { - // this.check_other_qualifies(&to_qualify.get_type(database)).map_err(|error| error.to_error(stack_trace.iter()))?; - // Ok(values::ValueNone) - // } - // ); build_method!( database, forward = methods::ToSignedInteger, "Scalar::to_signed_integer", ( @@ -1084,8 +1091,8 @@ macro_rules! build_scalar_type { } impl StaticTypeName for $name { - fn static_type_name() -> &'static str { - stringify!($name) + fn static_type_name() -> Cow<'static, str> { + stringify!($name).into() } } diff --git a/crates/interpreter/src/execution/values/string.rs b/crates/interpreter/src/execution/values/string.rs index c63119b..6829fde 100644 --- a/crates/interpreter/src/execution/values/string.rs +++ b/crates/interpreter/src/execution/values/string.rs @@ -29,6 +29,8 @@ use crate::{ use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; +use std::borrow::Cow; + #[derive(Debug, Hash, Clone, Eq, PartialEq)] pub struct IString(pub ImString); @@ -41,6 +43,7 @@ impl Object for IString { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(stack_trace)?; @@ -95,8 +98,8 @@ impl Object for IString { } impl StaticTypeName for IString { - fn static_type_name() -> &'static str { - "String" + fn static_type_name() -> Cow<'static, str> { + "String".into() } } diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 907b6d0..47bc35a 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -126,6 +126,10 @@ impl ValueType { (Self::Vector2(Option::None), Self::Vector2(_)) => Ok(()), (Self::Vector3(Option::None), Self::Vector3(_)) => Ok(()), (Self::Vector4(Option::None), Self::Vector4(_)) => Ok(()), + (Self::List(Option::None), Self::List(_)) => Ok(()), + (Self::List(Some(our_type)), Self::List(Some(their_type))) => { + our_type.check_other_qualifies(their_type) + } (Self::Closure(our_signature), Self::Closure(their_signature)) => { our_signature .argument_type @@ -183,6 +187,7 @@ impl Object for ValueType { self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: Self = rhs.downcast(stack_trace)?; @@ -209,8 +214,8 @@ impl Object for ValueType { } impl StaticTypeName for ValueType { - fn static_type_name() -> &'static str { - "ValueType" + fn static_type_name() -> Cow<'static, str> { + "ValueType".into() } } @@ -435,8 +440,8 @@ impl Display for StructDefinition { } impl StaticTypeName for StructDefinition { - fn static_type_name() -> &'static str { - "Struct Definition" + fn static_type_name() -> Cow<'static, str> { + "Struct Definition".into() } } diff --git a/crates/interpreter/src/execution/values/vector.rs b/crates/interpreter/src/execution/values/vector.rs index 1520978..bb8e188 100644 --- a/crates/interpreter/src/execution/values/vector.rs +++ b/crates/interpreter/src/execution/values/vector.rs @@ -18,6 +18,7 @@ use crate::{ }; use std::{ + borrow::Cow, hash::Hash, ops::{Add, Div, Mul, Neg, Sub}, }; @@ -50,6 +51,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs = self.unpack_same_dimension(stack_trace, rhs)?; @@ -61,6 +63,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs = self.unpack_same_dimension(stack_trace, rhs)?; @@ -72,6 +75,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs = rhs.downcast_ref::(stack_trace)?; @@ -84,6 +88,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs = rhs.downcast_ref::(stack_trace)?; @@ -96,6 +101,7 @@ where self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, ) -> ExpressionResult { Ok(self.clone().into()) } @@ -103,6 +109,7 @@ where self, _log: &mut dyn RuntimeLog, _stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, ) -> ExpressionResult { Ok(Self { value: -self.value, @@ -115,6 +122,7 @@ where self, _log: &mut dyn RuntimeLog, stack_trace: &[SourceReference], + _database: &BuiltinCallableDatabase, rhs: Value, ) -> ExpressionResult { let rhs: Self = rhs.downcast(stack_trace)?; @@ -245,7 +253,7 @@ impl StaticTypeName for Vector where I: StaticTypeName, { - fn static_type_name() -> &'static str { + fn static_type_name() -> Cow<'static, str> { I::static_type_name() } } @@ -751,8 +759,8 @@ impl VectorInternalType for nalgebra::Vector2 { } } impl StaticTypeName for nalgebra::Vector2 { - fn static_type_name() -> &'static str { - "Vector2" + fn static_type_name() -> Cow<'static, str> { + "Vector2".into() } } @@ -875,8 +883,8 @@ impl VectorInternalType for nalgebra::Vector3 { } } impl StaticTypeName for nalgebra::Vector3 { - fn static_type_name() -> &'static str { - "Vector3" + fn static_type_name() -> Cow<'static, str> { + "Vector3".into() } } @@ -1005,8 +1013,8 @@ impl VectorInternalType for nalgebra::Vector4 { } } impl StaticTypeName for nalgebra::Vector4 { - fn static_type_name() -> &'static str { - "Vector4" + fn static_type_name() -> Cow<'static, str> { + "Vector4".into() } } diff --git a/crates/interpreter/src/execution/values/void.rs b/crates/interpreter/src/execution/values/void.rs index 58d4aa1..a325cc6 100644 --- a/crates/interpreter/src/execution/values/void.rs +++ b/crates/interpreter/src/execution/values/void.rs @@ -20,6 +20,8 @@ use crate::execution::values::{closure::BuiltinCallableDatabase, StaticType}; use super::{value_type::ValueType, Object, StaticTypeName}; +use std::borrow::Cow; + #[derive(Debug, Hash, Clone, Copy, Eq, PartialEq)] pub struct ValueNone; @@ -30,8 +32,8 @@ impl Object for ValueNone { } impl StaticTypeName for ValueNone { - fn static_type_name() -> &'static str { - "None" + fn static_type_name() -> Cow<'static, str> { + "None".into() } } diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 65da2eb..879c1f2 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -8,22 +8,23 @@ // @ts-check const PREC = { - struct_member: 16, - unit: 15, - method_call: 14, - function_call: 13, - field: 12, - unary: 11, - exponential: 10, - multiplicative: 9, - additive: 8, - shift: 7, - bitand: 6, - bitxor: 5, - bitor: 4, - comparative: 3, - and: 2, - or: 1, + struct_member: 17, + unit: 16, + method_call: 15, + function_call: 14, + field: 13, + unary: 12, + exponential: 11, + multiplicative: 10, + additive: 9, + shift: 8, + bitand: 7, + bitxor: 6, + bitor: 5, + comparative: 4, + and: 3, + or: 2, + xor: 1, assign: 0, closure: -1, struct_def: -2, @@ -43,7 +44,6 @@ const binary_operator_table = [ [PREC.multiplicative, '*'], [PREC.multiplicative, '/'], - [PREC.multiplicative, '//'], [PREC.additive, '+'], [PREC.additive, '-'], @@ -64,6 +64,7 @@ const binary_operator_table = [ [PREC.and, '&&'], [PREC.or, '||'], + [PREC.xor, '^^'], ]; const formula_binary_operator_table = [ diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 5c0c71b..8c696dd 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -218,7 +218,7 @@ }, "scalar": { "type": "PREC_LEFT", - "value": 15, + "value": 16, "content": { "type": "SEQ", "members": [ @@ -406,7 +406,7 @@ "members": [ { "type": "PREC_LEFT", - "value": 13, + "value": 14, "content": { "type": "SEQ", "members": [ @@ -436,7 +436,7 @@ "members": [ { "type": "PREC_LEFT", - "value": 14, + "value": 15, "content": { "type": "SEQ", "members": [ @@ -642,7 +642,7 @@ "members": [ { "type": "PREC_LEFT", - "value": 10, + "value": 11, "content": { "type": "SEQ", "members": [ @@ -675,7 +675,7 @@ }, { "type": "PREC_LEFT", - "value": 9, + "value": 10, "content": { "type": "SEQ", "members": [ @@ -708,7 +708,7 @@ }, { "type": "PREC_LEFT", - "value": 9, + "value": 10, "content": { "type": "SEQ", "members": [ @@ -758,7 +758,7 @@ "name": "op", "content": { "type": "STRING", - "value": "//" + "value": "+" } }, { @@ -774,7 +774,7 @@ }, { "type": "PREC_LEFT", - "value": 8, + "value": 9, "content": { "type": "SEQ", "members": [ @@ -791,7 +791,7 @@ "name": "op", "content": { "type": "STRING", - "value": "+" + "value": "-" } }, { @@ -824,7 +824,7 @@ "name": "op", "content": { "type": "STRING", - "value": "-" + "value": "<<" } }, { @@ -840,7 +840,7 @@ }, { "type": "PREC_LEFT", - "value": 7, + "value": 8, "content": { "type": "SEQ", "members": [ @@ -857,7 +857,7 @@ "name": "op", "content": { "type": "STRING", - "value": "<<" + "value": ">>" } }, { @@ -890,7 +890,7 @@ "name": "op", "content": { "type": "STRING", - "value": ">>" + "value": "&" } }, { @@ -906,7 +906,7 @@ }, { "type": "PREC_LEFT", - "value": 6, + "value": 5, "content": { "type": "SEQ", "members": [ @@ -923,7 +923,7 @@ "name": "op", "content": { "type": "STRING", - "value": "&" + "value": "|" } }, { @@ -939,7 +939,7 @@ }, { "type": "PREC_LEFT", - "value": 4, + "value": 6, "content": { "type": "SEQ", "members": [ @@ -956,7 +956,7 @@ "name": "op", "content": { "type": "STRING", - "value": "|" + "value": "^" } }, { @@ -972,7 +972,7 @@ }, { "type": "PREC_LEFT", - "value": 5, + "value": 4, "content": { "type": "SEQ", "members": [ @@ -989,7 +989,7 @@ "name": "op", "content": { "type": "STRING", - "value": "^" + "value": ">" } }, { @@ -1005,7 +1005,7 @@ }, { "type": "PREC_LEFT", - "value": 3, + "value": 4, "content": { "type": "SEQ", "members": [ @@ -1022,7 +1022,7 @@ "name": "op", "content": { "type": "STRING", - "value": ">" + "value": ">=" } }, { @@ -1038,7 +1038,7 @@ }, { "type": "PREC_LEFT", - "value": 3, + "value": 4, "content": { "type": "SEQ", "members": [ @@ -1055,7 +1055,7 @@ "name": "op", "content": { "type": "STRING", - "value": ">=" + "value": "==" } }, { @@ -1071,7 +1071,7 @@ }, { "type": "PREC_LEFT", - "value": 3, + "value": 4, "content": { "type": "SEQ", "members": [ @@ -1088,7 +1088,7 @@ "name": "op", "content": { "type": "STRING", - "value": "==" + "value": "<=" } }, { @@ -1104,7 +1104,7 @@ }, { "type": "PREC_LEFT", - "value": 3, + "value": 4, "content": { "type": "SEQ", "members": [ @@ -1121,7 +1121,7 @@ "name": "op", "content": { "type": "STRING", - "value": "<=" + "value": "<" } }, { @@ -1137,7 +1137,7 @@ }, { "type": "PREC_LEFT", - "value": 3, + "value": 4, "content": { "type": "SEQ", "members": [ @@ -1154,7 +1154,7 @@ "name": "op", "content": { "type": "STRING", - "value": "<" + "value": "!=" } }, { @@ -1187,7 +1187,7 @@ "name": "op", "content": { "type": "STRING", - "value": "!=" + "value": "&&" } }, { @@ -1220,7 +1220,7 @@ "name": "op", "content": { "type": "STRING", - "value": "&&" + "value": "||" } }, { @@ -1253,7 +1253,7 @@ "name": "op", "content": { "type": "STRING", - "value": "||" + "value": "^^" } }, { @@ -1507,7 +1507,7 @@ }, "struct_member": { "type": "PREC_LEFT", - "value": 16, + "value": 17, "content": { "type": "SEQ", "members": [ @@ -1951,7 +1951,7 @@ "members": [ { "type": "PREC_LEFT", - "value": 10, + "value": 11, "content": { "type": "SEQ", "members": [ @@ -1984,7 +1984,7 @@ }, { "type": "PREC_LEFT", - "value": 9, + "value": 10, "content": { "type": "SEQ", "members": [ @@ -2017,7 +2017,7 @@ }, { "type": "PREC_LEFT", - "value": 9, + "value": 10, "content": { "type": "SEQ", "members": [ @@ -2050,7 +2050,7 @@ }, { "type": "PREC_LEFT", - "value": 8, + "value": 9, "content": { "type": "SEQ", "members": [ @@ -2083,7 +2083,7 @@ }, { "type": "PREC_LEFT", - "value": 8, + "value": 9, "content": { "type": "SEQ", "members": [ diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 7a06fde..e29900e 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -69,10 +69,6 @@ "type": "/", "named": false }, - { - "type": "//", - "named": false - }, { "type": "<", "named": false @@ -105,6 +101,10 @@ "type": "^", "named": false }, + { + "type": "^^", + "named": false + }, { "type": "|", "named": false @@ -1155,10 +1155,6 @@ "type": "/", "named": false }, - { - "type": "//", - "named": false - }, { "type": ":", "named": false @@ -1227,6 +1223,10 @@ "type": "^", "named": false }, + { + "type": "^^", + "named": false + }, { "type": "comment", "named": true, diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 9ac9532..dc24faa 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -7,7 +7,7 @@ #endif #define LANGUAGE_VERSION 15 -#define STATE_COUNT 335 +#define STATE_COUNT 341 #define LARGE_STATE_COUNT 4 #define SYMBOL_COUNT 104 #define ALIAS_COUNT 0 @@ -47,20 +47,20 @@ enum ts_symbol_identifiers { anon_sym_STAR_STAR = 25, anon_sym_STAR = 26, anon_sym_SLASH = 27, - anon_sym_SLASH_SLASH = 28, - anon_sym_LT_LT = 29, - anon_sym_GT_GT = 30, - anon_sym_AMP = 31, - anon_sym_PIPE = 32, - anon_sym_CARET = 33, - anon_sym_GT = 34, - anon_sym_GT_EQ = 35, - anon_sym_EQ_EQ = 36, - anon_sym_LT_EQ = 37, - anon_sym_LT = 38, - anon_sym_BANG_EQ = 39, - anon_sym_AMP_AMP = 40, - anon_sym_PIPE_PIPE = 41, + anon_sym_LT_LT = 28, + anon_sym_GT_GT = 29, + anon_sym_AMP = 30, + anon_sym_PIPE = 31, + anon_sym_CARET = 32, + anon_sym_GT = 33, + anon_sym_GT_EQ = 34, + anon_sym_EQ_EQ = 35, + anon_sym_LT_EQ = 36, + anon_sym_LT = 37, + anon_sym_BANG_EQ = 38, + anon_sym_AMP_AMP = 39, + anon_sym_PIPE_PIPE = 40, + anon_sym_CARET_CARET = 41, anon_sym_if = 42, anon_sym_then = 43, anon_sym_else = 44, @@ -154,7 +154,6 @@ static const char * const ts_symbol_names[] = { [anon_sym_STAR_STAR] = "**", [anon_sym_STAR] = "*", [anon_sym_SLASH] = "/", - [anon_sym_SLASH_SLASH] = "//", [anon_sym_LT_LT] = "<<", [anon_sym_GT_GT] = ">>", [anon_sym_AMP] = "&", @@ -168,6 +167,7 @@ static const char * const ts_symbol_names[] = { [anon_sym_BANG_EQ] = "!=", [anon_sym_AMP_AMP] = "&&", [anon_sym_PIPE_PIPE] = "||", + [anon_sym_CARET_CARET] = "^^", [anon_sym_if] = "if", [anon_sym_then] = "then ", [anon_sym_else] = "else", @@ -261,7 +261,6 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_STAR_STAR] = anon_sym_STAR_STAR, [anon_sym_STAR] = anon_sym_STAR, [anon_sym_SLASH] = anon_sym_SLASH, - [anon_sym_SLASH_SLASH] = anon_sym_SLASH_SLASH, [anon_sym_LT_LT] = anon_sym_LT_LT, [anon_sym_GT_GT] = anon_sym_GT_GT, [anon_sym_AMP] = anon_sym_AMP, @@ -275,6 +274,7 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_BANG_EQ] = anon_sym_BANG_EQ, [anon_sym_AMP_AMP] = anon_sym_AMP_AMP, [anon_sym_PIPE_PIPE] = anon_sym_PIPE_PIPE, + [anon_sym_CARET_CARET] = anon_sym_CARET_CARET, [anon_sym_if] = anon_sym_if, [anon_sym_then] = anon_sym_then, [anon_sym_else] = anon_sym_else, @@ -452,10 +452,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, - [anon_sym_SLASH_SLASH] = { - .visible = true, - .named = false, - }, [anon_sym_LT_LT] = { .visible = true, .named = false, @@ -508,6 +504,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = false, }, + [anon_sym_CARET_CARET] = { + .visible = true, + .named = false, + }, [anon_sym_if] = { .visible = true, .named = false, @@ -995,46 +995,46 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [32] = 32, [33] = 33, [34] = 34, - [35] = 34, - [36] = 11, - [37] = 13, - [38] = 14, - [39] = 15, - [40] = 16, - [41] = 17, + [35] = 35, + [36] = 35, + [37] = 11, + [38] = 13, + [39] = 14, + [40] = 15, + [41] = 16, [42] = 18, [43] = 19, [44] = 20, - [45] = 22, - [46] = 26, - [47] = 29, - [48] = 32, - [49] = 34, - [50] = 11, - [51] = 13, - [52] = 14, - [53] = 15, - [54] = 16, - [55] = 17, - [56] = 18, - [57] = 19, - [58] = 20, - [59] = 21, - [60] = 22, - [61] = 26, - [62] = 29, - [63] = 32, - [64] = 23, - [65] = 24, - [66] = 31, - [67] = 33, - [68] = 24, - [69] = 12, - [70] = 9, - [71] = 21, - [72] = 72, - [73] = 73, - [74] = 74, + [45] = 21, + [46] = 22, + [47] = 23, + [48] = 27, + [49] = 30, + [50] = 33, + [51] = 35, + [52] = 11, + [53] = 13, + [54] = 14, + [55] = 15, + [56] = 16, + [57] = 17, + [58] = 18, + [59] = 19, + [60] = 20, + [61] = 21, + [62] = 22, + [63] = 23, + [64] = 27, + [65] = 30, + [66] = 33, + [67] = 24, + [68] = 25, + [69] = 32, + [70] = 34, + [71] = 25, + [72] = 12, + [73] = 9, + [74] = 17, [75] = 75, [76] = 76, [77] = 77, @@ -1084,217 +1084,223 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [121] = 121, [122] = 122, [123] = 123, - [124] = 72, + [124] = 124, [125] = 125, - [126] = 72, - [127] = 74, - [128] = 73, - [129] = 74, - [130] = 77, - [131] = 82, - [132] = 73, - [133] = 80, - [134] = 79, - [135] = 76, - [136] = 75, - [137] = 78, - [138] = 138, - [139] = 81, - [140] = 97, - [141] = 141, - [142] = 81, - [143] = 77, - [144] = 88, - [145] = 114, + [126] = 126, + [127] = 127, + [128] = 75, + [129] = 129, + [130] = 75, + [131] = 76, + [132] = 77, + [133] = 79, + [134] = 84, + [135] = 83, + [136] = 85, + [137] = 82, + [138] = 81, + [139] = 76, + [140] = 77, + [141] = 80, + [142] = 142, + [143] = 78, + [144] = 119, + [145] = 145, [146] = 146, - [147] = 87, - [148] = 113, - [149] = 115, - [150] = 86, + [147] = 98, + [148] = 87, + [149] = 149, + [150] = 93, [151] = 85, - [152] = 102, - [153] = 104, - [154] = 105, - [155] = 106, - [156] = 156, - [157] = 108, - [158] = 123, - [159] = 110, - [160] = 111, - [161] = 116, - [162] = 92, - [163] = 120, - [164] = 84, - [165] = 165, - [166] = 83, - [167] = 141, - [168] = 168, - [169] = 165, - [170] = 168, - [171] = 146, - [172] = 172, - [173] = 107, - [174] = 103, - [175] = 175, - [176] = 100, - [177] = 115, - [178] = 94, - [179] = 96, - [180] = 98, - [181] = 102, - [182] = 104, - [183] = 105, - [184] = 106, - [185] = 107, - [186] = 108, - [187] = 123, - [188] = 110, - [189] = 111, - [190] = 112, - [191] = 116, - [192] = 117, - [193] = 118, - [194] = 119, - [195] = 120, - [196] = 122, - [197] = 109, - [198] = 198, - [199] = 97, - [200] = 101, - [201] = 91, - [202] = 89, - [203] = 90, - [204] = 204, - [205] = 205, - [206] = 206, - [207] = 93, + [152] = 79, + [153] = 92, + [154] = 154, + [155] = 90, + [156] = 107, + [157] = 88, + [158] = 89, + [159] = 99, + [160] = 160, + [161] = 102, + [162] = 103, + [163] = 104, + [164] = 105, + [165] = 106, + [166] = 96, + [167] = 108, + [168] = 109, + [169] = 169, + [170] = 112, + [171] = 95, + [172] = 118, + [173] = 123, + [174] = 160, + [175] = 149, + [176] = 154, + [177] = 146, + [178] = 101, + [179] = 116, + [180] = 180, + [181] = 99, + [182] = 115, + [183] = 101, + [184] = 102, + [185] = 103, + [186] = 104, + [187] = 105, + [188] = 106, + [189] = 96, + [190] = 108, + [191] = 109, + [192] = 110, + [193] = 112, + [194] = 114, + [195] = 117, + [196] = 118, + [197] = 122, + [198] = 121, + [199] = 124, + [200] = 123, + [201] = 126, + [202] = 127, + [203] = 203, + [204] = 91, + [205] = 94, + [206] = 86, + [207] = 180, [208] = 208, - [209] = 99, - [210] = 198, - [211] = 113, - [212] = 175, - [213] = 121, - [214] = 214, - [215] = 206, - [216] = 214, - [217] = 114, - [218] = 214, - [219] = 219, - [220] = 204, - [221] = 198, - [222] = 95, - [223] = 223, - [224] = 224, + [209] = 209, + [210] = 210, + [211] = 120, + [212] = 212, + [213] = 111, + [214] = 107, + [215] = 125, + [216] = 100, + [217] = 217, + [218] = 98, + [219] = 217, + [220] = 113, + [221] = 208, + [222] = 212, + [223] = 208, + [224] = 119, [225] = 225, - [226] = 223, - [227] = 227, - [228] = 228, - [229] = 228, + [226] = 203, + [227] = 180, + [228] = 97, + [229] = 229, [230] = 230, - [231] = 227, - [232] = 225, - [233] = 230, + [231] = 231, + [232] = 231, + [233] = 233, [234] = 234, - [235] = 234, - [236] = 76, - [237] = 75, - [238] = 78, - [239] = 239, - [240] = 87, - [241] = 241, - [242] = 86, - [243] = 92, - [244] = 85, - [245] = 72, - [246] = 73, - [247] = 74, - [248] = 77, - [249] = 81, - [250] = 250, - [251] = 251, - [252] = 252, - [253] = 253, - [254] = 89, + [235] = 235, + [236] = 236, + [237] = 234, + [238] = 233, + [239] = 230, + [240] = 236, + [241] = 235, + [242] = 84, + [243] = 80, + [244] = 82, + [245] = 245, + [246] = 90, + [247] = 247, + [248] = 88, + [249] = 89, + [250] = 95, + [251] = 75, + [252] = 76, + [253] = 77, + [254] = 85, [255] = 255, - [256] = 256, - [257] = 253, + [256] = 79, + [257] = 257, [258] = 258, - [259] = 90, + [259] = 86, [260] = 91, - [261] = 258, - [262] = 256, - [263] = 255, + [261] = 261, + [262] = 94, + [263] = 261, [264] = 264, - [265] = 264, + [265] = 265, [266] = 266, - [267] = 267, - [268] = 268, - [269] = 268, - [270] = 264, + [267] = 265, + [268] = 264, + [269] = 266, + [270] = 270, [271] = 271, [272] = 272, - [273] = 273, - [274] = 274, - [275] = 273, - [276] = 274, - [277] = 273, - [278] = 272, - [279] = 274, + [273] = 272, + [274] = 270, + [275] = 272, + [276] = 276, + [277] = 277, + [278] = 278, + [279] = 279, [280] = 280, - [281] = 272, - [282] = 282, - [283] = 283, - [284] = 284, - [285] = 284, - [286] = 282, - [287] = 287, + [281] = 281, + [282] = 281, + [283] = 280, + [284] = 279, + [285] = 281, + [286] = 279, + [287] = 280, [288] = 288, - [289] = 283, + [289] = 288, [290] = 290, [291] = 291, - [292] = 290, - [293] = 291, - [294] = 294, - [295] = 295, + [292] = 292, + [293] = 293, + [294] = 291, + [295] = 292, [296] = 296, - [297] = 297, + [297] = 296, [298] = 298, - [299] = 295, - [300] = 297, + [299] = 299, + [300] = 293, [301] = 301, - [302] = 298, - [303] = 298, + [302] = 302, + [303] = 303, [304] = 304, [305] = 305, [306] = 306, - [307] = 307, + [307] = 305, [308] = 308, [309] = 309, - [310] = 298, - [311] = 311, - [312] = 297, + [310] = 310, + [311] = 302, + [312] = 302, [313] = 313, [314] = 314, - [315] = 314, + [315] = 302, [316] = 316, - [317] = 317, - [318] = 318, - [319] = 316, + [317] = 308, + [318] = 308, + [319] = 319, [320] = 320, - [321] = 317, + [321] = 321, [322] = 322, - [323] = 320, - [324] = 318, - [325] = 316, - [326] = 326, + [323] = 323, + [324] = 324, + [325] = 325, + [326] = 324, [327] = 327, - [328] = 318, + [328] = 320, [329] = 329, [330] = 330, - [331] = 331, - [332] = 332, + [331] = 320, + [332] = 322, [333] = 333, - [334] = 314, + [334] = 334, + [335] = 333, + [336] = 336, + [337] = 330, + [338] = 330, + [339] = 322, + [340] = 340, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1307,28 +1313,28 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '!', 55, '"', 6, '#', 25, - '&', 64, + '&', 62, '\'', 8, - '(', 83, - ')', 84, + '(', 82, + ')', 83, '*', 57, '+', 53, ',', 48, '-', 52, '.', 46, - '/', 59, + '/', 58, '0', 34, '1', 36, - ':', 82, - ';', 81, - '<', 74, - '=', 80, - '>', 68, - '[', 85, - ']', 86, - '^', 66, + ':', 81, + ';', 80, + '<', 72, + '=', 79, + '>', 66, + '[', 84, + ']', 85, + '^', 64, 't', 29, - '|', 65, + '|', 63, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(26); @@ -1342,8 +1348,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '!', 54, '"', 6, '#', 25, - '(', 83, - ')', 84, + '(', 82, + ')', 83, '*', 57, '+', 53, '-', 51, @@ -1352,8 +1358,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '0', 35, '<', 10, '>', 19, - '[', 85, - ']', 86, + '[', 84, + ']', 85, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(26); @@ -1367,13 +1373,13 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '!', 54, '"', 6, '#', 25, - '(', 83, + '(', 82, '+', 53, '-', 51, '.', 45, '0', 35, '<', 10, - '[', 85, + '[', 84, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(26); @@ -1386,22 +1392,22 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ADVANCE_MAP( '!', 15, '#', 25, - '&', 64, + '&', 62, '\'', 8, - '(', 83, + '(', 82, ')', 18, '*', 57, '+', 53, ',', 48, '-', 52, '.', 45, - '/', 59, + '/', 58, ':', 13, - '<', 74, + '<', 72, '=', 16, - '>', 69, - '^', 66, - '|', 65, + '>', 67, + '^', 64, + '|', 63, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(26); @@ -1419,9 +1425,9 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '-', 51, '.', 45, '/', 58, - '<', 75, + '<', 73, '=', 16, - '>', 67, + '>', 65, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(26); @@ -1433,14 +1439,14 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ADVANCE_MAP( '!', 15, '#', 25, - ')', 84, + ')', 83, '*', 57, '+', 53, '-', 51, '/', 58, - '<', 75, + '<', 73, '=', 16, - '>', 70, + '>', 68, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(26); @@ -1476,22 +1482,22 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '.') ADVANCE(12); END_STATE(); case 12: - if (lookahead == '.') ADVANCE(87); + if (lookahead == '.') ADVANCE(86); END_STATE(); case 13: if (lookahead == ':') ADVANCE(50); END_STATE(); case 14: - if (lookahead == '<') ADVANCE(89); + if (lookahead == '<') ADVANCE(88); END_STATE(); case 15: - if (lookahead == '=') ADVANCE(76); + if (lookahead == '=') ADVANCE(74); END_STATE(); case 16: - if (lookahead == '=') ADVANCE(72); + if (lookahead == '=') ADVANCE(70); END_STATE(); case 17: - if (lookahead == '>') ADVANCE(90); + if (lookahead == '>') ADVANCE(89); END_STATE(); case 18: if (lookahead == '>') ADVANCE(49); @@ -1504,25 +1510,25 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ADVANCE_MAP( '!', 15, '#', 25, - '&', 64, + '&', 62, '\'', 8, - '(', 83, - ')', 84, + '(', 82, + ')', 83, '*', 57, '+', 53, ',', 48, '-', 52, '.', 45, - '/', 59, - ':', 82, - ';', 81, - '<', 74, - '=', 80, - '>', 69, - ']', 86, - '^', 66, + '/', 58, + ':', 81, + ';', 80, + '<', 72, + '=', 79, + '>', 67, + ']', 85, + '^', 64, 't', 29, - '|', 65, + '|', 63, '0', 42, '1', 42, ); @@ -1537,24 +1543,24 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ADVANCE_MAP( '!', 15, '#', 25, - '&', 64, + '&', 62, '\'', 8, - '(', 83, - ')', 84, + '(', 82, + ')', 83, '*', 57, '+', 53, ',', 48, '-', 51, '.', 45, - '/', 59, + '/', 58, ':', 13, - ';', 81, - '<', 74, - '=', 80, - '>', 68, - ']', 86, - '^', 66, - '|', 65, + ';', 80, + '<', 72, + '=', 79, + '>', 66, + ']', 85, + '^', 64, + '|', 63, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(26); @@ -1568,22 +1574,22 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ADVANCE_MAP( '!', 15, '#', 25, - '&', 64, - '(', 83, - ')', 84, + '&', 62, + '(', 82, + ')', 83, '*', 57, '+', 53, ',', 48, '-', 52, - '/', 59, + '/', 58, ':', 13, - ';', 81, - '<', 74, - '=', 80, - '>', 69, - ']', 86, - '^', 66, - '|', 65, + ';', 80, + '<', 72, + '=', 79, + '>', 67, + ']', 85, + '^', 64, + '|', 63, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(26); @@ -1596,23 +1602,23 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ADVANCE_MAP( '!', 15, '#', 25, - '&', 64, - '(', 83, - ')', 84, + '&', 62, + '(', 82, + ')', 83, '*', 57, '+', 53, ',', 48, '-', 51, - '/', 59, + '/', 58, ':', 13, - ';', 81, - '<', 74, - '=', 80, - '>', 68, - ']', 86, - '^', 66, + ';', 80, + '<', 72, + '=', 79, + '>', 66, + ']', 85, + '^', 64, 't', 29, - '|', 65, + '|', 63, ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') ADVANCE(26); @@ -1633,7 +1639,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 27: ACCEPT_TOKEN(sym_identifier); - if (lookahead == ' ') ADVANCE(79); + if (lookahead == ' ') ADVANCE(78); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || @@ -1758,7 +1764,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 52: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '>') ADVANCE(88); + if (lookahead == '>') ADVANCE(87); END_STATE(); case 53: ACCEPT_TOKEN(anon_sym_PLUS); @@ -1768,7 +1774,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 55: ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(76); + if (lookahead == '=') ADVANCE(74); END_STATE(); case 56: ACCEPT_TOKEN(anon_sym_STAR_STAR); @@ -1781,115 +1787,112 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(anon_sym_SLASH); END_STATE(); case 59: - ACCEPT_TOKEN(anon_sym_SLASH); - if (lookahead == '/') ADVANCE(60); + ACCEPT_TOKEN(anon_sym_LT_LT); END_STATE(); case 60: - ACCEPT_TOKEN(anon_sym_SLASH_SLASH); + ACCEPT_TOKEN(anon_sym_GT_GT); END_STATE(); case 61: - ACCEPT_TOKEN(anon_sym_LT_LT); + ACCEPT_TOKEN(anon_sym_GT_GT); + if (lookahead == '>') ADVANCE(89); END_STATE(); case 62: - ACCEPT_TOKEN(anon_sym_GT_GT); + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(75); END_STATE(); case 63: - ACCEPT_TOKEN(anon_sym_GT_GT); - if (lookahead == '>') ADVANCE(90); + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '|') ADVANCE(76); END_STATE(); case 64: - ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(77); + ACCEPT_TOKEN(anon_sym_CARET); + if (lookahead == '^') ADVANCE(77); END_STATE(); case 65: - ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '|') ADVANCE(78); + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(69); END_STATE(); case 66: - ACCEPT_TOKEN(anon_sym_CARET); + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(69); + if (lookahead == '>') ADVANCE(61); END_STATE(); case 67: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(71); + if (lookahead == '=') ADVANCE(69); + if (lookahead == '>') ADVANCE(60); END_STATE(); case 68: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(71); - if (lookahead == '>') ADVANCE(63); + if (lookahead == '=') ADVANCE(69); + if (lookahead == '>') ADVANCE(17); END_STATE(); case 69: - ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(71); - if (lookahead == '>') ADVANCE(62); + ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); case 70: - ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(71); - if (lookahead == '>') ADVANCE(17); + ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); case 71: - ACCEPT_TOKEN(anon_sym_GT_EQ); + ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); case 72: - ACCEPT_TOKEN(anon_sym_EQ_EQ); + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '<') ADVANCE(59); + if (lookahead == '=') ADVANCE(71); END_STATE(); case 73: - ACCEPT_TOKEN(anon_sym_LT_EQ); + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '=') ADVANCE(71); END_STATE(); case 74: - ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(61); - if (lookahead == '=') ADVANCE(73); + ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); case 75: - ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '=') ADVANCE(73); + ACCEPT_TOKEN(anon_sym_AMP_AMP); END_STATE(); case 76: - ACCEPT_TOKEN(anon_sym_BANG_EQ); + ACCEPT_TOKEN(anon_sym_PIPE_PIPE); END_STATE(); case 77: - ACCEPT_TOKEN(anon_sym_AMP_AMP); + ACCEPT_TOKEN(anon_sym_CARET_CARET); END_STATE(); case 78: - ACCEPT_TOKEN(anon_sym_PIPE_PIPE); - END_STATE(); - case 79: ACCEPT_TOKEN(anon_sym_then); END_STATE(); - case 80: + case 79: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(72); + if (lookahead == '=') ADVANCE(70); END_STATE(); - case 81: + case 80: ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); - case 82: + case 81: ACCEPT_TOKEN(anon_sym_COLON); if (lookahead == ':') ADVANCE(50); END_STATE(); - case 83: + case 82: ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); - case 84: + case 83: ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); - case 85: + case 84: ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); - case 86: + case 85: ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); - case 87: + case 86: ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); - case 88: + case 87: ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); - case 89: + case 88: ACCEPT_TOKEN(anon_sym_LT_LT_LT); END_STATE(); - case 90: + case 89: ACCEPT_TOKEN(anon_sym_GT_GT_GT); END_STATE(); default: @@ -2069,117 +2072,117 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [69] = {.lex_state = 1}, [70] = {.lex_state = 1}, [71] = {.lex_state = 1}, - [72] = {.lex_state = 21}, - [73] = {.lex_state = 21}, - [74] = {.lex_state = 21}, - [75] = {.lex_state = 20}, - [76] = {.lex_state = 20}, + [72] = {.lex_state = 1}, + [73] = {.lex_state = 1}, + [74] = {.lex_state = 1}, + [75] = {.lex_state = 21}, + [76] = {.lex_state = 21}, [77] = {.lex_state = 21}, [78] = {.lex_state = 20}, - [79] = {.lex_state = 20}, + [79] = {.lex_state = 21}, [80] = {.lex_state = 20}, - [81] = {.lex_state = 21}, + [81] = {.lex_state = 20}, [82] = {.lex_state = 20}, [83] = {.lex_state = 20}, [84] = {.lex_state = 20}, - [85] = {.lex_state = 20}, - [86] = {.lex_state = 20}, + [85] = {.lex_state = 21}, + [86] = {.lex_state = 23}, [87] = {.lex_state = 20}, [88] = {.lex_state = 20}, - [89] = {.lex_state = 23}, - [90] = {.lex_state = 23}, + [89] = {.lex_state = 20}, + [90] = {.lex_state = 20}, [91] = {.lex_state = 23}, [92] = {.lex_state = 20}, [93] = {.lex_state = 20}, - [94] = {.lex_state = 20}, + [94] = {.lex_state = 23}, [95] = {.lex_state = 20}, - [96] = {.lex_state = 20}, - [97] = {.lex_state = 22}, - [98] = {.lex_state = 20}, - [99] = {.lex_state = 20}, + [96] = {.lex_state = 22}, + [97] = {.lex_state = 20}, + [98] = {.lex_state = 22}, + [99] = {.lex_state = 22}, [100] = {.lex_state = 20}, - [101] = {.lex_state = 20}, + [101] = {.lex_state = 22}, [102] = {.lex_state = 22}, - [103] = {.lex_state = 20}, + [103] = {.lex_state = 22}, [104] = {.lex_state = 22}, [105] = {.lex_state = 22}, [106] = {.lex_state = 22}, [107] = {.lex_state = 22}, [108] = {.lex_state = 22}, - [109] = {.lex_state = 20}, - [110] = {.lex_state = 22}, - [111] = {.lex_state = 22}, - [112] = {.lex_state = 20}, - [113] = {.lex_state = 22}, - [114] = {.lex_state = 22}, - [115] = {.lex_state = 22}, - [116] = {.lex_state = 22}, + [109] = {.lex_state = 22}, + [110] = {.lex_state = 20}, + [111] = {.lex_state = 20}, + [112] = {.lex_state = 22}, + [113] = {.lex_state = 20}, + [114] = {.lex_state = 20}, + [115] = {.lex_state = 20}, + [116] = {.lex_state = 20}, [117] = {.lex_state = 20}, - [118] = {.lex_state = 20}, - [119] = {.lex_state = 20}, - [120] = {.lex_state = 22}, + [118] = {.lex_state = 22}, + [119] = {.lex_state = 22}, + [120] = {.lex_state = 20}, [121] = {.lex_state = 20}, [122] = {.lex_state = 20}, [123] = {.lex_state = 22}, - [124] = {.lex_state = 3}, + [124] = {.lex_state = 20}, [125] = {.lex_state = 20}, [126] = {.lex_state = 20}, - [127] = {.lex_state = 3}, + [127] = {.lex_state = 20}, [128] = {.lex_state = 3}, [129] = {.lex_state = 20}, - [130] = {.lex_state = 3}, + [130] = {.lex_state = 20}, [131] = {.lex_state = 3}, - [132] = {.lex_state = 20}, + [132] = {.lex_state = 3}, [133] = {.lex_state = 3}, [134] = {.lex_state = 3}, [135] = {.lex_state = 3}, [136] = {.lex_state = 3}, [137] = {.lex_state = 3}, - [138] = {.lex_state = 20}, - [139] = {.lex_state = 3}, - [140] = {.lex_state = 3}, - [141] = {.lex_state = 20}, + [138] = {.lex_state = 3}, + [139] = {.lex_state = 20}, + [140] = {.lex_state = 20}, + [141] = {.lex_state = 3}, [142] = {.lex_state = 20}, - [143] = {.lex_state = 20}, + [143] = {.lex_state = 3}, [144] = {.lex_state = 3}, - [145] = {.lex_state = 3}, + [145] = {.lex_state = 20}, [146] = {.lex_state = 3}, [147] = {.lex_state = 3}, [148] = {.lex_state = 3}, - [149] = {.lex_state = 3}, + [149] = {.lex_state = 20}, [150] = {.lex_state = 3}, - [151] = {.lex_state = 3}, - [152] = {.lex_state = 3}, + [151] = {.lex_state = 20}, + [152] = {.lex_state = 20}, [153] = {.lex_state = 3}, [154] = {.lex_state = 3}, [155] = {.lex_state = 3}, - [156] = {.lex_state = 20}, + [156] = {.lex_state = 3}, [157] = {.lex_state = 3}, [158] = {.lex_state = 3}, [159] = {.lex_state = 3}, - [160] = {.lex_state = 3}, + [160] = {.lex_state = 20}, [161] = {.lex_state = 3}, [162] = {.lex_state = 3}, [163] = {.lex_state = 3}, [164] = {.lex_state = 3}, - [165] = {.lex_state = 20}, + [165] = {.lex_state = 3}, [166] = {.lex_state = 3}, - [167] = {.lex_state = 20}, + [167] = {.lex_state = 3}, [168] = {.lex_state = 3}, [169] = {.lex_state = 20}, [170] = {.lex_state = 3}, [171] = {.lex_state = 3}, - [172] = {.lex_state = 20}, + [172] = {.lex_state = 3}, [173] = {.lex_state = 3}, - [174] = {.lex_state = 3}, + [174] = {.lex_state = 20}, [175] = {.lex_state = 20}, [176] = {.lex_state = 3}, - [177] = {.lex_state = 20}, + [177] = {.lex_state = 3}, [178] = {.lex_state = 3}, [179] = {.lex_state = 3}, - [180] = {.lex_state = 3}, + [180] = {.lex_state = 20}, [181] = {.lex_state = 20}, - [182] = {.lex_state = 20}, + [182] = {.lex_state = 3}, [183] = {.lex_state = 20}, [184] = {.lex_state = 20}, [185] = {.lex_state = 20}, @@ -2187,45 +2190,45 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [187] = {.lex_state = 20}, [188] = {.lex_state = 20}, [189] = {.lex_state = 20}, - [190] = {.lex_state = 3}, + [190] = {.lex_state = 20}, [191] = {.lex_state = 20}, [192] = {.lex_state = 3}, - [193] = {.lex_state = 3}, + [193] = {.lex_state = 20}, [194] = {.lex_state = 3}, - [195] = {.lex_state = 20}, - [196] = {.lex_state = 3}, + [195] = {.lex_state = 3}, + [196] = {.lex_state = 20}, [197] = {.lex_state = 3}, - [198] = {.lex_state = 20}, - [199] = {.lex_state = 20}, - [200] = {.lex_state = 3}, + [198] = {.lex_state = 3}, + [199] = {.lex_state = 3}, + [200] = {.lex_state = 20}, [201] = {.lex_state = 3}, [202] = {.lex_state = 3}, - [203] = {.lex_state = 3}, - [204] = {.lex_state = 20}, - [205] = {.lex_state = 20}, + [203] = {.lex_state = 20}, + [204] = {.lex_state = 3}, + [205] = {.lex_state = 3}, [206] = {.lex_state = 3}, - [207] = {.lex_state = 3}, - [208] = {.lex_state = 20}, - [209] = {.lex_state = 3}, + [207] = {.lex_state = 20}, + [208] = {.lex_state = 22}, + [209] = {.lex_state = 20}, [210] = {.lex_state = 20}, - [211] = {.lex_state = 20}, - [212] = {.lex_state = 20}, + [211] = {.lex_state = 3}, + [212] = {.lex_state = 3}, [213] = {.lex_state = 3}, - [214] = {.lex_state = 22}, + [214] = {.lex_state = 20}, [215] = {.lex_state = 3}, - [216] = {.lex_state = 22}, + [216] = {.lex_state = 3}, [217] = {.lex_state = 20}, - [218] = {.lex_state = 22}, + [218] = {.lex_state = 20}, [219] = {.lex_state = 20}, - [220] = {.lex_state = 20}, - [221] = {.lex_state = 20}, + [220] = {.lex_state = 3}, + [221] = {.lex_state = 22}, [222] = {.lex_state = 3}, - [223] = {.lex_state = 1}, - [224] = {.lex_state = 1}, - [225] = {.lex_state = 1}, - [226] = {.lex_state = 1}, - [227] = {.lex_state = 1}, - [228] = {.lex_state = 1}, + [223] = {.lex_state = 22}, + [224] = {.lex_state = 20}, + [225] = {.lex_state = 20}, + [226] = {.lex_state = 20}, + [227] = {.lex_state = 20}, + [228] = {.lex_state = 3}, [229] = {.lex_state = 1}, [230] = {.lex_state = 1}, [231] = {.lex_state = 1}, @@ -2233,42 +2236,42 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [233] = {.lex_state = 1}, [234] = {.lex_state = 1}, [235] = {.lex_state = 1}, - [236] = {.lex_state = 2}, - [237] = {.lex_state = 2}, - [238] = {.lex_state = 2}, + [236] = {.lex_state = 1}, + [237] = {.lex_state = 1}, + [238] = {.lex_state = 1}, [239] = {.lex_state = 1}, - [240] = {.lex_state = 2}, + [240] = {.lex_state = 1}, [241] = {.lex_state = 1}, - [242] = {.lex_state = 1}, - [243] = {.lex_state = 1}, - [244] = {.lex_state = 1}, - [245] = {.lex_state = 4}, - [246] = {.lex_state = 4}, - [247] = {.lex_state = 4}, - [248] = {.lex_state = 4}, - [249] = {.lex_state = 4}, - [250] = {.lex_state = 5}, - [251] = {.lex_state = 5}, - [252] = {.lex_state = 5}, + [242] = {.lex_state = 2}, + [243] = {.lex_state = 2}, + [244] = {.lex_state = 2}, + [245] = {.lex_state = 1}, + [246] = {.lex_state = 2}, + [247] = {.lex_state = 1}, + [248] = {.lex_state = 1}, + [249] = {.lex_state = 1}, + [250] = {.lex_state = 1}, + [251] = {.lex_state = 4}, + [252] = {.lex_state = 4}, [253] = {.lex_state = 4}, [254] = {.lex_state = 4}, - [255] = {.lex_state = 4}, + [255] = {.lex_state = 5}, [256] = {.lex_state = 4}, - [257] = {.lex_state = 4}, - [258] = {.lex_state = 4}, + [257] = {.lex_state = 5}, + [258] = {.lex_state = 5}, [259] = {.lex_state = 4}, [260] = {.lex_state = 4}, - [261] = {.lex_state = 1}, - [262] = {.lex_state = 1}, - [263] = {.lex_state = 1}, - [264] = {.lex_state = 1}, - [265] = {.lex_state = 1}, - [266] = {.lex_state = 0}, + [261] = {.lex_state = 4}, + [262] = {.lex_state = 4}, + [263] = {.lex_state = 4}, + [264] = {.lex_state = 4}, + [265] = {.lex_state = 4}, + [266] = {.lex_state = 4}, [267] = {.lex_state = 1}, [268] = {.lex_state = 1}, [269] = {.lex_state = 1}, [270] = {.lex_state = 1}, - [271] = {.lex_state = 1}, + [271] = {.lex_state = 0}, [272] = {.lex_state = 1}, [273] = {.lex_state = 1}, [274] = {.lex_state = 1}, @@ -2279,59 +2282,65 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [279] = {.lex_state = 1}, [280] = {.lex_state = 1}, [281] = {.lex_state = 1}, - [282] = {.lex_state = 0}, + [282] = {.lex_state = 1}, [283] = {.lex_state = 1}, [284] = {.lex_state = 1}, [285] = {.lex_state = 1}, - [286] = {.lex_state = 0}, + [286] = {.lex_state = 1}, [287] = {.lex_state = 1}, [288] = {.lex_state = 0}, - [289] = {.lex_state = 1}, - [290] = {.lex_state = 1}, - [291] = {.lex_state = 0}, - [292] = {.lex_state = 1}, - [293] = {.lex_state = 0}, - [294] = {.lex_state = 0}, + [289] = {.lex_state = 0}, + [290] = {.lex_state = 0}, + [291] = {.lex_state = 1}, + [292] = {.lex_state = 0}, + [293] = {.lex_state = 1}, + [294] = {.lex_state = 1}, [295] = {.lex_state = 0}, - [296] = {.lex_state = 0}, + [296] = {.lex_state = 1}, [297] = {.lex_state = 1}, - [298] = {.lex_state = 21}, - [299] = {.lex_state = 0}, + [298] = {.lex_state = 0}, + [299] = {.lex_state = 1}, [300] = {.lex_state = 1}, - [301] = {.lex_state = 0}, + [301] = {.lex_state = 1}, [302] = {.lex_state = 21}, - [303] = {.lex_state = 21}, + [303] = {.lex_state = 0}, [304] = {.lex_state = 1}, - [305] = {.lex_state = 1}, + [305] = {.lex_state = 0}, [306] = {.lex_state = 1}, [307] = {.lex_state = 0}, [308] = {.lex_state = 1}, [309] = {.lex_state = 1}, - [310] = {.lex_state = 21}, - [311] = {.lex_state = 1}, - [312] = {.lex_state = 1}, - [313] = {.lex_state = 0}, + [310] = {.lex_state = 0}, + [311] = {.lex_state = 21}, + [312] = {.lex_state = 21}, + [313] = {.lex_state = 1}, [314] = {.lex_state = 0}, - [315] = {.lex_state = 0}, + [315] = {.lex_state = 21}, [316] = {.lex_state = 0}, [317] = {.lex_state = 1}, [318] = {.lex_state = 1}, - [319] = {.lex_state = 0}, - [320] = {.lex_state = 1}, - [321] = {.lex_state = 1}, + [319] = {.lex_state = 1}, + [320] = {.lex_state = 0}, + [321] = {.lex_state = 0}, [322] = {.lex_state = 0}, - [323] = {.lex_state = 1}, + [323] = {.lex_state = 0}, [324] = {.lex_state = 1}, - [325] = {.lex_state = 0}, - [326] = {.lex_state = 0}, - [327] = {.lex_state = 0}, - [328] = {.lex_state = 1}, + [325] = {.lex_state = 21}, + [326] = {.lex_state = 1}, + [327] = {.lex_state = 5}, + [328] = {.lex_state = 0}, [329] = {.lex_state = 0}, - [330] = {.lex_state = 0}, - [331] = {.lex_state = 5}, - [332] = {.lex_state = 21}, - [333] = {.lex_state = 20}, + [330] = {.lex_state = 1}, + [331] = {.lex_state = 0}, + [332] = {.lex_state = 0}, + [333] = {.lex_state = 1}, [334] = {.lex_state = 0}, + [335] = {.lex_state = 1}, + [336] = {.lex_state = 20}, + [337] = {.lex_state = 1}, + [338] = {.lex_state = 1}, + [339] = {.lex_state = 0}, + [340] = {.lex_state = 0}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -2361,7 +2370,6 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_STAR_STAR] = ACTIONS(1), [anon_sym_STAR] = ACTIONS(1), [anon_sym_SLASH] = ACTIONS(1), - [anon_sym_SLASH_SLASH] = ACTIONS(1), [anon_sym_LT_LT] = ACTIONS(1), [anon_sym_GT_GT] = ACTIONS(1), [anon_sym_AMP] = ACTIONS(1), @@ -2375,6 +2383,7 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_BANG_EQ] = ACTIONS(1), [anon_sym_AMP_AMP] = ACTIONS(1), [anon_sym_PIPE_PIPE] = ACTIONS(1), + [anon_sym_CARET_CARET] = ACTIONS(1), [anon_sym_if] = ACTIONS(1), [anon_sym_then] = ACTIONS(1), [anon_sym_else] = ACTIONS(1), @@ -2392,36 +2401,36 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_GT_GT_GT] = ACTIONS(1), }, [STATE(1)] = { - [sym_source_file] = STATE(329), - [sym_base_ten] = STATE(311), - [sym_octal] = STATE(311), - [sym_hex] = STATE(311), - [sym_binary] = STATE(311), - [sym_integer] = STATE(312), - [sym_signed_integer] = STATE(93), - [sym_unsigned_integer] = STATE(93), - [sym_number] = STATE(74), - [sym__float] = STATE(73), - [sym_scalar] = STATE(93), - [sym_vector2] = STATE(93), - [sym_vector3] = STATE(93), - [sym_vector4] = STATE(93), - [sym_boolean] = STATE(93), - [sym_function_call] = STATE(93), - [sym_method_call] = STATE(93), - [sym_expression] = STATE(205), - [sym_unary_expression] = STATE(93), - [sym_binary_expression] = STATE(93), - [sym_if] = STATE(93), - [sym_let_in] = STATE(93), - [sym_identity_path] = STATE(93), - [sym_self_path] = STATE(93), - [sym_parenthesis] = STATE(93), - [sym_list] = STATE(93), - [sym_struct_definition] = STATE(114), - [sym_dictionary_construction] = STATE(93), - [sym_closure_definition] = STATE(93), - [sym_formula] = STATE(93), + [sym_source_file] = STATE(340), + [sym_base_ten] = STATE(313), + [sym_octal] = STATE(313), + [sym_hex] = STATE(313), + [sym_binary] = STATE(313), + [sym_integer] = STATE(318), + [sym_signed_integer] = STATE(120), + [sym_unsigned_integer] = STATE(120), + [sym_number] = STATE(77), + [sym__float] = STATE(76), + [sym_scalar] = STATE(120), + [sym_vector2] = STATE(120), + [sym_vector3] = STATE(120), + [sym_vector4] = STATE(120), + [sym_boolean] = STATE(120), + [sym_function_call] = STATE(120), + [sym_method_call] = STATE(120), + [sym_expression] = STATE(209), + [sym_unary_expression] = STATE(120), + [sym_binary_expression] = STATE(120), + [sym_if] = STATE(120), + [sym_let_in] = STATE(120), + [sym_identity_path] = STATE(120), + [sym_self_path] = STATE(120), + [sym_parenthesis] = STATE(120), + [sym_list] = STATE(120), + [sym_struct_definition] = STATE(119), + [sym_dictionary_construction] = STATE(120), + [sym_closure_definition] = STATE(120), + [sym_formula] = STATE(120), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2444,39 +2453,39 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(2)] = { - [sym_base_ten] = STATE(311), - [sym_octal] = STATE(311), - [sym_hex] = STATE(311), - [sym_binary] = STATE(311), - [sym_integer] = STATE(312), - [sym_signed_integer] = STATE(93), - [sym_unsigned_integer] = STATE(93), - [sym_number] = STATE(74), - [sym__float] = STATE(73), - [sym_scalar] = STATE(93), - [sym_vector2] = STATE(93), - [sym_vector3] = STATE(93), - [sym_vector4] = STATE(93), - [sym_boolean] = STATE(93), - [sym_function_call] = STATE(93), - [sym_method_call] = STATE(93), - [sym_expression] = STATE(212), - [sym_unary_expression] = STATE(93), - [sym_binary_expression] = STATE(93), - [sym_if] = STATE(93), - [sym_let_in] = STATE(93), - [sym_identity_path] = STATE(93), - [sym_self_path] = STATE(93), - [sym_parenthesis] = STATE(93), - [sym_list] = STATE(93), - [sym_struct_member] = STATE(301), - [sym__struct_final_element] = STATE(314), - [sym_struct_definition] = STATE(114), - [sym_dictionary_member_assignment] = STATE(291), - [sym_dictionary_construction] = STATE(93), - [sym_closure_definition] = STATE(93), - [sym_formula] = STATE(93), - [aux_sym_struct_definition_repeat1] = STATE(270), + [sym_base_ten] = STATE(313), + [sym_octal] = STATE(313), + [sym_hex] = STATE(313), + [sym_binary] = STATE(313), + [sym_integer] = STATE(318), + [sym_signed_integer] = STATE(120), + [sym_unsigned_integer] = STATE(120), + [sym_number] = STATE(77), + [sym__float] = STATE(76), + [sym_scalar] = STATE(120), + [sym_vector2] = STATE(120), + [sym_vector3] = STATE(120), + [sym_vector4] = STATE(120), + [sym_boolean] = STATE(120), + [sym_function_call] = STATE(120), + [sym_method_call] = STATE(120), + [sym_expression] = STATE(219), + [sym_unary_expression] = STATE(120), + [sym_binary_expression] = STATE(120), + [sym_if] = STATE(120), + [sym_let_in] = STATE(120), + [sym_identity_path] = STATE(120), + [sym_self_path] = STATE(120), + [sym_parenthesis] = STATE(120), + [sym_list] = STATE(120), + [sym_struct_member] = STATE(316), + [sym__struct_final_element] = STATE(320), + [sym_struct_definition] = STATE(119), + [sym_dictionary_member_assignment] = STATE(288), + [sym_dictionary_construction] = STATE(120), + [sym_closure_definition] = STATE(120), + [sym_formula] = STATE(120), + [aux_sym_struct_definition_repeat1] = STATE(272), [sym_identifier] = ACTIONS(35), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2501,39 +2510,39 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(3)] = { - [sym_base_ten] = STATE(311), - [sym_octal] = STATE(311), - [sym_hex] = STATE(311), - [sym_binary] = STATE(311), - [sym_integer] = STATE(312), - [sym_signed_integer] = STATE(93), - [sym_unsigned_integer] = STATE(93), - [sym_number] = STATE(74), - [sym__float] = STATE(73), - [sym_scalar] = STATE(93), - [sym_vector2] = STATE(93), - [sym_vector3] = STATE(93), - [sym_vector4] = STATE(93), - [sym_boolean] = STATE(93), - [sym_function_call] = STATE(93), - [sym_method_call] = STATE(93), - [sym_expression] = STATE(175), - [sym_unary_expression] = STATE(93), - [sym_binary_expression] = STATE(93), - [sym_if] = STATE(93), - [sym_let_in] = STATE(93), - [sym_identity_path] = STATE(93), - [sym_self_path] = STATE(93), - [sym_parenthesis] = STATE(93), - [sym_list] = STATE(93), - [sym_struct_member] = STATE(301), - [sym__struct_final_element] = STATE(315), - [sym_struct_definition] = STATE(114), - [sym_dictionary_member_assignment] = STATE(293), - [sym_dictionary_construction] = STATE(93), - [sym_closure_definition] = STATE(93), - [sym_formula] = STATE(93), - [aux_sym_struct_definition_repeat1] = STATE(264), + [sym_base_ten] = STATE(313), + [sym_octal] = STATE(313), + [sym_hex] = STATE(313), + [sym_binary] = STATE(313), + [sym_integer] = STATE(318), + [sym_signed_integer] = STATE(120), + [sym_unsigned_integer] = STATE(120), + [sym_number] = STATE(77), + [sym__float] = STATE(76), + [sym_scalar] = STATE(120), + [sym_vector2] = STATE(120), + [sym_vector3] = STATE(120), + [sym_vector4] = STATE(120), + [sym_boolean] = STATE(120), + [sym_function_call] = STATE(120), + [sym_method_call] = STATE(120), + [sym_expression] = STATE(217), + [sym_unary_expression] = STATE(120), + [sym_binary_expression] = STATE(120), + [sym_if] = STATE(120), + [sym_let_in] = STATE(120), + [sym_identity_path] = STATE(120), + [sym_self_path] = STATE(120), + [sym_parenthesis] = STATE(120), + [sym_list] = STATE(120), + [sym_struct_member] = STATE(316), + [sym__struct_final_element] = STATE(328), + [sym_struct_definition] = STATE(119), + [sym_dictionary_member_assignment] = STATE(289), + [sym_dictionary_construction] = STATE(120), + [sym_closure_definition] = STATE(120), + [sym_formula] = STATE(120), + [aux_sym_struct_definition_repeat1] = STATE(275), [sym_identifier] = ACTIONS(35), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2591,15 +2600,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, STATE(5), 1, aux_sym_list_repeat1, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(141), 1, + STATE(160), 1, sym_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2611,12 +2620,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2668,15 +2677,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, STATE(6), 1, aux_sym_list_repeat1, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(165), 1, + STATE(149), 1, sym_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2688,12 +2697,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2745,15 +2754,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(6), 1, aux_sym_list_repeat1, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(208), 1, + STATE(225), 1, sym_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2765,12 +2774,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2822,15 +2831,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, STATE(6), 1, aux_sym_list_repeat1, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(169), 1, + STATE(175), 1, sym_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2842,12 +2851,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2899,15 +2908,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, STATE(7), 1, aux_sym_list_repeat1, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(167), 1, + STATE(174), 1, sym_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2919,12 +2928,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2972,15 +2981,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(210), 1, + STATE(140), 1, + sym_number, + STATE(207), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2992,12 +3001,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3045,15 +3054,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(198), 1, + STATE(140), 1, + sym_number, + STATE(180), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3065,12 +3074,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3118,15 +3127,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, - sym_struct_definition, - STATE(115), 1, + STATE(107), 1, sym_expression, - STATE(312), 1, + STATE(119), 1, + sym_struct_definition, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3138,12 +3147,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3191,15 +3200,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(204), 1, + STATE(203), 1, sym_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3211,12 +3220,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3264,15 +3273,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(102), 1, + STATE(99), 1, sym_expression, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3284,12 +3293,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3337,15 +3346,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(88), 1, + STATE(92), 1, sym_expression, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3357,12 +3366,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3410,15 +3419,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(104), 1, + STATE(101), 1, sym_expression, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3430,12 +3439,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3483,15 +3492,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(105), 1, + STATE(102), 1, sym_expression, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3503,12 +3512,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3556,15 +3565,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(106), 1, + STATE(103), 1, sym_expression, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3576,12 +3585,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3629,15 +3638,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(107), 1, + STATE(104), 1, sym_expression, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3649,12 +3658,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3702,15 +3711,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(108), 1, + STATE(105), 1, sym_expression, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3722,12 +3731,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3775,15 +3784,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, - sym_struct_definition, - STATE(123), 1, + STATE(106), 1, sym_expression, - STATE(312), 1, + STATE(119), 1, + sym_struct_definition, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3795,12 +3804,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3848,15 +3857,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(110), 1, + STATE(96), 1, sym_expression, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3868,12 +3877,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3921,15 +3930,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(111), 1, + STATE(108), 1, sym_expression, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3941,12 +3950,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3968,58 +3977,58 @@ static const uint16_t ts_small_parse_table[] = { sym_closure_definition, sym_formula, [1854] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, - sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, - aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(76), 1, sym__float, - STATE(145), 1, - sym_struct_definition, - STATE(168), 1, + STATE(77), 1, + sym_number, + STATE(109), 1, sym_expression, - STATE(300), 1, + STATE(119), 1, + sym_struct_definition, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4041,58 +4050,58 @@ static const uint16_t ts_small_parse_table[] = { sym_closure_definition, sym_formula, [1950] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(131), 1, sym__float, - STATE(74), 1, + STATE(132), 1, sym_number, - STATE(114), 1, + STATE(144), 1, sym_struct_definition, - STATE(218), 1, + STATE(154), 1, sym_expression, - STATE(312), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4140,15 +4149,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(219), 1, + STATE(208), 1, sym_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4160,12 +4169,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4213,15 +4222,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(116), 1, + STATE(210), 1, sym_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4233,12 +4242,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4286,15 +4295,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, - sym_struct_definition, - STATE(172), 1, + STATE(112), 1, sym_expression, - STATE(312), 1, + STATE(119), 1, + sym_struct_definition, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4306,12 +4315,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4359,15 +4368,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(138), 1, + STATE(169), 1, sym_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4379,12 +4388,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4432,15 +4441,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(120), 1, + STATE(142), 1, sym_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4452,12 +4461,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4505,15 +4514,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, - sym_struct_definition, - STATE(156), 1, + STATE(118), 1, sym_expression, - STATE(312), 1, + STATE(119), 1, + sym_struct_definition, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4525,12 +4534,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4552,11 +4561,84 @@ static const uint16_t ts_small_parse_table[] = { sym_closure_definition, sym_formula, [2622] = 23, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(76), 1, + sym__float, + STATE(77), 1, + sym_number, + STATE(119), 1, + sym_struct_definition, + STATE(145), 1, + sym_expression, + STATE(318), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(313), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(120), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [2718] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, aux_sym_binary_token1, ACTIONS(106), 1, sym_identifier, @@ -4578,15 +4660,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, STATE(146), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4598,12 +4680,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4624,7 +4706,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2718] = 23, + [2814] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4651,15 +4733,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(97), 1, - sym_expression, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(312), 1, + STATE(123), 1, + sym_expression, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4671,12 +4753,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4697,7 +4779,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2814] = 23, + [2910] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4724,15 +4806,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(206), 1, + STATE(212), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4744,12 +4826,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4770,7 +4852,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2910] = 23, + [3006] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4797,15 +4879,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(211), 1, + STATE(140), 1, + sym_number, + STATE(218), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4817,12 +4899,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4843,7 +4925,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3006] = 23, + [3102] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4870,15 +4952,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(113), 1, + STATE(98), 1, sym_expression, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4890,12 +4972,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4916,7 +4998,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3102] = 23, + [3198] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4943,15 +5025,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(177), 1, + STATE(140), 1, + sym_number, + STATE(214), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4963,12 +5045,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4989,7 +5071,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3198] = 23, + [3294] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5016,15 +5098,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, + STATE(140), 1, + sym_number, STATE(181), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5036,12 +5118,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5062,7 +5144,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3294] = 23, + [3390] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5089,15 +5171,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(88), 1, + STATE(92), 1, sym_expression, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(217), 1, + STATE(140), 1, + sym_number, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5109,12 +5191,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5135,7 +5217,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3390] = 23, + [3486] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5162,15 +5244,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(182), 1, + STATE(140), 1, + sym_number, + STATE(183), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5182,12 +5264,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5208,7 +5290,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3486] = 23, + [3582] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5235,15 +5317,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(183), 1, + STATE(140), 1, + sym_number, + STATE(184), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5255,12 +5337,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5281,7 +5363,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3582] = 23, + [3678] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5308,15 +5390,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(184), 1, + STATE(140), 1, + sym_number, + STATE(186), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5328,12 +5410,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5354,7 +5436,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3678] = 23, + [3774] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5381,15 +5463,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(185), 1, + STATE(140), 1, + sym_number, + STATE(187), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5401,12 +5483,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5427,7 +5509,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3774] = 23, + [3870] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5454,15 +5536,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(186), 1, + STATE(140), 1, + sym_number, + STATE(188), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5474,12 +5556,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5500,7 +5582,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3870] = 23, + [3966] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5527,15 +5609,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(187), 1, + STATE(140), 1, + sym_number, + STATE(189), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5547,12 +5629,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5573,7 +5655,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3966] = 23, + [4062] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5600,15 +5682,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(189), 1, + STATE(140), 1, + sym_number, + STATE(190), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5620,12 +5702,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5646,7 +5728,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4062] = 23, + [4158] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5673,15 +5755,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, + STATE(140), 1, + sym_number, STATE(191), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5693,12 +5775,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5719,7 +5801,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4158] = 23, + [4254] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5746,15 +5828,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(195), 1, + STATE(140), 1, + sym_number, + STATE(193), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5766,12 +5848,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5792,7 +5874,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4254] = 23, + [4350] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5819,15 +5901,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(199), 1, + STATE(140), 1, + sym_number, + STATE(196), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5839,12 +5921,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5865,59 +5947,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4350] = 23, + [4446] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, - sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, - aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, - anon_sym_if, - ACTIONS(122), 1, - anon_sym_let, - ACTIONS(124), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym__float, - STATE(145), 1, - sym_struct_definition, - STATE(148), 1, + STATE(140), 1, + sym_number, + STATE(200), 1, sym_expression, - STATE(300), 1, + STATE(224), 1, + sym_struct_definition, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5938,7 +6020,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4446] = 23, + [4542] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -5965,15 +6047,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(149), 1, + STATE(147), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5985,12 +6067,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6011,7 +6093,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4542] = 23, + [4638] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6038,88 +6120,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, - sym_struct_definition, - STATE(152), 1, - sym_expression, - STATE(300), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(116), 2, - sym_true, - sym_false, - ACTIONS(118), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(311), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(207), 20, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_vector2, - sym_vector3, - sym_vector4, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_let_in, - sym_identity_path, - sym_self_path, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [4638] = 23, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, - sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, - aux_sym_base_ten_token1, - ACTIONS(114), 1, - anon_sym_LT_LPAREN, - ACTIONS(120), 1, - anon_sym_if, - ACTIONS(122), 1, - anon_sym_let, - ACTIONS(124), 1, - anon_sym_LPAREN, - ACTIONS(126), 1, - anon_sym_LBRACK, - ACTIONS(128), 1, - anon_sym_LT_LT_LT, - STATE(127), 1, + STATE(132), 1, sym_number, - STATE(128), 1, - sym__float, STATE(144), 1, - sym_expression, - STATE(145), 1, sym_struct_definition, - STATE(300), 1, + STATE(156), 1, + sym_expression, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6131,12 +6140,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6184,15 +6193,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(153), 1, + STATE(159), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6204,12 +6213,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6257,15 +6266,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(154), 1, + STATE(153), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6277,12 +6286,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6330,15 +6339,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(155), 1, + STATE(178), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6350,12 +6359,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6403,15 +6412,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(173), 1, + STATE(161), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6423,12 +6432,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6476,15 +6485,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(157), 1, + STATE(162), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6496,12 +6505,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6549,15 +6558,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(158), 1, + STATE(163), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6569,12 +6578,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6622,15 +6631,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(159), 1, + STATE(164), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6642,12 +6651,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6695,15 +6704,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(160), 1, + STATE(165), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6715,12 +6724,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6768,15 +6777,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(161), 1, + STATE(166), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6788,12 +6797,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6841,15 +6850,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(163), 1, + STATE(167), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6861,12 +6870,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6914,15 +6923,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(140), 1, - sym_expression, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(300), 1, + STATE(168), 1, + sym_expression, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6934,12 +6943,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6987,15 +6996,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, STATE(170), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7007,12 +7016,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7034,58 +7043,58 @@ static const uint16_t ts_small_parse_table[] = { sym_closure_definition, sym_formula, [5886] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(131), 1, sym__float, - STATE(74), 1, + STATE(132), 1, sym_number, - STATE(114), 1, + STATE(144), 1, sym_struct_definition, - STATE(214), 1, + STATE(172), 1, sym_expression, - STATE(312), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7133,15 +7142,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(171), 1, + STATE(173), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7153,12 +7162,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7206,15 +7215,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(127), 1, - sym_number, - STATE(128), 1, + STATE(131), 1, sym__float, - STATE(145), 1, + STATE(132), 1, + sym_number, + STATE(144), 1, sym_struct_definition, - STATE(215), 1, + STATE(176), 1, sym_expression, - STATE(300), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7226,12 +7235,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(207), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7279,15 +7288,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(114), 1, + STATE(119), 1, sym_struct_definition, - STATE(216), 1, + STATE(221), 1, sym_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7299,12 +7308,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7326,58 +7335,58 @@ static const uint16_t ts_small_parse_table[] = { sym_closure_definition, sym_formula, [6270] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(120), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(122), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(126), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(73), 1, + STATE(131), 1, sym__float, - STATE(74), 1, + STATE(132), 1, sym_number, - STATE(114), 1, + STATE(144), 1, sym_struct_definition, - STATE(220), 1, + STATE(177), 1, sym_expression, - STATE(312), 1, + STATE(308), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(116), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(118), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(211), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7399,23 +7408,242 @@ static const uint16_t ts_small_parse_table[] = { sym_closure_definition, sym_formula, [6366] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(120), 1, + anon_sym_if, + ACTIONS(122), 1, + anon_sym_let, + ACTIONS(124), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(126), 1, + anon_sym_LBRACK, + ACTIONS(128), 1, + anon_sym_LT_LT_LT, + STATE(131), 1, + sym__float, + STATE(132), 1, + sym_number, + STATE(144), 1, + sym_struct_definition, + STATE(222), 1, + sym_expression, + STATE(308), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(116), 2, + sym_true, + sym_false, + ACTIONS(118), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(313), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(211), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6462] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(76), 1, + sym__float, + STATE(77), 1, + sym_number, + STATE(119), 1, + sym_struct_definition, + STATE(223), 1, + sym_expression, + STATE(318), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(313), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(120), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6558] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(76), 1, + sym__float, + STATE(77), 1, + sym_number, + STATE(119), 1, + sym_struct_definition, + STATE(226), 1, + sym_expression, + STATE(318), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(313), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(120), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6654] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, @@ -7425,15 +7653,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(217), 1, + STATE(140), 1, + sym_number, + STATE(224), 1, sym_struct_definition, - STATE(221), 1, + STATE(227), 1, sym_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7445,12 +7673,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7471,7 +7699,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6462] = 23, + [6750] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -7498,15 +7726,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(129), 1, - sym_number, - STATE(132), 1, + STATE(139), 1, sym__float, - STATE(188), 1, + STATE(140), 1, + sym_number, + STATE(185), 1, sym_expression, - STATE(217), 1, + STATE(224), 1, sym_struct_definition, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7518,12 +7746,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(93), 20, + STATE(120), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7544,7 +7772,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6558] = 4, + [6846] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -7554,10 +7782,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(132), 10, sym_identifier, anon_sym_STAR, - anon_sym_SLASH, anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_else, @@ -7571,36 +7799,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6603] = 6, + [6891] = 6, ACTIONS(138), 1, sym_identifier, ACTIONS(140), 1, sym_unit_quote, - STATE(90), 1, + STATE(86), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(142), 9, anon_sym_STAR, - anon_sym_SLASH, anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_else, @@ -7612,21 +7840,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6650] = 4, + [6938] = 4, ACTIONS(148), 1, anon_sym_DOT, ACTIONS(3), 2, @@ -7635,10 +7863,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(146), 10, sym_identifier, anon_sym_STAR, - anon_sym_SLASH, anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_else, @@ -7651,33 +7879,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6693] = 5, + [6981] = 5, ACTIONS(152), 1, anon_sym_DOT, - STATE(78), 1, - aux_sym_identity_path_repeat1, + STATE(81), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(154), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, @@ -7688,328 +7916,328 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [6737] = 5, - ACTIONS(152), 1, - anon_sym_DOT, - STATE(75), 1, - aux_sym_identity_path_repeat1, + [7025] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 7, + ACTIONS(158), 10, + sym_identifier, anon_sym_STAR, - anon_sym_SLASH, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, + anon_sym_else, anon_sym_EQ, - ACTIONS(156), 22, + ACTIONS(156), 21, ts_builtin_sym_end, + sym_unit_quote, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_then, - anon_sym_else, + anon_sym_CARET_CARET, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [6781] = 3, + anon_sym_GT_GT_GT, + [7065] = 5, + ACTIONS(162), 1, + anon_sym_DOT, + STATE(82), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(162), 10, - sym_identifier, + ACTIONS(164), 7, anon_sym_STAR, - anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_else, anon_sym_EQ, - ACTIONS(160), 21, + ACTIONS(160), 22, ts_builtin_sym_end, - sym_unit_quote, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_CARET, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [6821] = 5, - ACTIONS(166), 1, + [7109] = 5, + ACTIONS(152), 1, anon_sym_DOT, - STATE(78), 1, - aux_sym_identity_path_repeat1, + STATE(83), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(169), 7, + ACTIONS(168), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(164), 22, + ACTIONS(166), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [6865] = 5, - ACTIONS(173), 1, + [7153] = 5, + ACTIONS(172), 1, anon_sym_DOT, - STATE(79), 1, - aux_sym_self_path_repeat1, + STATE(82), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(176), 7, + ACTIONS(175), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(171), 22, + ACTIONS(170), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [6909] = 5, - ACTIONS(180), 1, + [7197] = 5, + ACTIONS(179), 1, anon_sym_DOT, - STATE(79), 1, + STATE(83), 1, aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(182), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(178), 22, + ACTIONS(177), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [6953] = 3, + [7241] = 5, + ACTIONS(162), 1, + anon_sym_DOT, + STATE(80), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(132), 10, - sym_identifier, + ACTIONS(186), 7, anon_sym_STAR, - anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_else, anon_sym_EQ, - ACTIONS(130), 21, + ACTIONS(184), 22, ts_builtin_sym_end, - sym_unit_quote, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_CARET, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [6993] = 5, - ACTIONS(180), 1, - anon_sym_DOT, - STATE(80), 1, - aux_sym_self_path_repeat1, + [7285] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 7, + ACTIONS(132), 10, + sym_identifier, anon_sym_STAR, - anon_sym_SLASH, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, + anon_sym_else, anon_sym_EQ, - ACTIONS(184), 22, + ACTIONS(130), 21, ts_builtin_sym_end, + sym_unit_quote, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_then, - anon_sym_else, + anon_sym_CARET_CARET, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7037] = 3, + anon_sym_GT_GT_GT, + [7325] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(190), 7, + ACTIONS(190), 8, anon_sym_STAR, - anon_sym_SLASH, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(188), 23, + ACTIONS(188), 22, ts_builtin_sym_end, - anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7076] = 4, + anon_sym_GT_GT_GT, + [7364] = 4, ACTIONS(196), 1, anon_sym_DASH_GT, ACTIONS(3), 2, @@ -8018,9 +8246,9 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(194), 8, anon_sym_DASH, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, @@ -8030,32 +8258,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7117] = 3, + [7405] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(200), 8, anon_sym_DASH, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, @@ -8065,16 +8293,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, @@ -8082,16 +8310,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_DASH_GT, - [7156] = 3, + [7444] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(204), 8, anon_sym_DASH, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, @@ -8101,16 +8329,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, @@ -8118,19 +8346,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_DASH_GT, - [7195] = 3, + [7483] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(169), 7, + ACTIONS(175), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(164), 23, + ACTIONS(170), 23, ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, @@ -8138,143 +8366,143 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7234] = 6, - ACTIONS(208), 1, - anon_sym_COLON_COLON, - ACTIONS(212), 1, - anon_sym_LPAREN, - STATE(100), 1, - sym_dictionary_construction, + [7522] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(210), 7, + ACTIONS(208), 8, anon_sym_STAR, - anon_sym_SLASH, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(206), 20, + ACTIONS(206), 22, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7279] = 3, + anon_sym_GT_GT_GT, + [7561] = 6, + ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + STATE(111), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(216), 8, + ACTIONS(214), 7, anon_sym_STAR, - anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(214), 22, + ACTIONS(210), 20, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_CARET, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7318] = 3, + [7606] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(220), 8, + ACTIONS(220), 7, anon_sym_STAR, - anon_sym_SLASH, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(218), 22, + ACTIONS(218), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_CARET, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7357] = 3, + [7645] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(224), 8, anon_sym_STAR, - anon_sym_SLASH, anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, @@ -8285,15 +8513,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, @@ -8301,16 +8529,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7396] = 3, + [7684] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(228), 8, anon_sym_DASH, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, @@ -8320,16 +8548,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, @@ -8337,1250 +8565,1305 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_DASH_GT, - [7435] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(232), 7, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - ACTIONS(230), 22, - ts_builtin_sym_end, - anon_sym_COMMA, + [7723] = 16, + ACTIONS(212), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, + ACTIONS(214), 1, + anon_sym_EQ, + ACTIONS(216), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [7473] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(236), 7, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(234), 1, anon_sym_STAR, + ACTIONS(236), 1, anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, + ACTIONS(242), 1, anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - ACTIONS(234), 22, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(244), 1, anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [7511] = 3, + STATE(111), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(240), 7, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - ACTIONS(238), 22, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_COLON_COLON, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(210), 9, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_then, + anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7549] = 3, + [7787] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(244), 7, + ACTIONS(252), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(242), 22, + ACTIONS(250), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7587] = 18, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [7825] = 19, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(272), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(262), 1, anon_sym_EQ, - STATE(100), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(246), 6, + ACTIONS(254), 6, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [7655] = 3, + [7895] = 9, + ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + STATE(111), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(276), 7, - anon_sym_STAR, - anon_sym_SLASH, + ACTIONS(214), 6, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(274), 22, + ACTIONS(210), 17, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_then, + anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7693] = 3, + [7945] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(280), 7, + ACTIONS(266), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(278), 22, + ACTIONS(264), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7731] = 3, + [7983] = 7, + ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + STATE(111), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(284), 7, + ACTIONS(214), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(282), 22, + ACTIONS(210), 18, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_then, + anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7769] = 3, + [8029] = 10, + ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + STATE(111), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(288), 7, - anon_sym_STAR, - anon_sym_SLASH, + ACTIONS(230), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(214), 6, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(286), 22, + ACTIONS(210), 15, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_then, + anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7807] = 9, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [8081] = 11, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - STATE(100), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(210), 5, + ACTIONS(230), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(238), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(214), 6, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(206), 17, + ACTIONS(210), 13, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [7857] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(292), 7, + [8135] = 13, + ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(234), 1, anon_sym_STAR, + ACTIONS(236), 1, anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, + ACTIONS(244), 1, + anon_sym_CARET, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(230), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(238), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(214), 4, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(290), 22, + ACTIONS(210), 13, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_then, + anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7895] = 7, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [8193] = 12, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - STATE(100), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, + anon_sym_AMP, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(210), 7, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, + ACTIONS(230), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(238), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(214), 5, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(206), 18, + ACTIONS(210), 13, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [7941] = 10, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [8249] = 14, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - STATE(100), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, + anon_sym_AMP, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(210), 5, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(238), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(214), 3, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(206), 15, + ACTIONS(210), 13, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [7993] = 11, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [8309] = 19, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - STATE(100), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, + anon_sym_AMP, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(270), 1, + anon_sym_EQ, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(210), 5, - anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - ACTIONS(206), 13, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_CARET, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, + ACTIONS(268), 6, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8047] = 13, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [8379] = 17, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(214), 1, + anon_sym_EQ, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(262), 1, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, anon_sym_CARET, - STATE(100), 1, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(210), 4, - anon_sym_PIPE, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - ACTIONS(206), 12, - ts_builtin_sym_end, - anon_sym_COMMA, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(210), 8, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8105] = 12, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [8445] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(214), 1, + anon_sym_EQ, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - STATE(100), 1, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(210), 4, - anon_sym_PIPE, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - ACTIONS(206), 13, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_CARET, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, + ACTIONS(210), 7, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8161] = 3, + [8513] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 7, + ACTIONS(194), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(294), 22, + ACTIONS(192), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8199] = 16, - ACTIONS(208), 1, - anon_sym_COLON_COLON, - ACTIONS(210), 1, - anon_sym_EQ, - ACTIONS(212), 1, - anon_sym_LPAREN, - ACTIONS(250), 1, - anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, - anon_sym_AMP, - ACTIONS(260), 1, - anon_sym_PIPE, - ACTIONS(262), 1, - anon_sym_CARET, - STATE(100), 1, - sym_dictionary_construction, + [8551] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(274), 7, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + ACTIONS(272), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, + anon_sym_STAR_STAR, anon_sym_SLASH, - ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(206), 8, - ts_builtin_sym_end, - anon_sym_COMMA, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8263] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, - ACTIONS(210), 1, - anon_sym_EQ, + [8589] = 19, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - STATE(100), 1, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(278), 1, + anon_sym_EQ, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(206), 7, + ACTIONS(276), 6, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_PIPE_PIPE, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8329] = 3, + [8659] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(194), 7, + ACTIONS(282), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(192), 22, + ACTIONS(280), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8367] = 18, - ACTIONS(208), 1, - anon_sym_COLON_COLON, - ACTIONS(212), 1, - anon_sym_LPAREN, - ACTIONS(250), 1, - anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + [8697] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(286), 7, + anon_sym_STAR, anon_sym_AMP, - ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(268), 1, - anon_sym_AMP_AMP, - ACTIONS(270), 1, - anon_sym_PIPE_PIPE, - ACTIONS(300), 1, + anon_sym_GT, + anon_sym_LT, anon_sym_EQ, - STATE(100), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(248), 2, + ACTIONS(284), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, + anon_sym_STAR_STAR, anon_sym_SLASH, - ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(298), 6, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8435] = 4, - ACTIONS(302), 1, - anon_sym_DASH_GT, + [8735] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 8, - anon_sym_DASH, + ACTIONS(290), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(230), 20, + ACTIONS(288), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8475] = 18, - ACTIONS(208), 1, - anon_sym_COLON_COLON, - ACTIONS(212), 1, - anon_sym_LPAREN, - ACTIONS(250), 1, - anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + [8773] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(294), 7, + anon_sym_STAR, anon_sym_AMP, - ACTIONS(260), 1, anon_sym_PIPE, - ACTIONS(262), 1, anon_sym_CARET, - ACTIONS(268), 1, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + ACTIONS(292), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(270), 1, anon_sym_PIPE_PIPE, - ACTIONS(306), 1, - anon_sym_EQ, - STATE(100), 1, - sym_dictionary_construction, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8811] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(298), 7, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + ACTIONS(296), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, + anon_sym_STAR_STAR, anon_sym_SLASH, - ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(266), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(304), 6, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8543] = 18, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [8849] = 19, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(310), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(302), 1, anon_sym_EQ, - STATE(100), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(308), 6, + ACTIONS(300), 6, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8611] = 3, + [8919] = 4, + ACTIONS(308), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 7, + ACTIONS(306), 8, + anon_sym_DASH, anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + ACTIONS(304), 20, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8959] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(306), 7, + anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(312), 22, + ACTIONS(304), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8649] = 3, + [8997] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 7, + ACTIONS(312), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(316), 22, + ACTIONS(310), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8687] = 3, + [9035] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(322), 7, + ACTIONS(316), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(320), 22, + ACTIONS(314), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8725] = 18, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [9073] = 19, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(326), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(320), 1, anon_sym_EQ, - STATE(100), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(324), 6, + ACTIONS(318), 6, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8793] = 3, + [9143] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(330), 7, + ACTIONS(324), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(328), 22, + ACTIONS(322), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8831] = 3, + [9181] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(334), 7, + ACTIONS(328), 7, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(332), 22, + ACTIONS(326), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8869] = 14, - ACTIONS(208), 1, - anon_sym_COLON_COLON, - ACTIONS(212), 1, - anon_sym_LPAREN, - ACTIONS(250), 1, - anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, - anon_sym_AMP, - ACTIONS(260), 1, - anon_sym_PIPE, - ACTIONS(262), 1, - anon_sym_CARET, - STATE(100), 1, - sym_dictionary_construction, + [9219] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(332), 7, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + ACTIONS(330), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, + anon_sym_STAR_STAR, anon_sym_SLASH, - ACTIONS(256), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(210), 3, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [9257] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(336), 7, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(206), 12, + ACTIONS(334), 22, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8929] = 4, + [9295] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9590,9 +9873,9 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(132), 7, sym_identifier, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, ACTIONS(130), 19, @@ -9604,56 +9887,56 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [8968] = 8, - ACTIONS(152), 1, + [9334] = 8, + ACTIONS(162), 1, anon_sym_DOT, - ACTIONS(336), 1, - anon_sym_EQ, ACTIONS(338), 1, + anon_sym_EQ, + ACTIONS(340), 1, anon_sym_COLON, - STATE(75), 1, + STATE(80), 1, aux_sym_identity_path_repeat1, - STATE(288), 1, + STATE(290), 1, sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 6, + ACTIONS(186), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(156), 16, + ACTIONS(184), 16, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, anon_sym_RPAREN, - [9014] = 4, + [9380] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9663,9 +9946,9 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(132), 7, sym_identifier, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, ACTIONS(130), 18, @@ -9675,727 +9958,883 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_LPAREN, - [9052] = 4, - ACTIONS(340), 1, - anon_sym_DOT, + [9418] = 5, + STATE(206), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(146), 6, + ACTIONS(342), 2, + sym_identifier, + sym_unit_quote, + ACTIONS(142), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(144), 19, - sym_identifier, - sym_unit_quote, + ACTIONS(136), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [9089] = 5, - STATE(203), 1, - sym__unit, + [9457] = 4, + ACTIONS(344), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(342), 2, - sym_identifier, - sym_unit_quote, - ACTIONS(142), 6, + ACTIONS(146), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(136), 17, + ACTIONS(144), 19, + sym_identifier, + sym_unit_quote, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [9128] = 4, - ACTIONS(344), 1, - anon_sym_DOT, + [9494] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(146), 7, - sym_identifier, + ACTIONS(158), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(144), 17, + ACTIONS(156), 19, + sym_identifier, sym_unit_quote, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_then, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [9164] = 3, + [9528] = 5, + ACTIONS(346), 1, + anon_sym_DOT, + STATE(141), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(162), 6, + ACTIONS(186), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(160), 19, - sym_identifier, - sym_unit_quote, + ACTIONS(184), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [9198] = 5, - ACTIONS(346), 1, + [9566] = 5, + ACTIONS(348), 1, anon_sym_DOT, - STATE(133), 1, + STATE(135), 1, aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 6, + ACTIONS(182), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(184), 17, + ACTIONS(177), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [9236] = 6, - ACTIONS(138), 1, - sym_identifier, - ACTIONS(140), 1, - sym_unit_quote, - STATE(90), 1, - sym__unit, + [9604] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(142), 6, + ACTIONS(132), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(136), 16, + ACTIONS(130), 19, + sym_identifier, + sym_unit_quote, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_then, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [9276] = 5, - ACTIONS(346), 1, + [9638] = 5, + ACTIONS(351), 1, anon_sym_DOT, - STATE(134), 1, - aux_sym_self_path_repeat1, + STATE(137), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(182), 6, + ACTIONS(175), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(178), 17, + ACTIONS(170), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [9314] = 5, - ACTIONS(348), 1, + [9676] = 5, + ACTIONS(354), 1, anon_sym_DOT, - STATE(134), 1, + STATE(135), 1, aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(176), 6, + ACTIONS(168), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(171), 17, + ACTIONS(166), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [9352] = 5, - ACTIONS(351), 1, - anon_sym_DOT, - STATE(136), 1, - aux_sym_identity_path_repeat1, + [9714] = 6, + ACTIONS(138), 1, + sym_identifier, + ACTIONS(140), 1, + sym_unit_quote, + STATE(86), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 6, + ACTIONS(142), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(156), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(136), 16, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, anon_sym_LPAREN, - [9390] = 5, - ACTIONS(351), 1, + [9754] = 4, + ACTIONS(356), 1, anon_sym_DOT, - STATE(137), 1, - aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(154), 6, + ACTIONS(146), 7, + sym_identifier, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(150), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(144), 17, + sym_unit_quote, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, anon_sym_LPAREN, - [9428] = 5, - ACTIONS(353), 1, + [9790] = 5, + ACTIONS(346), 1, anon_sym_DOT, STATE(137), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(169), 6, + ACTIONS(164), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(164), 17, + ACTIONS(160), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [9466] = 18, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [9828] = 19, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(358), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(360), 1, anon_sym_EQ, - STATE(100), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(356), 2, + ACTIONS(358), 2, anon_sym_COMMA, anon_sym_RPAREN, - ACTIONS(266), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9530] = 3, + [9894] = 5, + ACTIONS(354), 1, + anon_sym_DOT, + STATE(138), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(132), 6, + ACTIONS(154), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(130), 19, - sym_identifier, - sym_unit_quote, + ACTIONS(150), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [9932] = 4, + ACTIONS(362), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(306), 7, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(304), 16, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [9564] = 17, - ACTIONS(360), 1, + [9967] = 18, + ACTIONS(212), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(374), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(382), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(384), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(386), 1, - anon_sym_LPAREN, - STATE(176), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(246), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(362), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(378), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(380), 4, + ACTIONS(364), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9625] = 18, - ACTIONS(45), 1, - anon_sym_RBRACK, - ACTIONS(208), 1, + [10030] = 19, + ACTIONS(366), 1, + anon_sym_COMMA, + ACTIONS(368), 1, + anon_sym_RPAREN_GT, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(212), 1, - anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(384), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(386), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(392), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(394), 1, anon_sym_PIPE_PIPE, - ACTIONS(388), 1, - anon_sym_COMMA, - STATE(100), 1, + ACTIONS(396), 1, + anon_sym_CARET_CARET, + ACTIONS(398), 1, + anon_sym_LPAREN, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(388), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9688] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(132), 7, - sym_identifier, - anon_sym_STAR, - anon_sym_SLASH, + [10095] = 18, + ACTIONS(370), 1, + anon_sym_COLON_COLON, + ACTIONS(374), 1, + anon_sym_STAR_STAR, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, + ACTIONS(384), 1, anon_sym_PIPE, + ACTIONS(386), 1, + anon_sym_CARET, + ACTIONS(392), 1, + anon_sym_AMP_AMP, + ACTIONS(394), 1, + anon_sym_PIPE_PIPE, + ACTIONS(396), 1, + anon_sym_CARET_CARET, + ACTIONS(398), 1, + anon_sym_LPAREN, + STATE(213), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(254), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(372), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(380), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(388), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(130), 17, - sym_unit_quote, - anon_sym_COLON_COLON, + ACTIONS(390), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [10158] = 4, + ACTIONS(196), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(194), 7, anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(192), 16, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [10193] = 19, + ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, + anon_sym_AMP, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(400), 1, + anon_sym_COMMA, + ACTIONS(402), 1, + anon_sym_RBRACK, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(230), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(248), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [10258] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(220), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(218), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_then, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [9721] = 3, + [10291] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(162), 7, + ACTIONS(132), 7, sym_identifier, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(160), 17, + ACTIONS(130), 17, sym_unit_quote, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_LPAREN, - [9754] = 6, - ACTIONS(360), 1, - anon_sym_COLON_COLON, - ACTIONS(386), 1, - anon_sym_LPAREN, - STATE(176), 1, - sym_dictionary_construction, + [10324] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(210), 6, + ACTIONS(158), 7, + sym_identifier, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 15, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(156), 17, + sym_unit_quote, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [9793] = 4, - ACTIONS(390), 1, - anon_sym_DASH_GT, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_LPAREN, + [10357] = 6, + ACTIONS(370), 1, + anon_sym_COLON_COLON, + ACTIONS(398), 1, + anon_sym_LPAREN, + STATE(213), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 7, - anon_sym_DASH, + ACTIONS(214), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(230), 16, + ACTIONS(210), 15, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_LPAREN, - [9828] = 18, - ACTIONS(360), 1, + anon_sym_CARET_CARET, + [10396] = 19, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(374), 1, + ACTIONS(384), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(386), 1, anon_sym_CARET, - ACTIONS(382), 1, + ACTIONS(392), 1, anon_sym_AMP_AMP, - ACTIONS(384), 1, + ACTIONS(394), 1, anon_sym_PIPE_PIPE, - ACTIONS(386), 1, + ACTIONS(396), 1, + anon_sym_CARET_CARET, + ACTIONS(398), 1, anon_sym_LPAREN, - ACTIONS(392), 1, + ACTIONS(404), 1, anon_sym_COMMA, - ACTIONS(394), 1, + ACTIONS(406), 1, anon_sym_RPAREN_GT, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(362), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(378), 2, + ACTIONS(388), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(380), 4, + ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9891] = 3, + [10461] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(169), 6, + ACTIONS(175), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(164), 18, + ACTIONS(170), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -10403,426 +10842,390 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [9924] = 17, - ACTIONS(360), 1, + [10494] = 18, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, - anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, - anon_sym_AMP, ACTIONS(374), 1, - anon_sym_PIPE, + anon_sym_STAR_STAR, ACTIONS(376), 1, - anon_sym_CARET, - ACTIONS(382), 1, - anon_sym_AMP_AMP, - ACTIONS(384), 1, - anon_sym_PIPE_PIPE, - ACTIONS(386), 1, - anon_sym_LPAREN, - STATE(176), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(298), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(362), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(366), 2, anon_sym_STAR, + ACTIONS(378), 1, anon_sym_SLASH, - ACTIONS(370), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(378), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(380), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [9985] = 17, - ACTIONS(360), 1, - anon_sym_COLON_COLON, - ACTIONS(364), 1, - anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, + ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(374), 1, + ACTIONS(384), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(386), 1, anon_sym_CARET, - ACTIONS(382), 1, + ACTIONS(392), 1, anon_sym_AMP_AMP, - ACTIONS(384), 1, + ACTIONS(394), 1, anon_sym_PIPE_PIPE, - ACTIONS(386), 1, + ACTIONS(396), 1, + anon_sym_CARET_CARET, + ACTIONS(398), 1, anon_sym_LPAREN, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(304), 2, + ACTIONS(268), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - ACTIONS(362), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(378), 2, + ACTIONS(388), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(380), 4, + ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10046] = 3, + [10557] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 7, + ACTIONS(200), 7, anon_sym_DASH, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(202), 17, + ACTIONS(198), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, anon_sym_DASH_GT, - [10079] = 3, + [10590] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(200), 7, + ACTIONS(204), 7, anon_sym_DASH, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(198), 17, + ACTIONS(202), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, anon_sym_DASH_GT, - [10112] = 9, - ACTIONS(360), 1, + [10623] = 9, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(386), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(398), 1, anon_sym_LPAREN, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(210), 4, + ACTIONS(214), 5, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 13, + ACTIONS(210), 13, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_DASH, anon_sym_PLUS, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [10157] = 7, - ACTIONS(360), 1, + anon_sym_CARET_CARET, + [10668] = 19, + ACTIONS(45), 1, + anon_sym_RBRACK, + ACTIONS(212), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, - anon_sym_STAR_STAR, - ACTIONS(386), 1, + ACTIONS(216), 1, anon_sym_LPAREN, - STATE(176), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(210), 6, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(234), 1, anon_sym_STAR, + ACTIONS(236), 1, anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, + ACTIONS(242), 1, anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - ACTIONS(206), 14, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(400), 1, anon_sym_COMMA, - anon_sym_RPAREN_GT, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH_SLASH, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - [10198] = 10, - ACTIONS(360), 1, + [10733] = 10, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(386), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(398), 1, anon_sym_LPAREN, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(362), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(210), 4, + ACTIONS(214), 5, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 11, + ACTIONS(210), 11, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [10245] = 11, - ACTIONS(360), 1, + anon_sym_CARET_CARET, + [10780] = 11, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(386), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(398), 1, anon_sym_LPAREN, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(362), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(210), 4, + ACTIONS(214), 5, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 9, + ACTIONS(210), 9, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [10294] = 17, - ACTIONS(208), 1, + anon_sym_CARET_CARET, + [10829] = 13, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(212), 1, - anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(260), 1, - anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(386), 1, anon_sym_CARET, - ACTIONS(268), 1, - anon_sym_AMP_AMP, - ACTIONS(270), 1, - anon_sym_PIPE_PIPE, - STATE(100), 1, + ACTIONS(398), 1, + anon_sym_LPAREN, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(214), 3, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(396), 2, + ACTIONS(210), 9, anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(266), 4, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10355] = 12, - ACTIONS(360), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [10882] = 12, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(386), 1, + ACTIONS(398), 1, anon_sym_LPAREN, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(362), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(210), 3, + ACTIONS(214), 4, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 9, + ACTIONS(210), 9, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [10406] = 14, - ACTIONS(360), 1, + anon_sym_CARET_CARET, + [10933] = 14, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(374), 1, + ACTIONS(384), 1, anon_sym_PIPE, - ACTIONS(376), 1, - anon_sym_CARET, ACTIONS(386), 1, + anon_sym_CARET, + ACTIONS(398), 1, anon_sym_LPAREN, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(210), 2, + ACTIONS(214), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(362), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(206), 8, + ACTIONS(210), 9, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_GT_EQ, @@ -10831,1205 +11234,1059 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [10461] = 15, - ACTIONS(360), 1, + anon_sym_CARET_CARET, + [10988] = 15, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(374), 1, + ACTIONS(384), 1, anon_sym_PIPE, - ACTIONS(376), 1, - anon_sym_CARET, ACTIONS(386), 1, + anon_sym_CARET, + ACTIONS(398), 1, anon_sym_LPAREN, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(362), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(378), 2, + ACTIONS(388), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 4, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - ACTIONS(380), 4, + ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10518] = 16, - ACTIONS(360), 1, + ACTIONS(210), 5, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [11045] = 16, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(374), 1, + ACTIONS(384), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(386), 1, anon_sym_CARET, - ACTIONS(382), 1, + ACTIONS(392), 1, anon_sym_AMP_AMP, - ACTIONS(386), 1, + ACTIONS(398), 1, anon_sym_LPAREN, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(362), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(378), 2, + ACTIONS(388), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 3, + ACTIONS(210), 4, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_PIPE_PIPE, - ACTIONS(380), 4, + anon_sym_CARET_CARET, + ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10577] = 17, - ACTIONS(360), 1, + [11104] = 17, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(374), 1, + ACTIONS(384), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(386), 1, anon_sym_CARET, - ACTIONS(382), 1, + ACTIONS(392), 1, anon_sym_AMP_AMP, - ACTIONS(384), 1, + ACTIONS(394), 1, anon_sym_PIPE_PIPE, - ACTIONS(386), 1, + ACTIONS(398), 1, anon_sym_LPAREN, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(308), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(362), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(378), 2, + ACTIONS(388), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(380), 4, + ACTIONS(210), 3, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_CARET_CARET, + ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10638] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(228), 7, - anon_sym_DASH, + [11165] = 18, + ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(234), 1, anon_sym_STAR, + ACTIONS(236), 1, anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, + ACTIONS(242), 1, anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - ACTIONS(226), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(230), 2, + anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(408), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_LPAREN, - anon_sym_DASH_GT, - [10671] = 17, - ACTIONS(360), 1, + [11228] = 18, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(374), 1, + ACTIONS(384), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(386), 1, anon_sym_CARET, - ACTIONS(382), 1, + ACTIONS(392), 1, anon_sym_AMP_AMP, - ACTIONS(384), 1, + ACTIONS(394), 1, anon_sym_PIPE_PIPE, - ACTIONS(386), 1, + ACTIONS(396), 1, + anon_sym_CARET_CARET, + ACTIONS(398), 1, anon_sym_LPAREN, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 2, + ACTIONS(276), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - ACTIONS(362), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(378), 2, + ACTIONS(388), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(380), 4, + ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10732] = 4, - ACTIONS(196), 1, - anon_sym_DASH_GT, + [11291] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(194), 7, + ACTIONS(228), 7, anon_sym_DASH, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(192), 16, + ACTIONS(226), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [10767] = 18, - ACTIONS(208), 1, + anon_sym_DASH_GT, + [11324] = 18, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(212), 1, - anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(384), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(386), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(392), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(394), 1, anon_sym_PIPE_PIPE, - ACTIONS(388), 1, - anon_sym_COMMA, + ACTIONS(396), 1, + anon_sym_CARET_CARET, ACTIONS(398), 1, - anon_sym_RBRACK, - STATE(100), 1, + anon_sym_LPAREN, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(300), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(388), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10830] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(190), 6, + [11387] = 18, + ACTIONS(370), 1, + anon_sym_COLON_COLON, + ACTIONS(374), 1, + anon_sym_STAR_STAR, + ACTIONS(376), 1, anon_sym_STAR, + ACTIONS(378), 1, anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, + ACTIONS(384), 1, anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - ACTIONS(188), 18, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(386), 1, anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(392), 1, anon_sym_AMP_AMP, + ACTIONS(394), 1, anon_sym_PIPE_PIPE, + ACTIONS(396), 1, + anon_sym_CARET_CARET, + ACTIONS(398), 1, anon_sym_LPAREN, - [10863] = 18, - ACTIONS(94), 1, - anon_sym_RBRACK, - ACTIONS(208), 1, - anon_sym_COLON_COLON, - ACTIONS(212), 1, - anon_sym_LPAREN, - ACTIONS(250), 1, - anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, - anon_sym_AMP, - ACTIONS(260), 1, - anon_sym_PIPE, - ACTIONS(262), 1, - anon_sym_CARET, - ACTIONS(268), 1, - anon_sym_AMP_AMP, - ACTIONS(270), 1, - anon_sym_PIPE_PIPE, - ACTIONS(388), 1, - anon_sym_COMMA, - STATE(100), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(318), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(388), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10926] = 18, - ACTIONS(360), 1, + [11450] = 19, + ACTIONS(94), 1, + anon_sym_RBRACK, + ACTIONS(212), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(374), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(382), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(384), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(386), 1, - anon_sym_LPAREN, + ACTIONS(260), 1, + anon_sym_CARET_CARET, ACTIONS(400), 1, anon_sym_COMMA, - ACTIONS(402), 1, - anon_sym_RPAREN_GT, - STATE(176), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(362), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(378), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(380), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10989] = 18, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [11515] = 19, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(388), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(400), 1, anon_sym_COMMA, - ACTIONS(404), 1, + ACTIONS(410), 1, anon_sym_RBRACK, - STATE(100), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11052] = 18, - ACTIONS(360), 1, + [11580] = 19, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(374), 1, + ACTIONS(384), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(386), 1, anon_sym_CARET, - ACTIONS(382), 1, + ACTIONS(392), 1, anon_sym_AMP_AMP, - ACTIONS(384), 1, + ACTIONS(394), 1, anon_sym_PIPE_PIPE, - ACTIONS(386), 1, + ACTIONS(396), 1, + anon_sym_CARET_CARET, + ACTIONS(398), 1, anon_sym_LPAREN, - ACTIONS(406), 1, + ACTIONS(412), 1, anon_sym_COMMA, - ACTIONS(408), 1, + ACTIONS(414), 1, anon_sym_RPAREN_GT, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(362), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(378), 2, + ACTIONS(388), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(380), 4, + ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11115] = 18, - ACTIONS(360), 1, + [11645] = 19, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(374), 1, + ACTIONS(384), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(386), 1, anon_sym_CARET, - ACTIONS(382), 1, + ACTIONS(392), 1, anon_sym_AMP_AMP, - ACTIONS(384), 1, + ACTIONS(394), 1, anon_sym_PIPE_PIPE, - ACTIONS(386), 1, + ACTIONS(396), 1, + anon_sym_CARET_CARET, + ACTIONS(398), 1, anon_sym_LPAREN, - ACTIONS(410), 1, + ACTIONS(416), 1, anon_sym_COMMA, - ACTIONS(412), 1, + ACTIONS(418), 1, anon_sym_RPAREN_GT, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(362), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(378), 2, + ACTIONS(388), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(380), 4, + ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11178] = 17, - ACTIONS(208), 1, + [11710] = 7, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(212), 1, - anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, - anon_sym_AMP, - ACTIONS(260), 1, - anon_sym_PIPE, - ACTIONS(262), 1, - anon_sym_CARET, - ACTIONS(268), 1, - anon_sym_AMP_AMP, - ACTIONS(270), 1, - anon_sym_PIPE_PIPE, - STATE(100), 1, + ACTIONS(398), 1, + anon_sym_LPAREN, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(252), 2, + ACTIONS(214), 6, anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(264), 2, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(414), 2, + ACTIONS(210), 14, anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(266), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [11239] = 13, - ACTIONS(360), 1, - anon_sym_COLON_COLON, - ACTIONS(364), 1, - anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, - anon_sym_AMP, - ACTIONS(376), 1, - anon_sym_CARET, - ACTIONS(386), 1, - anon_sym_LPAREN, - STATE(176), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(362), 2, + anon_sym_RPAREN_GT, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, anon_sym_SLASH, - ACTIONS(370), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(210), 3, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - ACTIONS(206), 8, - anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - [11292] = 3, + anon_sym_CARET_CARET, + [11751] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(292), 6, + ACTIONS(294), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(290), 17, + ACTIONS(292), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [11324] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [11783] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(424), 1, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, + ACTIONS(430), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(432), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(434), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(440), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(442), 1, anon_sym_PIPE_PIPE, - ACTIONS(416), 1, - anon_sym_RPAREN, - STATE(100), 1, + ACTIONS(444), 1, + anon_sym_CARET_CARET, + ACTIONS(446), 1, + anon_sym_then, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(436), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(438), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11384] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(284), 6, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - ACTIONS(282), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_LPAREN, - [11416] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [11845] = 9, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(304), 1, - anon_sym_then, - ACTIONS(420), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - ACTIONS(428), 1, - anon_sym_AMP, - ACTIONS(430), 1, - anon_sym_PIPE, - ACTIONS(432), 1, - anon_sym_CARET, - ACTIONS(438), 1, - anon_sym_AMP_AMP, - ACTIONS(440), 1, - anon_sym_PIPE_PIPE, - STATE(100), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(418), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(422), 2, anon_sym_STAR, + ACTIONS(426), 1, anon_sym_SLASH, - ACTIONS(426), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(434), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(436), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [11476] = 3, + STATE(111), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(236), 6, - anon_sym_STAR, - anon_sym_SLASH, + ACTIONS(214), 5, anon_sym_AMP, anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - ACTIONS(234), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_CARET, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_LPAREN, - [11508] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(244), 6, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_AMP, - anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(242), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(210), 12, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_LPAREN, - [11540] = 3, + anon_sym_CARET_CARET, + anon_sym_then, + [11889] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(276), 6, + ACTIONS(290), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(274), 17, + ACTIONS(288), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [11572] = 9, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [11921] = 7, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(420), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - STATE(100), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(422), 2, + ACTIONS(214), 6, anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(210), 4, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 12, + ACTIONS(210), 13, anon_sym_DASH, anon_sym_PLUS, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, - [11616] = 7, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [11961] = 10, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(420), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, - STATE(100), 1, + ACTIONS(424), 1, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(210), 6, - anon_sym_STAR, - anon_sym_SLASH, + ACTIONS(420), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(214), 5, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 13, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH_SLASH, + ACTIONS(210), 10, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, - [11656] = 10, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [12007] = 11, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(420), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - STATE(100), 1, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(418), 2, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(422), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(210), 4, + ACTIONS(428), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(214), 5, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 10, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(210), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, - [11702] = 11, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [12055] = 13, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(420), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - STATE(100), 1, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, + ACTIONS(430), 1, + anon_sym_AMP, + ACTIONS(434), 1, + anon_sym_CARET, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(418), 2, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(422), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(426), 2, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(210), 4, - anon_sym_AMP, + ACTIONS(214), 3, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 8, - anon_sym_CARET, + ACTIONS(210), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, - [11750] = 13, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [12107] = 12, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(420), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - ACTIONS(428), 1, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, + ACTIONS(430), 1, anon_sym_AMP, - ACTIONS(432), 1, - anon_sym_CARET, - STATE(100), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(418), 2, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(422), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(426), 2, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(210), 3, + ACTIONS(214), 4, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 7, + ACTIONS(210), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, - [11802] = 12, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [12157] = 14, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(420), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - ACTIONS(428), 1, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, + ACTIONS(430), 1, anon_sym_AMP, - STATE(100), 1, + ACTIONS(432), 1, + anon_sym_PIPE, + ACTIONS(434), 1, + anon_sym_CARET, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(418), 2, + ACTIONS(214), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(422), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(426), 2, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(210), 3, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - ACTIONS(206), 8, - anon_sym_CARET, + ACTIONS(210), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, - [11852] = 14, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [12211] = 15, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(420), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - ACTIONS(428), 1, - anon_sym_AMP, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, ACTIONS(430), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(432), 1, + anon_sym_PIPE, + ACTIONS(434), 1, anon_sym_CARET, - STATE(100), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(210), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(418), 2, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(422), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(426), 2, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(206), 7, + ACTIONS(436), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(210), 4, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + ACTIONS(438), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_then, - [11906] = 15, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [12267] = 16, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(420), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - ACTIONS(428), 1, - anon_sym_AMP, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, ACTIONS(430), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(432), 1, + anon_sym_PIPE, + ACTIONS(434), 1, anon_sym_CARET, - STATE(100), 1, + ACTIONS(440), 1, + anon_sym_AMP_AMP, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(418), 2, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(422), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(426), 2, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(434), 2, + ACTIONS(436), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 3, - anon_sym_AMP_AMP, + ACTIONS(210), 3, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, - ACTIONS(436), 4, + ACTIONS(438), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11962] = 16, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [12325] = 17, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(420), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - ACTIONS(428), 1, - anon_sym_AMP, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, ACTIONS(430), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(432), 1, + anon_sym_PIPE, + ACTIONS(434), 1, anon_sym_CARET, - ACTIONS(438), 1, + ACTIONS(440), 1, anon_sym_AMP_AMP, - STATE(100), 1, + ACTIONS(442), 1, + anon_sym_PIPE_PIPE, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(206), 2, - anon_sym_PIPE_PIPE, + ACTIONS(210), 2, + anon_sym_CARET_CARET, anon_sym_then, - ACTIONS(418), 2, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(422), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(426), 2, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(434), 2, + ACTIONS(436), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(436), 4, + ACTIONS(438), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12020] = 3, + [12385] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(194), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, ACTIONS(192), 17, @@ -12039,372 +12296,434 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [12052] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [12417] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(308), 1, + ACTIONS(276), 1, anon_sym_then, - ACTIONS(420), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - ACTIONS(428), 1, - anon_sym_AMP, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, ACTIONS(430), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(432), 1, + anon_sym_PIPE, + ACTIONS(434), 1, anon_sym_CARET, - ACTIONS(438), 1, - anon_sym_AMP_AMP, ACTIONS(440), 1, + anon_sym_AMP_AMP, + ACTIONS(442), 1, anon_sym_PIPE_PIPE, - STATE(100), 1, + ACTIONS(444), 1, + anon_sym_CARET_CARET, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(418), 2, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(422), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(426), 2, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(434), 2, + ACTIONS(436), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(436), 4, + ACTIONS(438), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12112] = 3, + [12479] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(314), 6, + ACTIONS(286), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(312), 17, + ACTIONS(284), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [12144] = 3, + [12511] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 6, + ACTIONS(298), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(316), 17, + ACTIONS(296), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [12543] = 18, + ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(300), 1, + anon_sym_then, + ACTIONS(422), 1, + anon_sym_STAR_STAR, + ACTIONS(424), 1, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, + ACTIONS(430), 1, + anon_sym_AMP, + ACTIONS(432), 1, + anon_sym_PIPE, + ACTIONS(434), 1, + anon_sym_CARET, + ACTIONS(440), 1, + anon_sym_AMP_AMP, + ACTIONS(442), 1, + anon_sym_PIPE_PIPE, + ACTIONS(444), 1, + anon_sym_CARET_CARET, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(420), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(436), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(438), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [12605] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(316), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(314), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [12176] = 3, + [12637] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(322), 6, + ACTIONS(312), 6, anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(310), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [12669] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(324), 6, + anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(320), 17, + ACTIONS(322), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [12208] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [12701] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(324), 1, + ACTIONS(318), 1, anon_sym_then, - ACTIONS(420), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - ACTIONS(428), 1, - anon_sym_AMP, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, ACTIONS(430), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(432), 1, + anon_sym_PIPE, + ACTIONS(434), 1, anon_sym_CARET, - ACTIONS(438), 1, - anon_sym_AMP_AMP, ACTIONS(440), 1, + anon_sym_AMP_AMP, + ACTIONS(442), 1, anon_sym_PIPE_PIPE, - STATE(100), 1, + ACTIONS(444), 1, + anon_sym_CARET_CARET, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(418), 2, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(422), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(426), 2, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(434), 2, + ACTIONS(436), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(436), 4, + ACTIONS(438), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12268] = 3, + [12763] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(334), 6, + ACTIONS(332), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(332), 17, + ACTIONS(330), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [12300] = 3, + [12795] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(296), 6, + ACTIONS(336), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(294), 17, + ACTIONS(334), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [12332] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [12827] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(420), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - ACTIONS(428), 1, - anon_sym_AMP, - ACTIONS(430), 1, - anon_sym_PIPE, - ACTIONS(432), 1, - anon_sym_CARET, - ACTIONS(438), 1, - anon_sym_AMP_AMP, - ACTIONS(440), 1, - anon_sym_PIPE_PIPE, - ACTIONS(442), 1, - anon_sym_then, - STATE(100), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(418), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(422), 2, + ACTIONS(234), 1, anon_sym_STAR, + ACTIONS(236), 1, anon_sym_SLASH, - ACTIONS(426), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(434), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(436), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [12392] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, - ACTIONS(212), 1, - anon_sym_LPAREN, - ACTIONS(246), 1, - anon_sym_then, - ACTIONS(420), 1, - anon_sym_STAR_STAR, - ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - ACTIONS(428), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(430), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(432), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(438), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(440), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - STATE(100), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(448), 1, + anon_sym_COMMA, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(418), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(422), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(426), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(434), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(436), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12452] = 3, + [12889] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(288), 6, + ACTIONS(208), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(286), 17, + ACTIONS(206), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [12484] = 3, + [12921] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(224), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, ACTIONS(222), 17, @@ -12414,941 +12733,1028 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [12516] = 3, + [12953] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(216), 6, + ACTIONS(190), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(214), 17, + ACTIONS(188), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [12548] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(220), 6, + [12985] = 18, + ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(422), 1, + anon_sym_STAR_STAR, + ACTIONS(424), 1, anon_sym_STAR, + ACTIONS(426), 1, anon_sym_SLASH, + ACTIONS(430), 1, anon_sym_AMP, + ACTIONS(432), 1, anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - ACTIONS(218), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(434), 1, + anon_sym_CARET, + ACTIONS(440), 1, + anon_sym_AMP_AMP, + ACTIONS(442), 1, + anon_sym_PIPE_PIPE, + ACTIONS(444), 1, + anon_sym_CARET_CARET, + ACTIONS(450), 1, + anon_sym_then, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, + ACTIONS(436), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(438), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_LPAREN, - [12580] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [13047] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(444), 1, - anon_sym_COMMA, - STATE(100), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(452), 1, + anon_sym_else, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12640] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [13109] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(446), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(454), 1, ts_builtin_sym_end, - STATE(100), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, + ACTIONS(238), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(246), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(248), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13171] = 18, + ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, + anon_sym_LPAREN, + ACTIONS(232), 1, + anon_sym_STAR_STAR, + ACTIONS(234), 1, anon_sym_STAR, + ACTIONS(236), 1, anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(240), 1, + anon_sym_AMP, + ACTIONS(242), 1, + anon_sym_PIPE, + ACTIONS(244), 1, + anon_sym_CARET, + ACTIONS(256), 1, + anon_sym_AMP_AMP, + ACTIONS(258), 1, + anon_sym_PIPE_PIPE, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(456), 1, + anon_sym_SEMI, + STATE(111), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(230), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12700] = 17, - ACTIONS(360), 1, + [13233] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(306), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(304), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - ACTIONS(364), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, - anon_sym_AMP, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [13265] = 18, + ACTIONS(370), 1, + anon_sym_COLON_COLON, ACTIONS(374), 1, - anon_sym_PIPE, + anon_sym_STAR_STAR, ACTIONS(376), 1, - anon_sym_CARET, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, ACTIONS(382), 1, - anon_sym_AMP_AMP, + anon_sym_AMP, ACTIONS(384), 1, - anon_sym_PIPE_PIPE, + anon_sym_PIPE, ACTIONS(386), 1, + anon_sym_CARET, + ACTIONS(392), 1, + anon_sym_AMP_AMP, + ACTIONS(394), 1, + anon_sym_PIPE_PIPE, + ACTIONS(396), 1, + anon_sym_CARET_CARET, + ACTIONS(398), 1, anon_sym_LPAREN, - ACTIONS(448), 1, + ACTIONS(458), 1, anon_sym_RPAREN_GT, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(362), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(378), 2, + ACTIONS(388), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(380), 4, + ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12760] = 3, + [13327] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 6, + ACTIONS(274), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(230), 17, + ACTIONS(272), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [12792] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [13359] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(268), 1, + anon_sym_then, + ACTIONS(422), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(424), 1, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, + ACTIONS(430), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(432), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(434), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(440), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(442), 1, anon_sym_PIPE_PIPE, - ACTIONS(388), 1, - anon_sym_COMMA, - STATE(100), 1, + ACTIONS(444), 1, + anon_sym_CARET_CARET, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(436), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(438), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12852] = 3, + [13421] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(280), 6, + ACTIONS(328), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(278), 17, + ACTIONS(326), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [12884] = 17, - ACTIONS(208), 1, + [13453] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(266), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(264), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [13485] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(420), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - ACTIONS(428), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(430), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(432), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(438), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(440), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(450), 1, - anon_sym_then, - STATE(100), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(460), 1, + anon_sym_RPAREN, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(418), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(422), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(426), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(434), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(436), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12944] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [13547] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(298), 1, + ACTIONS(254), 1, anon_sym_then, - ACTIONS(420), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - ACTIONS(428), 1, - anon_sym_AMP, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, ACTIONS(430), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(432), 1, + anon_sym_PIPE, + ACTIONS(434), 1, anon_sym_CARET, - ACTIONS(438), 1, - anon_sym_AMP_AMP, ACTIONS(440), 1, + anon_sym_AMP_AMP, + ACTIONS(442), 1, anon_sym_PIPE_PIPE, - STATE(100), 1, + ACTIONS(444), 1, + anon_sym_CARET_CARET, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(418), 2, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(422), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(426), 2, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(434), 2, + ACTIONS(436), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(436), 4, + ACTIONS(438), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13004] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [13609] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(452), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(462), 1, anon_sym_RPAREN, - STATE(100), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13064] = 3, + [13671] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(330), 6, + ACTIONS(282), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(328), 17, + ACTIONS(280), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [13096] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [13703] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(454), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(464), 1, anon_sym_else, - STATE(100), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13156] = 17, - ACTIONS(360), 1, + [13765] = 18, + ACTIONS(370), 1, anon_sym_COLON_COLON, - ACTIONS(364), 1, + ACTIONS(374), 1, anon_sym_STAR_STAR, - ACTIONS(368), 1, - anon_sym_SLASH_SLASH, - ACTIONS(372), 1, + ACTIONS(376), 1, + anon_sym_STAR, + ACTIONS(378), 1, + anon_sym_SLASH, + ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(374), 1, + ACTIONS(384), 1, anon_sym_PIPE, - ACTIONS(376), 1, + ACTIONS(386), 1, anon_sym_CARET, - ACTIONS(382), 1, + ACTIONS(392), 1, anon_sym_AMP_AMP, - ACTIONS(384), 1, + ACTIONS(394), 1, anon_sym_PIPE_PIPE, - ACTIONS(386), 1, + ACTIONS(396), 1, + anon_sym_CARET_CARET, + ACTIONS(398), 1, anon_sym_LPAREN, - ACTIONS(456), 1, + ACTIONS(466), 1, anon_sym_RPAREN_GT, - STATE(176), 1, + STATE(213), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(362), 2, + ACTIONS(372), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(366), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(370), 2, + ACTIONS(380), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(378), 2, + ACTIONS(388), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(380), 4, + ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13216] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [13827] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(458), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(468), 1, anon_sym_else, - STATE(100), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13276] = 4, - ACTIONS(460), 1, + [13889] = 4, + ACTIONS(470), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 7, + ACTIONS(306), 7, anon_sym_DASH, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(230), 15, + ACTIONS(304), 15, anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_then, anon_sym_LPAREN, - [13310] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [13923] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, - anon_sym_AMP, - ACTIONS(260), 1, - anon_sym_PIPE, - ACTIONS(262), 1, - anon_sym_CARET, - ACTIONS(268), 1, - anon_sym_AMP_AMP, - ACTIONS(270), 1, - anon_sym_PIPE_PIPE, - ACTIONS(462), 1, - anon_sym_else, - STATE(100), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(248), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(252), 2, + ACTIONS(234), 1, anon_sym_STAR, + ACTIONS(236), 1, anon_sym_SLASH, - ACTIONS(256), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(264), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(266), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [13370] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, - ACTIONS(212), 1, - anon_sym_LPAREN, - ACTIONS(250), 1, - anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(464), 1, - anon_sym_SEMI, - STATE(100), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(400), 1, + anon_sym_COMMA, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13430] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [13985] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(250), 1, + ACTIONS(232), 1, anon_sym_STAR_STAR, - ACTIONS(254), 1, - anon_sym_SLASH_SLASH, - ACTIONS(258), 1, + ACTIONS(234), 1, + anon_sym_STAR, + ACTIONS(236), 1, + anon_sym_SLASH, + ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(260), 1, + ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(262), 1, + ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(268), 1, + ACTIONS(256), 1, anon_sym_AMP_AMP, - ACTIONS(270), 1, + ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(466), 1, + ACTIONS(260), 1, + anon_sym_CARET_CARET, + ACTIONS(472), 1, anon_sym_COMMA, - STATE(100), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(248), 2, + ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(252), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(256), 2, + ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(264), 2, + ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(266), 4, + ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13490] = 17, - ACTIONS(208), 1, - anon_sym_COLON_COLON, + [14047] = 18, ACTIONS(212), 1, + anon_sym_COLON_COLON, + ACTIONS(216), 1, anon_sym_LPAREN, - ACTIONS(420), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, ACTIONS(424), 1, - anon_sym_SLASH_SLASH, - ACTIONS(428), 1, - anon_sym_AMP, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, ACTIONS(430), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(432), 1, + anon_sym_PIPE, + ACTIONS(434), 1, anon_sym_CARET, - ACTIONS(438), 1, - anon_sym_AMP_AMP, ACTIONS(440), 1, + anon_sym_AMP_AMP, + ACTIONS(442), 1, anon_sym_PIPE_PIPE, - ACTIONS(468), 1, + ACTIONS(444), 1, + anon_sym_CARET_CARET, + ACTIONS(474), 1, anon_sym_then, - STATE(100), 1, + STATE(111), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(418), 2, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(422), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(426), 2, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(434), 2, + ACTIONS(436), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(436), 4, + ACTIONS(438), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13550] = 3, + [14109] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(240), 6, + ACTIONS(252), 6, anon_sym_STAR, - anon_sym_SLASH, anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(238), 17, + ACTIONS(250), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH_SLASH, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_CARET, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - [13582] = 14, + [14141] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(470), 1, - sym_identifier, - ACTIONS(472), 1, - aux_sym_base_ten_token1, ACTIONS(476), 1, + sym_identifier, + ACTIONS(480), 1, anon_sym_LPAREN, - STATE(246), 1, + STATE(76), 1, sym__float, - STATE(247), 1, + STATE(77), 1, sym_number, - STATE(255), 1, + STATE(271), 1, sym_formula_expression, - STATE(297), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(474), 2, + ACTIONS(478), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(250), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [13635] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [14194] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(470), 1, - sym_identifier, ACTIONS(476), 1, + sym_identifier, + ACTIONS(480), 1, anon_sym_LPAREN, - STATE(73), 1, + ACTIONS(482), 1, + aux_sym_base_ten_token1, + STATE(252), 1, sym__float, - STATE(74), 1, + STATE(253), 1, sym_number, - STATE(266), 1, + STATE(263), 1, sym_formula_expression, - STATE(312), 1, + STATE(317), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(478), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(250), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [13688] = 14, + [14247] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(470), 1, - sym_identifier, - ACTIONS(472), 1, - aux_sym_base_ten_token1, ACTIONS(476), 1, + sym_identifier, + ACTIONS(480), 1, anon_sym_LPAREN, - STATE(246), 1, + ACTIONS(482), 1, + aux_sym_base_ten_token1, + STATE(252), 1, sym__float, - STATE(247), 1, + STATE(253), 1, sym_number, - STATE(256), 1, + STATE(264), 1, sym_formula_expression, - STATE(297), 1, + STATE(317), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(474), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(250), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [13741] = 14, + [14300] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -13357,17 +13763,17 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(470), 1, - sym_identifier, ACTIONS(476), 1, + sym_identifier, + ACTIONS(480), 1, anon_sym_LPAREN, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(263), 1, + STATE(268), 1, sym_formula_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -13375,19 +13781,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(478), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(250), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [13794] = 14, + [14353] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -13396,17 +13802,17 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(470), 1, - sym_identifier, ACTIONS(476), 1, + sym_identifier, + ACTIONS(480), 1, anon_sym_LPAREN, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(252), 1, + STATE(267), 1, sym_formula_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -13414,19 +13820,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(478), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(250), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [13847] = 14, + [14406] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -13435,17 +13841,17 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(470), 1, - sym_identifier, ACTIONS(476), 1, + sym_identifier, + ACTIONS(480), 1, anon_sym_LPAREN, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(261), 1, + STATE(258), 1, sym_formula_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -13453,58 +13859,58 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(478), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(250), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [13900] = 14, + [14459] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(470), 1, - sym_identifier, - ACTIONS(472), 1, - aux_sym_base_ten_token1, ACTIONS(476), 1, + sym_identifier, + ACTIONS(480), 1, anon_sym_LPAREN, - STATE(246), 1, + STATE(76), 1, sym__float, - STATE(247), 1, + STATE(77), 1, sym_number, - STATE(258), 1, + STATE(270), 1, sym_formula_expression, - STATE(297), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(474), 2, + ACTIONS(478), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(250), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [13953] = 14, + [14512] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -13513,17 +13919,17 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(470), 1, - sym_identifier, ACTIONS(476), 1, + sym_identifier, + ACTIONS(480), 1, anon_sym_LPAREN, - STATE(73), 1, + STATE(76), 1, sym__float, - STATE(74), 1, + STATE(77), 1, sym_number, - STATE(268), 1, + STATE(269), 1, sym_formula_expression, - STATE(312), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -13531,222 +13937,222 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(478), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(250), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14006] = 14, + [14565] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(470), 1, - sym_identifier, - ACTIONS(472), 1, - aux_sym_base_ten_token1, ACTIONS(476), 1, + sym_identifier, + ACTIONS(480), 1, anon_sym_LPAREN, - STATE(246), 1, + ACTIONS(482), 1, + aux_sym_base_ten_token1, + STATE(252), 1, sym__float, - STATE(247), 1, + STATE(253), 1, sym_number, - STATE(252), 1, + STATE(258), 1, sym_formula_expression, - STATE(297), 1, + STATE(317), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(474), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(250), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14059] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [14618] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(470), 1, - sym_identifier, ACTIONS(476), 1, + sym_identifier, + ACTIONS(480), 1, anon_sym_LPAREN, - STATE(73), 1, + ACTIONS(482), 1, + aux_sym_base_ten_token1, + STATE(252), 1, sym__float, - STATE(74), 1, + STATE(253), 1, sym_number, - STATE(262), 1, + STATE(265), 1, sym_formula_expression, - STATE(312), 1, + STATE(317), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(478), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(250), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14112] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [14671] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(470), 1, - sym_identifier, ACTIONS(476), 1, + sym_identifier, + ACTIONS(480), 1, anon_sym_LPAREN, - STATE(73), 1, + ACTIONS(482), 1, + aux_sym_base_ten_token1, + STATE(252), 1, sym__float, - STATE(74), 1, + STATE(253), 1, sym_number, - STATE(269), 1, + STATE(261), 1, sym_formula_expression, - STATE(312), 1, + STATE(317), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(478), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(250), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14165] = 14, + [14724] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(470), 1, - sym_identifier, - ACTIONS(472), 1, - aux_sym_base_ten_token1, ACTIONS(476), 1, + sym_identifier, + ACTIONS(480), 1, anon_sym_LPAREN, - STATE(246), 1, + ACTIONS(482), 1, + aux_sym_base_ten_token1, + STATE(252), 1, sym__float, - STATE(247), 1, - sym_number, STATE(253), 1, + sym_number, + STATE(266), 1, sym_formula_expression, - STATE(297), 1, + STATE(317), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(474), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(250), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14218] = 14, + [14777] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(470), 1, - sym_identifier, - ACTIONS(472), 1, - aux_sym_base_ten_token1, ACTIONS(476), 1, + sym_identifier, + ACTIONS(480), 1, anon_sym_LPAREN, - STATE(246), 1, + STATE(76), 1, sym__float, - STATE(247), 1, + STATE(77), 1, sym_number, - STATE(257), 1, + STATE(274), 1, sym_formula_expression, - STATE(297), 1, + STATE(318), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(474), 2, + ACTIONS(478), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(311), 4, + STATE(313), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(250), 6, + STATE(257), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14271] = 5, - ACTIONS(480), 1, + [14830] = 5, + ACTIONS(486), 1, anon_sym_DOT, - STATE(237), 1, + STATE(243), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 7, + ACTIONS(186), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -13754,7 +14160,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(156), 11, + ACTIONS(184), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -13766,15 +14172,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [14304] = 5, - ACTIONS(480), 1, + [14863] = 5, + ACTIONS(486), 1, anon_sym_DOT, - STATE(238), 1, + STATE(244), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(154), 7, + ACTIONS(164), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -13782,7 +14188,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(150), 11, + ACTIONS(160), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -13794,15 +14200,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [14337] = 5, - ACTIONS(482), 1, + [14896] = 5, + ACTIONS(488), 1, anon_sym_DOT, - STATE(238), 1, + STATE(244), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(169), 7, + ACTIONS(175), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -13810,7 +14216,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(164), 11, + ACTIONS(170), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -13822,11 +14228,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [14370] = 3, + [14929] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(485), 7, + ACTIONS(491), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -13847,11 +14253,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LT_LT_LT, - [14398] = 3, + [14957] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(169), 7, + ACTIONS(175), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -13859,7 +14265,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(164), 12, + ACTIONS(170), 12, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -13872,11 +14278,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [14426] = 3, + [14985] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(487), 7, + ACTIONS(493), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -13896,11 +14302,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [14453] = 3, + [15012] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 7, + ACTIONS(200), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -13908,7 +14314,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(202), 11, + ACTIONS(198), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -13920,11 +14326,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [14480] = 3, + [15039] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(228), 7, + ACTIONS(204), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -13932,7 +14338,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(226), 11, + ACTIONS(202), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -13944,11 +14350,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [14507] = 3, + [15066] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(200), 7, + ACTIONS(228), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -13956,7 +14362,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(198), 11, + ACTIONS(226), 11, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -13968,7 +14374,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_LBRACK, anon_sym_LT_LT_LT, - [14534] = 4, + [15093] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -13991,13 +14397,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14561] = 5, + [15120] = 5, STATE(259), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(489), 2, + ACTIONS(495), 2, sym_identifier, sym_unit_quote, ACTIONS(142), 3, @@ -14013,8 +14419,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14588] = 4, - ACTIONS(491), 1, + [15147] = 4, + ACTIONS(497), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, @@ -14034,15 +14440,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14613] = 3, + [15172] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(162), 3, + ACTIONS(132), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(160), 10, + ACTIONS(130), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -14053,17 +14459,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14635] = 3, + [15194] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(132), 3, + ACTIONS(501), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(130), 10, - sym_identifier, - sym_unit_quote, + ACTIONS(499), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14072,15 +14476,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14657] = 3, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [15216] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(495), 3, + ACTIONS(158), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(493), 10, + ACTIONS(156), 10, + sym_identifier, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14089,17 +14497,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [14679] = 3, + [15238] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(499), 3, + ACTIONS(505), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(497), 10, + ACTIONS(503), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14110,15 +14516,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [14701] = 3, + [15260] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(503), 3, + ACTIONS(509), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(501), 10, + ACTIONS(507), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14129,36 +14535,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [14723] = 7, - ACTIONS(507), 1, - anon_sym_STAR_STAR, - ACTIONS(509), 1, - anon_sym_STAR, - ACTIONS(511), 1, - anon_sym_SLASH, + [15282] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(505), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(513), 2, + ACTIONS(190), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(515), 4, + ACTIONS(188), 8, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14751] = 3, + [15302] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(216), 3, + ACTIONS(208), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(214), 8, + ACTIONS(206), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14167,379 +14569,361 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14771] = 4, - ACTIONS(507), 1, + [15322] = 7, + ACTIONS(513), 1, anon_sym_STAR_STAR, + ACTIONS(515), 1, + anon_sym_STAR, + ACTIONS(517), 1, + anon_sym_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(511), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(519), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(521), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [15350] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(503), 3, + ACTIONS(224), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(501), 7, + ACTIONS(222), 8, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14793] = 7, - ACTIONS(507), 1, + [15370] = 7, + ACTIONS(513), 1, anon_sym_STAR_STAR, - ACTIONS(509), 1, + ACTIONS(515), 1, anon_sym_STAR, - ACTIONS(511), 1, + ACTIONS(517), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(505), 2, + ACTIONS(511), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(517), 2, + ACTIONS(523), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(519), 4, + ACTIONS(525), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14821] = 7, - ACTIONS(507), 1, + [15398] = 7, + ACTIONS(513), 1, anon_sym_STAR_STAR, - ACTIONS(509), 1, + ACTIONS(515), 1, anon_sym_STAR, - ACTIONS(511), 1, + ACTIONS(517), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(505), 2, + ACTIONS(511), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(521), 2, + ACTIONS(527), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(523), 4, + ACTIONS(529), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14849] = 6, - ACTIONS(507), 1, + [15426] = 6, + ACTIONS(513), 1, anon_sym_STAR_STAR, - ACTIONS(509), 1, + ACTIONS(515), 1, anon_sym_STAR, - ACTIONS(511), 1, + ACTIONS(517), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(503), 2, + ACTIONS(509), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(501), 6, + ACTIONS(507), 6, anon_sym_DASH, anon_sym_PLUS, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14875] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(220), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(218), 8, - anon_sym_DASH, - anon_sym_PLUS, + [15452] = 4, + ACTIONS(513), 1, anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [14895] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(224), 3, + ACTIONS(509), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 8, + ACTIONS(507), 7, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14915] = 5, - ACTIONS(525), 1, + [15474] = 5, + ACTIONS(531), 1, anon_sym_STAR_STAR, - ACTIONS(527), 1, + ACTIONS(533), 1, anon_sym_STAR, - ACTIONS(529), 1, + ACTIONS(535), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(501), 4, + ACTIONS(507), 4, anon_sym_DASH, anon_sym_PLUS, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [14935] = 6, - ACTIONS(525), 1, + [15494] = 6, + ACTIONS(531), 1, anon_sym_STAR_STAR, - ACTIONS(527), 1, + ACTIONS(533), 1, anon_sym_STAR, - ACTIONS(529), 1, + ACTIONS(535), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(519), 2, + ACTIONS(529), 2, anon_sym_RPAREN, anon_sym_GT_GT_GT, - ACTIONS(531), 2, + ACTIONS(537), 2, anon_sym_DASH, anon_sym_PLUS, - [14957] = 4, - ACTIONS(503), 1, + [15516] = 4, + ACTIONS(509), 1, anon_sym_STAR, - ACTIONS(525), 1, + ACTIONS(531), 1, anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(501), 5, + ACTIONS(507), 5, anon_sym_DASH, anon_sym_PLUS, anon_sym_SLASH, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [14975] = 7, - ACTIONS(39), 1, - sym_varadic_dots, + [15534] = 6, + ACTIONS(531), 1, + anon_sym_STAR_STAR, ACTIONS(533), 1, - sym_identifier, + anon_sym_STAR, + ACTIONS(535), 1, + anon_sym_SLASH, + ACTIONS(539), 1, + anon_sym_GT_GT_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(537), 2, + anon_sym_DASH, + anon_sym_PLUS, + [15555] = 6, + ACTIONS(531), 1, + anon_sym_STAR_STAR, + ACTIONS(533), 1, + anon_sym_STAR, ACTIONS(535), 1, + anon_sym_SLASH, + ACTIONS(541), 1, anon_sym_RPAREN, - STATE(271), 1, - aux_sym_struct_definition_repeat1, - STATE(301), 1, - sym_struct_member, - STATE(319), 1, - sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [14998] = 7, + ACTIONS(537), 2, + anon_sym_DASH, + anon_sym_PLUS, + [15576] = 7, ACTIONS(39), 1, sym_varadic_dots, - ACTIONS(533), 1, + ACTIONS(543), 1, sym_identifier, - ACTIONS(537), 1, + ACTIONS(545), 1, anon_sym_RPAREN, - STATE(271), 1, + STATE(277), 1, aux_sym_struct_definition_repeat1, - STATE(301), 1, + STATE(316), 1, sym_struct_member, - STATE(325), 1, + STATE(322), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15021] = 6, - ACTIONS(525), 1, - anon_sym_STAR_STAR, - ACTIONS(527), 1, - anon_sym_STAR, - ACTIONS(529), 1, - anon_sym_SLASH, - ACTIONS(539), 1, - anon_sym_RPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(531), 2, - anon_sym_DASH, - anon_sym_PLUS, - [15042] = 7, + [15599] = 7, ACTIONS(39), 1, sym_varadic_dots, - ACTIONS(533), 1, + ACTIONS(543), 1, sym_identifier, - ACTIONS(541), 1, + ACTIONS(547), 1, anon_sym_RPAREN, - STATE(265), 1, + STATE(277), 1, aux_sym_struct_definition_repeat1, - STATE(301), 1, + STATE(316), 1, sym_struct_member, - STATE(334), 1, + STATE(332), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15065] = 6, - ACTIONS(525), 1, + [15622] = 6, + ACTIONS(531), 1, anon_sym_STAR_STAR, - ACTIONS(527), 1, + ACTIONS(533), 1, anon_sym_STAR, - ACTIONS(529), 1, + ACTIONS(535), 1, anon_sym_SLASH, - ACTIONS(543), 1, + ACTIONS(549), 1, anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(531), 2, + ACTIONS(537), 2, anon_sym_DASH, anon_sym_PLUS, - [15086] = 6, - ACTIONS(525), 1, - anon_sym_STAR_STAR, - ACTIONS(527), 1, - anon_sym_STAR, - ACTIONS(529), 1, - anon_sym_SLASH, - ACTIONS(545), 1, - anon_sym_GT_GT_GT, + [15643] = 7, + ACTIONS(39), 1, + sym_varadic_dots, + ACTIONS(543), 1, + sym_identifier, + ACTIONS(551), 1, + anon_sym_RPAREN, + STATE(277), 1, + aux_sym_struct_definition_repeat1, + STATE(316), 1, + sym_struct_member, + STATE(339), 1, + sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(531), 2, - anon_sym_DASH, - anon_sym_PLUS, - [15107] = 7, + [15666] = 7, ACTIONS(39), 1, sym_varadic_dots, - ACTIONS(533), 1, + ACTIONS(543), 1, sym_identifier, - ACTIONS(547), 1, + ACTIONS(553), 1, anon_sym_RPAREN, - STATE(271), 1, + STATE(273), 1, aux_sym_struct_definition_repeat1, - STATE(301), 1, - sym_struct_member, STATE(316), 1, + sym_struct_member, + STATE(331), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15130] = 5, - ACTIONS(549), 1, + [15689] = 5, + ACTIONS(555), 1, sym_identifier, - STATE(271), 1, + STATE(277), 1, aux_sym_struct_definition_repeat1, - STATE(330), 1, + STATE(334), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(552), 2, + ACTIONS(558), 2, anon_sym_RPAREN, sym_varadic_dots, - [15148] = 4, - ACTIONS(554), 1, - sym_identifier, - ACTIONS(556), 1, - anon_sym_LPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - STATE(47), 2, - sym_identity_path, - sym_struct_definition, - [15163] = 4, - ACTIONS(558), 1, - sym_identifier, + [15707] = 4, ACTIONS(560), 1, - anon_sym_in, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - STATE(274), 2, - sym_let_in_assignment, - aux_sym_let_in_repeat1, - [15178] = 4, - ACTIONS(558), 1, sym_identifier, - ACTIONS(562), 1, + ACTIONS(563), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(280), 2, + STATE(278), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15193] = 4, - ACTIONS(558), 1, + [15722] = 4, + ACTIONS(565), 1, sym_identifier, - ACTIONS(564), 1, + ACTIONS(567), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(276), 2, + STATE(283), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15208] = 4, - ACTIONS(558), 1, + [15737] = 4, + ACTIONS(565), 1, sym_identifier, - ACTIONS(566), 1, + ACTIONS(569), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(280), 2, + STATE(278), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15223] = 4, - ACTIONS(558), 1, + [15752] = 4, + ACTIONS(571), 1, sym_identifier, - ACTIONS(568), 1, - anon_sym_in, + ACTIONS(573), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(279), 2, - sym_let_in_assignment, - aux_sym_let_in_repeat1, - [15238] = 4, - ACTIONS(554), 1, + STATE(49), 2, + sym_identity_path, + sym_struct_definition, + [15767] = 4, + ACTIONS(571), 1, sym_identifier, - ACTIONS(556), 1, + ACTIONS(573), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(62), 2, + STATE(65), 2, sym_identity_path, sym_struct_definition, - [15253] = 4, - ACTIONS(558), 1, + [15782] = 4, + ACTIONS(565), 1, sym_identifier, - ACTIONS(570), 1, + ACTIONS(575), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(280), 2, + STATE(278), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15268] = 4, - ACTIONS(572), 1, + [15797] = 4, + ACTIONS(565), 1, sym_identifier, - ACTIONS(575), 1, + ACTIONS(577), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, @@ -14547,416 +14931,438 @@ static const uint16_t ts_small_parse_table[] = { STATE(280), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15283] = 4, - ACTIONS(554), 1, + [15812] = 4, + ACTIONS(571), 1, sym_identifier, - ACTIONS(556), 1, + ACTIONS(573), 1, anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(29), 2, + STATE(30), 2, sym_identity_path, sym_struct_definition, - [15298] = 4, - ACTIONS(577), 1, - anon_sym_COMMA, + [15827] = 4, + ACTIONS(565), 1, + sym_identifier, ACTIONS(579), 1, - anon_sym_RPAREN, - STATE(294), 1, - aux_sym_dictionary_construction_repeat1, + anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15312] = 4, - ACTIONS(581), 1, + STATE(287), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [15842] = 4, + ACTIONS(565), 1, sym_identifier, - ACTIONS(583), 1, - anon_sym_RPAREN, - STATE(291), 1, - sym_dictionary_member_assignment, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [15326] = 4, - ACTIONS(579), 1, - anon_sym_RPAREN, ACTIONS(581), 1, - sym_identifier, - STATE(296), 1, - sym_dictionary_member_assignment, + anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15340] = 4, - ACTIONS(581), 1, - sym_identifier, + STATE(278), 2, + sym_let_in_assignment, + aux_sym_let_in_repeat1, + [15857] = 4, + ACTIONS(583), 1, + anon_sym_COMMA, ACTIONS(585), 1, anon_sym_RPAREN, - STATE(296), 1, - sym_dictionary_member_assignment, + STATE(295), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15354] = 4, - ACTIONS(585), 1, - anon_sym_RPAREN, + [15871] = 4, ACTIONS(587), 1, anon_sym_COMMA, - STATE(294), 1, + ACTIONS(589), 1, + anon_sym_RPAREN, + STATE(292), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15368] = 2, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(552), 3, - sym_identifier, - anon_sym_RPAREN, - sym_varadic_dots, - [15378] = 3, - ACTIONS(591), 1, + [15885] = 3, + ACTIONS(593), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(589), 2, + ACTIONS(591), 2, anon_sym_COMMA, anon_sym_RPAREN, - [15390] = 4, - ACTIONS(581), 1, - sym_identifier, - ACTIONS(593), 1, - anon_sym_RPAREN, - STATE(293), 1, - sym_dictionary_member_assignment, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [15404] = 4, - ACTIONS(581), 1, - sym_identifier, + [15897] = 4, ACTIONS(595), 1, + sym_identifier, + ACTIONS(597), 1, anon_sym_RPAREN, - STATE(296), 1, + STATE(314), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15418] = 4, + [15911] = 4, ACTIONS(597), 1, - anon_sym_COMMA, - ACTIONS(599), 1, anon_sym_RPAREN, - STATE(286), 1, + ACTIONS(599), 1, + anon_sym_COMMA, + STATE(298), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15432] = 4, - ACTIONS(581), 1, + [15925] = 4, + ACTIONS(595), 1, sym_identifier, ACTIONS(601), 1, anon_sym_RPAREN, - STATE(296), 1, + STATE(288), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15446] = 4, + [15939] = 4, + ACTIONS(595), 1, + sym_identifier, ACTIONS(603), 1, - anon_sym_COMMA, - ACTIONS(605), 1, anon_sym_RPAREN, - STATE(282), 1, - aux_sym_dictionary_construction_repeat1, + STATE(314), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15460] = 4, - ACTIONS(607), 1, - anon_sym_COMMA, - ACTIONS(610), 1, + [15953] = 4, + ACTIONS(603), 1, anon_sym_RPAREN, - STATE(294), 1, + ACTIONS(605), 1, + anon_sym_COMMA, + STATE(298), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15474] = 3, - ACTIONS(386), 1, - anon_sym_LPAREN, - STATE(194), 1, - sym_dictionary_construction, + [15967] = 4, + ACTIONS(595), 1, + sym_identifier, + ACTIONS(607), 1, + anon_sym_RPAREN, + STATE(314), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15485] = 2, + [15981] = 4, + ACTIONS(595), 1, + sym_identifier, + ACTIONS(609), 1, + anon_sym_RPAREN, + STATE(314), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(610), 2, + [15995] = 4, + ACTIONS(611), 1, anon_sym_COMMA, - anon_sym_RPAREN, - [15494] = 3, - ACTIONS(612), 1, - aux_sym_signed_integer_token1, ACTIONS(614), 1, - aux_sym_unsigned_integer_token1, + anon_sym_RPAREN, + STATE(298), 1, + aux_sym_dictionary_construction_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [16009] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15505] = 3, + ACTIONS(558), 3, + sym_identifier, + anon_sym_RPAREN, + sym_varadic_dots, + [16019] = 4, + ACTIONS(595), 1, + sym_identifier, ACTIONS(616), 1, - aux_sym_base_ten_token1, - STATE(77), 1, - sym_number, + anon_sym_RPAREN, + STATE(289), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15516] = 3, - ACTIONS(212), 1, - anon_sym_LPAREN, - STATE(119), 1, - sym_dictionary_construction, + [16033] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15527] = 3, - ACTIONS(618), 1, - aux_sym_signed_integer_token1, + ACTIONS(618), 2, + sym_identifier, + anon_sym_in, + [16042] = 3, ACTIONS(620), 1, - aux_sym_unsigned_integer_token1, + aux_sym_base_ten_token1, + STATE(79), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15538] = 3, + [16053] = 3, ACTIONS(622), 1, - anon_sym_COMMA, - ACTIONS(624), 1, - anon_sym_RPAREN, + anon_sym_COLON, + STATE(290), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15549] = 3, - ACTIONS(626), 1, - aux_sym_base_ten_token1, - STATE(248), 1, - sym_number, + [16064] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15560] = 3, - ACTIONS(628), 1, - aux_sym_base_ten_token1, - STATE(130), 1, - sym_number, + ACTIONS(624), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [16073] = 3, + ACTIONS(398), 1, + anon_sym_LPAREN, + STATE(195), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15571] = 2, + [16084] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(630), 2, + ACTIONS(626), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [15580] = 2, + [16093] = 3, + ACTIONS(216), 1, + anon_sym_LPAREN, + STATE(117), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(632), 2, + [16104] = 3, + ACTIONS(628), 1, aux_sym_signed_integer_token1, + ACTIONS(630), 1, aux_sym_unsigned_integer_token1, - [15589] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(634), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [15598] = 3, - ACTIONS(636), 1, - anon_sym_COLON, - STATE(288), 1, - sym_declaration_type, + [16115] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15609] = 2, + ACTIONS(632), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [16124] = 3, + ACTIONS(634), 1, + anon_sym_COMMA, + ACTIONS(636), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(638), 2, - sym_identifier, - anon_sym_in, - [15618] = 3, - ACTIONS(581), 1, - sym_identifier, - STATE(296), 1, - sym_dictionary_member_assignment, + [16135] = 3, + ACTIONS(638), 1, + aux_sym_base_ten_token1, + STATE(256), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15629] = 3, + [16146] = 3, ACTIONS(640), 1, aux_sym_base_ten_token1, - STATE(143), 1, + STATE(133), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15640] = 2, + [16157] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(642), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [15649] = 3, + [16166] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(614), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + [16175] = 3, ACTIONS(644), 1, - aux_sym_signed_integer_token1, - ACTIONS(646), 1, - aux_sym_unsigned_integer_token1, + aux_sym_base_ten_token1, + STATE(152), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15660] = 3, - ACTIONS(624), 1, + [16186] = 3, + ACTIONS(636), 1, anon_sym_RPAREN, - ACTIONS(648), 1, + ACTIONS(646), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15671] = 2, + [16197] = 3, + ACTIONS(648), 1, + aux_sym_signed_integer_token1, ACTIONS(650), 1, - anon_sym_RPAREN, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15679] = 2, + [16208] = 3, ACTIONS(652), 1, - anon_sym_RPAREN, + aux_sym_signed_integer_token1, + ACTIONS(654), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15687] = 2, - ACTIONS(654), 1, - anon_sym_RPAREN, + [16219] = 3, + ACTIONS(595), 1, + sym_identifier, + STATE(314), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15695] = 2, + [16230] = 2, ACTIONS(656), 1, - sym_identifier, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15703] = 2, + [16238] = 2, ACTIONS(658), 1, - sym_identifier, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15711] = 2, + [16246] = 2, ACTIONS(660), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15719] = 2, + [16254] = 2, ACTIONS(662), 1, - sym_identifier, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15727] = 2, + [16262] = 2, ACTIONS(664), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15735] = 2, + [16270] = 2, ACTIONS(666), 1, - anon_sym_RPAREN, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15743] = 2, + [16278] = 2, ACTIONS(668), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15751] = 2, + [16286] = 2, ACTIONS(670), 1, - sym_identifier, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15759] = 2, + [16294] = 2, ACTIONS(672), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15767] = 2, + [16302] = 2, ACTIONS(674), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15775] = 2, + [16310] = 2, ACTIONS(676), 1, - anon_sym_EQ, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15783] = 2, + [16318] = 2, ACTIONS(678), 1, - sym_identifier, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15791] = 2, + [16326] = 2, ACTIONS(680), 1, - ts_builtin_sym_end, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15799] = 2, - ACTIONS(622), 1, - anon_sym_COMMA, + [16334] = 2, + ACTIONS(682), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15807] = 2, - ACTIONS(682), 1, - aux_sym_hex_token2, + [16342] = 2, + ACTIONS(646), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15815] = 2, + [16350] = 2, ACTIONS(684), 1, - aux_sym_base_ten_token1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15823] = 2, + [16358] = 2, ACTIONS(686), 1, aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15831] = 2, + [16366] = 2, ACTIONS(688), 1, + sym_identifier, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [16374] = 2, + ACTIONS(690), 1, + sym_identifier, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [16382] = 2, + ACTIONS(692), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, + [16390] = 2, + ACTIONS(694), 1, + ts_builtin_sym_end, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, }; static const uint32_t ts_small_parse_table_map[] = { @@ -15029,605 +15435,614 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(70)] = 6366, [SMALL_STATE(71)] = 6462, [SMALL_STATE(72)] = 6558, - [SMALL_STATE(73)] = 6603, - [SMALL_STATE(74)] = 6650, - [SMALL_STATE(75)] = 6693, - [SMALL_STATE(76)] = 6737, - [SMALL_STATE(77)] = 6781, - [SMALL_STATE(78)] = 6821, - [SMALL_STATE(79)] = 6865, - [SMALL_STATE(80)] = 6909, - [SMALL_STATE(81)] = 6953, - [SMALL_STATE(82)] = 6993, - [SMALL_STATE(83)] = 7037, - [SMALL_STATE(84)] = 7076, - [SMALL_STATE(85)] = 7117, - [SMALL_STATE(86)] = 7156, - [SMALL_STATE(87)] = 7195, - [SMALL_STATE(88)] = 7234, - [SMALL_STATE(89)] = 7279, - [SMALL_STATE(90)] = 7318, - [SMALL_STATE(91)] = 7357, - [SMALL_STATE(92)] = 7396, - [SMALL_STATE(93)] = 7435, - [SMALL_STATE(94)] = 7473, - [SMALL_STATE(95)] = 7511, - [SMALL_STATE(96)] = 7549, - [SMALL_STATE(97)] = 7587, - [SMALL_STATE(98)] = 7655, - [SMALL_STATE(99)] = 7693, - [SMALL_STATE(100)] = 7731, - [SMALL_STATE(101)] = 7769, - [SMALL_STATE(102)] = 7807, - [SMALL_STATE(103)] = 7857, - [SMALL_STATE(104)] = 7895, - [SMALL_STATE(105)] = 7941, - [SMALL_STATE(106)] = 7993, - [SMALL_STATE(107)] = 8047, - [SMALL_STATE(108)] = 8105, - [SMALL_STATE(109)] = 8161, - [SMALL_STATE(110)] = 8199, - [SMALL_STATE(111)] = 8263, - [SMALL_STATE(112)] = 8329, - [SMALL_STATE(113)] = 8367, - [SMALL_STATE(114)] = 8435, - [SMALL_STATE(115)] = 8475, - [SMALL_STATE(116)] = 8543, - [SMALL_STATE(117)] = 8611, - [SMALL_STATE(118)] = 8649, - [SMALL_STATE(119)] = 8687, - [SMALL_STATE(120)] = 8725, - [SMALL_STATE(121)] = 8793, - [SMALL_STATE(122)] = 8831, - [SMALL_STATE(123)] = 8869, - [SMALL_STATE(124)] = 8929, - [SMALL_STATE(125)] = 8968, - [SMALL_STATE(126)] = 9014, - [SMALL_STATE(127)] = 9052, - [SMALL_STATE(128)] = 9089, - [SMALL_STATE(129)] = 9128, - [SMALL_STATE(130)] = 9164, - [SMALL_STATE(131)] = 9198, - [SMALL_STATE(132)] = 9236, - [SMALL_STATE(133)] = 9276, - [SMALL_STATE(134)] = 9314, - [SMALL_STATE(135)] = 9352, - [SMALL_STATE(136)] = 9390, - [SMALL_STATE(137)] = 9428, - [SMALL_STATE(138)] = 9466, - [SMALL_STATE(139)] = 9530, - [SMALL_STATE(140)] = 9564, - [SMALL_STATE(141)] = 9625, - [SMALL_STATE(142)] = 9688, - [SMALL_STATE(143)] = 9721, - [SMALL_STATE(144)] = 9754, - [SMALL_STATE(145)] = 9793, - [SMALL_STATE(146)] = 9828, - [SMALL_STATE(147)] = 9891, - [SMALL_STATE(148)] = 9924, - [SMALL_STATE(149)] = 9985, - [SMALL_STATE(150)] = 10046, - [SMALL_STATE(151)] = 10079, - [SMALL_STATE(152)] = 10112, - [SMALL_STATE(153)] = 10157, - [SMALL_STATE(154)] = 10198, - [SMALL_STATE(155)] = 10245, - [SMALL_STATE(156)] = 10294, - [SMALL_STATE(157)] = 10355, - [SMALL_STATE(158)] = 10406, - [SMALL_STATE(159)] = 10461, - [SMALL_STATE(160)] = 10518, - [SMALL_STATE(161)] = 10577, - [SMALL_STATE(162)] = 10638, - [SMALL_STATE(163)] = 10671, - [SMALL_STATE(164)] = 10732, - [SMALL_STATE(165)] = 10767, - [SMALL_STATE(166)] = 10830, - [SMALL_STATE(167)] = 10863, - [SMALL_STATE(168)] = 10926, - [SMALL_STATE(169)] = 10989, - [SMALL_STATE(170)] = 11052, - [SMALL_STATE(171)] = 11115, - [SMALL_STATE(172)] = 11178, - [SMALL_STATE(173)] = 11239, - [SMALL_STATE(174)] = 11292, - [SMALL_STATE(175)] = 11324, - [SMALL_STATE(176)] = 11384, - [SMALL_STATE(177)] = 11416, - [SMALL_STATE(178)] = 11476, - [SMALL_STATE(179)] = 11508, - [SMALL_STATE(180)] = 11540, - [SMALL_STATE(181)] = 11572, - [SMALL_STATE(182)] = 11616, - [SMALL_STATE(183)] = 11656, - [SMALL_STATE(184)] = 11702, - [SMALL_STATE(185)] = 11750, - [SMALL_STATE(186)] = 11802, - [SMALL_STATE(187)] = 11852, - [SMALL_STATE(188)] = 11906, - [SMALL_STATE(189)] = 11962, - [SMALL_STATE(190)] = 12020, - [SMALL_STATE(191)] = 12052, - [SMALL_STATE(192)] = 12112, - [SMALL_STATE(193)] = 12144, - [SMALL_STATE(194)] = 12176, - [SMALL_STATE(195)] = 12208, - [SMALL_STATE(196)] = 12268, - [SMALL_STATE(197)] = 12300, - [SMALL_STATE(198)] = 12332, - [SMALL_STATE(199)] = 12392, - [SMALL_STATE(200)] = 12452, - [SMALL_STATE(201)] = 12484, - [SMALL_STATE(202)] = 12516, - [SMALL_STATE(203)] = 12548, - [SMALL_STATE(204)] = 12580, - [SMALL_STATE(205)] = 12640, - [SMALL_STATE(206)] = 12700, - [SMALL_STATE(207)] = 12760, - [SMALL_STATE(208)] = 12792, - [SMALL_STATE(209)] = 12852, - [SMALL_STATE(210)] = 12884, - [SMALL_STATE(211)] = 12944, - [SMALL_STATE(212)] = 13004, - [SMALL_STATE(213)] = 13064, - [SMALL_STATE(214)] = 13096, - [SMALL_STATE(215)] = 13156, - [SMALL_STATE(216)] = 13216, - [SMALL_STATE(217)] = 13276, - [SMALL_STATE(218)] = 13310, - [SMALL_STATE(219)] = 13370, - [SMALL_STATE(220)] = 13430, - [SMALL_STATE(221)] = 13490, - [SMALL_STATE(222)] = 13550, - [SMALL_STATE(223)] = 13582, - [SMALL_STATE(224)] = 13635, - [SMALL_STATE(225)] = 13688, - [SMALL_STATE(226)] = 13741, - [SMALL_STATE(227)] = 13794, - [SMALL_STATE(228)] = 13847, - [SMALL_STATE(229)] = 13900, - [SMALL_STATE(230)] = 13953, - [SMALL_STATE(231)] = 14006, - [SMALL_STATE(232)] = 14059, - [SMALL_STATE(233)] = 14112, - [SMALL_STATE(234)] = 14165, - [SMALL_STATE(235)] = 14218, - [SMALL_STATE(236)] = 14271, - [SMALL_STATE(237)] = 14304, - [SMALL_STATE(238)] = 14337, - [SMALL_STATE(239)] = 14370, - [SMALL_STATE(240)] = 14398, - [SMALL_STATE(241)] = 14426, - [SMALL_STATE(242)] = 14453, - [SMALL_STATE(243)] = 14480, - [SMALL_STATE(244)] = 14507, - [SMALL_STATE(245)] = 14534, - [SMALL_STATE(246)] = 14561, - [SMALL_STATE(247)] = 14588, - [SMALL_STATE(248)] = 14613, - [SMALL_STATE(249)] = 14635, - [SMALL_STATE(250)] = 14657, - [SMALL_STATE(251)] = 14679, - [SMALL_STATE(252)] = 14701, - [SMALL_STATE(253)] = 14723, - [SMALL_STATE(254)] = 14751, - [SMALL_STATE(255)] = 14771, - [SMALL_STATE(256)] = 14793, - [SMALL_STATE(257)] = 14821, - [SMALL_STATE(258)] = 14849, - [SMALL_STATE(259)] = 14875, - [SMALL_STATE(260)] = 14895, - [SMALL_STATE(261)] = 14915, - [SMALL_STATE(262)] = 14935, - [SMALL_STATE(263)] = 14957, - [SMALL_STATE(264)] = 14975, - [SMALL_STATE(265)] = 14998, - [SMALL_STATE(266)] = 15021, - [SMALL_STATE(267)] = 15042, - [SMALL_STATE(268)] = 15065, - [SMALL_STATE(269)] = 15086, - [SMALL_STATE(270)] = 15107, - [SMALL_STATE(271)] = 15130, - [SMALL_STATE(272)] = 15148, - [SMALL_STATE(273)] = 15163, - [SMALL_STATE(274)] = 15178, - [SMALL_STATE(275)] = 15193, - [SMALL_STATE(276)] = 15208, - [SMALL_STATE(277)] = 15223, - [SMALL_STATE(278)] = 15238, - [SMALL_STATE(279)] = 15253, - [SMALL_STATE(280)] = 15268, - [SMALL_STATE(281)] = 15283, - [SMALL_STATE(282)] = 15298, - [SMALL_STATE(283)] = 15312, - [SMALL_STATE(284)] = 15326, - [SMALL_STATE(285)] = 15340, - [SMALL_STATE(286)] = 15354, - [SMALL_STATE(287)] = 15368, - [SMALL_STATE(288)] = 15378, - [SMALL_STATE(289)] = 15390, - [SMALL_STATE(290)] = 15404, - [SMALL_STATE(291)] = 15418, - [SMALL_STATE(292)] = 15432, - [SMALL_STATE(293)] = 15446, - [SMALL_STATE(294)] = 15460, - [SMALL_STATE(295)] = 15474, - [SMALL_STATE(296)] = 15485, - [SMALL_STATE(297)] = 15494, - [SMALL_STATE(298)] = 15505, - [SMALL_STATE(299)] = 15516, - [SMALL_STATE(300)] = 15527, - [SMALL_STATE(301)] = 15538, - [SMALL_STATE(302)] = 15549, - [SMALL_STATE(303)] = 15560, - [SMALL_STATE(304)] = 15571, - [SMALL_STATE(305)] = 15580, - [SMALL_STATE(306)] = 15589, - [SMALL_STATE(307)] = 15598, - [SMALL_STATE(308)] = 15609, - [SMALL_STATE(309)] = 15618, - [SMALL_STATE(310)] = 15629, - [SMALL_STATE(311)] = 15640, - [SMALL_STATE(312)] = 15649, - [SMALL_STATE(313)] = 15660, - [SMALL_STATE(314)] = 15671, - [SMALL_STATE(315)] = 15679, - [SMALL_STATE(316)] = 15687, - [SMALL_STATE(317)] = 15695, - [SMALL_STATE(318)] = 15703, - [SMALL_STATE(319)] = 15711, - [SMALL_STATE(320)] = 15719, - [SMALL_STATE(321)] = 15727, - [SMALL_STATE(322)] = 15735, - [SMALL_STATE(323)] = 15743, - [SMALL_STATE(324)] = 15751, - [SMALL_STATE(325)] = 15759, - [SMALL_STATE(326)] = 15767, - [SMALL_STATE(327)] = 15775, - [SMALL_STATE(328)] = 15783, - [SMALL_STATE(329)] = 15791, - [SMALL_STATE(330)] = 15799, - [SMALL_STATE(331)] = 15807, - [SMALL_STATE(332)] = 15815, - [SMALL_STATE(333)] = 15823, - [SMALL_STATE(334)] = 15831, + [SMALL_STATE(73)] = 6654, + [SMALL_STATE(74)] = 6750, + [SMALL_STATE(75)] = 6846, + [SMALL_STATE(76)] = 6891, + [SMALL_STATE(77)] = 6938, + [SMALL_STATE(78)] = 6981, + [SMALL_STATE(79)] = 7025, + [SMALL_STATE(80)] = 7065, + [SMALL_STATE(81)] = 7109, + [SMALL_STATE(82)] = 7153, + [SMALL_STATE(83)] = 7197, + [SMALL_STATE(84)] = 7241, + [SMALL_STATE(85)] = 7285, + [SMALL_STATE(86)] = 7325, + [SMALL_STATE(87)] = 7364, + [SMALL_STATE(88)] = 7405, + [SMALL_STATE(89)] = 7444, + [SMALL_STATE(90)] = 7483, + [SMALL_STATE(91)] = 7522, + [SMALL_STATE(92)] = 7561, + [SMALL_STATE(93)] = 7606, + [SMALL_STATE(94)] = 7645, + [SMALL_STATE(95)] = 7684, + [SMALL_STATE(96)] = 7723, + [SMALL_STATE(97)] = 7787, + [SMALL_STATE(98)] = 7825, + [SMALL_STATE(99)] = 7895, + [SMALL_STATE(100)] = 7945, + [SMALL_STATE(101)] = 7983, + [SMALL_STATE(102)] = 8029, + [SMALL_STATE(103)] = 8081, + [SMALL_STATE(104)] = 8135, + [SMALL_STATE(105)] = 8193, + [SMALL_STATE(106)] = 8249, + [SMALL_STATE(107)] = 8309, + [SMALL_STATE(108)] = 8379, + [SMALL_STATE(109)] = 8445, + [SMALL_STATE(110)] = 8513, + [SMALL_STATE(111)] = 8551, + [SMALL_STATE(112)] = 8589, + [SMALL_STATE(113)] = 8659, + [SMALL_STATE(114)] = 8697, + [SMALL_STATE(115)] = 8735, + [SMALL_STATE(116)] = 8773, + [SMALL_STATE(117)] = 8811, + [SMALL_STATE(118)] = 8849, + [SMALL_STATE(119)] = 8919, + [SMALL_STATE(120)] = 8959, + [SMALL_STATE(121)] = 8997, + [SMALL_STATE(122)] = 9035, + [SMALL_STATE(123)] = 9073, + [SMALL_STATE(124)] = 9143, + [SMALL_STATE(125)] = 9181, + [SMALL_STATE(126)] = 9219, + [SMALL_STATE(127)] = 9257, + [SMALL_STATE(128)] = 9295, + [SMALL_STATE(129)] = 9334, + [SMALL_STATE(130)] = 9380, + [SMALL_STATE(131)] = 9418, + [SMALL_STATE(132)] = 9457, + [SMALL_STATE(133)] = 9494, + [SMALL_STATE(134)] = 9528, + [SMALL_STATE(135)] = 9566, + [SMALL_STATE(136)] = 9604, + [SMALL_STATE(137)] = 9638, + [SMALL_STATE(138)] = 9676, + [SMALL_STATE(139)] = 9714, + [SMALL_STATE(140)] = 9754, + [SMALL_STATE(141)] = 9790, + [SMALL_STATE(142)] = 9828, + [SMALL_STATE(143)] = 9894, + [SMALL_STATE(144)] = 9932, + [SMALL_STATE(145)] = 9967, + [SMALL_STATE(146)] = 10030, + [SMALL_STATE(147)] = 10095, + [SMALL_STATE(148)] = 10158, + [SMALL_STATE(149)] = 10193, + [SMALL_STATE(150)] = 10258, + [SMALL_STATE(151)] = 10291, + [SMALL_STATE(152)] = 10324, + [SMALL_STATE(153)] = 10357, + [SMALL_STATE(154)] = 10396, + [SMALL_STATE(155)] = 10461, + [SMALL_STATE(156)] = 10494, + [SMALL_STATE(157)] = 10557, + [SMALL_STATE(158)] = 10590, + [SMALL_STATE(159)] = 10623, + [SMALL_STATE(160)] = 10668, + [SMALL_STATE(161)] = 10733, + [SMALL_STATE(162)] = 10780, + [SMALL_STATE(163)] = 10829, + [SMALL_STATE(164)] = 10882, + [SMALL_STATE(165)] = 10933, + [SMALL_STATE(166)] = 10988, + [SMALL_STATE(167)] = 11045, + [SMALL_STATE(168)] = 11104, + [SMALL_STATE(169)] = 11165, + [SMALL_STATE(170)] = 11228, + [SMALL_STATE(171)] = 11291, + [SMALL_STATE(172)] = 11324, + [SMALL_STATE(173)] = 11387, + [SMALL_STATE(174)] = 11450, + [SMALL_STATE(175)] = 11515, + [SMALL_STATE(176)] = 11580, + [SMALL_STATE(177)] = 11645, + [SMALL_STATE(178)] = 11710, + [SMALL_STATE(179)] = 11751, + [SMALL_STATE(180)] = 11783, + [SMALL_STATE(181)] = 11845, + [SMALL_STATE(182)] = 11889, + [SMALL_STATE(183)] = 11921, + [SMALL_STATE(184)] = 11961, + [SMALL_STATE(185)] = 12007, + [SMALL_STATE(186)] = 12055, + [SMALL_STATE(187)] = 12107, + [SMALL_STATE(188)] = 12157, + [SMALL_STATE(189)] = 12211, + [SMALL_STATE(190)] = 12267, + [SMALL_STATE(191)] = 12325, + [SMALL_STATE(192)] = 12385, + [SMALL_STATE(193)] = 12417, + [SMALL_STATE(194)] = 12479, + [SMALL_STATE(195)] = 12511, + [SMALL_STATE(196)] = 12543, + [SMALL_STATE(197)] = 12605, + [SMALL_STATE(198)] = 12637, + [SMALL_STATE(199)] = 12669, + [SMALL_STATE(200)] = 12701, + [SMALL_STATE(201)] = 12763, + [SMALL_STATE(202)] = 12795, + [SMALL_STATE(203)] = 12827, + [SMALL_STATE(204)] = 12889, + [SMALL_STATE(205)] = 12921, + [SMALL_STATE(206)] = 12953, + [SMALL_STATE(207)] = 12985, + [SMALL_STATE(208)] = 13047, + [SMALL_STATE(209)] = 13109, + [SMALL_STATE(210)] = 13171, + [SMALL_STATE(211)] = 13233, + [SMALL_STATE(212)] = 13265, + [SMALL_STATE(213)] = 13327, + [SMALL_STATE(214)] = 13359, + [SMALL_STATE(215)] = 13421, + [SMALL_STATE(216)] = 13453, + [SMALL_STATE(217)] = 13485, + [SMALL_STATE(218)] = 13547, + [SMALL_STATE(219)] = 13609, + [SMALL_STATE(220)] = 13671, + [SMALL_STATE(221)] = 13703, + [SMALL_STATE(222)] = 13765, + [SMALL_STATE(223)] = 13827, + [SMALL_STATE(224)] = 13889, + [SMALL_STATE(225)] = 13923, + [SMALL_STATE(226)] = 13985, + [SMALL_STATE(227)] = 14047, + [SMALL_STATE(228)] = 14109, + [SMALL_STATE(229)] = 14141, + [SMALL_STATE(230)] = 14194, + [SMALL_STATE(231)] = 14247, + [SMALL_STATE(232)] = 14300, + [SMALL_STATE(233)] = 14353, + [SMALL_STATE(234)] = 14406, + [SMALL_STATE(235)] = 14459, + [SMALL_STATE(236)] = 14512, + [SMALL_STATE(237)] = 14565, + [SMALL_STATE(238)] = 14618, + [SMALL_STATE(239)] = 14671, + [SMALL_STATE(240)] = 14724, + [SMALL_STATE(241)] = 14777, + [SMALL_STATE(242)] = 14830, + [SMALL_STATE(243)] = 14863, + [SMALL_STATE(244)] = 14896, + [SMALL_STATE(245)] = 14929, + [SMALL_STATE(246)] = 14957, + [SMALL_STATE(247)] = 14985, + [SMALL_STATE(248)] = 15012, + [SMALL_STATE(249)] = 15039, + [SMALL_STATE(250)] = 15066, + [SMALL_STATE(251)] = 15093, + [SMALL_STATE(252)] = 15120, + [SMALL_STATE(253)] = 15147, + [SMALL_STATE(254)] = 15172, + [SMALL_STATE(255)] = 15194, + [SMALL_STATE(256)] = 15216, + [SMALL_STATE(257)] = 15238, + [SMALL_STATE(258)] = 15260, + [SMALL_STATE(259)] = 15282, + [SMALL_STATE(260)] = 15302, + [SMALL_STATE(261)] = 15322, + [SMALL_STATE(262)] = 15350, + [SMALL_STATE(263)] = 15370, + [SMALL_STATE(264)] = 15398, + [SMALL_STATE(265)] = 15426, + [SMALL_STATE(266)] = 15452, + [SMALL_STATE(267)] = 15474, + [SMALL_STATE(268)] = 15494, + [SMALL_STATE(269)] = 15516, + [SMALL_STATE(270)] = 15534, + [SMALL_STATE(271)] = 15555, + [SMALL_STATE(272)] = 15576, + [SMALL_STATE(273)] = 15599, + [SMALL_STATE(274)] = 15622, + [SMALL_STATE(275)] = 15643, + [SMALL_STATE(276)] = 15666, + [SMALL_STATE(277)] = 15689, + [SMALL_STATE(278)] = 15707, + [SMALL_STATE(279)] = 15722, + [SMALL_STATE(280)] = 15737, + [SMALL_STATE(281)] = 15752, + [SMALL_STATE(282)] = 15767, + [SMALL_STATE(283)] = 15782, + [SMALL_STATE(284)] = 15797, + [SMALL_STATE(285)] = 15812, + [SMALL_STATE(286)] = 15827, + [SMALL_STATE(287)] = 15842, + [SMALL_STATE(288)] = 15857, + [SMALL_STATE(289)] = 15871, + [SMALL_STATE(290)] = 15885, + [SMALL_STATE(291)] = 15897, + [SMALL_STATE(292)] = 15911, + [SMALL_STATE(293)] = 15925, + [SMALL_STATE(294)] = 15939, + [SMALL_STATE(295)] = 15953, + [SMALL_STATE(296)] = 15967, + [SMALL_STATE(297)] = 15981, + [SMALL_STATE(298)] = 15995, + [SMALL_STATE(299)] = 16009, + [SMALL_STATE(300)] = 16019, + [SMALL_STATE(301)] = 16033, + [SMALL_STATE(302)] = 16042, + [SMALL_STATE(303)] = 16053, + [SMALL_STATE(304)] = 16064, + [SMALL_STATE(305)] = 16073, + [SMALL_STATE(306)] = 16084, + [SMALL_STATE(307)] = 16093, + [SMALL_STATE(308)] = 16104, + [SMALL_STATE(309)] = 16115, + [SMALL_STATE(310)] = 16124, + [SMALL_STATE(311)] = 16135, + [SMALL_STATE(312)] = 16146, + [SMALL_STATE(313)] = 16157, + [SMALL_STATE(314)] = 16166, + [SMALL_STATE(315)] = 16175, + [SMALL_STATE(316)] = 16186, + [SMALL_STATE(317)] = 16197, + [SMALL_STATE(318)] = 16208, + [SMALL_STATE(319)] = 16219, + [SMALL_STATE(320)] = 16230, + [SMALL_STATE(321)] = 16238, + [SMALL_STATE(322)] = 16246, + [SMALL_STATE(323)] = 16254, + [SMALL_STATE(324)] = 16262, + [SMALL_STATE(325)] = 16270, + [SMALL_STATE(326)] = 16278, + [SMALL_STATE(327)] = 16286, + [SMALL_STATE(328)] = 16294, + [SMALL_STATE(329)] = 16302, + [SMALL_STATE(330)] = 16310, + [SMALL_STATE(331)] = 16318, + [SMALL_STATE(332)] = 16326, + [SMALL_STATE(333)] = 16334, + [SMALL_STATE(334)] = 16342, + [SMALL_STATE(335)] = 16350, + [SMALL_STATE(336)] = 16358, + [SMALL_STATE(337)] = 16366, + [SMALL_STATE(338)] = 16374, + [SMALL_STATE(339)] = 16382, + [SMALL_STATE(340)] = 16390, }; 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 = false}}, SHIFT(76), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(72), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(332), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(331), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(333), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(84), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(336), [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(99), - [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(115), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(9), - [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(277), + [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(279), [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), - [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), - [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), - [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(313), - [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), - [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), - [47] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(76), - [50] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(93), - [53] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(82), - [56] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(72), - [59] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(332), - [62] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(331), - [65] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(333), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(129), + [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [47] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(84), + [50] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(120), + [53] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(78), + [56] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(75), + [59] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(325), + [62] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(327), + [65] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(336), [68] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(12), - [71] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(99), - [74] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(35), + [71] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(115), + [74] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(36), [77] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(9), - [80] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(277), + [80] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(279), [83] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), [86] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(4), [89] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [91] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(235), - [94] = {.entry = {.count = 1, .reusable = true}}, SHIFT(180), - [96] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), - [98] = {.entry = {.count = 1, .reusable = false}}, SHIFT(126), - [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70), - [104] = {.entry = {.count = 1, .reusable = false}}, SHIFT(273), - [106] = {.entry = {.count = 1, .reusable = false}}, SHIFT(135), - [108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), - [110] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), - [112] = {.entry = {.count = 1, .reusable = false}}, SHIFT(124), - [114] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [116] = {.entry = {.count = 1, .reusable = false}}, SHIFT(209), - [118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [91] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(230), + [94] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), + [96] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), + [98] = {.entry = {.count = 1, .reusable = false}}, SHIFT(130), + [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(73), + [104] = {.entry = {.count = 1, .reusable = false}}, SHIFT(286), + [106] = {.entry = {.count = 1, .reusable = false}}, SHIFT(134), + [108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), + [110] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), + [112] = {.entry = {.count = 1, .reusable = false}}, SHIFT(128), + [114] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [116] = {.entry = {.count = 1, .reusable = false}}, SHIFT(182), + [118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), [120] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), - [122] = {.entry = {.count = 1, .reusable = false}}, SHIFT(275), + [122] = {.entry = {.count = 1, .reusable = false}}, SHIFT(284), [124] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), [126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), - [128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(234), + [128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), [130] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), [132] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), [134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), [136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [138] = {.entry = {.count = 1, .reusable = false}}, SHIFT(90), - [140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [138] = {.entry = {.count = 1, .reusable = false}}, SHIFT(86), + [140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), [142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), [144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), [146] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(298), - [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 2, 0, 0), - [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), - [154] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 2, 0, 0), - [156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), - [158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), - [160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), - [162] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), - [164] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), - [166] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(324), - [169] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), - [171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [173] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(317), - [176] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 2, 0, 3), - [180] = {.entry = {.count = 1, .reusable = true}}, SHIFT(317), - [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 2, 0, 3), - [184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), - [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), - [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), - [190] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), + [148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(302), + [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), + [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(333), + [154] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), + [156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), + [158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), + [160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 2, 0, 0), + [162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(338), + [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 2, 0, 0), + [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 2, 0, 3), + [168] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 2, 0, 3), + [170] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), + [172] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(338), + [175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), + [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), + [179] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(333), + [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), + [184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), + [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), + [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 6), + [190] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 6), [192] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), - [198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 14), - [200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 14), - [202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 12), - [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 12), - [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 16), - [208] = {.entry = {.count = 1, .reusable = true}}, SHIFT(323), - [210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 16), - [212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), - [214] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 5), - [216] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 5), - [218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 6), - [220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 6), - [222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 5), - [224] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 5), + [198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 12), + [200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 12), + [202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 14), + [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 14), + [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 5), + [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 5), + [210] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 16), + [212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), + [214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 16), + [216] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), + [218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), + [220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), + [222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 5), + [224] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 5), [226] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 20), [228] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 20), - [230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [232] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [234] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [236] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [238] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 27), - [240] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 27), - [242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 13), - [244] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 13), - [246] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 6, 0, 28), - [248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [252] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), - [254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [258] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), - [260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), - [262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [264] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), - [266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [272] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 6, 0, 28), - [274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [276] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [278] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [280] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 7), - [284] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 7), - [286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 29), - [288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 29), - [290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 30), - [292] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 30), - [294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 26), - [296] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 26), - [298] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 4), - [300] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 4), - [302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), - [304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 10), - [306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 10), - [308] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 17), - [310] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 17), - [312] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 19), - [314] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 19), - [316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 21), - [322] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 21), - [324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 22), - [326] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 22), - [328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [330] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 23), - [334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 23), - [336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), + [230] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), + [236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [240] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), + [242] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), + [244] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), + [246] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), + [248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [250] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [252] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [254] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 4), + [256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [260] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 4), + [264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 13), + [266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 13), + [268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 10), + [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 10), + [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 7), + [274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 7), + [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 17), + [278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 17), + [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 19), + [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 19), + [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [290] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [294] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 21), + [298] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 21), + [300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 22), + [302] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 22), + [304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), + [310] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 26), + [312] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 26), + [314] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 23), + [316] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 23), + [318] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 6, 0, 28), + [320] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 6, 0, 28), + [322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 27), + [324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 27), + [326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [328] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [330] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 29), + [332] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 29), + [334] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 30), + [336] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 30), [338] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), - [340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), - [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), - [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), - [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), - [348] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(321), - [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(328), - [353] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(328), - [356] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), - [358] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), - [360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(320), - [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), - [366] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), - [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), - [372] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), - [374] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), - [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), - [378] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), - [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), - [384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(283), - [388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), - [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278), - [392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), - [396] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 25), - [398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), - [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), - [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), - [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), - [414] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 18), - [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), - [418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [340] = {.entry = {.count = 1, .reusable = false}}, SHIFT(29), + [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(312), + [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(330), + [348] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(335), + [351] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(330), + [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(335), + [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(315), + [358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), + [360] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), + [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), + [364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 25), + [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(326), + [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [376] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), + [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [382] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), + [384] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), + [386] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), + [388] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), + [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), + [394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(293), + [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245), + [402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [408] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 18), + [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), + [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [422] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), - [424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [424] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), [426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), - [428] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), - [430] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), - [432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [434] = {.entry = {.count = 1, .reusable = false}}, SHIFT(44), - [436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [430] = {.entry = {.count = 1, .reusable = false}}, SHIFT(74), + [432] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), + [434] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), + [436] = {.entry = {.count = 1, .reusable = false}}, SHIFT(44), + [438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), [440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [446] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), - [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(178), - [454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), - [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), - [458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(272), - [462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308), - [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), - [472] = {.entry = {.count = 1, .reusable = false}}, SHIFT(245), - [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), - [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), + [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [454] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(301), + [458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), + [464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), + [472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), [478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), - [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(318), - [482] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(318), - [485] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [487] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), - [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), - [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(302), - [493] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), - [495] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), - [497] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [499] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [501] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), - [503] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), - [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), - [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), - [509] = {.entry = {.count = 1, .reusable = false}}, SHIFT(223), - [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), - [513] = {.entry = {.count = 1, .reusable = false}}, SHIFT(233), - [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), - [517] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), - [519] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), - [521] = {.entry = {.count = 1, .reusable = false}}, SHIFT(230), - [523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), - [525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), - [527] = {.entry = {.count = 1, .reusable = false}}, SHIFT(226), - [529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), - [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), - [533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), - [535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), - [539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251), - [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), - [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), - [545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), - [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [549] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(307), - [552] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), - [556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(267), - [558] = {.entry = {.count = 1, .reusable = false}}, SHIFT(326), - [560] = {.entry = {.count = 1, .reusable = false}}, SHIFT(36), - [562] = {.entry = {.count = 1, .reusable = false}}, SHIFT(46), - [564] = {.entry = {.count = 1, .reusable = false}}, SHIFT(50), - [566] = {.entry = {.count = 1, .reusable = false}}, SHIFT(61), - [568] = {.entry = {.count = 1, .reusable = false}}, SHIFT(11), - [570] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), - [572] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(326), - [575] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), - [577] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), - [579] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [581] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), - [583] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), - [585] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), - [587] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), - [589] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 11), - [591] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), - [595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), - [597] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), - [599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), - [601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), - [603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), - [605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), - [607] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(309), - [610] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), - [614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254), - [616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), - [618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), - [620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), - [622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), - [624] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), - [628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), - [630] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), + [482] = {.entry = {.count = 1, .reusable = false}}, SHIFT(251), + [484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), + [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(337), + [488] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(337), + [491] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [493] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), + [499] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [501] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [503] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), + [505] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), + [507] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), + [509] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), + [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), + [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237), + [515] = {.entry = {.count = 1, .reusable = false}}, SHIFT(240), + [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), + [519] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), + [521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), + [523] = {.entry = {.count = 1, .reusable = false}}, SHIFT(235), + [525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), + [527] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), + [529] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), + [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(234), + [533] = {.entry = {.count = 1, .reusable = false}}, SHIFT(236), + [535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), + [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), + [539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(255), + [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), + [545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), + [549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), + [551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), + [555] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(303), + [558] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [560] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(323), + [563] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), + [565] = {.entry = {.count = 1, .reusable = false}}, SHIFT(323), + [567] = {.entry = {.count = 1, .reusable = false}}, SHIFT(11), + [569] = {.entry = {.count = 1, .reusable = false}}, SHIFT(64), + [571] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), + [573] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), + [575] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), + [577] = {.entry = {.count = 1, .reusable = false}}, SHIFT(52), + [579] = {.entry = {.count = 1, .reusable = false}}, SHIFT(37), + [581] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), + [583] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), + [585] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), + [587] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), + [589] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [591] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 11), + [593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(329), + [597] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), + [601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), + [603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), + [605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), + [607] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), + [609] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [611] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(319), + [614] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), + [618] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 24), + [620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [624] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [626] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), + [630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), [632] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [634] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [638] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 24), - [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [636] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254), + [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), [642] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), - [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(322), - [650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), - [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), - [660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), - [662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), - [664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), - [666] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), - [670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), - [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), - [678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [680] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), - [684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), + [644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), + [648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), + [650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), + [652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [658] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), + [666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), + [668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), + [670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), + [672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), + [680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), + [682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), [686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), - [688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), + [688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), + [690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [694] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), }; #ifdef __cplusplus From d07ddd084d69782cdab3cc4afed4cff204e9e8b9 Mon Sep 17 00:00:00 2001 From: James Carl Date: Thu, 8 Jan 2026 02:23:45 -0500 Subject: [PATCH 064/106] Add file type --- Cargo.lock | 17 ++-- crates/interpreter/Cargo.toml | 1 + crates/interpreter/src/execution/errors.rs | 4 +- .../src/execution/standard_environment.rs | 18 +++++ .../src/execution/values/closure.rs | 1 + .../interpreter/src/execution/values/file.rs | 80 +++++++++++++++++++ .../src/execution/values/integer.rs | 12 +-- .../interpreter/src/execution/values/list.rs | 4 +- .../interpreter/src/execution/values/mod.rs | 4 + .../src/execution/values/scalar.rs | 17 ++-- .../src/execution/values/value_type.rs | 4 +- .../src/execution/values/vector.rs | 25 ++++-- 12 files changed, 152 insertions(+), 35 deletions(-) create mode 100644 crates/interpreter/src/execution/values/file.rs diff --git a/Cargo.lock b/Cargo.lock index 548f9d7..d053f91 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1064,6 +1064,7 @@ dependencies = [ "paste", "pretty_assertions", "stack", + "tempfile", "tree-sitter", "tree-sitter-command-cad-model", "type-sitter", @@ -1153,9 +1154,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.171" +version = "0.2.179" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "c5a2d376baa530d1238d133232d15e239abad80d05838b4b59354e5268af431f" [[package]] name = "libgit2-sys" @@ -1215,9 +1216,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.9.3" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" @@ -1873,9 +1874,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.5" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags", "errno", @@ -2142,9 +2143,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.19.1" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand", "getrandom", diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index 99b1c8f..48a5a2b 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -20,6 +20,7 @@ imstr = "0.2.0" nalgebra = "0.34.1" stack = "0.4.0" paste = "1.0.15" +tempfile = "3.24.0" [build-dependencies] type-sitter-gen = "0.8" diff --git a/crates/interpreter/src/execution/errors.rs b/crates/interpreter/src/execution/errors.rs index 0ed2660..aa178fe 100644 --- a/crates/interpreter/src/execution/errors.rs +++ b/crates/interpreter/src/execution/errors.rs @@ -16,7 +16,7 @@ * program. If not, see . */ -use std::{any::Any, fmt::Display}; +use std::{any::Any, borrow::Cow, fmt::Display}; use crate::compile::SourceReference; @@ -42,7 +42,7 @@ impl Display for Error { /// A generic error that will just display a static message. #[derive(Debug, Eq, PartialEq)] -pub struct GenericFailure(pub &'static str); +pub struct GenericFailure(pub Cow<'static, str>); impl ErrorType for GenericFailure {} diff --git a/crates/interpreter/src/execution/standard_environment.rs b/crates/interpreter/src/execution/standard_environment.rs index 4b0db7f..569c32f 100644 --- a/crates/interpreter/src/execution/standard_environment.rs +++ b/crates/interpreter/src/execution/standard_environment.rs @@ -1,3 +1,21 @@ +/* + * Copyright 2026 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + use std::collections::HashMap; use common_data_types::{Dimension, Float}; diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index b33d0fa..e502a12 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -49,6 +49,7 @@ impl BuiltinCallableDatabase { super::vector::register_methods(&mut database); super::value_type::register_methods(&mut database); super::list::register_methods(&mut database); + super::file::register_methods(&mut database); database } diff --git a/crates/interpreter/src/execution/values/file.rs b/crates/interpreter/src/execution/values/file.rs new file mode 100644 index 0000000..e10bd25 --- /dev/null +++ b/crates/interpreter/src/execution/values/file.rs @@ -0,0 +1,80 @@ +/* + * Copyright 2026 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use std::{borrow::Cow, io::Read, path::Path, sync::Arc}; + +use imstr::ImString; +use tempfile::NamedTempFile; + +use crate::{ + build_method, + execution::{ + errors::{GenericFailure, Raise as _}, + values::{BuiltinCallableDatabase, IString, Object, StaticTypeName, ValueType}, + ExpressionResult, RuntimeLog, SourceReference, Stack, + }, +}; + +#[derive(Debug, Clone)] +pub struct File { + content: Arc, +} + +impl Eq for File {} + +impl PartialEq for File { + fn eq(&self, other: &Self) -> bool { + self.content.path() == other.content.path() + } +} + +impl Object for File { + fn get_type(&self, _database: &BuiltinCallableDatabase) -> ValueType { + ValueType::File + } +} + +impl StaticTypeName for File { + fn static_type_name() -> Cow<'static, str> { + "File".into() + } +} + +mod methods { + pub struct ToString; +} + +pub fn register_methods(database: &mut BuiltinCallableDatabase) { + build_method!( + database, + forward = methods::ToString, "File::to_string", ( + _log: &mut dyn RuntimeLog, + stack_trace: &mut Vec, + _stack: &mut Stack, + _database: &BuiltinCallableDatabase, + this: File + ) -> IString { + let mut file = this.content.reopen().map_err(|error| GenericFailure(format!("Failed to re-open file: {error:?}").into()).to_error(stack_trace.iter()))?; + + let mut content = String::new(); + file.read_to_string(&mut content).map_err(|error| GenericFailure(format!("File was not UTF8 encoded: {error:?}").into()).to_error(stack_trace.iter()))?; + + Ok(IString(ImString::from(content))) + } + ); +} diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index abaa2d0..1ae241f 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -112,7 +112,7 @@ where let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self(self.0.checked_add(&rhs.0).ok_or_else(|| { GenericFailure( - "Integer overflow: The computed value is too large to store in the integer", + "Integer overflow: The computed value is too large to store in the integer".into(), ) .to_error(stack_trace) })?) @@ -128,7 +128,7 @@ where let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self(self.0.checked_sub(&rhs.0).ok_or_else(|| { GenericFailure( - "Integer underflow: The computed value is too small to store in the integer", + "Integer underflow: The computed value is too small to store in the integer".into(), ) .to_error(stack_trace) })?) @@ -144,7 +144,7 @@ where let rhs: &Self = rhs.downcast_ref(stack_trace)?; Ok(Self(self.0.checked_mul(&rhs.0).ok_or_else(|| { GenericFailure( - "Integer overflow: The computed value is too large to store in the integer", + "Integer overflow: The computed value is too large to store in the integer".into(), ) .to_error(stack_trace) })?) @@ -161,7 +161,7 @@ where Ok(Self( self.0 .checked_div(&rhs.0) - .ok_or_else(|| GenericFailure("The computed value is either too large to store in the integer or you attempted to divide by zero").to_error(stack_trace))?, + .ok_or_else(|| GenericFailure("The computed value is either too large to store in the integer or you attempted to divide by zero".into()).to_error(stack_trace))?, ) .into()) } @@ -177,14 +177,14 @@ where // This failure can only happen on 32bit (or less) systems. let rhs = rhs.0.to_usize().ok_or_else(|| { GenericFailure( - "Integer overflow: The requested exponent is larger than the host machine word size", + "Integer overflow: The requested exponent is larger than the host machine word size".into(), ) .to_error(stack_trace) })?; Ok(Self(checked_pow(self.0, rhs).ok_or_else(|| { GenericFailure( - "Integer overflow: The computed value is too large to store in the integer", + "Integer overflow: The computed value is too large to store in the integer".into(), ) .to_error(stack_trace) })?) diff --git a/crates/interpreter/src/execution/values/list.rs b/crates/interpreter/src/execution/values/list.rs index 449f42f..28b7456 100644 --- a/crates/interpreter/src/execution/values/list.rs +++ b/crates/interpreter/src/execution/values/list.rs @@ -500,7 +500,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { if let Some(slice) = slice { Ok(List::from_iter(database, slice.into_iter().cloned())) } else { - Err(GenericFailure("Slice out of range").to_error(stack_trace.iter())) + Err(GenericFailure("Slice out of range".into()).to_error(stack_trace.iter())) } } ); @@ -519,7 +519,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { if let Some(slice) = slice { Ok(slice.clone()) } else { - Err(GenericFailure("Index out of range").to_error(stack_trace.iter())) + Err(GenericFailure("Index out of range".into()).to_error(stack_trace.iter())) } } ); diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index 5eb1fb7..f1b931f 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -56,6 +56,9 @@ pub use list::List; mod string; pub use string::IString; +mod file; +pub use file::File; + mod value_type; pub use value_type::{StructDefinition, StructMember, ValueType}; @@ -390,6 +393,7 @@ pub enum Value { Vector2(Vector2), Vector3(Vector3), Vector4(Vector4), + File, // Quaternion, } diff --git a/crates/interpreter/src/execution/values/scalar.rs b/crates/interpreter/src/execution/values/scalar.rs index ade8a7e..697c939 100644 --- a/crates/interpreter/src/execution/values/scalar.rs +++ b/crates/interpreter/src/execution/values/scalar.rs @@ -43,9 +43,10 @@ impl UnwrapNotNan for std::result::Result { fn unwrap_not_nan(self, stack_trace: &[SourceReference]) -> ExpressionResult { match self { Ok(number) => Ok(number), - Err(_float_is_nan) => { - Err(GenericFailure("Result of arithmetic operation is NaN").to_error(stack_trace)) - } + Err(_float_is_nan) => Err(GenericFailure( + "Result of arithmetic operation is NaN".into(), + ) + .to_error(stack_trace)), } } } @@ -399,7 +400,7 @@ impl Scalar { if self.dimension.is_zero_dimension() { Ok(()) } else { - Err(GenericFailure("Inverse trigonometric functions can only be used with zero dimensional types (Angles, Ratios)").to_error(stack_trace)) + Err(GenericFailure("Inverse trigonometric functions can only be used with zero dimensional types (Angles, Ratios)".into()).to_error(stack_trace)) } } @@ -408,7 +409,7 @@ impl Scalar { Ok(()) } else { Err( - GenericFailure("Trigonometric functions can only be used with angles") + GenericFailure("Trigonometric functions can only be used with angles".into()) .to_error(stack_trace), ) } @@ -491,7 +492,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { if this.dimension.is_zero_dimension() { Ok(values::SignedInteger::from(*this.value as i64).into()) } else { - Err(GenericFailure("Only zero dimensional scalars can be converted into an integer") + Err(GenericFailure("Only zero dimensional scalars can be converted into an integer".into()) .to_error(stack_trace.iter())) } } @@ -509,11 +510,11 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { if *this.value >= 0.0 { Ok(values::UnsignedInteger::from(*this.value as u64).into()) } else { - Err(GenericFailure("Negative values cannot be converted to signed integers") + Err(GenericFailure("Negative values cannot be converted to signed integers".into()) .to_error(stack_trace.iter())) } } else { - Err(GenericFailure("Only zero dimensional scalars can be converted into an integer") + Err(GenericFailure("Only zero dimensional scalars can be converted into an integer".into()) .to_error(stack_trace.iter())) } } diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 47bc35a..ad783c3 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -35,7 +35,7 @@ use crate::{ stack::Stack, values::{ self, closure::BuiltinCallableDatabase, dictionary::DictionaryData, BuiltinFunction, - Dictionary, IString, MissingAttributeError, + Dictionary, File, IString, MissingAttributeError, }, }, }; @@ -56,6 +56,7 @@ pub enum ValueType { Vector3(Option), Vector4(Option), MultiType(Box, Box), + File, Any, } @@ -87,6 +88,7 @@ impl ValueType { Self::Vector3(Option::None) => "Vector3".into(), Self::Vector4(Option::None) => "Vector4".into(), Self::String => IString::static_type_name().into(), + Self::File => File::static_type_name().into(), _ => format!("{}", self).into(), } } diff --git a/crates/interpreter/src/execution/values/vector.rs b/crates/interpreter/src/execution/values/vector.rs index bb8e188..c52570c 100644 --- a/crates/interpreter/src/execution/values/vector.rs +++ b/crates/interpreter/src/execution/values/vector.rs @@ -226,7 +226,10 @@ where if !value.is_nan() { Ok(Self { dimension, value }) } else { - Err(GenericFailure("Result of arithmetic operation is NaN").to_error(stack_trace)) + Err( + GenericFailure("Result of arithmetic operation is NaN".into()) + .to_error(stack_trace), + ) } } @@ -509,7 +512,7 @@ mod methods { for component in result.iter() { if component.dimension != dimension { - return Err(GenericFailure("All components of a vector must match") + return Err(GenericFailure("All components of a vector must match".into()) .to_error(stack_trace.iter())); } } @@ -684,8 +687,10 @@ impl VectorInternalType for nalgebra::Vector2 { value: Self::new(*x.value, *y.value), }) } else { - Err(GenericFailure("All components of a vector must match") - .to_error(stack_trace.iter())) + Err( + GenericFailure("All components of a vector must match".into()) + .to_error(stack_trace.iter()), + ) } } @@ -800,8 +805,10 @@ impl VectorInternalType for nalgebra::Vector3 { value: Self::new(*x.value, *y.value, *z.value), }) } else { - Err(GenericFailure("All components of a vector must match") - .to_error(stack_trace.iter())) + Err( + GenericFailure("All components of a vector must match".into()) + .to_error(stack_trace.iter()), + ) } } @@ -925,8 +932,10 @@ impl VectorInternalType for nalgebra::Vector4 { value: Self::new(*x.value, *y.value, *z.value, *w.value), }) } else { - Err(GenericFailure("All components of a vector must match") - .to_error(stack_trace.iter())) + Err( + GenericFailure("All components of a vector must match".into()) + .to_error(stack_trace.iter()), + ) } } From a827252efa883db5d8112ac1b4bed1d6c3a5c7e5 Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 9 Jan 2026 11:24:10 -0500 Subject: [PATCH 065/106] Unified runtime context --- Cargo.lock | 17 +- crates/interpreter/Cargo.toml | 1 - crates/interpreter/src/compile/expressions.rs | 29 +- crates/interpreter/src/compile/mod.rs | 5 +- crates/interpreter/src/execution/logging.rs | 124 ++++- crates/interpreter/src/execution/mod.rs | 439 ++++++++-------- crates/interpreter/src/execution/stack.rs | 189 ++++--- .../src/execution/standard_environment.rs | 57 +- .../src/execution/values/boolean.rs | 57 +- .../src/execution/values/closure.rs | 459 +++++++--------- .../src/execution/values/dictionary.rs | 83 +-- .../interpreter/src/execution/values/file.rs | 15 +- .../src/execution/values/integer.rs | 324 ++++-------- .../interpreter/src/execution/values/list.rs | 494 +++++++----------- .../interpreter/src/execution/values/mod.rs | 251 +++------ .../src/execution/values/scalar.rs | 414 +++++---------- .../src/execution/values/string.rs | 41 +- .../src/execution/values/value_type.rs | 163 +++--- .../src/execution/values/vector.rs | 338 +++++------- .../interpreter/src/execution/values/void.rs | 4 +- 20 files changed, 1432 insertions(+), 2072 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d053f91..6499b96 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -302,7 +302,7 @@ dependencies = [ "casey", "clap", "common_data_types", - "compact_str 0.7.1", + "compact_str", "const-str", "csv", "enum_dispatch", @@ -355,20 +355,6 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "compact_str" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a" -dependencies = [ - "castaway", - "cfg-if", - "itoa", - "rustversion", - "ryu", - "static_assertions", -] - [[package]] name = "const-str" version = "0.5.7" @@ -1053,7 +1039,6 @@ name = "interpreter" version = "0.1.0" dependencies = [ "common_data_types", - "compact_str 0.9.0", "enum_dispatch", "enum_downcast", "file-guard", diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index 48a5a2b..b8a3010 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -13,7 +13,6 @@ unwrap-enum = "0.1.0" file-guard = "0.2.0" enum_dispatch = "0.3" enum_downcast = { version = "0.1", features = [ "derive" ] } -compact_str = "0.9" num-traits = "0.2" hashable-map = "0.4.0" imstr = "0.2.0" diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 0976868..b3c8426 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -1,6 +1,7 @@ use std::{path::PathBuf, sync::Arc}; use common_data_types::{ConversionFactor, Dimension, Float, RawFloat}; +use imstr::ImString; use nodes::SourceFile; use tree_sitter::Range; use type_sitter::{HasChild, Node}; @@ -638,7 +639,7 @@ impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for BinaryExpression { #[derive(Debug, Hash, Eq, PartialEq)] pub struct IdentityPath { - pub path: Vec>, + pub path: Vec>, } impl<'t> Parse<'t, nodes::IdentityPath<'t>> for IdentityPath { @@ -652,7 +653,7 @@ impl<'t> Parse<'t, nodes::IdentityPath<'t>> for IdentityPath { for ident in value.identifiers(&mut cursor) { let ident = ident?; - let text = String::parse(file, input, ident)?; + let text = ImString::parse(file, input, ident)?; path.push(text); } @@ -663,7 +664,7 @@ impl<'t> Parse<'t, nodes::IdentityPath<'t>> for IdentityPath { #[derive(Debug, Hash, Eq, PartialEq)] pub struct SelfPath { - pub path: Vec>, + pub path: Vec>, } impl<'t> Parse<'t, nodes::SelfPath<'t>> for SelfPath { @@ -677,7 +678,7 @@ impl<'t> Parse<'t, nodes::SelfPath<'t>> for SelfPath { let mut cursor = value.walk(); for ident in value.identifiers(&mut cursor) { let ident = ident?; - let text = String::parse(file, input, ident)?; + let text = ImString::parse(file, input, ident)?; path.push(text); } @@ -882,7 +883,7 @@ impl<'t> Parse<'t, nodes::If<'t>> for IfExpression { #[derive(Debug, Hash, Eq, PartialEq)] pub struct DictionaryMemberAssignment { - pub name: AstNode, + pub name: AstNode, pub assignment: AstNode, } @@ -893,7 +894,7 @@ impl<'t> Parse<'t, nodes::DictionaryMemberAssignment<'t>> for DictionaryMemberAs value: nodes::DictionaryMemberAssignment<'t>, ) -> Result, Error<'t, 'i>> { let name = value.name()?; - let name = String::parse(file, input, name)?; + let name = ImString::parse(file, input, name)?; let assignment = Expression::parse(file, input, value.assignment()?)?; Ok(AstNode::new(file, &value, Self { name, assignment })) @@ -970,7 +971,7 @@ impl<'t> Parse<'t, nodes::ClosureDefinition<'t>> for ClosureDefinition { #[derive(Debug, Hash, Eq, PartialEq)] pub struct StructMember { - pub name: AstNode, + pub name: AstNode, pub ty: AstNode, pub default: Option>, } @@ -982,7 +983,7 @@ impl<'t> Parse<'t, nodes::StructMember<'t>> for StructMember { value: nodes::StructMember<'t>, ) -> Result, Error<'t, 'i>> { let name = value.name()?; - let name = String::parse(file, input, name)?; + let name = ImString::parse(file, input, name)?; let ty = value.declaration_type()?.expression()?; let ty = Expression::parse(file, input, ty)?; @@ -1067,7 +1068,7 @@ impl<'t> Parse<'t, nodes::FunctionCall<'t>> for FunctionCall { #[derive(Debug, Hash, Eq, PartialEq)] pub struct MethodCall { pub self_dictionary: AstNode, - pub to_call: AstNode, + pub to_call: AstNode, pub argument: AstNode, } @@ -1078,7 +1079,7 @@ impl<'t> Parse<'t, nodes::MethodCall<'t>> for MethodCall { value: nodes::MethodCall<'t>, ) -> Result, Error<'t, 'i>> { let self_dictionary = Expression::parse(file, input, value.self_dictionary()?)?; - let to_call = String::parse(file, input, value.to_call()?)?; + let to_call = ImString::parse(file, input, value.to_call()?)?; let argument = DictionaryConstruction::parse(file, input, value.argument()?)?; Ok(AstNode::new( @@ -1095,7 +1096,7 @@ impl<'t> Parse<'t, nodes::MethodCall<'t>> for MethodCall { #[derive(Debug, Hash, Eq, PartialEq)] pub struct LetInAssignment { - pub ident: AstNode, + pub ident: AstNode, pub value: AstNode, } @@ -1105,7 +1106,7 @@ impl<'t> Parse<'t, nodes::LetInAssignment<'t>> for LetInAssignment { input: &'i str, node: nodes::LetInAssignment<'t>, ) -> Result, Error<'t, 'i>> { - let ident = String::parse(file, input, node.ident()?)?; + let ident = ImString::parse(file, input, node.ident()?)?; let value = Expression::parse(file, input, node.value()?)?; @@ -1317,7 +1318,7 @@ mod test { a.node.name, AstNode { reference: a.node.name.reference.clone(), - node: "a".to_string() + node: "a".into() } ); assert_eq!( @@ -1335,7 +1336,7 @@ mod test { b.node.name, AstNode { reference: b.node.name.reference.clone(), - node: "b".to_string() + node: "b".into() } ); assert_eq!( diff --git a/crates/interpreter/src/compile/mod.rs b/crates/interpreter/src/compile/mod.rs index 8547c37..386727f 100644 --- a/crates/interpreter/src/compile/mod.rs +++ b/crates/interpreter/src/compile/mod.rs @@ -1,5 +1,6 @@ mod expressions; +use imstr::ImString; use std::{path::PathBuf, sync::Arc}; use type_sitter::{IncorrectKind, Node}; @@ -42,14 +43,14 @@ trait Parse<'t, N: 't>: Sized { ) -> Result, Error<'t, 'i>>; } -impl<'t, N: Node<'t> + 't> Parse<'t, N> for String { +impl<'t, N: Node<'t> + 't> Parse<'t, N> for ImString { fn parse<'i>( file: &Arc, input: &'i str, value: N, ) -> Result, Error<'t, 'i>> { let text = &input[value.byte_range()]; - Ok(AstNode::new(file, &value, text.to_string())) + Ok(AstNode::new(file, &value, ImString::from(text.to_string()))) } } diff --git a/crates/interpreter/src/execution/logging.rs b/crates/interpreter/src/execution/logging.rs index ebc8a6b..e15fe3c 100644 --- a/crates/interpreter/src/execution/logging.rs +++ b/crates/interpreter/src/execution/logging.rs @@ -20,38 +20,126 @@ use std::{ borrow::Cow, fmt::Display, ops::{Deref, DerefMut}, + path::PathBuf, + sync::{Arc, Mutex}, }; +use tree_sitter::{Point, Range}; use crate::compile::SourceReference; -pub trait RuntimeLog { - fn push_message(&mut self, message: LogMessage); +pub trait RuntimeLog: std::fmt::Debug { + fn push_message(&self, message: LogMessage); } -impl RuntimeLog for Vec { - fn push_message(&mut self, message: LogMessage) { - self.push(message); +impl RuntimeLog for Mutex> { + fn push_message(&self, message: LogMessage) { + self.lock().expect("Log was poisoned").push(message); } } -/// Makes for a stack scope that will not forget to pop if you break out early -/// in some way. -pub trait StackScope { - fn stack_scope(&mut self, point: impl Into, code: F) -> R - where - F: FnOnce(&mut Self) -> R; +#[derive(Debug, Clone)] +pub struct StackTrace<'p> { + parent: Option<&'p StackTrace<'p>>, + reference: SourceReference, +} + +impl<'p> Display for StackTrace<'p> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + if let Some(parent) = self.parent { + write!(f, "{parent}")?; + } + + writeln!(f, "{}", self.reference) + } +} + +impl StackTrace<'static> { + pub fn top(reference: SourceReference) -> Self { + Self { + parent: None, + reference, + } + } + + /// A special stack trace for building the prelude + pub fn bootstrap() -> Self { + Self { + parent: None, + reference: SourceReference { + file: Arc::new(PathBuf::from("bootstrap.ccm")), + range: Range { + start_byte: 0, + end_byte: 0, + start_point: Point { row: 0, column: 0 }, + end_point: Point { row: 0, column: 0 }, + }, + }, + } + } + + #[cfg(test)] + pub(crate) fn test() -> Self { + Self { + parent: None, + reference: SourceReference { + file: Arc::new(PathBuf::from("test.ccm")), + range: Range { + start_byte: 0, + end_byte: 0, + start_point: Point { row: 0, column: 0 }, + end_point: Point { row: 0, column: 0 }, + }, + }, + } + } } -impl StackScope for Vec { - fn stack_scope(&mut self, point: impl Into, code: F) -> R +impl<'p> StackTrace<'p> { + pub fn trace_scope(&'p self, reference: impl Into, code: F) -> R where - F: FnOnce(&mut Self) -> R, + F: FnOnce(StackTrace<'p>) -> R, { - self.push(point.into()); - let result = code(self); - self.pop(); + let scope = Self { + parent: Some(self), + reference: reference.into(), + }; + + code(scope) + } + + pub fn bottom(&self) -> &SourceReference { + &self.reference + } + + pub fn iter(&'p self) -> StackTraceIter<'p> { + StackTraceIter { + current: Some(self), + } + } +} + +impl<'p> IntoIterator for &'p StackTrace<'p> { + type Item = &'p SourceReference; + type IntoIter = StackTraceIter<'p>; + + fn into_iter(self) -> Self::IntoIter { + self.iter() + } +} - result +pub struct StackTraceIter<'p> { + current: Option<&'p StackTrace<'p>>, +} + +impl<'p> Iterator for StackTraceIter<'p> { + type Item = &'p SourceReference; + + fn next(&mut self) -> Option { + let next = self.current.take(); + if let Some(next) = next { + self.current = next.parent; + } + next.map(|next| &next.reference) } } diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index b92b911..ee1fa3b 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -16,13 +16,16 @@ * program. If not, see . */ -use std::cmp::Ordering; +use std::{cmp::Ordering, collections::HashMap}; use crate::{ compile::{ self, AstNode, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation, }, - execution::{stack::ScopeType, values::BuiltinCallableDatabase}, + execution::{ + stack::{ScopeType, StackScope}, + values::BuiltinCallableDatabase, + }, }; mod errors; @@ -32,37 +35,29 @@ mod stack; mod standard_environment; pub mod values; use errors::ExpressionResult; -use logging::{LocatedStr, RuntimeLog, StackScope}; -use stack::Stack; +use imstr::ImString; +use logging::{LocatedStr, RuntimeLog, StackTrace}; use values::{Object, Value, ValueType}; pub use standard_environment::build_prelude; pub fn find_value<'p, 's>( - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - stack: &'s mut Stack, - database: &BuiltinCallableDatabase, - path_iter: impl IntoIterator>, + context: &ExecutionContext, + path_iter: impl IntoIterator>, ) -> ExpressionResult { let mut path_iter = path_iter.into_iter().peekable(); let root = path_iter.next().expect("Path is empty"); - let stack_value = stack.get_variable( - stack_trace, - LocatedStr { - location: root.reference.clone(), - string: &root.node, - }, - )?; + let stack_value = context.get_variable(LocatedStr { + location: root.reference.clone(), + string: &root.node, + })?; if let Some(sub_path) = path_iter.next() { // We need the value off the heap. let mut value = stack_value.get_attribute( - log, - stack_trace, - database, + context, &LocatedStr { location: sub_path.reference.clone(), string: &sub_path.node, @@ -76,9 +71,7 @@ pub fn find_value<'p, 's>( // last one needs to be a mutable borrow. let final_value = value.get_attribute( - log, - stack_trace, - database, + context, &LocatedStr { location: sub_path.reference.clone(), string: &sub_path.node, @@ -88,9 +81,7 @@ pub fn find_value<'p, 's>( return Ok(final_value.clone()); } else { value = value.get_attribute( - log, - stack_trace, - database, + context, &LocatedStr { location: sub_path.reference.clone(), string: &sub_path.node, @@ -106,49 +97,90 @@ pub fn find_value<'p, 's>( } } +#[derive(Debug)] +pub struct ExecutionContext<'c> { + pub log: &'c dyn RuntimeLog, + pub stack_trace: &'c StackTrace<'c>, + pub stack: &'c StackScope<'c>, + pub database: &'c BuiltinCallableDatabase, +} + +impl<'c> ExecutionContext<'c> { + pub fn trace_scope(&'c self, reference: impl Into, code: F) -> R + where + F: FnOnce(&ExecutionContext<'_>) -> R, + { + self.stack_trace.trace_scope(reference, move |stack_trace| { + let context = ExecutionContext { + log: self.log, + stack_trace: &stack_trace, + stack: self.stack, + database: self.database, + }; + + code(&context) + }) + } + + pub fn get_variable<'s, S: Into>>(&self, name: S) -> ExpressionResult<&Value> { + self.stack.get_variable(self.stack_trace, name) + } + + pub fn stack_scope( + &self, + mode: ScopeType, + variables: HashMap, + block: B, + ) -> ExpressionResult + where + B: FnOnce(&ExecutionContext) -> R, + { + self.stack + .scope(self.stack_trace, mode, variables, |stack, stack_trace| { + let context = ExecutionContext { + log: self.log, + stack_trace: &stack_trace, + stack: &stack, + database: self.database, + }; + + block(&context) + }) + } +} + pub fn execute_expression( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, expression: &compile::AstNode, ) -> ExpressionResult { - stack_trace.stack_scope( - expression.reference.clone(), - |stack_trace| match &expression.node { + context.trace_scope(expression.reference.clone(), |context| { + match &expression.node { compile::Expression::BinaryExpression(ast_node) => { - execute_binary_expression(log, stack_trace, stack, database, ast_node) + execute_binary_expression(context, ast_node) } compile::Expression::Boolean(ast_node) => Ok(values::Boolean(ast_node.node).into()), compile::Expression::ClosureDefinition(ast_node) => { - Ok( - values::UserClosure::from_ast(log, stack_trace, stack, database, ast_node)? - .into(), - ) + Ok(values::UserClosure::from_ast(context, ast_node)?.into()) } - compile::Expression::DictionaryConstruction(ast_node) => Ok( - values::Dictionary::from_ast(log, stack_trace, stack, database, ast_node)?.into(), - ), - compile::Expression::If(ast_node) => { - execute_if_expression(log, stack_trace, stack, database, ast_node) + compile::Expression::DictionaryConstruction(ast_node) => { + Ok(values::Dictionary::from_ast(context, ast_node)?.into()) } + compile::Expression::If(ast_node) => execute_if_expression(context, ast_node), compile::Expression::List(ast_node) => { - Ok(values::List::from_ast(log, stack_trace, stack, database, ast_node)?.into()) - } - compile::Expression::Parenthesis(ast_node) => { - execute_expression(log, stack_trace, stack, database, &ast_node) + Ok(values::List::from_ast(context, ast_node)?.into()) } + compile::Expression::Parenthesis(ast_node) => execute_expression(context, &ast_node), compile::Expression::IdentityPath(ast_node) => { let path_iter = ast_node.node.path.iter(); - Ok(find_value(log, stack_trace, stack, database, path_iter)?) + Ok(find_value(context, path_iter)?) } compile::Expression::SelfPath(ast_node) => { let self_code = AstNode { reference: ast_node.reference.clone(), - node: String::from("self"), + node: ImString::from("self"), }; let path_iter = [&self_code].into_iter().chain(ast_node.node.path.iter()); - Ok(find_value(log, stack_trace, stack, database, path_iter)?) + Ok(find_value(context, path_iter)?) } compile::Expression::Scalar(ast_node) => Ok(values::Scalar { @@ -157,13 +189,13 @@ pub fn execute_expression( } .into()), compile::Expression::Vector2(vector) => { - Ok(values::Vector2::from_ast(log, stack_trace, stack, database, vector)?.into()) + Ok(values::Vector2::from_ast(context, vector)?.into()) } compile::Expression::Vector3(vector) => { - Ok(values::Vector3::from_ast(log, stack_trace, stack, database, vector)?.into()) + Ok(values::Vector3::from_ast(context, vector)?.into()) } compile::Expression::Vector4(vector) => { - Ok(values::Vector4::from_ast(log, stack_trace, stack, database, vector)?.into()) + Ok(values::Vector4::from_ast(context, vector)?.into()) } compile::Expression::SignedInteger(ast_node) => { Ok(values::SignedInteger::from(ast_node.node).into()) @@ -171,215 +203,171 @@ pub fn execute_expression( compile::Expression::String(ast_node) => { Ok(values::IString::from(ast_node.node.clone()).into()) } - compile::Expression::StructDefinition(ast_node) => Ok(ValueType::from( - values::StructDefinition::new(log, stack_trace, stack, database, ast_node)?, - ) - .into()), + compile::Expression::StructDefinition(ast_node) => { + Ok(ValueType::from(values::StructDefinition::new(context, ast_node)?).into()) + } compile::Expression::UnaryExpression(ast_node) => { - execute_unary_expression(log, stack_trace, stack, database, ast_node) + execute_unary_expression(context, ast_node) } compile::Expression::UnsignedInteger(ast_node) => { Ok(values::UnsignedInteger::from(ast_node.node).into()) } - compile::Expression::FunctionCall(ast_node) => { - execute_function_call(log, stack_trace, stack, database, ast_node) - } - compile::Expression::MethodCall(ast_node) => { - execute_method_call(log, stack_trace, stack, database, ast_node) - } - compile::Expression::LetIn(ast_node) => { - execute_let_in(log, stack_trace, stack, database, ast_node) - } - }, - ) + compile::Expression::FunctionCall(ast_node) => execute_function_call(context, ast_node), + compile::Expression::MethodCall(ast_node) => execute_method_call(context, ast_node), + compile::Expression::LetIn(ast_node) => execute_let_in(context, ast_node), + } + }) } fn execute_unary_expression( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, expression: &compile::AstNode>, ) -> ExpressionResult { - stack_trace.stack_scope(expression.reference.clone(), |stack_trace| { + context.trace_scope(expression.reference.clone(), |context| { let node = &expression.node; - let value = execute_expression(log, stack_trace, stack, database, &node.expression)?; + let value = execute_expression(context, &node.expression)?; match node.operation.node { - UnaryExpressionOperation::Add => value.unary_plus(log, stack_trace, database), - UnaryExpressionOperation::Sub => value.unary_minus(log, stack_trace, database), - UnaryExpressionOperation::Not => value.unary_not(log, stack_trace, database), + UnaryExpressionOperation::Add => value.unary_plus(context), + UnaryExpressionOperation::Sub => value.unary_minus(context), + UnaryExpressionOperation::Not => value.unary_not(context), } }) } fn execute_function_call( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, call: &compile::AstNode>, ) -> ExpressionResult { - let to_call = execute_expression(log, stack_trace, stack, database, &call.node.to_call)?; - let argument = - values::Dictionary::from_ast(log, stack_trace, stack, database, &call.node.argument)?; + let to_call = execute_expression(context, &call.node.to_call)?; + let argument = values::Dictionary::from_ast(context, &call.node.argument)?; - stack.scope(stack_trace, ScopeType::Isolated, |stack, stack_trace| { - to_call.call(log, stack_trace, stack, database, argument) + context.stack_scope(ScopeType::Isolated, HashMap::new(), |context| { + to_call.call(context, argument) })? } fn execute_method_call( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, call: &compile::AstNode>, ) -> ExpressionResult { - let self_dictionary = execute_expression( - log, - stack_trace, - stack, - database, - &call.node.self_dictionary, - )?; + let self_dictionary = execute_expression(context, &call.node.self_dictionary)?; let to_call = self_dictionary - .get_attribute(log, stack_trace, database, &call.node.to_call.node)? + .get_attribute(context, &call.node.to_call.node)? .clone(); - let argument = - values::Dictionary::from_ast(log, stack_trace, stack, database, &call.node.argument)?; + let argument = values::Dictionary::from_ast(context, &call.node.argument)?; - stack.scope(stack_trace, ScopeType::Isolated, |stack, stack_trace| { - stack.insert_value("self", self_dictionary); - - to_call.call(log, stack_trace, stack, database, argument) - })? + context.stack_scope( + ScopeType::Isolated, + HashMap::from_iter([(ImString::from("self"), self_dictionary.into())]), + |context| to_call.call(context, argument), + )? } fn execute_let_in( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, expression: &compile::AstNode>, ) -> ExpressionResult { - stack_trace.stack_scope(expression.reference.clone(), |stack_trace| { - for assignment in expression.node.assignments.iter() { - let value = - execute_expression(log, stack_trace, stack, database, &assignment.node.value)?; - stack.insert_value(assignment.node.ident.node.clone(), value); - } + context.trace_scope(expression.reference.clone(), |context| { + context.stack.scope_mut( + context.stack_trace, + ScopeType::Inherited, + HashMap::with_capacity(expression.node.assignments.len()), + |stack, stack_trace| { + for assignment in expression.node.assignments.iter() { + let context = ExecutionContext { + log: context.log, + stack_trace, + stack, + database: context.database, + }; + + let value = execute_expression(&context, &assignment.node.value)?; + stack.insert_value(assignment.node.ident.node.clone(), value); + } - let node = &expression.node; - execute_expression(log, stack_trace, stack, database, &node.expression) + let context = ExecutionContext { + log: context.log, + stack_trace, + stack, + database: context.database, + }; + + let node = &expression.node; + execute_expression(&context, &node.expression) + }, + )? }) } fn execute_binary_expression( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, expression: &compile::AstNode>, ) -> ExpressionResult { - stack_trace.stack_scope( - expression.reference.clone(), - |stack_trace: &mut Vec| { - let node = &expression.node; - let value_a = execute_expression(log, stack_trace, stack, database, &node.a)?; - let value_b = execute_expression(log, stack_trace, stack, database, &node.b)?; - match node.operation.node { - BinaryExpressionOperation::NotEq => Ok(values::Boolean( - !value_a - .clone() - .cmp(log, stack_trace, database, value_b.clone()) - .map(|ord| matches!(ord, Ordering::Equal)) - .or_else(|_| value_a.eq(log, stack_trace, database, value_b))?, - ) - .into()), - BinaryExpressionOperation::And => { - value_a.bit_and(log, stack_trace, database, value_b) - } - BinaryExpressionOperation::AndAnd => { - value_a.and(log, stack_trace, database, value_b) - } - BinaryExpressionOperation::Mul => { - value_a.multiply(log, stack_trace, database, value_b) - } - BinaryExpressionOperation::MulMul => { - value_a.exponent(log, stack_trace, database, value_b) - } - BinaryExpressionOperation::Add => { - value_a.addition(log, stack_trace, database, value_b) - } - BinaryExpressionOperation::Sub => { - value_a.subtraction(log, stack_trace, database, value_b) - } - BinaryExpressionOperation::Div => { - value_a.divide(log, stack_trace, database, value_b) - } - BinaryExpressionOperation::Lt => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, database, value_b)?, - Ordering::Less - )) - .into()), - BinaryExpressionOperation::LtLt => { - value_a.left_shift(log, stack_trace, database, value_b) - } - BinaryExpressionOperation::LtEq => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, database, value_b)?, - Ordering::Less | Ordering::Equal - )) - .into()), - BinaryExpressionOperation::EqEq => Ok(values::Boolean( - value_a - .clone() - .cmp(log, stack_trace, database, value_b.clone()) - .map(|ord| matches!(ord, Ordering::Equal)) - .or_else(|_| value_a.eq(log, stack_trace, database, value_b))?, - ) - .into()), - BinaryExpressionOperation::Gt => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, database, value_b)?, - Ordering::Greater - )) - .into()), - BinaryExpressionOperation::GtEq => Ok(values::Boolean(matches!( - value_a.cmp(log, stack_trace, database, value_b)?, - Ordering::Equal | Ordering::Greater - )) - .into()), - BinaryExpressionOperation::GtGt => { - value_a.right_shift(log, stack_trace, database, value_b) - } - BinaryExpressionOperation::BitXor => { - value_a.bit_xor(log, stack_trace, database, value_b) - } - BinaryExpressionOperation::Xor => value_a.xor(log, stack_trace, database, value_b), - BinaryExpressionOperation::Or => { - value_a.bit_or(log, stack_trace, database, value_b) - } - BinaryExpressionOperation::OrOr => value_a.or(log, stack_trace, database, value_b), - } - }, - ) + context.trace_scope(expression.reference.clone(), |context| { + let node = &expression.node; + let value_a = execute_expression(context, &node.a)?; + let value_b = execute_expression(context, &node.b)?; + match node.operation.node { + BinaryExpressionOperation::NotEq => Ok(values::Boolean( + !value_a + .clone() + .cmp(context, value_b.clone()) + .map(|ord| matches!(ord, Ordering::Equal)) + .or_else(|_| value_a.eq(context, value_b))?, + ) + .into()), + BinaryExpressionOperation::And => value_a.bit_and(context, value_b), + BinaryExpressionOperation::AndAnd => value_a.and(context, value_b), + BinaryExpressionOperation::Mul => value_a.multiply(context, value_b), + BinaryExpressionOperation::MulMul => value_a.exponent(context, value_b), + BinaryExpressionOperation::Add => value_a.addition(context, value_b), + BinaryExpressionOperation::Sub => value_a.subtraction(context, value_b), + BinaryExpressionOperation::Div => value_a.divide(context, value_b), + BinaryExpressionOperation::Lt => Ok(values::Boolean(matches!( + value_a.cmp(context, value_b)?, + Ordering::Less + )) + .into()), + BinaryExpressionOperation::LtLt => value_a.left_shift(context, value_b), + BinaryExpressionOperation::LtEq => Ok(values::Boolean(matches!( + value_a.cmp(context, value_b)?, + Ordering::Less | Ordering::Equal + )) + .into()), + BinaryExpressionOperation::EqEq => Ok(values::Boolean( + value_a + .clone() + .cmp(context, value_b.clone()) + .map(|ord| matches!(ord, Ordering::Equal)) + .or_else(|_| value_a.eq(context, value_b))?, + ) + .into()), + BinaryExpressionOperation::Gt => Ok(values::Boolean(matches!( + value_a.cmp(context, value_b)?, + Ordering::Greater + )) + .into()), + BinaryExpressionOperation::GtEq => Ok(values::Boolean(matches!( + value_a.cmp(context, value_b)?, + Ordering::Equal | Ordering::Greater + )) + .into()), + BinaryExpressionOperation::GtGt => value_a.right_shift(context, value_b), + BinaryExpressionOperation::BitXor => value_a.bit_xor(context, value_b), + BinaryExpressionOperation::Xor => value_a.xor(context, value_b), + BinaryExpressionOperation::Or => value_a.bit_or(context, value_b), + BinaryExpressionOperation::OrOr => value_a.or(context, value_b), + } + }) } pub fn execute_if_expression( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, expression: &compile::AstNode>, ) -> ExpressionResult { - let condition = execute_expression( - log, - stack_trace, - stack, - database, - &expression.node.condition, - )? - .downcast::(stack_trace)? - .0; + let condition = execute_expression(context, &expression.node.condition)? + .downcast::(context.stack_trace)? + .0; let expression = if condition { &expression.node.on_true @@ -387,25 +375,26 @@ pub fn execute_if_expression( &expression.node.on_false }; - execute_expression(log, stack_trace, stack, database, expression) + execute_expression(context, expression) } #[cfg(test)] pub(crate) fn test_run(input: &str) -> ExpressionResult { use standard_environment::build_prelude; + use std::sync::Mutex; let root = compile::full_compile(input); let database = BuiltinCallableDatabase::new(); let prelude = build_prelude(&database); - let mut stack = Stack::new(prelude); - - execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut stack, - &database, - &root, - ) + + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; + + execute_expression(&context, &root) } #[cfg(test)] diff --git a/crates/interpreter/src/execution/stack.rs b/crates/interpreter/src/execution/stack.rs index 680a41b..aa1303c 100644 --- a/crates/interpreter/src/execution/stack.rs +++ b/crates/interpreter/src/execution/stack.rs @@ -16,14 +16,14 @@ * program. If not, see . */ -use crate::compile::SourceReference; +use crate::execution::logging::StackTrace; use super::{ errors::{ErrorType, ExpressionResult, Raise}, logging::LocatedStr, values::Value, }; -use compact_str::CompactString; +use imstr::ImString; use std::{collections::HashMap, fmt::Display}; #[derive(Debug, Clone, Copy)] @@ -33,112 +33,75 @@ pub enum ScopeType { } #[derive(Debug)] -struct Scope { +pub struct StackScope<'p> { + prelude: &'p HashMap, + parent: Option<&'p StackScope<'p>>, ty: ScopeType, - variables: HashMap, + variables: HashMap, } -#[derive(Debug)] -pub struct Stack { - scopes: Vec, - prelude: HashMap, - active_scope: usize, -} - -macro_rules! generate_variable_getter { - ($self:ident, $stack_trace: ident, $name:ident, $iter:ident, $get:ident) => {{ - let mut scope_iterator = $self.scopes[..=$self.active_scope].$iter().rev(); - let mut result = None; - - // Search the stack for the thing. - for scope in &mut scope_iterator { - if let Some(value) = scope.variables.$get($name.string) { - result = Some(value); - break; - } - - match &scope.ty { - // If this scope is isolated, then we should not continue searching up the stack. - // Skip to the prelude. - ScopeType::Isolated => { - break; - } - _ => {} - } - } - - result - }}; -} - -#[derive(Debug, Eq, PartialEq)] -struct NotInScopeError { - variable_name: String, -} - -impl ErrorType for NotInScopeError {} - -impl Display for NotInScopeError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!( - f, - "`{}` could not be found in the current scope", - self.variable_name - ) - } -} - -impl Stack { - pub fn new(prelude: HashMap) -> Self { +impl<'p> StackScope<'p> { + pub fn top(prelude: &'p HashMap) -> Self { Self { - scopes: vec![Scope { - ty: ScopeType::Isolated, - variables: HashMap::new(), - }], prelude, - active_scope: 0, + parent: None, + ty: ScopeType::Isolated, + variables: HashMap::new(), } } pub fn scope<'s, B, R>( - &mut self, - stack_trace: &mut Vec, + &'p self, + stack_trace: &StackTrace, mode: ScopeType, + variables: HashMap, block: B, ) -> ExpressionResult where - B: FnOnce(&mut Self, &mut Vec) -> R, + B: FnOnce(&Self, &StackTrace) -> R, { - self.push_scope(mode)?; - let result = block(self, stack_trace); - self.pop_scope(); + let scope = Self { + prelude: self.prelude, + parent: Some(self), + ty: mode, + variables, + }; + + let result = block(&scope, stack_trace); Ok(result) } - fn push_scope<'s>(&mut self, mode: ScopeType) -> ExpressionResult<()> { - let next_scope_index = self.active_scope + 1; - if next_scope_index >= self.scopes.len() { - self.scopes.push(Scope { - variables: HashMap::new(), - ty: mode, - }); - } + pub fn scope_mut<'s, B, R>( + &'p self, + stack_trace: &StackTrace, + mode: ScopeType, + variables: HashMap, + block: B, + ) -> ExpressionResult + where + B: FnOnce(&mut Self, &StackTrace) -> R, + { + let mut scope = Self { + prelude: self.prelude, + parent: Some(self), + ty: mode, + variables, + }; - self.scopes[next_scope_index].ty = mode; - self.active_scope = next_scope_index; + let result = block(&mut scope, stack_trace); - Ok(()) + Ok(result) } - fn pop_scope(&mut self) { - self.active_scope -= 1; + pub fn insert_value(&mut self, name: ImString, value: Value) { + self.variables.insert(name, value); } - pub fn insert_value(&mut self, name: impl Into, value: Value) { - self.scopes[self.active_scope] - .variables - .insert(name.into(), value); + fn iter(&'p self) -> StackScopeIter<'p> { + StackScopeIter { + current: Some(self), + } } /// Gets a reference to a variable on the stack. @@ -146,11 +109,32 @@ impl Stack { // https://crates.io/crates/levenshtein pub fn get_variable<'s, S: Into>>( &self, - stack_trace: &[SourceReference], + stack_trace: &StackTrace, name: S, ) -> ExpressionResult<&Value> { let name = name.into(); - if let Some(value) = generate_variable_getter!(self, stack_trace, name, iter, get) { + + let mut scope_iterator = self.iter(); + let mut value = None; + + // Search the stack for the thing. + for scope in &mut scope_iterator { + if let Some(local_value) = scope.variables.get(name.string) { + value = Some(local_value); + break; + } + + match &scope.ty { + // If this scope is isolated, then we should not continue searching up the stack. + // Skip to the prelude. + ScopeType::Isolated => { + break; + } + _ => {} + } + } + + if let Some(value) = value { Ok(value) } else { // See if we can find it in the prelude. @@ -166,3 +150,36 @@ impl Stack { } } } + +pub struct StackScopeIter<'p> { + current: Option<&'p StackScope<'p>>, +} + +impl<'p> Iterator for StackScopeIter<'p> { + type Item = &'p StackScope<'p>; + + fn next(&mut self) -> Option { + let next = self.current.take(); + if let Some(next) = next { + self.current = next.parent; + } + next + } +} + +#[derive(Debug, Eq, PartialEq)] +struct NotInScopeError { + variable_name: String, +} + +impl ErrorType for NotInScopeError {} + +impl Display for NotInScopeError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "`{}` could not be found in the current scope", + self.variable_name + ) + } +} diff --git a/crates/interpreter/src/execution/standard_environment.rs b/crates/interpreter/src/execution/standard_environment.rs index 569c32f..c836fad 100644 --- a/crates/interpreter/src/execution/standard_environment.rs +++ b/crates/interpreter/src/execution/standard_environment.rs @@ -16,50 +16,63 @@ * program. If not, see . */ -use std::collections::HashMap; +use std::{collections::HashMap, sync::Mutex}; use common_data_types::{Dimension, Float}; +use imstr::ImString; -use crate::execution::values::{ - BuiltinCallableDatabase, Scalar, SignedInteger, UnsignedInteger, ValueNone, +use crate::execution::{ + logging::StackTrace, + stack::StackScope, + values::{BuiltinCallableDatabase, Scalar, SignedInteger, UnsignedInteger, ValueNone}, + ExecutionContext, }; use super::values::{Dictionary, Value, ValueType}; /// Builds standard library. -pub fn build_prelude(database: &BuiltinCallableDatabase) -> HashMap { - let global = HashMap::from([("std".into(), build_std(database).into())]); +pub fn build_prelude(database: &BuiltinCallableDatabase) -> HashMap { + // Build an incomplete context for bootstrapping. + let prelude = HashMap::new(); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::bootstrap(), + stack: &StackScope::top(&prelude), + database: &database, + }; + + let global = HashMap::from([("std".into(), build_std(&context).into())]); global } -fn build_std(database: &BuiltinCallableDatabase) -> Dictionary { +fn build_std(context: &ExecutionContext) -> Dictionary { let std = HashMap::from([ - ("types".into(), build_types(database).into()), + ("types".into(), build_types(context).into()), ( "scalar".into(), - build_dimension_types(database, ValueType::Scalar).into(), + build_dimension_types(context, ValueType::Scalar).into(), ), ( "vector2".into(), - build_dimension_types(database, ValueType::Vector2).into(), + build_dimension_types(context, ValueType::Vector2).into(), ), ( "vector3".into(), - build_dimension_types(database, ValueType::Vector3).into(), + build_dimension_types(context, ValueType::Vector3).into(), ), ( "vector4".into(), - build_dimension_types(database, ValueType::Vector4).into(), + build_dimension_types(context, ValueType::Vector4).into(), ), - ("consts".into(), build_consts(database).into()), + ("consts".into(), build_consts(context).into()), ]); - Dictionary::new(database, std) + Dictionary::new(context, std) } /// Adds library for constants. -fn build_consts(database: &BuiltinCallableDatabase) -> Dictionary { - let types: HashMap = HashMap::from_iter([ +fn build_consts(context: &ExecutionContext) -> Dictionary { + let types: HashMap = HashMap::from_iter([ ("None".into(), ValueNone.into()), ( "Infinity".into(), @@ -82,12 +95,12 @@ fn build_consts(database: &BuiltinCallableDatabase) -> Dictionary { UnsignedInteger::from(i64::BITS as u64).into(), ), ]); - Dictionary::new(database, types) + Dictionary::new(context, types) } /// Adds library for type safety. -fn build_types(database: &BuiltinCallableDatabase) -> Dictionary { - let types: HashMap = HashMap::from_iter( +fn build_types(context: &ExecutionContext) -> Dictionary { + let types: HashMap = HashMap::from_iter( [ ("None".into(), ValueType::TypeNone.into()), ("Bool".into(), ValueType::Boolean.into()), @@ -101,19 +114,19 @@ fn build_types(database: &BuiltinCallableDatabase) -> Dictionary { ] .into_iter(), ); - Dictionary::new(database, types) + Dictionary::new(context, types) } fn build_dimension_types( - database: &BuiltinCallableDatabase, + context: &ExecutionContext, type_builder: impl Fn(Option) -> ValueType, ) -> Dictionary { - let types: HashMap = HashMap::from_iter( + let types: HashMap = HashMap::from_iter( units::list_named_dimensions() .map(|(name, dimension)| (name, Some(dimension))) .chain([("Any", Option::None)].into_iter()) .map(move |(name, dimension)| (name.into(), type_builder(dimension).into())), ); - Dictionary::new(database, types) + Dictionary::new(context, types) } diff --git a/crates/interpreter/src/execution/values/boolean.rs b/crates/interpreter/src/execution/values/boolean.rs index 5c279c1..147ecc6 100644 --- a/crates/interpreter/src/execution/values/boolean.rs +++ b/crates/interpreter/src/execution/values/boolean.rs @@ -16,13 +16,7 @@ * program. If not, see . */ -use crate::{ - compile::SourceReference, - execution::{ - logging::RuntimeLog, - values::{closure::BuiltinCallableDatabase, StaticType}, - }, -}; +use crate::execution::{values::StaticType, ExecutionContext}; use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; @@ -32,59 +26,30 @@ use std::borrow::Cow; pub struct Boolean(pub bool); impl Object for Boolean { - fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { + fn get_type(&self, _context: &ExecutionContext) -> ValueType { ValueType::Boolean } - fn eq( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn eq(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(self.0 == rhs.0) } - fn and( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn and(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(Self(self.0 && rhs.0).into()) } - fn or( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn or(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(Self(self.0 || rhs.0).into()) } - fn xor( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn xor(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(Self((self.0 && rhs.0) || (!self.0 && !rhs.0)).into()) } - fn unary_not( - self, - _log: &mut dyn RuntimeLog, - _stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - ) -> ExpressionResult { + fn unary_not(self, _context: &ExecutionContext) -> ExpressionResult { Ok(Self(!self.0).into()) } } diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index e502a12..64c3375 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -19,16 +19,17 @@ use std::{any::TypeId, borrow::Cow, collections::HashMap, fmt::Display, sync::Arc}; use hashable_map::HashableMap; +use imstr::ImString; use crate::{ - compile::{AstNode, ClosureDefinition, Expression, SourceReference}, + compile::{AstNode, ClosureDefinition, Expression}, execute_expression, execution::{ errors::{ExpressionResult, Raise}, find_value, - logging::{RuntimeLog, StackScope}, - stack::{ScopeType, Stack}, + stack::ScopeType, values::{Dictionary, MissingAttributeError, Value}, + ExecutionContext, }, }; @@ -140,9 +141,9 @@ impl Display for Signature { fn find_all_variable_accesses_in_closure_capture( closure: &crate::compile::ClosureDefinition, - mut access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, + mut access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, ) -> ExpressionResult<()> { - let argument_names: Vec<&String> = { + let argument_names: Vec<&ImString> = { let mut argument_names = Vec::with_capacity(closure.argument_type.node.members.len()); for argument in closure.argument_type.node.members.iter() { @@ -173,7 +174,7 @@ fn find_all_variable_accesses_in_closure_capture( fn find_all_variable_accesses_in_dictionary_construction( dictionary_construction: &crate::compile::DictionaryConstruction, - access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, + access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, ) -> ExpressionResult<()> { for assignment in dictionary_construction.assignments.iter() { find_all_variable_accesses_in_expression( @@ -187,7 +188,7 @@ fn find_all_variable_accesses_in_dictionary_construction( fn find_all_variable_accesses_in_expression( expression: &Expression, - access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, + access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, ) -> ExpressionResult<()> { match expression { Expression::BinaryExpression(ast_node) => { @@ -308,7 +309,7 @@ fn find_all_variable_accesses_in_expression( #[derive(Debug, Eq, PartialEq)] struct UserClosureInternals { signature: Arc, - captured_values: HashableMap, + captured_values: HashableMap, expression: Arc>, } @@ -319,31 +320,20 @@ pub struct UserClosure { impl UserClosure { pub fn from_ast( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, source: &AstNode>, ) -> ExpressionResult { - let argument_type = stack_trace.stack_scope( - source.node.argument_type.reference.clone(), - |stack_trace| { - let argument_type = StructDefinition::new( - log, - stack_trace, - stack, - database, - &source.node.argument_type, - )?; + let argument_type = + context.trace_scope(source.node.argument_type.reference.clone(), |context| { + let argument_type = StructDefinition::new(context, &source.node.argument_type)?; Ok(argument_type) - }, - )?; + })?; let return_type = - stack_trace.stack_scope(source.node.return_type.reference.clone(), |stack_trace| { - execute_expression(log, stack_trace, stack, database, &source.node.return_type)? - .downcast::(stack_trace) + context.trace_scope(source.node.return_type.reference.clone(), |context| { + execute_expression(context, &source.node.return_type)? + .downcast::(context.stack_trace) })?; let signature = Arc::new(Signature { @@ -355,7 +345,7 @@ impl UserClosure { let mut captured_values = HashableMap::new(); find_all_variable_accesses_in_closure_capture(&source.node, &mut |field_name| { - let value = find_value(log, stack_trace, stack, database, [field_name])?; + let value = find_value(context, [field_name])?; captured_values.insert(field_name.node.clone(), value); @@ -373,43 +363,33 @@ impl UserClosure { } impl Object for UserClosure { - fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { + fn get_type(&self, _context: &ExecutionContext) -> ValueType { ValueType::Closure(self.data.signature.clone()) } - fn call( - &self, - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, - argument: Dictionary, - ) -> ExpressionResult { + fn call(&self, context: &ExecutionContext, argument: Dictionary) -> ExpressionResult { self.data .signature .argument_type .check_other_qualifies(argument.struct_def()) - .map_err(|error| error.to_error(stack_trace.iter()))?; + .map_err(|error| error.to_error(context.stack_trace))?; let argument = self.data.signature.argument_type.fill_defaults(argument); - stack.scope(stack_trace, ScopeType::Inherited, |stack, stack_trace| { - for (name, value) in argument.iter() { - stack.insert_value(name, value.clone()); - } - - for (name, value) in self.data.captured_values.iter() { - stack.insert_value(name, value.clone()); - } + let variables: HashMap = argument + .iter() + .chain(self.data.captured_values.iter()) + .map(|(name, value)| (name.clone(), value.clone())) + .collect(); - let result = - execute_expression(log, stack_trace, stack, database, &self.data.expression)?; + context.stack_scope(ScopeType::Inherited, variables, |context| { + let result = execute_expression(context, &self.data.expression)?; self.data .signature .return_type - .check_other_qualifies(&result.get_type(database)) - .map_err(|error| error.to_error(stack_trace.iter()))?; + .check_other_qualifies(&result.get_type(context)) + .map_err(|error| error.to_error(context.stack_trace))?; Ok(result) })? @@ -423,14 +403,7 @@ impl StaticTypeName for UserClosure { } pub trait BuiltinCallable: Sync + Send { - fn call( - &self, - runtime: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, - argument: Dictionary, - ) -> ExpressionResult; + fn call(&self, context: &ExecutionContext, argument: Dictionary) -> ExpressionResult; fn name(&self) -> &str; @@ -450,7 +423,7 @@ impl std::fmt::Debug for dyn BuiltinCallable { macro_rules! build_member_from_sig { ($name:ident: $ty:ty) => { ( - String::from(stringify!($name)), + imstr::ImString::from(stringify!($name)), $crate::execution::values::value_type::StructMember { ty: <$ty as crate::execution::values::StaticType>::static_type(), default: None, @@ -459,7 +432,7 @@ macro_rules! build_member_from_sig { }; ($name:ident: $ty:ty = $default:expr) => { ( - String::from(stringify!($name)), + imstr::ImString::from(stringify!($name)), $crate::execution::values::value_type::StructMember { ty: <$ty as crate::execution::values::StaticType>::static_type(), default: Some($default), @@ -471,7 +444,7 @@ macro_rules! build_member_from_sig { #[macro_export] macro_rules! build_argument_signature_list { ($($arg:ident: $ty:path $(= $default:expr)?),*) => {{ - let list: [(String, $crate::execution::values::value_type::StructMember); _] = [$($crate::build_member_from_sig!($arg: $ty $(= $default)?),)*]; + let list: [(imstr::ImString, $crate::execution::values::value_type::StructMember); _] = [$($crate::build_member_from_sig!($arg: $ty $(= $default)?),)*]; list }}; } @@ -537,35 +510,32 @@ macro_rules! build_closure_type { #[macro_export] macro_rules! build_function_callable { - ($name:literal ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $database:ident: &BuiltinCallableDatabase $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block) => {{ - struct BuiltFunction, &mut Stack, &BuiltinCallableDatabase $(, $($ty),*)?) -> ExpressionResult<$crate::execution::values::Value>> { + ($name:literal ($context:ident: &ExecutionContext $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block) => {{ + struct BuiltFunction ExpressionResult<$crate::execution::values::Value>> { function: F, signature: std::sync::Arc<$crate::execution::values::closure::Signature>, } - impl, &mut Stack, &BuiltinCallableDatabase $(, $($ty),*)?) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync> $crate::execution::values::closure::BuiltinCallable for BuiltFunction { + impl ExpressionResult<$crate::execution::values::Value> + Send + Sync> $crate::execution::values::closure::BuiltinCallable for BuiltFunction { fn call( &self, - runtime: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &$crate::execution::ExecutionContext, argument: $crate::execution::values::Dictionary, ) -> $crate::execution::errors::ExpressionResult<$crate::execution::values::Value> { use $crate::execution::errors::Raise; self.signature .argument_type .check_other_qualifies(argument.struct_def()) - .map_err(|error| error.to_error(stack_trace.iter()))?; + .map_err(|error| error.to_error(context.stack_trace.iter()))?; // Argument is potentially unused if we take no arguments. let mut _argument = self.signature.argument_type.fill_defaults(argument); let _data = std::sync::Arc::make_mut(&mut _argument.data); $($(let $arg: $ty = _data.members.remove(stringify!($arg)) - .expect("Argument was not present after argument check.").downcast(stack_trace)?;)*)? + .expect("Argument was not present after argument check.").downcast(context.stack_trace)?;)*)? - (self.function)(runtime, stack_trace, stack, database $(, $($arg),*)?) + (self.function)(context $(, $($arg),*)?) } fn name(&self) -> &str { @@ -578,7 +548,7 @@ macro_rules! build_function_callable { } BuiltFunction { - function: move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $database: &BuiltinCallableDatabase $(, $($arg: $ty),*)?| -> ExpressionResult<$crate::execution::values::Value> { let result: $return_type = $code?; Ok(result.into()) }, + function: move |$context: &$crate::execution::ExecutionContext $(, $($arg: $ty),*)?| -> ExpressionResult<$crate::execution::values::Value> { let result: $return_type = $code?; Ok(result.into()) }, signature: $crate::build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type), } }}; @@ -587,18 +557,18 @@ macro_rules! build_function_callable { #[macro_export] macro_rules! build_function { ($database:ident, - forward = $ident:ident, $name:literal, ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $call_database:ident: &BuiltinCallableDatabase $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block + forward = $ident:ident, $name:literal, ($context:ident: &ExecutionContext $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block ) => {{ - let callable = $crate::build_function_callable!($name ($log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $call_database: &BuiltinCallableDatabase $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code); + let callable = $crate::build_function_callable!($name ($context: &ExecutionContext $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code); $database.register::<$ident>(Box::new(callable)) }}; ($database:ident, - forward = $forward_ident:ident, $forward_name:literal, ($forward_log:ident: &mut dyn RuntimeLog, $forward_stack_trace:ident: &mut Vec, $forward_stack:ident: &mut Stack, $forward_database:ident: &BuiltinCallableDatabase $(, $($forward_arg:ident: $forward_ty:path $(= $forward_default:expr)?),+)?) -> $forward_return_type:ty $forward_code:block, - reverse = $reverse_ident:ident, $reverse_name:literal, ($reverse_log:ident: &mut dyn RuntimeLog, $reverse_stack_trace:ident: &mut Vec, $reverse_stack:ident: &mut Stack, $reverse_database:ident: &BuiltinCallableDatabase $(, $($reverse_arg:ident: $reverse_ty:path $(= $reverse_default:expr)?),+)?) -> $reverse_return_type:ty $reverse_code:block + forward = $forward_ident:ident, $forward_name:literal, ($forward_context:ident: &ExecutionContext $(, $($forward_arg:ident: $forward_ty:path $(= $forward_default:expr)?),+)?) -> $forward_return_type:ty $forward_code:block, + reverse = $reverse_ident:ident, $reverse_name:literal, ($reverse_context:ident: &ExecutionContext $(, $($reverse_arg:ident: $reverse_ty:path $(= $reverse_default:expr)?),+)?) -> $reverse_return_type:ty $reverse_code:block ) => {{ - let forward = $crate::build_function_callable!($forward_name ($forward_log: &mut dyn RuntimeLog, $forward_stack_trace: &mut Vec, $forward_stack: &mut Stack, $forward_database: &BuiltinCallableDatabase $(, $($forward_arg: $forward_ty $(= $forward_default)?),+)?) -> $forward_return_type $forward_code); - let reverse = $crate::build_function_callable!($reverse_name ($reverse_log: &mut dyn RuntimeLog, $reverse_stack_trace: &mut Vec, $reverse_stack: &mut Stack, $reverse_database: &BuiltinCallableDatabase $(, $($reverse_arg: $reverse_ty $(= $reverse_default)?),+)?) -> $reverse_return_type $reverse_code); + let forward = $crate::build_function_callable!($forward_name ($forward_context: &ExecutionContext $(, $($forward_arg: $forward_ty $(= $forward_default)?),+)?) -> $forward_return_type $forward_code); + let reverse = $crate::build_function_callable!($reverse_name ($reverse_context: &ExecutionContext $(, $($reverse_arg: $reverse_ty $(= $reverse_default)?),+)?) -> $reverse_return_type $reverse_code); $database.register_with_inverse::<$forward_ident, $reverse_ident>(Box::new(forward), Box::new(reverse)) }}; @@ -606,50 +576,46 @@ macro_rules! build_function { #[macro_export] macro_rules! build_method_callable { - ($name:expr, ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $database:ident: &BuiltinCallableDatabase, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block) => {{ - struct BuiltFunction, &mut crate::execution::Stack, &BuiltinCallableDatabase, S $(, $($ty),*)?) -> ExpressionResult> { + ($name:expr, ($context:ident: &ExecutionContext, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block) => {{ + struct BuiltFunction ExpressionResult<$crate::execution::values::Value>> { function: F, - signature: std::sync::Arc, + signature: std::sync::Arc<$crate::execution::values::closure::Signature>, name: String, _self_type: std::marker::PhantomData } - impl, &mut $crate::execution::Stack, &BuiltinCallableDatabase, S $(, $($ty),*)?) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync> $crate::execution::values::closure::BuiltinCallable for BuiltFunction + impl ExpressionResult<$crate::execution::values::Value> + Send + Sync> $crate::execution::values::closure::BuiltinCallable for BuiltFunction where S: Send + Sync + Clone + StaticTypeName, $crate::execution::values::Value: enum_downcast::AsVariant { fn call( &self, - runtime: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut $crate::execution::Stack, - database: &BuiltinCallableDatabase, + context: &$crate::execution::ExecutionContext, argument: $crate::execution::values::Dictionary, ) -> $crate::execution::errors::ExpressionResult<$crate::execution::values::Value> { use $crate::execution::errors::Raise; - let this = stack.get_variable( - stack_trace, + let this = context.get_variable( $crate::execution::logging::LocatedStr { - location: stack_trace.last().unwrap().clone(), + location: context.stack_trace.bottom().clone(), string: "self", }, - )?.downcast_ref::(stack_trace)?.clone(); + )?.downcast_ref::(context.stack_trace)?.clone(); self.signature .argument_type .check_other_qualifies(argument.struct_def()) - .map_err(|error| error.to_error(stack_trace.iter()))?; + .map_err(|error| error.to_error(context.stack_trace.iter()))?; // Argument is potentially unused if we take no arguments. let mut _argument = self.signature.argument_type.fill_defaults(argument); let _data = std::sync::Arc::make_mut(&mut _argument.data); $($(let $arg: $ty = _data.members.remove(stringify!($arg)) - .expect("Argument was not present after argument check.").downcast(stack_trace)?;)*)? + .expect("Argument was not present after argument check.").downcast(context.stack_trace)?;)*)? - (self.function)(runtime, stack_trace, stack, database, this $(, $($arg),*)?) + (self.function)(context, this $(, $($arg),*)?) } fn name(&self) -> &str { @@ -662,7 +628,7 @@ macro_rules! build_method_callable { } BuiltFunction { - function: move |$log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $database: &BuiltinCallableDatabase, $this: $this_type $(, $($arg: $ty),*)?| -> ExpressionResult<$crate::execution::values::Value> { let result: $return_type = $code?; Ok(result.into()) }, + function: move |$context: &$crate::execution::ExecutionContext, $this: $this_type $(, $($arg: $ty),*)?| -> ExpressionResult<$crate::execution::values::Value> { let result: $return_type = $code?; Ok(result.into()) }, signature: $crate::build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type), name: $name.into(), _self_type: std::marker::PhantomData @@ -673,18 +639,18 @@ macro_rules! build_method_callable { #[macro_export] macro_rules! build_method { ($database:ident, - forward = $ident:ty, $name:expr, ($log:ident: &mut dyn RuntimeLog, $stack_trace:ident: &mut Vec, $stack:ident: &mut Stack, $call_database:ident: &BuiltinCallableDatabase, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block + forward = $ident:ty, $name:expr, ($context:ident: &ExecutionContext, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block ) => {{ - let callable = $crate::build_method_callable!($name, ($log: &mut dyn RuntimeLog, $stack_trace: &mut Vec, $stack: &mut Stack, $call_database: &BuiltinCallableDatabase, $this: $this_type $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code); + let callable = $crate::build_method_callable!($name, ($context: &ExecutionContext, $this: $this_type $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code); $database.register::<$ident>(Box::new(callable)) }}; ($database:ident, - forward = $forward_ident:ty, $forward_name:expr, ($forward_log:ident: &mut dyn RuntimeLog, $forward_stack_trace:ident: &mut Vec, $forward_stack:ident: &mut Stack, $forward_call_database:ident: &BuiltinCallableDatabase, $forward_this:ident: $forward_this_type:ty $(, $($forward_arg:ident: $forward_ty:path $(= $forward_default:expr)?),+)?) -> $forward_return_type:path $forward_code:block, - reverse = $reverse_ident:ty, $reverse_name:expr, ($reverse_log:ident: &mut dyn RuntimeLog, $reverse_stack_trace:ident: &mut Vec, $reverse_stack:ident: &mut Stack, $reverse_call_database:ident: &BuiltinCallableDatabase, $reverse_this:ident: $reverse_this_type:ty $(, $($reverse_arg:ident: $reverse_ty:path $(= $reverse_default:expr)?),+)?) -> $reverse_return_type:path $reverse_code:block + forward = $forward_ident:ty, $forward_name:expr, ($forward_context:ident: &ExecutionContext, $forward_this:ident: $forward_this_type:ty $(, $($forward_arg:ident: $forward_ty:path $(= $forward_default:expr)?),+)?) -> $forward_return_type:path $forward_code:block, + reverse = $reverse_ident:ty, $reverse_name:expr, ($reverse_context:ident: &ExecutionContext, $reverse_this:ident: $reverse_this_type:ty $(, $($reverse_arg:ident: $reverse_ty:path $(= $reverse_default:expr)?),+)?) -> $reverse_return_type:path $reverse_code:block ) => {{ - let forward = $crate::build_method_callable!($forward_name, ($forward_log: &mut dyn RuntimeLog, $forward_stack_trace: &mut Vec, $forward_stack: &mut Stack, $forward_call_database: &BuiltinCallableDatabase, $forward_this: $forward_this_type $(, $($forward_arg: $forward_ty $(= $forward_default)?),+)?) -> $forward_return_type $forward_code); - let reverse = $crate::build_method_callable!($reverse_name, ($reverse_log: &mut dyn RuntimeLog, $reverse_stack_trace: &mut Vec, $reverse_stack: &mut Stack, $reverse_call_database: &BuiltinCallableDatabase, $reverse_this: $reverse_this_type $(, $($reverse_arg: $reverse_ty $(= $reverse_default)?),+)?) -> $reverse_return_type $reverse_code); + let forward = $crate::build_method_callable!($forward_name, ($forward_context: &ExecutionContext, $forward_this: $forward_this_type $(, $($forward_arg: $forward_ty $(= $forward_default)?),+)?) -> $forward_return_type $forward_code); + let reverse = $crate::build_method_callable!($reverse_name, ($reverse_context: &ExecutionContext, $reverse_this: $reverse_this_type $(, $($reverse_arg: $reverse_ty $(= $reverse_default)?),+)?) -> $reverse_return_type $reverse_code); $database.register_with_inverse::<$forward_ident, $reverse_ident>(Box::new(forward), Box::new(reverse)) }}; @@ -700,38 +666,22 @@ impl BuiltinFunction { } impl Object for BuiltinFunction { - fn get_type(&self, callable_database: &BuiltinCallableDatabase) -> ValueType { - ValueType::Closure(callable_database.get_forward(self.0).signature().clone()) + fn get_type(&self, context: &ExecutionContext) -> ValueType { + ValueType::Closure(context.database.get_forward(self.0).signature().clone()) } - fn call( - &self, - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - callable_database: &BuiltinCallableDatabase, - argument: Dictionary, - ) -> ExpressionResult { - callable_database.get_forward(self.0).call( - log, - stack_trace, - stack, - callable_database, - argument, - ) + fn call(&self, context: &ExecutionContext, argument: Dictionary) -> ExpressionResult { + context.database.get_forward(self.0).call(context, argument) } - // TODO the user should be able to get the inverse function. fn get_attribute( &self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - callable_database: &BuiltinCallableDatabase, + context: &ExecutionContext, attribute: &str, ) -> ExpressionResult { match attribute { "inverse" => { - if let Some(inverse) = callable_database.get_inverse(self.0) { + if let Some(inverse) = context.database.get_inverse(self.0) { Ok(BuiltinFunction(inverse).into()) } else { todo!() @@ -740,7 +690,7 @@ impl Object for BuiltinFunction { _ => Err(MissingAttributeError { name: attribute.into(), } - .to_error(stack_trace)), + .to_error(context.stack_trace)), } } } @@ -755,11 +705,14 @@ impl StaticTypeName for BuiltinFunction { mod test { use super::*; use crate::execution::{ + logging::StackTrace, + stack::StackScope, test_run, values::{self, SignedInteger, StructMember, UnsignedInteger}, }; use hashable_map::HashableMap; use pretty_assertions::assert_eq; + use std::sync::Mutex; #[test] fn define_closure() { @@ -843,7 +796,7 @@ mod test { assert_eq!( build_argument_signature_list!(value: SignedInteger), [( - String::from("value"), + ImString::from("value"), StructMember { ty: ValueType::SignedInteger, default: None @@ -853,7 +806,7 @@ mod test { assert_eq!( build_argument_signature_list!(value: UnsignedInteger), [( - String::from("value"), + ImString::from("value"), StructMember { ty: ValueType::UnsignedInteger, default: None @@ -863,7 +816,7 @@ mod test { assert_eq!( build_argument_signature_list!(value: UnsignedInteger = UnsignedInteger::from(23).into()), [( - String::from("value"), + ImString::from("value"), StructMember { ty: ValueType::UnsignedInteger, default: Some(Value::UnsignedInteger(23.into())) @@ -875,14 +828,14 @@ mod test { build_argument_signature_list!(value: UnsignedInteger, value1: SignedInteger), [ ( - String::from("value"), + ImString::from("value"), StructMember { ty: ValueType::UnsignedInteger, default: None } ), ( - String::from("value1"), + ImString::from("value1"), StructMember { ty: ValueType::SignedInteger, default: None @@ -895,14 +848,14 @@ mod test { build_argument_signature_list!(value: UnsignedInteger = UnsignedInteger::from(32).into(), value1: SignedInteger), [ ( - String::from("value"), + ImString::from("value"), StructMember { ty: ValueType::UnsignedInteger, default: Some(UnsignedInteger::from(32).into()) } ), ( - String::from("value1"), + ImString::from("value1"), StructMember { ty: ValueType::SignedInteger, default: None @@ -920,11 +873,8 @@ mod test { build_function!( database, forward = TestFunction, "test_function", ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase - ) -> UnsignedInteger { + _context: &ExecutionContext + ) -> UnsignedInteger { Ok(values::UnsignedInteger::from(846)) } ); @@ -932,21 +882,19 @@ mod test { use crate::execution::standard_environment::build_prelude; let root = crate::compile::full_compile("test_function()"); - let prelude = build_prelude(&database); - let mut stack = Stack::new(prelude); - stack.insert_value( - "test_function", + let mut prelude = build_prelude(&database); + prelude.insert( + "test_function".into(), BuiltinFunction::new::().into(), ); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut stack, - &database, - &root, - ) - .unwrap(); + let product = execute_expression(&context, &root).unwrap(); assert_eq!(product, values::UnsignedInteger::from(846).into()); } @@ -959,10 +907,7 @@ mod test { build_function!( database, forward = TestFunction, "test_function", ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + _context: &ExecutionContext, a: UnsignedInteger, b: UnsignedInteger ) -> UnsignedInteger { @@ -973,21 +918,19 @@ mod test { use crate::execution::standard_environment::build_prelude; let root = crate::compile::full_compile("test_function(a = 1u, b = 2u)"); - let prelude = build_prelude(&database); - let mut stack = Stack::new(prelude); - stack.insert_value( - "test_function", + let mut prelude = build_prelude(&database); + prelude.insert( + "test_function".into(), BuiltinFunction::new::().into(), ); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut stack, - &database, - &root, - ) - .unwrap(); + let product = execute_expression(&context, &root).unwrap(); assert_eq!(product, values::UnsignedInteger::from(3).into()); } @@ -1001,19 +944,13 @@ mod test { build_function!( database, forward = TestFunction, "test_function", ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + _context: &ExecutionContext, input: UnsignedInteger ) -> UnsignedInteger { Ok(values::UnsignedInteger::from(input.0 + 1)) }, reverse = TestInverse, "test_inverse", ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + _context: &ExecutionContext, input: UnsignedInteger ) -> UnsignedInteger { Ok(values::UnsignedInteger::from(input.0 - 1)) @@ -1023,22 +960,23 @@ mod test { use crate::execution::standard_environment::build_prelude; let root = crate::compile::full_compile("test_inverse(input = test_function(input = 1u))"); - let prelude = build_prelude(&database); - let mut stack = Stack::new(prelude); - stack.insert_value( - "test_function", + let mut prelude = build_prelude(&database); + prelude.insert( + "test_function".into(), BuiltinFunction::new::().into(), ); - stack.insert_value("test_inverse", BuiltinFunction::new::().into()); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut stack, - &database, - &root, - ) - .unwrap(); + prelude.insert( + "test_inverse".into(), + BuiltinFunction::new::().into(), + ); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; + + let product = execute_expression(&context, &root).unwrap(); assert_eq!(product, values::UnsignedInteger::from(1).into()); } @@ -1050,10 +988,7 @@ mod test { build_function!( database, forward = TestFunction, "test_function", ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + _context: &ExecutionContext, a: UnsignedInteger, b: UnsignedInteger = UnsignedInteger::from(2).into() ) -> UnsignedInteger { @@ -1064,21 +999,19 @@ mod test { use crate::execution::standard_environment::build_prelude; let root = crate::compile::full_compile("test_function(a = 1u)"); - let prelude = build_prelude(&database); - let mut stack = Stack::new(prelude); - stack.insert_value( - "test_function", + let mut prelude = build_prelude(&database); + prelude.insert( + "test_function".into(), BuiltinFunction::new::().into(), ); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut stack, - &database, - &root, - ) - .unwrap(); + let product = execute_expression(&context, &root).unwrap(); assert_eq!(product, values::UnsignedInteger::from(3).into()); } @@ -1092,10 +1025,7 @@ mod test { build_function!( database, forward = TestFunction, "test_function", ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + _context: &ExecutionContext, a: UnsignedInteger ) -> UnsignedInteger { Ok(values::UnsignedInteger::from(a.0 + b)) @@ -1105,21 +1035,19 @@ mod test { use crate::execution::standard_environment::build_prelude; let root = crate::compile::full_compile("test_function(a = 1u)"); - let prelude = build_prelude(&database); - let mut stack = Stack::new(prelude); - stack.insert_value( - "test_function", + let mut prelude = build_prelude(&database); + prelude.insert( + "test_function".into(), BuiltinFunction::new::().into(), ); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut stack, - &database, - &root, - ) - .unwrap(); + let product = execute_expression(&context, &root).unwrap(); assert_eq!(product, values::UnsignedInteger::from(3).into()); } @@ -1130,8 +1058,8 @@ mod test { struct TestMethod; build_method!( database, - forward = TestMethod, "test_method", (log: &mut dyn RuntimeLog, stack_trace: &mut Vec, _stack: &mut Stack, database: &BuiltinCallableDatabase, this: Dictionary) -> Value { - this.get_attribute(log, stack_trace, database, "value") + forward = TestMethod, "test_method", (context: &ExecutionContext, this: Dictionary) -> Value { + this.get_attribute(context, "value") } ); @@ -1140,21 +1068,19 @@ mod test { let root = crate::compile::full_compile( "let object = (value = 5u, test_method = provided_test_method); in object::test_method()", ); - let prelude = build_prelude(&database); - let mut stack = Stack::new(prelude); - stack.insert_value( - "provided_test_method", + let mut prelude = build_prelude(&database); + prelude.insert( + "provided_test_method".into(), BuiltinFunction::new::().into(), ); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut stack, - &database, - &root, - ) - .unwrap(); + let product = execute_expression(&context, &root).unwrap(); assert_eq!(product, values::UnsignedInteger::from(5).into()); } @@ -1167,14 +1093,11 @@ mod test { build_method!( database, forward = TestMethod, "test_method", ( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Dictionary, to_add: UnsignedInteger ) -> UnsignedInteger { - let value: UnsignedInteger = this.get_attribute(log, stack_trace, database, "value")?.downcast(stack_trace)?; + let value: UnsignedInteger = this.get_attribute(context, "value")?.downcast(context.stack_trace)?; Ok(values::UnsignedInteger::from(value.0 + to_add.0)) } @@ -1186,21 +1109,19 @@ mod test { "let object = (value = 5u, test_method = provided_test_method); in object::test_method(to_add = 10u)", ); - let prelude = build_prelude(&database); - let mut stack = Stack::new(prelude); - stack.insert_value( - "provided_test_method", + let mut prelude = build_prelude(&database); + prelude.insert( + "provided_test_method".into(), BuiltinFunction::new::().into(), ); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut stack, - &database, - &root, - ) - .unwrap(); + let product = execute_expression(&context, &root).unwrap(); assert_eq!(product, values::UnsignedInteger::from(15).into()); } @@ -1213,26 +1134,20 @@ mod test { build_method!( database, forward = TestMethod, "test_method", ( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Dictionary, input: UnsignedInteger ) -> UnsignedInteger { - let value: UnsignedInteger = this.get_attribute(log, stack_trace, database, "value")?.downcast(stack_trace)?; + let value: UnsignedInteger = this.get_attribute(context, "value")?.downcast(context.stack_trace)?; Ok(UnsignedInteger::from(input.0 + value.0)) }, reverse = InverseMethod, "reverse_method", ( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Dictionary, input: UnsignedInteger ) -> UnsignedInteger { - let value: UnsignedInteger = this.get_attribute(log, stack_trace, database, "value")?.downcast(stack_trace)?; + let value: UnsignedInteger = this.get_attribute(context, "value")?.downcast(context.stack_trace)?; Ok(UnsignedInteger::from(input.0 - value.0)) } @@ -1243,25 +1158,23 @@ mod test { let root = crate::compile::full_compile( "let object = (value = 5u, test_method = provided_test_method, inverse_method = provided_inverse_method); in object::inverse_method(input = object::test_method(input = 2u))", ); - let prelude = build_prelude(&database); - let mut stack = Stack::new(prelude); - stack.insert_value( - "provided_test_method", + let mut prelude = build_prelude(&database); + prelude.insert( + "provided_test_method".into(), BuiltinFunction::new::().into(), ); - stack.insert_value( - "provided_inverse_method", + prelude.insert( + "provided_inverse_method".into(), BuiltinFunction::new::().into(), ); - - let product = execute_expression( - &mut Vec::new(), - &mut Vec::new(), - &mut stack, - &database, - &root, - ) - .unwrap(); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; + + let product = execute_expression(&context, &root).unwrap(); assert_eq!(product, values::UnsignedInteger::from(2).into()); } diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index a4f88f2..4f2bcf0 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -19,15 +19,15 @@ use std::{borrow::Cow, collections::HashMap, fmt::Display, sync::Arc}; use hashable_map::HashableMap; +use imstr::ImString; use crate::{ - compile::{AstNode, DictionaryConstruction, SourceReference}, + compile::{AstNode, DictionaryConstruction}, execute_expression, execution::{ errors::{ErrorType, ExpressionResult, Raise as _}, - logging::RuntimeLog, - stack::{ScopeType, Stack}, - values::closure::BuiltinCallableDatabase, + stack::ScopeType, + ExecutionContext, }, }; @@ -37,7 +37,7 @@ use super::{ #[derive(Clone, Debug, Eq)] pub(crate) struct DictionaryData { - pub members: HashableMap, + pub members: HashableMap, pub struct_def: StructDefinition, } @@ -53,15 +53,13 @@ pub struct Dictionary { } impl Object for Dictionary { - fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { + fn get_type(&self, _context: &ExecutionContext) -> ValueType { self.data.struct_def.clone().into() } fn get_attribute( &self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _callable_database: &BuiltinCallableDatabase, + context: &ExecutionContext, attribute: &str, ) -> ExpressionResult { if let Some(member) = self.data.members.get(attribute) { @@ -70,7 +68,7 @@ impl Object for Dictionary { Err(MissingAttributeError { name: attribute.into(), } - .to_error(stack_trace)) + .to_error(context.stack_trace)) } } } @@ -87,48 +85,51 @@ impl Dictionary { } pub fn from_ast( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, ast_node: &AstNode, ) -> ExpressionResult { let mut members = HashMap::with_capacity(ast_node.node.assignments.len()); - stack.scope(stack_trace, ScopeType::Inherited, |stack, stack_trace| { - for assignment in ast_node.node.assignments.iter() { - let name = assignment.node.name.node.clone(); - let value = execute_expression( - log, - stack_trace, - stack, - database, - &assignment.node.assignment, - )?; - - if members.insert(name.clone(), value.clone()).is_some() { - // That's a duplicate member. - return Err(DuplicateMemberError { - name: assignment.node.name.node.clone(), + context.stack.scope_mut( + context.stack_trace, + ScopeType::Inherited, + HashMap::new(), + |stack, stack_trace| { + for assignment in ast_node.node.assignments.iter() { + let context = ExecutionContext { + log: context.log, + stack_trace, + stack, + database: context.database, + }; + + let name = assignment.node.name.node.clone(); + let value = execute_expression(&context, &assignment.node.assignment)?; + + if members.insert(name.clone(), value.clone()).is_some() { + // That's a duplicate member. + return Err(DuplicateMemberError { + name: assignment.node.name.node.clone(), + } + .to_error(context.stack_trace.iter().chain([&assignment.reference]))); } - .to_error(stack_trace.iter().chain([&assignment.reference]))); - } - stack.insert_value(name, value); - } + stack.insert_value(name, value); + } - Ok(()) - })??; + Ok(()) + }, + )??; - Ok(Self::new(database, members)) + Ok(Self::new(context, members)) } - pub fn new(database: &BuiltinCallableDatabase, map: HashMap) -> Self { + pub fn new(context: &ExecutionContext, map: HashMap) -> Self { let mut struct_members = HashMap::with_capacity(map.len()); for (name, value) in map.iter() { let member = StructMember { - ty: value.get_type(database), + ty: value.get_type(context), default: None, }; @@ -147,14 +148,14 @@ impl Dictionary { Self { data } } - pub fn iter(&self) -> impl Iterator { + pub fn iter(&self) -> impl Iterator { self.data.members.iter() } } #[derive(Debug, Eq, PartialEq)] pub struct DuplicateMemberError { - pub name: String, + pub name: ImString, } impl ErrorType for DuplicateMemberError {} @@ -179,7 +180,7 @@ mod test { let product = test_run("(none = std.consts.None)").unwrap(); let expected = Arc::new(DictionaryData { members: HashableMap::from(HashMap::from_iter([( - "none".to_string(), + "none".into(), values::ValueNone.into(), )])), struct_def: StructDefinition { diff --git a/crates/interpreter/src/execution/values/file.rs b/crates/interpreter/src/execution/values/file.rs index e10bd25..7d8ce64 100644 --- a/crates/interpreter/src/execution/values/file.rs +++ b/crates/interpreter/src/execution/values/file.rs @@ -16,7 +16,7 @@ * program. If not, see . */ -use std::{borrow::Cow, io::Read, path::Path, sync::Arc}; +use std::{borrow::Cow, io::Read, sync::Arc}; use imstr::ImString; use tempfile::NamedTempFile; @@ -26,7 +26,7 @@ use crate::{ execution::{ errors::{GenericFailure, Raise as _}, values::{BuiltinCallableDatabase, IString, Object, StaticTypeName, ValueType}, - ExpressionResult, RuntimeLog, SourceReference, Stack, + ExecutionContext, ExpressionResult, }, }; @@ -44,7 +44,7 @@ impl PartialEq for File { } impl Object for File { - fn get_type(&self, _database: &BuiltinCallableDatabase) -> ValueType { + fn get_type(&self, _context: &ExecutionContext) -> ValueType { ValueType::File } } @@ -63,16 +63,13 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::ToString, "File::to_string", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: File ) -> IString { - let mut file = this.content.reopen().map_err(|error| GenericFailure(format!("Failed to re-open file: {error:?}").into()).to_error(stack_trace.iter()))?; + let mut file = this.content.reopen().map_err(|error| GenericFailure(format!("Failed to re-open file: {error:?}").into()).to_error(context.stack_trace))?; let mut content = String::new(); - file.read_to_string(&mut content).map_err(|error| GenericFailure(format!("File was not UTF8 encoded: {error:?}").into()).to_error(stack_trace.iter()))?; + file.read_to_string(&mut content).map_err(|error| GenericFailure(format!("File was not UTF8 encoded: {error:?}").into()).to_error(context.stack_trace))?; Ok(IString(ImString::from(content))) } diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index 1ae241f..84a70f5 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -27,17 +27,14 @@ use std::{ ops::{BitAnd, BitOr, BitXor, Not, Shl, Shr}, }; -use crate::{ - compile::SourceReference, - execution::{ - errors::{ExpressionResult, GenericFailure, Raise}, - logging::RuntimeLog, - values::{ - closure::BuiltinCallableDatabase, integer::methods::MethodSet, BuiltinFunction, - MissingAttributeError, StaticType, - }, - Stack, +use crate::execution::{ + errors::{ExpressionResult, GenericFailure, Raise}, + logging::StackTrace, + values::{ + closure::BuiltinCallableDatabase, integer::methods::MethodSet, BuiltinFunction, + MissingAttributeError, StaticType, }, + ExecutionContext, }; use super::{value_type::ValueType, Object, StaticTypeName, Value}; @@ -57,188 +54,105 @@ where Self: StaticTypeName + Into, Value: AsVariant, { - fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { + fn get_type(&self, _context: &ExecutionContext) -> ValueType { I::static_type() } - fn bit_and( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn bit_and(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(Self(self.0 & rhs.0).into()) } - fn bit_or( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn bit_or(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(Self(self.0 | rhs.0).into()) } - fn bit_xor( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn bit_xor(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(Self(self.0 ^ rhs.0).into()) } - fn cmp( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn cmp(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(self.0.cmp(&rhs.0)) } - fn addition( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn addition(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(Self(self.0.checked_add(&rhs.0).ok_or_else(|| { GenericFailure( "Integer overflow: The computed value is too large to store in the integer".into(), ) - .to_error(stack_trace) + .to_error(context.stack_trace) })?) .into()) } - fn subtraction( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn subtraction(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(Self(self.0.checked_sub(&rhs.0).ok_or_else(|| { GenericFailure( "Integer underflow: The computed value is too small to store in the integer".into(), ) - .to_error(stack_trace) + .to_error(context.stack_trace) })?) .into()) } - fn multiply( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn multiply(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(Self(self.0.checked_mul(&rhs.0).ok_or_else(|| { GenericFailure( "Integer overflow: The computed value is too large to store in the integer".into(), ) - .to_error(stack_trace) + .to_error(context.stack_trace) })?) .into()) } - fn divide( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn divide(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(Self( self.0 .checked_div(&rhs.0) - .ok_or_else(|| GenericFailure("The computed value is either too large to store in the integer or you attempted to divide by zero".into()).to_error(stack_trace))?, + .ok_or_else(|| GenericFailure("The computed value is either too large to store in the integer or you attempted to divide by zero".into()).to_error(context.stack_trace))?, ) .into()) } - fn exponent( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn exponent(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; // This failure can only happen on 32bit (or less) systems. let rhs = rhs.0.to_usize().ok_or_else(|| { GenericFailure( "Integer overflow: The requested exponent is larger than the host machine word size".into(), ) - .to_error(stack_trace) + .to_error(context.stack_trace) })?; Ok(Self(checked_pow(self.0, rhs).ok_or_else(|| { GenericFailure( "Integer overflow: The computed value is too large to store in the integer".into(), ) - .to_error(stack_trace) + .to_error(context.stack_trace) })?) .into()) } - fn left_shift( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn left_shift(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(Self(self.0 << rhs.0).into()) } - fn right_shift( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn right_shift(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(Self(self.0 >> rhs.0).into()) } - fn unary_plus( - self, - _log: &mut dyn RuntimeLog, - _stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - ) -> ExpressionResult { + fn unary_plus(self, _context: &ExecutionContext) -> ExpressionResult { Ok(self.clone().into()) } - fn unary_minus( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - ) -> ExpressionResult { - self.0.neg(stack_trace).into() + fn unary_minus(self, context: &ExecutionContext) -> ExpressionResult { + self.0.neg(context.stack_trace).into() } - fn unary_not( - self, - _log: &mut dyn RuntimeLog, - _stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - ) -> ExpressionResult { + fn unary_not(self, _context: &ExecutionContext) -> ExpressionResult { Ok(Self(!self.0).into()) } fn get_attribute( &self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, attribute: &str, ) -> ExpressionResult { match attribute { @@ -309,7 +223,7 @@ where _ => Err(MissingAttributeError { name: attribute.into(), } - .to_error(stack_trace)), + .to_error(context.stack_trace)), } } } @@ -345,7 +259,7 @@ trait IntOps: { type MethodSet: MethodSet + 'static; - fn neg(&self, stack_trace: &[SourceReference]) -> ExpressionResult; + fn neg(&self, stack_trace: &StackTrace) -> ExpressionResult; fn count_ones(&self) -> u64; fn count_zeros(&self) -> u64; @@ -376,7 +290,7 @@ trait IntOps: impl IntOps for i64 { type MethodSet = methods::SignedIntegerMethodSet; - fn neg(&self, _stack_trace: &[SourceReference]) -> ExpressionResult { + fn neg(&self, _stack_trace: &StackTrace) -> ExpressionResult { Ok(SignedInteger::from(-self).into()) } @@ -460,7 +374,7 @@ impl StaticType for i64 { impl IntOps for u64 { type MethodSet = methods::UnsignedIntegerMethodSet; - fn neg(&self, stack_trace: &[SourceReference]) -> ExpressionResult { + fn neg(&self, stack_trace: &StackTrace) -> ExpressionResult { Err(super::UnsupportedOperationError { type_name: UnsignedInteger::static_type_name().into(), operation_name: "negate", @@ -635,198 +549,150 @@ mod methods { build_method!( database, forward = ::CountOnes, format!("{}::count_ones", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, - this: Integer) -> UnsignedInteger - { + _context: &ExecutionContext, + this: Integer + ) -> UnsignedInteger { Ok(UnsignedInteger::from(this.0.count_ones())) } ); build_method!( database, forward = ::CountZeros, format!("{}::count_zeros", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, - this: Integer) -> UnsignedInteger - { + _context: &ExecutionContext, + this: Integer + ) -> UnsignedInteger { Ok(UnsignedInteger::from(this.0.count_zeros())) } ); build_method!( database, forward = ::LeadingZeros, format!("{}::leading_zeros", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, - this: Integer) -> UnsignedInteger - { + _context: &ExecutionContext, + this: Integer + ) -> UnsignedInteger { Ok(UnsignedInteger::from(this.0.leading_zeros())) } ); build_method!( database, forward = ::TrailingZeros, format!("{}::trailing_zeros", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, - this: Integer) -> UnsignedInteger - { + _context: &ExecutionContext, + this: Integer + ) -> UnsignedInteger { Ok(UnsignedInteger::from(this.0.trailing_zeros())) } ); build_method!( database, forward = ::LeadingOnes, format!("{}::leading_ones", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, - this: Integer) -> UnsignedInteger - { + _context: &ExecutionContext, + this: Integer + ) -> UnsignedInteger { Ok(UnsignedInteger::from(this.0.leading_ones())) } ); build_method!( database, forward = ::TrailingOnes, format!("{}::trailing_ones", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, - this: Integer) -> UnsignedInteger - { + _context: &ExecutionContext, + this: Integer + ) -> UnsignedInteger { Ok(UnsignedInteger::from(this.0.trailing_ones())) } ); build_method!( database, forward = ::RotateLeft, format!("{}::rotate_left", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + _context: &ExecutionContext, this: Integer, - n: UnsignedInteger) -> Integer - { + n: UnsignedInteger + ) -> Integer { Ok(Integer::::from(this.0.rotate_left(n.0))) } ); build_method!( database, forward = ::RotateRight, format!("{}::rotate_right", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + _context: &ExecutionContext, this: Integer, - n: UnsignedInteger) -> Integer - { + n: UnsignedInteger + ) -> Integer { Ok(Integer::::from(this.0.rotate_right(n.0))) } ); build_method!( database, forward = ::ReverseBits, format!("{}::reverse_bits", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, - this: Integer) -> Integer - { + _context: &ExecutionContext, + this: Integer + ) -> Integer { Ok(Integer::::from(this.0.reverse_bits())) } ); build_method!( database, forward = ::Abs, format!("{}::abs", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, - this: Integer) -> Integer - { + _context: &ExecutionContext, + this: Integer + ) -> Integer { Ok(Integer::::from(this.0.abs())) } ); build_method!( database, forward = ::Sqrt, format!("{}::sqrt", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, - this: Integer) -> Integer - { + _context: &ExecutionContext, + this: Integer + ) -> Integer { Ok(Integer::::from(this.0.sqrt())) } ); build_method!( database, forward = ::AbsDiff, format!("{}::abs_diff", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Integer, - other: Value) -> UnsignedInteger - { - let other = other.downcast::>(stack_trace)?; + other: Value + ) -> UnsignedInteger { + let other = other.downcast::>(context.stack_trace)?; Ok(UnsignedInteger::from(this.0.abs_diff(other.0))) } ); build_method!( database, forward = ::Signum, format!("{}::signum", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, - this: Integer) -> SignedInteger - { + _context: &ExecutionContext, + this: Integer + ) -> SignedInteger { Ok(SignedInteger::from(this.0.signum())) } ); build_method!( database, forward = ::IsPositive, format!("{}::is_positive", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, - this: Integer) -> Boolean - { + _context: &ExecutionContext, + this: Integer + ) -> Boolean { Ok(Boolean(this.0.is_positive())) } ); build_method!( database, forward = ::IsNegative, format!("{}::is_negative", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, - this: Integer) -> Boolean - { + _context: &ExecutionContext, + this: Integer + ) -> Boolean { Ok(Boolean(this.0.is_negative())) } ); build_method!( database, forward = ::Midpoint, format!("{}::midpoint", Integer::::static_type_name()), ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Integer, - rhs: Value) -> Integer - { - let rhs = rhs.downcast::>(stack_trace)?; + rhs: Value + ) -> Integer { + let rhs = rhs.downcast::>(context.stack_trace)?; Ok(Integer::::from(this.0.midpoint(rhs.0))) } ); diff --git a/crates/interpreter/src/execution/values/list.rs b/crates/interpreter/src/execution/values/list.rs index 28b7456..097523c 100644 --- a/crates/interpreter/src/execution/values/list.rs +++ b/crates/interpreter/src/execution/values/list.rs @@ -18,16 +18,15 @@ use crate::{ build_closure_type, build_method, - compile::{AstNode, Expression, SourceReference}, + compile::{AstNode, Expression}, execute_expression, execution::{ errors::{Error, ErrorType, GenericFailure, Raise as _}, - logging::RuntimeLog, - stack::Stack, values::{ closure::BuiltinCallableDatabase, Boolean, BuiltinFunction, Dictionary, MissingAttributeError, StaticType, UnsignedInteger, ValueNone, }, + ExecutionContext, }, }; @@ -47,31 +46,28 @@ pub struct List { impl List { pub fn from_ast( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, ast_node: &AstNode>>, ) -> ExpressionResult { let values: ExpressionResult> = ast_node .node .iter() - .map(|expression| execute_expression(log, stack_trace, stack, database, expression)) + .map(|expression| execute_expression(context, expression)) .collect(); - Ok(List::from_iter(database, values?)) + Ok(List::from_iter(context, values?)) } - pub fn from_iter(database: &BuiltinCallableDatabase, iterator: I) -> Self + pub fn from_iter(context: &ExecutionContext, iterator: I) -> Self where I: IntoIterator, { let values: Vec<_> = iterator.into_iter().collect(); let internal_type = - if let Some(initial_type) = values.first().map(|first| first.get_type(database)) { + if let Some(initial_type) = values.first().map(|first| first.get_type(context)) { Some(values.iter().fold(initial_type, |accumulated, next| { - accumulated.merge(next.get_type(database)) + accumulated.merge(next.get_type(context)) })) } else { // This is an empty list. @@ -86,8 +82,7 @@ impl List { fn map_raw( &self, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, + context: &ExecutionContext, operation_name: &'static str, mut operation: impl FnMut(&Value) -> ExpressionResult, ) -> ExpressionResult { @@ -103,44 +98,35 @@ impl List { }) }) .collect::>() - .map_err(|error| error.to_error(stack_trace))?; + .map_err(|error| error.to_error(context.stack_trace))?; - Ok(Self::from_iter(database, values)) + Ok(Self::from_iter(context, values)) } fn map_operation( &self, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, + context: &ExecutionContext, operation_name: &'static str, operation: impl FnMut(&Value) -> ExpressionResult, ) -> ExpressionResult { - self.map_raw(stack_trace, database, operation_name, operation) + self.map_raw(context, operation_name, operation) .map(|value| value.into()) } } impl Object for List { - fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { + fn get_type(&self, _context: &ExecutionContext) -> ValueType { ValueType::List(self.internal_type.clone().map(Box::new)) } - fn eq( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn eq(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(self.values == rhs.values) } fn get_attribute( &self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _callable_database: &BuiltinCallableDatabase, + context: &ExecutionContext, attribute: &str, ) -> ExpressionResult { match attribute { @@ -168,201 +154,88 @@ impl Object for List { _ => Err(MissingAttributeError { name: attribute.into(), } - .to_error(stack_trace)), + .to_error(context.stack_trace)), } } - fn and( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "and", move |value| { - value.clone().and(log, stack_trace, database, rhs.clone()) + fn and(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + self.map_operation(context, "and", move |value| { + value.clone().and(context, rhs.clone()) }) } - fn or( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "or", move |value| { - value.clone().or(log, stack_trace, database, rhs.clone()) + fn or(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + self.map_operation(context, "or", move |value| { + value.clone().or(context, rhs.clone()) }) } - fn xor( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "xor", move |value| { - value.clone().xor(log, stack_trace, database, rhs.clone()) + fn xor(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + self.map_operation(context, "xor", move |value| { + value.clone().xor(context, rhs.clone()) }) } - fn bit_and( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "bit and", move |value| { - value - .clone() - .bit_and(log, stack_trace, database, rhs.clone()) + fn bit_and(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + self.map_operation(context, "bit and", move |value| { + value.clone().bit_and(context, rhs.clone()) }) } - fn bit_or( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "bit or", move |value| { - value - .clone() - .bit_or(log, stack_trace, database, rhs.clone()) + fn bit_or(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + self.map_operation(context, "bit or", move |value| { + value.clone().bit_or(context, rhs.clone()) }) } - fn bit_xor( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "bit xor", move |value| { - value - .clone() - .bit_xor(log, stack_trace, database, rhs.clone()) + fn bit_xor(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + self.map_operation(context, "bit xor", move |value| { + value.clone().bit_xor(context, rhs.clone()) }) } - fn addition( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "addition", move |value| { - value - .clone() - .addition(log, stack_trace, database, rhs.clone()) + fn addition(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + self.map_operation(context, "addition", move |value| { + value.clone().addition(context, rhs.clone()) }) } - fn subtraction( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "subtraction", move |value| { - value - .clone() - .subtraction(log, stack_trace, database, rhs.clone()) + fn subtraction(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + self.map_operation(context, "subtraction", move |value| { + value.clone().subtraction(context, rhs.clone()) }) } - fn multiply( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "multiply", move |value| { - value - .clone() - .multiply(log, stack_trace, database, rhs.clone()) + fn multiply(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + self.map_operation(context, "multiply", move |value| { + value.clone().multiply(context, rhs.clone()) }) } - fn divide( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "divide", move |value| { - value - .clone() - .divide(log, stack_trace, database, rhs.clone()) + fn divide(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + self.map_operation(context, "divide", move |value| { + value.clone().divide(context, rhs.clone()) }) } - fn exponent( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "exponent", move |value| { - value - .clone() - .exponent(log, stack_trace, database, rhs.clone()) + fn exponent(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + self.map_operation(context, "exponent", move |value| { + value.clone().exponent(context, rhs.clone()) }) } - fn left_shift( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "left shift", move |value| { - value - .clone() - .left_shift(log, stack_trace, database, rhs.clone()) + fn left_shift(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + self.map_operation(context, "left shift", move |value| { + value.clone().left_shift(context, rhs.clone()) }) } - fn right_shift( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "right shift", move |value| { - value - .clone() - .right_shift(log, stack_trace, database, rhs.clone()) + fn right_shift(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + self.map_operation(context, "right shift", move |value| { + value.clone().right_shift(context, rhs.clone()) }) } - fn unary_plus( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "unary plus", move |value| { - value.clone().unary_plus(log, stack_trace, database) + fn unary_plus(self, context: &ExecutionContext) -> ExpressionResult { + self.map_operation(context, "unary plus", move |value| { + value.clone().unary_plus(context) }) } - fn unary_minus( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "unary minus", move |value| { - value.clone().unary_minus(log, stack_trace, database) + fn unary_minus(self, context: &ExecutionContext) -> ExpressionResult { + self.map_operation(context, "unary minus", move |value| { + value.clone().unary_minus(context) }) } - fn unary_not( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - ) -> ExpressionResult { - self.map_operation(stack_trace, database, "unary not", move |value| { - value.clone().unary_not(log, stack_trace, database) + fn unary_not(self, context: &ExecutionContext) -> ExpressionResult { + self.map_operation(context, "unary not", move |value| { + value.clone().unary_not(context) }) } } @@ -458,26 +331,20 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::Append, "List::append", ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: List, rhs: List ) -> List { let mut content = Arc::unwrap_or_clone(this.values); content.extend_from_slice(&rhs.values); - Ok(List::from_iter(database, content)) + Ok(List::from_iter(context, content)) } ); build_method!( database, forward = methods::Slice, "List::slice", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: List, start: Option = ValueNone.into(), end: Option = ValueNone.into() @@ -498,19 +365,16 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { let slice = this.values.get(start..end); if let Some(slice) = slice { - Ok(List::from_iter(database, slice.into_iter().cloned())) + Ok(List::from_iter(context, slice.into_iter().cloned())) } else { - Err(GenericFailure("Slice out of range".into()).to_error(stack_trace.iter())) + Err(GenericFailure("Slice out of range".into()).to_error(context.stack_trace)) } } ); build_method!( database, forward = methods::Get, "List::get", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: List, i: UnsignedInteger ) -> Value { @@ -519,33 +383,30 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { if let Some(slice) = slice { Ok(slice.clone()) } else { - Err(GenericFailure("Index out of range".into()).to_error(stack_trace.iter())) + Err(GenericFailure("Index out of range".into()).to_error(context.stack_trace)) } } ); build_method!( database, forward = methods::Chunks, "List::chunks", ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: List, size: UnsignedInteger, strict: Boolean = Boolean(true).into() ) -> List { - fn wrap_chunks<'i, I: Iterator>(database: &BuiltinCallableDatabase, chunks: I) -> List { + fn wrap_chunks<'i, I: Iterator>(context: &ExecutionContext, chunks: I) -> List { let mut list = Vec::new(); for chunk in chunks { - list.push(List::from_iter(database, chunk.into_iter().cloned()).into()); + list.push(List::from_iter(context, chunk.into_iter().cloned()).into()); } - List::from_iter(database, list.into_iter()) + List::from_iter(context, list.into_iter()) } let chunks = if strict.0 { - wrap_chunks(database, this.values.chunks_exact(size.0 as usize)) + wrap_chunks(context, this.values.chunks_exact(size.0 as usize)) } else { - wrap_chunks(database, this.values.chunks(size.0 as usize)) + wrap_chunks(context, this.values.chunks(size.0 as usize)) }; Ok(chunks) @@ -555,38 +416,31 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::Map, "List::map",( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: List, - f: MapClosure) -> List - { - let values: Vec = this.values.iter().map(|c| f.call(log, stack_trace, stack, database, Dictionary::new(database, HashMap::from_iter([ + f: MapClosure + ) -> List { + let values: Vec = this.values.iter().map(|c| f.call(context, Dictionary::new(context, HashMap::from_iter([ ( "c".into(), c.clone() ) ])))).collect::>()?; - Ok(List::from_iter(database, values.into_iter())) + Ok(List::from_iter(context, values.into_iter())) } ); build_method!( database, forward = methods::Fold, "List::fold",( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: List, init: Value, - f: FoldClosure) -> Value - { - + f: FoldClosure + ) -> Value { let mut accumulator = init; for component in this.values.iter() { - accumulator = f.call(log, stack_trace, stack, database, Dictionary::new(database, HashMap::from_iter([ + accumulator = f.call(context, Dictionary::new(context, HashMap::from_iter([ ( "c".into(), component.clone() @@ -604,44 +458,38 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::Retain, "List::retain",( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: List, - f: RetainClosure) -> List - { + f: RetainClosure + ) -> List { let mut values: Vec = Vec::with_capacity(this.values.len()); for value in this.values.iter() { - let retain = f.call(log, stack_trace, stack, database, Dictionary::new(database, HashMap::from_iter([ + let retain = f.call(context, Dictionary::new(context, HashMap::from_iter([ ( "c".into(), value.clone() ) - ])))?.downcast::(stack_trace)?; + ])))?.downcast::(context.stack_trace)?; if retain.0 { values.push(value.clone()); } } - Ok(List::from_iter(database, values.into_iter())) + Ok(List::from_iter(context, values.into_iter())) } ); build_method!( database, forward = methods::Sort, "List::sort",( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, - this: List) -> List - { + context: &ExecutionContext, + this: List + ) -> List { let mut errors: Vec = vec![]; let mut values: Vec = Arc::unwrap_or_clone(this.values); values.sort_unstable_by(|left: &Value, right: &Value| { - let result = left.clone().cmp(log, stack_trace, database, right.clone()); + let result = left.clone().cmp(context, right.clone()); match result { Ok(cmp) => cmp, Err(error) => { @@ -652,171 +500,147 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { }); if errors.is_empty() { - Ok(List::from_iter(database, values.into_iter())) + Ok(List::from_iter(context, values.into_iter())) } else { - Err(SortingError { errors }.to_error(stack_trace.iter())) + Err(SortingError { errors }.to_error(context.stack_trace)) } } ); build_method!( database, forward = methods::Reverse, "List::reverse",( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, - this: List) -> List - { + context: &ExecutionContext, + this: List + ) -> List { let mut values: Vec = Arc::unwrap_or_clone(this.values); values.reverse(); - Ok(List::from_iter(database, values.into_iter())) + Ok(List::from_iter(context, values.into_iter())) } ); build_method!( database, forward = methods::Truncate, "List::truncate",( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: List, - length: UnsignedInteger) -> List - { + length: UnsignedInteger + ) -> List { let mut values: Vec = Arc::unwrap_or_clone(this.values); values.truncate(length.0 as usize); - Ok(List::from_iter(database, values.into_iter())) + Ok(List::from_iter(context, values.into_iter())) } ); build_method!( database, forward = methods::Deduplicate, "List::deduplicate",( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, - this: List) -> List - { + context: &ExecutionContext, + this: List + ) -> List { let mut values: Vec = Arc::unwrap_or_clone(this.values); - values.dedup_by(|left, right| left.clone().eq(log, stack_trace, database, right.clone()).unwrap_or(false)); + values.dedup_by(|left, right| left.clone().eq(context, right.clone()).unwrap_or(false)); - Ok(List::from_iter(database, values.into_iter())) + Ok(List::from_iter(context, values.into_iter())) } ); build_method!( database, forward = methods::Union, "List::union",( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: List, - other: List) -> List - { + other: List + ) -> List { let mut values: Vec = Arc::unwrap_or_clone(this.values); for new in other.values.iter() { - if !values.iter().any(|old| old.clone().eq(log, stack_trace, database, new.clone()).unwrap_or(false)) { + if !values.iter().any(|old| old.clone().eq(context, new.clone()).unwrap_or(false)) { values.push(new.clone()); } } - Ok(List::from_iter(database, values.into_iter())) + Ok(List::from_iter(context, values.into_iter())) } ); build_method!( database, forward = methods::Intersection, "List::intersection",( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: List, - other: List) -> List - { + other: List + ) -> List { let mut values: Vec = Vec::new(); for new in other.values.iter() { - if this.values.iter().any(|old| old.clone().eq(log, stack_trace, database, new.clone()).unwrap_or(false)) { + if this.values.iter().any(|old| old.clone().eq(context, new.clone()).unwrap_or(false)) { values.push(new.clone()); } } - Ok(List::from_iter(database, values.into_iter())) + Ok(List::from_iter(context, values.into_iter())) } ); build_method!( database, forward = methods::Difference, "List::difference",( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: List, - other: List) -> List - { + other: List + ) -> List { let mut values: Vec = Vec::new(); // Add values from ourselves that the other list does not have. for new in this.values.iter() { - if !other.values.iter().any(|old| old.clone().eq(log, stack_trace, database, new.clone()).unwrap_or(false)) { + if !other.values.iter().any(|old| old.clone().eq(context, new.clone()).unwrap_or(false)) { values.push(new.clone()); } } - Ok(List::from_iter(database, values.into_iter())) + Ok(List::from_iter(context, values.into_iter())) } ); build_method!( database, forward = methods::SymmetricDifference, "List::symmetric_difference",( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: List, - other: List) -> List - { + other: List + ) -> List { let mut values: Vec = Vec::new(); // Add values from ourselves that the other list does not have. for new in this.values.iter() { - if !other.values.iter().any(|old| old.clone().eq(log, stack_trace, database, new.clone()).unwrap_or(false)) { + if !other.values.iter().any(|old| old.clone().eq(context, new.clone()).unwrap_or(false)) { values.push(new.clone()); } } // Add values from the other list that are not already in the new list. for new in other.values.iter() { - if !this.values.iter().any(|old| old.clone().eq(log, stack_trace, database, new.clone()).unwrap_or(false)) { + if !this.values.iter().any(|old| old.clone().eq(context, new.clone()).unwrap_or(false)) { values.push(new.clone()); } } - Ok(List::from_iter(database, values.into_iter())) + Ok(List::from_iter(context, values.into_iter())) } ); build_method!( database, forward = methods::CartesianProduct, "List::cartesian_product",( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: List, - other: List) -> List - { + other: List + ) -> List { let mut values: Vec = Vec::with_capacity(this.values.len() * other.values.len()); for a in this.values.iter() { for b in other.values.iter() { - let list = List::from_iter(database, [a.clone(), b.clone()].into_iter()); + let list = List::from_iter(context, [a.clone(), b.clone()].into_iter()); values.push(list.into()); } } - Ok(List::from_iter(database, values.into_iter())) + Ok(List::from_iter(context, values.into_iter())) } ); } @@ -825,25 +649,43 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { mod test { use super::*; use crate::execution::{ + build_prelude, + logging::StackTrace, + stack::StackScope, test_run, values::{Boolean, SignedInteger, UnsignedInteger}, }; + use std::sync::Mutex; #[test] fn create_empty() { let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; let product = test_run("[]").unwrap(); - assert_eq!(product, List::from_iter(&database, []).into()); + assert_eq!(product, List::from_iter(&context, []).into()); } #[test] fn create() { let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; let product = test_run("[1u, 2u, 3u]").unwrap(); assert_eq!( product, List::from_iter( - &database, + &context, [ UnsignedInteger::from(1).into(), UnsignedInteger::from(2).into(), @@ -857,11 +699,18 @@ mod test { #[test] fn create_multi_type() { let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; let product = test_run("[1u, 2i, 3u]").unwrap(); assert_eq!( product, List::from_iter( - &database, + &context, [ UnsignedInteger::from(1).into(), SignedInteger::from(2).into(), @@ -875,9 +724,16 @@ mod test { #[test] fn type_detection() { let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; assert_eq!( List::from_iter( - &database, + &context, [ UnsignedInteger::from(1).into(), SignedInteger::from(2).into(), diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index f1b931f..b87bc8c 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -22,12 +22,9 @@ use enum_dispatch::enum_dispatch; use enum_downcast::{AsVariant, EnumDowncast, IntoVariant}; use unwrap_enum::EnumAs; -use crate::{compile::SourceReference, execution::stack::Stack}; +use crate::execution::{logging::StackTrace, ExecutionContext}; -use super::{ - errors::{ErrorType, ExpressionResult, Raise as _}, - logging::RuntimeLog, -}; +use super::errors::{ErrorType, ExpressionResult, Raise as _}; mod void; pub use void::ValueNone; @@ -139,7 +136,7 @@ impl Display for UnsupportedOperationError { impl UnsupportedOperationError { fn raise( object: &O, - stack_trace: &[SourceReference], + stack_trace: &StackTrace, operation_name: &'static str, ) -> ExpressionResult { Err(Self { @@ -165,11 +162,11 @@ impl Display for MissingAttributeError { #[enum_dispatch] pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { - fn get_type(&self, callable_database: &BuiltinCallableDatabase) -> ValueType; + fn get_type(&self, context: &ExecutionContext) -> ValueType; // fn format( // &self, - // _log: &mut dyn RuntimeLog, + // _log: &dyn RuntimeLog, // stack_trace: stack_trace: &S[SourceReference], // _f: &mut dyn Write, // _style: Style, @@ -182,195 +179,78 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { Self::static_type_name().into() } - fn and( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "logical and") - } - fn or( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "logical or") - } - fn xor( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "logical xor") - } - fn bit_and( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "binary and") - } - fn bit_or( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "binary or") - } - fn bit_xor( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "binary xor") - } - fn cmp( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "compare") - } - fn eq( - self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - Ok(matches!( - self.cmp(log, stack_trace, database, rhs)?, - Ordering::Equal - )) - } - fn addition( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "addition") - } - fn subtraction( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "subtraction") - } - fn multiply( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "multiply") - } - fn divide( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "divide") - } - fn exponent( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "exponent") - } - fn left_shift( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "left shift") - } - fn right_shift( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - _rhs: Value, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "right shift") + fn and(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "logical and") + } + fn or(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "logical or") + } + fn xor(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "logical xor") + } + fn bit_and(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "binary and") + } + fn bit_or(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "binary or") + } + fn bit_xor(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "binary xor") + } + fn cmp(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "compare") + } + fn eq(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + Ok(matches!(self.cmp(context, rhs)?, Ordering::Equal)) + } + fn addition(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "addition") + } + fn subtraction(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "subtraction") + } + fn multiply(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "multiply") + } + fn divide(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "divide") + } + fn exponent(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "exponent") + } + fn left_shift(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "left shift") + } + fn right_shift(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "right shift") } fn get_attribute( &self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, attribute: &str, ) -> ExpressionResult { Err(MissingAttributeError { name: attribute.into(), } - .to_error(stack_trace)) + .to_error(context.stack_trace)) } - fn call( - &self, - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, - _argument: Dictionary, - ) -> ExpressionResult { - UnsupportedOperationError::raise(self, stack_trace, "call") + fn call(&self, context: &ExecutionContext, _argument: Dictionary) -> ExpressionResult { + UnsupportedOperationError::raise(self, context.stack_trace, "call") } - fn unary_plus( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "unary plus") + fn unary_plus(self, context: &ExecutionContext) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "unary plus") } - fn unary_minus( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "unary minus") + fn unary_minus(self, context: &ExecutionContext) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "unary minus") } - fn unary_not( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - ) -> ExpressionResult { - UnsupportedOperationError::raise(&self, stack_trace, "unary not") + fn unary_not(self, context: &ExecutionContext) -> ExpressionResult { + UnsupportedOperationError::raise(&self, context.stack_trace, "unary not") } // fn export( // &self, - // _log: &mut dyn RuntimeLog, - // stack_trace: &[SourceReference], + // _log: &dyn RuntimeLog, + // stack_trace: &StackScope, // ) -> OperatorResult { // UnsupportedOperationError::raise(self, stack_trace, "export") // } @@ -433,7 +313,7 @@ impl IntoVariant for Value { } impl Value { - pub fn downcast_ref(&self, stack_trace: &[SourceReference]) -> ExpressionResult<&T> + pub fn downcast_ref(&self, stack_trace: &StackTrace) -> ExpressionResult<&T> where T: StaticTypeName, Self: AsVariant, @@ -449,7 +329,7 @@ impl Value { } } - pub fn downcast(self, stack_trace: &[SourceReference]) -> ExpressionResult + pub fn downcast(self, stack_trace: &StackTrace) -> ExpressionResult where T: StaticTypeName, Self: IntoVariant, @@ -464,10 +344,7 @@ impl Value { } } - pub fn downcast_optional( - self, - stack_trace: &[SourceReference], - ) -> ExpressionResult> + pub fn downcast_optional(self, stack_trace: &StackTrace) -> ExpressionResult> where T: StaticTypeName, Self: IntoVariant, diff --git a/crates/interpreter/src/execution/values/scalar.rs b/crates/interpreter/src/execution/values/scalar.rs index 697c939..e951652 100644 --- a/crates/interpreter/src/execution/values/scalar.rs +++ b/crates/interpreter/src/execution/values/scalar.rs @@ -21,26 +21,25 @@ use common_data_types::{Dimension, Float, FloatIsNan}; use crate::{ build_method, - compile::SourceReference, execution::{ errors::{ExpressionResult, GenericFailure, Raise}, - logging::RuntimeLog, + logging::StackTrace, values::{ self, closure::BuiltinCallableDatabase, Boolean, BuiltinFunction, MissingAttributeError, SignedInteger, StaticType, UnsignedInteger, Vector2, }, - Stack, + ExecutionContext, }, }; use super::{value_type::ValueType, DowncastError, Object, StaticTypeName, Value}; pub trait UnwrapNotNan: Sized { - fn unwrap_not_nan(self, stack_trace: &[SourceReference]) -> ExpressionResult; + fn unwrap_not_nan(self, stack_trace: &StackTrace) -> ExpressionResult; } impl UnwrapNotNan for std::result::Result { - fn unwrap_not_nan(self, stack_trace: &[SourceReference]) -> ExpressionResult { + fn unwrap_not_nan(self, stack_trace: &StackTrace) -> ExpressionResult { match self { Ok(number) => Ok(number), Err(_float_is_nan) => Err(GenericFailure( @@ -58,7 +57,7 @@ pub struct Scalar { } impl Object for Scalar { - fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { + fn get_type(&self, _context: &ExecutionContext) -> ValueType { ValueType::Scalar(Some(self.dimension)) } @@ -68,7 +67,7 @@ impl Object for Scalar { // fn format( // &self, - // log: &mut dyn RuntimeLog, + // log: &dyn RuntimeLog, // stack_trace: [SourceReference], // f: &mut dyn fmt::Write, // style: Style, @@ -187,16 +186,10 @@ impl Object for Scalar { // } // } - fn addition( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs = self.unpack_same_dimension(stack_trace, rhs)?; + fn addition(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs = self.unpack_same_dimension(context.stack_trace, rhs)?; - let value = Float::new(*self.value + *rhs.value).unwrap_not_nan(stack_trace)?; + let value = Float::new(*self.value + *rhs.value).unwrap_not_nan(context.stack_trace)?; Ok(Self { value, @@ -204,16 +197,10 @@ impl Object for Scalar { } .into()) } - fn subtraction( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs = self.unpack_same_dimension(stack_trace, rhs)?; + fn subtraction(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs = self.unpack_same_dimension(context.stack_trace, rhs)?; - let value = Float::new(*self.value - *rhs.value).unwrap_not_nan(stack_trace)?; + let value = Float::new(*self.value - *rhs.value).unwrap_not_nan(context.stack_trace)?; Ok(Self { value, @@ -221,70 +208,36 @@ impl Object for Scalar { } .into()) } - fn multiply( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs = rhs.downcast_ref::(stack_trace)?; - self.multiply_by_scalar(stack_trace, rhs) + fn multiply(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs = rhs.downcast_ref::(context.stack_trace)?; + self.multiply_by_scalar(context.stack_trace, rhs) .map(|rhs| rhs.into()) } - fn divide( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs = rhs.downcast_ref::(stack_trace)?; - self.divide_by_measurement(stack_trace, rhs) + fn divide(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs = rhs.downcast_ref::(context.stack_trace)?; + self.divide_by_measurement(context.stack_trace, rhs) .map(|rhs| rhs.into()) } - fn exponent( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs = rhs.downcast::(stack_trace)?; + fn exponent(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs = rhs.downcast::(context.stack_trace)?; Ok(Scalar { dimension: self.dimension * *rhs.value as i8, - value: Float::new(self.value.powf(*rhs.value)).unwrap_not_nan(stack_trace)?, + value: Float::new(self.value.powf(*rhs.value)).unwrap_not_nan(context.stack_trace)?, } .into()) } - fn unary_plus( - self, - _log: &mut dyn RuntimeLog, - _stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - ) -> ExpressionResult { + fn unary_plus(self, _context: &ExecutionContext) -> ExpressionResult { Ok(self.clone().into()) } - fn unary_minus( - self, - _log: &mut dyn RuntimeLog, - _stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - ) -> ExpressionResult { + fn unary_minus(self, _context: &ExecutionContext) -> ExpressionResult { Ok(Self { value: -self.value, ..self.clone() } .into()) } - fn cmp( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs = rhs.downcast_ref::(stack_trace)?; + fn cmp(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs = rhs.downcast_ref::(context.stack_trace)?; if self.dimension == rhs.dimension { Ok(std::cmp::Ord::cmp(&self.value, &rhs.value)) } else { @@ -292,15 +245,13 @@ impl Object for Scalar { expected: self.type_name(), got: rhs.type_name(), } - .to_error(stack_trace)) + .to_error(context.stack_trace)) } } fn get_attribute( &self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _callable_database: &BuiltinCallableDatabase, + context: &ExecutionContext, attribute: &str, ) -> ExpressionResult { match attribute { @@ -345,14 +296,14 @@ impl Object for Scalar { _ => Err(MissingAttributeError { name: attribute.into(), } - .to_error(stack_trace)), + .to_error(context.stack_trace)), } } // fn export( // &self, - // _log: &mut dyn RuntimeLog, - // _stack_trace: &[SourceReference], + // _log: &dyn RuntimeLog, + // _stack_trace: &StackTrace, // ) -> ExpressionResult { // Ok(SerializableValue::Scalar(self.clone())) // } @@ -371,11 +322,7 @@ impl StaticType for Scalar { } impl Scalar { - fn multiply_by_scalar( - &self, - stack_trace: &[SourceReference], - rhs: &Self, - ) -> ExpressionResult { + fn multiply_by_scalar(&self, stack_trace: &StackTrace, rhs: &Self) -> ExpressionResult { let value = Float::new(*self.value * *rhs.value).unwrap_not_nan(stack_trace)?; let dimension = self.dimension + rhs.dimension; @@ -384,7 +331,7 @@ impl Scalar { fn divide_by_measurement( &self, - stack_trace: &[SourceReference], + stack_trace: &StackTrace, rhs: &Self, ) -> ExpressionResult { let value = Float::new(*self.value / *rhs.value).unwrap_not_nan(stack_trace)?; @@ -393,10 +340,7 @@ impl Scalar { Ok(Self { dimension, value }) } - fn check_inverse_trig_compatible( - &self, - stack_trace: &[SourceReference], - ) -> ExpressionResult<()> { + fn check_inverse_trig_compatible(&self, stack_trace: &StackTrace) -> ExpressionResult<()> { if self.dimension.is_zero_dimension() { Ok(()) } else { @@ -404,7 +348,7 @@ impl Scalar { } } - fn check_trig_compatible(&self, stack_trace: &[SourceReference]) -> ExpressionResult<()> { + fn check_trig_compatible(&self, stack_trace: &StackTrace) -> ExpressionResult<()> { if self.dimension.is_zero_dimension() && self.dimension.ratio_type_hint.is_angle() { Ok(()) } else { @@ -415,11 +359,7 @@ impl Scalar { } } - fn unpack_same_dimension( - self, - stack_trace: &[SourceReference], - rhs: Value, - ) -> ExpressionResult { + fn unpack_same_dimension(self, stack_trace: &StackTrace, rhs: Value) -> ExpressionResult { if let Value::Scalar(rhs) = rhs { if self.dimension == rhs.dimension { Ok(rhs) @@ -483,27 +423,21 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::ToSignedInteger, "Scalar::to_signed_integer", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> SignedInteger { if this.dimension.is_zero_dimension() { Ok(values::SignedInteger::from(*this.value as i64).into()) } else { Err(GenericFailure("Only zero dimensional scalars can be converted into an integer".into()) - .to_error(stack_trace.iter())) + .to_error(context.stack_trace)) } } ); build_method!( database, forward = methods::ToUnsignedInteger, "Scalar::to_unsigned_integer", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> UnsignedInteger { if this.dimension.is_zero_dimension() { @@ -511,42 +445,36 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { Ok(values::UnsignedInteger::from(*this.value as u64).into()) } else { Err(GenericFailure("Negative values cannot be converted to signed integers".into()) - .to_error(stack_trace.iter())) + .to_error(context.stack_trace)) } } else { Err(GenericFailure("Only zero dimensional scalars can be converted into an integer".into()) - .to_error(stack_trace.iter())) + .to_error(context.stack_trace)) } } ); build_method!( database, forward = methods::Abs, "Scalar::abs", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { Ok(Scalar { dimension: this.dimension, - value: Float::new(this.value.abs()).unwrap_not_nan(stack_trace)? + value: Float::new(this.value.abs()).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Clamp, "Scalar::clamp", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar, min: Value, max: Value) -> Scalar { - let min = this.unpack_same_dimension(stack_trace, min)?; - let max = this.unpack_same_dimension(stack_trace, max)?; + let min = this.unpack_same_dimension(context.stack_trace, min)?; + let max = this.unpack_same_dimension(context.stack_trace, max)?; Ok(Scalar { dimension: this.dimension, @@ -557,44 +485,35 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::Copysign, "Scalar::copysign", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar, sign: Zero) -> Scalar { Ok(Scalar { dimension: Dimension::zero(), - value: Float::new(this.value.copysign(*sign.value)).unwrap_not_nan(stack_trace)? + value: Float::new(this.value.copysign(*sign.value)).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Hypot, "Scalar::hypot", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar, other: Value) -> Scalar { - let other = this.unpack_same_dimension(stack_trace, other)?; + let other = this.unpack_same_dimension(context.stack_trace, other)?; Ok(Scalar { dimension: Dimension::zero(), - value: Float::new(this.value.hypot(*other.value)).unwrap_not_nan(stack_trace)? + value: Float::new(this.value.hypot(*other.value)).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::IsFinite, "Scalar::is_finite", ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + _context: &ExecutionContext, this: Scalar) -> Boolean { Ok(values::Boolean(this.value.is_finite())) @@ -603,10 +522,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::IsInfinite, "Scalar::is_infinite", ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + _context: &ExecutionContext, this: Scalar) -> Boolean { Ok(values::Boolean(this.value.is_infinite())) @@ -615,10 +531,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::IsNormal, "Scalar::is_normal", ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + _context: &ExecutionContext, this: Scalar) -> Boolean { Ok(values::Boolean(this.value.is_normal()).into()) @@ -627,56 +540,44 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::Cbrt, "Scalar::cbrt", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { Ok(Scalar { dimension: this.dimension / 3, - value: Float::new(this.value.cbrt()).unwrap_not_nan(stack_trace)? + value: Float::new(this.value.cbrt()).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Pow, "Scalar::pow", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar, exp: Zero) -> Scalar { Ok(Scalar { dimension: this.dimension * *exp.value as i8, - value: Float::new(this.value.powf(*exp.value)).unwrap_not_nan(stack_trace)? + value: Float::new(this.value.powf(*exp.value)).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Sqrt, "Scalar::sqrt", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { Ok(Scalar { dimension: this.dimension / 2, - value: Float::new(this.value.sqrt()).unwrap_not_nan(stack_trace)? + value: Float::new(this.value.sqrt()).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::IsSignNegative, "Scalar::is_sign_negative", ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + _context: &ExecutionContext, this: Scalar) -> Boolean { Ok(Boolean(this.value.is_sign_negative())) @@ -685,10 +586,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::IsSignPositive, "Scalar::is_sign_positive", ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + _context: &ExecutionContext, this: Scalar) -> Boolean { Ok(Boolean(this.value.is_sign_positive())) @@ -697,129 +595,108 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::Recip, "Scalar::recip", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { Ok(Scalar { dimension: -this.dimension, - value: Float::new(this.value.recip()).unwrap_not_nan(stack_trace)? + value: Float::new(this.value.recip()).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Round, "Scalar::round", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar, unit: Value) -> Scalar { - let unit = this.unpack_same_dimension(stack_trace, unit)?; + let unit = this.unpack_same_dimension(context.stack_trace, unit)?; let value = this.value / unit.value; Ok(Scalar { dimension: this.dimension, - value: Float::new(value.round() * *unit.value).unwrap_not_nan(stack_trace)? + value: Float::new(value.round() * *unit.value).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Trunc, "Scalar::trunc", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar, unit: Value) -> Scalar { - let unit = this.unpack_same_dimension(stack_trace, unit)?; + let unit = this.unpack_same_dimension(context.stack_trace, unit)?; let value = this.value / unit.value; Ok(Scalar { dimension: this.dimension, - value: Float::new(value.trunc() * *unit.value).unwrap_not_nan(stack_trace)? + value: Float::new(value.trunc() * *unit.value).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Fract, "Scalar::fract", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar, unit: Value) -> Scalar { - let unit = this.unpack_same_dimension(stack_trace, unit)?; + let unit = this.unpack_same_dimension(context.stack_trace, unit)?; let value = this.value / unit.value; Ok(Scalar { dimension: this.dimension, - value: Float::new(value.fract() * *unit.value).unwrap_not_nan(stack_trace)? + value: Float::new(value.fract() * *unit.value).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Floor, "Scalar::floor", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar, unit: Value) -> Scalar { - let unit = this.unpack_same_dimension(stack_trace, unit)?; + let unit = this.unpack_same_dimension(context.stack_trace, unit)?; let value = this.value / unit.value; Ok(Scalar { dimension: this.dimension, - value: Float::new(value.floor() * *unit.value).unwrap_not_nan(stack_trace)? + value: Float::new(value.floor() * *unit.value).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Ceil, "Scalar::ceil", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar, unit: Value) -> Scalar { - let unit = this.unpack_same_dimension(stack_trace, unit)?; + let unit = this.unpack_same_dimension(context.stack_trace, unit)?; let value = this.value / unit.value; Ok(Scalar { dimension: this.dimension, - value: Float::new(value.ceil() * *unit.value).unwrap_not_nan(stack_trace)? + value: Float::new(value.ceil() * *unit.value).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Max, "Scalar::max", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar, other: Value) -> Scalar { - let other = this.unpack_same_dimension(stack_trace, other)?; + let other = this.unpack_same_dimension(context.stack_trace, other)?; Ok(Scalar { dimension: this.dimension, @@ -830,14 +707,11 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::Min, "Scalar::min", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar, other: Value) -> Scalar { - let other = this.unpack_same_dimension(stack_trace, other)?; + let other = this.unpack_same_dimension(context.stack_trace, other)?; Ok(Scalar { dimension: this.dimension, @@ -848,234 +722,192 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::Signum, "Scalar::signum", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { Ok(Scalar { dimension: Dimension::zero(), - value: Float::new(this.value.signum()).unwrap_not_nan(stack_trace)? + value: Float::new(this.value.signum()).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Acos, "Scalar::acos", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { - this.check_inverse_trig_compatible(stack_trace)?; + this.check_inverse_trig_compatible(context.stack_trace)?; Ok(Scalar { dimension: Dimension::angle(), - value: Float::new((this.value * PI).acos()).unwrap_not_nan(stack_trace)? + value: Float::new((this.value * PI).acos()).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Acosh, "Scalar::acosh", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { - this.check_inverse_trig_compatible(stack_trace)?; + this.check_inverse_trig_compatible(context.stack_trace)?; Ok(Scalar { dimension: Dimension::angle(), - value: Float::new((this.value).acosh() / PI).unwrap_not_nan(stack_trace)? + value: Float::new((this.value).acosh() / PI).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Cos, "Scalar::cos", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { - this.check_trig_compatible(stack_trace)?; + this.check_trig_compatible(context.stack_trace)?; Ok(Scalar { dimension: Dimension::zero(), - value: Float::new((this.value * PI).cos()).unwrap_not_nan(stack_trace)? + value: Float::new((this.value * PI).cos()).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Cosh, "Scalar::cosh", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { - this.check_trig_compatible(stack_trace)?; + this.check_trig_compatible(context.stack_trace)?; Ok(Scalar { dimension: Dimension::zero(), - value: Float::new((this.value * PI).cosh()).unwrap_not_nan(stack_trace)? + value: Float::new((this.value * PI).cosh()).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Asin, "Scalar::asin", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { - this.check_inverse_trig_compatible(stack_trace)?; + this.check_inverse_trig_compatible(context.stack_trace)?; Ok(Scalar { dimension: Dimension::angle(), - value: Float::new((this.value * PI).asin()).unwrap_not_nan(stack_trace)? + value: Float::new((this.value * PI).asin()).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Asinh, "Scalar::asinh", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { - this.check_inverse_trig_compatible(stack_trace)?; + this.check_inverse_trig_compatible(context.stack_trace)?; Ok(Scalar { dimension: Dimension::angle(), - value: Float::new((this.value).asinh() / PI).unwrap_not_nan(stack_trace)? + value: Float::new((this.value).asinh() / PI).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Sin, "Scalar::sin", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { - this.check_trig_compatible(stack_trace)?; + this.check_trig_compatible(context.stack_trace)?; Ok(Scalar { dimension: Dimension::zero(), - value: Float::new((this.value * PI).sin()).unwrap_not_nan(stack_trace)? + value: Float::new((this.value * PI).sin()).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Sinh, "Scalar::sinh", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { - this.check_trig_compatible(stack_trace)?; + this.check_trig_compatible(context.stack_trace)?; Ok(Scalar { dimension: Dimension::zero(), - value: Float::new((this.value * PI).sinh()).unwrap_not_nan(stack_trace)? + value: Float::new((this.value * PI).sinh()).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::CosSin, "Scalar::cossin", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Vector2 { - this.check_trig_compatible(stack_trace)?; + this.check_trig_compatible(context.stack_trace)?; let (sin, cos) = (this.value * PI).sin_cos(); - Vector2::new(stack_trace, Dimension::zero(), [cos, sin]) + Vector2::new(context, Dimension::zero(), [cos, sin]) } ); build_method!( database, forward = methods::Atan, "Scalar::atan", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { - this.check_inverse_trig_compatible(stack_trace)?; + this.check_inverse_trig_compatible(context.stack_trace)?; Ok(Scalar { dimension: Dimension::angle(), - value: Float::new((this.value * PI).atan()).unwrap_not_nan(stack_trace)? + value: Float::new((this.value * PI).atan()).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Atanh, "Scalar::atanh", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { - this.check_inverse_trig_compatible(stack_trace)?; + this.check_inverse_trig_compatible(context.stack_trace)?; Ok(Scalar { dimension: Dimension::angle(), - value: Float::new((this.value).atanh() / PI).unwrap_not_nan(stack_trace)? + value: Float::new((this.value).atanh() / PI).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Tan, "Scalar::tan", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { - this.check_trig_compatible(stack_trace)?; + this.check_trig_compatible(context.stack_trace)?; Ok(Scalar { dimension: Dimension::zero(), - value: Float::new((this.value * PI).tan()).unwrap_not_nan(stack_trace)? + value: Float::new((this.value * PI).tan()).unwrap_not_nan(context.stack_trace)? }) } ); build_method!( database, forward = methods::Tanh, "Scalar::tanh", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Scalar) -> Scalar { - this.check_trig_compatible(stack_trace)?; + this.check_trig_compatible(context.stack_trace)?; Ok(Scalar { dimension: Dimension::zero(), - value: Float::new((this.value * PI).tanh()).unwrap_not_nan(stack_trace)? + value: Float::new((this.value * PI).tanh()).unwrap_not_nan(context.stack_trace)? }) } ); diff --git a/crates/interpreter/src/execution/values/string.rs b/crates/interpreter/src/execution/values/string.rs index 6829fde..5c38aa5 100644 --- a/crates/interpreter/src/execution/values/string.rs +++ b/crates/interpreter/src/execution/values/string.rs @@ -18,13 +18,10 @@ use imstr::ImString; -use crate::{ - compile::SourceReference, - execution::{ - errors::Raise, - logging::RuntimeLog, - values::{closure::BuiltinCallableDatabase, MissingAttributeError, StaticType}, - }, +use crate::execution::{ + errors::Raise, + values::{MissingAttributeError, StaticType}, + ExecutionContext, }; use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; @@ -35,26 +32,18 @@ use std::borrow::Cow; pub struct IString(pub ImString); impl Object for IString { - fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { + fn get_type(&self, _context: &ExecutionContext) -> ValueType { ValueType::Boolean } - fn eq( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(stack_trace)?; + fn eq(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(self.0 == rhs.0) } fn get_attribute( &self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - database: &BuiltinCallableDatabase, + context: &ExecutionContext, attribute: &str, ) -> ExpressionResult { // build_closure_type!(MapClosure(character: IString) -> ValueType::Any); @@ -64,9 +53,9 @@ impl Object for IString { // "map" => { // let value = static_method!( // String_map( - // _log: &mut dyn RuntimeLog, - // stack_trace: &mut Vec, - // _stack: &mut Stack, + // _log: &dyn RuntimeLog, + // stack_trace: &StackTrace, + // _stack: &StackScope, // this: ValueType, // for_each: MapClosure) -> ValueType::TypeNone // { @@ -78,9 +67,9 @@ impl Object for IString { // "fold" => { // let value = static_method!( // String_map( - // _log: &mut dyn RuntimeLog, - // stack_trace: &mut Vec, - // _stack: &mut Stack, + // _log: &dyn RuntimeLog, + // stack_trace: &StackTrace, + // _stack: &StackScope, // this: ValueType, // for_each: FoldClosure) -> ValueType::TypeNone // { @@ -92,7 +81,7 @@ impl Object for IString { _ => Err(MissingAttributeError { name: attribute.into(), } - .to_error(stack_trace)), + .to_error(context.stack_trace)), } } } diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index ad783c3..86f6fbc 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -19,6 +19,7 @@ use std::{borrow::Cow, collections::HashMap, fmt::Display, sync::Arc}; use common_data_types::Dimension; use hashable_map::HashableMap; +use imstr::ImString; use super::{ closure::Signature as ClosureSignature, Boolean, Object, SignedInteger, StaticTypeName, @@ -27,16 +28,15 @@ use super::{ use crate::{ build_method, - compile::{self, AstNode, SourceReference}, + compile::{self, AstNode}, execute_expression, execution::{ errors::{ErrorType, ExpressionResult, Raise}, - logging::RuntimeLog, - stack::Stack, values::{ self, closure::BuiltinCallableDatabase, dictionary::DictionaryData, BuiltinFunction, Dictionary, File, IString, MissingAttributeError, }, + ExecutionContext, }, }; @@ -181,27 +181,19 @@ impl Display for ValueType { } impl Object for ValueType { - fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { + fn get_type(&self, _context: &ExecutionContext) -> ValueType { ValueType::ValueType } - fn bit_or( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: Self = rhs.downcast(stack_trace)?; + fn bit_or(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: Self = rhs.downcast(context.stack_trace)?; Ok(self.merge(rhs).into()) } fn get_attribute( &self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, attribute: &str, ) -> ExpressionResult { match attribute { @@ -210,7 +202,7 @@ impl Object for ValueType { _ => Err(MissingAttributeError { name: attribute.into(), } - .to_error(stack_trace)), + .to_error(context.stack_trace)), } } } @@ -230,14 +222,11 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::Qualify, "ValueType::qualify", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: ValueType, to_qualify: Value) -> ValueNone { - this.check_other_qualifies(&to_qualify.get_type(database)).map_err(|error| error.to_error(stack_trace.iter()))?; + this.check_other_qualifies(&to_qualify.get_type(context)).map_err(|error| error.to_error(context.stack_trace))?; Ok(values::ValueNone) } ); @@ -245,14 +234,11 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::TryQualify, "ValueType::try_qualify", ( - _log: &mut dyn RuntimeLog, - _stack_trace: &mut Vec, - _stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: ValueType, to_qualify: Value) -> values::Boolean { - Ok(values::Boolean(this.check_other_qualifies(&to_qualify.get_type(database)).is_ok())) + Ok(values::Boolean(this.check_other_qualifies(&to_qualify.get_type(context)).is_ok())) } ); } @@ -265,22 +251,13 @@ pub struct StructMember { impl StructMember { fn new( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, source: &AstNode, ) -> ExpressionResult { - let ty = execute_expression(log, stack_trace, stack, database, &source.node.ty)? - .downcast::(stack_trace)?; + let ty = execute_expression(context, &source.node.ty)? + .downcast::(context.stack_trace)?; let default = if let Some(default) = source.node.default.as_ref() { - Some(execute_expression( - log, - stack_trace, - stack, - database, - default, - )?) + Some(execute_expression(context, default)?) } else { None }; @@ -301,25 +278,19 @@ impl Display for StructMember { #[derive(Debug, Clone, Eq, PartialEq)] pub struct StructDefinition { - pub members: Arc>, + pub members: Arc>, pub variadic: bool, } impl StructDefinition { pub fn new( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, source: &AstNode, ) -> ExpressionResult { let mut members = HashMap::new(); for member in source.node.members.iter() { let name = member.node.name.node.clone(); - members.insert( - name, - StructMember::new(log, stack_trace, stack, database, member)?, - ); + members.insert(name, StructMember::new(context, member)?); } let members = Arc::new(HashableMap::from(members)); @@ -330,7 +301,7 @@ impl StructDefinition { pub fn fill_defaults(&self, dictionary: Dictionary) -> Dictionary { let data = Arc::unwrap_or_clone(dictionary.data); - let mut members = data.members; + let mut members: HashableMap = data.members; let struct_def_variadic = data.struct_def.variadic; let mut struct_def_members = Arc::unwrap_or_clone(data.struct_def.members); @@ -447,8 +418,8 @@ impl StaticTypeName for StructDefinition { } } -impl From> for StructDefinition { - fn from(map: HashMap) -> Self { +impl From> for StructDefinition { + fn from(map: HashMap) -> Self { Self { members: Arc::new(HashableMap::from(map)), variadic: false, @@ -458,7 +429,7 @@ impl From> for StructDefinition { #[derive(Debug, Eq, PartialEq)] pub struct MissmatchedField { - pub name: String, + pub name: ImString, pub error: TypeQualificationError, } @@ -506,8 +477,9 @@ impl Display for TypeQualificationError { #[cfg(test)] mod test { use pretty_assertions::assert_eq; + use std::sync::Mutex; - use crate::execution::test_run; + use crate::execution::{build_prelude, logging::StackTrace, stack::StackScope, test_run}; use super::*; @@ -637,10 +609,17 @@ mod test { let closure = closure.as_userclosure().unwrap(); let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; closure - .get_type(&database) - .check_other_qualifies(&closure.get_type(&database)) + .get_type(&context) + .check_other_qualifies(&closure.get_type(&context)) .unwrap(); } @@ -653,10 +632,17 @@ mod test { let dictionary = dictionary.as_dictionary().unwrap(); let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; structure - .get_type(&database) - .check_other_qualifies(&dictionary.get_type(&database)) + .get_type(&context) + .check_other_qualifies(&dictionary.get_type(&context)) .unwrap(); } @@ -669,9 +655,16 @@ mod test { let dictionary = dictionary.as_dictionary().unwrap(); let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; structure - .check_other_qualifies(&dictionary.get_type(&database)) + .check_other_qualifies(&dictionary.get_type(&context)) .unwrap(); } @@ -684,9 +677,16 @@ mod test { let dictionary = dictionary.as_dictionary().unwrap(); let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; structure - .check_other_qualifies(&dictionary.get_type(&database)) + .check_other_qualifies(&dictionary.get_type(&context)) .unwrap(); } @@ -699,9 +699,16 @@ mod test { let dictionary = dictionary.as_dictionary().unwrap(); let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; structure - .check_other_qualifies(&dictionary.get_type(&database)) + .check_other_qualifies(&dictionary.get_type(&context)) .unwrap_err(); } @@ -714,9 +721,16 @@ mod test { let dictionary = dictionary.as_dictionary().unwrap(); let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; structure - .check_other_qualifies(&dictionary.get_type(&database)) + .check_other_qualifies(&dictionary.get_type(&context)) .unwrap(); } @@ -729,9 +743,16 @@ mod test { let dictionary = dictionary.as_dictionary().unwrap(); let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; structure - .check_other_qualifies(&dictionary.get_type(&database)) + .check_other_qualifies(&dictionary.get_type(&context)) .unwrap(); } @@ -812,18 +833,32 @@ mod test { let closure = closure.as_userclosure().unwrap(); let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; ValueType::Any - .check_other_qualifies(&closure.get_type(&database)) + .check_other_qualifies(&closure.get_type(&context)) .unwrap(); let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); let dictionary = dictionary.as_dictionary().unwrap(); let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; ValueType::Any - .check_other_qualifies(&dictionary.get_type(&database)) + .check_other_qualifies(&dictionary.get_type(&context)) .unwrap(); ValueType::Any diff --git a/crates/interpreter/src/execution/values/vector.rs b/crates/interpreter/src/execution/values/vector.rs index c52570c..cf6080b 100644 --- a/crates/interpreter/src/execution/values/vector.rs +++ b/crates/interpreter/src/execution/values/vector.rs @@ -4,16 +4,16 @@ use nalgebra::{Dim, RawStorage}; use crate::{ build_closure_type, build_method, - compile::{self, AstNode, SourceReference}, + compile::{self, AstNode}, execute_expression, execution::{ errors::{ExpressionResult, GenericFailure, Raise as _}, - logging::RuntimeLog, - stack::Stack, + logging::StackTrace, values::{ closure::BuiltinCallableDatabase, scalar::UnwrapNotNan, BuiltinFunction, DowncastError, MissingAttributeError, Object, Scalar, StaticType, StaticTypeName, Value, ValueType, }, + ExecutionContext, }, }; @@ -43,74 +43,40 @@ where Self: StaticTypeName + Into, Value: IntoVariant + AsVariant, { - fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { + fn get_type(&self, _context: &ExecutionContext) -> ValueType { I::get_type(self.dimension) } - fn addition( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs = self.unpack_same_dimension(stack_trace, rhs)?; + fn addition(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs = self.unpack_same_dimension(context.stack_trace, rhs)?; let value = self.value + rhs.value; - Ok(Self::new_raw(stack_trace, self.dimension, value)?.into()) + Ok(Self::new_raw(context, self.dimension, value)?.into()) } - fn subtraction( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs = self.unpack_same_dimension(stack_trace, rhs)?; + fn subtraction(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs = self.unpack_same_dimension(context.stack_trace, rhs)?; let value = self.value - rhs.value; - Ok(Self::new_raw(stack_trace, self.dimension, value)?.into()) + Ok(Self::new_raw(context, self.dimension, value)?.into()) } - fn multiply( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs = rhs.downcast_ref::(stack_trace)?; + fn multiply(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs = rhs.downcast_ref::(context.stack_trace)?; let value = self.value * *rhs.value; let dimension = self.dimension + rhs.dimension; - Ok(Self::new_raw(stack_trace, dimension, value)?.into()) + Ok(Self::new_raw(context, dimension, value)?.into()) } - fn divide( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs = rhs.downcast_ref::(stack_trace)?; + fn divide(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs = rhs.downcast_ref::(context.stack_trace)?; let value = self.value / *rhs.value; let dimension = self.dimension - rhs.dimension; - Ok(Self::new_raw(stack_trace, dimension, value)?.into()) + Ok(Self::new_raw(context, dimension, value)?.into()) } - fn unary_plus( - self, - _log: &mut dyn RuntimeLog, - _stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - ) -> ExpressionResult { + fn unary_plus(self, _context: &ExecutionContext) -> ExpressionResult { Ok(self.clone().into()) } - fn unary_minus( - self, - _log: &mut dyn RuntimeLog, - _stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - ) -> ExpressionResult { + fn unary_minus(self, _context: &ExecutionContext) -> ExpressionResult { Ok(Self { value: -self.value, ..self.clone() @@ -118,27 +84,19 @@ where .into()) } - fn eq( - self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, - rhs: Value, - ) -> ExpressionResult { - let rhs: Self = rhs.downcast(stack_trace)?; + fn eq(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: Self = rhs.downcast(context.stack_trace)?; Ok(self.dimension == rhs.dimension && self.value == rhs.value) } fn get_attribute( &self, - log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, attribute: &str, ) -> ExpressionResult { - if let Some(value) = - self.value - .get_attribute(log, stack_trace, attribute, self.dimension)? + if let Some(value) = self + .value + .get_attribute(context, attribute, self.dimension)? { Ok(value) } else { @@ -186,7 +144,7 @@ where _ => Err(MissingAttributeError { name: attribute.into(), } - .to_error(stack_trace)), + .to_error(context.stack_trace)), } } } @@ -199,27 +157,24 @@ where Value: IntoVariant + AsVariant, { pub fn new( - stack_trace: &[SourceReference], + context: &ExecutionContext, dimension: Dimension, value: I::BuildFrom, ) -> ExpressionResult { let value = I::build(value); - Self::new_raw(stack_trace, dimension, value) + Self::new_raw(context, dimension, value) } pub fn from_ast( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, ast_node: &AstNode>, ) -> ExpressionResult { - I::from_ast(log, stack_trace, stack, database, ast_node) + I::from_ast(context, ast_node) } fn new_raw( - stack_trace: &[SourceReference], + context: &ExecutionContext, dimension: Dimension, value: I, ) -> ExpressionResult { @@ -228,16 +183,12 @@ where } else { Err( GenericFailure("Result of arithmetic operation is NaN".into()) - .to_error(stack_trace), + .to_error(context.stack_trace), ) } } - fn unpack_same_dimension( - self, - stack_trace: &[SourceReference], - rhs: Value, - ) -> ExpressionResult { + fn unpack_same_dimension(self, stack_trace: &StackTrace, rhs: Value) -> ExpressionResult { let rhs: Vector = rhs.downcast(stack_trace)?; if self.dimension == rhs.dimension { @@ -343,48 +294,39 @@ mod methods { build_method!( database, forward = M::Abs, format!("Vector{dimension}::abs"), ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Vector) -> Vector { let value = this.value.abs(); - Vector::new_raw(stack_trace, this.dimension, value) + Vector::new_raw(context, this.dimension, value) } ); build_method!( database, forward = M::AddScalar, format!("Vector{dimension}::add_scalar"), ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Vector, value: Scalar) -> Vector { if this.dimension == value.dimension { let value = this.value.add_scalar(*value.value); - Vector::new_raw(stack_trace, this.dimension, value) + Vector::new_raw(context, this.dimension, value) } else { Err(DowncastError { expected: this.type_name(), got: value.type_name(), } - .to_error(stack_trace.iter())) + .to_error(context.stack_trace)) } } ); build_method!( database, forward = M::AMax, format!("Vector{dimension}::amax"), ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Vector) -> Scalar { - let value = common_data_types::Float::new(this.value.amax()).unwrap_not_nan(stack_trace)?; + let value = common_data_types::Float::new(this.value.amax()).unwrap_not_nan(context.stack_trace)?; Ok(Scalar { dimension: this.dimension, @@ -395,13 +337,10 @@ mod methods { build_method!( database, forward = M::AMin, format!("Vector{dimension}::amin"), ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Vector) -> Scalar { - let value = common_data_types::Float::new(this.value.amin()).unwrap_not_nan(stack_trace)?; + let value = common_data_types::Float::new(this.value.amin()).unwrap_not_nan(context.stack_trace)?; Ok(Scalar { dimension: this.dimension, @@ -412,16 +351,13 @@ mod methods { build_method!( database, forward = M::Dot, format!("Vector{dimension}::dot"), ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Vector, rhs: Value) -> Scalar { - let rhs = rhs.downcast::>(stack_trace)?; + let rhs = rhs.downcast::>(context.stack_trace)?; if this.dimension == rhs.dimension { - let value = common_data_types::Float::new(this.value.dot(&rhs.value)).unwrap_not_nan(stack_trace)?; + let value = common_data_types::Float::new(this.value.dot(&rhs.value)).unwrap_not_nan(context.stack_trace)?; Ok(Scalar { dimension: this.dimension, @@ -432,20 +368,17 @@ mod methods { expected: this.type_name(), got: rhs.type_name(), } - .to_error(stack_trace.iter())) + .to_error(context.stack_trace)) } } ); build_method!( database, forward = M::Norm, format!("Vector{dimension}::norm"),( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Vector) -> Scalar { - let value = common_data_types::Float::new(this.value.norm()).unwrap_not_nan(stack_trace)?; + let value = common_data_types::Float::new(this.value.norm()).unwrap_not_nan(context.stack_trace)?; Ok(Scalar { dimension: this.dimension, @@ -456,28 +389,22 @@ mod methods { build_method!( database, forward = M::Normalize, format!("Vector{dimension}::normalize"),( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Vector) -> Vector { let value = this.value.normalize(); - Vector::::new_raw(stack_trace, Dimension::zero(), value) + Vector::::new_raw(context, Dimension::zero(), value) } ); build_method!( database, forward = M::Angle, format!("Vector{dimension}::angle"),( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Vector, other: Value) -> Scalar { - let other = other.downcast::>(stack_trace)?; - let value = common_data_types::Float::new(this.value.angle(&other.value)).unwrap_not_nan(stack_trace)?; + let other = other.downcast::>(context.stack_trace)?; + let value = common_data_types::Float::new(this.value.angle(&other.value)).unwrap_not_nan(context.stack_trace)?; Ok(Scalar { dimension: Dimension::angle(), @@ -488,24 +415,21 @@ mod methods { build_method!( database, forward = M::Map, format!("Vector{dimension}::map"),( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Vector, f: MapClosure) -> Vector { - let operations: ArrayVec<[Value; 4]> = this.value.iter().map(|c| f.call(log, stack_trace, stack, database, Dictionary::new(database, HashMap::from_iter([ + let operations: ArrayVec<[Value; 4]> = this.value.iter().map(|c| f.call(context, Dictionary::new(context, HashMap::from_iter([ ( "c".into(), Scalar { dimension: this.dimension, - value: common_data_types::Float::new(c).unwrap_not_nan(stack_trace)? + value: common_data_types::Float::new(c).unwrap_not_nan(context.stack_trace)? }.into() ) ])))).collect::>()?; - let result: ArrayVec<[Scalar; 4]> = operations.into_iter().map(|v| v.downcast::(stack_trace)).collect::>()?; + let result: ArrayVec<[Scalar; 4]> = operations.into_iter().map(|v| v.downcast::(context.stack_trace)).collect::>()?; // The smallest vector we support is 2, so this should never panic. let dimension = result[0].dimension; @@ -513,20 +437,17 @@ mod methods { for component in result.iter() { if component.dimension != dimension { return Err(GenericFailure("All components of a vector must match".into()) - .to_error(stack_trace.iter())); + .to_error(context.stack_trace)); } } - Ok(Vector::::new_raw(stack_trace, dimension, I::from_iterator(result.iter().map(|c| *c.value)))?) + Ok(Vector::::new_raw(context, dimension, I::from_iterator(result.iter().map(|c| *c.value)))?) } ); build_method!( database, forward = M::Fold, format!("Vector{dimension}::fold"),( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Vector, init: Value, f: FoldClosure) -> Value @@ -534,12 +455,12 @@ mod methods { let mut accumulator = init; for component in this.value.iter() { - accumulator = f.call(log, stack_trace, stack, database, Dictionary::new(database, HashMap::from_iter([ + accumulator = f.call(context, Dictionary::new(context, HashMap::from_iter([ ( "c".into(), Scalar { dimension: this.dimension, - value: common_data_types::Float::new(component).unwrap_not_nan(stack_trace)? + value: common_data_types::Float::new(component).unwrap_not_nan(context.stack_trace)? }.into() ), ( @@ -563,22 +484,19 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, forward = methods::Vector3Cross, "Vector3::cross", ( - _log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - _stack: &mut Stack, - _database: &BuiltinCallableDatabase, + context: &ExecutionContext, this: Vector3, rhs: Vector3) -> Vector3 { if this.dimension == rhs.dimension { let value = this.value.cross(&rhs.value); - Vector3::new_raw(stack_trace, this.dimension, value) + Vector3::new_raw(context, this.dimension, value) } else { Err(DowncastError { expected: this.type_name(), got: rhs.type_name(), } - .to_error(stack_trace.iter())) + .to_error(context.stack_trace)) } } ); @@ -607,10 +525,7 @@ pub trait VectorInternalType: fn get_type(dimension: Dimension) -> ValueType; fn build(value: Self::BuildFrom) -> Self; fn from_ast( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, ast_node: &AstNode>, ) -> ExpressionResult>; fn from_iterator(iterator: I) -> Self @@ -619,8 +534,7 @@ pub trait VectorInternalType: fn get_attribute( &self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], + context: &ExecutionContext, attribute: &str, dimension: Dimension, ) -> ExpressionResult>; @@ -652,9 +566,9 @@ where } macro_rules! get_component { - ($log:ident, $stack_trace:ident, $stack:ident, $database:ident, $ast_node:ident, $c:ident) => { - execute_expression($log, $stack_trace, $stack, $database, &$ast_node.node.$c)? - .downcast::($stack_trace)? + ($context:ident, $ast_node:ident, $c:ident) => { + execute_expression($context, &$ast_node.node.$c)? + .downcast::($context.stack_trace)? }; } @@ -672,14 +586,11 @@ impl VectorInternalType for nalgebra::Vector2 { } fn from_ast( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, ast_node: &AstNode>, ) -> ExpressionResult> { - let x = get_component!(log, stack_trace, stack, database, ast_node, x); - let y = get_component!(log, stack_trace, stack, database, ast_node, y); + let x = get_component!(context, ast_node, x); + let y = get_component!(context, ast_node, y); if x.dimension == y.dimension { Ok(Vector { @@ -689,7 +600,7 @@ impl VectorInternalType for nalgebra::Vector2 { } else { Err( GenericFailure("All components of a vector must match".into()) - .to_error(stack_trace.iter()), + .to_error(context.stack_trace), ) } } @@ -703,8 +614,7 @@ impl VectorInternalType for nalgebra::Vector2 { fn get_attribute( &self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], + context: &ExecutionContext, attribute: &str, dimension: Dimension, ) -> ExpressionResult> { @@ -712,14 +622,16 @@ impl VectorInternalType for nalgebra::Vector2 { "x" => Ok(Some( Scalar { dimension, - value: common_data_types::Float::new(self.x).unwrap_not_nan(stack_trace)?, + value: common_data_types::Float::new(self.x) + .unwrap_not_nan(context.stack_trace)?, } .into(), )), "y" => Ok(Some( Scalar { dimension, - value: common_data_types::Float::new(self.y).unwrap_not_nan(stack_trace)?, + value: common_data_types::Float::new(self.y) + .unwrap_not_nan(context.stack_trace)?, } .into(), )), @@ -789,15 +701,12 @@ impl VectorInternalType for nalgebra::Vector3 { } fn from_ast( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, ast_node: &AstNode>, ) -> ExpressionResult> { - let x = get_component!(log, stack_trace, stack, database, ast_node, x); - let y = get_component!(log, stack_trace, stack, database, ast_node, y); - let z = get_component!(log, stack_trace, stack, database, ast_node, z); + let x = get_component!(context, ast_node, x); + let y = get_component!(context, ast_node, y); + let z = get_component!(context, ast_node, z); if x.dimension == y.dimension && x.dimension == z.dimension { Ok(Vector { @@ -807,7 +716,7 @@ impl VectorInternalType for nalgebra::Vector3 { } else { Err( GenericFailure("All components of a vector must match".into()) - .to_error(stack_trace.iter()), + .to_error(context.stack_trace), ) } } @@ -821,8 +730,7 @@ impl VectorInternalType for nalgebra::Vector3 { fn get_attribute( &self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], + context: &ExecutionContext, attribute: &str, dimension: Dimension, ) -> ExpressionResult> { @@ -830,21 +738,24 @@ impl VectorInternalType for nalgebra::Vector3 { "x" => Ok(Some( Scalar { dimension, - value: common_data_types::Float::new(self.x).unwrap_not_nan(stack_trace)?, + value: common_data_types::Float::new(self.x) + .unwrap_not_nan(context.stack_trace)?, } .into(), )), "y" => Ok(Some( Scalar { dimension, - value: common_data_types::Float::new(self.y).unwrap_not_nan(stack_trace)?, + value: common_data_types::Float::new(self.y) + .unwrap_not_nan(context.stack_trace)?, } .into(), )), "z" => Ok(Some( Scalar { dimension, - value: common_data_types::Float::new(self.z).unwrap_not_nan(stack_trace)?, + value: common_data_types::Float::new(self.z) + .unwrap_not_nan(context.stack_trace)?, } .into(), )), @@ -915,16 +826,13 @@ impl VectorInternalType for nalgebra::Vector4 { } fn from_ast( - log: &mut dyn RuntimeLog, - stack_trace: &mut Vec, - stack: &mut Stack, - database: &BuiltinCallableDatabase, + context: &ExecutionContext, ast_node: &AstNode>, ) -> ExpressionResult> { - let x = get_component!(log, stack_trace, stack, database, ast_node, x); - let y = get_component!(log, stack_trace, stack, database, ast_node, y); - let z = get_component!(log, stack_trace, stack, database, ast_node, z); - let w = get_component!(log, stack_trace, stack, database, ast_node, w); + let x = get_component!(context, ast_node, x); + let y = get_component!(context, ast_node, y); + let z = get_component!(context, ast_node, z); + let w = get_component!(context, ast_node, w); if x.dimension == y.dimension && x.dimension == z.dimension && x.dimension == w.dimension { Ok(Vector { @@ -934,7 +842,7 @@ impl VectorInternalType for nalgebra::Vector4 { } else { Err( GenericFailure("All components of a vector must match".into()) - .to_error(stack_trace.iter()), + .to_error(context.stack_trace), ) } } @@ -948,8 +856,7 @@ impl VectorInternalType for nalgebra::Vector4 { fn get_attribute( &self, - _log: &mut dyn RuntimeLog, - stack_trace: &[SourceReference], + context: &ExecutionContext, attribute: &str, dimension: Dimension, ) -> ExpressionResult> { @@ -957,28 +864,32 @@ impl VectorInternalType for nalgebra::Vector4 { "x" => Ok(Some( Scalar { dimension, - value: common_data_types::Float::new(self.x).unwrap_not_nan(stack_trace)?, + value: common_data_types::Float::new(self.x) + .unwrap_not_nan(context.stack_trace)?, } .into(), )), "y" => Ok(Some( Scalar { dimension, - value: common_data_types::Float::new(self.y).unwrap_not_nan(stack_trace)?, + value: common_data_types::Float::new(self.y) + .unwrap_not_nan(context.stack_trace)?, } .into(), )), "z" => Ok(Some( Scalar { dimension, - value: common_data_types::Float::new(self.z).unwrap_not_nan(stack_trace)?, + value: common_data_types::Float::new(self.z) + .unwrap_not_nan(context.stack_trace)?, } .into(), )), "w" => Ok(Some( Scalar { dimension, - value: common_data_types::Float::new(self.w).unwrap_not_nan(stack_trace)?, + value: common_data_types::Float::new(self.w) + .unwrap_not_nan(context.stack_trace)?, } .into(), )), @@ -1035,17 +946,26 @@ impl StaticType for nalgebra::Vector4 { #[cfg(test)] mod test { - use crate::execution::{test_run, values::Boolean}; + use crate::execution::{build_prelude, stack::StackScope, test_run, values::Boolean}; use pretty_assertions::assert_eq; + use std::sync::Mutex; use super::*; #[test] fn construct_vector2() { + let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; let product = test_run("<(1m, 2m)>").unwrap(); assert_eq!( product, - Vector2::new(&[], Dimension::length(), [1.0, 2.0]) + Vector2::new(&context, Dimension::length(), [1.0, 2.0]) .unwrap() .into() ); @@ -1053,7 +973,7 @@ mod test { let product = test_run("<(-1m, -2m)>").unwrap(); assert_eq!( product, - Vector2::new(&[], Dimension::length(), [-1.0, -2.0]) + Vector2::new(&context, Dimension::length(), [-1.0, -2.0]) .unwrap() .into() ); @@ -1061,10 +981,18 @@ mod test { #[test] fn construct_vector3() { + let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; let product = test_run("<(1m, 2m, 3m)>").unwrap(); assert_eq!( product, - Vector3::new(&[], Dimension::length(), [1.0, 2.0, 3.0]) + Vector3::new(&context, Dimension::length(), [1.0, 2.0, 3.0]) .unwrap() .into() ); @@ -1072,7 +1000,7 @@ mod test { let product = test_run("<(-1m, -2m, -3m)>").unwrap(); assert_eq!( product, - Vector3::new(&[], Dimension::length(), [-1.0, -2.0, -3.0]) + Vector3::new(&context, Dimension::length(), [-1.0, -2.0, -3.0]) .unwrap() .into() ); @@ -1080,10 +1008,18 @@ mod test { #[test] fn construct_vector4() { + let database = BuiltinCallableDatabase::default(); + let prelude = build_prelude(&database); + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; let product = test_run("<(1m, 2m, 3m, 4m)>").unwrap(); assert_eq!( product, - Vector4::new(&[], Dimension::length(), [1.0, 2.0, 3.0, 4.0]) + Vector4::new(&context, Dimension::length(), [1.0, 2.0, 3.0, 4.0]) .unwrap() .into() ); @@ -1091,7 +1027,7 @@ mod test { let product = test_run("<(-1m, -2m, -3m, -4m)>").unwrap(); assert_eq!( product, - Vector4::new(&[], Dimension::length(), [-1.0, -2.0, -3.0, -4.0]) + Vector4::new(&context, Dimension::length(), [-1.0, -2.0, -3.0, -4.0]) .unwrap() .into() ); diff --git a/crates/interpreter/src/execution/values/void.rs b/crates/interpreter/src/execution/values/void.rs index a325cc6..650b433 100644 --- a/crates/interpreter/src/execution/values/void.rs +++ b/crates/interpreter/src/execution/values/void.rs @@ -16,7 +16,7 @@ * program. If not, see . */ -use crate::execution::values::{closure::BuiltinCallableDatabase, StaticType}; +use crate::execution::{values::StaticType, ExecutionContext}; use super::{value_type::ValueType, Object, StaticTypeName}; @@ -26,7 +26,7 @@ use std::borrow::Cow; pub struct ValueNone; impl Object for ValueNone { - fn get_type(&self, _callable_database: &BuiltinCallableDatabase) -> ValueType { + fn get_type(&self, _context: &ExecutionContext) -> ValueType { ValueType::TypeNone } } From c94d7e1dd8d540144fd7d7d52a10361a227df8ee Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 10 Jan 2026 13:49:45 -0500 Subject: [PATCH 066/106] Parallel list construction --- Cargo.lock | 40 +++++++++++++++++++ crates/interpreter/Cargo.toml | 1 + crates/interpreter/src/execution/errors.rs | 2 +- crates/interpreter/src/execution/logging.rs | 2 +- .../interpreter/src/execution/values/list.rs | 4 +- 5 files changed, 46 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6499b96..1cb5e47 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -385,6 +385,25 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +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.21" @@ -1048,6 +1067,7 @@ dependencies = [ "num-traits", "paste", "pretty_assertions", + "rayon", "stack", "tempfile", "tree-sitter", @@ -1775,6 +1795,26 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" +[[package]] +name = "rayon" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "redox_syscall" version = "0.5.10" diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index b8a3010..60e0a0e 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -20,6 +20,7 @@ nalgebra = "0.34.1" stack = "0.4.0" paste = "1.0.15" tempfile = "3.24.0" +rayon = "1.11.0" [build-dependencies] type-sitter-gen = "0.8" diff --git a/crates/interpreter/src/execution/errors.rs b/crates/interpreter/src/execution/errors.rs index aa178fe..4441cbf 100644 --- a/crates/interpreter/src/execution/errors.rs +++ b/crates/interpreter/src/execution/errors.rs @@ -52,7 +52,7 @@ impl Display for GenericFailure { } } -pub trait ErrorType: std::fmt::Debug + std::fmt::Display + Any {} +pub trait ErrorType: std::fmt::Debug + std::fmt::Display + Any + Send + Sync {} pub trait Raise { fn to_error<'s>(self, stack_trace: impl IntoIterator) -> Error; diff --git a/crates/interpreter/src/execution/logging.rs b/crates/interpreter/src/execution/logging.rs index e15fe3c..45b9d3a 100644 --- a/crates/interpreter/src/execution/logging.rs +++ b/crates/interpreter/src/execution/logging.rs @@ -27,7 +27,7 @@ use tree_sitter::{Point, Range}; use crate::compile::SourceReference; -pub trait RuntimeLog: std::fmt::Debug { +pub trait RuntimeLog: std::fmt::Debug + Send + Sync { fn push_message(&self, message: LogMessage); } diff --git a/crates/interpreter/src/execution/values/list.rs b/crates/interpreter/src/execution/values/list.rs index 097523c..003f00b 100644 --- a/crates/interpreter/src/execution/values/list.rs +++ b/crates/interpreter/src/execution/values/list.rs @@ -34,6 +34,8 @@ use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Val use std::{borrow::Cow, cmp::Ordering, collections::HashMap, sync::Arc}; +use rayon::iter::{IntoParallelRefIterator, ParallelIterator}; + #[derive(Debug, Clone, Eq, PartialEq)] pub struct List { // In theory, we could use a lot less memory by dynamically sizing everything to fit @@ -51,7 +53,7 @@ impl List { ) -> ExpressionResult { let values: ExpressionResult> = ast_node .node - .iter() + .par_iter() .map(|expression| execute_expression(context, expression)) .collect(); From 8d118aee68a44180837409e10de34d34035b6a22 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 10 Jan 2026 14:10:24 -0500 Subject: [PATCH 067/106] Make it possible to get the inverse of a function --- crates/interpreter/src/execution/values/closure.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 64c3375..4a81d54 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -25,7 +25,7 @@ use crate::{ compile::{AstNode, ClosureDefinition, Expression}, execute_expression, execution::{ - errors::{ExpressionResult, Raise}, + errors::{ExpressionResult, GenericFailure, Raise}, find_value, stack::ScopeType, values::{Dictionary, MissingAttributeError, Value}, @@ -684,7 +684,10 @@ impl Object for BuiltinFunction { if let Some(inverse) = context.database.get_inverse(self.0) { Ok(BuiltinFunction(inverse).into()) } else { - todo!() + Err( + GenericFailure("Function does not have an inverse available".into()) + .to_error(context.stack_trace), + ) } } _ => Err(MissingAttributeError { From 41aad9f9a29b1db0225fc69b6f86f41eaf14551b Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 10 Jan 2026 15:06:21 -0500 Subject: [PATCH 068/106] Move variable access discovery to more logical locations --- crates/interpreter/src/execution/mod.rs | 126 +++++++++++++++- .../src/execution/values/closure.rs | 136 +----------------- .../src/execution/values/dictionary.rs | 15 ++ .../interpreter/src/execution/values/mod.rs | 4 +- 4 files changed, 143 insertions(+), 138 deletions(-) diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index ee1fa3b..771f033 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -20,7 +20,8 @@ use std::{cmp::Ordering, collections::HashMap}; use crate::{ compile::{ - self, AstNode, BinaryExpressionOperation, SourceReference, UnaryExpressionOperation, + self, AstNode, BinaryExpressionOperation, Expression, SourceReference, + UnaryExpressionOperation, }, execution::{ stack::{ScopeType, StackScope}, @@ -37,7 +38,10 @@ pub mod values; use errors::ExpressionResult; use imstr::ImString; use logging::{LocatedStr, RuntimeLog, StackTrace}; -use values::{Object, Value, ValueType}; +use values::{ + closure::find_all_variable_accesses_in_closure_capture, + dictionary::find_all_variable_accesses_in_dictionary_construction, Object, Value, ValueType, +}; pub use standard_environment::build_prelude; @@ -97,6 +101,124 @@ pub fn find_value<'p, 's>( } } +pub fn find_all_variable_accesses_in_expression( + expression: &Expression, + access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, +) -> ExpressionResult<()> { + match expression { + Expression::BinaryExpression(ast_node) => { + find_all_variable_accesses_in_expression(&ast_node.node.a.node, access_collector)?; + find_all_variable_accesses_in_expression(&ast_node.node.b.node, access_collector)?; + + Ok(()) + } + Expression::ClosureDefinition(ast_node) => { + find_all_variable_accesses_in_expression( + &ast_node.node.return_type.node, + access_collector, + )?; + find_all_variable_accesses_in_closure_capture(&ast_node.node, access_collector)?; + + Ok(()) + } + Expression::DictionaryConstruction(ast_node) => { + find_all_variable_accesses_in_dictionary_construction(&ast_node.node, access_collector) + } + Expression::If(ast_node) => { + find_all_variable_accesses_in_expression( + &ast_node.node.condition.node, + access_collector, + )?; + find_all_variable_accesses_in_expression( + &ast_node.node.on_true.node, + access_collector, + )?; + find_all_variable_accesses_in_expression( + &ast_node.node.on_false.node, + access_collector, + )?; + + Ok(()) + } + Expression::List(ast_node) => { + for expression in ast_node.node.iter() { + find_all_variable_accesses_in_expression(&expression.node, access_collector)?; + } + + Ok(()) + } + Expression::Parenthesis(ast_node) => { + find_all_variable_accesses_in_expression(&ast_node.node, access_collector) + } + Expression::IdentityPath(ast_node) => { + // Only the top most parent matters. + access_collector(&ast_node.node.path[0]) + } + Expression::StructDefinition(ast_node) => { + for member in ast_node.node.members.iter() { + find_all_variable_accesses_in_expression(&member.node.ty.node, access_collector)?; + if let Some(default) = member.node.default.as_ref() { + find_all_variable_accesses_in_expression(&default.node, access_collector)?; + } + } + + Ok(()) + } + Expression::UnaryExpression(ast_node) => find_all_variable_accesses_in_expression( + &ast_node.node.expression.node, + access_collector, + ), + Expression::FunctionCall(ast_node) => { + find_all_variable_accesses_in_expression( + &ast_node.node.to_call.node, + access_collector, + )?; + find_all_variable_accesses_in_dictionary_construction( + &ast_node.node.argument.node, + access_collector, + )?; + + Ok(()) + } + Expression::MethodCall(ast_node) => { + find_all_variable_accesses_in_expression( + &ast_node.node.self_dictionary.node, + access_collector, + )?; + find_all_variable_accesses_in_dictionary_construction( + &ast_node.node.argument.node, + access_collector, + )?; + + Ok(()) + } + Expression::LetIn(ast_node) => { + for assignment in ast_node.node.assignments.iter() { + find_all_variable_accesses_in_expression( + &assignment.node.value.node, + access_collector, + )?; + } + + find_all_variable_accesses_in_expression( + &ast_node.node.expression.node, + access_collector, + )?; + + Ok(()) + } + Expression::Boolean(_) + | Expression::Scalar(_) + | Expression::Vector2(_) + | Expression::Vector3(_) + | Expression::Vector4(_) + | Expression::SignedInteger(_) + | Expression::String(_) + | Expression::UnsignedInteger(_) + | Expression::SelfPath(_) => Ok(()), + } +} + #[derive(Debug)] pub struct ExecutionContext<'c> { pub log: &'c dyn RuntimeLog, diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 4a81d54..982c0de 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -26,7 +26,7 @@ use crate::{ execute_expression, execution::{ errors::{ExpressionResult, GenericFailure, Raise}, - find_value, + find_all_variable_accesses_in_expression, find_value, stack::ScopeType, values::{Dictionary, MissingAttributeError, Value}, ExecutionContext, @@ -139,7 +139,7 @@ impl Display for Signature { } } -fn find_all_variable_accesses_in_closure_capture( +pub fn find_all_variable_accesses_in_closure_capture( closure: &crate::compile::ClosureDefinition, mut access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, ) -> ExpressionResult<()> { @@ -172,138 +172,6 @@ fn find_all_variable_accesses_in_closure_capture( Ok(()) } -fn find_all_variable_accesses_in_dictionary_construction( - dictionary_construction: &crate::compile::DictionaryConstruction, - access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, -) -> ExpressionResult<()> { - for assignment in dictionary_construction.assignments.iter() { - find_all_variable_accesses_in_expression( - &assignment.node.assignment.node, - access_collector, - )?; - } - - Ok(()) -} - -fn find_all_variable_accesses_in_expression( - expression: &Expression, - access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, -) -> ExpressionResult<()> { - match expression { - Expression::BinaryExpression(ast_node) => { - find_all_variable_accesses_in_expression(&ast_node.node.a.node, access_collector)?; - find_all_variable_accesses_in_expression(&ast_node.node.b.node, access_collector)?; - - Ok(()) - } - Expression::ClosureDefinition(ast_node) => { - find_all_variable_accesses_in_expression( - &ast_node.node.return_type.node, - access_collector, - )?; - find_all_variable_accesses_in_closure_capture(&ast_node.node, access_collector)?; - - Ok(()) - } - Expression::DictionaryConstruction(ast_node) => { - find_all_variable_accesses_in_dictionary_construction(&ast_node.node, access_collector) - } - Expression::If(ast_node) => { - find_all_variable_accesses_in_expression( - &ast_node.node.condition.node, - access_collector, - )?; - find_all_variable_accesses_in_expression( - &ast_node.node.on_true.node, - access_collector, - )?; - find_all_variable_accesses_in_expression( - &ast_node.node.on_false.node, - access_collector, - )?; - - Ok(()) - } - Expression::List(ast_node) => { - for expression in ast_node.node.iter() { - find_all_variable_accesses_in_expression(&expression.node, access_collector)?; - } - - Ok(()) - } - Expression::Parenthesis(ast_node) => { - find_all_variable_accesses_in_expression(&ast_node.node, access_collector) - } - Expression::IdentityPath(ast_node) => { - // Only the top most parent matters. - access_collector(&ast_node.node.path[0]) - } - Expression::StructDefinition(ast_node) => { - for member in ast_node.node.members.iter() { - find_all_variable_accesses_in_expression(&member.node.ty.node, access_collector)?; - if let Some(default) = member.node.default.as_ref() { - find_all_variable_accesses_in_expression(&default.node, access_collector)?; - } - } - - Ok(()) - } - Expression::UnaryExpression(ast_node) => find_all_variable_accesses_in_expression( - &ast_node.node.expression.node, - access_collector, - ), - Expression::FunctionCall(ast_node) => { - find_all_variable_accesses_in_expression( - &ast_node.node.to_call.node, - access_collector, - )?; - find_all_variable_accesses_in_dictionary_construction( - &ast_node.node.argument.node, - access_collector, - )?; - - Ok(()) - } - Expression::MethodCall(ast_node) => { - find_all_variable_accesses_in_expression( - &ast_node.node.self_dictionary.node, - access_collector, - )?; - find_all_variable_accesses_in_dictionary_construction( - &ast_node.node.argument.node, - access_collector, - )?; - - Ok(()) - } - Expression::LetIn(ast_node) => { - for assignment in ast_node.node.assignments.iter() { - find_all_variable_accesses_in_expression( - &assignment.node.value.node, - access_collector, - )?; - } - - find_all_variable_accesses_in_expression( - &ast_node.node.expression.node, - access_collector, - )?; - - Ok(()) - } - Expression::Boolean(_) - | Expression::Scalar(_) - | Expression::Vector2(_) - | Expression::Vector3(_) - | Expression::Vector4(_) - | Expression::SignedInteger(_) - | Expression::String(_) - | Expression::UnsignedInteger(_) - | Expression::SelfPath(_) => Ok(()), - } -} - /// Closures are immutable, meaning that all copies can reference the same data. /// This is that common data. #[derive(Debug, Eq, PartialEq)] diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index 4f2bcf0..080c18b 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -26,6 +26,7 @@ use crate::{ execute_expression, execution::{ errors::{ErrorType, ExpressionResult, Raise as _}, + find_all_variable_accesses_in_expression, stack::ScopeType, ExecutionContext, }, @@ -47,6 +48,20 @@ impl PartialEq for DictionaryData { } } +pub fn find_all_variable_accesses_in_dictionary_construction( + dictionary_construction: &crate::compile::DictionaryConstruction, + access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, +) -> ExpressionResult<()> { + for assignment in dictionary_construction.assignments.iter() { + find_all_variable_accesses_in_expression( + &assignment.node.assignment.node, + access_collector, + )?; + } + + Ok(()) +} + #[derive(Debug, Eq, PartialEq, Clone)] pub struct Dictionary { pub(crate) data: Arc, diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index b87bc8c..f3ac557 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -41,10 +41,10 @@ pub use scalar::Scalar; mod vector; pub use vector::{Vector2, Vector3, Vector4}; -mod closure; +pub mod closure; pub use closure::{BuiltinCallableDatabase, BuiltinFunction, UserClosure}; -mod dictionary; +pub mod dictionary; pub use dictionary::Dictionary; mod list; From c494e39942466db3a4d87754b7d317c37b2eb1fa Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 11 Jan 2026 14:25:16 -0500 Subject: [PATCH 069/106] Parallel let in --- crates/interpreter/src/compile/expressions.rs | 229 +++++++++++++++++- crates/interpreter/src/execution/mod.rs | 18 +- 2 files changed, 240 insertions(+), 7 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index b3c8426..0e9a341 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -1,14 +1,66 @@ -use std::{path::PathBuf, sync::Arc}; +use std::{cmp::Ordering, collections::HashSet, path::PathBuf, sync::Arc}; use common_data_types::{ConversionFactor, Dimension, Float, RawFloat}; +use hashable_map::HashableSet; use imstr::ImString; use nodes::SourceFile; use tree_sitter::Range; use type_sitter::{HasChild, Node}; use unwrap_enum::EnumAs; +use crate::execution::find_all_variable_accesses_in_expression; + use super::{nodes, AstNode, Error, Parse}; +/// Used for sorting operations that have dependencies on other operations for parallel execution. +trait DependentOperation { + fn original_index(&self) -> usize; + fn name(&self) -> &ImString; + fn dependencies(&self) -> &HashableSet; +} + +fn sort_and_group_dependencies(deps: &mut Vec) -> Vec> +where + D: DependentOperation, +{ + deps.sort_by(|a, b| { + let a_name = a.name(); + let b_name = b.name(); + let a_index = a.original_index(); + let b_index = b.original_index(); + let a = a.dependencies(); + let b = b.dependencies(); + + // Dependency takes president. + if a.contains(b_name) && a_index > b_index { + Ordering::Greater + } else if b.contains(a_name) && b_index > a_index { + Ordering::Less + } else { + // If they have no dependency on each other, put the ones with fewer dependencies + // as a higher priority. + a.len().cmp(&b.len()) + } + }); + + let mut compute_groups = Vec::new(); + let mut start = 0; + let mut iterator = deps.iter().enumerate().peekable(); + + while let (Some((a_index, a)), Some((b_index, b))) = (iterator.next(), iterator.peek()) { + // Every transition indicates the end of a group. + if a.dependencies() != b.dependencies() { + compute_groups.push(start..a_index + 1); + start = *b_index; + } + } + + // Whatever remains is its own group. + compute_groups.push(start..deps.len()); + + compute_groups +} + #[derive(Debug, Eq, PartialEq)] pub struct InvalidUnitError<'t, 'i> { pub name: &'i str, @@ -1096,10 +1148,26 @@ impl<'t> Parse<'t, nodes::MethodCall<'t>> for MethodCall { #[derive(Debug, Hash, Eq, PartialEq)] pub struct LetInAssignment { + pub index: usize, pub ident: AstNode, + pub dependencies: HashableSet, pub value: AstNode, } +impl DependentOperation for AstNode { + fn original_index(&self) -> usize { + self.node.index + } + + fn name(&self) -> &ImString { + &self.node.ident.node + } + + fn dependencies(&self) -> &HashableSet { + &self.node.dependencies + } +} + impl<'t> Parse<'t, nodes::LetInAssignment<'t>> for LetInAssignment { fn parse<'i>( file: &Arc, @@ -1110,16 +1178,43 @@ impl<'t> Parse<'t, nodes::LetInAssignment<'t>> for LetInAssignment { let value = Expression::parse(file, input, node.value()?)?; - Ok(AstNode::new(file, &node, Self { ident, value })) + let mut dependencies = HashableSet::new(); + + // Because our access collector never returns errors, this will never fail. + find_all_variable_accesses_in_expression(&value.node, &mut |name| { + dependencies.insert(name.node.clone()); + Ok(()) + }) + .ok(); + + Ok(AstNode::new( + file, + &node, + Self { + index: 0, + ident, + dependencies, + value, + }, + )) } } #[derive(Debug, Hash, Eq, PartialEq)] pub struct LetIn { pub assignments: Vec>, + pub compute_groups: Vec>, pub expression: AstNode, } +impl LetIn { + pub fn compute_groups(&self) -> impl Iterator]> { + self.compute_groups + .iter() + .map(|range| &self.assignments[range.clone()]) + } +} + impl<'t> Parse<'t, nodes::LetIn<'t>> for LetIn { fn parse<'i>( file: &Arc, @@ -1129,12 +1224,25 @@ impl<'t> Parse<'t, nodes::LetIn<'t>> for LetIn { let mut cursor = node.walk(); let mut assignments = Vec::new(); - for assignment in node.assignments(&mut cursor) { + let mut variable_names = HashSet::new(); + + for (index, assignment) in node.assignments(&mut cursor).enumerate() { let assignment = assignment?; - let assignment = LetInAssignment::parse(file, input, assignment)?; + let mut assignment = LetInAssignment::parse(file, input, assignment)?; + // Restrict all dependencies to names within our dependency set, that we already know + // of. + assignment + .node + .dependencies + .retain(|name| variable_names.contains(name)); + assignment.node.index = index; + + variable_names.insert(assignment.node.ident.node.clone()); assignments.push(assignment); } + let compute_groups = sort_and_group_dependencies(&mut assignments); + let expression = Expression::parse(file, input, node.expression()?)?; Ok(AstNode::new( @@ -1142,6 +1250,7 @@ impl<'t> Parse<'t, nodes::LetIn<'t>> for LetIn { &node, Self { assignments, + compute_groups, expression, }, )) @@ -2201,6 +2310,8 @@ mod test { reference: value1_ident.reference.clone(), node: "value1".into(), }, + index: 0, + dependencies: HashableSet::new(), value: AstNode { reference: value1_value.reference.clone(), node: Expression::UnsignedInteger(AstNode { @@ -2217,6 +2328,8 @@ mod test { reference: value2_ident.reference.clone(), node: "value2".into(), }, + index: 1, + dependencies: HashableSet::new(), value: AstNode { reference: value2_value.reference.clone(), node: Expression::UnsignedInteger(AstNode { @@ -2227,6 +2340,7 @@ mod test { } } ], + compute_groups: vec![0..2], expression: AstNode { reference: expression.reference.clone(), node: Expression::UnsignedInteger(AstNode { @@ -2242,6 +2356,113 @@ mod test { ); } + #[derive(Debug, PartialEq, Eq)] + struct TestDependency { + name: ImString, + index: usize, + dependencies: HashableSet, + } + + impl TestDependency { + fn new( + index: usize, + name: impl Into, + dependencies: impl IntoIterator, + ) -> Self { + Self { + index, + name: name.into(), + dependencies: HashableSet::from(HashSet::from_iter( + dependencies.into_iter().map(|name| ImString::from(name)), + )), + } + } + } + + impl DependentOperation for TestDependency { + fn original_index(&self) -> usize { + self.index + } + + fn name(&self) -> &ImString { + &self.name + } + + fn dependencies(&self) -> &HashableSet { + &self.dependencies + } + } + + #[test] + fn let_in_ordering() { + let mut dependencies = vec![ + TestDependency::new(0, "a", []), + TestDependency::new(1, "c", ["a"]), + TestDependency::new(2, "d", ["c"]), + TestDependency::new(3, "b", []), + ]; + + let groups = sort_and_group_dependencies(&mut dependencies); + + assert_eq!( + dependencies, + vec![ + TestDependency::new(0, "a", []), + TestDependency::new(3, "b", []), + TestDependency::new(1, "c", ["a"]), + TestDependency::new(2, "d", ["c"]), + ] + ); + + assert_eq!(groups, vec![0..2, 2..3, 3..4]); + } + + #[test] + fn let_in_broken_ordering() { + // This would be a case of user error, but we need to keep the user's mistakes in the new + // ordering to make the error messages make sense. + let mut dependencies = vec![ + TestDependency::new(0, "a", []), + TestDependency::new(1, "d", ["c"]), + TestDependency::new(2, "c", ["a"]), + TestDependency::new(3, "b", []), + ]; + + let groups = sort_and_group_dependencies(&mut dependencies); + + assert_eq!( + dependencies, + vec![ + TestDependency::new(0, "a", []), + TestDependency::new(3, "b", []), + TestDependency::new(1, "d", ["c"]), + TestDependency::new(2, "c", ["a"]), + ] + ); + + assert_eq!(groups, vec![0..2, 2..3, 3..4]); + } + + #[test] + fn let_in_circular_dependency() { + let mut dependencies = vec![ + TestDependency::new(0, "a", ["b"]), + TestDependency::new(1, "b", ["a"]), + ]; + + let groups = sort_and_group_dependencies(&mut dependencies); + + assert_eq!( + dependencies, + vec![ + TestDependency::new(0, "a", ["b"]), + TestDependency::new(1, "b", ["a"]), + ] + ); + + assert_eq!(groups, vec![0..1, 1..2]); + } + #[test] fn vector2() { let root = full_compile("<(1.0, 2.0)>"); diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 771f033..e597f8c 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -29,6 +29,8 @@ use crate::{ }, }; +use rayon::prelude::*; + mod errors; mod formatting; mod logging; @@ -395,7 +397,8 @@ fn execute_let_in( ScopeType::Inherited, HashMap::with_capacity(expression.node.assignments.len()), |stack, stack_trace| { - for assignment in expression.node.assignments.iter() { + let mut buffer = Vec::new(); + for group in expression.node.compute_groups() { let context = ExecutionContext { log: context.log, stack_trace, @@ -403,8 +406,17 @@ fn execute_let_in( database: context.database, }; - let value = execute_expression(&context, &assignment.node.value)?; - stack.insert_value(assignment.node.ident.node.clone(), value); + buffer.par_extend(group.par_iter().map(|assignment| { + ( + assignment.node.ident.node.clone(), + execute_expression(&context, &assignment.node.value), + ) + })); + + for (name, result) in buffer.drain(..) { + let value = result?; + stack.insert_value(name, value); + } } let context = ExecutionContext { From 009aa8c12d450b7eef45ead3ba91f383c4f17756 Mon Sep 17 00:00:00 2001 From: James Carl Date: Mon, 12 Jan 2026 17:29:45 -0500 Subject: [PATCH 070/106] Parallel binary operations --- crates/interpreter/src/execution/mod.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index e597f8c..e939067 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -29,7 +29,7 @@ use crate::{ }, }; -use rayon::prelude::*; +use rayon::{join, prelude::*}; mod errors; mod formatting; @@ -439,8 +439,15 @@ fn execute_binary_expression( ) -> ExpressionResult { context.trace_scope(expression.reference.clone(), |context| { let node = &expression.node; - let value_a = execute_expression(context, &node.a)?; - let value_b = execute_expression(context, &node.b)?; + + let (result_a, result_b) = join( + || execute_expression(context, &node.a), + || execute_expression(context, &node.b), + ); + + let value_a = result_a?; + let value_b = result_b?; + match node.operation.node { BinaryExpressionOperation::NotEq => Ok(values::Boolean( !value_a From 42a44366aad75a99b667bfe9d189e090976ba19f Mon Sep 17 00:00:00 2001 From: James Carl Date: Mon, 12 Jan 2026 17:48:08 -0500 Subject: [PATCH 071/106] Parallel dictionary construction --- crates/interpreter/src/compile/expressions.rs | 148 +++++++++++++----- .../src/execution/values/dictionary.rs | 47 +++--- 2 files changed, 139 insertions(+), 56 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 0e9a341..1553d91 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -23,42 +23,47 @@ fn sort_and_group_dependencies(deps: &mut Vec) -> Vec b_index { - Ordering::Greater - } else if b.contains(a_name) && b_index > a_index { - Ordering::Less - } else { - // If they have no dependency on each other, put the ones with fewer dependencies - // as a higher priority. - a.len().cmp(&b.len()) - } - }); + if !deps.is_empty() { + deps.sort_by(|a, b| { + let a_name = a.name(); + let b_name = b.name(); + let a_index = a.original_index(); + let b_index = b.original_index(); + let a = a.dependencies(); + let b = b.dependencies(); + + // Dependency takes president. + if a.contains(b_name) && a_index > b_index { + Ordering::Greater + } else if b.contains(a_name) && b_index > a_index { + Ordering::Less + } else { + // If they have no dependency on each other, put the ones with fewer dependencies + // as a higher priority. + a.len().cmp(&b.len()) + } + }); - let mut compute_groups = Vec::new(); - let mut start = 0; - let mut iterator = deps.iter().enumerate().peekable(); + let mut compute_groups = Vec::new(); + let mut start = 0; + let mut iterator = deps.iter().enumerate().peekable(); - while let (Some((a_index, a)), Some((b_index, b))) = (iterator.next(), iterator.peek()) { - // Every transition indicates the end of a group. - if a.dependencies() != b.dependencies() { - compute_groups.push(start..a_index + 1); - start = *b_index; + while let (Some((a_index, a)), Some((b_index, b))) = (iterator.next(), iterator.peek()) { + // Every transition indicates the end of a group. + if a.dependencies() != b.dependencies() { + compute_groups.push(start..a_index + 1); + start = *b_index; + } } - } - // Whatever remains is its own group. - compute_groups.push(start..deps.len()); + // Whatever remains is its own group + compute_groups.push(start..deps.len()); - compute_groups + compute_groups + } else { + // Nothing to compute. + Vec::new() + } } #[derive(Debug, Eq, PartialEq)] @@ -935,6 +940,8 @@ impl<'t> Parse<'t, nodes::If<'t>> for IfExpression { #[derive(Debug, Hash, Eq, PartialEq)] pub struct DictionaryMemberAssignment { + pub index: usize, + pub dependencies: HashableSet, pub name: AstNode, pub assignment: AstNode, } @@ -949,13 +956,54 @@ impl<'t> Parse<'t, nodes::DictionaryMemberAssignment<'t>> for DictionaryMemberAs let name = ImString::parse(file, input, name)?; let assignment = Expression::parse(file, input, value.assignment()?)?; - Ok(AstNode::new(file, &value, Self { name, assignment })) + let mut dependencies = HashableSet::new(); + + // Because our access collector never returns errors, this will never fail. + find_all_variable_accesses_in_expression(&assignment.node, &mut |name| { + dependencies.insert(name.node.clone()); + Ok(()) + }) + .ok(); + + Ok(AstNode::new( + file, + &value, + Self { + index: 0, + dependencies, + name, + assignment, + }, + )) + } +} + +impl DependentOperation for AstNode { + fn original_index(&self) -> usize { + self.node.index + } + + fn name(&self) -> &ImString { + &self.node.name.node + } + + fn dependencies(&self) -> &HashableSet { + &self.node.dependencies } } #[derive(Debug, Hash, Eq, PartialEq)] pub struct DictionaryConstruction { pub assignments: Vec>, + pub compute_groups: Vec>, +} + +impl DictionaryConstruction { + pub fn compute_groups(&self) -> impl Iterator]> { + self.compute_groups + .iter() + .map(|range| &self.assignments[range.clone()]) + } } impl<'t> Parse<'t, nodes::DictionaryConstruction<'t>> for DictionaryConstruction { @@ -968,17 +1016,33 @@ impl<'t> Parse<'t, nodes::DictionaryConstruction<'t>> for DictionaryConstruction let mut cursor = value.walk(); let assignments_iter = value.assignmentss(&mut cursor); + let mut variable_names = HashSet::new(); + let mut index = 0; + for assignment in assignments_iter { let assignment = assignment?; // Skip the commas. if let Some(assignment) = assignment.as_dictionary_member_assignment() { - let assignment = DictionaryMemberAssignment::parse(file, input, assignment)?; + let mut assignment = DictionaryMemberAssignment::parse(file, input, assignment)?; + assignment + .node + .dependencies + .retain(|name| variable_names.contains(name)); + assignment.node.index = index; + index += 1; + + variable_names.insert(assignment.node.name.node.clone()); assignments.push(assignment); } } - let node = Self { assignments }; + let compute_groups = sort_and_group_dependencies(&mut assignments); + + let node = Self { + assignments, + compute_groups, + }; Ok(AstNode::new(file, &value, node)) } } @@ -2084,7 +2148,8 @@ mod test { argument: AstNode { reference: call.node.argument.reference.clone(), node: DictionaryConstruction { - assignments: vec![] + assignments: vec![], + compute_groups: vec![] } } }) @@ -2131,10 +2196,12 @@ mod test { assignments: vec![AstNode { reference: dict_assignment.reference.clone(), node: DictionaryMemberAssignment { + index: 0, name: AstNode { reference: dict_assignment.node.name.reference.clone(), node: "value".into() }, + dependencies: HashableSet::from(HashSet::from_iter([])), assignment: AstNode { reference: dict_assignment .node @@ -2154,7 +2221,8 @@ mod test { }) } } - }] + }], + compute_groups: vec![0..1] } } }) @@ -2196,7 +2264,8 @@ mod test { argument: AstNode { reference: call.node.argument.reference.clone(), node: DictionaryConstruction { - assignments: vec![] + assignments: vec![], + compute_groups: vec![], } } }) @@ -2243,6 +2312,8 @@ mod test { assignments: vec![AstNode { reference: dict_assignment.reference.clone(), node: DictionaryMemberAssignment { + index: 0, + dependencies: HashableSet::from(HashSet::from_iter([])), name: AstNode { reference: dict_assignment.node.name.reference.clone(), node: "value".into() @@ -2266,7 +2337,8 @@ mod test { }) } } - }] + }], + compute_groups: vec![0..1] } } }) diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index 080c18b..a8c6e38 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -20,6 +20,7 @@ use std::{borrow::Cow, collections::HashMap, fmt::Display, sync::Arc}; use hashable_map::HashableMap; use imstr::ImString; +use rayon::prelude::*; use crate::{ compile::{AstNode, DictionaryConstruction}, @@ -110,26 +111,36 @@ impl Dictionary { ScopeType::Inherited, HashMap::new(), |stack, stack_trace| { - for assignment in ast_node.node.assignments.iter() { - let context = ExecutionContext { - log: context.log, - stack_trace, - stack, - database: context.database, - }; - - let name = assignment.node.name.node.clone(); - let value = execute_expression(&context, &assignment.node.assignment)?; - - if members.insert(name.clone(), value.clone()).is_some() { - // That's a duplicate member. - return Err(DuplicateMemberError { - name: assignment.node.name.node.clone(), - } - .to_error(context.stack_trace.iter().chain([&assignment.reference]))); + let mut buffer = Vec::new(); + for group in ast_node.node.compute_groups() { + { + let context = ExecutionContext { + log: context.log, + stack_trace, + stack, + database: context.database, + }; + + buffer.par_extend(group.par_iter().map(|assignment| { + ( + assignment.node.name.node.clone(), + execute_expression(&context, &assignment.node.assignment), + ) + })); } - stack.insert_value(name, value); + for (name, result) in buffer.drain(..) { + let value = result?; + + if members.insert(name.clone(), value.clone()).is_some() { + // That's a duplicate member. + return Err(DuplicateMemberError { name }.to_error( + context.stack_trace.iter().chain([&ast_node.reference]), + )); + } + + stack.insert_value(name, value); + } } Ok(()) From 2b0a69f5744ce7bc0fc0eb19f42b0c2d6a7e822a Mon Sep 17 00:00:00 2001 From: James Carl Date: Tue, 13 Jan 2026 17:52:36 -0500 Subject: [PATCH 072/106] String methods --- crates/interpreter/src/compile/expressions.rs | 2 +- .../src/execution/standard_environment.rs | 2 + .../src/execution/values/closure.rs | 1 + .../src/execution/values/string.rs | 545 ++++++++++++++++-- .../src/execution/values/value_type.rs | 19 +- .../src/grammar.json | 17 + 6 files changed, 539 insertions(+), 47 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 1553d91..d93e72f 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -812,7 +812,7 @@ impl<'t> Parse<'t, nodes::Scalar<'t>> for Scalar { }; let scale_value: f64 = - whole as RawFloat + (fraction as RawFloat / (10 as RawFloat).powi(fraction_len as _)); + whole as RawFloat + (fraction as RawFloat / (10.0 as RawFloat).powi(fraction_len as _)); let scale_value = Float::new(scale_value).expect("Float was NaN"); let scale_value = conversion_factor.convert_to_base_unit(scale_value); diff --git a/crates/interpreter/src/execution/standard_environment.rs b/crates/interpreter/src/execution/standard_environment.rs index c836fad..a17feb9 100644 --- a/crates/interpreter/src/execution/standard_environment.rs +++ b/crates/interpreter/src/execution/standard_environment.rs @@ -106,7 +106,9 @@ fn build_types(context: &ExecutionContext) -> Dictionary { ("Bool".into(), ValueType::Boolean.into()), ("SInt".into(), ValueType::SignedInteger.into()), ("UInt".into(), ValueType::UnsignedInteger.into()), + ("String".into(), ValueType::String.into()), ("ValueType".into(), ValueType::ValueType.into()), + // TODO we need File types. // TODO we'll need a function to build custom function signature types. // ("Function".into(), ValueType::Closure(Arc)), diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 982c0de..eb44913 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -51,6 +51,7 @@ impl BuiltinCallableDatabase { super::value_type::register_methods(&mut database); super::list::register_methods(&mut database); super::file::register_methods(&mut database); + super::string::register_methods(&mut database); database } diff --git a/crates/interpreter/src/execution/values/string.rs b/crates/interpreter/src/execution/values/string.rs index 5c38aa5..d8ef651 100644 --- a/crates/interpreter/src/execution/values/string.rs +++ b/crates/interpreter/src/execution/values/string.rs @@ -16,24 +16,31 @@ * program. If not, see . */ +use common_data_types::{Dimension, Float}; use imstr::ImString; -use crate::execution::{ - errors::Raise, - values::{MissingAttributeError, StaticType}, - ExecutionContext, +use crate::{ + build_closure_type, build_method, + execution::{ + errors::{GenericFailure, Raise}, + values::{ + Boolean, BuiltinCallableDatabase, BuiltinFunction, Dictionary, List, + MissingAttributeError, Scalar, SignedInteger, StaticType, UnsignedInteger, ValueNone, + }, + ExecutionContext, + }, }; use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; -use std::borrow::Cow; +use std::{borrow::Cow, collections::HashMap}; #[derive(Debug, Hash, Clone, Eq, PartialEq)] pub struct IString(pub ImString); impl Object for IString { fn get_type(&self, _context: &ExecutionContext) -> ValueType { - ValueType::Boolean + ValueType::String } fn eq(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { @@ -46,38 +53,33 @@ impl Object for IString { context: &ExecutionContext, attribute: &str, ) -> ExpressionResult { - // build_closure_type!(MapClosure(character: IString) -> ValueType::Any); - // build_closure_type!(FoldClosure(previous: Value, character: IString) -> ValueType::Any); - match attribute { - // "map" => { - // let value = static_method!( - // String_map( - // _log: &dyn RuntimeLog, - // stack_trace: &StackTrace, - // _stack: &StackScope, - // this: ValueType, - // for_each: MapClosure) -> ValueType::TypeNone - // { - // todo!() - // } - // ); - // Ok(value.clone()) - // } - // "fold" => { - // let value = static_method!( - // String_map( - // _log: &dyn RuntimeLog, - // stack_trace: &StackTrace, - // _stack: &StackScope, - // this: ValueType, - // for_each: FoldClosure) -> ValueType::TypeNone - // { - // todo!() - // } - // ); - // Ok(value.clone()) - // } + "format" => Ok(BuiltinFunction::new::().into()), + + "append" => Ok(BuiltinFunction::new::().into()), + "slice" => Ok(BuiltinFunction::new::().into()), + "chunks" => Ok(BuiltinFunction::new::().into()), + "lines" => Ok(BuiltinFunction::new::().into()), + + "map" => Ok(BuiltinFunction::new::().into()), + "fold" => Ok(BuiltinFunction::new::().into()), + "retain" => Ok(BuiltinFunction::new::().into()), + + "reverse" => Ok(BuiltinFunction::new::().into()), + "truncate" => Ok(BuiltinFunction::new::().into()), + + "to_lowercase" => Ok(BuiltinFunction::new::().into()), + "to_uppercase" => Ok(BuiltinFunction::new::().into()), + + "parse_scalar" => Ok(BuiltinFunction::new::().into()), + "parse_unsigned_integer" => { + Ok(BuiltinFunction::new::().into()) + } + "parse_signed_integer" => { + Ok(BuiltinFunction::new::().into()) + } + + "contains" => Ok(BuiltinFunction::new::().into()), _ => Err(MissingAttributeError { name: attribute.into(), } @@ -106,3 +108,472 @@ where Self(value.into()) } } + +mod methods { + pub struct Format; + + pub struct Append; + pub struct Slice; + pub struct Chunks; + pub struct Lines; + + pub struct Map; + pub struct Fold; + pub struct Retain; + + pub struct Reverse; + pub struct Truncate; + + pub struct ToLowercase; + pub struct ToUppercase; + + pub struct ParseScalar; + pub struct ParseUnsignedInteger; + pub struct ParseSignedInteger; + + pub struct Contains; +} + +pub fn register_methods(database: &mut BuiltinCallableDatabase) { + build_closure_type!(MapClosure(c: Value) -> Value); + build_closure_type!(FoldClosure(previous: Value, c: Value) -> Value); + build_closure_type!(RetainClosure(c: Value) -> Boolean); + + // pub struct Format; + + build_method!( + database, + forward = methods::Append, "String::append", ( + _context: &ExecutionContext, + this: IString, + rhs: IString + ) -> IString { + let mut new = this.0.into_std_string(); + new.push_str(&rhs.0); + Ok(IString(new.into())) + } + ); + build_method!( + database, + forward = methods::Slice, "String::slice", ( + _context: &ExecutionContext, + this: IString, + start: Option = ValueNone.into(), + end: Option = ValueNone.into() + ) -> IString { + let start = if let Some(start) = start { + start.0 as usize + } else { + 0usize + }; + + let end = if let Some(end) = end { + end.0 as usize + } else { + this.0.len() + }; + + Ok(IString(this.0.slice(start..end))) + } + ); + build_method!( + database, + forward = methods::Chunks, "String::chunks", ( + context: &ExecutionContext, + this: IString, + size: UnsignedInteger, + strict: Boolean = Boolean(true).into() + ) -> List { + let size = size.0 as usize; + let strict = strict.0; + let num_chunks = this.0.len() / size; + let remainder = this.0.len() % size; + let mut chunks: Vec = Vec::with_capacity(num_chunks + if !strict && remainder != 0 { 1 } else { 0 }); + + for index in 0..num_chunks { + let start = index * size; + let end = start + size; + chunks.push(IString(this.0.slice(start..end)).into()); + } + + if !strict { + chunks.push(IString(this.0.slice((num_chunks * size)..this.0.len())).into()); + } + + Ok(List::from_iter(context, chunks)) + } + ); + build_method!( + database, + forward = methods::Lines, "String::lines", ( + context: &ExecutionContext, + this: IString, + include_empty: Boolean = Boolean(true).into() + ) -> List { + let include_empty = include_empty.0; + let lines: Vec = if include_empty { + this.0.lines().map(|line| IString(line).into()).collect() + } else { + this.0.lines().filter(|line| !line.is_empty()).map(|line| IString(line).into()).collect() + }; + Ok(List::from_iter(context, lines)) + } + ); + build_method!( + database, + forward = methods::Map, "String::map", ( + context: &ExecutionContext, + this: IString, + f: MapClosure + ) -> IString { + let mut string = String::new(); + let result: ExpressionResult<()> = this.0.chars().map(|c| { + let result = f.call(context, Dictionary::new(context, HashMap::from_iter([ + ( + "c".into(), + IString(ImString::from(format!("{c}"))).into() + ) + ])))?.downcast::(context.stack_trace)?; + string.push_str(&result.0); + + Ok(()) + }).collect(); + result?; + + Ok(IString(ImString::from(string)).into()) + } + ); + build_method!( + database, + forward = methods::Fold, "String::fold", ( + context: &ExecutionContext, + this: IString, + init: Value, + f: FoldClosure + ) -> Value { + let mut accumulator = init; + for c in this.0.chars() { + accumulator = f.call(context, Dictionary::new(context, HashMap::from_iter([ + ( + "c".into(), + IString(ImString::from(format!("{c}"))).into() + ), + ( + "previous".into(), + accumulator + ) + ])))?; + } + + Ok(accumulator) + } + ); + build_method!( + database, + forward = methods::Retain, "String::retain",( + context: &ExecutionContext, + this: IString, + f: RetainClosure + ) -> IString { + let mut product: String = String::with_capacity(this.0.len()); + + for c in this.0.chars() { + let retain = f.call(context, Dictionary::new(context, HashMap::from_iter([ + ( + "c".into(), + IString(ImString::from(format!("{c}"))).into() + ) + ])))?.downcast::(context.stack_trace)?; + + if retain.0 { + product.push(c); + } + } + + Ok(IString(ImString::from(product)).into()) + } + ); + build_method!( + database, + forward = methods::Reverse, "String::reverse",( + _context: &ExecutionContext, + this: IString + ) -> IString { + let reversed: String = this.0.as_str().chars().rev().collect(); + Ok(IString(ImString::from(reversed)).into()) + } + ); + build_method!( + database, + forward = methods::Truncate, "String::truncate",( + _context: &ExecutionContext, + this: IString, + length: UnsignedInteger + ) -> IString { + let length = length.0 as usize; + let length = this.0.len().min(length); + + Ok(IString(this.0.slice(0..length))) + } + ); + build_method!( + database, + forward = methods::ToLowercase, "String::to_lowercase",( + _context: &ExecutionContext, + this: IString + ) -> IString { + let text = this.0.as_str().to_lowercase(); + Ok(IString(ImString::from(text)).into()) + } + ); + build_method!( + database, + forward = methods::ToUppercase, "String::to_uppercase",( + _context: &ExecutionContext, + this: IString + ) -> IString { + let text = this.0.as_str().to_uppercase(); + Ok(IString(ImString::from(text)).into()) + } + ); + build_method!( + database, + forward = methods::ParseScalar, "String::parse_scalar",( + context: &ExecutionContext, + this: IString + ) -> Scalar { + let value = this.0.parse::() + .map_err(|error| GenericFailure(format!("Failed to parse scalar value: {error:?}").into()).to_error(context.stack_trace))?; + dbg!(&value); + Ok(Scalar { + dimension: Dimension::zero(), + value, + }) + } + ); + build_method!( + database, + forward = methods::ParseUnsignedInteger, "String::parse_unsigned_integer",( + context: &ExecutionContext, + this: IString + ) -> UnsignedInteger { + let value = this.0.parse::() + .map_err(|error| GenericFailure(format!("Failed to parse unsigned integer: {error:?}").into()).to_error(context.stack_trace))?; + Ok(UnsignedInteger::from(value).into()) + } + ); + build_method!( + database, + forward = methods::ParseSignedInteger, "String::parse_signed_integer",( + context: &ExecutionContext, + this: IString + ) -> SignedInteger { + let value = this.0.parse::() + .map_err(|error| GenericFailure(format!("Failed to parse signed integer: {error:?}").into()).to_error(context.stack_trace))?; + Ok(SignedInteger::from(value).into()) + } + ); + build_method!( + database, + forward = methods::Contains, "String::contains",( + _context: &ExecutionContext, + this: IString, + pattern: IString + ) -> Boolean { + let contained = this.0.contains(pattern.0.as_str()); + Ok(Boolean(contained).into()) + } + ); +} + +#[cfg(test)] +mod test { + use crate::execution::{test_run, values::Boolean}; + + #[test] + fn method_format() { + todo!() + } + + #[test] + fn method_append() { + let product = test_run("\"1234\"::append(rhs = \"5678\") == \"12345678\"").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_slice() { + let product = test_run("\"1234\"::slice(start = 1u, end = 3u) == \"23\"").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("\"1234\"::slice(end = 3u) == \"123\"").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("\"1234\"::slice(start = 1u) == \"234\"").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_chunks() { + let product = + test_run("\"1234567\"::chunks(size = 2u) == [\"12\", \"34\", \"56\"]").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = + test_run("\"1234567\"::chunks(size = 2u, strict = true) == [\"12\", \"34\", \"56\"]") + .unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run( + "\"1234567\"::chunks(size = 2u, strict = false) == [\"12\", \"34\", \"56\", \"7\"]", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_lines() { + let product = test_run("\"12\\n34\\n56\"::lines() == [\"12\", \"34\", \"56\"]").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("\"12\\n34\\n56\\n\"::lines() == [\"12\", \"34\", \"56\"]").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = + test_run("\"12\\n34\\n\\n56\\n\"::lines() == [\"12\", \"34\", \"\", \"56\"]").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run( + "\"12\\n34\\n56\\n\"::lines(include_empty = false) == [\"12\", \"34\", \"56\"]", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run( + "\"12\\n34\\n\\n56\\n\"::lines(include_empty = false) == [\"12\", \"34\", \"56\"]", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run( + "\"12\\n34\\n56\\n\\n\"::lines(include_empty = true) == [\"12\", \"34\", \"56\", \"\"]", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("\"12\\n34\\n\\n56\\n\\n\"::lines(include_empty = true) == [\"12\", \"34\", \"\", \"56\", \"\"]").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run( + "\"12\\n34\\n\\n56\"::lines(include_empty = true) == [\"12\", \"34\", \"\", \"56\"]", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run( + "\"12\\n34\\n\\n56\"::lines(include_empty = false) == [\"12\", \"34\", \"56\"]", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_map() { + let product = test_run( + "\"abcd\"::map(f= (c: std.types.String) -> std.types.String (if c == \"b\" then \"X\" else c)) == \"aXcd\"", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_fold() { + let product = + test_run("\"aabbabaababb\"::fold(init = 0u, f = (previous: std.types.UInt, c: std.types.String) -> std.types.UInt (if c == \"a\" then previous + 1u else previous)) == 6u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_retain() { + let product = test_run( + "\"1234\"::retain(f = (c: std.types.String) -> std.types.Bool (c == \"1\" || c == \"3\")) == \"13\"", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_reverse() { + let product = test_run("\"1234\"::reverse() == \"4321\"").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_truncate() { + let product = test_run("\"1234\"::truncate(length = 2u) == \"12\"").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_to_lowercase() { + let product = test_run("\"ABcd\"::to_lowercase() == \"abcd\"").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_to_uppercase() { + let product = test_run("\"ABcd\"::to_uppercase() == \"ABCD\"").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_parse_scalar() { + let product = test_run("\"23\"::parse_scalar() == 23").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("\"23.45\"::parse_scalar() == 23.45").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("(\".45\"::parse_scalar() - 0.45)::abs() < 0.0001").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("\"-23\"::parse_scalar() == -23").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("\"-23.45\"::parse_scalar() == -23.45").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("(\"-.45\"::parse_scalar() - (-0.45))::abs() < 0.0001").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_parse_unsigned_integer() { + let product = test_run("\"23\"::parse_unsigned_integer() == 23u").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_parse_signed_integer() { + let product = test_run("\"23\"::parse_signed_integer() == 23i").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("\"-23\"::parse_signed_integer() == -23i").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn method_contains() { + let product = test_run("\"abcd\"::contains(pattern = \"a\")").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("\"abcd\"::contains(pattern = \"f\")").unwrap(); + assert_eq!(product, Boolean(false).into()); + + let product = test_run("\"abcd\"::contains(pattern = \"bcd\")").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("\"abcd\"::contains(pattern = \"bcde\")").unwrap(); + assert_eq!(product, Boolean(false).into()); + } +} diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 86f6fbc..de60dbe 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -107,10 +107,6 @@ impl ValueType { value_type: &ValueType, ) -> Result<(), TypeQualificationError> { match (self, value_type) { - (Self::TypeNone, Self::TypeNone) => Ok(()), - (Self::Boolean, Self::Boolean) => Ok(()), - (Self::SignedInteger, Self::SignedInteger) => Ok(()), - (Self::UnsignedInteger, Self::UnsignedInteger) => Ok(()), (Self::Scalar(Some(our_dimension)), Self::Scalar(Some(their_dimension))) | (Self::Vector2(Some(our_dimension)), Self::Vector2(Some(their_dimension))) | (Self::Vector3(Some(our_dimension)), Self::Vector3(Some(their_dimension))) @@ -144,7 +140,6 @@ impl ValueType { (Self::Dictionary(our_definition), Self::Dictionary(their_definition)) => { our_definition.check_other_qualifies(their_definition) } - (Self::ValueType, Self::ValueType) => Ok(()), (Self::MultiType(left, right), value_type) => { match ( left.check_other_qualifies(value_type), @@ -158,10 +153,16 @@ impl ValueType { } } (Self::Any, _) => Ok(()), - (expected, got) => Err(TypeQualificationError::This { - expected: expected.clone(), - got: got.clone(), - }), + (expected, got) => { + if expected == got { + Ok(()) + } else { + Err(TypeQualificationError::This { + expected: expected.clone(), + got: got.clone(), + }) + } + } } } } diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 8c696dd..6b245fe 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -188,6 +188,23 @@ } ] }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "." + }, + { + "type": "FIELD", + "name": "fractional", + "content": { + "type": "SYMBOL", + "name": "number" + } + } + ] + }, { "type": "SEQ", "members": [ From 78813b0fe465a1ec8a8a1b2d26977dc31e5f975a Mon Sep 17 00:00:00 2001 From: James Carl Date: Tue, 13 Jan 2026 19:53:08 -0500 Subject: [PATCH 073/106] Formatting --- Cargo.lock | 16 +- crates/interpreter/Cargo.toml | 1 + .../interpreter/src/execution/formatting.rs | 43 -- crates/interpreter/src/execution/mod.rs | 11 +- .../src/execution/values/boolean.rs | 46 +- .../src/execution/values/closure.rs | 63 ++- .../src/execution/values/dictionary.rs | 45 ++ .../interpreter/src/execution/values/file.rs | 32 +- .../src/execution/values/integer.rs | 78 ++- .../interpreter/src/execution/values/list.rs | 40 +- .../interpreter/src/execution/values/mod.rs | 24 +- .../src/execution/values/scalar.rs | 231 ++++---- .../src/execution/values/string/formatting.rs | 496 ++++++++++++++++++ .../values/{string.rs => string/mod.rs} | 111 +++- .../src/execution/values/value_type.rs | 32 +- .../src/execution/values/vector.rs | 55 +- .../interpreter/src/execution/values/void.rs | 43 +- crates/units/src/lib.rs | 4 +- 18 files changed, 1167 insertions(+), 204 deletions(-) delete mode 100644 crates/interpreter/src/execution/formatting.rs create mode 100644 crates/interpreter/src/execution/values/string/formatting.rs rename crates/interpreter/src/execution/values/{string.rs => string/mod.rs} (85%) diff --git a/Cargo.lock b/Cargo.lock index 1cb5e47..86162da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -318,7 +318,7 @@ dependencies = [ "log", "macros", "nalgebra 0.32.6", - "nom", + "nom 7.1.3", "nom_locate", "ouroboros", "paste", @@ -1040,7 +1040,7 @@ name = "imstr" version = "0.2.0" source = "git+https://github.com/IamTheCarl/imstr#a679d58d06f06a8e87c8640922aa157a0f86693f" dependencies = [ - "nom", + "nom 7.1.3", ] [[package]] @@ -1064,6 +1064,7 @@ dependencies = [ "hashable-map", "imstr 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "nalgebra 0.34.1", + "nom 8.0.0", "num-traits", "paste", "pretty_assertions", @@ -1423,6 +1424,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nom" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" +dependencies = [ + "memchr", +] + [[package]] name = "nom_locate" version = "4.2.0" @@ -1431,7 +1441,7 @@ checksum = "1e3c83c053b0713da60c5b8de47fe8e494fe3ece5267b2f23090a07a053ba8f3" dependencies = [ "bytecount", "memchr", - "nom", + "nom 7.1.3", ] [[package]] diff --git a/crates/interpreter/Cargo.toml b/crates/interpreter/Cargo.toml index 60e0a0e..1a87925 100644 --- a/crates/interpreter/Cargo.toml +++ b/crates/interpreter/Cargo.toml @@ -21,6 +21,7 @@ stack = "0.4.0" paste = "1.0.15" tempfile = "3.24.0" rayon = "1.11.0" +nom = "8.0.0" [build-dependencies] type-sitter-gen = "0.8" diff --git a/crates/interpreter/src/execution/formatting.rs b/crates/interpreter/src/execution/formatting.rs deleted file mode 100644 index 0991cd4..0000000 --- a/crates/interpreter/src/execution/formatting.rs +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2025 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::fmt::Display; - -/// Presents iterators in a comma separated format. -pub struct IteratorFormatter(pub I) -where - I: Iterator + Clone, - D: Display; - -impl Display for IteratorFormatter -where - I: Iterator + Clone, - D: Display, -{ - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let mut iter = self.0.clone().peekable(); - - loop { - match (iter.next(), iter.peek().is_some()) { - (Some(next), true) => write!(f, "{}, ", next)?, - (Some(next), false) => write!(f, "{}", next)?, - (None, _) => break Ok(()), - } - } - } -} diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index e939067..9038d20 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -32,7 +32,6 @@ use crate::{ use rayon::{join, prelude::*}; mod errors; -mod formatting; mod logging; mod stack; mod standard_environment; @@ -365,9 +364,11 @@ fn execute_function_call( let to_call = execute_expression(context, &call.node.to_call)?; let argument = values::Dictionary::from_ast(context, &call.node.argument)?; - context.stack_scope(ScopeType::Isolated, HashMap::new(), |context| { - to_call.call(context, argument) - })? + context.stack_scope( + to_call.call_scope_type(context), + HashMap::new(), + |context| to_call.call(context, argument), + )? } fn execute_method_call( @@ -381,7 +382,7 @@ fn execute_method_call( let argument = values::Dictionary::from_ast(context, &call.node.argument)?; context.stack_scope( - ScopeType::Isolated, + to_call.call_scope_type(context), HashMap::from_iter([(ImString::from("self"), self_dictionary.into())]), |context| to_call.call(context, argument), )? diff --git a/crates/interpreter/src/execution/values/boolean.rs b/crates/interpreter/src/execution/values/boolean.rs index 147ecc6..c296c07 100644 --- a/crates/interpreter/src/execution/values/boolean.rs +++ b/crates/interpreter/src/execution/values/boolean.rs @@ -16,7 +16,11 @@ * program. If not, see . */ -use crate::execution::{values::StaticType, ExecutionContext}; +use crate::execution::{ + logging::{LogLevel, LogMessage}, + values::{string::formatting::Style, StaticType}, + ExecutionContext, +}; use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; @@ -30,6 +34,32 @@ impl Object for Boolean { ValueType::Boolean } + fn format( + &self, + context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, + ) -> std::fmt::Result { + if !matches!(style, Style::Default) { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "Boolean values only support default formatting".into(), + }); + } + + if precision.is_some() { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "Boolean values cannot be formatted with precision".into(), + }); + } + + write!(f, "{}", self.0) + } + fn eq(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(self.0 == rhs.0) @@ -65,3 +95,17 @@ impl StaticType for Boolean { ValueType::Boolean } } + +#[cfg(test)] +mod test { + use crate::execution::{test_run, values}; + + #[test] + fn format() { + let product = test_run("\"{value}\"::format(value = true) == \"true\"").unwrap(); + assert_eq!(product, values::Boolean(true).into()); + + let product = test_run("\"{value}\"::format(value = false) == \"false\"").unwrap(); + assert_eq!(product, values::Boolean(true).into()); + } +} diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index eb44913..8acf86e 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -27,8 +27,9 @@ use crate::{ execution::{ errors::{ExpressionResult, GenericFailure, Raise}, find_all_variable_accesses_in_expression, find_value, + logging::{LogLevel, LogMessage}, stack::ScopeType, - values::{Dictionary, MissingAttributeError, Value}, + values::{string::formatting::Style, Dictionary, MissingAttributeError, Value}, ExecutionContext, }, }; @@ -236,6 +237,32 @@ impl Object for UserClosure { ValueType::Closure(self.data.signature.clone()) } + fn format( + &self, + context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, + ) -> std::fmt::Result { + if !matches!(style, Style::Default) { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "Boolean values only support default formatting".into(), + }); + } + + if precision.is_some() { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "Boolean values cannot be formatted with precision".into(), + }); + } + + write!(f, "{}", self.get_type(context)) + } + fn call(&self, context: &ExecutionContext, argument: Dictionary) -> ExpressionResult { self.data .signature @@ -277,6 +304,10 @@ pub trait BuiltinCallable: Sync + Send { fn name(&self) -> &str; fn signature(&self) -> &Arc; + + fn scope_type(&self) -> ScopeType { + ScopeType::Isolated + } } impl std::fmt::Debug for dyn BuiltinCallable { @@ -539,6 +570,36 @@ impl Object for BuiltinFunction { ValueType::Closure(context.database.get_forward(self.0).signature().clone()) } + fn format( + &self, + context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, + ) -> std::fmt::Result { + if !matches!(style, Style::Default) { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "Closures only support default formatting".into(), + }); + } + + if precision.is_some() { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "Closures cannot be formatted with precision".into(), + }); + } + + write!(f, "{}", self.get_type(context)) + } + + fn call_scope_type(&self, context: &ExecutionContext) -> ScopeType { + context.database.get_forward(self.0).forward.scope_type() + } + fn call(&self, context: &ExecutionContext, argument: Dictionary) -> ExpressionResult { context.database.get_forward(self.0).call(context, argument) } diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/crates/interpreter/src/execution/values/dictionary.rs index a8c6e38..81646cd 100644 --- a/crates/interpreter/src/execution/values/dictionary.rs +++ b/crates/interpreter/src/execution/values/dictionary.rs @@ -29,6 +29,7 @@ use crate::{ errors::{ErrorType, ExpressionResult, Raise as _}, find_all_variable_accesses_in_expression, stack::ScopeType, + values::string::formatting::Style, ExecutionContext, }, }; @@ -73,6 +74,30 @@ impl Object for Dictionary { self.data.struct_def.clone().into() } + fn format( + &self, + context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, + ) -> std::fmt::Result { + write!(f, "(")?; + + let mut items = self.data.members.iter().peekable(); + + while let Some((name, value)) = items.next() { + write!(f, "{name} = ")?; + value.format(context, f, style, precision)?; + if items.peek().is_some() { + write!(f, ", ")?; + } + } + + write!(f, ")")?; + + Ok(()) + } + fn get_attribute( &self, context: &ExecutionContext, @@ -177,6 +202,10 @@ impl Dictionary { pub fn iter(&self) -> impl Iterator { self.data.members.iter() } + + pub fn get(&self, name: &str) -> Option<&Value> { + self.data.members.get(name) + } } #[derive(Debug, Eq, PartialEq)] @@ -240,4 +269,20 @@ mod test { let product = test_run("let d = (one = 1u, two = one + 1u); in d.two").unwrap(); assert_eq!(product, values::UnsignedInteger::from(2).into()); } + + #[test] + fn format() { + let product = test_run("\"{value}\"::format(value = (a = 1u)) == \"(a = 1)\"").unwrap(); + assert_eq!(product, values::Boolean(true).into()); + + let product = + test_run("let result = \"{value}\"::format(value = (a = 1u, b = 2u)); in result == \"(a = 1, b = 2)\" || result == \"(b = 2, a = 1)\"") + .unwrap(); + assert_eq!(product, values::Boolean(true).into()); + + let product = + test_run("\"{value:X}\"::format(value = (a = 0xDEADBEEFu)) == \"(a = DEADBEEF)\"") + .unwrap(); + assert_eq!(product, values::Boolean(true).into()); + } } diff --git a/crates/interpreter/src/execution/values/file.rs b/crates/interpreter/src/execution/values/file.rs index 7d8ce64..abba5b2 100644 --- a/crates/interpreter/src/execution/values/file.rs +++ b/crates/interpreter/src/execution/values/file.rs @@ -25,7 +25,11 @@ use crate::{ build_method, execution::{ errors::{GenericFailure, Raise as _}, - values::{BuiltinCallableDatabase, IString, Object, StaticTypeName, ValueType}, + logging::{LogLevel, LogMessage}, + values::{ + string::formatting::Style, BuiltinCallableDatabase, IString, Object, StaticTypeName, + ValueType, + }, ExecutionContext, ExpressionResult, }, }; @@ -47,6 +51,32 @@ impl Object for File { fn get_type(&self, _context: &ExecutionContext) -> ValueType { ValueType::File } + + fn format( + &self, + context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, + ) -> std::fmt::Result { + if !matches!(style, Style::Debug) { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "Files only support debug formatting".into(), + }); + } + + if precision.is_some() { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "Files cannot be formatted with precision".into(), + }); + } + + write!(f, "{:?}", self.content.path()) + } } impl StaticTypeName for File { diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index 84a70f5..055341e 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -29,10 +29,10 @@ use std::{ use crate::execution::{ errors::{ExpressionResult, GenericFailure, Raise}, - logging::StackTrace, + logging::{LogLevel, LogMessage, StackTrace}, values::{ - closure::BuiltinCallableDatabase, integer::methods::MethodSet, BuiltinFunction, - MissingAttributeError, StaticType, + closure::BuiltinCallableDatabase, integer::methods::MethodSet, string::formatting::Style, + BuiltinFunction, MissingAttributeError, StaticType, }, ExecutionContext, }; @@ -48,6 +48,9 @@ impl From for Integer { } } +const INTEGER_FORMAT_WARNING_MESSAGE: &'static str = + "Integer formats such as Octal and Hex ignore precision"; + impl Object for Integer where I: IntOps, @@ -58,6 +61,55 @@ where I::static_type() } + fn format( + &self, + context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, + ) -> std::fmt::Result { + match style { + Style::Default => write!(f, "{}", self.0), + Style::Debug => write!(f, "{}", self.0), + Style::Octal => { + if precision.is_some() { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: INTEGER_FORMAT_WARNING_MESSAGE.into(), + }); + } + write!(f, "{:o}", self.0) + } + Style::Hex => { + if precision.is_some() { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: INTEGER_FORMAT_WARNING_MESSAGE.into(), + }); + } + write!(f, "{:x}", self.0) + } + Style::CapitalizedHex => { + if precision.is_some() { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: INTEGER_FORMAT_WARNING_MESSAGE.into(), + }); + } + write!(f, "{:X}", self.0) + } + Style::Exponent => { + write!(f, "{:e}", self.0) + } + Style::CapitalizedExponent => { + write!(f, "{:E}", self.0) + } + } + } + fn bit_and(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(Self(self.0 & rhs.0).into()) @@ -256,6 +308,14 @@ trait IntOps: + One + ToPrimitive + StaticType + + std::fmt::Display + + std::fmt::Debug + + std::fmt::Binary + + std::fmt::LowerExp + + std::fmt::UpperExp + + std::fmt::LowerHex + + std::fmt::UpperHex + + std::fmt::Octal { type MethodSet: MethodSet + 'static; @@ -1202,4 +1262,16 @@ mod test { let product = test_run("10i::midpoint(rhs = 10i) == 10i").unwrap(); assert_eq!(product, Boolean(true).into()); } + + #[test] + fn unsigned_format() { + let product = test_run("\"{a} {b:?} {c:o} {d:x} {e:X} {f:e} {g:E}\"::format(a = 10u, b = 32u, c = 0o123u, d = 0xDEADBEEFu, e = 0xDEADBEEFu, f = 1000u, g = 1000u) == \"10 32 123 deadbeef DEADBEEF 1e3 1E3\"").unwrap(); + assert_eq!(product, Boolean(true).into()); + } + + #[test] + fn signed_format() { + let product = test_run("\"{a} {b:?} {c:o} {d:x} {e:X} {f:e} {g:E}\"::format(a = 10i, b = 32i, c = 0o123i, d = 0xDEADBEEFi, e = 0xDEADBEEFi, f = 1000i, g = 1000i) == \"10 32 123 deadbeef DEADBEEF 1e3 1E3\"").unwrap(); + assert_eq!(product, Boolean(true).into()); + } } diff --git a/crates/interpreter/src/execution/values/list.rs b/crates/interpreter/src/execution/values/list.rs index 003f00b..3acfff0 100644 --- a/crates/interpreter/src/execution/values/list.rs +++ b/crates/interpreter/src/execution/values/list.rs @@ -23,8 +23,8 @@ use crate::{ execution::{ errors::{Error, ErrorType, GenericFailure, Raise as _}, values::{ - closure::BuiltinCallableDatabase, Boolean, BuiltinFunction, Dictionary, - MissingAttributeError, StaticType, UnsignedInteger, ValueNone, + closure::BuiltinCallableDatabase, string::formatting::Style, Boolean, BuiltinFunction, + Dictionary, MissingAttributeError, StaticType, UnsignedInteger, ValueNone, }, ExecutionContext, }, @@ -121,6 +121,29 @@ impl Object for List { ValueType::List(self.internal_type.clone().map(Box::new)) } + fn format( + &self, + context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, + ) -> std::fmt::Result { + write!(f, "[")?; + + let mut items = self.values.iter().peekable(); + + while let Some(value) = items.next() { + value.format(context, f, style, precision)?; + if items.peek().is_some() { + write!(f, ", ")?; + } + } + + write!(f, "]")?; + + Ok(()) + } + fn eq(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(self.values == rhs.values) @@ -967,4 +990,17 @@ mod test { let product = test_run("[1, 2, 3]::cartesian_product(other = [3, 4, 5]) == [[1, 3], [1, 4], [1, 5], [2, 3], [2, 4], [2, 5], [3, 3], [3, 4], [3, 5]]").unwrap(); assert_eq!(product, Boolean(true).into()); } + + #[test] + fn format() { + let product = test_run("\"{value}\"::format(value = [1u]) == \"[1]\"").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run("\"{value}\"::format(value = [1u, 2u]) == \"[1, 2]\"").unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = + test_run("\"{value:X}\"::format(value = [0xDEADBEEFu]) == \"[DEADBEEF]\"").unwrap(); + assert_eq!(product, Boolean(true).into()); + } } diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index f3ac557..ce7f3c9 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -22,7 +22,9 @@ use enum_dispatch::enum_dispatch; use enum_downcast::{AsVariant, EnumDowncast, IntoVariant}; use unwrap_enum::EnumAs; -use crate::execution::{logging::StackTrace, ExecutionContext}; +use crate::execution::{ + logging::StackTrace, stack::ScopeType, values::string::formatting::Style, ExecutionContext, +}; use super::errors::{ErrorType, ExpressionResult, Raise as _}; @@ -164,16 +166,13 @@ impl Display for MissingAttributeError { pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { fn get_type(&self, context: &ExecutionContext) -> ValueType; - // fn format( - // &self, - // _log: &dyn RuntimeLog, - // stack_trace: stack_trace: &S[SourceReference], - // _f: &mut dyn Write, - // _style: Style, - // _precision: Option, - // ) -> OperatorResult { - // UnsupportedOperationError::raise(self, stack_trace, "format") - // } + fn format( + &self, + context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, + ) -> std::fmt::Result; fn type_name(&self) -> Cow<'static, str> { Self::static_type_name().into() @@ -234,6 +233,9 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { } .to_error(context.stack_trace)) } + fn call_scope_type(&self, _context: &ExecutionContext) -> ScopeType { + ScopeType::Isolated + } fn call(&self, context: &ExecutionContext, _argument: Dictionary) -> ExpressionResult { UnsupportedOperationError::raise(self, context.stack_trace, "call") } diff --git a/crates/interpreter/src/execution/values/scalar.rs b/crates/interpreter/src/execution/values/scalar.rs index e951652..4ee35ad 100644 --- a/crates/interpreter/src/execution/values/scalar.rs +++ b/crates/interpreter/src/execution/values/scalar.rs @@ -23,10 +23,11 @@ use crate::{ build_method, execution::{ errors::{ExpressionResult, GenericFailure, Raise}, - logging::StackTrace, + logging::{LogLevel, LogMessage, StackTrace}, values::{ - self, closure::BuiltinCallableDatabase, Boolean, BuiltinFunction, - MissingAttributeError, SignedInteger, StaticType, UnsignedInteger, Vector2, + self, closure::BuiltinCallableDatabase, string::formatting::Style, Boolean, + BuiltinFunction, MissingAttributeError, SignedInteger, StaticType, UnsignedInteger, + Vector2, }, ExecutionContext, }, @@ -65,126 +66,85 @@ impl Object for Scalar { units::get_dimension_name(&self.dimension) } - // fn format( - // &self, - // log: &dyn RuntimeLog, - // stack_trace: [SourceReference], - // f: &mut dyn fmt::Write, - // style: Style, - // precision: Option, - // ) -> ExpressionResult { - // // This just takes a reference to the unit name, so it's pretty cheap. I don't mind if it's not always used. - // // In the rare case that a unit name is generated and memory is allocated on the heap, well we're clearly - // // not about to format a number, so it's clear that we're going to use this. - // let unit_name = BASE_UNITS - // .get(&self.dimension) - // .cloned() - // .unwrap_or_else(|| format_dimension(&self.dimension)); - - // match (style, precision, self.is_number()) { - // (Style::Default, None, true) => { - // write!(f, "{}", self.value).unwrap_formatting_result(span) - // } - // (Style::Default, None, false) => { - // write!(f, "{} {unit_name}", self.value).unwrap_formatting_result(span) - // } - // (Style::Default, Some(precision), true) => { - // write!(f, "{:.1$}", self.value, precision as usize).unwrap_formatting_result(span) - // } - // (Style::Default, Some(precision), false) => { - // write!(f, "{:.1$} {unit_name}", self.value, precision as usize) - // .unwrap_formatting_result(span) - // } - // (Style::Debug, None, true) => { - // write!(f, "{}", self.value).unwrap_formatting_result(span) - // } - // (Style::Debug, None, false) => { - // write!(f, "{} {unit_name}", self.value).unwrap_formatting_result(span) - // } - // (Style::Debug, Some(precision), true) => { - // write!(f, "{:.1$}", self.value, precision as usize).unwrap_formatting_result(span) - // } - // (Style::Debug, Some(precision), false) => { - // write!(f, "{:.1$} {unit_name}", self.value, precision as usize) - // .unwrap_formatting_result(span) - // } - // (Style::Octal, _, true) => { - // if precision.is_some() { - // log.push(LogMessage::FormatIntegerPrecision(span.clone())); - // } - // write!(f, "{:o}", self.value.into_inner() as usize).unwrap_formatting_result(span) - // } - // (Style::Octal, _, false) => { - // if precision.is_some() { - // log.push(LogMessage::FormatIntegerPrecision(span.clone())); - // } - // write!(f, "{:o} {unit_name}", self.value.into_inner() as usize) - // .unwrap_formatting_result(span) - // } - // (Style::Hex, _, true) => { - // if precision.is_some() { - // log.push(LogMessage::FormatIntegerPrecision(span.clone())); - // } - // write!(f, "{:x}", self.value.into_inner() as usize).unwrap_formatting_result(span) - // } - // (Style::Hex, _, false) => { - // if precision.is_some() { - // log.push(LogMessage::FormatIntegerPrecision(span.clone())); - // } - // write!(f, "{:x} {unit_name}", self.value.into_inner() as usize) - // .unwrap_formatting_result(span) - // } - // (Style::CapitalizedHex, _, true) => { - // if precision.is_some() { - // log.push(LogMessage::FormatIntegerPrecision(span.clone())); - // } - // write!(f, "{:X}", self.value.into_inner() as usize).unwrap_formatting_result(span) - // } - // (Style::CapitalizedHex, _, false) => { - // if precision.is_some() { - // log.push(LogMessage::FormatIntegerPrecision(span.clone())); - // } - // write!(f, "{:X} {unit_name}", self.value.into_inner() as usize) - // .unwrap_formatting_result(span) - // } - // (Style::Exponent, None, true) => { - // write!(f, "{:e}", self.value.into_inner() as usize).unwrap_formatting_result(span) - // } - // (Style::Exponent, None, false) => { - // write!(f, "{:e} {unit_name}", self.value.into_inner() as usize) - // .unwrap_formatting_result(span) - // } - // (Style::Exponent, Some(precision), true) => { - // write!(f, "{:.1$e}", self.value.into_inner(), precision as usize) - // .unwrap_formatting_result(span) - // } - // (Style::Exponent, Some(precision), false) => write!( - // f, - // "{:.1$e} {unit_name}", - // self.value.into_inner(), - // precision as usize - // ) - // .unwrap_formatting_result(span), - // (Style::CapitalizedExponent, None, true) => { - // write!(f, "{:E}", self.value.into_inner()).unwrap_formatting_result(span) - // } - // (Style::CapitalizedExponent, None, false) => { - // write!(f, "{:E} {unit_name}", self.value.into_inner()) - // .unwrap_formatting_result(span) - // } - // (Style::CapitalizedExponent, Some(precision), true) => { - // write!(f, "{:.1$E}", self.value.into_inner(), precision as usize) - // .unwrap_formatting_result(span) - // } - // (Style::CapitalizedExponent, Some(precision), false) => write!( - // f, - // "{:.1$E} {unit_name}", - // self.value.into_inner(), - // precision as usize - // ) - // .unwrap_formatting_result(span), - // } - // } + fn format( + &self, + context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, + ) -> std::fmt::Result { + // This just takes a reference to the unit name, so it's pretty cheap. I don't mind if it's not always used. + // In the rare case that a unit name is generated and memory is allocated on the heap, well we're clearly + // not about to format a number, so it's clear that we're going to use this. + let unit_name = units::get_base_unit_name(&self.dimension); + + match (style, precision, unit_name) { + (Style::Default, Option::None, Option::None) => { + write!(f, "{}", self.value) + } + (Style::Default, Option::None, Some(unit_name)) => { + write!(f, "{}{unit_name}", self.value) + } + (Style::Default, Some(precision), Option::None) => { + write!(f, "{:.1$}", self.value, precision as usize) + } + (Style::Default, Some(precision), Some(unit_name)) => { + write!(f, "{:.1$}{unit_name}", self.value, precision as usize) + } + (Style::Debug, Option::None, Option::None) => { + write!(f, "{}", self.value) + } + (Style::Debug, Option::None, Some(unit_name)) => { + write!(f, "{}{unit_name}", self.value) + } + (Style::Debug, Some(precision), Option::None) => { + write!(f, "{:.1$}", self.value, precision as usize) + } + (Style::Debug, Some(precision), Some(unit_name)) => { + write!(f, "{:.1$}{unit_name}", self.value, precision as usize) + } + (Style::Octal | Style::Hex | Style::CapitalizedHex, _, _) => { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "Scalar values cannot be formatted as integers".into(), + }); + + // Don't stop execution. Just use default formatting. + self.format(context, f, Style::Default, precision) + } + (Style::Exponent, Option::None, Option::None) => { + write!(f, "{:e}", self.value.into_inner() as usize) + } + (Style::Exponent, Option::None, Some(unit_name)) => { + write!(f, "{:e}{unit_name}", self.value.into_inner() as usize) + } + (Style::Exponent, Some(precision), Option::None) => { + write!(f, "{:.1$e}", self.value.into_inner(), precision as usize) + } + (Style::Exponent, Some(precision), Some(unit_name)) => write!( + f, + "{:.1$e}{unit_name}", + self.value.into_inner(), + precision as usize + ), + (Style::CapitalizedExponent, Option::None, Option::None) => { + write!(f, "{:E}", self.value.into_inner()) + } + (Style::CapitalizedExponent, Option::None, Some(unit_name)) => { + write!(f, "{:E}{unit_name}", self.value.into_inner()) + } + (Style::CapitalizedExponent, Some(precision), Option::None) => { + write!(f, "{:.1$E}", self.value.into_inner(), precision as usize) + } + (Style::CapitalizedExponent, Some(precision), Some(unit_name)) => write!( + f, + "{:.1$E}{unit_name}", + self.value.into_inner(), + precision as usize + ), + } + } fn addition(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { let rhs = self.unpack_same_dimension(context.stack_trace, rhs)?; @@ -1336,4 +1296,29 @@ mod test { let product = test_run("0deg::tan() == 0").unwrap(); assert_eq!(product, Boolean(true).into()); } + + #[test] + fn format() { + let product = test_run( + "\"{a} {b} {c:.2}\"::format(a = 10, b = 10m, c = 10.1234) == \"10 10m 10.12\"", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run( + "\"{a:?} {b:?} {c:?.2}\"::format(a = 10, b = 10m, c = 10.1234) == \"10 10m 10.12\"", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = + test_run("\"{a:e} {b:e} {c:e.2}\"::format(a = 1000, b = 1000m, c = 1234.1234) == \"1e3 1e3m 1.23e3\"") + .unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = + test_run("\"{a:E} {b:E} {c:E.2}\"::format(a = 1000, b = 1000m, c = 1234.1234) == \"1E3 1E3m 1.23E3\"") + .unwrap(); + assert_eq!(product, Boolean(true).into()); + } } diff --git a/crates/interpreter/src/execution/values/string/formatting.rs b/crates/interpreter/src/execution/values/string/formatting.rs new file mode 100644 index 0000000..80c2b35 --- /dev/null +++ b/crates/interpreter/src/execution/values/string/formatting.rs @@ -0,0 +1,496 @@ +/* + * Copyright 2024 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use std::fmt::Write; + +use imstr::ImString; +use nom::{ + branch::alt, + bytes::complete::{tag, take_while, take_while1}, + character::complete::char as nom_char, + combinator::{all_consuming, cut, map, recognize, success, value, verify}, + error::context, + multi::{fold_many0, many0}, + sequence::{delimited, pair, preceded}, + IResult, Parser, +}; + +use crate::execution::{ + errors::{ExpressionResult, GenericFailure, Raise}, + logging::{LocatedStr, StackTrace}, + values::{Dictionary, Object, UnsignedInteger}, + ExecutionContext, +}; + +pub type VResult = IResult>; + +#[derive(Debug, PartialEq, Clone, Copy)] +pub enum Style { + Default, + Debug, + Octal, + Hex, + CapitalizedHex, + Exponent, + CapitalizedExponent, +} + +impl Style { + fn parse(input: &str) -> VResult<&str, Self> { + alt(( + value(Self::Debug, nom_char('?')), + value(Self::Octal, nom_char('o')), + value(Self::Hex, nom_char('x')), + value(Self::CapitalizedHex, nom_char('X')), + value(Self::Exponent, nom_char('e')), + value(Self::CapitalizedExponent, nom_char('E')), + )) + .parse(input) + } +} + +fn ident(input: &str) -> VResult<&str, &str> { + recognize(pair( + take_while1(|c: char| c.is_alphabetic()), + take_while(|c: char| c.is_numeric()), + )) + .parse(input) +} + +#[derive(Debug, PartialEq, Clone)] +enum Precision { + Default, + Inline(u8), + Referenced(ImString), +} + +impl Precision { + fn parse(input: &str) -> VResult<&str, Self> { + preceded( + nom_char('.'), + alt(( + map(ident, |name| Self::Referenced(ImString::from(name))), + map(number, Self::Inline), + )), + ) + .parse(input) + } +} + +#[derive(Debug, PartialEq)] +struct Parameter { + name: ImString, + style: Style, + precision: Precision, +} + +impl Parameter { + fn parse(input: &str) -> VResult<&str, Self> { + delimited( + nom_char('{'), + cut(map( + pair( + map(ident, |name| ImString::from(name)), + alt(( + preceded( + nom_char(':'), + pair( + alt((Style::parse, success(Style::Default))), + alt((Precision::parse, success(Precision::Default))), + ), + ), + success((Style::Default, Precision::Default)), + )), + ), + |(name, (style, precision))| Parameter { + name, + style, + precision, + }, + )), + cut(context("Expected closing `}` for parameter", nom_char('}'))), + ) + .parse(input) + } +} + +#[derive(Debug, PartialEq)] +enum Component { + Litteral(String), + Parameter(Parameter), +} + +impl Component { + fn parse(input: &str) -> VResult<&str, Self> { + alt((Self::parse_litteral, map(Parameter::parse, Self::Parameter))).parse(input) + } + + fn parse_litteral(input: &str) -> VResult<&str, Self> { + map( + verify( + fold_many0( + alt((take_while1(|c| c != '{'), tag("{{"), tag("}}"))), + String::default, + |mut accum, item: &str| { + match item { + "{{" => accum.push('{'), + "}}" => accum.push('}'), + _ => { + accum.push_str(item); + } + } + + accum + }, + ), + |output: &str| !output.is_empty(), + ), + Self::Litteral, + ) + .parse(input) + } +} + +#[derive(Debug, PartialEq)] +pub struct Format { + components: Vec, +} + +impl Format { + pub fn parse(input: &str) -> VResult<&str, Self> { + map(all_consuming(many0(Component::parse)), |components| Self { + components, + }) + .parse(input) + } + + pub fn format( + &self, + context: &ExecutionContext, + f: &mut dyn Write, + arguments: Dictionary, + ) -> ExpressionResult<()> { + fn get_precision( + context: &ExecutionContext, + precision: &Precision, + arguments: &Dictionary, + ) -> ExpressionResult> { + match precision { + Precision::Default => Ok(Option::None), + Precision::Inline(precision) => Ok(Some(*precision)), + Precision::Referenced(name) => { + if let Some(argument) = arguments.get(name.as_str()).or_else(|| { + context + .get_variable(LocatedStr { + location: context.stack_trace.bottom().clone(), + string: name.as_str(), + }) + .ok() + }) { + let precision = argument + .downcast_ref::(context.stack_trace)? + .0; + + if precision <= u8::MAX as u64 { + Ok(Some(precision as u8)) + } else { + Err(GenericFailure( + format!( + "Precision of {precision} is not in the valid range of 0 to {}", + u8::MAX + ) + .into(), + ) + .to_error(context.stack_trace)) + } + } else { + Err( + GenericFailure(format!("Could not find argument `{name}`").into()) + .to_error(context.stack_trace), + ) + } + } + } + } + + for component in self.components.iter() { + match component { + Component::Litteral(text) => { + write!(f, "{}", text).unwrap_formatting_result(context.stack_trace)? + } + Component::Parameter(Parameter { + name, + style, + precision, + }) => { + let precision = get_precision(context, &precision, &arguments)?; + + if let Some(argument) = arguments.get(name.as_str()).or_else(|| { + context + .get_variable(LocatedStr { + location: context.stack_trace.bottom().clone(), + string: name.as_str(), + }) + .ok() + }) { + argument + .format(context, f, *style, precision) + .map_err(|error| { + GenericFailure(format!("Error while formatting: {error:?}").into()) + .to_error(context.stack_trace) + })?; + } else { + return Err(GenericFailure( + format!("Could not find argument `{name}`").into(), + ) + .to_error(context.stack_trace)); + } + } + } + } + + Ok(()) + } +} + +fn number(input: &str) -> VResult<&str, u8> { + map(take_while1(|c| "0123456789".contains(c)), |digits: &str| { + digits.parse::().unwrap() + }) + .parse(input) +} + +pub trait UnwrapFormattingResult { + fn unwrap_formatting_result(self, stack_trace: &StackTrace) -> ExpressionResult; +} + +impl UnwrapFormattingResult for std::result::Result { + fn unwrap_formatting_result(self, stack_trace: &StackTrace) -> ExpressionResult { + match self { + Ok(result) => Ok(result), + Err(error) => { + Err(GenericFailure(format!("Failed to format: {error}",).into()) + .to_error(stack_trace)) + } + } + } +} + +#[cfg(test)] +mod test { + use std::{collections::HashMap, sync::Mutex}; + + use common_data_types::{Dimension, Float}; + + use crate::execution::{ + build_prelude, + stack::StackScope, + values::{BuiltinCallableDatabase, Scalar}, + }; + + use super::*; + + #[test] + fn litterals() { + assert_eq!( + Component::parse_litteral("1234"), + Ok(("", Component::Litteral("1234".into()))) + ); + + assert_eq!( + Component::parse_litteral("1234{{}"), + Ok(("", Component::Litteral("1234{}".into()))) + ); + } + + #[test] + fn parameters() { + assert_eq!( + Parameter::parse("{thing}"), + Ok(( + "", + Parameter { + name: "thing".into(), + style: Style::Default, + precision: Precision::Default + } + )) + ); + assert_eq!( + Parameter::parse("{thing:?}"), + Ok(( + "", + Parameter { + name: "thing".into(), + style: Style::Debug, + precision: Precision::Default + } + )) + ); + assert_eq!( + Parameter::parse("{thing:.5}"), + Ok(( + "", + Parameter { + name: "thing".into(), + style: Style::Default, + precision: Precision::Inline(5) + } + )) + ); + assert_eq!( + Parameter::parse("{thing:.precision}"), + Ok(( + "", + Parameter { + name: "thing".into(), + style: Style::Default, + precision: Precision::Referenced("precision".into()) + } + )) + ); + } + + #[test] + fn litterals_and_parameters() { + assert_eq!(Format::parse(""), Ok(("", Format { components: vec![] }))); + + assert_eq!( + Format::parse(" {{}}"), + Ok(( + "", + Format { + components: vec![Component::Litteral(" {}".into())] + } + )) + ); + + assert_eq!( + Format::parse("{thang}"), + Ok(( + "", + Format { + components: vec![Component::Parameter(Parameter { + name: "thang".into(), + style: Style::Default, + precision: Precision::Default + })] + } + )) + ); + assert_eq!( + Format::parse(" {thang}"), + Ok(( + "", + Format { + components: vec![ + Component::Litteral(" ".into()), + Component::Parameter(Parameter { + name: "thang".into(), + style: Style::Default, + precision: Precision::Default + }) + ] + } + )) + ); + assert_eq!( + Format::parse(" {{}}{thang}"), + Ok(( + "", + Format { + components: vec![ + Component::Litteral(" {}".into()), + Component::Parameter(Parameter { + name: "thang".into(), + style: Style::Default, + precision: Precision::Default + }) + ] + } + )) + ); + } + + #[test] + fn do_format() { + let database = BuiltinCallableDatabase::new(); + let prelude = build_prelude(&database); + + let context = ExecutionContext { + log: &Mutex::new(Vec::new()), + stack_trace: &StackTrace::test(), + stack: &StackScope::top(&prelude), + database: &database, + }; + + let mut formatted = String::default(); + Format::parse("Test {value}") + .unwrap() + .1 + .format( + &context, + &mut formatted, + Dictionary::new( + &context, + HashMap::from_iter([( + "value".into(), + Scalar { + dimension: Dimension::zero(), + value: Float::new(42.24).unwrap(), + } + .into(), + )]), + ), + ) + .unwrap(); + assert_eq!(formatted, "Test 42.24"); + + let mut formatted = String::default(); + Format::parse("Test {one} {two}") + .unwrap() + .1 + .format( + &context, + &mut formatted, + Dictionary::new( + &context, + HashMap::from_iter([ + ( + "one".into(), + Scalar { + dimension: Dimension::zero(), + value: Float::new(1.0).unwrap(), + } + .into(), + ), + ( + "two".into(), + Scalar { + dimension: Dimension::zero(), + value: Float::new(2.0).unwrap(), + } + .into(), + ), + ]), + ), + ) + .unwrap(); + assert_eq!(formatted, "Test 1 2"); + } +} diff --git a/crates/interpreter/src/execution/values/string.rs b/crates/interpreter/src/execution/values/string/mod.rs similarity index 85% rename from crates/interpreter/src/execution/values/string.rs rename to crates/interpreter/src/execution/values/string/mod.rs index d8ef651..3ed605d 100644 --- a/crates/interpreter/src/execution/values/string.rs +++ b/crates/interpreter/src/execution/values/string/mod.rs @@ -17,15 +17,21 @@ */ use common_data_types::{Dimension, Float}; +use hashable_map::HashableMap; use imstr::ImString; use crate::{ build_closure_type, build_method, execution::{ errors::{GenericFailure, Raise}, + logging::{LocatedStr, LogLevel, LogMessage}, + stack::ScopeType, values::{ + closure::{BuiltinCallable, Signature}, + string::formatting::{Format, Style}, Boolean, BuiltinCallableDatabase, BuiltinFunction, Dictionary, List, - MissingAttributeError, Scalar, SignedInteger, StaticType, UnsignedInteger, ValueNone, + MissingAttributeError, Scalar, SignedInteger, StaticType, StructDefinition, + UnsignedInteger, ValueNone, }, ExecutionContext, }, @@ -33,7 +39,9 @@ use crate::{ use super::{value_type::ValueType, ExpressionResult, Object, StaticTypeName, Value}; -use std::{borrow::Cow, collections::HashMap}; +use std::{borrow::Cow, collections::HashMap, sync::Arc}; + +pub mod formatting; #[derive(Debug, Hash, Clone, Eq, PartialEq)] pub struct IString(pub ImString); @@ -43,6 +51,32 @@ impl Object for IString { ValueType::String } + fn format( + &self, + context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, + ) -> std::fmt::Result { + if !matches!(style, Style::Default) { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "Strings only support default formatting".into(), + }); + } + + if precision.is_some() { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "Strings cannot be formatted with precision".into(), + }); + } + + write!(f, "{}", self.0) + } + fn eq(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; Ok(self.0 == rhs.0) @@ -134,12 +168,69 @@ mod methods { pub struct Contains; } +fn register_format_method(database: &mut BuiltinCallableDatabase) { + struct BuiltFunction { + signature: Arc, + } + + impl BuiltinCallable for BuiltFunction { + fn call( + &self, + context: &ExecutionContext, + argument: Dictionary, + ) -> ExpressionResult { + let this = context + .get_variable(LocatedStr { + location: context.stack_trace.bottom().clone(), + string: "self", + })? + .downcast_ref::(context.stack_trace)? + .clone(); + + let (excess, format) = Format::parse(&this.0).map_err(|error| { + GenericFailure(format!("Failed to parse formatting string: {error:?}").into()) + .to_error(context.stack_trace) + })?; + assert!(excess.is_empty()); + + let mut output = String::new(); + format.format(context, &mut output, argument)?; + + Ok(IString(ImString::from(output)).into()) + } + + fn name(&self) -> &str { + "String::format" + } + + fn signature(&self) -> &Arc { + &self.signature + } + + fn scope_type(&self) -> ScopeType { + ScopeType::Inherited + } + } + + let callable = BuiltFunction { + signature: Arc::new(Signature { + argument_type: StructDefinition { + members: Arc::new(HashableMap::from(HashMap::new())), + variadic: true, + }, + return_type: ValueType::String, + }), + }; + + database.register::(Box::new(callable)) +} + pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_closure_type!(MapClosure(c: Value) -> Value); build_closure_type!(FoldClosure(previous: Value, c: Value) -> Value); build_closure_type!(RetainClosure(c: Value) -> Boolean); - // pub struct Format; + register_format_method(database); build_method!( database, @@ -392,7 +483,10 @@ mod test { #[test] fn method_format() { - todo!() + let product = + test_run("let one = 1; in \"Test {one} {two}\"::format(two = 2) == \"Test 1 2\"") + .unwrap(); + assert_eq!(product, Boolean(true).into()); } #[test] @@ -576,4 +670,13 @@ mod test { let product = test_run("\"abcd\"::contains(pattern = \"bcde\")").unwrap(); assert_eq!(product, Boolean(false).into()); } + + #[test] + fn format() { + let product = test_run( + "\"outer text: {value}\"::format(value = \"inner text\") == \"outer text: inner text\"", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + } } diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index de60dbe..97bd605 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -32,9 +32,11 @@ use crate::{ execute_expression, execution::{ errors::{ErrorType, ExpressionResult, Raise}, + logging::{LogLevel, LogMessage}, values::{ - self, closure::BuiltinCallableDatabase, dictionary::DictionaryData, BuiltinFunction, - Dictionary, File, IString, MissingAttributeError, + self, closure::BuiltinCallableDatabase, dictionary::DictionaryData, + string::formatting::Style, BuiltinFunction, Dictionary, File, IString, + MissingAttributeError, }, ExecutionContext, }, @@ -186,6 +188,32 @@ impl Object for ValueType { ValueType::ValueType } + fn format( + &self, + context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, + ) -> std::fmt::Result { + if !matches!(style, Style::Default) { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "Value types only support default formatting".into(), + }); + } + + if precision.is_some() { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "Value types cannot be formatted with precision".into(), + }); + } + + write!(f, "{}", self) + } + fn bit_or(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { let rhs: Self = rhs.downcast(context.stack_trace)?; diff --git a/crates/interpreter/src/execution/values/vector.rs b/crates/interpreter/src/execution/values/vector.rs index cf6080b..74945cb 100644 --- a/crates/interpreter/src/execution/values/vector.rs +++ b/crates/interpreter/src/execution/values/vector.rs @@ -10,8 +10,9 @@ use crate::{ errors::{ExpressionResult, GenericFailure, Raise as _}, logging::StackTrace, values::{ - closure::BuiltinCallableDatabase, scalar::UnwrapNotNan, BuiltinFunction, DowncastError, - MissingAttributeError, Object, Scalar, StaticType, StaticTypeName, Value, ValueType, + closure::BuiltinCallableDatabase, scalar::UnwrapNotNan, string::formatting::Style, + BuiltinFunction, DowncastError, MissingAttributeError, Object, Scalar, StaticType, + StaticTypeName, Value, ValueType, }, ExecutionContext, }, @@ -47,6 +48,35 @@ where I::get_type(self.dimension) } + fn format( + &self, + context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, + ) -> std::fmt::Result { + let mut components = self.value.iter().peekable(); + + write!(f, "<(")?; + + while let Some(value) = components.next() { + let c = Scalar { + dimension: self.dimension, + value: common_data_types::Float::new(value).expect("Vector has NaN component"), + }; + + c.format(context, f, style, precision)?; + + if components.peek().is_some() { + write!(f, ", ")?; + } + } + + write!(f, ")>")?; + + Ok(()) + } + fn addition(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { let rhs = self.unpack_same_dimension(context.stack_trace, rhs)?; let value = self.value + rhs.value; @@ -1514,4 +1544,25 @@ mod test { .into() ); } + + #[test] + fn format() { + let product = test_run( + "\"{a} {b} {c:.2}\"::format(a = <(1, 2)>, b = <(1m, 2m)>, c = <(1.234, 2.345)>) == \"<(1, 2)> <(1m, 2m)> <(1.23, 2.34)>\"", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run( + "\"{a} {b} {c:.2}\"::format(a = <(1, 2, 3)>, b = <(1m, 2m, 3m)>, c = <(1.234, 2.345, 3.456)>) == \"<(1, 2, 3)> <(1m, 2m, 3m)> <(1.23, 2.34, 3.46)>\"", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + + let product = test_run( + "\"{a} {b} {c:.2}\"::format(a = <(1, 2, 3, 4)>, b = <(1m, 2m, 3m, 4m)>, c = <(1.234, 2.345, 3.456, 4.567)>) == \"<(1, 2, 3, 4)> <(1m, 2m, 3m, 4m)> <(1.23, 2.34, 3.46, 4.57)>\"", + ) + .unwrap(); + assert_eq!(product, Boolean(true).into()); + } } diff --git a/crates/interpreter/src/execution/values/void.rs b/crates/interpreter/src/execution/values/void.rs index 650b433..13e4a82 100644 --- a/crates/interpreter/src/execution/values/void.rs +++ b/crates/interpreter/src/execution/values/void.rs @@ -16,7 +16,11 @@ * program. If not, see . */ -use crate::execution::{values::StaticType, ExecutionContext}; +use crate::execution::{ + logging::{LogLevel, LogMessage}, + values::{string::formatting::Style, StaticType}, + ExecutionContext, +}; use super::{value_type::ValueType, Object, StaticTypeName}; @@ -29,6 +33,32 @@ impl Object for ValueNone { fn get_type(&self, _context: &ExecutionContext) -> ValueType { ValueType::TypeNone } + + fn format( + &self, + context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, + ) -> std::fmt::Result { + if !matches!(style, Style::Default) { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "None values only support default formatting".into(), + }); + } + + if precision.is_some() { + context.log.push_message(LogMessage { + origin: context.stack_trace.bottom().clone(), + level: LogLevel::Warning, + message: "None values cannot be formatted with precision".into(), + }); + } + + write!(f, "None") + } } impl StaticTypeName for ValueNone { @@ -42,3 +72,14 @@ impl StaticType for ValueNone { ValueType::TypeNone } } + +#[cfg(test)] +mod test { + use crate::execution::{test_run, values}; + + #[test] + fn format() { + let product = test_run("\"{value}\"::format(value = std.consts.None) == \"None\"").unwrap(); + assert_eq!(product, values::Boolean(true).into()); + } +} diff --git a/crates/units/src/lib.rs b/crates/units/src/lib.rs index 39d7b18..5ff47d1 100644 --- a/crates/units/src/lib.rs +++ b/crates/units/src/lib.rs @@ -57,9 +57,9 @@ pub fn get_unit_list() -> &'static Vec<(String, Vec)> { list } -pub fn get_base_unit_name(dimension: impl AsRef) -> Option<&'static str> { +pub fn get_base_unit_name(dimension: &Dimension) -> Option<&'static str> { static BASE_UNITS: OnceLock = OnceLock::new(); let database = BASE_UNITS.get_or_init(|| include!(concat!(env!("OUT_DIR"), "/base_units.rs"))); - database.get(dimension.as_ref()).map(|cow| cow.borrow()) + database.get(dimension).map(|cow| cow.borrow()) } From 21f4b7029462357a948cd2cf6afdc33438d303fa Mon Sep 17 00:00:00 2001 From: James Carl Date: Wed, 14 Jan 2026 18:47:18 -0500 Subject: [PATCH 074/106] More generalized closure syntax --- crates/interpreter/src/compile/expressions.rs | 27 +- .../src/execution/values/closure.rs | 2 +- .../interpreter/src/execution/values/list.rs | 6 +- .../src/execution/values/string/mod.rs | 6 +- .../src/execution/values/value_type.rs | 4 +- .../src/execution/values/vector.rs | 24 +- .../tree-sitter-command-cad-model/grammar.js | 3 +- .../src/grammar.json | 34 +- .../src/node-types.json | 6 +- .../src/parser.c | 10167 ++++++++-------- .../test/corpus/closure.txt | 28 +- .../test/corpus/comments.txt | 9 +- 12 files changed, 5165 insertions(+), 5151 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index d93e72f..380bb4c 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -115,31 +115,6 @@ pub enum Expression { LetIn(AstNode>), } -impl<'t> Parse<'t, nodes::anon_unions::IdentityPath_StructDefinition<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::anon_unions::IdentityPath_StructDefinition<'t>, - ) -> Result, Error<'t, 'i>> { - match value { - nodes::anon_unions::IdentityPath_StructDefinition::IdentityPath(path) => { - Ok(AstNode::new( - file, - &path, - Self::IdentityPath(IdentityPath::parse(file, input, path)?), - )) - } - nodes::anon_unions::IdentityPath_StructDefinition::StructDefinition( - struct_definition, - ) => Ok(AstNode::new( - file, - &struct_definition, - Self::StructDefinition(StructDefinition::parse(file, input, struct_definition)?), - )), - } - } -} - impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for Expression { fn parse<'i>( file: &Arc, @@ -1419,7 +1394,7 @@ mod test { #[test] fn closure_definition() { - let root = full_compile("() -> std.None \"\""); + let root = full_compile("() -> std.None: \"\""); let closure = root.node.as_closuredefinition().unwrap(); let closure_reference = closure.reference.clone(); let argument = &closure.node.argument_type; diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 8acf86e..72d0bb7 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -649,7 +649,7 @@ mod test { #[test] fn define_closure() { - let product = test_run("() -> std.types.UInt 1u").unwrap(); + let product = test_run("() -> std.types.UInt: 1u").unwrap(); let expression = product.as_userclosure().unwrap().data.expression.clone(); diff --git a/crates/interpreter/src/execution/values/list.rs b/crates/interpreter/src/execution/values/list.rs index 3acfff0..f9dbd93 100644 --- a/crates/interpreter/src/execution/values/list.rs +++ b/crates/interpreter/src/execution/values/list.rs @@ -913,7 +913,7 @@ mod test { #[test] fn method_map() { let product = test_run( - "[1u, 2u, 3u, 4u]::map(f= (c: std.types.UInt) -> std.types.UInt c + 1u) == [2u, 3u, 4u, 5u]", + "[1u, 2u, 3u, 4u]::map(f= (c: std.types.UInt) -> std.types.UInt: c + 1u) == [2u, 3u, 4u, 5u]", ) .unwrap(); assert_eq!(product, Boolean(true).into()); @@ -922,14 +922,14 @@ mod test { #[test] fn method_fold() { let product = - test_run("[1u, 2u, 3u, 4u]::fold(init = 0u, f = (previous: std.types.UInt, c: std.types.UInt) -> std.types.UInt (previous + c)) == 10u").unwrap(); + test_run("[1u, 2u, 3u, 4u]::fold(init = 0u, f = (previous: std.types.UInt, c: std.types.UInt) -> std.types.UInt: previous + c) == 10u").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn method_retain() { let product = test_run( - "[1u, 2u, 3u, 4u]::retain(f = (c: std.types.UInt) -> std.types.Bool (c == 1u || c == 3u)) == [1u, 3u]", + "[1u, 2u, 3u, 4u]::retain(f = (c: std.types.UInt) -> std.types.Bool: c == 1u || c == 3u) == [1u, 3u]", ) .unwrap(); assert_eq!(product, Boolean(true).into()); diff --git a/crates/interpreter/src/execution/values/string/mod.rs b/crates/interpreter/src/execution/values/string/mod.rs index 3ed605d..00dffe3 100644 --- a/crates/interpreter/src/execution/values/string/mod.rs +++ b/crates/interpreter/src/execution/values/string/mod.rs @@ -574,7 +574,7 @@ mod test { #[test] fn method_map() { let product = test_run( - "\"abcd\"::map(f= (c: std.types.String) -> std.types.String (if c == \"b\" then \"X\" else c)) == \"aXcd\"", + "\"abcd\"::map(f= (c: std.types.String) -> std.types.String: if c == \"b\" then \"X\" else c) == \"aXcd\"", ) .unwrap(); assert_eq!(product, Boolean(true).into()); @@ -583,14 +583,14 @@ mod test { #[test] fn method_fold() { let product = - test_run("\"aabbabaababb\"::fold(init = 0u, f = (previous: std.types.UInt, c: std.types.String) -> std.types.UInt (if c == \"a\" then previous + 1u else previous)) == 6u").unwrap(); + test_run("\"aabbabaababb\"::fold(init = 0u, f = (previous: std.types.UInt, c: std.types.String) -> std.types.UInt: if c == \"a\" then previous + 1u else previous) == 6u").unwrap(); assert_eq!(product, Boolean(true).into()); } #[test] fn method_retain() { let product = test_run( - "\"1234\"::retain(f = (c: std.types.String) -> std.types.Bool (c == \"1\" || c == \"3\")) == \"13\"", + "\"1234\"::retain(f = (c: std.types.String) -> std.types.Bool: c == \"1\" || c == \"3\") == \"13\"", ) .unwrap(); assert_eq!(product, Boolean(true).into()); diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index 97bd605..e068f6f 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -634,7 +634,7 @@ mod test { #[test] fn type_closure() { - let closure = test_run("() -> std.types.None std.consts.None").unwrap(); + let closure = test_run("() -> std.types.None: std.consts.None").unwrap(); let closure = closure.as_userclosure().unwrap(); let database = BuiltinCallableDatabase::default(); @@ -858,7 +858,7 @@ mod test { .check_other_qualifies(&ValueType::Scalar(Some(Dimension::length()))) .unwrap(); - let closure = test_run("() -> std.types.None std.consts.None").unwrap(); + let closure = test_run("() -> std.types.None: std.consts.None").unwrap(); let closure = closure.as_userclosure().unwrap(); let database = BuiltinCallableDatabase::default(); diff --git a/crates/interpreter/src/execution/values/vector.rs b/crates/interpreter/src/execution/values/vector.rs index 74945cb..61ccc94 100644 --- a/crates/interpreter/src/execution/values/vector.rs +++ b/crates/interpreter/src/execution/values/vector.rs @@ -1475,40 +1475,40 @@ mod test { #[test] fn apply_vector2() { - let product = test_run("<(0m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m)>").unwrap(); + let product = test_run("<(0m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Length: c + 1m) == <(1m, 2m)>").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("<(0m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2')>").unwrap(); + let product = test_run("<(0m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Area: c * 1m) == <(0 'm^2', 1 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - test_run("<(0m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); + test_run("<(0m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Any: if c == 0m then 1m else 1 'm^2')").unwrap_err(); } #[test] fn apply_vector3() { - let product = test_run("<(0m, 1m, 2m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m, 3m)>").unwrap(); + let product = test_run("<(0m, 1m, 2m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Length: c + 1m) == <(1m, 2m, 3m)>").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("<(0m, 1m, 2m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2', 2 'm^2')>").unwrap(); + let product = test_run("<(0m, 1m, 2m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Area: c * 1m) == <(0 'm^2', 1 'm^2', 2 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - test_run("<(0m, 1m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); + test_run("<(0m, 1m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Any: if c == 0m then 1m else 1 'm^2')").unwrap_err(); } #[test] fn apply_vector4() { - let product = test_run("<(0m, 1m, 2m, 3m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Length c + 1m) == <(1m, 2m, 3m, 4m)>").unwrap(); + let product = test_run("<(0m, 1m, 2m, 3m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Length: c + 1m) == <(1m, 2m, 3m, 4m)>").unwrap(); assert_eq!(product, Boolean(true).into()); - let product = test_run("<(0m, 1m, 2m, 3m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Area c * 1m) == <(0 'm^2', 1 'm^2', 2 'm^2', 3 'm^2')>").unwrap(); + let product = test_run("<(0m, 1m, 2m, 3m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Area: c * 1m) == <(0 'm^2', 1 'm^2', 2 'm^2', 3 'm^2')>").unwrap(); assert_eq!(product, Boolean(true).into()); - test_run("<(0m, 1m, 1m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Any if c == 0m then 1m else 1 'm^2')").unwrap_err(); + test_run("<(0m, 1m, 1m, 1m)>::apply(f = (c: std.scalar.Length) -> std.scalar.Any: if c == 0m then 1m else 1 'm^2')").unwrap_err(); } #[test] fn fold_vector2() { - let product = test_run("<(1m, 2m)>::fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); + let product = test_run("<(1m, 2m)>::fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length: previous + c)").unwrap(); assert_eq!( product, Scalar { @@ -1521,7 +1521,7 @@ mod test { #[test] fn fold_vector3() { - let product = test_run("<(1m, 2m, 3m)>::fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); + let product = test_run("<(1m, 2m, 3m)>::fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length: previous + c)").unwrap(); assert_eq!( product, Scalar { @@ -1534,7 +1534,7 @@ mod test { #[test] fn fold_vector4() { - let product = test_run("<(1m, 2m, 3m, 4m)>::fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length previous + c)").unwrap(); + let product = test_run("<(1m, 2m, 3m, 4m)>::fold(init = 0m, f = (previous: std.scalar.Length, c: std.scalar.Length) -> std.scalar.Length: previous + c)").unwrap(); assert_eq!( product, Scalar { diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 879c1f2..cbe270c 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -211,7 +211,8 @@ module.exports = grammar({ closure_definition: $ => prec.left(PREC.closure, seq( field('argument', $.struct_definition), '->', - field('result', choice($.struct_definition, $.identity_path)), + field('result', $.expression), + ':', field('expression', $.expression), )), diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 6b245fe..0ec53ce 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -188,23 +188,6 @@ } ] }, - { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "." - }, - { - "type": "FIELD", - "name": "fractional", - "content": { - "type": "SYMBOL", - "name": "number" - } - } - ] - }, { "type": "SEQ", "members": [ @@ -1778,19 +1761,14 @@ "type": "FIELD", "name": "result", "content": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "struct_definition" - }, - { - "type": "SYMBOL", - "name": "identity_path" - } - ] + "type": "SYMBOL", + "name": "expression" } }, + { + "type": "STRING", + "value": ":" + }, { "type": "FIELD", "name": "expression", diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index e29900e..3cd2d9c 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -165,11 +165,7 @@ "required": true, "types": [ { - "type": "identity_path", - "named": true - }, - { - "type": "struct_definition", + "type": "expression", "named": true } ] diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index dc24faa..1ec807b 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -7,7 +7,7 @@ #endif #define LANGUAGE_VERSION 15 -#define STATE_COUNT 341 +#define STATE_COUNT 331 #define LARGE_STATE_COUNT 4 #define SYMBOL_COUNT 104 #define ALIAS_COUNT 0 @@ -847,10 +847,10 @@ static const TSMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [19] = {.index = 28, .length = 2}, [20] = {.index = 30, .length = 2}, [21] = {.index = 32, .length = 3}, - [22] = {.index = 35, .length = 3}, - [23] = {.index = 38, .length = 2}, - [24] = {.index = 40, .length = 2}, - [25] = {.index = 42, .length = 2}, + [22] = {.index = 35, .length = 2}, + [23] = {.index = 37, .length = 2}, + [24] = {.index = 39, .length = 2}, + [25] = {.index = 41, .length = 3}, [26] = {.index = 44, .length = 3}, [27] = {.index = 47, .length = 3}, [28] = {.index = 50, .length = 3}, @@ -916,26 +916,26 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_self_dictionary, 0}, {field_to_call, 2}, [35] = - {field_argument, 0}, - {field_expression, 3}, - {field_result, 2}, - [38] = {field_x, 1}, {field_y, 3}, - [40] = + [37] = {field_ident, 0}, {field_value, 2}, - [42] = + [39] = {field_default, 3}, {field_name, 0}, - [44] = + [41] = {field_assignments, 1}, {field_assignments, 2}, {field_assignments, 3}, - [47] = + [44] = {field_lhs, 1}, {field_relation, 2}, {field_rhs, 3}, + [47] = + {field_argument, 0}, + {field_expression, 4}, + {field_result, 2}, [50] = {field_condition, 1}, {field_on_false, 5}, @@ -967,10 +967,10 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [4] = 4, [5] = 5, [6] = 6, - [7] = 5, - [8] = 4, + [7] = 4, + [8] = 5, [9] = 9, - [10] = 9, + [10] = 10, [11] = 11, [12] = 12, [13] = 13, @@ -994,50 +994,50 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [31] = 31, [32] = 32, [33] = 33, - [34] = 34, - [35] = 35, - [36] = 35, - [37] = 11, + [34] = 33, + [35] = 9, + [36] = 11, + [37] = 12, [38] = 13, [39] = 14, [40] = 15, [41] = 16, - [42] = 18, - [43] = 19, - [44] = 20, - [45] = 21, - [46] = 22, - [47] = 23, - [48] = 27, - [49] = 30, + [42] = 17, + [43] = 18, + [44] = 19, + [45] = 20, + [46] = 21, + [47] = 26, + [48] = 30, + [49] = 32, [50] = 33, - [51] = 35, + [51] = 9, [52] = 11, - [53] = 13, - [54] = 14, - [55] = 15, - [56] = 16, - [57] = 17, - [58] = 18, - [59] = 19, - [60] = 20, - [61] = 21, - [62] = 22, - [63] = 23, - [64] = 27, - [65] = 30, - [66] = 33, - [67] = 24, - [68] = 25, - [69] = 32, - [70] = 34, - [71] = 25, - [72] = 12, - [73] = 9, - [74] = 17, - [75] = 75, - [76] = 76, - [77] = 77, + [53] = 12, + [54] = 13, + [55] = 14, + [56] = 15, + [57] = 16, + [58] = 17, + [59] = 18, + [60] = 19, + [61] = 20, + [62] = 21, + [63] = 26, + [64] = 30, + [65] = 32, + [66] = 66, + [67] = 22, + [68] = 23, + [69] = 24, + [70] = 31, + [71] = 71, + [72] = 22, + [73] = 24, + [74] = 66, + [75] = 10, + [76] = 10, + [77] = 71, [78] = 78, [79] = 79, [80] = 80, @@ -1088,219 +1088,209 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [125] = 125, [126] = 126, [127] = 127, - [128] = 75, + [128] = 128, [129] = 129, - [130] = 75, - [131] = 76, - [132] = 77, - [133] = 79, - [134] = 84, - [135] = 83, - [136] = 85, - [137] = 82, - [138] = 81, - [139] = 76, - [140] = 77, - [141] = 80, - [142] = 142, - [143] = 78, - [144] = 119, - [145] = 145, - [146] = 146, - [147] = 98, - [148] = 87, + [130] = 130, + [131] = 78, + [132] = 78, + [133] = 133, + [134] = 80, + [135] = 79, + [136] = 82, + [137] = 86, + [138] = 88, + [139] = 80, + [140] = 87, + [141] = 141, + [142] = 83, + [143] = 79, + [144] = 85, + [145] = 81, + [146] = 84, + [147] = 90, + [148] = 130, [149] = 149, - [150] = 93, - [151] = 85, - [152] = 79, - [153] = 92, - [154] = 154, - [155] = 90, - [156] = 107, - [157] = 88, + [150] = 107, + [151] = 91, + [152] = 92, + [153] = 94, + [154] = 95, + [155] = 86, + [156] = 88, + [157] = 98, [158] = 89, - [159] = 99, + [159] = 159, [160] = 160, - [161] = 102, - [162] = 103, - [163] = 104, - [164] = 105, - [165] = 106, - [166] = 96, - [167] = 108, - [168] = 109, - [169] = 169, - [170] = 112, - [171] = 95, - [172] = 118, - [173] = 123, - [174] = 160, - [175] = 149, - [176] = 154, - [177] = 146, - [178] = 101, - [179] = 116, + [161] = 106, + [162] = 162, + [163] = 163, + [164] = 114, + [165] = 115, + [166] = 116, + [167] = 117, + [168] = 118, + [169] = 119, + [170] = 120, + [171] = 121, + [172] = 122, + [173] = 124, + [174] = 125, + [175] = 99, + [176] = 162, + [177] = 149, + [178] = 159, + [179] = 163, [180] = 180, - [181] = 99, - [182] = 115, - [183] = 101, - [184] = 102, - [185] = 103, - [186] = 104, - [187] = 105, - [188] = 106, - [189] = 96, - [190] = 108, - [191] = 109, - [192] = 110, - [193] = 112, - [194] = 114, - [195] = 117, - [196] = 118, - [197] = 122, - [198] = 121, - [199] = 124, - [200] = 123, - [201] = 126, - [202] = 127, - [203] = 203, - [204] = 91, - [205] = 94, - [206] = 86, - [207] = 180, + [181] = 113, + [182] = 112, + [183] = 115, + [184] = 116, + [185] = 117, + [186] = 114, + [187] = 119, + [188] = 120, + [189] = 121, + [190] = 122, + [191] = 123, + [192] = 124, + [193] = 126, + [194] = 128, + [195] = 129, + [196] = 101, + [197] = 102, + [198] = 125, + [199] = 99, + [200] = 103, + [201] = 104, + [202] = 202, + [203] = 96, + [204] = 93, + [205] = 97, + [206] = 206, + [207] = 207, [208] = 208, [209] = 209, [210] = 210, - [211] = 120, + [211] = 127, [212] = 212, - [213] = 111, - [214] = 107, - [215] = 125, - [216] = 100, - [217] = 217, - [218] = 98, - [219] = 217, - [220] = 113, - [221] = 208, - [222] = 212, - [223] = 208, - [224] = 119, - [225] = 225, - [226] = 203, - [227] = 180, - [228] = 97, - [229] = 229, - [230] = 230, - [231] = 231, - [232] = 231, - [233] = 233, - [234] = 234, + [213] = 106, + [214] = 214, + [215] = 109, + [216] = 108, + [217] = 110, + [218] = 105, + [219] = 111, + [220] = 220, + [221] = 107, + [222] = 202, + [223] = 206, + [224] = 100, + [225] = 207, + [226] = 113, + [227] = 212, + [228] = 206, + [229] = 207, + [230] = 130, + [231] = 209, + [232] = 210, + [233] = 210, + [234] = 118, [235] = 235, [236] = 236, - [237] = 234, - [238] = 233, - [239] = 230, - [240] = 236, - [241] = 235, - [242] = 84, - [243] = 80, - [244] = 82, + [237] = 237, + [238] = 238, + [239] = 237, + [240] = 235, + [241] = 241, + [242] = 242, + [243] = 236, + [244] = 242, [245] = 245, - [246] = 90, - [247] = 247, - [248] = 88, - [249] = 89, - [250] = 95, - [251] = 75, - [252] = 76, - [253] = 77, - [254] = 85, - [255] = 255, - [256] = 79, + [246] = 241, + [247] = 238, + [248] = 248, + [249] = 78, + [250] = 80, + [251] = 79, + [252] = 252, + [253] = 86, + [254] = 254, + [255] = 88, + [256] = 256, [257] = 257, - [258] = 258, - [259] = 86, - [260] = 91, + [258] = 97, + [259] = 96, + [260] = 93, [261] = 261, - [262] = 94, - [263] = 261, - [264] = 264, - [265] = 265, - [266] = 266, - [267] = 265, - [268] = 264, - [269] = 266, + [262] = 262, + [263] = 263, + [264] = 263, + [265] = 257, + [266] = 261, + [267] = 262, + [268] = 268, + [269] = 269, [270] = 270, - [271] = 271, - [272] = 272, - [273] = 272, - [274] = 270, - [275] = 272, - [276] = 276, - [277] = 277, - [278] = 278, - [279] = 279, + [271] = 270, + [272] = 269, + [273] = 273, + [274] = 274, + [275] = 275, + [276] = 274, + [277] = 275, + [278] = 275, + [279] = 274, [280] = 280, [281] = 281, - [282] = 281, - [283] = 280, - [284] = 279, - [285] = 281, - [286] = 279, - [287] = 280, + [282] = 282, + [283] = 283, + [284] = 284, + [285] = 285, + [286] = 286, + [287] = 282, [288] = 288, - [289] = 288, - [290] = 290, - [291] = 291, - [292] = 292, + [289] = 284, + [290] = 286, + [291] = 283, + [292] = 285, [293] = 293, - [294] = 291, - [295] = 292, - [296] = 296, - [297] = 296, + [294] = 294, + [295] = 295, + [296] = 295, + [297] = 297, [298] = 298, [299] = 299, - [300] = 293, + [300] = 300, [301] = 301, - [302] = 302, + [302] = 301, [303] = 303, - [304] = 304, + [304] = 300, [305] = 305, - [306] = 306, - [307] = 305, + [306] = 300, + [307] = 307, [308] = 308, [309] = 309, - [310] = 310, - [311] = 302, - [312] = 302, + [310] = 301, + [311] = 311, + [312] = 300, [313] = 313, [314] = 314, - [315] = 302, - [316] = 316, - [317] = 308, - [318] = 308, + [315] = 315, + [316] = 315, + [317] = 317, + [318] = 318, [319] = 319, [320] = 320, [321] = 321, [322] = 322, [323] = 323, - [324] = 324, + [324] = 313, [325] = 325, - [326] = 324, - [327] = 327, - [328] = 320, - [329] = 329, + [326] = 317, + [327] = 319, + [328] = 328, + [329] = 328, [330] = 330, - [331] = 320, - [332] = 322, - [333] = 333, - [334] = 334, - [335] = 333, - [336] = 336, - [337] = 330, - [338] = 330, - [339] = 322, - [340] = 340, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1308,591 +1298,571 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(24); + if (eof) ADVANCE(23); ADVANCE_MAP( - '!', 55, - '"', 6, - '#', 25, - '&', 62, - '\'', 8, - '(', 82, - ')', 83, - '*', 57, - '+', 53, - ',', 48, - '-', 52, - '.', 46, - '/', 58, - '0', 34, - '1', 36, - ':', 81, - ';', 80, - '<', 72, - '=', 79, - '>', 66, - '[', 84, - ']', 85, - '^', 64, - 't', 29, - '|', 63, + '!', 54, + '"', 5, + '#', 24, + '&', 61, + '\'', 7, + '(', 81, + ')', 82, + '*', 56, + '+', 52, + ',', 47, + '-', 51, + '.', 45, + '/', 57, + '0', 33, + '1', 35, + ':', 80, + ';', 79, + '<', 71, + '=', 78, + '>', 65, + '[', 83, + ']', 84, + '^', 63, + 't', 28, + '|', 62, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(37); + lookahead == ' ') ADVANCE(25); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(36); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 1: ADVANCE_MAP( - '!', 54, - '"', 6, - '#', 25, - '(', 82, - ')', 83, - '*', 57, - '+', 53, - '-', 51, - '.', 11, - '/', 58, - '0', 35, - '<', 10, - '>', 19, - '[', 84, - ']', 85, + '!', 53, + '"', 5, + '#', 24, + '(', 81, + ')', 82, + '*', 56, + '+', 52, + '-', 50, + '.', 10, + '/', 57, + '0', 34, + '<', 9, + '>', 18, + '[', 83, + ']', 84, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(37); + lookahead == ' ') ADVANCE(25); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(36); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 2: ADVANCE_MAP( - '!', 54, - '"', 6, - '#', 25, - '(', 82, - '+', 53, + '!', 14, + '#', 24, + '&', 61, + '\'', 7, + '(', 81, + ')', 17, + '*', 56, + '+', 52, + ',', 47, '-', 51, - '.', 45, - '0', 35, - '<', 10, - '[', 84, + '.', 44, + '/', 57, + ':', 12, + '<', 71, + '=', 15, + '>', 66, + '^', 63, + '|', 62, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(37); + lookahead == ' ') ADVANCE(25); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 3: ADVANCE_MAP( - '!', 15, - '#', 25, - '&', 62, - '\'', 8, - '(', 82, - ')', 18, - '*', 57, - '+', 53, - ',', 48, - '-', 52, - '.', 45, - '/', 58, - ':', 13, + '!', 14, + '#', 24, + '\'', 7, + '*', 56, + '+', 52, + '-', 50, + '.', 44, + '/', 57, '<', 72, - '=', 16, - '>', 67, - '^', 64, - '|', 63, + '=', 15, + '>', 64, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); + lookahead == ' ') ADVANCE(25); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 4: ADVANCE_MAP( - '!', 15, - '#', 25, - '\'', 8, - '*', 57, - '+', 53, - '-', 51, - '.', 45, - '/', 58, - '<', 73, - '=', 16, - '>', 65, - ); - if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); - if (('A' <= lookahead && lookahead <= 'Z') || - lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); - END_STATE(); - case 5: - ADVANCE_MAP( - '!', 15, - '#', 25, - ')', 83, - '*', 57, - '+', 53, - '-', 51, - '/', 58, - '<', 73, - '=', 16, - '>', 68, + '!', 14, + '#', 24, + ')', 82, + '*', 56, + '+', 52, + '-', 50, + '/', 57, + '<', 72, + '=', 15, + '>', 67, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); + lookahead == ' ') ADVANCE(25); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(40); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(39); + END_STATE(); + case 5: + if (lookahead == '"') ADVANCE(31); + if (lookahead == '\\') ADVANCE(6); + if (lookahead != 0) ADVANCE(5); END_STATE(); case 6: if (lookahead == '"') ADVANCE(32); - if (lookahead == '\\') ADVANCE(7); - if (lookahead != 0) ADVANCE(6); + if (lookahead == '\\') ADVANCE(6); + if (lookahead != 0) ADVANCE(5); END_STATE(); case 7: - if (lookahead == '"') ADVANCE(33); - if (lookahead == '\\') ADVANCE(7); - if (lookahead != 0) ADVANCE(6); + if (lookahead == '\'') ADVANCE(42); + if (lookahead == '\\') ADVANCE(8); + if (lookahead != 0) ADVANCE(7); END_STATE(); case 8: if (lookahead == '\'') ADVANCE(43); - if (lookahead == '\\') ADVANCE(9); - if (lookahead != 0) ADVANCE(8); + if (lookahead == '\\') ADVANCE(8); + if (lookahead != 0) ADVANCE(7); END_STATE(); case 9: - if (lookahead == '\'') ADVANCE(44); - if (lookahead == '\\') ADVANCE(9); - if (lookahead != 0) ADVANCE(8); + if (lookahead == '(') ADVANCE(46); + if (lookahead == '<') ADVANCE(13); END_STATE(); case 10: - if (lookahead == '(') ADVANCE(47); - if (lookahead == '<') ADVANCE(14); + if (lookahead == '.') ADVANCE(11); END_STATE(); case 11: - if (lookahead == '.') ADVANCE(12); + if (lookahead == '.') ADVANCE(85); END_STATE(); case 12: - if (lookahead == '.') ADVANCE(86); + if (lookahead == ':') ADVANCE(49); END_STATE(); case 13: - if (lookahead == ':') ADVANCE(50); + if (lookahead == '<') ADVANCE(87); END_STATE(); case 14: - if (lookahead == '<') ADVANCE(88); + if (lookahead == '=') ADVANCE(73); END_STATE(); case 15: - if (lookahead == '=') ADVANCE(74); + if (lookahead == '=') ADVANCE(69); END_STATE(); case 16: - if (lookahead == '=') ADVANCE(70); + if (lookahead == '>') ADVANCE(88); END_STATE(); case 17: - if (lookahead == '>') ADVANCE(89); + if (lookahead == '>') ADVANCE(48); END_STATE(); case 18: - if (lookahead == '>') ADVANCE(49); + if (lookahead == '>') ADVANCE(16); END_STATE(); case 19: - if (lookahead == '>') ADVANCE(17); + if (eof) ADVANCE(23); + ADVANCE_MAP( + '!', 14, + '#', 24, + '&', 61, + '\'', 7, + '(', 81, + ')', 82, + '*', 56, + '+', 52, + ',', 47, + '-', 51, + '.', 44, + '/', 57, + ':', 80, + ';', 79, + '<', 71, + '=', 78, + '>', 66, + ']', 84, + '^', 63, + 't', 28, + '|', 62, + '0', 41, + '1', 41, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(25); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 20: - if (eof) ADVANCE(24); + if (eof) ADVANCE(23); ADVANCE_MAP( - '!', 15, - '#', 25, - '&', 62, - '\'', 8, - '(', 82, - ')', 83, - '*', 57, - '+', 53, - ',', 48, - '-', 52, - '.', 45, - '/', 58, - ':', 81, - ';', 80, - '<', 72, - '=', 79, - '>', 67, - ']', 85, - '^', 64, - 't', 29, - '|', 63, - '0', 42, - '1', 42, + '!', 14, + '#', 24, + '&', 61, + '\'', 7, + '(', 81, + ')', 82, + '*', 56, + '+', 52, + ',', 47, + '-', 50, + '.', 44, + '/', 57, + ':', 80, + ';', 79, + '<', 71, + '=', 78, + '>', 65, + ']', 84, + '^', 63, + '|', 62, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); + lookahead == ' ') ADVANCE(25); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(36); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 21: - if (eof) ADVANCE(24); + if (eof) ADVANCE(23); ADVANCE_MAP( - '!', 15, - '#', 25, - '&', 62, - '\'', 8, - '(', 82, - ')', 83, - '*', 57, - '+', 53, - ',', 48, + '!', 14, + '#', 24, + '&', 61, + '(', 81, + ')', 82, + '*', 56, + '+', 52, + ',', 47, '-', 51, - '.', 45, - '/', 58, - ':', 13, - ';', 80, - '<', 72, - '=', 79, + '/', 57, + ':', 80, + ';', 79, + '<', 71, + '=', 78, '>', 66, - ']', 85, - '^', 64, - '|', 63, + ']', 84, + '^', 63, + '|', 62, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(37); + lookahead == ' ') ADVANCE(25); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 22: - if (eof) ADVANCE(24); + if (eof) ADVANCE(23); ADVANCE_MAP( - '!', 15, - '#', 25, - '&', 62, - '(', 82, - ')', 83, - '*', 57, - '+', 53, - ',', 48, - '-', 52, - '/', 58, - ':', 13, - ';', 80, - '<', 72, - '=', 79, - '>', 67, - ']', 85, - '^', 64, - '|', 63, + '!', 14, + '#', 24, + '&', 61, + '(', 81, + ')', 82, + '*', 56, + '+', 52, + ',', 47, + '-', 50, + '/', 57, + ':', 80, + ';', 79, + '<', 71, + '=', 78, + '>', 65, + ']', 84, + '^', 63, + 't', 28, + '|', 62, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); + lookahead == ' ') ADVANCE(25); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 23: - if (eof) ADVANCE(24); - ADVANCE_MAP( - '!', 15, - '#', 25, - '&', 62, - '(', 82, - ')', 83, - '*', 57, - '+', 53, - ',', 48, - '-', 51, - '/', 58, - ':', 13, - ';', 80, - '<', 72, - '=', 79, - '>', 66, - ']', 85, - '^', 64, - 't', 29, - '|', 63, - ); - if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(26); - if (('A' <= lookahead && lookahead <= 'Z') || - lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); - END_STATE(); - case 24: ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); - case 25: + case 24: ACCEPT_TOKEN(sym_comment); if (lookahead != 0 && - lookahead != '\n') ADVANCE(25); + lookahead != '\n') ADVANCE(24); END_STATE(); - case 26: + case 25: ACCEPT_TOKEN(sym__whitespace); END_STATE(); + case 26: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == ' ') ADVANCE(77); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); + END_STATE(); case 27: ACCEPT_TOKEN(sym_identifier); - if (lookahead == ' ') ADVANCE(78); + if (lookahead == 'e') ADVANCE(29); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 28: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'e') ADVANCE(30); + if (lookahead == 'h') ADVANCE(27); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 29: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'h') ADVANCE(28); + if (lookahead == 'n') ADVANCE(26); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 30: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'n') ADVANCE(27); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 31: - ACCEPT_TOKEN(sym_identifier); - if (('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'Z') || - lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(31); + ACCEPT_TOKEN(sym_string); END_STATE(); case 32: ACCEPT_TOKEN(sym_string); + if (lookahead == '"') ADVANCE(31); + if (lookahead == '\\') ADVANCE(6); + if (lookahead != 0) ADVANCE(5); END_STATE(); case 33: - ACCEPT_TOKEN(sym_string); - if (lookahead == '"') ADVANCE(32); - if (lookahead == '\\') ADVANCE(7); - if (lookahead != 0) ADVANCE(6); + ACCEPT_TOKEN(aux_sym_base_ten_token1); + if (lookahead == 'b') ADVANCE(40); + if (lookahead == 'o') ADVANCE(37); + if (lookahead == 'x') ADVANCE(38); + if (lookahead == '0' || + lookahead == '1') ADVANCE(35); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(36); END_STATE(); case 34: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(41); - if (lookahead == 'o') ADVANCE(38); - if (lookahead == 'x') ADVANCE(39); - if (lookahead == '0' || - lookahead == '1') ADVANCE(36); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(37); + if (lookahead == 'b') ADVANCE(40); + if (lookahead == 'o') ADVANCE(37); + if (lookahead == 'x') ADVANCE(38); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(36); END_STATE(); case 35: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(41); - if (lookahead == 'o') ADVANCE(38); - if (lookahead == 'x') ADVANCE(39); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(37); + if (lookahead == '0' || + lookahead == '1') ADVANCE(35); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(36); END_STATE(); case 36: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == '0' || - lookahead == '1') ADVANCE(36); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(37); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(36); END_STATE(); case 37: - ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(37); - END_STATE(); - case 38: ACCEPT_TOKEN(aux_sym_octal_token1); END_STATE(); - case 39: + case 38: ACCEPT_TOKEN(aux_sym_hex_token1); END_STATE(); - case 40: + case 39: ACCEPT_TOKEN(aux_sym_hex_token2); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(40); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(39); END_STATE(); - case 41: + case 40: ACCEPT_TOKEN(aux_sym_binary_token1); END_STATE(); - case 42: + case 41: ACCEPT_TOKEN(aux_sym_binary_token2); if (lookahead == '0' || - lookahead == '1') ADVANCE(42); + lookahead == '1') ADVANCE(41); + END_STATE(); + case 42: + ACCEPT_TOKEN(sym_unit_quote); END_STATE(); case 43: ACCEPT_TOKEN(sym_unit_quote); + if (lookahead == '\'') ADVANCE(42); + if (lookahead == '\\') ADVANCE(8); + if (lookahead != 0) ADVANCE(7); END_STATE(); case 44: - ACCEPT_TOKEN(sym_unit_quote); - if (lookahead == '\'') ADVANCE(43); - if (lookahead == '\\') ADVANCE(9); - if (lookahead != 0) ADVANCE(8); + ACCEPT_TOKEN(anon_sym_DOT); END_STATE(); case 45: ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(11); END_STATE(); case 46: - ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(12); + ACCEPT_TOKEN(anon_sym_LT_LPAREN); END_STATE(); case 47: - ACCEPT_TOKEN(anon_sym_LT_LPAREN); + ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); case 48: - ACCEPT_TOKEN(anon_sym_COMMA); + ACCEPT_TOKEN(anon_sym_RPAREN_GT); END_STATE(); case 49: - ACCEPT_TOKEN(anon_sym_RPAREN_GT); + ACCEPT_TOKEN(anon_sym_COLON_COLON); END_STATE(); case 50: - ACCEPT_TOKEN(anon_sym_COLON_COLON); + ACCEPT_TOKEN(anon_sym_DASH); END_STATE(); case 51: ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '>') ADVANCE(86); END_STATE(); case 52: - ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '>') ADVANCE(87); + ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); case 53: - ACCEPT_TOKEN(anon_sym_PLUS); + ACCEPT_TOKEN(anon_sym_BANG); END_STATE(); case 54: ACCEPT_TOKEN(anon_sym_BANG); + if (lookahead == '=') ADVANCE(73); END_STATE(); case 55: - ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(74); + ACCEPT_TOKEN(anon_sym_STAR_STAR); END_STATE(); case 56: - ACCEPT_TOKEN(anon_sym_STAR_STAR); + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '*') ADVANCE(55); END_STATE(); case 57: - ACCEPT_TOKEN(anon_sym_STAR); - if (lookahead == '*') ADVANCE(56); + ACCEPT_TOKEN(anon_sym_SLASH); END_STATE(); case 58: - ACCEPT_TOKEN(anon_sym_SLASH); + ACCEPT_TOKEN(anon_sym_LT_LT); END_STATE(); case 59: - ACCEPT_TOKEN(anon_sym_LT_LT); + ACCEPT_TOKEN(anon_sym_GT_GT); END_STATE(); case 60: ACCEPT_TOKEN(anon_sym_GT_GT); + if (lookahead == '>') ADVANCE(88); END_STATE(); case 61: - ACCEPT_TOKEN(anon_sym_GT_GT); - if (lookahead == '>') ADVANCE(89); + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(74); END_STATE(); case 62: - ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(75); + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '|') ADVANCE(75); END_STATE(); case 63: - ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '|') ADVANCE(76); + ACCEPT_TOKEN(anon_sym_CARET); + if (lookahead == '^') ADVANCE(76); END_STATE(); case 64: - ACCEPT_TOKEN(anon_sym_CARET); - if (lookahead == '^') ADVANCE(77); + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(68); END_STATE(); case 65: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(69); + if (lookahead == '=') ADVANCE(68); + if (lookahead == '>') ADVANCE(60); END_STATE(); case 66: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(69); - if (lookahead == '>') ADVANCE(61); + if (lookahead == '=') ADVANCE(68); + if (lookahead == '>') ADVANCE(59); END_STATE(); case 67: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(69); - if (lookahead == '>') ADVANCE(60); + if (lookahead == '=') ADVANCE(68); + if (lookahead == '>') ADVANCE(16); END_STATE(); case 68: - ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(69); - if (lookahead == '>') ADVANCE(17); + ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); case 69: - ACCEPT_TOKEN(anon_sym_GT_EQ); + ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); case 70: - ACCEPT_TOKEN(anon_sym_EQ_EQ); + ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); case 71: - ACCEPT_TOKEN(anon_sym_LT_EQ); + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '<') ADVANCE(58); + if (lookahead == '=') ADVANCE(70); END_STATE(); case 72: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(59); - if (lookahead == '=') ADVANCE(71); + if (lookahead == '=') ADVANCE(70); END_STATE(); case 73: - ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '=') ADVANCE(71); - END_STATE(); - case 74: ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); - case 75: + case 74: ACCEPT_TOKEN(anon_sym_AMP_AMP); END_STATE(); - case 76: + case 75: ACCEPT_TOKEN(anon_sym_PIPE_PIPE); END_STATE(); - case 77: + case 76: ACCEPT_TOKEN(anon_sym_CARET_CARET); END_STATE(); - case 78: + case 77: ACCEPT_TOKEN(anon_sym_then); END_STATE(); - case 79: + case 78: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(70); + if (lookahead == '=') ADVANCE(69); END_STATE(); - case 80: + case 79: ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); - case 81: + case 80: ACCEPT_TOKEN(anon_sym_COLON); - if (lookahead == ':') ADVANCE(50); + if (lookahead == ':') ADVANCE(49); END_STATE(); - case 82: + case 81: ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); - case 83: + case 82: ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); - case 84: + case 83: ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); - case 85: + case 84: ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); - case 86: + case 85: ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); - case 87: + case 86: ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); - case 88: + case 87: ACCEPT_TOKEN(anon_sym_LT_LT_LT); END_STATE(); - case 89: + case 88: ACCEPT_TOKEN(anon_sym_GT_GT_GT); END_STATE(); default: @@ -2075,166 +2045,166 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [72] = {.lex_state = 1}, [73] = {.lex_state = 1}, [74] = {.lex_state = 1}, - [75] = {.lex_state = 21}, - [76] = {.lex_state = 21}, - [77] = {.lex_state = 21}, + [75] = {.lex_state = 1}, + [76] = {.lex_state = 1}, + [77] = {.lex_state = 1}, [78] = {.lex_state = 20}, - [79] = {.lex_state = 21}, + [79] = {.lex_state = 20}, [80] = {.lex_state = 20}, - [81] = {.lex_state = 20}, - [82] = {.lex_state = 20}, - [83] = {.lex_state = 20}, - [84] = {.lex_state = 20}, - [85] = {.lex_state = 21}, - [86] = {.lex_state = 23}, - [87] = {.lex_state = 20}, + [81] = {.lex_state = 19}, + [82] = {.lex_state = 19}, + [83] = {.lex_state = 19}, + [84] = {.lex_state = 19}, + [85] = {.lex_state = 19}, + [86] = {.lex_state = 20}, + [87] = {.lex_state = 19}, [88] = {.lex_state = 20}, - [89] = {.lex_state = 20}, - [90] = {.lex_state = 20}, - [91] = {.lex_state = 23}, - [92] = {.lex_state = 20}, - [93] = {.lex_state = 20}, - [94] = {.lex_state = 23}, - [95] = {.lex_state = 20}, + [89] = {.lex_state = 19}, + [90] = {.lex_state = 19}, + [91] = {.lex_state = 19}, + [92] = {.lex_state = 19}, + [93] = {.lex_state = 22}, + [94] = {.lex_state = 19}, + [95] = {.lex_state = 19}, [96] = {.lex_state = 22}, - [97] = {.lex_state = 20}, - [98] = {.lex_state = 22}, - [99] = {.lex_state = 22}, - [100] = {.lex_state = 20}, - [101] = {.lex_state = 22}, - [102] = {.lex_state = 22}, - [103] = {.lex_state = 22}, - [104] = {.lex_state = 22}, - [105] = {.lex_state = 22}, - [106] = {.lex_state = 22}, - [107] = {.lex_state = 22}, - [108] = {.lex_state = 22}, - [109] = {.lex_state = 22}, - [110] = {.lex_state = 20}, - [111] = {.lex_state = 20}, - [112] = {.lex_state = 22}, - [113] = {.lex_state = 20}, - [114] = {.lex_state = 20}, - [115] = {.lex_state = 20}, - [116] = {.lex_state = 20}, - [117] = {.lex_state = 20}, - [118] = {.lex_state = 22}, - [119] = {.lex_state = 22}, - [120] = {.lex_state = 20}, - [121] = {.lex_state = 20}, - [122] = {.lex_state = 20}, - [123] = {.lex_state = 22}, - [124] = {.lex_state = 20}, - [125] = {.lex_state = 20}, - [126] = {.lex_state = 20}, - [127] = {.lex_state = 20}, - [128] = {.lex_state = 3}, - [129] = {.lex_state = 20}, - [130] = {.lex_state = 20}, - [131] = {.lex_state = 3}, - [132] = {.lex_state = 3}, - [133] = {.lex_state = 3}, - [134] = {.lex_state = 3}, - [135] = {.lex_state = 3}, - [136] = {.lex_state = 3}, - [137] = {.lex_state = 3}, - [138] = {.lex_state = 3}, - [139] = {.lex_state = 20}, - [140] = {.lex_state = 20}, - [141] = {.lex_state = 3}, - [142] = {.lex_state = 20}, - [143] = {.lex_state = 3}, - [144] = {.lex_state = 3}, - [145] = {.lex_state = 20}, - [146] = {.lex_state = 3}, - [147] = {.lex_state = 3}, - [148] = {.lex_state = 3}, - [149] = {.lex_state = 20}, - [150] = {.lex_state = 3}, - [151] = {.lex_state = 20}, - [152] = {.lex_state = 20}, - [153] = {.lex_state = 3}, - [154] = {.lex_state = 3}, - [155] = {.lex_state = 3}, - [156] = {.lex_state = 3}, - [157] = {.lex_state = 3}, - [158] = {.lex_state = 3}, - [159] = {.lex_state = 3}, - [160] = {.lex_state = 20}, - [161] = {.lex_state = 3}, - [162] = {.lex_state = 3}, - [163] = {.lex_state = 3}, - [164] = {.lex_state = 3}, - [165] = {.lex_state = 3}, - [166] = {.lex_state = 3}, - [167] = {.lex_state = 3}, - [168] = {.lex_state = 3}, - [169] = {.lex_state = 20}, - [170] = {.lex_state = 3}, - [171] = {.lex_state = 3}, - [172] = {.lex_state = 3}, - [173] = {.lex_state = 3}, - [174] = {.lex_state = 20}, - [175] = {.lex_state = 20}, - [176] = {.lex_state = 3}, - [177] = {.lex_state = 3}, - [178] = {.lex_state = 3}, - [179] = {.lex_state = 3}, - [180] = {.lex_state = 20}, - [181] = {.lex_state = 20}, - [182] = {.lex_state = 3}, - [183] = {.lex_state = 20}, - [184] = {.lex_state = 20}, - [185] = {.lex_state = 20}, - [186] = {.lex_state = 20}, - [187] = {.lex_state = 20}, - [188] = {.lex_state = 20}, - [189] = {.lex_state = 20}, - [190] = {.lex_state = 20}, - [191] = {.lex_state = 20}, - [192] = {.lex_state = 3}, - [193] = {.lex_state = 20}, - [194] = {.lex_state = 3}, - [195] = {.lex_state = 3}, - [196] = {.lex_state = 20}, - [197] = {.lex_state = 3}, - [198] = {.lex_state = 3}, - [199] = {.lex_state = 3}, - [200] = {.lex_state = 20}, - [201] = {.lex_state = 3}, - [202] = {.lex_state = 3}, - [203] = {.lex_state = 20}, - [204] = {.lex_state = 3}, - [205] = {.lex_state = 3}, - [206] = {.lex_state = 3}, - [207] = {.lex_state = 20}, - [208] = {.lex_state = 22}, - [209] = {.lex_state = 20}, - [210] = {.lex_state = 20}, - [211] = {.lex_state = 3}, - [212] = {.lex_state = 3}, - [213] = {.lex_state = 3}, - [214] = {.lex_state = 20}, - [215] = {.lex_state = 3}, - [216] = {.lex_state = 3}, - [217] = {.lex_state = 20}, - [218] = {.lex_state = 20}, - [219] = {.lex_state = 20}, - [220] = {.lex_state = 3}, - [221] = {.lex_state = 22}, - [222] = {.lex_state = 3}, - [223] = {.lex_state = 22}, - [224] = {.lex_state = 20}, - [225] = {.lex_state = 20}, - [226] = {.lex_state = 20}, - [227] = {.lex_state = 20}, - [228] = {.lex_state = 3}, - [229] = {.lex_state = 1}, - [230] = {.lex_state = 1}, - [231] = {.lex_state = 1}, - [232] = {.lex_state = 1}, - [233] = {.lex_state = 1}, - [234] = {.lex_state = 1}, + [97] = {.lex_state = 22}, + [98] = {.lex_state = 19}, + [99] = {.lex_state = 21}, + [100] = {.lex_state = 19}, + [101] = {.lex_state = 19}, + [102] = {.lex_state = 19}, + [103] = {.lex_state = 19}, + [104] = {.lex_state = 19}, + [105] = {.lex_state = 19}, + [106] = {.lex_state = 21}, + [107] = {.lex_state = 21}, + [108] = {.lex_state = 19}, + [109] = {.lex_state = 19}, + [110] = {.lex_state = 19}, + [111] = {.lex_state = 19}, + [112] = {.lex_state = 19}, + [113] = {.lex_state = 21}, + [114] = {.lex_state = 21}, + [115] = {.lex_state = 21}, + [116] = {.lex_state = 21}, + [117] = {.lex_state = 21}, + [118] = {.lex_state = 21}, + [119] = {.lex_state = 21}, + [120] = {.lex_state = 21}, + [121] = {.lex_state = 21}, + [122] = {.lex_state = 21}, + [123] = {.lex_state = 19}, + [124] = {.lex_state = 21}, + [125] = {.lex_state = 21}, + [126] = {.lex_state = 19}, + [127] = {.lex_state = 19}, + [128] = {.lex_state = 19}, + [129] = {.lex_state = 19}, + [130] = {.lex_state = 21}, + [131] = {.lex_state = 2}, + [132] = {.lex_state = 19}, + [133] = {.lex_state = 19}, + [134] = {.lex_state = 2}, + [135] = {.lex_state = 2}, + [136] = {.lex_state = 2}, + [137] = {.lex_state = 2}, + [138] = {.lex_state = 2}, + [139] = {.lex_state = 19}, + [140] = {.lex_state = 2}, + [141] = {.lex_state = 19}, + [142] = {.lex_state = 2}, + [143] = {.lex_state = 19}, + [144] = {.lex_state = 2}, + [145] = {.lex_state = 2}, + [146] = {.lex_state = 2}, + [147] = {.lex_state = 2}, + [148] = {.lex_state = 2}, + [149] = {.lex_state = 19}, + [150] = {.lex_state = 2}, + [151] = {.lex_state = 2}, + [152] = {.lex_state = 2}, + [153] = {.lex_state = 2}, + [154] = {.lex_state = 2}, + [155] = {.lex_state = 19}, + [156] = {.lex_state = 19}, + [157] = {.lex_state = 2}, + [158] = {.lex_state = 2}, + [159] = {.lex_state = 2}, + [160] = {.lex_state = 19}, + [161] = {.lex_state = 2}, + [162] = {.lex_state = 19}, + [163] = {.lex_state = 2}, + [164] = {.lex_state = 2}, + [165] = {.lex_state = 2}, + [166] = {.lex_state = 2}, + [167] = {.lex_state = 2}, + [168] = {.lex_state = 2}, + [169] = {.lex_state = 2}, + [170] = {.lex_state = 2}, + [171] = {.lex_state = 2}, + [172] = {.lex_state = 2}, + [173] = {.lex_state = 2}, + [174] = {.lex_state = 2}, + [175] = {.lex_state = 2}, + [176] = {.lex_state = 19}, + [177] = {.lex_state = 19}, + [178] = {.lex_state = 2}, + [179] = {.lex_state = 2}, + [180] = {.lex_state = 19}, + [181] = {.lex_state = 2}, + [182] = {.lex_state = 2}, + [183] = {.lex_state = 19}, + [184] = {.lex_state = 19}, + [185] = {.lex_state = 19}, + [186] = {.lex_state = 19}, + [187] = {.lex_state = 19}, + [188] = {.lex_state = 19}, + [189] = {.lex_state = 19}, + [190] = {.lex_state = 19}, + [191] = {.lex_state = 2}, + [192] = {.lex_state = 19}, + [193] = {.lex_state = 2}, + [194] = {.lex_state = 2}, + [195] = {.lex_state = 2}, + [196] = {.lex_state = 2}, + [197] = {.lex_state = 2}, + [198] = {.lex_state = 19}, + [199] = {.lex_state = 19}, + [200] = {.lex_state = 2}, + [201] = {.lex_state = 2}, + [202] = {.lex_state = 19}, + [203] = {.lex_state = 2}, + [204] = {.lex_state = 2}, + [205] = {.lex_state = 2}, + [206] = {.lex_state = 19}, + [207] = {.lex_state = 21}, + [208] = {.lex_state = 19}, + [209] = {.lex_state = 19}, + [210] = {.lex_state = 19}, + [211] = {.lex_state = 2}, + [212] = {.lex_state = 2}, + [213] = {.lex_state = 19}, + [214] = {.lex_state = 19}, + [215] = {.lex_state = 2}, + [216] = {.lex_state = 2}, + [217] = {.lex_state = 2}, + [218] = {.lex_state = 2}, + [219] = {.lex_state = 2}, + [220] = {.lex_state = 19}, + [221] = {.lex_state = 19}, + [222] = {.lex_state = 19}, + [223] = {.lex_state = 19}, + [224] = {.lex_state = 2}, + [225] = {.lex_state = 21}, + [226] = {.lex_state = 19}, + [227] = {.lex_state = 2}, + [228] = {.lex_state = 19}, + [229] = {.lex_state = 21}, + [230] = {.lex_state = 19}, + [231] = {.lex_state = 19}, + [232] = {.lex_state = 19}, + [233] = {.lex_state = 19}, + [234] = {.lex_state = 19}, [235] = {.lex_state = 1}, [236] = {.lex_state = 1}, [237] = {.lex_state = 1}, @@ -2242,36 +2212,36 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [239] = {.lex_state = 1}, [240] = {.lex_state = 1}, [241] = {.lex_state = 1}, - [242] = {.lex_state = 2}, - [243] = {.lex_state = 2}, - [244] = {.lex_state = 2}, + [242] = {.lex_state = 1}, + [243] = {.lex_state = 1}, + [244] = {.lex_state = 1}, [245] = {.lex_state = 1}, - [246] = {.lex_state = 2}, + [246] = {.lex_state = 1}, [247] = {.lex_state = 1}, [248] = {.lex_state = 1}, - [249] = {.lex_state = 1}, - [250] = {.lex_state = 1}, - [251] = {.lex_state = 4}, + [249] = {.lex_state = 3}, + [250] = {.lex_state = 3}, + [251] = {.lex_state = 3}, [252] = {.lex_state = 4}, - [253] = {.lex_state = 4}, + [253] = {.lex_state = 3}, [254] = {.lex_state = 4}, - [255] = {.lex_state = 5}, + [255] = {.lex_state = 3}, [256] = {.lex_state = 4}, - [257] = {.lex_state = 5}, - [258] = {.lex_state = 5}, - [259] = {.lex_state = 4}, - [260] = {.lex_state = 4}, - [261] = {.lex_state = 4}, - [262] = {.lex_state = 4}, - [263] = {.lex_state = 4}, - [264] = {.lex_state = 4}, - [265] = {.lex_state = 4}, - [266] = {.lex_state = 4}, + [257] = {.lex_state = 3}, + [258] = {.lex_state = 3}, + [259] = {.lex_state = 3}, + [260] = {.lex_state = 3}, + [261] = {.lex_state = 3}, + [262] = {.lex_state = 3}, + [263] = {.lex_state = 3}, + [264] = {.lex_state = 3}, + [265] = {.lex_state = 1}, + [266] = {.lex_state = 1}, [267] = {.lex_state = 1}, - [268] = {.lex_state = 1}, + [268] = {.lex_state = 0}, [269] = {.lex_state = 1}, [270] = {.lex_state = 1}, - [271] = {.lex_state = 0}, + [271] = {.lex_state = 1}, [272] = {.lex_state = 1}, [273] = {.lex_state = 1}, [274] = {.lex_state = 1}, @@ -2281,66 +2251,56 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [278] = {.lex_state = 1}, [279] = {.lex_state = 1}, [280] = {.lex_state = 1}, - [281] = {.lex_state = 1}, - [282] = {.lex_state = 1}, - [283] = {.lex_state = 1}, + [281] = {.lex_state = 0}, + [282] = {.lex_state = 0}, + [283] = {.lex_state = 0}, [284] = {.lex_state = 1}, [285] = {.lex_state = 1}, [286] = {.lex_state = 1}, - [287] = {.lex_state = 1}, - [288] = {.lex_state = 0}, - [289] = {.lex_state = 0}, - [290] = {.lex_state = 0}, - [291] = {.lex_state = 1}, - [292] = {.lex_state = 0}, - [293] = {.lex_state = 1}, + [287] = {.lex_state = 0}, + [288] = {.lex_state = 1}, + [289] = {.lex_state = 1}, + [290] = {.lex_state = 1}, + [291] = {.lex_state = 0}, + [292] = {.lex_state = 1}, + [293] = {.lex_state = 0}, [294] = {.lex_state = 1}, [295] = {.lex_state = 0}, - [296] = {.lex_state = 1}, - [297] = {.lex_state = 1}, + [296] = {.lex_state = 0}, + [297] = {.lex_state = 0}, [298] = {.lex_state = 0}, [299] = {.lex_state = 1}, - [300] = {.lex_state = 1}, + [300] = {.lex_state = 20}, [301] = {.lex_state = 1}, - [302] = {.lex_state = 21}, - [303] = {.lex_state = 0}, - [304] = {.lex_state = 1}, - [305] = {.lex_state = 0}, - [306] = {.lex_state = 1}, + [302] = {.lex_state = 1}, + [303] = {.lex_state = 1}, + [304] = {.lex_state = 20}, + [305] = {.lex_state = 1}, + [306] = {.lex_state = 20}, [307] = {.lex_state = 0}, [308] = {.lex_state = 1}, - [309] = {.lex_state = 1}, - [310] = {.lex_state = 0}, - [311] = {.lex_state = 21}, - [312] = {.lex_state = 21}, + [309] = {.lex_state = 0}, + [310] = {.lex_state = 1}, + [311] = {.lex_state = 1}, + [312] = {.lex_state = 20}, [313] = {.lex_state = 1}, [314] = {.lex_state = 0}, - [315] = {.lex_state = 21}, + [315] = {.lex_state = 0}, [316] = {.lex_state = 0}, - [317] = {.lex_state = 1}, - [318] = {.lex_state = 1}, + [317] = {.lex_state = 0}, + [318] = {.lex_state = 0}, [319] = {.lex_state = 1}, [320] = {.lex_state = 0}, - [321] = {.lex_state = 0}, - [322] = {.lex_state = 0}, + [321] = {.lex_state = 4}, + [322] = {.lex_state = 20}, [323] = {.lex_state = 0}, [324] = {.lex_state = 1}, - [325] = {.lex_state = 21}, - [326] = {.lex_state = 1}, - [327] = {.lex_state = 5}, - [328] = {.lex_state = 0}, - [329] = {.lex_state = 0}, - [330] = {.lex_state = 1}, - [331] = {.lex_state = 0}, - [332] = {.lex_state = 0}, - [333] = {.lex_state = 1}, - [334] = {.lex_state = 0}, - [335] = {.lex_state = 1}, - [336] = {.lex_state = 20}, - [337] = {.lex_state = 1}, - [338] = {.lex_state = 1}, - [339] = {.lex_state = 0}, - [340] = {.lex_state = 0}, + [325] = {.lex_state = 19}, + [326] = {.lex_state = 0}, + [327] = {.lex_state = 1}, + [328] = {.lex_state = 1}, + [329] = {.lex_state = 1}, + [330] = {.lex_state = 0}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -2401,36 +2361,36 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_GT_GT_GT] = ACTIONS(1), }, [STATE(1)] = { - [sym_source_file] = STATE(340), - [sym_base_ten] = STATE(313), - [sym_octal] = STATE(313), - [sym_hex] = STATE(313), - [sym_binary] = STATE(313), - [sym_integer] = STATE(318), - [sym_signed_integer] = STATE(120), - [sym_unsigned_integer] = STATE(120), - [sym_number] = STATE(77), - [sym__float] = STATE(76), - [sym_scalar] = STATE(120), - [sym_vector2] = STATE(120), - [sym_vector3] = STATE(120), - [sym_vector4] = STATE(120), - [sym_boolean] = STATE(120), - [sym_function_call] = STATE(120), - [sym_method_call] = STATE(120), - [sym_expression] = STATE(209), - [sym_unary_expression] = STATE(120), - [sym_binary_expression] = STATE(120), - [sym_if] = STATE(120), - [sym_let_in] = STATE(120), - [sym_identity_path] = STATE(120), - [sym_self_path] = STATE(120), - [sym_parenthesis] = STATE(120), - [sym_list] = STATE(120), - [sym_struct_definition] = STATE(119), - [sym_dictionary_construction] = STATE(120), - [sym_closure_definition] = STATE(120), - [sym_formula] = STATE(120), + [sym_source_file] = STATE(318), + [sym_base_ten] = STATE(303), + [sym_octal] = STATE(303), + [sym_hex] = STATE(303), + [sym_binary] = STATE(303), + [sym_integer] = STATE(301), + [sym_signed_integer] = STATE(108), + [sym_unsigned_integer] = STATE(108), + [sym_number] = STATE(80), + [sym__float] = STATE(79), + [sym_scalar] = STATE(108), + [sym_vector2] = STATE(108), + [sym_vector3] = STATE(108), + [sym_vector4] = STATE(108), + [sym_boolean] = STATE(108), + [sym_function_call] = STATE(108), + [sym_method_call] = STATE(108), + [sym_expression] = STATE(214), + [sym_unary_expression] = STATE(108), + [sym_binary_expression] = STATE(108), + [sym_if] = STATE(108), + [sym_let_in] = STATE(108), + [sym_identity_path] = STATE(108), + [sym_self_path] = STATE(108), + [sym_parenthesis] = STATE(108), + [sym_list] = STATE(108), + [sym_struct_definition] = STATE(130), + [sym_dictionary_construction] = STATE(108), + [sym_closure_definition] = STATE(108), + [sym_formula] = STATE(108), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2453,39 +2413,39 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(2)] = { - [sym_base_ten] = STATE(313), - [sym_octal] = STATE(313), - [sym_hex] = STATE(313), - [sym_binary] = STATE(313), - [sym_integer] = STATE(318), - [sym_signed_integer] = STATE(120), - [sym_unsigned_integer] = STATE(120), - [sym_number] = STATE(77), - [sym__float] = STATE(76), - [sym_scalar] = STATE(120), - [sym_vector2] = STATE(120), - [sym_vector3] = STATE(120), - [sym_vector4] = STATE(120), - [sym_boolean] = STATE(120), - [sym_function_call] = STATE(120), - [sym_method_call] = STATE(120), - [sym_expression] = STATE(219), - [sym_unary_expression] = STATE(120), - [sym_binary_expression] = STATE(120), - [sym_if] = STATE(120), - [sym_let_in] = STATE(120), - [sym_identity_path] = STATE(120), - [sym_self_path] = STATE(120), - [sym_parenthesis] = STATE(120), - [sym_list] = STATE(120), - [sym_struct_member] = STATE(316), - [sym__struct_final_element] = STATE(320), - [sym_struct_definition] = STATE(119), - [sym_dictionary_member_assignment] = STATE(288), - [sym_dictionary_construction] = STATE(120), - [sym_closure_definition] = STATE(120), - [sym_formula] = STATE(120), - [aux_sym_struct_definition_repeat1] = STATE(272), + [sym_base_ten] = STATE(303), + [sym_octal] = STATE(303), + [sym_hex] = STATE(303), + [sym_binary] = STATE(303), + [sym_integer] = STATE(301), + [sym_signed_integer] = STATE(108), + [sym_unsigned_integer] = STATE(108), + [sym_number] = STATE(80), + [sym__float] = STATE(79), + [sym_scalar] = STATE(108), + [sym_vector2] = STATE(108), + [sym_vector3] = STATE(108), + [sym_vector4] = STATE(108), + [sym_boolean] = STATE(108), + [sym_function_call] = STATE(108), + [sym_method_call] = STATE(108), + [sym_expression] = STATE(222), + [sym_unary_expression] = STATE(108), + [sym_binary_expression] = STATE(108), + [sym_if] = STATE(108), + [sym_let_in] = STATE(108), + [sym_identity_path] = STATE(108), + [sym_self_path] = STATE(108), + [sym_parenthesis] = STATE(108), + [sym_list] = STATE(108), + [sym_struct_member] = STATE(297), + [sym__struct_final_element] = STATE(315), + [sym_struct_definition] = STATE(130), + [sym_dictionary_member_assignment] = STATE(283), + [sym_dictionary_construction] = STATE(108), + [sym_closure_definition] = STATE(108), + [sym_formula] = STATE(108), + [aux_sym_struct_definition_repeat1] = STATE(269), [sym_identifier] = ACTIONS(35), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2510,39 +2470,39 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LT_LT_LT] = ACTIONS(33), }, [STATE(3)] = { - [sym_base_ten] = STATE(313), - [sym_octal] = STATE(313), - [sym_hex] = STATE(313), - [sym_binary] = STATE(313), - [sym_integer] = STATE(318), - [sym_signed_integer] = STATE(120), - [sym_unsigned_integer] = STATE(120), - [sym_number] = STATE(77), - [sym__float] = STATE(76), - [sym_scalar] = STATE(120), - [sym_vector2] = STATE(120), - [sym_vector3] = STATE(120), - [sym_vector4] = STATE(120), - [sym_boolean] = STATE(120), - [sym_function_call] = STATE(120), - [sym_method_call] = STATE(120), - [sym_expression] = STATE(217), - [sym_unary_expression] = STATE(120), - [sym_binary_expression] = STATE(120), - [sym_if] = STATE(120), - [sym_let_in] = STATE(120), - [sym_identity_path] = STATE(120), - [sym_self_path] = STATE(120), - [sym_parenthesis] = STATE(120), - [sym_list] = STATE(120), - [sym_struct_member] = STATE(316), - [sym__struct_final_element] = STATE(328), - [sym_struct_definition] = STATE(119), - [sym_dictionary_member_assignment] = STATE(289), - [sym_dictionary_construction] = STATE(120), - [sym_closure_definition] = STATE(120), - [sym_formula] = STATE(120), - [aux_sym_struct_definition_repeat1] = STATE(275), + [sym_base_ten] = STATE(303), + [sym_octal] = STATE(303), + [sym_hex] = STATE(303), + [sym_binary] = STATE(303), + [sym_integer] = STATE(301), + [sym_signed_integer] = STATE(108), + [sym_unsigned_integer] = STATE(108), + [sym_number] = STATE(80), + [sym__float] = STATE(79), + [sym_scalar] = STATE(108), + [sym_vector2] = STATE(108), + [sym_vector3] = STATE(108), + [sym_vector4] = STATE(108), + [sym_boolean] = STATE(108), + [sym_function_call] = STATE(108), + [sym_method_call] = STATE(108), + [sym_expression] = STATE(202), + [sym_unary_expression] = STATE(108), + [sym_binary_expression] = STATE(108), + [sym_if] = STATE(108), + [sym_let_in] = STATE(108), + [sym_identity_path] = STATE(108), + [sym_self_path] = STATE(108), + [sym_parenthesis] = STATE(108), + [sym_list] = STATE(108), + [sym_struct_member] = STATE(297), + [sym__struct_final_element] = STATE(316), + [sym_struct_definition] = STATE(130), + [sym_dictionary_member_assignment] = STATE(291), + [sym_dictionary_construction] = STATE(108), + [sym_closure_definition] = STATE(108), + [sym_formula] = STATE(108), + [aux_sym_struct_definition_repeat1] = STATE(272), [sym_identifier] = ACTIONS(35), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2600,15 +2560,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, STATE(5), 1, aux_sym_list_repeat1, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(160), 1, + STATE(162), 1, sym_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2620,12 +2580,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2677,15 +2637,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, STATE(6), 1, aux_sym_list_repeat1, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, STATE(149), 1, sym_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2697,12 +2657,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2754,15 +2714,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(6), 1, aux_sym_list_repeat1, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(225), 1, + STATE(220), 1, sym_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2774,12 +2734,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2829,17 +2789,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, ACTIONS(94), 1, anon_sym_RBRACK, - STATE(6), 1, + STATE(8), 1, aux_sym_list_repeat1, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(175), 1, + STATE(176), 1, sym_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2851,12 +2811,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2906,17 +2866,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, ACTIONS(96), 1, anon_sym_RBRACK, - STATE(7), 1, + STATE(6), 1, aux_sym_list_repeat1, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(174), 1, + STATE(177), 1, sym_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2928,12 +2888,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2961,6 +2921,8 @@ static const uint16_t ts_small_parse_table[] = { sym_string, ACTIONS(9), 1, sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -2969,27 +2931,25 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, ACTIONS(19), 1, anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, ACTIONS(29), 1, anon_sym_LPAREN, ACTIONS(31), 1, anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, - aux_sym_base_ten_token1, - ACTIONS(102), 1, - anon_sym_if, - ACTIONS(104), 1, - anon_sym_let, - STATE(139), 1, + STATE(79), 1, sym__float, - STATE(140), 1, + STATE(80), 1, sym_number, - STATE(207), 1, + STATE(106), 1, sym_expression, - STATE(224), 1, + STATE(130), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2997,16 +2957,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3055,14 +3015,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(180), 1, + STATE(143), 1, + sym__float, + STATE(210), 1, sym_expression, - STATE(224), 1, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3074,12 +3034,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3127,15 +3087,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(107), 1, + STATE(113), 1, sym_expression, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3147,12 +3107,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3200,15 +3160,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, - sym_struct_definition, - STATE(203), 1, + STATE(98), 1, sym_expression, - STATE(318), 1, + STATE(130), 1, + sym_struct_definition, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3220,12 +3180,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3273,15 +3233,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(99), 1, + STATE(114), 1, sym_expression, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3293,12 +3253,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3346,15 +3306,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(92), 1, + STATE(115), 1, sym_expression, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3366,12 +3326,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3419,15 +3379,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(101), 1, + STATE(116), 1, sym_expression, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3439,12 +3399,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3492,15 +3452,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(102), 1, + STATE(117), 1, sym_expression, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3512,12 +3472,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3565,15 +3525,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(103), 1, + STATE(118), 1, sym_expression, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3585,12 +3545,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3638,15 +3598,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(104), 1, - sym_expression, STATE(119), 1, + sym_expression, + STATE(130), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3658,12 +3618,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3711,15 +3671,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(105), 1, + STATE(120), 1, sym_expression, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3731,12 +3691,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3784,15 +3744,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(106), 1, + STATE(121), 1, sym_expression, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3804,12 +3764,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3857,15 +3817,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(96), 1, + STATE(122), 1, sym_expression, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3877,12 +3837,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3930,88 +3890,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(108), 1, - sym_expression, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(318), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(21), 2, - sym_true, - sym_false, - ACTIONS(23), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(313), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(120), 20, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_vector2, - sym_vector3, - sym_vector4, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_let_in, - sym_identity_path, - sym_self_path, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [1854] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, - aux_sym_octal_token1, - ACTIONS(15), 1, - aux_sym_hex_token1, - ACTIONS(17), 1, - aux_sym_binary_token1, - ACTIONS(19), 1, - anon_sym_LT_LPAREN, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_let, - ACTIONS(29), 1, - anon_sym_LPAREN, - ACTIONS(31), 1, - anon_sym_LBRACK, - ACTIONS(33), 1, - anon_sym_LT_LT_LT, - STATE(76), 1, - sym__float, - STATE(77), 1, - sym_number, - STATE(109), 1, + STATE(206), 1, sym_expression, - STATE(119), 1, - sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4023,12 +3910,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4049,7 +3936,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1950] = 23, + [1854] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4076,15 +3963,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(154), 1, + STATE(159), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4096,12 +3983,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4122,7 +4009,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2046] = 23, + [1950] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4149,15 +4036,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(208), 1, + STATE(207), 1, sym_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4169,12 +4056,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4195,7 +4082,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2142] = 23, + [2046] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4222,15 +4109,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(210), 1, + STATE(208), 1, sym_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4242,12 +4129,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4268,7 +4155,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2238] = 23, + [2142] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4295,15 +4182,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(112), 1, + STATE(124), 1, sym_expression, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4315,12 +4202,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4341,7 +4228,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2334] = 23, + [2238] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4368,15 +4255,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(169), 1, + STATE(160), 1, sym_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4388,12 +4275,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4414,7 +4301,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2430] = 23, + [2334] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4441,15 +4328,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(142), 1, + STATE(141), 1, sym_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4461,12 +4348,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4487,7 +4374,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2526] = 23, + [2430] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4514,15 +4401,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(118), 1, - sym_expression, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(318), 1, + STATE(180), 1, + sym_expression, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4534,12 +4421,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4560,7 +4447,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2622] = 23, + [2526] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4587,15 +4474,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, - sym_struct_definition, - STATE(145), 1, + STATE(125), 1, sym_expression, - STATE(318), 1, + STATE(130), 1, + sym_struct_definition, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4607,12 +4494,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4633,7 +4520,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2718] = 23, + [2622] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4660,15 +4547,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(146), 1, + STATE(163), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4680,12 +4567,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4706,7 +4593,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2814] = 23, + [2718] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4733,15 +4620,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, - sym_struct_definition, - STATE(123), 1, + STATE(99), 1, sym_expression, - STATE(318), 1, + STATE(130), 1, + sym_struct_definition, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4753,12 +4640,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4779,59 +4666,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2910] = 23, + [2814] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, - sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, - aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(131), 1, + STATE(79), 1, sym__float, - STATE(132), 1, + STATE(80), 1, sym_number, - STATE(144), 1, - sym_struct_definition, - STATE(212), 1, + STATE(107), 1, sym_expression, - STATE(308), 1, + STATE(130), 1, + sym_struct_definition, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4852,7 +4739,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3006] = 23, + [2910] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -4880,14 +4767,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(218), 1, + STATE(143), 1, + sym__float, + STATE(221), 1, sym_expression, - STATE(224), 1, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4899,12 +4786,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4925,15 +4812,13 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3102] = 23, + [3006] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, sym_self, - ACTIONS(11), 1, - aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -4942,25 +4827,27 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, - anon_sym_if, - ACTIONS(27), 1, - anon_sym_let, ACTIONS(29), 1, anon_sym_LPAREN, ACTIONS(31), 1, anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, - sym__float, - STATE(77), 1, + ACTIONS(98), 1, + aux_sym_base_ten_token1, + ACTIONS(102), 1, + anon_sym_if, + ACTIONS(104), 1, + anon_sym_let, + STATE(139), 1, sym_number, - STATE(98), 1, + STATE(143), 1, + sym__float, + STATE(213), 1, sym_expression, - STATE(119), 1, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4968,16 +4855,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(100), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4998,7 +4885,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3198] = 23, + [3102] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5026,14 +4913,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(214), 1, + STATE(143), 1, + sym__float, + STATE(226), 1, sym_expression, - STATE(224), 1, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5045,12 +4932,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5071,7 +4958,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3294] = 23, + [3198] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5098,15 +4985,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, + STATE(98), 1, + sym_expression, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(181), 1, - sym_expression, - STATE(224), 1, + STATE(143), 1, + sym__float, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5118,12 +5005,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5144,7 +5031,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3390] = 23, + [3294] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5171,15 +5058,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(104), 1, anon_sym_let, - STATE(92), 1, - sym_expression, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(224), 1, + STATE(143), 1, + sym__float, + STATE(186), 1, + sym_expression, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5191,12 +5078,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5217,7 +5104,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3486] = 23, + [3390] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5245,14 +5132,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, + STATE(143), 1, + sym__float, STATE(183), 1, sym_expression, - STATE(224), 1, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5264,12 +5151,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5290,7 +5177,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3582] = 23, + [3486] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5318,14 +5205,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, + STATE(143), 1, + sym__float, STATE(184), 1, sym_expression, - STATE(224), 1, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5337,12 +5224,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5363,7 +5250,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3678] = 23, + [3582] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5391,14 +5278,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(186), 1, + STATE(143), 1, + sym__float, + STATE(185), 1, sym_expression, - STATE(224), 1, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5410,12 +5297,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5436,7 +5323,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3774] = 23, + [3678] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5464,14 +5351,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(187), 1, - sym_expression, - STATE(224), 1, + STATE(143), 1, + sym__float, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(234), 1, + sym_expression, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5483,12 +5370,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5509,7 +5396,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3870] = 23, + [3774] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5537,14 +5424,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(188), 1, + STATE(143), 1, + sym__float, + STATE(187), 1, sym_expression, - STATE(224), 1, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5556,12 +5443,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5582,7 +5469,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3966] = 23, + [3870] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5610,14 +5497,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(189), 1, + STATE(143), 1, + sym__float, + STATE(188), 1, sym_expression, - STATE(224), 1, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5629,12 +5516,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5655,7 +5542,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4062] = 23, + [3966] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5683,14 +5570,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(190), 1, + STATE(143), 1, + sym__float, + STATE(189), 1, sym_expression, - STATE(224), 1, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5702,12 +5589,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5728,7 +5615,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4158] = 23, + [4062] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5756,14 +5643,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(191), 1, + STATE(143), 1, + sym__float, + STATE(190), 1, sym_expression, - STATE(224), 1, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5775,12 +5662,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5801,7 +5688,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4254] = 23, + [4158] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5829,14 +5716,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(193), 1, + STATE(143), 1, + sym__float, + STATE(192), 1, sym_expression, - STATE(224), 1, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5848,12 +5735,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5874,7 +5761,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4350] = 23, + [4254] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5902,14 +5789,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(196), 1, + STATE(143), 1, + sym__float, + STATE(198), 1, sym_expression, - STATE(224), 1, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5921,12 +5808,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5947,7 +5834,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4446] = 23, + [4350] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -5975,14 +5862,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(200), 1, + STATE(143), 1, + sym__float, + STATE(199), 1, sym_expression, - STATE(224), 1, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5994,12 +5881,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6020,7 +5907,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4542] = 23, + [4446] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6047,15 +5934,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(147), 1, + STATE(150), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6067,12 +5954,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6093,7 +5980,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4638] = 23, + [4542] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6120,15 +6007,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(156), 1, + STATE(161), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6140,12 +6027,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6166,7 +6053,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4734] = 23, + [4638] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6193,15 +6080,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(159), 1, + STATE(181), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6213,12 +6100,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6239,7 +6126,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4830] = 23, + [4734] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6266,15 +6153,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(153), 1, + STATE(157), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6286,12 +6173,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6312,7 +6199,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4926] = 23, + [4830] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6339,15 +6226,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(178), 1, + STATE(164), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6359,12 +6246,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6385,7 +6272,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5022] = 23, + [4926] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6412,15 +6299,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(161), 1, + STATE(165), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6432,12 +6319,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6458,7 +6345,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5118] = 23, + [5022] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6485,15 +6372,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(162), 1, + STATE(166), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6505,12 +6392,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6531,7 +6418,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5214] = 23, + [5118] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6558,15 +6445,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(163), 1, + STATE(167), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6578,12 +6465,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6604,7 +6491,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5310] = 23, + [5214] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6631,15 +6518,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(164), 1, + STATE(168), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6651,12 +6538,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6677,7 +6564,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5406] = 23, + [5310] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6704,15 +6591,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(165), 1, + STATE(169), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6724,12 +6611,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6750,7 +6637,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5502] = 23, + [5406] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6777,15 +6664,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(166), 1, + STATE(170), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6797,12 +6684,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6823,7 +6710,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5598] = 23, + [5502] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6850,15 +6737,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(167), 1, + STATE(171), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6870,12 +6757,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6896,7 +6783,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5694] = 23, + [5598] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6923,15 +6810,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(168), 1, + STATE(172), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6943,12 +6830,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6969,7 +6856,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5790] = 23, + [5694] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -6996,15 +6883,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(170), 1, + STATE(173), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7016,12 +6903,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7042,7 +6929,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5886] = 23, + [5790] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -7069,15 +6956,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(172), 1, + STATE(174), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7089,12 +6976,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7115,7 +7002,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5982] = 23, + [5886] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -7142,15 +7029,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(173), 1, + STATE(175), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7162,12 +7049,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7188,59 +7075,59 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6078] = 23, + [5982] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, - sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, - aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(31), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(131), 1, + STATE(79), 1, sym__float, - STATE(132), 1, + STATE(80), 1, sym_number, - STATE(144), 1, + STATE(130), 1, sym_struct_definition, - STATE(176), 1, + STATE(209), 1, sym_expression, - STATE(308), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(21), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(23), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7261,7 +7148,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6174] = 23, + [6078] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -7288,15 +7175,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(221), 1, + STATE(223), 1, sym_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7308,12 +7195,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7334,7 +7221,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6270] = 23, + [6174] = 23, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, @@ -7361,15 +7248,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(177), 1, + STATE(178), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7381,12 +7268,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7407,42 +7294,115 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6366] = 23, + [6270] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, - sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, - aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(19), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(25), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(27), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(79), 1, + sym__float, + STATE(80), 1, + sym_number, + STATE(130), 1, + sym_struct_definition, + STATE(225), 1, + sym_expression, + STATE(301), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(303), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(108), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6366] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, + anon_sym_LT_LPAREN, + ACTIONS(120), 1, + anon_sym_if, + ACTIONS(122), 1, + anon_sym_let, + ACTIONS(124), 1, anon_sym_LPAREN, ACTIONS(126), 1, anon_sym_LBRACK, ACTIONS(128), 1, anon_sym_LT_LT_LT, - STATE(131), 1, - sym__float, - STATE(132), 1, + STATE(134), 1, sym_number, - STATE(144), 1, + STATE(135), 1, + sym__float, + STATE(148), 1, sym_struct_definition, - STATE(222), 1, + STATE(179), 1, sym_expression, - STATE(308), 1, + STATE(302), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7454,12 +7414,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(211), 20, + STATE(216), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7481,6 +7441,79 @@ static const uint16_t ts_small_parse_table[] = { sym_closure_definition, sym_formula, [6462] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(106), 1, + sym_identifier, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, + anon_sym_LT_LPAREN, + ACTIONS(120), 1, + anon_sym_if, + ACTIONS(122), 1, + anon_sym_let, + ACTIONS(124), 1, + anon_sym_LPAREN, + ACTIONS(126), 1, + anon_sym_LBRACK, + ACTIONS(128), 1, + anon_sym_LT_LT_LT, + STATE(134), 1, + sym_number, + STATE(135), 1, + sym__float, + STATE(148), 1, + sym_struct_definition, + STATE(227), 1, + sym_expression, + STATE(302), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(116), 2, + sym_true, + sym_false, + ACTIONS(118), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(303), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(216), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6558] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -7507,15 +7540,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(223), 1, + STATE(228), 1, sym_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7527,12 +7560,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7553,7 +7586,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6558] = 23, + [6654] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -7580,15 +7613,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(33), 1, anon_sym_LT_LT_LT, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(119), 1, + STATE(130), 1, sym_struct_definition, - STATE(226), 1, + STATE(229), 1, sym_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7600,12 +7633,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7626,7 +7659,80 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6654] = 23, + [6750] = 23, + ACTIONS(5), 1, + sym_identifier, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + sym_self, + ACTIONS(11), 1, + aux_sym_base_ten_token1, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(19), 1, + anon_sym_LT_LPAREN, + ACTIONS(25), 1, + anon_sym_if, + ACTIONS(27), 1, + anon_sym_let, + ACTIONS(29), 1, + anon_sym_LPAREN, + ACTIONS(31), 1, + anon_sym_LBRACK, + ACTIONS(33), 1, + anon_sym_LT_LT_LT, + STATE(79), 1, + sym__float, + STATE(80), 1, + sym_number, + STATE(130), 1, + sym_struct_definition, + STATE(231), 1, + sym_expression, + STATE(301), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(21), 2, + sym_true, + sym_false, + ACTIONS(23), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(303), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(108), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6846] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -7654,14 +7760,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(224), 1, + STATE(143), 1, + sym__float, + STATE(230), 1, sym_struct_definition, - STATE(227), 1, + STATE(232), 1, sym_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7673,12 +7779,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7699,7 +7805,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6750] = 23, + [6942] = 23, ACTIONS(5), 1, sym_identifier, ACTIONS(7), 1, @@ -7727,14 +7833,14 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(104), 1, anon_sym_let, STATE(139), 1, - sym__float, - STATE(140), 1, sym_number, - STATE(185), 1, - sym_expression, - STATE(224), 1, + STATE(143), 1, + sym__float, + STATE(230), 1, sym_struct_definition, - STATE(318), 1, + STATE(233), 1, + sym_expression, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7746,12 +7852,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(120), 20, + STATE(108), 20, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7772,29 +7878,103 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6846] = 4, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(134), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(132), 10, + [7038] = 23, + ACTIONS(13), 1, + aux_sym_octal_token1, + ACTIONS(15), 1, + aux_sym_hex_token1, + ACTIONS(17), 1, + aux_sym_binary_token1, + ACTIONS(106), 1, sym_identifier, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_else, - anon_sym_EQ, - ACTIONS(130), 22, - ts_builtin_sym_end, - sym_unit_quote, - anon_sym_DOT, - anon_sym_COMMA, + ACTIONS(108), 1, + sym_string, + ACTIONS(110), 1, + sym_self, + ACTIONS(112), 1, + aux_sym_base_ten_token1, + ACTIONS(114), 1, + anon_sym_LT_LPAREN, + ACTIONS(120), 1, + anon_sym_if, + ACTIONS(122), 1, + anon_sym_let, + ACTIONS(124), 1, + anon_sym_LPAREN, + ACTIONS(126), 1, + anon_sym_LBRACK, + ACTIONS(128), 1, + anon_sym_LT_LT_LT, + STATE(134), 1, + sym_number, + STATE(135), 1, + sym__float, + STATE(148), 1, + sym_struct_definition, + STATE(212), 1, + sym_expression, + STATE(302), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(116), 2, + sym_true, + sym_false, + ACTIONS(118), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(303), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(216), 20, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_identity_path, + sym_self_path, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [7134] = 4, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(134), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(132), 11, + sym_identifier, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_else, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(130), 22, + ts_builtin_sym_end, + sym_unit_quote, + anon_sym_DOT, + anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -7813,17 +7993,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6891] = 6, + [7180] = 6, ACTIONS(138), 1, sym_identifier, ACTIONS(140), 1, sym_unit_quote, - STATE(86), 1, + STATE(97), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(142), 9, + ACTIONS(142), 10, anon_sym_STAR, anon_sym_GT_GT, anon_sym_AMP, @@ -7833,6 +8013,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_else, anon_sym_EQ, + anon_sym_COLON, ACTIONS(136), 20, ts_builtin_sym_end, anon_sym_COMMA, @@ -7854,13 +8035,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6938] = 4, + [7228] = 4, ACTIONS(148), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(146), 10, + ACTIONS(146), 11, sym_identifier, anon_sym_STAR, anon_sym_GT_GT, @@ -7871,6 +8052,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_else, anon_sym_EQ, + anon_sym_COLON, ACTIONS(144), 21, ts_builtin_sym_end, sym_unit_quote, @@ -7893,15 +8075,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6981] = 5, + [7272] = 5, ACTIONS(152), 1, anon_sym_DOT, - STATE(81), 1, - aux_sym_self_path_repeat1, + STATE(83), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(154), 7, + ACTIONS(154), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -7909,6 +8091,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, + anon_sym_COLON, ACTIONS(150), 22, ts_builtin_sym_end, anon_sym_COMMA, @@ -7932,24 +8115,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7025] = 3, + [7317] = 5, + ACTIONS(158), 1, + anon_sym_DOT, + STATE(85), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 10, - sym_identifier, + ACTIONS(160), 8, anon_sym_STAR, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_else, anon_sym_EQ, - ACTIONS(156), 21, + anon_sym_COLON, + ACTIONS(156), 22, ts_builtin_sym_end, - sym_unit_quote, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -7957,6 +8141,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -7964,20 +8149,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7065] = 5, - ACTIONS(162), 1, + [7362] = 5, + ACTIONS(164), 1, anon_sym_DOT, - STATE(82), 1, + STATE(83), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 7, + ACTIONS(167), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -7985,7 +8171,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(160), 22, + anon_sym_COLON, + ACTIONS(162), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8008,15 +8195,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7109] = 5, - ACTIONS(152), 1, + [7407] = 5, + ACTIONS(158), 1, anon_sym_DOT, - STATE(83), 1, + STATE(82), 1, aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(168), 7, + ACTIONS(171), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8024,7 +8211,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(166), 22, + anon_sym_COLON, + ACTIONS(169), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8047,15 +8235,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7153] = 5, - ACTIONS(172), 1, + [7452] = 5, + ACTIONS(175), 1, anon_sym_DOT, - STATE(82), 1, - aux_sym_identity_path_repeat1, + STATE(85), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(175), 7, + ACTIONS(178), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8063,7 +8251,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(170), 22, + anon_sym_COLON, + ACTIONS(173), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8086,24 +8275,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7197] = 5, - ACTIONS(179), 1, - anon_sym_DOT, - STATE(83), 1, - aux_sym_self_path_repeat1, + [7497] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(182), 7, + ACTIONS(132), 11, + sym_identifier, anon_sym_STAR, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, + anon_sym_else, anon_sym_EQ, - ACTIONS(177), 22, + anon_sym_COLON, + ACTIONS(130), 21, ts_builtin_sym_end, + sym_unit_quote, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8111,7 +8301,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8119,21 +8308,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7241] = 5, - ACTIONS(162), 1, + anon_sym_GT_GT_GT, + [7538] = 5, + ACTIONS(152), 1, anon_sym_DOT, - STATE(80), 1, + STATE(81), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 7, + ACTIONS(182), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8141,7 +8329,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(184), 22, + anon_sym_COLON, + ACTIONS(180), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8164,11 +8353,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7285] = 3, + [7583] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(132), 10, + ACTIONS(186), 11, sym_identifier, anon_sym_STAR, anon_sym_GT_GT, @@ -8179,7 +8368,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_else, anon_sym_EQ, - ACTIONS(130), 21, + anon_sym_COLON, + ACTIONS(184), 21, ts_builtin_sym_end, sym_unit_quote, anon_sym_COMMA, @@ -8201,28 +8391,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7325] = 3, + [7624] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(190), 8, + ACTIONS(190), 9, + anon_sym_DASH, anon_sym_STAR, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, + anon_sym_COLON, ACTIONS(188), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8236,15 +8427,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7364] = 4, - ACTIONS(196), 1, anon_sym_DASH_GT, + [7664] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(194), 8, - anon_sym_DASH, + ACTIONS(167), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8252,10 +8440,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(192), 21, + anon_sym_COLON, + ACTIONS(162), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -8274,11 +8465,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7405] = 3, + [7704] = 4, + ACTIONS(196), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(200), 8, + ACTIONS(194), 9, anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, @@ -8287,7 +8480,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(198), 22, + anon_sym_COLON, + ACTIONS(192), 21, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8309,13 +8503,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_DASH_GT, - [7444] = 3, + [7746] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 8, - anon_sym_DASH, + ACTIONS(200), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8323,10 +8515,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(202), 22, + anon_sym_COLON, + ACTIONS(198), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -8345,22 +8540,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_DASH_GT, - [7483] = 3, + [7786] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(175), 7, + ACTIONS(204), 9, anon_sym_STAR, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(170), 23, + anon_sym_COLON, + ACTIONS(202), 22, ts_builtin_sym_end, - anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8368,7 +8563,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8382,28 +8576,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7522] = 3, + anon_sym_GT_GT_GT, + [7826] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(208), 8, + ACTIONS(208), 9, + anon_sym_DASH, anon_sym_STAR, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, + anon_sym_COLON, ACTIONS(206), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8417,18 +8613,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7561] = 6, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - STATE(111), 1, - sym_dictionary_construction, + anon_sym_DASH_GT, + [7866] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 7, + ACTIONS(212), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8436,10 +8627,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(210), 20, + anon_sym_COLON, + ACTIONS(210), 22, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_DASH, + anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -8455,23 +8647,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7606] = 3, + anon_sym_DASH_GT, + [7906] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(220), 7, + ACTIONS(216), 9, anon_sym_STAR, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(218), 23, + anon_sym_COLON, + ACTIONS(214), 22, ts_builtin_sym_end, - anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8479,7 +8674,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8493,11 +8687,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7645] = 3, + anon_sym_GT_GT_GT, + [7946] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(224), 8, + ACTIONS(220), 9, anon_sym_STAR, anon_sym_GT_GT, anon_sym_AMP, @@ -8506,7 +8701,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(222), 22, + anon_sym_COLON, + ACTIONS(218), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8529,12 +8725,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7684] = 3, + [7986] = 6, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + STATE(127), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(228), 8, - anon_sym_DASH, + ACTIONS(226), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8542,10 +8743,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(226), 22, + anon_sym_COLON, + ACTIONS(222), 20, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -8561,63 +8763,65 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_DASH_GT, - [7723] = 16, - ACTIONS(212), 1, + [8032] = 19, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(214), 1, - anon_sym_EQ, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, ACTIONS(234), 1, - anon_sym_STAR, + anon_sym_STAR_STAR, ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, ACTIONS(242), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - STATE(111), 1, + ACTIONS(252), 1, + anon_sym_AMP_AMP, + ACTIONS(254), 1, + anon_sym_PIPE_PIPE, + ACTIONS(256), 1, + anon_sym_CARET_CARET, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(258), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(210), 9, + ACTIONS(230), 6, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [7787] = 3, + [8103] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(252), 7, + ACTIONS(262), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8625,7 +8829,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(250), 22, + anon_sym_COLON, + ACTIONS(260), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8648,85 +8853,63 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7825] = 19, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(234), 1, + [8142] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(266), 8, anon_sym_STAR, - ACTIONS(236), 1, - anon_sym_SLASH, - ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, - ACTIONS(258), 1, - anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_CARET_CARET, - ACTIONS(262), 1, + anon_sym_GT, + anon_sym_LT, anon_sym_EQ, - STATE(111), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(230), 2, + anon_sym_COLON, + ACTIONS(264), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(254), 6, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7895] = 9, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(234), 1, - anon_sym_STAR, - ACTIONS(236), 1, - anon_sym_SLASH, - STATE(111), 1, - sym_dictionary_construction, + [8181] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 6, + ACTIONS(270), 8, + anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(210), 17, + anon_sym_COLON, + ACTIONS(268), 22, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -8736,15 +8919,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7945] = 3, + [8220] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(266), 7, + ACTIONS(274), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8752,7 +8937,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(264), 22, + anon_sym_COLON, + ACTIONS(272), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8775,19 +8961,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7983] = 7, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - STATE(111), 1, - sym_dictionary_construction, + [8259] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 7, + ACTIONS(278), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8795,11 +8973,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(210), 18, + anon_sym_COLON, + ACTIONS(276), 22, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -8810,39 +8991,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8029] = 10, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(234), 1, - anon_sym_STAR, - ACTIONS(236), 1, - anon_sym_SLASH, - STATE(111), 1, - sym_dictionary_construction, + [8298] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(214), 6, + ACTIONS(282), 8, + anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(210), 15, + anon_sym_COLON, + ACTIONS(280), 22, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -8852,177 +9027,139 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8081] = 11, - ACTIONS(212), 1, + [8337] = 19, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, ACTIONS(234), 1, - anon_sym_STAR, + anon_sym_STAR_STAR, ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, - STATE(111), 1, + ACTIONS(242), 1, + anon_sym_AMP, + ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, + anon_sym_CARET, + ACTIONS(252), 1, + anon_sym_AMP_AMP, + ACTIONS(254), 1, + anon_sym_PIPE_PIPE, + ACTIONS(256), 1, + anon_sym_CARET_CARET, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(214), 6, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, + ACTIONS(286), 2, anon_sym_EQ, - ACTIONS(210), 13, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_COLON, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, + ACTIONS(284), 6, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8135] = 13, - ACTIONS(212), 1, + [8408] = 19, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, ACTIONS(234), 1, - anon_sym_STAR, + anon_sym_STAR_STAR, ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(240), 1, + ACTIONS(242), 1, anon_sym_AMP, ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - STATE(111), 1, + ACTIONS(252), 1, + anon_sym_AMP_AMP, + ACTIONS(254), 1, + anon_sym_PIPE_PIPE, + ACTIONS(256), 1, + anon_sym_CARET_CARET, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(214), 4, - anon_sym_PIPE, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, + ACTIONS(290), 2, anon_sym_EQ, - ACTIONS(210), 13, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_COLON, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, + ACTIONS(288), 6, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8193] = 12, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(234), 1, - anon_sym_STAR, - ACTIONS(236), 1, - anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - STATE(111), 1, - sym_dictionary_construction, + [8479] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(238), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(214), 5, + ACTIONS(294), 8, + anon_sym_STAR, + anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(210), 13, + anon_sym_COLON, + ACTIONS(292), 22, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [8249] = 14, - ACTIONS(212), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(234), 1, - anon_sym_STAR, - ACTIONS(236), 1, - anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, - anon_sym_CARET, - STATE(111), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(214), 3, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - ACTIONS(210), 13, - ts_builtin_sym_end, - anon_sym_COMMA, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -9030,165 +9167,89 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8309] = 19, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(234), 1, + [8518] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(298), 8, anon_sym_STAR, - ACTIONS(236), 1, - anon_sym_SLASH, - ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, - ACTIONS(258), 1, - anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_CARET_CARET, - ACTIONS(270), 1, - anon_sym_EQ, - STATE(111), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(230), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(238), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(246), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(268), 6, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(296), 22, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [8379] = 17, - ACTIONS(212), 1, anon_sym_COLON_COLON, - ACTIONS(214), 1, - anon_sym_EQ, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(234), 1, - anon_sym_STAR, - ACTIONS(236), 1, - anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, - anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, - STATE(111), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(230), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(210), 8, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8445] = 18, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(214), 1, - anon_sym_EQ, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(234), 1, + [8557] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(302), 8, anon_sym_STAR, - ACTIONS(236), 1, - anon_sym_SLASH, - ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, - ACTIONS(258), 1, - anon_sym_PIPE_PIPE, - STATE(111), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(230), 2, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(300), 22, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(210), 7, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8513] = 3, + [8596] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(194), 7, + ACTIONS(306), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9196,7 +9257,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(192), 22, + anon_sym_COLON, + ACTIONS(304), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -9219,11 +9281,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8551] = 3, + [8635] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 7, + ACTIONS(310), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9231,7 +9293,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(272), 22, + anon_sym_COLON, + ACTIONS(308), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -9254,62 +9317,61 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8589] = 19, - ACTIONS(212), 1, + [8674] = 9, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, ACTIONS(234), 1, - anon_sym_STAR, + anon_sym_STAR_STAR, ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, - anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, - ACTIONS(258), 1, - anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_CARET_CARET, - ACTIONS(278), 1, - anon_sym_EQ, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(226), 7, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(222), 17, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(276), 6, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8659] = 3, + [8725] = 7, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, + anon_sym_STAR_STAR, + STATE(127), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(282), 7, + ACTIONS(226), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9317,13 +9379,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(280), 22, + anon_sym_COLON, + ACTIONS(222), 18, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -9334,32 +9395,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8697] = 3, + [8772] = 10, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, + anon_sym_SLASH, + STATE(127), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(286), 7, - anon_sym_STAR, + ACTIONS(232), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(226), 7, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(284), 22, + anon_sym_COLON, + ACTIONS(222), 15, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -9369,34 +9438,89 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8735] = 3, + [8825] = 11, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, + anon_sym_SLASH, + STATE(127), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(290), 7, - anon_sym_STAR, + ACTIONS(232), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(240), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(226), 7, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(288), 22, + anon_sym_COLON, + ACTIONS(222), 13, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8880] = 13, + ACTIONS(224), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, + ACTIONS(242), 1, + anon_sym_AMP, + ACTIONS(246), 1, + anon_sym_CARET, + STATE(127), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(232), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(226), 5, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(222), 13, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -9404,34 +9528,91 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8773] = 3, + [8939] = 12, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, + anon_sym_SLASH, + ACTIONS(242), 1, + anon_sym_AMP, + STATE(127), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 7, - anon_sym_STAR, - anon_sym_AMP, + ACTIONS(232), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(240), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(226), 6, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(292), 22, + anon_sym_COLON, + ACTIONS(222), 13, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8996] = 14, + ACTIONS(224), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, + ACTIONS(242), 1, + anon_sym_AMP, + ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, + anon_sym_CARET, + STATE(127), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(232), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(226), 4, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(222), 13, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -9439,106 +9620,165 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8811] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(298), 7, + [9057] = 16, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, anon_sym_STAR, + ACTIONS(238), 1, + anon_sym_SLASH, + ACTIONS(242), 1, anon_sym_AMP, + ACTIONS(244), 1, anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, + STATE(127), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(226), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(232), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(240), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - ACTIONS(296), 22, + ACTIONS(250), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(222), 9, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [9122] = 17, + ACTIONS(224), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, + ACTIONS(242), 1, + anon_sym_AMP, + ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, + anon_sym_CARET, + ACTIONS(252), 1, + anon_sym_AMP_AMP, + STATE(127), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(226), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(232), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(248), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(222), 8, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8849] = 19, - ACTIONS(212), 1, + [9189] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, ACTIONS(234), 1, - anon_sym_STAR, + anon_sym_STAR_STAR, ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, ACTIONS(242), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_CARET_CARET, - ACTIONS(302), 1, - anon_sym_EQ, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(226), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(300), 6, + ACTIONS(222), 7, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8919] = 4, - ACTIONS(308), 1, - anon_sym_DASH_GT, + [9258] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(306), 8, - anon_sym_DASH, + ACTIONS(194), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9546,10 +9786,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(304), 20, + anon_sym_COLON, + ACTIONS(192), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -9562,51 +9804,121 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8959] = 3, + [9297] = 19, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, + anon_sym_SLASH, + ACTIONS(242), 1, + anon_sym_AMP, + ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, + anon_sym_CARET, + ACTIONS(252), 1, + anon_sym_AMP_AMP, + ACTIONS(254), 1, + anon_sym_PIPE_PIPE, + ACTIONS(256), 1, + anon_sym_CARET_CARET, + STATE(127), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(232), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(240), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(248), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(314), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(250), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(312), 6, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [9368] = 19, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, + anon_sym_SLASH, + ACTIONS(242), 1, + anon_sym_AMP, + ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, + anon_sym_CARET, + ACTIONS(252), 1, + anon_sym_AMP_AMP, + ACTIONS(254), 1, + anon_sym_PIPE_PIPE, + ACTIONS(256), 1, + anon_sym_CARET_CARET, + STATE(127), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(306), 7, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - ACTIONS(304), 22, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_COLON_COLON, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(248), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(318), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, + ACTIONS(316), 6, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8997] = 3, + [9439] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(312), 7, + ACTIONS(322), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9614,7 +9926,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(310), 22, + anon_sym_COLON, + ACTIONS(320), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -9637,11 +9950,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [9035] = 3, + [9478] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(316), 7, + ACTIONS(326), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9649,7 +9962,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(314), 22, + anon_sym_COLON, + ACTIONS(324), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -9672,62 +9986,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [9073] = 19, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(234), 1, - anon_sym_STAR, - ACTIONS(236), 1, - anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, - anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, - ACTIONS(258), 1, - anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_CARET_CARET, - ACTIONS(320), 1, - anon_sym_EQ, - STATE(111), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(230), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(238), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(248), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(318), 6, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9143] = 3, + [9517] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 7, + ACTIONS(330), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9735,7 +9998,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(322), 22, + anon_sym_COLON, + ACTIONS(328), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -9758,11 +10022,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [9181] = 3, + [9556] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(328), 7, + ACTIONS(334), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9770,7 +10034,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(326), 22, + anon_sym_COLON, + ACTIONS(332), 22, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -9793,11 +10058,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [9219] = 3, + [9595] = 4, + ACTIONS(336), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(332), 7, + ACTIONS(294), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9805,11 +10073,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT, anon_sym_LT, anon_sym_EQ, - ACTIONS(330), 22, + anon_sym_COLON, + ACTIONS(292), 20, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -9822,27 +10090,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [9257] = 3, + [9636] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(336), 7, + ACTIONS(134), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(132), 7, + sym_identifier, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - ACTIONS(334), 22, - ts_builtin_sym_end, + ACTIONS(130), 19, + sym_unit_quote, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9857,13 +10129,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9295] = 4, + [9675] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -9878,11 +10145,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(130), 19, + ACTIONS(130), 18, sym_unit_quote, anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9897,29 +10162,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_LPAREN, - [9334] = 8, - ACTIONS(162), 1, + [9713] = 8, + ACTIONS(152), 1, anon_sym_DOT, ACTIONS(338), 1, anon_sym_EQ, ACTIONS(340), 1, anon_sym_COLON, - STATE(80), 1, + STATE(81), 1, aux_sym_identity_path_repeat1, - STATE(290), 1, + STATE(281), 1, sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 6, + ACTIONS(182), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(184), 16, + ACTIONS(180), 16, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9936,24 +10202,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_CARET, anon_sym_LPAREN, anon_sym_RPAREN, - [9380] = 4, + [9759] = 4, + ACTIONS(342), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(134), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(132), 7, - sym_identifier, + ACTIONS(146), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(130), 18, + ACTIONS(144), 19, + sym_identifier, sym_unit_quote, - anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9968,15 +10234,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_LPAREN, - [9418] = 5, - STATE(206), 1, + [9796] = 5, + STATE(205), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(342), 2, + ACTIONS(344), 2, sym_identifier, sym_unit_quote, ACTIONS(142), 6, @@ -10004,22 +10269,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [9457] = 4, - ACTIONS(344), 1, + [9835] = 5, + ACTIONS(346), 1, anon_sym_DOT, + STATE(144), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(146), 6, + ACTIONS(160), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(144), 19, - sym_identifier, - sym_unit_quote, + ACTIONS(156), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10037,18 +10302,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [9494] = 3, + [9873] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 6, + ACTIONS(132), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(156), 19, + ACTIONS(130), 19, sym_identifier, sym_unit_quote, anon_sym_COMMA, @@ -10068,11 +10333,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [9528] = 5, - ACTIONS(346), 1, - anon_sym_DOT, - STATE(141), 1, - aux_sym_identity_path_repeat1, + [9907] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10083,7 +10344,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(184), 17, + ACTIONS(184), 19, + sym_identifier, + sym_unit_quote, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10101,24 +10364,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [9566] = 5, + [9941] = 4, ACTIONS(348), 1, anon_sym_DOT, - STATE(135), 1, - aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(182), 6, + ACTIONS(146), 7, + sym_identifier, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(177), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(144), 17, + sym_unit_quote, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10133,21 +10394,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_LPAREN, - [9604] = 3, + [9977] = 5, + ACTIONS(350), 1, + anon_sym_DOT, + STATE(145), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(132), 6, + ACTIONS(182), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(130), 19, - sym_identifier, - sym_unit_quote, + ACTIONS(180), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10165,55 +10429,69 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [9638] = 5, - ACTIONS(351), 1, - anon_sym_DOT, - STATE(137), 1, - aux_sym_identity_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(175), 6, + [10015] = 19, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, anon_sym_STAR, + ACTIONS(238), 1, + anon_sym_SLASH, + ACTIONS(242), 1, anon_sym_AMP, + ACTIONS(244), 1, anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(170), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(252), 1, + anon_sym_AMP_AMP, + ACTIONS(254), 1, + anon_sym_PIPE_PIPE, + ACTIONS(256), 1, + anon_sym_CARET_CARET, + ACTIONS(354), 1, + anon_sym_EQ, + STATE(127), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(248), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(352), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [9676] = 5, - ACTIONS(354), 1, + [10081] = 5, + ACTIONS(356), 1, anon_sym_DOT, - STATE(135), 1, - aux_sym_self_path_repeat1, + STATE(142), 1, + aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(168), 6, + ACTIONS(167), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(166), 17, + ACTIONS(162), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10231,12 +10509,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [9714] = 6, + [10119] = 6, ACTIONS(138), 1, sym_identifier, ACTIONS(140), 1, sym_unit_quote, - STATE(86), 1, + STATE(97), 1, sym__unit, ACTIONS(3), 2, sym_comment, @@ -10265,22 +10543,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_CARET, anon_sym_then, anon_sym_LPAREN, - [9754] = 4, - ACTIONS(356), 1, + [10159] = 5, + ACTIONS(359), 1, anon_sym_DOT, + STATE(144), 1, + aux_sym_self_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(146), 7, - sym_identifier, + ACTIONS(178), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(144), 17, - sym_unit_quote, + ACTIONS(173), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10295,24 +10575,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_LPAREN, - [9790] = 5, - ACTIONS(346), 1, + [10197] = 5, + ACTIONS(350), 1, anon_sym_DOT, - STATE(137), 1, + STATE(142), 1, aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(164), 6, + ACTIONS(154), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(160), 17, + ACTIONS(150), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10330,69 +10609,52 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [9828] = 19, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(234), 1, + [10235] = 5, + ACTIONS(346), 1, + anon_sym_DOT, + STATE(136), 1, + aux_sym_self_path_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(171), 6, anon_sym_STAR, - ACTIONS(236), 1, - anon_sym_SLASH, - ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(256), 1, - anon_sym_AMP_AMP, - ACTIONS(258), 1, - anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_CARET_CARET, - ACTIONS(360), 1, - anon_sym_EQ, - STATE(111), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(230), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(169), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(358), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9894] = 5, - ACTIONS(354), 1, - anon_sym_DOT, - STATE(138), 1, - aux_sym_self_path_repeat1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [10273] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(154), 6, + ACTIONS(167), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(150), 17, + ACTIONS(162), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10410,13 +10672,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [9932] = 4, + [10306] = 4, ACTIONS(362), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(306), 7, + ACTIONS(294), 7, anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, @@ -10424,7 +10686,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(304), 16, + ACTIONS(292), 16, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10441,143 +10703,98 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [9967] = 18, - ACTIONS(212), 1, + [10341] = 19, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, ACTIONS(234), 1, - anon_sym_STAR, + anon_sym_STAR_STAR, ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, ACTIONS(242), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, + ACTIONS(256), 1, anon_sym_CARET_CARET, - STATE(111), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(230), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(238), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(364), 2, + ACTIONS(364), 1, anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(248), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [10030] = 19, ACTIONS(366), 1, - anon_sym_COMMA, - ACTIONS(368), 1, - anon_sym_RPAREN_GT, - ACTIONS(370), 1, - anon_sym_COLON_COLON, - ACTIONS(374), 1, - anon_sym_STAR_STAR, - ACTIONS(376), 1, - anon_sym_STAR, - ACTIONS(378), 1, - anon_sym_SLASH, - ACTIONS(382), 1, - anon_sym_AMP, - ACTIONS(384), 1, - anon_sym_PIPE, - ACTIONS(386), 1, - anon_sym_CARET, - ACTIONS(392), 1, - anon_sym_AMP_AMP, - ACTIONS(394), 1, - anon_sym_PIPE_PIPE, - ACTIONS(396), 1, - anon_sym_CARET_CARET, - ACTIONS(398), 1, - anon_sym_LPAREN, - STATE(213), 1, + anon_sym_RBRACK, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(372), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(388), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(390), 4, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10095] = 18, - ACTIONS(370), 1, + [10406] = 18, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(382), 1, + ACTIONS(380), 1, anon_sym_AMP, - ACTIONS(384), 1, + ACTIONS(382), 1, anon_sym_PIPE, - ACTIONS(386), 1, + ACTIONS(384), 1, anon_sym_CARET, - ACTIONS(392), 1, + ACTIONS(390), 1, anon_sym_AMP_AMP, - ACTIONS(394), 1, + ACTIONS(392), 1, anon_sym_PIPE_PIPE, - ACTIONS(396), 1, + ACTIONS(394), 1, anon_sym_CARET_CARET, - ACTIONS(398), 1, + ACTIONS(396), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(254), 2, + ACTIONS(288), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - ACTIONS(372), 2, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(388), 2, + ACTIONS(386), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(390), 4, + ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10158] = 4, + [10469] = 4, ACTIONS(196), 1, anon_sym_DASH_GT, ACTIONS(3), 2, @@ -10608,69 +10825,82 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [10193] = 19, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, - ACTIONS(234), 1, + [10504] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(200), 6, anon_sym_STAR, - ACTIONS(236), 1, - anon_sym_SLASH, - ACTIONS(240), 1, anon_sym_AMP, - ACTIONS(242), 1, anon_sym_PIPE, - ACTIONS(244), 1, anon_sym_CARET, - ACTIONS(256), 1, + anon_sym_GT, + anon_sym_LT, + ACTIONS(198), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(258), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, anon_sym_CARET_CARET, - ACTIONS(400), 1, - anon_sym_COMMA, - ACTIONS(402), 1, - anon_sym_RBRACK, - STATE(111), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + [10537] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(208), 7, anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(206), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_PLUS, - ACTIONS(238), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(248), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10258] = 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + anon_sym_DASH_GT, + [10570] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(220), 6, + ACTIONS(212), 7, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(218), 18, - anon_sym_DOT, + ACTIONS(210), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -10684,7 +10914,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [10291] = 3, + anon_sym_DASH_GT, + [10603] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10714,11 +10945,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_CARET, anon_sym_then, anon_sym_LPAREN, - [10324] = 3, + [10636] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 7, + ACTIONS(186), 7, sym_identifier, anon_sym_STAR, anon_sym_AMP, @@ -10726,7 +10957,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(156), 17, + ACTIONS(184), 17, sym_unit_quote, anon_sym_COLON_COLON, anon_sym_DASH, @@ -10744,24 +10975,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_CARET, anon_sym_then, anon_sym_LPAREN, - [10357] = 6, - ACTIONS(370), 1, + [10669] = 6, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(398), 1, + ACTIONS(396), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 6, + ACTIONS(226), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 15, + ACTIONS(222), 15, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_DASH, @@ -10777,69 +11008,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [10396] = 19, - ACTIONS(370), 1, - anon_sym_COLON_COLON, - ACTIONS(374), 1, - anon_sym_STAR_STAR, - ACTIONS(376), 1, - anon_sym_STAR, - ACTIONS(378), 1, - anon_sym_SLASH, - ACTIONS(382), 1, - anon_sym_AMP, - ACTIONS(384), 1, - anon_sym_PIPE, - ACTIONS(386), 1, - anon_sym_CARET, - ACTIONS(392), 1, - anon_sym_AMP_AMP, - ACTIONS(394), 1, - anon_sym_PIPE_PIPE, - ACTIONS(396), 1, - anon_sym_CARET_CARET, - ACTIONS(398), 1, - anon_sym_LPAREN, - ACTIONS(404), 1, - anon_sym_COMMA, - ACTIONS(406), 1, - anon_sym_RPAREN_GT, - STATE(213), 1, - sym_dictionary_construction, + [10708] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(372), 2, + ACTIONS(190), 7, anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(380), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(388), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(390), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [10461] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(175), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(170), 18, - anon_sym_DOT, + ACTIONS(188), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -10853,261 +11037,262 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [10494] = 18, - ACTIONS(370), 1, + anon_sym_DASH_GT, + [10741] = 19, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(382), 1, + ACTIONS(380), 1, anon_sym_AMP, - ACTIONS(384), 1, + ACTIONS(382), 1, anon_sym_PIPE, - ACTIONS(386), 1, + ACTIONS(384), 1, anon_sym_CARET, - ACTIONS(392), 1, + ACTIONS(390), 1, anon_sym_AMP_AMP, - ACTIONS(394), 1, + ACTIONS(392), 1, anon_sym_PIPE_PIPE, - ACTIONS(396), 1, + ACTIONS(394), 1, anon_sym_CARET_CARET, - ACTIONS(398), 1, + ACTIONS(396), 1, anon_sym_LPAREN, - STATE(213), 1, + ACTIONS(398), 1, + anon_sym_COMMA, + ACTIONS(400), 1, + anon_sym_RPAREN_GT, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(268), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(372), 2, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(388), 2, + ACTIONS(386), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(390), 4, + ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10557] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(200), 7, - anon_sym_DASH, + [10806] = 18, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, anon_sym_STAR, + ACTIONS(238), 1, + anon_sym_SLASH, + ACTIONS(242), 1, anon_sym_AMP, + ACTIONS(244), 1, anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(198), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(252), 1, anon_sym_AMP_AMP, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, + ACTIONS(256), 1, anon_sym_CARET_CARET, - anon_sym_LPAREN, - anon_sym_DASH_GT, - [10590] = 3, + STATE(127), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 7, + ACTIONS(232), 2, anon_sym_DASH, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(202), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(248), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(402), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - anon_sym_DASH_GT, - [10623] = 9, - ACTIONS(370), 1, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [10869] = 18, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(398), 1, + ACTIONS(380), 1, + anon_sym_AMP, + ACTIONS(382), 1, + anon_sym_PIPE, + ACTIONS(384), 1, + anon_sym_CARET, + ACTIONS(390), 1, + anon_sym_AMP_AMP, + ACTIONS(392), 1, + anon_sym_PIPE_PIPE, + ACTIONS(394), 1, + anon_sym_CARET_CARET, + ACTIONS(396), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 5, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(210), 13, + ACTIONS(284), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(386), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [10668] = 19, + [10932] = 19, ACTIONS(45), 1, anon_sym_RBRACK, - ACTIONS(212), 1, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, ACTIONS(234), 1, - anon_sym_STAR, + anon_sym_STAR_STAR, ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, ACTIONS(242), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, + ACTIONS(256), 1, anon_sym_CARET_CARET, - ACTIONS(400), 1, + ACTIONS(364), 1, anon_sym_COMMA, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10733] = 10, - ACTIONS(370), 1, + [10997] = 19, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(398), 1, + ACTIONS(380), 1, + anon_sym_AMP, + ACTIONS(382), 1, + anon_sym_PIPE, + ACTIONS(384), 1, + anon_sym_CARET, + ACTIONS(390), 1, + anon_sym_AMP_AMP, + ACTIONS(392), 1, + anon_sym_PIPE_PIPE, + ACTIONS(394), 1, + anon_sym_CARET_CARET, + ACTIONS(396), 1, anon_sym_LPAREN, - STATE(213), 1, + ACTIONS(404), 1, + anon_sym_COMMA, + ACTIONS(406), 1, + anon_sym_RPAREN_GT, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(372), 2, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(214), 5, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(210), 11, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(386), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [10780] = 11, - ACTIONS(370), 1, + [11062] = 7, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, - anon_sym_STAR, - ACTIONS(378), 1, - anon_sym_SLASH, - ACTIONS(398), 1, + ACTIONS(396), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(372), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(380), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(214), 5, + ACTIONS(226), 6, + anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 9, + ACTIONS(222), 14, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -11115,39 +11300,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [10829] = 13, - ACTIONS(370), 1, + [11103] = 10, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(382), 1, - anon_sym_AMP, - ACTIONS(386), 1, - anon_sym_CARET, - ACTIONS(398), 1, + ACTIONS(396), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(372), 2, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(214), 3, + ACTIONS(226), 5, + anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 9, + ACTIONS(222), 11, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -11155,36 +11337,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [10882] = 12, - ACTIONS(370), 1, + [11150] = 11, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(382), 1, - anon_sym_AMP, - ACTIONS(398), 1, + ACTIONS(396), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(372), 2, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(214), 4, + ACTIONS(226), 5, + anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 9, + ACTIONS(222), 9, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_GT_EQ, @@ -11194,38 +11375,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [10933] = 14, - ACTIONS(370), 1, + [11199] = 13, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(382), 1, + ACTIONS(380), 1, anon_sym_AMP, ACTIONS(384), 1, - anon_sym_PIPE, - ACTIONS(386), 1, anon_sym_CARET, - ACTIONS(398), 1, + ACTIONS(396), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(372), 2, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(210), 9, + ACTIONS(226), 3, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + ACTIONS(222), 9, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_GT_EQ, @@ -11235,690 +11415,606 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [10988] = 15, - ACTIONS(370), 1, + [11252] = 12, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(382), 1, + ACTIONS(380), 1, anon_sym_AMP, - ACTIONS(384), 1, - anon_sym_PIPE, - ACTIONS(386), 1, - anon_sym_CARET, - ACTIONS(398), 1, + ACTIONS(396), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(372), 2, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(388), 2, + ACTIONS(226), 4, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(390), 4, + ACTIONS(222), 9, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(210), 5, - anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [11045] = 16, - ACTIONS(370), 1, + [11303] = 14, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(382), 1, + ACTIONS(380), 1, anon_sym_AMP, - ACTIONS(384), 1, + ACTIONS(382), 1, anon_sym_PIPE, - ACTIONS(386), 1, + ACTIONS(384), 1, anon_sym_CARET, - ACTIONS(392), 1, - anon_sym_AMP_AMP, - ACTIONS(398), 1, + ACTIONS(396), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(372), 2, + ACTIONS(226), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(388), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(210), 4, + ACTIONS(222), 9, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11104] = 17, - ACTIONS(370), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [11358] = 15, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(382), 1, + ACTIONS(380), 1, anon_sym_AMP, - ACTIONS(384), 1, + ACTIONS(382), 1, anon_sym_PIPE, - ACTIONS(386), 1, + ACTIONS(384), 1, anon_sym_CARET, - ACTIONS(392), 1, - anon_sym_AMP_AMP, - ACTIONS(394), 1, - anon_sym_PIPE_PIPE, - ACTIONS(398), 1, + ACTIONS(396), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(372), 2, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(388), 2, + ACTIONS(386), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 3, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_CARET_CARET, - ACTIONS(390), 4, + ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11165] = 18, - ACTIONS(212), 1, + ACTIONS(222), 5, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [11415] = 16, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(234), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(236), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(240), 1, + ACTIONS(380), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(382), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(384), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(390), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, - anon_sym_PIPE_PIPE, - ACTIONS(260), 1, - anon_sym_CARET_CARET, - STATE(111), 1, + ACTIONS(396), 1, + anon_sym_LPAREN, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(386), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(408), 2, + ACTIONS(222), 4, anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(248), 4, + anon_sym_RPAREN_GT, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11228] = 18, - ACTIONS(370), 1, + [11474] = 17, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(382), 1, + ACTIONS(380), 1, anon_sym_AMP, - ACTIONS(384), 1, + ACTIONS(382), 1, anon_sym_PIPE, - ACTIONS(386), 1, + ACTIONS(384), 1, anon_sym_CARET, - ACTIONS(392), 1, + ACTIONS(390), 1, anon_sym_AMP_AMP, - ACTIONS(394), 1, - anon_sym_PIPE_PIPE, - ACTIONS(396), 1, - anon_sym_CARET_CARET, - ACTIONS(398), 1, - anon_sym_LPAREN, - STATE(213), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(276), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(372), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(380), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(388), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(390), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [11291] = 3, + ACTIONS(392), 1, + anon_sym_PIPE_PIPE, + ACTIONS(396), 1, + anon_sym_LPAREN, + STATE(211), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(228), 7, + ACTIONS(370), 2, anon_sym_DASH, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, + anon_sym_PLUS, + ACTIONS(378), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(386), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(226), 17, + ACTIONS(222), 3, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + anon_sym_CARET_CARET, + ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - anon_sym_DASH_GT, - [11324] = 18, - ACTIONS(370), 1, + [11535] = 18, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(382), 1, + ACTIONS(380), 1, anon_sym_AMP, - ACTIONS(384), 1, + ACTIONS(382), 1, anon_sym_PIPE, - ACTIONS(386), 1, + ACTIONS(384), 1, anon_sym_CARET, - ACTIONS(392), 1, + ACTIONS(390), 1, anon_sym_AMP_AMP, - ACTIONS(394), 1, + ACTIONS(392), 1, anon_sym_PIPE_PIPE, - ACTIONS(396), 1, + ACTIONS(394), 1, anon_sym_CARET_CARET, - ACTIONS(398), 1, + ACTIONS(396), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(300), 2, + ACTIONS(312), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - ACTIONS(372), 2, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(388), 2, + ACTIONS(386), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(390), 4, + ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11387] = 18, - ACTIONS(370), 1, + [11598] = 18, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(382), 1, + ACTIONS(380), 1, anon_sym_AMP, - ACTIONS(384), 1, + ACTIONS(382), 1, anon_sym_PIPE, - ACTIONS(386), 1, + ACTIONS(384), 1, anon_sym_CARET, - ACTIONS(392), 1, + ACTIONS(390), 1, anon_sym_AMP_AMP, - ACTIONS(394), 1, + ACTIONS(392), 1, anon_sym_PIPE_PIPE, - ACTIONS(396), 1, + ACTIONS(394), 1, anon_sym_CARET_CARET, - ACTIONS(398), 1, + ACTIONS(396), 1, anon_sym_LPAREN, - STATE(213), 1, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(318), 2, + ACTIONS(316), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - ACTIONS(372), 2, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(388), 2, + ACTIONS(386), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(390), 4, + ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11450] = 19, - ACTIONS(94), 1, - anon_sym_RBRACK, - ACTIONS(212), 1, + [11661] = 18, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(234), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(236), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(240), 1, + ACTIONS(380), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(382), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(384), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(390), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(392), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, + ACTIONS(394), 1, anon_sym_CARET_CARET, - ACTIONS(400), 1, - anon_sym_COMMA, - STATE(111), 1, + ACTIONS(396), 1, + anon_sym_LPAREN, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, ACTIONS(230), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(386), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11515] = 19, - ACTIONS(212), 1, + [11724] = 19, + ACTIONS(96), 1, + anon_sym_RBRACK, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, ACTIONS(234), 1, - anon_sym_STAR, + anon_sym_STAR_STAR, ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, ACTIONS(242), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, + ACTIONS(256), 1, anon_sym_CARET_CARET, - ACTIONS(400), 1, + ACTIONS(364), 1, anon_sym_COMMA, - ACTIONS(410), 1, - anon_sym_RBRACK, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11580] = 19, - ACTIONS(370), 1, + [11789] = 19, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(236), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(382), 1, + ACTIONS(242), 1, anon_sym_AMP, - ACTIONS(384), 1, + ACTIONS(244), 1, anon_sym_PIPE, - ACTIONS(386), 1, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(392), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(394), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(396), 1, + ACTIONS(256), 1, anon_sym_CARET_CARET, - ACTIONS(398), 1, - anon_sym_LPAREN, - ACTIONS(412), 1, + ACTIONS(364), 1, anon_sym_COMMA, - ACTIONS(414), 1, - anon_sym_RPAREN_GT, - STATE(213), 1, + ACTIONS(408), 1, + anon_sym_RBRACK, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(372), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(388), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(390), 4, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11645] = 19, - ACTIONS(370), 1, + [11854] = 19, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(382), 1, + ACTIONS(380), 1, anon_sym_AMP, - ACTIONS(384), 1, + ACTIONS(382), 1, anon_sym_PIPE, - ACTIONS(386), 1, + ACTIONS(384), 1, anon_sym_CARET, - ACTIONS(392), 1, + ACTIONS(390), 1, anon_sym_AMP_AMP, - ACTIONS(394), 1, + ACTIONS(392), 1, anon_sym_PIPE_PIPE, - ACTIONS(396), 1, + ACTIONS(394), 1, anon_sym_CARET_CARET, - ACTIONS(398), 1, + ACTIONS(396), 1, anon_sym_LPAREN, - ACTIONS(416), 1, + ACTIONS(410), 1, anon_sym_COMMA, - ACTIONS(418), 1, + ACTIONS(412), 1, anon_sym_RPAREN_GT, - STATE(213), 1, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(372), 2, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(388), 2, + ACTIONS(386), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(390), 4, + ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11710] = 7, - ACTIONS(370), 1, + [11919] = 19, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(398), 1, - anon_sym_LPAREN, - STATE(213), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(214), 6, + ACTIONS(374), 1, anon_sym_STAR, + ACTIONS(376), 1, + anon_sym_SLASH, + ACTIONS(380), 1, anon_sym_AMP, + ACTIONS(382), 1, anon_sym_PIPE, + ACTIONS(384), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(210), 14, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(390), 1, anon_sym_AMP_AMP, + ACTIONS(392), 1, anon_sym_PIPE_PIPE, + ACTIONS(394), 1, anon_sym_CARET_CARET, - [11751] = 3, + ACTIONS(396), 1, + anon_sym_LPAREN, + ACTIONS(414), 1, + anon_sym_COMMA, + ACTIONS(416), 1, + anon_sym_RPAREN_GT, + STATE(211), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(292), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(386), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [11783] = 18, - ACTIONS(212), 1, + [11984] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(422), 1, + ACTIONS(234), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(236), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(430), 1, + ACTIONS(242), 1, anon_sym_AMP, - ACTIONS(432), 1, + ACTIONS(244), 1, anon_sym_PIPE, - ACTIONS(434), 1, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(440), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(442), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(444), 1, + ACTIONS(256), 1, anon_sym_CARET_CARET, - ACTIONS(446), 1, - anon_sym_then, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(436), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(438), 4, + ACTIONS(418), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11845] = 9, - ACTIONS(212), 1, + [12047] = 9, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(422), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(376), 1, anon_sym_SLASH, - STATE(111), 1, + ACTIONS(396), 1, + anon_sym_LPAREN, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 5, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(210), 12, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - [11889] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(290), 6, - anon_sym_STAR, + ACTIONS(226), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(288), 17, + ACTIONS(222), 13, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -11927,30 +12023,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [11921] = 7, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(422), 1, - anon_sym_STAR_STAR, - STATE(111), 1, - sym_dictionary_construction, + anon_sym_CARET_CARET, + [12092] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 6, + ACTIONS(310), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 13, + ACTIONS(308), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -11961,11 +12052,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - [11961] = 10, - ACTIONS(212), 1, + anon_sym_LPAREN, + [12124] = 10, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, ACTIONS(422), 1, anon_sym_STAR_STAR, @@ -11973,7 +12064,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR, ACTIONS(426), 1, anon_sym_SLASH, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -11981,13 +12072,13 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(214), 5, + ACTIONS(226), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 10, + ACTIONS(222), 10, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -11998,10 +12089,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - [12007] = 11, - ACTIONS(212), 1, + [12170] = 11, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, ACTIONS(422), 1, anon_sym_STAR_STAR, @@ -12009,7 +12100,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR, ACTIONS(426), 1, anon_sym_SLASH, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -12020,13 +12111,13 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(214), 5, + ACTIONS(226), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 8, + ACTIONS(222), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12035,10 +12126,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - [12055] = 13, - ACTIONS(212), 1, + [12218] = 13, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, ACTIONS(422), 1, anon_sym_STAR_STAR, @@ -12048,9 +12139,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SLASH, ACTIONS(430), 1, anon_sym_AMP, - ACTIONS(434), 1, + ACTIONS(432), 1, anon_sym_CARET, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -12061,11 +12152,11 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(214), 3, + ACTIONS(226), 3, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 8, + ACTIONS(222), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12074,36 +12165,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - [12107] = 12, - ACTIONS(212), 1, + [12270] = 7, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, ACTIONS(422), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, - anon_sym_STAR, - ACTIONS(426), 1, - anon_sym_SLASH, - ACTIONS(430), 1, - anon_sym_AMP, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(428), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(214), 4, + ACTIONS(226), 6, + anon_sym_STAR, + anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 8, + ACTIONS(222), 13, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12112,10 +12198,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - [12157] = 14, - ACTIONS(212), 1, + [12310] = 14, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, ACTIONS(422), 1, anon_sym_STAR_STAR, @@ -12126,15 +12212,15 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(430), 1, anon_sym_AMP, ACTIONS(432), 1, - anon_sym_PIPE, - ACTIONS(434), 1, anon_sym_CARET, - STATE(111), 1, + ACTIONS(434), 1, + anon_sym_PIPE, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(214), 2, + ACTIONS(226), 2, anon_sym_GT, anon_sym_LT, ACTIONS(420), 2, @@ -12143,7 +12229,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(210), 8, + ACTIONS(222), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12152,10 +12238,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - [12211] = 15, - ACTIONS(212), 1, + [12364] = 15, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, ACTIONS(422), 1, anon_sym_STAR_STAR, @@ -12166,10 +12252,10 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(430), 1, anon_sym_AMP, ACTIONS(432), 1, - anon_sym_PIPE, - ACTIONS(434), 1, anon_sym_CARET, - STATE(111), 1, + ACTIONS(434), 1, + anon_sym_PIPE, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -12183,7 +12269,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(436), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 4, + ACTIONS(222), 4, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, @@ -12193,10 +12279,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12267] = 16, - ACTIONS(212), 1, + [12420] = 16, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, ACTIONS(422), 1, anon_sym_STAR_STAR, @@ -12207,12 +12293,12 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(430), 1, anon_sym_AMP, ACTIONS(432), 1, - anon_sym_PIPE, - ACTIONS(434), 1, anon_sym_CARET, + ACTIONS(434), 1, + anon_sym_PIPE, ACTIONS(440), 1, anon_sym_AMP_AMP, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -12226,7 +12312,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(436), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(210), 3, + ACTIONS(222), 3, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, @@ -12235,10 +12321,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12325] = 17, - ACTIONS(212), 1, + [12478] = 17, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, ACTIONS(422), 1, anon_sym_STAR_STAR, @@ -12249,19 +12335,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(430), 1, anon_sym_AMP, ACTIONS(432), 1, - anon_sym_PIPE, - ACTIONS(434), 1, anon_sym_CARET, + ACTIONS(434), 1, + anon_sym_PIPE, ACTIONS(440), 1, anon_sym_AMP_AMP, ACTIONS(442), 1, anon_sym_PIPE_PIPE, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(210), 2, + ACTIONS(222), 2, anon_sym_CARET_CARET, anon_sym_then, ACTIONS(420), 2, @@ -12278,7 +12364,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12385] = 3, + [12538] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -12303,16 +12389,249 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [12417] = 18, - ACTIONS(212), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [12570] = 18, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(312), 1, + anon_sym_then, + ACTIONS(422), 1, + anon_sym_STAR_STAR, + ACTIONS(424), 1, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, + ACTIONS(430), 1, + anon_sym_AMP, + ACTIONS(432), 1, + anon_sym_CARET, + ACTIONS(434), 1, + anon_sym_PIPE, + ACTIONS(440), 1, + anon_sym_AMP_AMP, + ACTIONS(442), 1, + anon_sym_PIPE_PIPE, + ACTIONS(444), 1, + anon_sym_CARET_CARET, + STATE(127), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(420), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(428), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(436), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(438), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [12632] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(322), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(320), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [12664] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(330), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(328), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [12696] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(334), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(332), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [12728] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(266), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(264), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [12760] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(270), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(268), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [12792] = 18, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(316), 1, + anon_sym_then, + ACTIONS(422), 1, + anon_sym_STAR_STAR, + ACTIONS(424), 1, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, + ACTIONS(430), 1, + anon_sym_AMP, + ACTIONS(432), 1, + anon_sym_CARET, + ACTIONS(434), 1, + anon_sym_PIPE, + ACTIONS(440), 1, + anon_sym_AMP_AMP, + ACTIONS(442), 1, + anon_sym_PIPE_PIPE, + ACTIONS(444), 1, + anon_sym_CARET_CARET, + STATE(127), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(420), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(428), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(436), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(438), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [12854] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(276), 1, + ACTIONS(230), 1, anon_sym_then, ACTIONS(422), 1, anon_sym_STAR_STAR, @@ -12323,16 +12642,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(430), 1, anon_sym_AMP, ACTIONS(432), 1, - anon_sym_PIPE, - ACTIONS(434), 1, anon_sym_CARET, + ACTIONS(434), 1, + anon_sym_PIPE, ACTIONS(440), 1, anon_sym_AMP_AMP, ACTIONS(442), 1, anon_sym_PIPE_PIPE, ACTIONS(444), 1, anon_sym_CARET_CARET, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -12351,18 +12670,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12479] = 3, + [12916] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(286), 6, + ACTIONS(274), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(284), 17, + ACTIONS(272), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12380,18 +12699,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [12511] = 3, + [12948] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(298), 6, + ACTIONS(278), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(296), 17, + ACTIONS(276), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12409,62 +12728,62 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [12543] = 18, - ACTIONS(212), 1, + [12980] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(300), 1, - anon_sym_then, - ACTIONS(422), 1, + ACTIONS(234), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(236), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(430), 1, + ACTIONS(242), 1, anon_sym_AMP, - ACTIONS(432), 1, + ACTIONS(244), 1, anon_sym_PIPE, - ACTIONS(434), 1, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(440), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(442), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(444), 1, + ACTIONS(256), 1, anon_sym_CARET_CARET, - STATE(111), 1, + ACTIONS(446), 1, + anon_sym_RPAREN, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(436), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(438), 4, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12605] = 3, + [13042] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(316), 6, + ACTIONS(216), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(314), 17, + ACTIONS(214), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12482,18 +12801,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [12637] = 3, + [13074] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(312), 6, + ACTIONS(204), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(310), 17, + ACTIONS(202), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12511,18 +12830,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [12669] = 3, + [13106] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(324), 6, + ACTIONS(220), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(322), 17, + ACTIONS(218), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12540,243 +12859,186 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [12701] = 18, - ACTIONS(212), 1, + [13138] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(318), 1, - anon_sym_then, - ACTIONS(422), 1, + ACTIONS(234), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(236), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(430), 1, + ACTIONS(242), 1, anon_sym_AMP, - ACTIONS(432), 1, + ACTIONS(244), 1, anon_sym_PIPE, - ACTIONS(434), 1, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(440), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(442), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(444), 1, + ACTIONS(256), 1, anon_sym_CARET_CARET, - STATE(111), 1, + ACTIONS(448), 1, + anon_sym_COLON, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(436), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(438), 4, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12763] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(332), 6, + [13200] = 18, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, anon_sym_STAR, + ACTIONS(238), 1, + anon_sym_SLASH, + ACTIONS(242), 1, anon_sym_AMP, + ACTIONS(244), 1, anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(330), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(252), 1, anon_sym_AMP_AMP, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, + ACTIONS(256), 1, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [12795] = 3, + ACTIONS(450), 1, + anon_sym_else, + STATE(127), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(336), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(334), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(248), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [12827] = 18, - ACTIONS(212), 1, + [13262] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, ACTIONS(234), 1, - anon_sym_STAR, + anon_sym_STAR_STAR, ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, ACTIONS(242), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, + ACTIONS(256), 1, anon_sym_CARET_CARET, - ACTIONS(448), 1, - anon_sym_COMMA, - STATE(111), 1, + ACTIONS(452), 1, + anon_sym_SEMI, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12889] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(208), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(206), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + [13324] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, + ACTIONS(228), 1, anon_sym_LPAREN, - [12921] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(224), 6, + ACTIONS(234), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, anon_sym_STAR, + ACTIONS(238), 1, + anon_sym_SLASH, + ACTIONS(242), 1, anon_sym_AMP, + ACTIONS(244), 1, anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(222), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(252), 1, anon_sym_AMP_AMP, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, + ACTIONS(256), 1, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [12953] = 3, + ACTIONS(454), 1, + anon_sym_COMMA, + STATE(127), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(190), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(188), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(248), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [12985] = 18, - ACTIONS(212), 1, + [13386] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, ACTIONS(422), 1, anon_sym_STAR_STAR, @@ -12787,18 +13049,18 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(430), 1, anon_sym_AMP, ACTIONS(432), 1, - anon_sym_PIPE, - ACTIONS(434), 1, anon_sym_CARET, + ACTIONS(434), 1, + anon_sym_PIPE, ACTIONS(440), 1, anon_sym_AMP_AMP, ACTIONS(442), 1, anon_sym_PIPE_PIPE, ACTIONS(444), 1, anon_sym_CARET_CARET, - ACTIONS(450), 1, + ACTIONS(456), 1, anon_sym_then, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -12817,150 +13079,179 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13047] = 18, - ACTIONS(212), 1, + [13448] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(326), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(324), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - ACTIONS(216), 1, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - ACTIONS(232), 1, + [13480] = 18, + ACTIONS(368), 1, + anon_sym_COLON_COLON, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(234), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(236), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(240), 1, + ACTIONS(380), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(382), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(384), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(390), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(392), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, + ACTIONS(394), 1, anon_sym_CARET_CARET, - ACTIONS(452), 1, - anon_sym_else, - STATE(111), 1, + ACTIONS(396), 1, + anon_sym_LPAREN, + ACTIONS(458), 1, + anon_sym_RPAREN_GT, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(386), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13109] = 18, - ACTIONS(212), 1, + [13542] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(284), 1, + anon_sym_then, + ACTIONS(422), 1, anon_sym_STAR_STAR, - ACTIONS(234), 1, + ACTIONS(424), 1, anon_sym_STAR, - ACTIONS(236), 1, + ACTIONS(426), 1, anon_sym_SLASH, - ACTIONS(240), 1, + ACTIONS(430), 1, anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(432), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(434), 1, + anon_sym_PIPE, + ACTIONS(440), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(442), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, + ACTIONS(444), 1, anon_sym_CARET_CARET, - ACTIONS(454), 1, - ts_builtin_sym_end, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(436), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(438), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13171] = 18, - ACTIONS(212), 1, + [13604] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, ACTIONS(234), 1, - anon_sym_STAR, + anon_sym_STAR_STAR, ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, ACTIONS(242), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, + ACTIONS(256), 1, anon_sym_CARET_CARET, - ACTIONS(456), 1, - anon_sym_SEMI, - STATE(111), 1, + ACTIONS(460), 1, + ts_builtin_sym_end, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13233] = 3, + [13666] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(306), 6, + ACTIONS(298), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(304), 17, + ACTIONS(296), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12978,62 +13269,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13265] = 18, - ACTIONS(370), 1, - anon_sym_COLON_COLON, - ACTIONS(374), 1, - anon_sym_STAR_STAR, - ACTIONS(376), 1, + [13698] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(294), 6, anon_sym_STAR, - ACTIONS(378), 1, - anon_sym_SLASH, - ACTIONS(382), 1, anon_sym_AMP, - ACTIONS(384), 1, anon_sym_PIPE, - ACTIONS(386), 1, anon_sym_CARET, - ACTIONS(392), 1, - anon_sym_AMP_AMP, - ACTIONS(394), 1, - anon_sym_PIPE_PIPE, - ACTIONS(396), 1, - anon_sym_CARET_CARET, - ACTIONS(398), 1, - anon_sym_LPAREN, - ACTIONS(458), 1, + anon_sym_GT, + anon_sym_LT, + ACTIONS(292), 17, + anon_sym_COMMA, anon_sym_RPAREN_GT, - STATE(213), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(372), 2, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(388), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(390), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13327] = 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [13730] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(274), 6, + ACTIONS(302), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(272), 17, + ACTIONS(300), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13051,62 +13327,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13359] = 18, - ACTIONS(212), 1, - anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(268), 1, - anon_sym_then, - ACTIONS(422), 1, - anon_sym_STAR_STAR, - ACTIONS(424), 1, - anon_sym_STAR, - ACTIONS(426), 1, - anon_sym_SLASH, - ACTIONS(430), 1, - anon_sym_AMP, - ACTIONS(432), 1, - anon_sym_PIPE, - ACTIONS(434), 1, - anon_sym_CARET, - ACTIONS(440), 1, - anon_sym_AMP_AMP, - ACTIONS(442), 1, - anon_sym_PIPE_PIPE, - ACTIONS(444), 1, - anon_sym_CARET_CARET, - STATE(111), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(420), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(428), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(436), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(438), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [13421] = 3, + [13762] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(328), 6, + ACTIONS(282), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(326), 17, + ACTIONS(280), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13124,18 +13356,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13453] = 3, + [13794] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(266), 6, + ACTIONS(306), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(264), 17, + ACTIONS(304), 17, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13153,56 +13385,56 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13485] = 18, - ACTIONS(212), 1, + [13826] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, ACTIONS(234), 1, - anon_sym_STAR, + anon_sym_STAR_STAR, ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, ACTIONS(242), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, + ACTIONS(256), 1, anon_sym_CARET_CARET, - ACTIONS(460), 1, - anon_sym_RPAREN, - STATE(111), 1, + ACTIONS(364), 1, + anon_sym_COMMA, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13547] = 18, - ACTIONS(212), 1, + [13888] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(254), 1, + ACTIONS(288), 1, anon_sym_then, ACTIONS(422), 1, anon_sym_STAR_STAR, @@ -13213,16 +13445,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(430), 1, anon_sym_AMP, ACTIONS(432), 1, - anon_sym_PIPE, - ACTIONS(434), 1, anon_sym_CARET, + ACTIONS(434), 1, + anon_sym_PIPE, ACTIONS(440), 1, anon_sym_AMP_AMP, ACTIONS(442), 1, anon_sym_PIPE_PIPE, ACTIONS(444), 1, anon_sym_CARET_CARET, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -13241,69 +13473,192 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13609] = 18, - ACTIONS(212), 1, + [13950] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, ACTIONS(234), 1, - anon_sym_STAR, + anon_sym_STAR_STAR, ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, ACTIONS(242), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, + ACTIONS(256), 1, anon_sym_CARET_CARET, ACTIONS(462), 1, anon_sym_RPAREN, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(232), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(240), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(248), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(250), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14012] = 18, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, + anon_sym_SLASH, + ACTIONS(242), 1, + anon_sym_AMP, + ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, + anon_sym_CARET, + ACTIONS(252), 1, + anon_sym_AMP_AMP, + ACTIONS(254), 1, + anon_sym_PIPE_PIPE, + ACTIONS(256), 1, + anon_sym_CARET_CARET, + ACTIONS(464), 1, + anon_sym_COLON, + STATE(127), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13671] = 3, + [14074] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(262), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(260), 17, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [14106] = 18, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, + anon_sym_STAR_STAR, + ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, + anon_sym_SLASH, + ACTIONS(242), 1, + anon_sym_AMP, + ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, + anon_sym_CARET, + ACTIONS(252), 1, + anon_sym_AMP_AMP, + ACTIONS(254), 1, + anon_sym_PIPE_PIPE, + ACTIONS(256), 1, + anon_sym_CARET_CARET, + ACTIONS(466), 1, + anon_sym_else, + STATE(127), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(232), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(240), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(248), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(250), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14168] = 9, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(422), 1, + anon_sym_STAR_STAR, + ACTIONS(424), 1, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, + STATE(127), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(282), 6, - anon_sym_STAR, + ACTIONS(226), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(280), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(222), 12, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -13313,146 +13668,146 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [13703] = 18, - ACTIONS(212), 1, + anon_sym_then, + [14212] = 18, + ACTIONS(368), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, - anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(372), 1, anon_sym_STAR_STAR, - ACTIONS(234), 1, + ACTIONS(374), 1, anon_sym_STAR, - ACTIONS(236), 1, + ACTIONS(376), 1, anon_sym_SLASH, - ACTIONS(240), 1, + ACTIONS(380), 1, anon_sym_AMP, - ACTIONS(242), 1, + ACTIONS(382), 1, anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(384), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(390), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(392), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, + ACTIONS(394), 1, anon_sym_CARET_CARET, - ACTIONS(464), 1, - anon_sym_else, - STATE(111), 1, + ACTIONS(396), 1, + anon_sym_LPAREN, + ACTIONS(468), 1, + anon_sym_RPAREN_GT, + STATE(211), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(370), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(378), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(386), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13765] = 18, - ACTIONS(370), 1, + [14274] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(374), 1, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(234), 1, anon_sym_STAR_STAR, - ACTIONS(376), 1, + ACTIONS(236), 1, anon_sym_STAR, - ACTIONS(378), 1, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(382), 1, + ACTIONS(242), 1, anon_sym_AMP, - ACTIONS(384), 1, + ACTIONS(244), 1, anon_sym_PIPE, - ACTIONS(386), 1, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(392), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(394), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(396), 1, + ACTIONS(256), 1, anon_sym_CARET_CARET, - ACTIONS(398), 1, - anon_sym_LPAREN, - ACTIONS(466), 1, - anon_sym_RPAREN_GT, - STATE(213), 1, + ACTIONS(470), 1, + anon_sym_COLON, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(372), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(380), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(388), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(390), 4, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13827] = 18, - ACTIONS(212), 1, + [14336] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, ACTIONS(234), 1, - anon_sym_STAR, + anon_sym_STAR_STAR, ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, ACTIONS(242), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, + ACTIONS(256), 1, anon_sym_CARET_CARET, - ACTIONS(468), 1, + ACTIONS(472), 1, anon_sym_else, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13889] = 4, - ACTIONS(470), 1, + [14398] = 4, + ACTIONS(474), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(306), 7, + ACTIONS(294), 7, anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, @@ -13460,7 +13815,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(304), 15, + ACTIONS(292), 15, anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -13476,98 +13831,98 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_CARET, anon_sym_then, anon_sym_LPAREN, - [13923] = 18, - ACTIONS(212), 1, + [14432] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, - anon_sym_STAR_STAR, ACTIONS(234), 1, - anon_sym_STAR, + anon_sym_STAR_STAR, ACTIONS(236), 1, + anon_sym_STAR, + ACTIONS(238), 1, anon_sym_SLASH, - ACTIONS(240), 1, - anon_sym_AMP, ACTIONS(242), 1, - anon_sym_PIPE, + anon_sym_AMP, ACTIONS(244), 1, + anon_sym_PIPE, + ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, + ACTIONS(256), 1, anon_sym_CARET_CARET, - ACTIONS(400), 1, + ACTIONS(476), 1, anon_sym_COMMA, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(232), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(240), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13985] = 18, - ACTIONS(212), 1, + [14494] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, - ACTIONS(232), 1, + ACTIONS(422), 1, anon_sym_STAR_STAR, - ACTIONS(234), 1, + ACTIONS(424), 1, anon_sym_STAR, - ACTIONS(236), 1, + ACTIONS(426), 1, anon_sym_SLASH, - ACTIONS(240), 1, + ACTIONS(430), 1, anon_sym_AMP, - ACTIONS(242), 1, - anon_sym_PIPE, - ACTIONS(244), 1, + ACTIONS(432), 1, anon_sym_CARET, - ACTIONS(256), 1, + ACTIONS(434), 1, + anon_sym_PIPE, + ACTIONS(440), 1, anon_sym_AMP_AMP, - ACTIONS(258), 1, + ACTIONS(442), 1, anon_sym_PIPE_PIPE, - ACTIONS(260), 1, + ACTIONS(444), 1, anon_sym_CARET_CARET, - ACTIONS(472), 1, - anon_sym_COMMA, - STATE(111), 1, + ACTIONS(478), 1, + anon_sym_then, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(238), 2, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(246), 2, + ACTIONS(436), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(248), 4, + ACTIONS(438), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14047] = 18, - ACTIONS(212), 1, + [14556] = 18, + ACTIONS(224), 1, anon_sym_COLON_COLON, - ACTIONS(216), 1, + ACTIONS(228), 1, anon_sym_LPAREN, ACTIONS(422), 1, anon_sym_STAR_STAR, @@ -13578,18 +13933,18 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(430), 1, anon_sym_AMP, ACTIONS(432), 1, - anon_sym_PIPE, - ACTIONS(434), 1, anon_sym_CARET, + ACTIONS(434), 1, + anon_sym_PIPE, ACTIONS(440), 1, anon_sym_AMP_AMP, ACTIONS(442), 1, anon_sym_PIPE_PIPE, ACTIONS(444), 1, anon_sym_CARET_CARET, - ACTIONS(474), 1, + ACTIONS(480), 1, anon_sym_then, - STATE(111), 1, + STATE(127), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, @@ -13608,27 +13963,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14109] = 3, + [14618] = 12, + ACTIONS(224), 1, + anon_sym_COLON_COLON, + ACTIONS(228), 1, + anon_sym_LPAREN, + ACTIONS(422), 1, + anon_sym_STAR_STAR, + ACTIONS(424), 1, + anon_sym_STAR, + ACTIONS(426), 1, + anon_sym_SLASH, + ACTIONS(430), 1, + anon_sym_AMP, + STATE(127), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(252), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(250), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(428), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(226), 4, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(222), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -13636,8 +14000,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [14141] = 14, + anon_sym_then, + [14668] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -13646,232 +14010,232 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(476), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(480), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(271), 1, + STATE(265), 1, sym_formula_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(478), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(256), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14194] = 14, + [14721] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(476), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(480), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - ACTIONS(482), 1, + ACTIONS(488), 1, aux_sym_base_ten_token1, - STATE(252), 1, - sym__float, - STATE(253), 1, + STATE(250), 1, sym_number, - STATE(263), 1, + STATE(251), 1, + sym__float, + STATE(262), 1, sym_formula_expression, - STATE(317), 1, + STATE(310), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(490), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(256), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14247] = 14, + [14774] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(476), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(480), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - ACTIONS(482), 1, + ACTIONS(488), 1, aux_sym_base_ten_token1, - STATE(252), 1, - sym__float, - STATE(253), 1, + STATE(250), 1, sym_number, + STATE(251), 1, + sym__float, STATE(264), 1, sym_formula_expression, - STATE(317), 1, + STATE(310), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(490), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(256), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14300] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [14827] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(476), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(480), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(76), 1, - sym__float, - STATE(77), 1, + ACTIONS(488), 1, + aux_sym_base_ten_token1, + STATE(250), 1, sym_number, - STATE(268), 1, + STATE(251), 1, + sym__float, + STATE(254), 1, sym_formula_expression, - STATE(318), 1, + STATE(310), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(478), 2, + ACTIONS(490), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(256), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14353] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [14880] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(476), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(480), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(76), 1, - sym__float, - STATE(77), 1, + ACTIONS(488), 1, + aux_sym_base_ten_token1, + STATE(250), 1, sym_number, - STATE(267), 1, + STATE(251), 1, + sym__float, + STATE(263), 1, sym_formula_expression, - STATE(318), 1, + STATE(310), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(478), 2, + ACTIONS(490), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(256), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14406] = 14, - ACTIONS(11), 1, - aux_sym_base_ten_token1, + [14933] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(476), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(480), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(76), 1, - sym__float, - STATE(77), 1, + ACTIONS(488), 1, + aux_sym_base_ten_token1, + STATE(250), 1, sym_number, - STATE(258), 1, + STATE(251), 1, + sym__float, + STATE(257), 1, sym_formula_expression, - STATE(318), 1, + STATE(310), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(478), 2, + ACTIONS(490), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(256), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14459] = 14, + [14986] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -13880,37 +14244,37 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(476), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(480), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(270), 1, + STATE(271), 1, sym_formula_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(478), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(256), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14512] = 14, + [15039] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -13919,56 +14283,56 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(476), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(480), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(269), 1, + STATE(266), 1, sym_formula_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(478), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(256), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14565] = 14, + [15092] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(476), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(480), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - ACTIONS(482), 1, - aux_sym_base_ten_token1, - STATE(252), 1, + STATE(79), 1, sym__float, - STATE(253), 1, + STATE(80), 1, sym_number, - STATE(258), 1, + STATE(267), 1, sym_formula_expression, - STATE(317), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -13976,77 +14340,77 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(256), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14618] = 14, + [15145] = 14, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(476), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(480), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - ACTIONS(482), 1, + ACTIONS(488), 1, aux_sym_base_ten_token1, - STATE(252), 1, - sym__float, - STATE(253), 1, + STATE(250), 1, sym_number, - STATE(265), 1, + STATE(251), 1, + sym__float, + STATE(261), 1, sym_formula_expression, - STATE(317), 1, + STATE(310), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(490), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(256), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14671] = 14, + [15198] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(476), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(480), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - ACTIONS(482), 1, - aux_sym_base_ten_token1, - STATE(252), 1, + STATE(79), 1, sym__float, - STATE(253), 1, + STATE(80), 1, sym_number, - STATE(261), 1, + STATE(268), 1, sym_formula_expression, - STATE(317), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14054,38 +14418,38 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(256), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14724] = 14, + [15251] = 14, + ACTIONS(11), 1, + aux_sym_base_ten_token1, ACTIONS(13), 1, aux_sym_octal_token1, ACTIONS(15), 1, aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(476), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(480), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - ACTIONS(482), 1, - aux_sym_base_ten_token1, - STATE(252), 1, + STATE(79), 1, sym__float, - STATE(253), 1, + STATE(80), 1, sym_number, - STATE(266), 1, + STATE(270), 1, sym_formula_expression, - STATE(317), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -14093,19 +14457,19 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(256), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14777] = 14, + [15304] = 14, ACTIONS(11), 1, aux_sym_base_ten_token1, ACTIONS(13), 1, @@ -14114,125 +14478,41 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_hex_token1, ACTIONS(17), 1, aux_sym_binary_token1, - ACTIONS(476), 1, + ACTIONS(482), 1, sym_identifier, - ACTIONS(480), 1, + ACTIONS(486), 1, anon_sym_LPAREN, - STATE(76), 1, + STATE(79), 1, sym__float, - STATE(77), 1, + STATE(80), 1, sym_number, - STATE(274), 1, + STATE(254), 1, sym_formula_expression, - STATE(318), 1, + STATE(301), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(478), 2, + ACTIONS(484), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(313), 4, + STATE(303), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(257), 6, + STATE(256), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14830] = 5, - ACTIONS(486), 1, - anon_sym_DOT, - STATE(243), 1, - aux_sym_identity_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(186), 7, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - ACTIONS(184), 11, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [14863] = 5, - ACTIONS(486), 1, - anon_sym_DOT, - STATE(244), 1, - aux_sym_identity_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(164), 7, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - ACTIONS(160), 11, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [14896] = 5, - ACTIONS(488), 1, - anon_sym_DOT, - STATE(244), 1, - aux_sym_identity_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(175), 7, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - ACTIONS(170), 11, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [14929] = 3, + [15357] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(491), 7, + ACTIONS(492), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -14253,128 +14533,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LT_LT_LT, - [14957] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(175), 7, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - ACTIONS(170), 12, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_DOT, - anon_sym_LT_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [14985] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(493), 7, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - ACTIONS(196), 11, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [15012] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(200), 7, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - ACTIONS(198), 11, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [15039] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(204), 7, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - ACTIONS(202), 11, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [15066] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(228), 7, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - ACTIONS(226), 11, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_LT_LT_LT, - [15093] = 4, + [15385] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -14397,20 +14556,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15120] = 5, - STATE(259), 1, - sym__unit, + [15412] = 4, + ACTIONS(494), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(495), 2, - sym_identifier, - sym_unit_quote, - ACTIONS(142), 3, + ACTIONS(146), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(136), 8, + ACTIONS(144), 10, + sym_identifier, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14419,19 +14577,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15147] = 4, - ACTIONS(497), 1, - anon_sym_DOT, + [15437] = 5, + STATE(258), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(146), 3, + ACTIONS(496), 2, + sym_identifier, + sym_unit_quote, + ACTIONS(142), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(144), 10, - sym_identifier, - sym_unit_quote, + ACTIONS(136), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14440,17 +14599,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15172] = 3, + [15464] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(132), 3, + ACTIONS(500), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(130), 10, - sym_identifier, - sym_unit_quote, + ACTIONS(498), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14459,15 +14616,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15194] = 3, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [15486] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(501), 3, + ACTIONS(132), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(499), 10, + ACTIONS(130), 10, + sym_identifier, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14476,19 +14637,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [15216] = 3, + [15508] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(158), 3, + ACTIONS(504), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(156), 10, - sym_identifier, - sym_unit_quote, + ACTIONS(502), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14497,15 +14654,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15238] = 3, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [15530] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(505), 3, + ACTIONS(186), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(503), 10, + ACTIONS(184), 10, + sym_identifier, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14514,17 +14675,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [15260] = 3, + [15552] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(509), 3, + ACTIONS(508), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(507), 10, + ACTIONS(506), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14535,32 +14694,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [15282] = 3, + [15574] = 4, + ACTIONS(510), 1, + anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(190), 3, + ACTIONS(504), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(188), 8, + ACTIONS(502), 7, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15302] = 3, + [15596] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(208), 3, + ACTIONS(220), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(206), 8, + ACTIONS(218), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14568,37 +14728,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15322] = 7, - ACTIONS(513), 1, - anon_sym_STAR_STAR, - ACTIONS(515), 1, - anon_sym_STAR, - ACTIONS(517), 1, - anon_sym_SLASH, + anon_sym_BANG_EQ, + [15616] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(511), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(519), 2, + ACTIONS(216), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(521), 4, + ACTIONS(214), 8, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15350] = 3, + [15636] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(224), 3, + ACTIONS(204), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 8, + ACTIONS(202), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14607,279 +14763,250 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15370] = 7, - ACTIONS(513), 1, + [15656] = 7, + ACTIONS(510), 1, anon_sym_STAR_STAR, - ACTIONS(515), 1, + ACTIONS(514), 1, anon_sym_STAR, - ACTIONS(517), 1, + ACTIONS(516), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(511), 2, + ACTIONS(512), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(523), 2, + ACTIONS(518), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(525), 4, + ACTIONS(520), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15398] = 7, - ACTIONS(513), 1, + [15684] = 6, + ACTIONS(510), 1, anon_sym_STAR_STAR, - ACTIONS(515), 1, + ACTIONS(514), 1, anon_sym_STAR, - ACTIONS(517), 1, + ACTIONS(516), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(511), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(527), 2, + ACTIONS(504), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(529), 4, + ACTIONS(502), 6, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15426] = 6, - ACTIONS(513), 1, + [15710] = 7, + ACTIONS(510), 1, anon_sym_STAR_STAR, - ACTIONS(515), 1, + ACTIONS(514), 1, anon_sym_STAR, - ACTIONS(517), 1, + ACTIONS(516), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(509), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(507), 6, + ACTIONS(512), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(522), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(524), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15452] = 4, - ACTIONS(513), 1, + [15738] = 7, + ACTIONS(510), 1, anon_sym_STAR_STAR, + ACTIONS(514), 1, + anon_sym_STAR, + ACTIONS(516), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(509), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(507), 7, + ACTIONS(512), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH, + ACTIONS(526), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(528), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15474] = 5, - ACTIONS(531), 1, - anon_sym_STAR_STAR, - ACTIONS(533), 1, + [15766] = 4, + ACTIONS(504), 1, anon_sym_STAR, - ACTIONS(535), 1, - anon_sym_SLASH, + ACTIONS(530), 1, + anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(507), 4, + ACTIONS(502), 5, anon_sym_DASH, anon_sym_PLUS, + anon_sym_SLASH, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [15494] = 6, - ACTIONS(531), 1, + [15784] = 6, + ACTIONS(530), 1, anon_sym_STAR_STAR, - ACTIONS(533), 1, + ACTIONS(534), 1, anon_sym_STAR, - ACTIONS(535), 1, + ACTIONS(536), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(529), 2, + ACTIONS(520), 2, anon_sym_RPAREN, anon_sym_GT_GT_GT, - ACTIONS(537), 2, - anon_sym_DASH, - anon_sym_PLUS, - [15516] = 4, - ACTIONS(509), 1, - anon_sym_STAR, - ACTIONS(531), 1, - anon_sym_STAR_STAR, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(507), 5, + ACTIONS(532), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [15534] = 6, - ACTIONS(531), 1, + [15806] = 5, + ACTIONS(530), 1, anon_sym_STAR_STAR, - ACTIONS(533), 1, + ACTIONS(534), 1, anon_sym_STAR, - ACTIONS(535), 1, + ACTIONS(536), 1, anon_sym_SLASH, - ACTIONS(539), 1, - anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(537), 2, + ACTIONS(502), 4, anon_sym_DASH, anon_sym_PLUS, - [15555] = 6, - ACTIONS(531), 1, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [15826] = 6, + ACTIONS(530), 1, anon_sym_STAR_STAR, - ACTIONS(533), 1, + ACTIONS(534), 1, anon_sym_STAR, - ACTIONS(535), 1, + ACTIONS(536), 1, anon_sym_SLASH, - ACTIONS(541), 1, + ACTIONS(538), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(537), 2, + ACTIONS(532), 2, anon_sym_DASH, anon_sym_PLUS, - [15576] = 7, - ACTIONS(39), 1, - sym_varadic_dots, - ACTIONS(543), 1, - sym_identifier, - ACTIONS(545), 1, - anon_sym_RPAREN, - STATE(277), 1, - aux_sym_struct_definition_repeat1, - STATE(316), 1, - sym_struct_member, - STATE(322), 1, - sym__struct_final_element, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [15599] = 7, + [15847] = 7, ACTIONS(39), 1, sym_varadic_dots, - ACTIONS(543), 1, + ACTIONS(540), 1, sym_identifier, - ACTIONS(547), 1, + ACTIONS(542), 1, anon_sym_RPAREN, - STATE(277), 1, + STATE(273), 1, aux_sym_struct_definition_repeat1, - STATE(316), 1, + STATE(297), 1, sym_struct_member, - STATE(332), 1, + STATE(326), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15622] = 6, - ACTIONS(531), 1, + [15870] = 6, + ACTIONS(530), 1, anon_sym_STAR_STAR, - ACTIONS(533), 1, + ACTIONS(534), 1, anon_sym_STAR, - ACTIONS(535), 1, + ACTIONS(536), 1, anon_sym_SLASH, - ACTIONS(549), 1, + ACTIONS(544), 1, anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(537), 2, + ACTIONS(532), 2, anon_sym_DASH, anon_sym_PLUS, - [15643] = 7, - ACTIONS(39), 1, - sym_varadic_dots, - ACTIONS(543), 1, - sym_identifier, - ACTIONS(551), 1, - anon_sym_RPAREN, - STATE(277), 1, - aux_sym_struct_definition_repeat1, - STATE(316), 1, - sym_struct_member, - STATE(339), 1, - sym__struct_final_element, + [15891] = 6, + ACTIONS(530), 1, + anon_sym_STAR_STAR, + ACTIONS(534), 1, + anon_sym_STAR, + ACTIONS(536), 1, + anon_sym_SLASH, + ACTIONS(546), 1, + anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15666] = 7, + ACTIONS(532), 2, + anon_sym_DASH, + anon_sym_PLUS, + [15912] = 7, ACTIONS(39), 1, sym_varadic_dots, - ACTIONS(543), 1, + ACTIONS(540), 1, sym_identifier, - ACTIONS(553), 1, + ACTIONS(548), 1, anon_sym_RPAREN, STATE(273), 1, aux_sym_struct_definition_repeat1, - STATE(316), 1, + STATE(297), 1, sym_struct_member, - STATE(331), 1, + STATE(317), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15689] = 5, - ACTIONS(555), 1, + [15935] = 5, + ACTIONS(550), 1, sym_identifier, - STATE(277), 1, + STATE(273), 1, aux_sym_struct_definition_repeat1, - STATE(334), 1, + STATE(314), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(558), 2, + ACTIONS(553), 2, anon_sym_RPAREN, sym_varadic_dots, - [15707] = 4, - ACTIONS(560), 1, + [15953] = 4, + ACTIONS(555), 1, sym_identifier, - ACTIONS(563), 1, + ACTIONS(557), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(278), 2, + STATE(275), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15722] = 4, - ACTIONS(565), 1, + [15968] = 4, + ACTIONS(555), 1, sym_identifier, - ACTIONS(567), 1, + ACTIONS(559), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(283), 2, + STATE(280), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15737] = 4, - ACTIONS(565), 1, + [15983] = 4, + ACTIONS(555), 1, sym_identifier, - ACTIONS(569), 1, + ACTIONS(561), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, @@ -14887,43 +15014,21 @@ static const uint16_t ts_small_parse_table[] = { STATE(278), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15752] = 4, - ACTIONS(571), 1, - sym_identifier, - ACTIONS(573), 1, - anon_sym_LPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - STATE(49), 2, - sym_identity_path, - sym_struct_definition, - [15767] = 4, - ACTIONS(571), 1, - sym_identifier, - ACTIONS(573), 1, - anon_sym_LPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - STATE(65), 2, - sym_identity_path, - sym_struct_definition, - [15782] = 4, - ACTIONS(565), 1, + [15998] = 4, + ACTIONS(555), 1, sym_identifier, - ACTIONS(575), 1, + ACTIONS(563), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(278), 2, + STATE(280), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15797] = 4, - ACTIONS(565), 1, + [16013] = 4, + ACTIONS(555), 1, sym_identifier, - ACTIONS(577), 1, + ACTIONS(565), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, @@ -14931,435 +15036,406 @@ static const uint16_t ts_small_parse_table[] = { STATE(280), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15812] = 4, - ACTIONS(571), 1, - sym_identifier, - ACTIONS(573), 1, - anon_sym_LPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - STATE(30), 2, - sym_identity_path, - sym_struct_definition, - [15827] = 4, - ACTIONS(565), 1, + [16028] = 4, + ACTIONS(555), 1, sym_identifier, - ACTIONS(579), 1, + ACTIONS(567), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(287), 2, + STATE(277), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15842] = 4, - ACTIONS(565), 1, + [16043] = 4, + ACTIONS(569), 1, sym_identifier, - ACTIONS(581), 1, + ACTIONS(572), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(278), 2, + STATE(280), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15857] = 4, - ACTIONS(583), 1, + [16058] = 3, + ACTIONS(576), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(574), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + [16070] = 4, + ACTIONS(578), 1, anon_sym_COMMA, - ACTIONS(585), 1, + ACTIONS(580), 1, anon_sym_RPAREN, - STATE(295), 1, + STATE(293), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15871] = 4, - ACTIONS(587), 1, + [16084] = 4, + ACTIONS(582), 1, anon_sym_COMMA, - ACTIONS(589), 1, + ACTIONS(584), 1, anon_sym_RPAREN, - STATE(292), 1, + STATE(287), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15885] = 3, - ACTIONS(593), 1, - anon_sym_EQ, + [16098] = 4, + ACTIONS(586), 1, + sym_identifier, + ACTIONS(588), 1, + anon_sym_RPAREN, + STATE(309), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(591), 2, - anon_sym_COMMA, + [16112] = 4, + ACTIONS(586), 1, + sym_identifier, + ACTIONS(590), 1, anon_sym_RPAREN, - [15897] = 4, - ACTIONS(595), 1, + STATE(283), 1, + sym_dictionary_member_assignment, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [16126] = 4, + ACTIONS(586), 1, sym_identifier, - ACTIONS(597), 1, + ACTIONS(592), 1, anon_sym_RPAREN, - STATE(314), 1, + STATE(309), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15911] = 4, - ACTIONS(597), 1, + [16140] = 4, + ACTIONS(592), 1, anon_sym_RPAREN, - ACTIONS(599), 1, + ACTIONS(594), 1, anon_sym_COMMA, - STATE(298), 1, + STATE(293), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15925] = 4, - ACTIONS(595), 1, - sym_identifier, - ACTIONS(601), 1, - anon_sym_RPAREN, - STATE(288), 1, - sym_dictionary_member_assignment, + [16154] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15939] = 4, - ACTIONS(595), 1, + ACTIONS(553), 3, sym_identifier, - ACTIONS(603), 1, anon_sym_RPAREN, - STATE(314), 1, + sym_varadic_dots, + [16164] = 4, + ACTIONS(586), 1, + sym_identifier, + ACTIONS(596), 1, + anon_sym_RPAREN, + STATE(309), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15953] = 4, - ACTIONS(603), 1, + [16178] = 4, + ACTIONS(580), 1, anon_sym_RPAREN, - ACTIONS(605), 1, - anon_sym_COMMA, - STATE(298), 1, - aux_sym_dictionary_construction_repeat1, + ACTIONS(586), 1, + sym_identifier, + STATE(309), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15967] = 4, - ACTIONS(595), 1, - sym_identifier, - ACTIONS(607), 1, + [16192] = 4, + ACTIONS(598), 1, + anon_sym_COMMA, + ACTIONS(600), 1, anon_sym_RPAREN, - STATE(314), 1, - sym_dictionary_member_assignment, + STATE(282), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15981] = 4, - ACTIONS(595), 1, + [16206] = 4, + ACTIONS(586), 1, sym_identifier, - ACTIONS(609), 1, + ACTIONS(602), 1, anon_sym_RPAREN, - STATE(314), 1, + STATE(291), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15995] = 4, - ACTIONS(611), 1, + [16220] = 4, + ACTIONS(604), 1, anon_sym_COMMA, - ACTIONS(614), 1, + ACTIONS(607), 1, anon_sym_RPAREN, - STATE(298), 1, + STATE(293), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16009] = 2, + [16234] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(558), 3, - sym_identifier, - anon_sym_RPAREN, - sym_varadic_dots, - [16019] = 4, - ACTIONS(595), 1, - sym_identifier, - ACTIONS(616), 1, - anon_sym_RPAREN, - STATE(289), 1, - sym_dictionary_member_assignment, + ACTIONS(609), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [16243] = 3, + ACTIONS(228), 1, + anon_sym_LPAREN, + STATE(129), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16033] = 2, + [16254] = 3, + ACTIONS(396), 1, + anon_sym_LPAREN, + STATE(195), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(618), 2, - sym_identifier, - anon_sym_in, - [16042] = 3, - ACTIONS(620), 1, - aux_sym_base_ten_token1, - STATE(79), 1, - sym_number, + [16265] = 3, + ACTIONS(611), 1, + anon_sym_COMMA, + ACTIONS(613), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16053] = 3, - ACTIONS(622), 1, + [16276] = 3, + ACTIONS(615), 1, anon_sym_COLON, - STATE(290), 1, + STATE(281), 1, sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16064] = 2, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(624), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [16073] = 3, - ACTIONS(398), 1, - anon_sym_LPAREN, - STATE(195), 1, - sym_dictionary_construction, + [16287] = 3, + ACTIONS(586), 1, + sym_identifier, + STATE(309), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16084] = 2, + [16298] = 3, + ACTIONS(617), 1, + aux_sym_base_ten_token1, + STATE(88), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(626), 2, + [16309] = 3, + ACTIONS(619), 1, aux_sym_signed_integer_token1, + ACTIONS(621), 1, aux_sym_unsigned_integer_token1, - [16093] = 3, - ACTIONS(216), 1, - anon_sym_LPAREN, - STATE(117), 1, - sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16104] = 3, - ACTIONS(628), 1, + [16320] = 3, + ACTIONS(623), 1, aux_sym_signed_integer_token1, - ACTIONS(630), 1, + ACTIONS(625), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16115] = 2, + [16331] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(632), 2, + ACTIONS(627), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [16124] = 3, - ACTIONS(634), 1, - anon_sym_COMMA, - ACTIONS(636), 1, - anon_sym_RPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [16135] = 3, - ACTIONS(638), 1, - aux_sym_base_ten_token1, - STATE(256), 1, - sym_number, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [16146] = 3, - ACTIONS(640), 1, + [16340] = 3, + ACTIONS(629), 1, aux_sym_base_ten_token1, - STATE(133), 1, + STATE(255), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16157] = 2, + [16351] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(642), 2, + ACTIONS(631), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [16166] = 2, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(614), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - [16175] = 3, - ACTIONS(644), 1, + [16360] = 3, + ACTIONS(633), 1, aux_sym_base_ten_token1, - STATE(152), 1, + STATE(138), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16186] = 3, - ACTIONS(636), 1, + [16371] = 3, + ACTIONS(613), 1, anon_sym_RPAREN, - ACTIONS(646), 1, + ACTIONS(635), 1, anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16197] = 3, - ACTIONS(648), 1, - aux_sym_signed_integer_token1, - ACTIONS(650), 1, - aux_sym_unsigned_integer_token1, + [16382] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16208] = 3, - ACTIONS(652), 1, + ACTIONS(637), 2, aux_sym_signed_integer_token1, - ACTIONS(654), 1, aux_sym_unsigned_integer_token1, + [16391] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16219] = 3, - ACTIONS(595), 1, - sym_identifier, - STATE(314), 1, - sym_dictionary_member_assignment, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [16230] = 2, - ACTIONS(656), 1, - anon_sym_RPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [16238] = 2, - ACTIONS(658), 1, + ACTIONS(607), 2, + anon_sym_COMMA, anon_sym_RPAREN, + [16400] = 3, + ACTIONS(639), 1, + aux_sym_signed_integer_token1, + ACTIONS(641), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16246] = 2, - ACTIONS(660), 1, - anon_sym_RPAREN, + [16411] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16254] = 2, - ACTIONS(662), 1, - anon_sym_EQ, + ACTIONS(643), 2, + sym_identifier, + anon_sym_in, + [16420] = 3, + ACTIONS(645), 1, + aux_sym_base_ten_token1, + STATE(156), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16262] = 2, - ACTIONS(664), 1, + [16431] = 2, + ACTIONS(647), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16270] = 2, - ACTIONS(666), 1, - aux_sym_base_ten_token1, + [16439] = 2, + ACTIONS(611), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16278] = 2, - ACTIONS(668), 1, - sym_identifier, + [16447] = 2, + ACTIONS(649), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16286] = 2, - ACTIONS(670), 1, - aux_sym_hex_token2, + [16455] = 2, + ACTIONS(651), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16294] = 2, - ACTIONS(672), 1, + [16463] = 2, + ACTIONS(653), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16302] = 2, - ACTIONS(674), 1, - anon_sym_EQ, + [16471] = 2, + ACTIONS(655), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16310] = 2, - ACTIONS(676), 1, + [16479] = 2, + ACTIONS(657), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16318] = 2, - ACTIONS(678), 1, + [16487] = 2, + ACTIONS(659), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16326] = 2, - ACTIONS(680), 1, - anon_sym_RPAREN, + [16495] = 2, + ACTIONS(661), 1, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16334] = 2, - ACTIONS(682), 1, - sym_identifier, + [16503] = 2, + ACTIONS(663), 1, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16342] = 2, - ACTIONS(646), 1, - anon_sym_COMMA, + [16511] = 2, + ACTIONS(665), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16350] = 2, - ACTIONS(684), 1, + [16519] = 2, + ACTIONS(667), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16358] = 2, - ACTIONS(686), 1, + [16527] = 2, + ACTIONS(669), 1, aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16366] = 2, - ACTIONS(688), 1, + [16535] = 2, + ACTIONS(671), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [16543] = 2, + ACTIONS(673), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16374] = 2, - ACTIONS(690), 1, + [16551] = 2, + ACTIONS(675), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16382] = 2, - ACTIONS(692), 1, - anon_sym_RPAREN, + [16559] = 2, + ACTIONS(677), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16390] = 2, - ACTIONS(694), 1, - ts_builtin_sym_end, + [16567] = 2, + ACTIONS(679), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -15438,611 +15514,594 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(73)] = 6654, [SMALL_STATE(74)] = 6750, [SMALL_STATE(75)] = 6846, - [SMALL_STATE(76)] = 6891, - [SMALL_STATE(77)] = 6938, - [SMALL_STATE(78)] = 6981, - [SMALL_STATE(79)] = 7025, - [SMALL_STATE(80)] = 7065, - [SMALL_STATE(81)] = 7109, - [SMALL_STATE(82)] = 7153, - [SMALL_STATE(83)] = 7197, - [SMALL_STATE(84)] = 7241, - [SMALL_STATE(85)] = 7285, - [SMALL_STATE(86)] = 7325, - [SMALL_STATE(87)] = 7364, - [SMALL_STATE(88)] = 7405, - [SMALL_STATE(89)] = 7444, - [SMALL_STATE(90)] = 7483, - [SMALL_STATE(91)] = 7522, - [SMALL_STATE(92)] = 7561, - [SMALL_STATE(93)] = 7606, - [SMALL_STATE(94)] = 7645, - [SMALL_STATE(95)] = 7684, - [SMALL_STATE(96)] = 7723, - [SMALL_STATE(97)] = 7787, - [SMALL_STATE(98)] = 7825, - [SMALL_STATE(99)] = 7895, - [SMALL_STATE(100)] = 7945, - [SMALL_STATE(101)] = 7983, - [SMALL_STATE(102)] = 8029, - [SMALL_STATE(103)] = 8081, - [SMALL_STATE(104)] = 8135, - [SMALL_STATE(105)] = 8193, - [SMALL_STATE(106)] = 8249, - [SMALL_STATE(107)] = 8309, - [SMALL_STATE(108)] = 8379, - [SMALL_STATE(109)] = 8445, - [SMALL_STATE(110)] = 8513, - [SMALL_STATE(111)] = 8551, - [SMALL_STATE(112)] = 8589, - [SMALL_STATE(113)] = 8659, - [SMALL_STATE(114)] = 8697, - [SMALL_STATE(115)] = 8735, - [SMALL_STATE(116)] = 8773, - [SMALL_STATE(117)] = 8811, - [SMALL_STATE(118)] = 8849, - [SMALL_STATE(119)] = 8919, - [SMALL_STATE(120)] = 8959, - [SMALL_STATE(121)] = 8997, - [SMALL_STATE(122)] = 9035, - [SMALL_STATE(123)] = 9073, - [SMALL_STATE(124)] = 9143, - [SMALL_STATE(125)] = 9181, - [SMALL_STATE(126)] = 9219, - [SMALL_STATE(127)] = 9257, - [SMALL_STATE(128)] = 9295, - [SMALL_STATE(129)] = 9334, - [SMALL_STATE(130)] = 9380, - [SMALL_STATE(131)] = 9418, - [SMALL_STATE(132)] = 9457, - [SMALL_STATE(133)] = 9494, - [SMALL_STATE(134)] = 9528, - [SMALL_STATE(135)] = 9566, - [SMALL_STATE(136)] = 9604, - [SMALL_STATE(137)] = 9638, - [SMALL_STATE(138)] = 9676, - [SMALL_STATE(139)] = 9714, - [SMALL_STATE(140)] = 9754, - [SMALL_STATE(141)] = 9790, - [SMALL_STATE(142)] = 9828, - [SMALL_STATE(143)] = 9894, - [SMALL_STATE(144)] = 9932, - [SMALL_STATE(145)] = 9967, - [SMALL_STATE(146)] = 10030, - [SMALL_STATE(147)] = 10095, - [SMALL_STATE(148)] = 10158, - [SMALL_STATE(149)] = 10193, - [SMALL_STATE(150)] = 10258, - [SMALL_STATE(151)] = 10291, - [SMALL_STATE(152)] = 10324, - [SMALL_STATE(153)] = 10357, - [SMALL_STATE(154)] = 10396, - [SMALL_STATE(155)] = 10461, - [SMALL_STATE(156)] = 10494, - [SMALL_STATE(157)] = 10557, - [SMALL_STATE(158)] = 10590, - [SMALL_STATE(159)] = 10623, - [SMALL_STATE(160)] = 10668, - [SMALL_STATE(161)] = 10733, - [SMALL_STATE(162)] = 10780, - [SMALL_STATE(163)] = 10829, - [SMALL_STATE(164)] = 10882, - [SMALL_STATE(165)] = 10933, - [SMALL_STATE(166)] = 10988, - [SMALL_STATE(167)] = 11045, - [SMALL_STATE(168)] = 11104, - [SMALL_STATE(169)] = 11165, - [SMALL_STATE(170)] = 11228, - [SMALL_STATE(171)] = 11291, - [SMALL_STATE(172)] = 11324, - [SMALL_STATE(173)] = 11387, - [SMALL_STATE(174)] = 11450, - [SMALL_STATE(175)] = 11515, - [SMALL_STATE(176)] = 11580, - [SMALL_STATE(177)] = 11645, - [SMALL_STATE(178)] = 11710, - [SMALL_STATE(179)] = 11751, - [SMALL_STATE(180)] = 11783, - [SMALL_STATE(181)] = 11845, - [SMALL_STATE(182)] = 11889, - [SMALL_STATE(183)] = 11921, - [SMALL_STATE(184)] = 11961, - [SMALL_STATE(185)] = 12007, - [SMALL_STATE(186)] = 12055, - [SMALL_STATE(187)] = 12107, - [SMALL_STATE(188)] = 12157, - [SMALL_STATE(189)] = 12211, - [SMALL_STATE(190)] = 12267, - [SMALL_STATE(191)] = 12325, - [SMALL_STATE(192)] = 12385, - [SMALL_STATE(193)] = 12417, - [SMALL_STATE(194)] = 12479, - [SMALL_STATE(195)] = 12511, - [SMALL_STATE(196)] = 12543, - [SMALL_STATE(197)] = 12605, - [SMALL_STATE(198)] = 12637, - [SMALL_STATE(199)] = 12669, - [SMALL_STATE(200)] = 12701, - [SMALL_STATE(201)] = 12763, - [SMALL_STATE(202)] = 12795, - [SMALL_STATE(203)] = 12827, - [SMALL_STATE(204)] = 12889, - [SMALL_STATE(205)] = 12921, - [SMALL_STATE(206)] = 12953, - [SMALL_STATE(207)] = 12985, - [SMALL_STATE(208)] = 13047, - [SMALL_STATE(209)] = 13109, - [SMALL_STATE(210)] = 13171, - [SMALL_STATE(211)] = 13233, - [SMALL_STATE(212)] = 13265, - [SMALL_STATE(213)] = 13327, - [SMALL_STATE(214)] = 13359, - [SMALL_STATE(215)] = 13421, - [SMALL_STATE(216)] = 13453, - [SMALL_STATE(217)] = 13485, - [SMALL_STATE(218)] = 13547, - [SMALL_STATE(219)] = 13609, - [SMALL_STATE(220)] = 13671, - [SMALL_STATE(221)] = 13703, - [SMALL_STATE(222)] = 13765, - [SMALL_STATE(223)] = 13827, - [SMALL_STATE(224)] = 13889, - [SMALL_STATE(225)] = 13923, - [SMALL_STATE(226)] = 13985, - [SMALL_STATE(227)] = 14047, - [SMALL_STATE(228)] = 14109, - [SMALL_STATE(229)] = 14141, - [SMALL_STATE(230)] = 14194, - [SMALL_STATE(231)] = 14247, - [SMALL_STATE(232)] = 14300, - [SMALL_STATE(233)] = 14353, - [SMALL_STATE(234)] = 14406, - [SMALL_STATE(235)] = 14459, - [SMALL_STATE(236)] = 14512, - [SMALL_STATE(237)] = 14565, - [SMALL_STATE(238)] = 14618, - [SMALL_STATE(239)] = 14671, - [SMALL_STATE(240)] = 14724, - [SMALL_STATE(241)] = 14777, - [SMALL_STATE(242)] = 14830, - [SMALL_STATE(243)] = 14863, - [SMALL_STATE(244)] = 14896, - [SMALL_STATE(245)] = 14929, - [SMALL_STATE(246)] = 14957, - [SMALL_STATE(247)] = 14985, - [SMALL_STATE(248)] = 15012, - [SMALL_STATE(249)] = 15039, - [SMALL_STATE(250)] = 15066, - [SMALL_STATE(251)] = 15093, - [SMALL_STATE(252)] = 15120, - [SMALL_STATE(253)] = 15147, - [SMALL_STATE(254)] = 15172, - [SMALL_STATE(255)] = 15194, - [SMALL_STATE(256)] = 15216, - [SMALL_STATE(257)] = 15238, - [SMALL_STATE(258)] = 15260, - [SMALL_STATE(259)] = 15282, - [SMALL_STATE(260)] = 15302, - [SMALL_STATE(261)] = 15322, - [SMALL_STATE(262)] = 15350, - [SMALL_STATE(263)] = 15370, - [SMALL_STATE(264)] = 15398, - [SMALL_STATE(265)] = 15426, - [SMALL_STATE(266)] = 15452, - [SMALL_STATE(267)] = 15474, - [SMALL_STATE(268)] = 15494, - [SMALL_STATE(269)] = 15516, - [SMALL_STATE(270)] = 15534, - [SMALL_STATE(271)] = 15555, - [SMALL_STATE(272)] = 15576, - [SMALL_STATE(273)] = 15599, - [SMALL_STATE(274)] = 15622, - [SMALL_STATE(275)] = 15643, - [SMALL_STATE(276)] = 15666, - [SMALL_STATE(277)] = 15689, - [SMALL_STATE(278)] = 15707, - [SMALL_STATE(279)] = 15722, - [SMALL_STATE(280)] = 15737, - [SMALL_STATE(281)] = 15752, - [SMALL_STATE(282)] = 15767, - [SMALL_STATE(283)] = 15782, - [SMALL_STATE(284)] = 15797, - [SMALL_STATE(285)] = 15812, - [SMALL_STATE(286)] = 15827, - [SMALL_STATE(287)] = 15842, - [SMALL_STATE(288)] = 15857, - [SMALL_STATE(289)] = 15871, - [SMALL_STATE(290)] = 15885, - [SMALL_STATE(291)] = 15897, - [SMALL_STATE(292)] = 15911, - [SMALL_STATE(293)] = 15925, - [SMALL_STATE(294)] = 15939, - [SMALL_STATE(295)] = 15953, - [SMALL_STATE(296)] = 15967, - [SMALL_STATE(297)] = 15981, - [SMALL_STATE(298)] = 15995, - [SMALL_STATE(299)] = 16009, - [SMALL_STATE(300)] = 16019, - [SMALL_STATE(301)] = 16033, - [SMALL_STATE(302)] = 16042, - [SMALL_STATE(303)] = 16053, - [SMALL_STATE(304)] = 16064, - [SMALL_STATE(305)] = 16073, - [SMALL_STATE(306)] = 16084, - [SMALL_STATE(307)] = 16093, - [SMALL_STATE(308)] = 16104, - [SMALL_STATE(309)] = 16115, - [SMALL_STATE(310)] = 16124, - [SMALL_STATE(311)] = 16135, - [SMALL_STATE(312)] = 16146, - [SMALL_STATE(313)] = 16157, - [SMALL_STATE(314)] = 16166, - [SMALL_STATE(315)] = 16175, - [SMALL_STATE(316)] = 16186, - [SMALL_STATE(317)] = 16197, - [SMALL_STATE(318)] = 16208, - [SMALL_STATE(319)] = 16219, - [SMALL_STATE(320)] = 16230, - [SMALL_STATE(321)] = 16238, - [SMALL_STATE(322)] = 16246, - [SMALL_STATE(323)] = 16254, - [SMALL_STATE(324)] = 16262, - [SMALL_STATE(325)] = 16270, - [SMALL_STATE(326)] = 16278, - [SMALL_STATE(327)] = 16286, - [SMALL_STATE(328)] = 16294, - [SMALL_STATE(329)] = 16302, - [SMALL_STATE(330)] = 16310, - [SMALL_STATE(331)] = 16318, - [SMALL_STATE(332)] = 16326, - [SMALL_STATE(333)] = 16334, - [SMALL_STATE(334)] = 16342, - [SMALL_STATE(335)] = 16350, - [SMALL_STATE(336)] = 16358, - [SMALL_STATE(337)] = 16366, - [SMALL_STATE(338)] = 16374, - [SMALL_STATE(339)] = 16382, - [SMALL_STATE(340)] = 16390, + [SMALL_STATE(76)] = 6942, + [SMALL_STATE(77)] = 7038, + [SMALL_STATE(78)] = 7134, + [SMALL_STATE(79)] = 7180, + [SMALL_STATE(80)] = 7228, + [SMALL_STATE(81)] = 7272, + [SMALL_STATE(82)] = 7317, + [SMALL_STATE(83)] = 7362, + [SMALL_STATE(84)] = 7407, + [SMALL_STATE(85)] = 7452, + [SMALL_STATE(86)] = 7497, + [SMALL_STATE(87)] = 7538, + [SMALL_STATE(88)] = 7583, + [SMALL_STATE(89)] = 7624, + [SMALL_STATE(90)] = 7664, + [SMALL_STATE(91)] = 7704, + [SMALL_STATE(92)] = 7746, + [SMALL_STATE(93)] = 7786, + [SMALL_STATE(94)] = 7826, + [SMALL_STATE(95)] = 7866, + [SMALL_STATE(96)] = 7906, + [SMALL_STATE(97)] = 7946, + [SMALL_STATE(98)] = 7986, + [SMALL_STATE(99)] = 8032, + [SMALL_STATE(100)] = 8103, + [SMALL_STATE(101)] = 8142, + [SMALL_STATE(102)] = 8181, + [SMALL_STATE(103)] = 8220, + [SMALL_STATE(104)] = 8259, + [SMALL_STATE(105)] = 8298, + [SMALL_STATE(106)] = 8337, + [SMALL_STATE(107)] = 8408, + [SMALL_STATE(108)] = 8479, + [SMALL_STATE(109)] = 8518, + [SMALL_STATE(110)] = 8557, + [SMALL_STATE(111)] = 8596, + [SMALL_STATE(112)] = 8635, + [SMALL_STATE(113)] = 8674, + [SMALL_STATE(114)] = 8725, + [SMALL_STATE(115)] = 8772, + [SMALL_STATE(116)] = 8825, + [SMALL_STATE(117)] = 8880, + [SMALL_STATE(118)] = 8939, + [SMALL_STATE(119)] = 8996, + [SMALL_STATE(120)] = 9057, + [SMALL_STATE(121)] = 9122, + [SMALL_STATE(122)] = 9189, + [SMALL_STATE(123)] = 9258, + [SMALL_STATE(124)] = 9297, + [SMALL_STATE(125)] = 9368, + [SMALL_STATE(126)] = 9439, + [SMALL_STATE(127)] = 9478, + [SMALL_STATE(128)] = 9517, + [SMALL_STATE(129)] = 9556, + [SMALL_STATE(130)] = 9595, + [SMALL_STATE(131)] = 9636, + [SMALL_STATE(132)] = 9675, + [SMALL_STATE(133)] = 9713, + [SMALL_STATE(134)] = 9759, + [SMALL_STATE(135)] = 9796, + [SMALL_STATE(136)] = 9835, + [SMALL_STATE(137)] = 9873, + [SMALL_STATE(138)] = 9907, + [SMALL_STATE(139)] = 9941, + [SMALL_STATE(140)] = 9977, + [SMALL_STATE(141)] = 10015, + [SMALL_STATE(142)] = 10081, + [SMALL_STATE(143)] = 10119, + [SMALL_STATE(144)] = 10159, + [SMALL_STATE(145)] = 10197, + [SMALL_STATE(146)] = 10235, + [SMALL_STATE(147)] = 10273, + [SMALL_STATE(148)] = 10306, + [SMALL_STATE(149)] = 10341, + [SMALL_STATE(150)] = 10406, + [SMALL_STATE(151)] = 10469, + [SMALL_STATE(152)] = 10504, + [SMALL_STATE(153)] = 10537, + [SMALL_STATE(154)] = 10570, + [SMALL_STATE(155)] = 10603, + [SMALL_STATE(156)] = 10636, + [SMALL_STATE(157)] = 10669, + [SMALL_STATE(158)] = 10708, + [SMALL_STATE(159)] = 10741, + [SMALL_STATE(160)] = 10806, + [SMALL_STATE(161)] = 10869, + [SMALL_STATE(162)] = 10932, + [SMALL_STATE(163)] = 10997, + [SMALL_STATE(164)] = 11062, + [SMALL_STATE(165)] = 11103, + [SMALL_STATE(166)] = 11150, + [SMALL_STATE(167)] = 11199, + [SMALL_STATE(168)] = 11252, + [SMALL_STATE(169)] = 11303, + [SMALL_STATE(170)] = 11358, + [SMALL_STATE(171)] = 11415, + [SMALL_STATE(172)] = 11474, + [SMALL_STATE(173)] = 11535, + [SMALL_STATE(174)] = 11598, + [SMALL_STATE(175)] = 11661, + [SMALL_STATE(176)] = 11724, + [SMALL_STATE(177)] = 11789, + [SMALL_STATE(178)] = 11854, + [SMALL_STATE(179)] = 11919, + [SMALL_STATE(180)] = 11984, + [SMALL_STATE(181)] = 12047, + [SMALL_STATE(182)] = 12092, + [SMALL_STATE(183)] = 12124, + [SMALL_STATE(184)] = 12170, + [SMALL_STATE(185)] = 12218, + [SMALL_STATE(186)] = 12270, + [SMALL_STATE(187)] = 12310, + [SMALL_STATE(188)] = 12364, + [SMALL_STATE(189)] = 12420, + [SMALL_STATE(190)] = 12478, + [SMALL_STATE(191)] = 12538, + [SMALL_STATE(192)] = 12570, + [SMALL_STATE(193)] = 12632, + [SMALL_STATE(194)] = 12664, + [SMALL_STATE(195)] = 12696, + [SMALL_STATE(196)] = 12728, + [SMALL_STATE(197)] = 12760, + [SMALL_STATE(198)] = 12792, + [SMALL_STATE(199)] = 12854, + [SMALL_STATE(200)] = 12916, + [SMALL_STATE(201)] = 12948, + [SMALL_STATE(202)] = 12980, + [SMALL_STATE(203)] = 13042, + [SMALL_STATE(204)] = 13074, + [SMALL_STATE(205)] = 13106, + [SMALL_STATE(206)] = 13138, + [SMALL_STATE(207)] = 13200, + [SMALL_STATE(208)] = 13262, + [SMALL_STATE(209)] = 13324, + [SMALL_STATE(210)] = 13386, + [SMALL_STATE(211)] = 13448, + [SMALL_STATE(212)] = 13480, + [SMALL_STATE(213)] = 13542, + [SMALL_STATE(214)] = 13604, + [SMALL_STATE(215)] = 13666, + [SMALL_STATE(216)] = 13698, + [SMALL_STATE(217)] = 13730, + [SMALL_STATE(218)] = 13762, + [SMALL_STATE(219)] = 13794, + [SMALL_STATE(220)] = 13826, + [SMALL_STATE(221)] = 13888, + [SMALL_STATE(222)] = 13950, + [SMALL_STATE(223)] = 14012, + [SMALL_STATE(224)] = 14074, + [SMALL_STATE(225)] = 14106, + [SMALL_STATE(226)] = 14168, + [SMALL_STATE(227)] = 14212, + [SMALL_STATE(228)] = 14274, + [SMALL_STATE(229)] = 14336, + [SMALL_STATE(230)] = 14398, + [SMALL_STATE(231)] = 14432, + [SMALL_STATE(232)] = 14494, + [SMALL_STATE(233)] = 14556, + [SMALL_STATE(234)] = 14618, + [SMALL_STATE(235)] = 14668, + [SMALL_STATE(236)] = 14721, + [SMALL_STATE(237)] = 14774, + [SMALL_STATE(238)] = 14827, + [SMALL_STATE(239)] = 14880, + [SMALL_STATE(240)] = 14933, + [SMALL_STATE(241)] = 14986, + [SMALL_STATE(242)] = 15039, + [SMALL_STATE(243)] = 15092, + [SMALL_STATE(244)] = 15145, + [SMALL_STATE(245)] = 15198, + [SMALL_STATE(246)] = 15251, + [SMALL_STATE(247)] = 15304, + [SMALL_STATE(248)] = 15357, + [SMALL_STATE(249)] = 15385, + [SMALL_STATE(250)] = 15412, + [SMALL_STATE(251)] = 15437, + [SMALL_STATE(252)] = 15464, + [SMALL_STATE(253)] = 15486, + [SMALL_STATE(254)] = 15508, + [SMALL_STATE(255)] = 15530, + [SMALL_STATE(256)] = 15552, + [SMALL_STATE(257)] = 15574, + [SMALL_STATE(258)] = 15596, + [SMALL_STATE(259)] = 15616, + [SMALL_STATE(260)] = 15636, + [SMALL_STATE(261)] = 15656, + [SMALL_STATE(262)] = 15684, + [SMALL_STATE(263)] = 15710, + [SMALL_STATE(264)] = 15738, + [SMALL_STATE(265)] = 15766, + [SMALL_STATE(266)] = 15784, + [SMALL_STATE(267)] = 15806, + [SMALL_STATE(268)] = 15826, + [SMALL_STATE(269)] = 15847, + [SMALL_STATE(270)] = 15870, + [SMALL_STATE(271)] = 15891, + [SMALL_STATE(272)] = 15912, + [SMALL_STATE(273)] = 15935, + [SMALL_STATE(274)] = 15953, + [SMALL_STATE(275)] = 15968, + [SMALL_STATE(276)] = 15983, + [SMALL_STATE(277)] = 15998, + [SMALL_STATE(278)] = 16013, + [SMALL_STATE(279)] = 16028, + [SMALL_STATE(280)] = 16043, + [SMALL_STATE(281)] = 16058, + [SMALL_STATE(282)] = 16070, + [SMALL_STATE(283)] = 16084, + [SMALL_STATE(284)] = 16098, + [SMALL_STATE(285)] = 16112, + [SMALL_STATE(286)] = 16126, + [SMALL_STATE(287)] = 16140, + [SMALL_STATE(288)] = 16154, + [SMALL_STATE(289)] = 16164, + [SMALL_STATE(290)] = 16178, + [SMALL_STATE(291)] = 16192, + [SMALL_STATE(292)] = 16206, + [SMALL_STATE(293)] = 16220, + [SMALL_STATE(294)] = 16234, + [SMALL_STATE(295)] = 16243, + [SMALL_STATE(296)] = 16254, + [SMALL_STATE(297)] = 16265, + [SMALL_STATE(298)] = 16276, + [SMALL_STATE(299)] = 16287, + [SMALL_STATE(300)] = 16298, + [SMALL_STATE(301)] = 16309, + [SMALL_STATE(302)] = 16320, + [SMALL_STATE(303)] = 16331, + [SMALL_STATE(304)] = 16340, + [SMALL_STATE(305)] = 16351, + [SMALL_STATE(306)] = 16360, + [SMALL_STATE(307)] = 16371, + [SMALL_STATE(308)] = 16382, + [SMALL_STATE(309)] = 16391, + [SMALL_STATE(310)] = 16400, + [SMALL_STATE(311)] = 16411, + [SMALL_STATE(312)] = 16420, + [SMALL_STATE(313)] = 16431, + [SMALL_STATE(314)] = 16439, + [SMALL_STATE(315)] = 16447, + [SMALL_STATE(316)] = 16455, + [SMALL_STATE(317)] = 16463, + [SMALL_STATE(318)] = 16471, + [SMALL_STATE(319)] = 16479, + [SMALL_STATE(320)] = 16487, + [SMALL_STATE(321)] = 16495, + [SMALL_STATE(322)] = 16503, + [SMALL_STATE(323)] = 16511, + [SMALL_STATE(324)] = 16519, + [SMALL_STATE(325)] = 16527, + [SMALL_STATE(326)] = 16535, + [SMALL_STATE(327)] = 16543, + [SMALL_STATE(328)] = 16551, + [SMALL_STATE(329)] = 16559, + [SMALL_STATE(330)] = 16567, }; 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 = false}}, SHIFT(84), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(336), - [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(115), - [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(9), - [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(279), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(84), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(322), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), + [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(105), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), + [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(276), [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), - [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(129), - [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), - [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), - [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), - [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), - [47] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(84), - [50] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(120), - [53] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(78), - [56] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(75), - [59] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(325), - [62] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(327), - [65] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(336), - [68] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(12), - [71] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(115), - [74] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(36), - [77] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(9), - [80] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(279), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(133), + [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [47] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(87), + [50] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(108), + [53] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(84), + [56] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(78), + [59] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(322), + [62] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(321), + [65] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(325), + [68] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(66), + [71] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(105), + [74] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(33), + [77] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), + [80] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(276), [83] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), [86] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(4), [89] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [91] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(230), - [94] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), - [96] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), - [98] = {.entry = {.count = 1, .reusable = false}}, SHIFT(130), - [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(73), - [104] = {.entry = {.count = 1, .reusable = false}}, SHIFT(286), - [106] = {.entry = {.count = 1, .reusable = false}}, SHIFT(134), - [108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), - [110] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), - [112] = {.entry = {.count = 1, .reusable = false}}, SHIFT(128), - [114] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [116] = {.entry = {.count = 1, .reusable = false}}, SHIFT(182), - [118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [120] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), - [122] = {.entry = {.count = 1, .reusable = false}}, SHIFT(284), + [91] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(237), + [94] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), + [96] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), + [98] = {.entry = {.count = 1, .reusable = false}}, SHIFT(132), + [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), + [104] = {.entry = {.count = 1, .reusable = false}}, SHIFT(274), + [106] = {.entry = {.count = 1, .reusable = false}}, SHIFT(140), + [108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), + [110] = {.entry = {.count = 1, .reusable = false}}, SHIFT(146), + [112] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), + [114] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [116] = {.entry = {.count = 1, .reusable = false}}, SHIFT(218), + [118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [120] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), + [122] = {.entry = {.count = 1, .reusable = false}}, SHIFT(279), [124] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), - [126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), [128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), [130] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), [132] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), [134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), [136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [138] = {.entry = {.count = 1, .reusable = false}}, SHIFT(86), - [140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [138] = {.entry = {.count = 1, .reusable = false}}, SHIFT(97), + [140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), [142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), [144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), [146] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(302), - [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), - [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(333), - [154] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), - [156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), - [158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), - [160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 2, 0, 0), - [162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(338), - [164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 2, 0, 0), - [166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 2, 0, 3), - [168] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 2, 0, 3), - [170] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), - [172] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(338), - [175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), - [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [179] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(333), - [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), - [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), - [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 6), - [190] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 6), + [148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), + [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 2, 0, 0), + [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(319), + [154] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 2, 0, 0), + [156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 2, 0, 3), + [158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(328), + [160] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 2, 0, 3), + [162] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), + [164] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(319), + [167] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), + [169] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), + [171] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), + [173] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), + [175] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(328), + [178] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), + [180] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), + [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), + [184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), + [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), + [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 20), + [190] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 20), [192] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), - [198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 12), - [200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 12), - [202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 14), - [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 14), - [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 5), - [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 5), - [210] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 16), - [212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), - [214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 16), - [216] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), - [218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), - [220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), - [222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 5), - [224] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 5), - [226] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 20), - [228] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 20), - [230] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), - [236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [240] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), - [242] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), - [244] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), - [246] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), - [248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [250] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [252] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [254] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 4), + [198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), + [200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), + [202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 5), + [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 5), + [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 12), + [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 12), + [210] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 14), + [212] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 14), + [214] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 5), + [216] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 5), + [218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 6), + [220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 6), + [222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 16), + [224] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), + [226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 16), + [228] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), + [230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 6, 0, 28), + [232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [234] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [236] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), + [238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [242] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), + [244] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), + [246] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), + [248] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), + [250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), [256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [260] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 4), - [264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 13), - [266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 13), - [268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 10), - [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 10), - [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 7), - [274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 7), - [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 17), - [278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 17), - [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 19), - [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 19), - [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [290] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [294] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 21), - [298] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 21), - [300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 4, 0, 22), - [302] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 4, 0, 22), - [304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), - [310] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 26), - [312] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 26), - [314] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 23), - [316] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 23), - [318] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 6, 0, 28), - [320] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 6, 0, 28), - [322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 27), - [324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 27), - [326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [328] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [330] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 29), - [332] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 29), - [334] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 30), - [336] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 30), - [338] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), - [340] = {.entry = {.count = 1, .reusable = false}}, SHIFT(29), - [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), - [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(312), - [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(330), - [348] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(335), - [351] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(330), - [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(335), - [356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(315), - [358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), - [360] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), - [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), - [364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 25), - [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(326), + [258] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 6, 0, 28), + [260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 22), + [266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 22), + [268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 25), + [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 25), + [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 29), + [274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 29), + [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 30), + [278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 30), + [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 10), + [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 10), + [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 4), + [290] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 4), + [292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [294] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [298] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 13), + [302] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 13), + [304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [308] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 26), + [310] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 26), + [312] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 17), + [314] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 17), + [316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 27), + [318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 27), + [320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 19), + [322] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 19), + [324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 7), + [326] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 7), + [328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [330] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 21), + [334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 21), + [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [338] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), + [340] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), + [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), + [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), + [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(329), + [348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(312), + [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), + [352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), + [354] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), + [356] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(327), + [359] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(329), + [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), + [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(313), + [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), - [376] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [374] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), + [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), - [380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [380] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), [382] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), [384] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), [386] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), - [388] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), + [388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), [392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), [394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(293), - [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245), - [402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), - [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [408] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 18), - [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), - [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), - [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), - [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [424] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), - [426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), - [428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), - [430] = {.entry = {.count = 1, .reusable = false}}, SHIFT(74), + [396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), + [398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [402] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 18), + [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), + [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), + [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), + [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), + [418] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 24), + [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [424] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38), + [426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [430] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), [432] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), - [434] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), - [436] = {.entry = {.count = 1, .reusable = false}}, SHIFT(44), - [438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), - [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), - [448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [454] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(301), - [458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), - [460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [434] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), + [436] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), + [438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), + [448] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), + [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), + [454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), + [460] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), [462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), - [464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), - [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), - [472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), - [478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), - [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), - [482] = {.entry = {.count = 1, .reusable = false}}, SHIFT(251), - [484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), - [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(337), - [488] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(337), - [491] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [493] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 2, 0, 0), - [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), - [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), - [499] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [501] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [503] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), - [505] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), - [507] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), - [509] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), - [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), - [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237), - [515] = {.entry = {.count = 1, .reusable = false}}, SHIFT(240), - [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), - [519] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), - [521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), - [523] = {.entry = {.count = 1, .reusable = false}}, SHIFT(235), - [525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), - [527] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), - [529] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), - [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(234), - [533] = {.entry = {.count = 1, .reusable = false}}, SHIFT(236), - [535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), - [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), - [539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), - [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(255), - [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), - [545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), - [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), - [549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), - [551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), - [555] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(303), - [558] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [560] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(323), - [563] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), - [565] = {.entry = {.count = 1, .reusable = false}}, SHIFT(323), - [567] = {.entry = {.count = 1, .reusable = false}}, SHIFT(11), - [569] = {.entry = {.count = 1, .reusable = false}}, SHIFT(64), - [571] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), - [573] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), - [575] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), - [577] = {.entry = {.count = 1, .reusable = false}}, SHIFT(52), - [579] = {.entry = {.count = 1, .reusable = false}}, SHIFT(37), - [581] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), - [583] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), - [585] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), - [587] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), - [589] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), - [591] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 11), - [593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(329), - [597] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), - [599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), - [601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), - [603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), - [605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), - [607] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), - [609] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [611] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(319), - [614] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), - [618] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 24), - [620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [624] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [626] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), - [630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), - [632] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), - [636] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254), - [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(136), - [642] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), - [648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), - [650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), - [652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), - [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), - [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), - [658] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), - [662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), - [666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), - [668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), - [670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), - [672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), - [678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), - [680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), - [682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), - [688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), - [690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), - [692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), - [694] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [464] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), + [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), + [470] = {.entry = {.count = 1, .reusable = false}}, SHIFT(64), + [472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256), + [484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), + [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245), + [488] = {.entry = {.count = 1, .reusable = false}}, SHIFT(249), + [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), + [492] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), + [496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(258), + [498] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [500] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [502] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), + [504] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), + [506] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), + [508] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), + [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), + [512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), + [514] = {.entry = {.count = 1, .reusable = false}}, SHIFT(240), + [516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), + [518] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), + [520] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), + [522] = {.entry = {.count = 1, .reusable = false}}, SHIFT(246), + [524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), + [526] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), + [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), + [530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), + [532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), + [534] = {.entry = {.count = 1, .reusable = false}}, SHIFT(235), + [536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), + [538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(252), + [540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(298), + [542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), + [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), + [546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [550] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(298), + [553] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [555] = {.entry = {.count = 1, .reusable = false}}, SHIFT(323), + [557] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), + [559] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), + [561] = {.entry = {.count = 1, .reusable = false}}, SHIFT(9), + [563] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), + [565] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), + [567] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), + [569] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(323), + [572] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), + [574] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 11), + [576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), + [580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(286), + [584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), + [586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(330), + [588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), + [590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(191), + [592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), + [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), + [596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), + [598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), + [600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), + [602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [604] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(299), + [607] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [609] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), + [613] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [615] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [617] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [619] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [621] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [623] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), + [625] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), + [627] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [629] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), + [631] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [633] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), + [635] = {.entry = {.count = 1, .reusable = true}}, SHIFT(320), + [637] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [639] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [641] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), + [643] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 23), + [645] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [647] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), + [649] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [651] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [653] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [655] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [657] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [659] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [661] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), + [663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308), + [665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [667] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), + [669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), + [671] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [673] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), + [677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index b3f1493..993fb28 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -1,8 +1,9 @@ + identity_path: $ => seq($.identifier, repeat(seq('.', $.identifier))), ================== Empty ================== -() -> std.None "" +() -> std.None: "" --- @@ -10,9 +11,10 @@ Empty (expression (closure_definition (struct_definition) - (identity_path - (identifier) - (identifier)) + (expression + (identity_path + (identifier) + (identifier))) (expression (string))))) @@ -20,7 +22,7 @@ Empty With argument ================== -(argument: std.types.UInt) -> std.None "" +(argument: std.types.UInt) -> std.None: "" --- @@ -36,9 +38,10 @@ With argument (identifier) (identifier) (identifier)))))) - (identity_path - (identifier) - (identifier)) + (expression + (identity_path + (identifier) + (identifier))) (expression (string))))) @@ -46,7 +49,7 @@ With argument With Binary Expression ================== -(argument: std.types.UInt) -> std.None a + b +(argument: std.types.UInt) -> std.None: a + b --- @@ -62,9 +65,10 @@ With Binary Expression (identifier) (identifier) (identifier)))))) - (identity_path - (identifier) - (identifier)) + (expression + (identity_path + (identifier) + (identifier))) (expression (binary_expression (expression diff --git a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt index 5645f1b..eb390e3 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt @@ -17,7 +17,7 @@ Comment before closure ================== # There's a comment before the code. -()->std.None "" +()->std.None: "" --- @@ -26,8 +26,9 @@ Comment before closure (expression (closure_definition (struct_definition) - (identity_path - (identifier) - (identifier)) + (expression + (identity_path + (identifier) + (identifier))) (expression (string))))) From a9676852c50a1b5b6ffca6e7b4c4b8bf9833464c Mon Sep 17 00:00:00 2001 From: James Carl Date: Wed, 14 Jan 2026 20:38:39 -0500 Subject: [PATCH 075/106] Fix member access syntax --- crates/interpreter/src/compile/expressions.rs | 259 +- crates/interpreter/src/execution/mod.rs | 94 +- .../src/execution/values/closure.rs | 11 +- .../tree-sitter-command-cad-model/grammar.js | 19 +- .../src/grammar.json | 150 +- .../src/node-types.json | 75 +- .../src/parser.c | 12463 ++++++++-------- .../test/corpus/closure.txt | 81 +- .../test/corpus/comments.txt | 5 +- .../test/corpus/dictionary_construction.txt | 18 +- .../test/corpus/list.txt | 27 +- .../test/corpus/precedence.txt | 36 +- .../test/corpus/struct_definition.txt | 66 +- .../test/corpus/variable_paths.txt | 34 +- 14 files changed, 6329 insertions(+), 7009 deletions(-) diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 380bb4c..56469eb 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -99,8 +99,9 @@ pub enum Expression { If(AstNode>), List(AstNode>>), Parenthesis(Box>), - IdentityPath(AstNode), - SelfPath(AstNode), + MemberAccess(Box>), + Self_(AstNode), + Identifier(AstNode), Scalar(AstNode), Vector2(AstNode>), Vector3(AstNode>), @@ -232,30 +233,30 @@ impl<'t> Parse<'t, nodes::Parenthesis<'t>> for Expression { } } -impl<'t> Parse<'t, nodes::IdentityPath<'t>> for Expression { +impl<'t> Parse<'t, nodes::MemberAccess<'t>> for Expression { fn parse<'i>( file: &Arc, input: &'i str, - value: nodes::IdentityPath<'t>, + value: nodes::MemberAccess<'t>, ) -> Result, Error<'t, 'i>> { Ok(AstNode::new( file, &value, - Self::IdentityPath(IdentityPath::parse(file, input, value)?), + Self::MemberAccess(Box::new(MemberAccess::parse(file, input, value)?)), )) } } -impl<'t> Parse<'t, nodes::SelfPath<'t>> for Expression { +impl<'t> Parse<'t, nodes::Self_<'t>> for Expression { fn parse<'i>( file: &Arc, input: &'i str, - value: nodes::SelfPath<'t>, + value: nodes::Self_<'t>, ) -> Result, Error<'t, 'i>> { Ok(AstNode::new( file, &value, - Self::SelfPath(SelfPath::parse(file, input, value)?), + Self::Self_(Self_::parse(file, input, value)?), )) } } @@ -360,7 +361,8 @@ impl<'t> Parse<'t, nodes::String<'t>> for Expression { input: &'i str, value: nodes::String<'t>, ) -> Result, Error<'t, 'i>> { - static ESCAPE_SEQUENCES: &[(&str, &str)] = &[("\"", "\\\""), ("\n", "\\n"), ("\\", "\\\\")]; + static ESCAPE_SEQUENCES: &[(&str, &str); 3] = + &[("\"", "\\\""), ("\n", "\\n"), ("\\", "\\\\")]; let raw_text = &input[value.byte_range()]; let raw_text = &raw_text[1..raw_text.len() - 1]; @@ -513,8 +515,13 @@ impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { ChildType::If(if_expression) => Self::parse(file, input, if_expression), ChildType::List(list) => Self::parse(file, input, list), ChildType::Parenthesis(parenthesis) => Self::parse(file, input, parenthesis), - ChildType::IdentityPath(path) => Self::parse(file, input, path), - ChildType::SelfPath(path) => Self::parse(file, input, path), + ChildType::MemberAccess(path) => Self::parse(file, input, path), + ChildType::Self_(path) => Self::parse(file, input, path), + ChildType::Identifier(ident) => Ok(AstNode::new( + file, + &value, + Self::Identifier(ImString::parse(file, input, ident)?), + )), ChildType::Scalar(scalar) => Self::parse(file, input, scalar), ChildType::Vector2(vector) => Self::parse(file, input, vector), ChildType::Vector3(vector) => Self::parse(file, input, vector), @@ -670,52 +677,34 @@ impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for BinaryExpression { } #[derive(Debug, Hash, Eq, PartialEq)] -pub struct IdentityPath { - pub path: Vec>, +pub struct MemberAccess { + pub base: AstNode, + pub member: AstNode, } -impl<'t> Parse<'t, nodes::IdentityPath<'t>> for IdentityPath { +impl<'t> Parse<'t, nodes::MemberAccess<'t>> for MemberAccess { fn parse<'i>( file: &Arc, input: &'i str, - value: nodes::IdentityPath<'t>, + value: nodes::MemberAccess<'t>, ) -> Result, Error<'t, 'i>> { - let mut cursor = value.walk(); - let mut path = Vec::new(); - - for ident in value.identifiers(&mut cursor) { - let ident = ident?; - let text = ImString::parse(file, input, ident)?; - - path.push(text); - } + let base = Expression::parse(file, input, value.base()?)?; + let member = ImString::parse(file, input, value.member()?)?; - Ok(AstNode::new(file, &value, Self { path })) + Ok(AstNode::new(file, &value, Self { base, member })) } } #[derive(Debug, Hash, Eq, PartialEq)] -pub struct SelfPath { - pub path: Vec>, -} +pub struct Self_; -impl<'t> Parse<'t, nodes::SelfPath<'t>> for SelfPath { +impl<'t> Parse<'t, nodes::Self_<'t>> for Self_ { fn parse<'i>( file: &Arc, - input: &'i str, - value: nodes::SelfPath<'t>, + _input: &'i str, + value: nodes::Self_<'t>, ) -> Result, Error<'t, 'i>> { - let mut path = Vec::new(); - - let mut cursor = value.walk(); - for ident in value.identifiers(&mut cursor) { - let ident = ident?; - let text = ImString::parse(file, input, ident)?; - - path.push(text); - } - - Ok(AstNode::new(file, &value, Self { path })) + Ok(AstNode::new(file, &value, Self)) } } @@ -1394,7 +1383,7 @@ mod test { #[test] fn closure_definition() { - let root = full_compile("() -> std.None: \"\""); + let root = full_compile("() -> thing: \"\""); let closure = root.node.as_closuredefinition().unwrap(); let closure_reference = closure.reference.clone(); let argument = &closure.node.argument_type; @@ -1402,7 +1391,7 @@ mod test { let returns = &closure.node.return_type; let returns_reference = returns.reference.clone(); - let returns_path = returns.node.as_identitypath().unwrap(); + let returns_path = returns.node.as_identifier().unwrap(); let returns_path_reference = returns_path.reference.clone(); let expression = &closure.node.expression; @@ -1425,20 +1414,9 @@ mod test { }, return_type: AstNode { reference: returns_reference, - node: Expression::IdentityPath(AstNode { + node: Expression::Identifier(AstNode { reference: returns_path_reference, - node: IdentityPath { - path: vec![ - AstNode { - reference: returns_path.node.path[0].reference.clone(), - node: "std".into() - }, - AstNode { - reference: returns_path.node.path[1].reference.clone(), - node: "None".into() - } - ] - } + node: ImString::from("thing") }) }, expression: Arc::new(AstNode { @@ -1672,31 +1650,33 @@ mod test { } #[test] - fn identity_path() { + fn member_access() { let root = full_compile("this.thang"); - let path = root.node.as_identitypath().unwrap(); - let this = &path.node.path[0]; - let thang = &path.node.path[1]; + let path = root.node.as_memberaccess().unwrap(); + let base = &path.node.base; + let this = base.node.as_identifier().unwrap(); + let member = &path.node.member; assert_eq!( root, AstNode { reference: root.reference.clone(), - node: Expression::IdentityPath(AstNode { + node: Expression::MemberAccess(Box::new(AstNode { reference: path.reference.clone(), - node: IdentityPath { - path: vec![ - AstNode { + node: MemberAccess { + base: AstNode { + reference: base.reference.clone(), + node: Expression::Identifier(AstNode { reference: this.reference.clone(), - node: "this".into() - }, - AstNode { - reference: thang.reference.clone(), - node: "thang".into() - } - ] + node: ImString::from("this") + }) + }, + member: AstNode { + reference: member.reference.clone(), + node: ImString::from("thang") + } } - }) + })) } ); } @@ -1704,29 +1684,44 @@ mod test { #[test] fn self_path() { let root = full_compile("self.this.thang"); - let path = root.node.as_selfpath().unwrap(); - let this = &path.node.path[0]; - let thang = &path.node.path[1]; + let thang = root.node.as_memberaccess().unwrap(); + let this_expr = &thang.node.base; + let this = this_expr.node.as_memberaccess().unwrap(); + let self_expr = &this.node.base; + let self_ = self_expr.node.as_self_().unwrap(); assert_eq!( root, AstNode { reference: root.reference.clone(), - node: Expression::SelfPath(AstNode { - reference: path.reference.clone(), - node: SelfPath { - path: vec![ - AstNode { + node: Expression::MemberAccess(Box::new(AstNode { + reference: thang.reference.clone(), + node: MemberAccess { + base: AstNode { + reference: this.reference.clone(), + node: Expression::MemberAccess(Box::new(AstNode { reference: this.reference.clone(), - node: "this".into() - }, - AstNode { - reference: thang.reference.clone(), - node: "thang".into() - } - ] + node: MemberAccess { + base: AstNode { + reference: self_expr.reference.clone(), + node: Expression::Self_(AstNode { + reference: self_.reference.clone(), + node: Self_ + }) + }, + member: AstNode { + reference: this.node.member.reference.clone(), + node: ImString::from("this") + } + } + })) + }, + member: AstNode { + reference: thang.node.member.reference.clone(), + node: ImString::from("thang") + } } - }) + })) } ); } @@ -1901,19 +1896,18 @@ mod test { #[test] fn struct_definition() { - let root = full_compile("( one: std.Constraint, two: std.Constraint = a, ... )"); + let root = full_compile("( one: One, two: Two = a, ... )"); let struct_definition = root.node.as_structdefinition().unwrap(); let members = &struct_definition.node.members; let one = &members[0]; - let one_ty = one.node.ty.node.as_identitypath().unwrap(); + let one_ty = one.node.ty.node.as_identifier().unwrap(); let two = &members[1]; - let two_ty = two.node.ty.node.as_identitypath().unwrap(); + let two_ty = two.node.ty.node.as_identifier().unwrap(); let two_default = two.node.default.as_ref().unwrap(); - let two_default_path = two_default.node.as_identitypath().unwrap(); + let two_default_path = two_default.node.as_identifier().unwrap(); assert!(struct_definition.node.variadic); assert_eq!(members.len(), 2); - assert_eq!(two_default_path.node.path.len(), 1); assert_eq!( *one, @@ -1926,20 +1920,9 @@ mod test { }, ty: AstNode { reference: one.node.ty.reference.clone(), - node: Expression::IdentityPath(AstNode { + node: Expression::Identifier(AstNode { reference: one_ty.reference.clone(), - node: IdentityPath { - path: vec![ - AstNode { - reference: one_ty.node.path[0].reference.clone(), - node: "std".into(), - }, - AstNode { - reference: one_ty.node.path[1].reference.clone(), - node: "Constraint".into(), - } - ] - } + node: "One".into() }) }, default: None @@ -1957,32 +1940,16 @@ mod test { }, ty: AstNode { reference: two.node.ty.reference.clone(), - node: Expression::IdentityPath(AstNode { + node: Expression::Identifier(AstNode { reference: two_ty.reference.clone(), - node: IdentityPath { - path: vec![ - AstNode { - reference: two_ty.node.path[0].reference.clone(), - node: "std".into(), - }, - AstNode { - reference: two_ty.node.path[1].reference.clone(), - node: "Constraint".into(), - } - ] - } + node: "Two".into() }) }, default: Some(AstNode { reference: two_default.reference.clone(), - node: Expression::IdentityPath(AstNode { + node: Expression::Identifier(AstNode { reference: two_default_path.reference.clone(), - node: IdentityPath { - path: vec![AstNode { - reference: two_default_path.node.path[0].reference.clone(), - node: "a".into() - }] - } + node: "a".into() }) }) } @@ -2092,9 +2059,9 @@ mod test { #[test] fn function_call_no_arguments() { - let root = full_compile("a.b()"); + let root = full_compile("a()"); let call = root.node.as_functioncall().unwrap(); - let to_call = call.node.to_call.node.as_identitypath().unwrap(); + let to_call = call.node.to_call.node.as_identifier().unwrap(); assert_eq!( root, AstNode { @@ -2104,20 +2071,9 @@ mod test { node: Box::new(FunctionCall { to_call: AstNode { reference: call.node.to_call.reference.clone(), - node: Expression::IdentityPath(AstNode { + node: Expression::Identifier(AstNode { reference: to_call.reference.clone(), - node: IdentityPath { - path: vec![ - AstNode { - reference: to_call.node.path[0].reference.clone(), - node: "a".into() - }, - AstNode { - reference: to_call.node.path[1].reference.clone(), - node: "b".into() - } - ] - } + node: "a".into() }) }, argument: AstNode { @@ -2135,9 +2091,9 @@ mod test { #[test] fn function_call_with_arguments() { - let root = full_compile("a.b(value = 24u)"); + let root = full_compile("a(value = 24u)"); let call = root.node.as_functioncall().unwrap(); - let to_call = call.node.to_call.node.as_identitypath().unwrap(); + let to_call = call.node.to_call.node.as_identifier().unwrap(); let dict = &call.node.argument.node; let dict_assignment = &dict.assignments[0]; assert_eq!( @@ -2149,20 +2105,9 @@ mod test { node: Box::new(FunctionCall { to_call: AstNode { reference: call.node.to_call.reference.clone(), - node: Expression::IdentityPath(AstNode { + node: Expression::Identifier(AstNode { reference: to_call.reference.clone(), - node: IdentityPath { - path: vec![ - AstNode { - reference: to_call.node.path[0].reference.clone(), - node: "a".into() - }, - AstNode { - reference: to_call.node.path[1].reference.clone(), - node: "b".into() - } - ] - } + node: "a".into() }) }, argument: AstNode { diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index 9038d20..d2369cb 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -46,62 +46,6 @@ use values::{ pub use standard_environment::build_prelude; -pub fn find_value<'p, 's>( - context: &ExecutionContext, - path_iter: impl IntoIterator>, -) -> ExpressionResult { - let mut path_iter = path_iter.into_iter().peekable(); - let root = path_iter.next().expect("Path is empty"); - - let stack_value = context.get_variable(LocatedStr { - location: root.reference.clone(), - string: &root.node, - })?; - - if let Some(sub_path) = path_iter.next() { - // We need the value off the heap. - - let mut value = stack_value.get_attribute( - context, - &LocatedStr { - location: sub_path.reference.clone(), - string: &sub_path.node, - }, - )?; - - // Follow the chain of elements to evaluate the whole path, up to the last element. - while let Some(sub_path) = path_iter.next() { - if path_iter.peek().is_none() { - // That's the last element of the path. We break out early because the - // last one needs to be a mutable borrow. - - let final_value = value.get_attribute( - context, - &LocatedStr { - location: sub_path.reference.clone(), - string: &sub_path.node, - }, - )?; - - return Ok(final_value.clone()); - } else { - value = value.get_attribute( - context, - &LocatedStr { - location: sub_path.reference.clone(), - string: &sub_path.node, - }, - )?; - } - } - - Ok(value.clone()) - } else { - // We just needed the value off the stack. - Ok(stack_value.clone()) - } -} - pub fn find_all_variable_accesses_in_expression( expression: &Expression, access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, @@ -151,9 +95,8 @@ pub fn find_all_variable_accesses_in_expression( Expression::Parenthesis(ast_node) => { find_all_variable_accesses_in_expression(&ast_node.node, access_collector) } - Expression::IdentityPath(ast_node) => { - // Only the top most parent matters. - access_collector(&ast_node.node.path[0]) + Expression::MemberAccess(ast_node) => { + find_all_variable_accesses_in_expression(&ast_node.node.base.node, access_collector) } Expression::StructDefinition(ast_node) => { for member in ast_node.node.members.iter() { @@ -208,6 +151,7 @@ pub fn find_all_variable_accesses_in_expression( Ok(()) } + Expression::Identifier(ast_node) => access_collector(ast_node), Expression::Boolean(_) | Expression::Scalar(_) | Expression::Vector2(_) @@ -216,7 +160,7 @@ pub fn find_all_variable_accesses_in_expression( | Expression::SignedInteger(_) | Expression::String(_) | Expression::UnsignedInteger(_) - | Expression::SelfPath(_) => Ok(()), + | Expression::Self_(_) => Ok(()), } } @@ -293,19 +237,25 @@ pub fn execute_expression( Ok(values::List::from_ast(context, ast_node)?.into()) } compile::Expression::Parenthesis(ast_node) => execute_expression(context, &ast_node), - compile::Expression::IdentityPath(ast_node) => { - let path_iter = ast_node.node.path.iter(); - Ok(find_value(context, path_iter)?) - } - compile::Expression::SelfPath(ast_node) => { - let self_code = AstNode { - reference: ast_node.reference.clone(), - node: ImString::from("self"), - }; - let path_iter = [&self_code].into_iter().chain(ast_node.node.path.iter()); - Ok(find_value(context, path_iter)?) - } + compile::Expression::MemberAccess(ast_node) => { + let base = execute_expression(context, &ast_node.node.base)?; + context.trace_scope(ast_node.node.member.reference.clone(), |context| { + base.get_attribute(context, &ast_node.node.member.node) + }) + } + compile::Expression::Self_(ast_node) => context + .get_variable(LocatedStr { + location: ast_node.reference.clone(), + string: "self", + }) + .cloned(), + compile::Expression::Identifier(ast_node) => context + .get_variable(LocatedStr { + location: ast_node.reference.clone(), + string: ast_node.node.as_str(), + }) + .cloned(), compile::Expression::Scalar(ast_node) => Ok(values::Scalar { dimension: ast_node.node.dimension, value: ast_node.node.value, diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 72d0bb7..4f93fb4 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -26,8 +26,8 @@ use crate::{ execute_expression, execution::{ errors::{ExpressionResult, GenericFailure, Raise}, - find_all_variable_accesses_in_expression, find_value, - logging::{LogLevel, LogMessage}, + find_all_variable_accesses_in_expression, + logging::{LocatedStr, LogLevel, LogMessage}, stack::ScopeType, values::{string::formatting::Style, Dictionary, MissingAttributeError, Value}, ExecutionContext, @@ -215,7 +215,12 @@ impl UserClosure { let mut captured_values = HashableMap::new(); find_all_variable_accesses_in_closure_capture(&source.node, &mut |field_name| { - let value = find_value(context, [field_name])?; + let value = context + .get_variable(LocatedStr { + location: field_name.reference.clone(), + string: field_name.node.as_str(), + })? + .clone(); captured_values.insert(field_name.node.clone(), value); diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index cbe270c..907cd70 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -8,8 +8,9 @@ // @ts-check const PREC = { - struct_member: 17, - unit: 16, + struct_member: 18, + unit: 17, + member_access: 16, method_call: 15, function_call: 14, field: 13, @@ -109,10 +110,10 @@ module.exports = grammar({ number: _ => /[0-9]+/, unit_quote: _ => /'(\\'|[^'])*'/, - _float: $ => choice( + _float: $ => prec.right(choice( seq(field('whole', $.number), '.', field('fractional', $.number)), seq(field('whole', $.number)), - ), + )), _unit: $ => choice($.identifier, $.unit_quote), @@ -147,8 +148,9 @@ module.exports = grammar({ $.vector4, $.boolean, $.string, - $.identity_path, - $.self_path, + $.self, + $.identifier, + $.member_access, $.list, $.if, $.struct_definition, @@ -169,8 +171,9 @@ module.exports = grammar({ let_in: $ => seq('let', field('assignment', repeat($.let_in_assignment)), 'in', field('expression', $.expression)), let_in_assignment: $ => seq(field('ident', $.identifier), '=', field('value', $.expression), ';'), - identity_path: $ => seq($.identifier, repeat(seq('.', $.identifier))), - self_path: $ => seq($.self, repeat(seq('.', field('identifier', $.identifier)))), + member_access: $ => prec.left(PREC.member_access, seq( + field('base', $.expression), seq('.', field('member', $.identifier)) + )), declaration_type: $ => seq(':', $.expression), diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 0ec53ce..51fc1bb 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -161,47 +161,51 @@ "value": "'(\\\\'|[^'])*'" }, "_float": { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "whole", - "content": { - "type": "SYMBOL", - "name": "number" - } - }, - { - "type": "STRING", - "value": "." - }, - { - "type": "FIELD", - "name": "fractional", - "content": { - "type": "SYMBOL", - "name": "number" + "type": "PREC_RIGHT", + "value": 0, + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "whole", + "content": { + "type": "SYMBOL", + "name": "number" + } + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "FIELD", + "name": "fractional", + "content": { + "type": "SYMBOL", + "name": "number" + } } - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "whole", - "content": { - "type": "SYMBOL", - "name": "number" + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "whole", + "content": { + "type": "SYMBOL", + "name": "number" + } } - } - ] - } - ] + ] + } + ] + } }, "_unit": { "type": "CHOICE", @@ -218,7 +222,7 @@ }, "scalar": { "type": "PREC_LEFT", - "value": 16, + "value": 17, "content": { "type": "SEQ", "members": [ @@ -514,11 +518,15 @@ }, { "type": "SYMBOL", - "name": "identity_path" + "name": "self" + }, + { + "type": "SYMBOL", + "name": "identifier" }, { "type": "SYMBOL", - "name": "self_path" + "name": "member_access" }, { "type": "SYMBOL", @@ -1371,41 +1379,21 @@ } ] }, - "identity_path": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "identifier" - }, - { - "type": "REPEAT", - "content": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "." - }, - { - "type": "SYMBOL", - "name": "identifier" - } - ] - } - } - ] - }, - "self_path": { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "self" - }, - { - "type": "REPEAT", - "content": { + "member_access": { + "type": "PREC_LEFT", + "value": 16, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "base", + "content": { + "type": "SYMBOL", + "name": "expression" + } + }, + { "type": "SEQ", "members": [ { @@ -1414,7 +1402,7 @@ }, { "type": "FIELD", - "name": "identifier", + "name": "member", "content": { "type": "SYMBOL", "name": "identifier" @@ -1422,8 +1410,8 @@ } ] } - } - ] + ] + } }, "declaration_type": { "type": "SEQ", @@ -1507,7 +1495,7 @@ }, "struct_member": { "type": "PREC_LEFT", - "value": 17, + "value": 18, "content": { "type": "SEQ", "members": [ diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index 3cd2d9c..d489290 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -266,7 +266,7 @@ "named": true }, { - "type": "identity_path", + "type": "identifier", "named": true }, { @@ -281,6 +281,10 @@ "type": "list", "named": true }, + { + "type": "member_access", + "named": true + }, { "type": "method_call", "named": true @@ -294,7 +298,7 @@ "named": true }, { - "type": "self_path", + "type": "self", "named": true }, { @@ -555,21 +559,6 @@ "named": true, "fields": {} }, - { - "type": "identity_path", - "named": true, - "fields": {}, - "children": { - "multiple": true, - "required": true, - "types": [ - { - "type": "identifier", - "named": true - } - ] - } - }, { "type": "if", "named": true, @@ -700,6 +689,32 @@ ] } }, + { + "type": "member_access", + "named": true, + "fields": { + "base": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "member": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + } + }, { "type": "method_call", "named": true, @@ -801,32 +816,6 @@ } } }, - { - "type": "self_path", - "named": true, - "fields": { - "identifier": { - "multiple": true, - "required": false, - "types": [ - { - "type": "identifier", - "named": true - } - ] - } - }, - "children": { - "multiple": false, - "required": true, - "types": [ - { - "type": "self", - "named": true - } - ] - } - }, { "type": "signed_integer", "named": true, diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 1ec807b..6a3971b 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -7,16 +7,16 @@ #endif #define LANGUAGE_VERSION 15 -#define STATE_COUNT 331 +#define STATE_COUNT 315 #define LARGE_STATE_COUNT 4 -#define SYMBOL_COUNT 104 +#define SYMBOL_COUNT 101 #define ALIAS_COUNT 0 #define TOKEN_COUNT 58 #define EXTERNAL_TOKEN_COUNT 0 -#define FIELD_COUNT 30 +#define FIELD_COUNT 31 #define MAX_ALIAS_SEQUENCE_LENGTH 9 #define MAX_RESERVED_WORD_SET_SIZE 0 -#define PRODUCTION_ID_COUNT 31 +#define PRODUCTION_ID_COUNT 29 #define SUPERTYPE_COUNT 0 enum ts_symbol_identifiers { @@ -101,28 +101,25 @@ enum ts_symbol_identifiers { sym_if = 79, sym_let_in = 80, sym_let_in_assignment = 81, - sym_identity_path = 82, - sym_self_path = 83, - sym_declaration_type = 84, - sym_parenthesis = 85, - sym_list = 86, - sym_struct_member = 87, - sym__struct_final_element = 88, - sym_struct_definition = 89, - sym_dictionary_member_assignment = 90, - sym_dictionary_construction = 91, - sym_closure_definition = 92, - sym_formula = 93, - sym_formula_expression = 94, - sym_formula_parenthesis = 95, - sym_formula_unary_expression = 96, - sym_formula_binary_expression = 97, - aux_sym_let_in_repeat1 = 98, - aux_sym_identity_path_repeat1 = 99, - aux_sym_self_path_repeat1 = 100, - aux_sym_list_repeat1 = 101, - aux_sym_struct_definition_repeat1 = 102, - aux_sym_dictionary_construction_repeat1 = 103, + sym_member_access = 82, + sym_declaration_type = 83, + sym_parenthesis = 84, + sym_list = 85, + sym_struct_member = 86, + sym__struct_final_element = 87, + sym_struct_definition = 88, + sym_dictionary_member_assignment = 89, + sym_dictionary_construction = 90, + sym_closure_definition = 91, + sym_formula = 92, + sym_formula_expression = 93, + sym_formula_parenthesis = 94, + sym_formula_unary_expression = 95, + sym_formula_binary_expression = 96, + aux_sym_let_in_repeat1 = 97, + aux_sym_list_repeat1 = 98, + aux_sym_struct_definition_repeat1 = 99, + aux_sym_dictionary_construction_repeat1 = 100, }; static const char * const ts_symbol_names[] = { @@ -208,8 +205,7 @@ static const char * const ts_symbol_names[] = { [sym_if] = "if", [sym_let_in] = "let_in", [sym_let_in_assignment] = "let_in_assignment", - [sym_identity_path] = "identity_path", - [sym_self_path] = "self_path", + [sym_member_access] = "member_access", [sym_declaration_type] = "declaration_type", [sym_parenthesis] = "parenthesis", [sym_list] = "list", @@ -225,8 +221,6 @@ static const char * const ts_symbol_names[] = { [sym_formula_unary_expression] = "formula_unary_expression", [sym_formula_binary_expression] = "formula_binary_expression", [aux_sym_let_in_repeat1] = "let_in_repeat1", - [aux_sym_identity_path_repeat1] = "identity_path_repeat1", - [aux_sym_self_path_repeat1] = "self_path_repeat1", [aux_sym_list_repeat1] = "list_repeat1", [aux_sym_struct_definition_repeat1] = "struct_definition_repeat1", [aux_sym_dictionary_construction_repeat1] = "dictionary_construction_repeat1", @@ -315,8 +309,7 @@ static const TSSymbol ts_symbol_map[] = { [sym_if] = sym_if, [sym_let_in] = sym_let_in, [sym_let_in_assignment] = sym_let_in_assignment, - [sym_identity_path] = sym_identity_path, - [sym_self_path] = sym_self_path, + [sym_member_access] = sym_member_access, [sym_declaration_type] = sym_declaration_type, [sym_parenthesis] = sym_parenthesis, [sym_list] = sym_list, @@ -332,8 +325,6 @@ static const TSSymbol ts_symbol_map[] = { [sym_formula_unary_expression] = sym_formula_unary_expression, [sym_formula_binary_expression] = sym_formula_binary_expression, [aux_sym_let_in_repeat1] = aux_sym_let_in_repeat1, - [aux_sym_identity_path_repeat1] = aux_sym_identity_path_repeat1, - [aux_sym_self_path_repeat1] = aux_sym_self_path_repeat1, [aux_sym_list_repeat1] = aux_sym_list_repeat1, [aux_sym_struct_definition_repeat1] = aux_sym_struct_definition_repeat1, [aux_sym_dictionary_construction_repeat1] = aux_sym_dictionary_construction_repeat1, @@ -668,11 +659,7 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [sym_identity_path] = { - .visible = true, - .named = true, - }, - [sym_self_path] = { + [sym_member_access] = { .visible = true, .named = true, }, @@ -736,14 +723,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = false, .named = false, }, - [aux_sym_identity_path_repeat1] = { - .visible = false, - .named = false, - }, - [aux_sym_self_path_repeat1] = { - .visible = false, - .named = false, - }, [aux_sym_list_repeat1] = { .visible = false, .named = false, @@ -764,31 +743,32 @@ enum ts_field_identifiers { field_assignment = 3, field_assignments = 4, field_b = 5, - field_condition = 6, - field_default = 7, - field_expression = 8, - field_final_element = 9, - field_fractional = 10, - field_ident = 11, - field_identifier = 12, + field_base = 6, + field_condition = 7, + field_default = 8, + field_expression = 9, + field_final_element = 10, + field_fractional = 11, + field_ident = 12, field_lhs = 13, - field_members = 14, - field_name = 15, - field_on_false = 16, - field_on_true = 17, - field_op = 18, - field_relation = 19, - field_result = 20, - field_rhs = 21, - field_self_dictionary = 22, - field_to_call = 23, - field_unit = 24, - field_value = 25, - field_w = 26, - field_whole = 27, - field_x = 28, - field_y = 29, - field_z = 30, + field_member = 14, + field_members = 15, + field_name = 16, + field_on_false = 17, + field_on_true = 18, + field_op = 19, + field_relation = 20, + field_result = 21, + field_rhs = 22, + field_self_dictionary = 23, + field_to_call = 24, + field_unit = 25, + field_value = 26, + field_w = 27, + field_whole = 28, + field_x = 29, + field_y = 30, + field_z = 31, }; static const char * const ts_field_names[] = { @@ -798,14 +778,15 @@ static const char * const ts_field_names[] = { [field_assignment] = "assignment", [field_assignments] = "assignments", [field_b] = "b", + [field_base] = "base", [field_condition] = "condition", [field_default] = "default", [field_expression] = "expression", [field_final_element] = "final_element", [field_fractional] = "fractional", [field_ident] = "ident", - [field_identifier] = "identifier", [field_lhs] = "lhs", + [field_member] = "member", [field_members] = "members", [field_name] = "name", [field_on_false] = "on_false", @@ -830,32 +811,30 @@ static const TSMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [2] = {.index = 1, .length = 2}, [3] = {.index = 3, .length = 1}, [4] = {.index = 4, .length = 1}, - [5] = {.index = 5, .length = 1}, - [6] = {.index = 6, .length = 3}, - [7] = {.index = 9, .length = 2}, + [5] = {.index = 5, .length = 3}, + [6] = {.index = 8, .length = 2}, + [7] = {.index = 10, .length = 1}, [8] = {.index = 11, .length = 1}, - [9] = {.index = 12, .length = 2}, - [10] = {.index = 14, .length = 1}, - [11] = {.index = 15, .length = 1}, - [12] = {.index = 16, .length = 1}, - [13] = {.index = 17, .length = 1}, - [14] = {.index = 18, .length = 1}, - [15] = {.index = 19, .length = 2}, - [16] = {.index = 21, .length = 3}, - [17] = {.index = 24, .length = 2}, - [18] = {.index = 26, .length = 2}, - [19] = {.index = 28, .length = 2}, - [20] = {.index = 30, .length = 2}, - [21] = {.index = 32, .length = 3}, - [22] = {.index = 35, .length = 2}, - [23] = {.index = 37, .length = 2}, - [24] = {.index = 39, .length = 2}, - [25] = {.index = 41, .length = 3}, - [26] = {.index = 44, .length = 3}, - [27] = {.index = 47, .length = 3}, - [28] = {.index = 50, .length = 3}, - [29] = {.index = 53, .length = 3}, - [30] = {.index = 56, .length = 4}, + [9] = {.index = 12, .length = 1}, + [10] = {.index = 13, .length = 1}, + [11] = {.index = 14, .length = 1}, + [12] = {.index = 15, .length = 2}, + [13] = {.index = 17, .length = 2}, + [14] = {.index = 19, .length = 3}, + [15] = {.index = 22, .length = 2}, + [16] = {.index = 24, .length = 2}, + [17] = {.index = 26, .length = 2}, + [18] = {.index = 28, .length = 2}, + [19] = {.index = 30, .length = 3}, + [20] = {.index = 33, .length = 2}, + [21] = {.index = 35, .length = 2}, + [22] = {.index = 37, .length = 2}, + [23] = {.index = 39, .length = 3}, + [24] = {.index = 42, .length = 3}, + [25] = {.index = 45, .length = 3}, + [26] = {.index = 48, .length = 3}, + [27] = {.index = 51, .length = 3}, + [28] = {.index = 54, .length = 4}, }; static const TSFieldMapEntry ts_field_map_entries[] = { @@ -865,86 +844,82 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_fractional, 0, .inherited = true}, {field_whole, 0, .inherited = true}, [3] = - {field_identifier, 1, .inherited = true}, - [4] = {field_op, 0}, - [5] = + [4] = {field_value, 0}, - [6] = + [5] = {field_fractional, 0, .inherited = true}, {field_unit, 1}, {field_whole, 0, .inherited = true}, - [9] = + [8] = {field_argument, 1}, {field_to_call, 0}, - [11] = - {field_identifier, 1}, - [12] = - {field_identifier, 0, .inherited = true}, - {field_identifier, 1, .inherited = true}, - [14] = + [10] = {field_expression, 2}, - [15] = + [11] = {field_name, 0}, - [16] = + [12] = {field_final_element, 1}, - [17] = + [13] = {field_assignments, 1}, - [18] = + [14] = {field_members, 1}, - [19] = + [15] = {field_fractional, 2}, {field_whole, 0}, - [21] = + [17] = + {field_base, 0}, + {field_member, 2}, + [19] = {field_a, 0}, {field_b, 2}, {field_op, 1}, - [24] = + [22] = {field_assignment, 1}, {field_expression, 3}, - [26] = + [24] = {field_assignment, 2}, {field_name, 0}, - [28] = + [26] = {field_assignments, 1}, {field_assignments, 2}, - [30] = + [28] = {field_final_element, 2}, {field_members, 1}, - [32] = + [30] = {field_argument, 3}, {field_self_dictionary, 0}, {field_to_call, 2}, - [35] = + [33] = {field_x, 1}, {field_y, 3}, - [37] = + [35] = {field_ident, 0}, {field_value, 2}, - [39] = + [37] = {field_default, 3}, {field_name, 0}, - [41] = + [39] = {field_assignments, 1}, {field_assignments, 2}, {field_assignments, 3}, - [44] = + [42] = {field_lhs, 1}, {field_relation, 2}, {field_rhs, 3}, - [47] = + [45] = {field_argument, 0}, {field_expression, 4}, {field_result, 2}, - [50] = + [48] = {field_condition, 1}, {field_on_false, 5}, {field_on_true, 3}, - [53] = + [51] = {field_x, 1}, {field_y, 3}, {field_z, 5}, - [56] = + [54] = {field_w, 7}, {field_x, 1}, {field_y, 3}, @@ -967,14 +942,14 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [4] = 4, [5] = 5, [6] = 6, - [7] = 4, - [8] = 5, + [7] = 6, + [8] = 4, [9] = 9, [10] = 10, [11] = 11, [12] = 12, [13] = 13, - [14] = 14, + [14] = 9, [15] = 15, [16] = 16, [17] = 17, @@ -994,50 +969,50 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [31] = 31, [32] = 32, [33] = 33, - [34] = 33, - [35] = 9, - [36] = 11, - [37] = 12, - [38] = 13, - [39] = 14, - [40] = 15, - [41] = 16, - [42] = 17, - [43] = 18, - [44] = 19, - [45] = 20, - [46] = 21, - [47] = 26, - [48] = 30, - [49] = 32, + [34] = 34, + [35] = 35, + [36] = 34, + [37] = 37, + [38] = 11, + [39] = 12, + [40] = 13, + [41] = 10, + [42] = 15, + [43] = 16, + [44] = 18, + [45] = 19, + [46] = 20, + [47] = 21, + [48] = 26, + [49] = 31, [50] = 33, - [51] = 9, - [52] = 11, - [53] = 12, - [54] = 13, - [55] = 14, - [56] = 15, - [57] = 16, - [58] = 17, - [59] = 18, - [60] = 19, - [61] = 20, - [62] = 21, - [63] = 26, - [64] = 30, - [65] = 32, - [66] = 66, - [67] = 22, - [68] = 23, - [69] = 24, - [70] = 31, - [71] = 71, - [72] = 22, - [73] = 24, - [74] = 66, - [75] = 10, + [51] = 34, + [52] = 37, + [53] = 11, + [54] = 12, + [55] = 13, + [56] = 9, + [57] = 15, + [58] = 16, + [59] = 17, + [60] = 18, + [61] = 19, + [62] = 20, + [63] = 21, + [64] = 26, + [65] = 31, + [66] = 33, + [67] = 37, + [68] = 22, + [69] = 23, + [70] = 24, + [71] = 32, + [72] = 35, + [73] = 22, + [74] = 24, + [75] = 29, [76] = 10, - [77] = 71, + [77] = 17, [78] = 78, [79] = 79, [80] = 80, @@ -1084,161 +1059,161 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [121] = 121, [122] = 122, [123] = 123, - [124] = 124, - [125] = 125, - [126] = 126, + [124] = 78, + [125] = 78, + [126] = 79, [127] = 127, - [128] = 128, - [129] = 129, - [130] = 130, - [131] = 78, - [132] = 78, - [133] = 133, - [134] = 80, - [135] = 79, - [136] = 82, - [137] = 86, - [138] = 88, - [139] = 80, - [140] = 87, - [141] = 141, - [142] = 83, - [143] = 79, - [144] = 85, - [145] = 81, - [146] = 84, - [147] = 90, - [148] = 130, - [149] = 149, - [150] = 107, - [151] = 91, - [152] = 92, - [153] = 94, - [154] = 95, - [155] = 86, - [156] = 88, - [157] = 98, - [158] = 89, - [159] = 159, - [160] = 160, - [161] = 106, - [162] = 162, - [163] = 163, - [164] = 114, - [165] = 115, - [166] = 116, - [167] = 117, - [168] = 118, - [169] = 119, - [170] = 120, - [171] = 121, - [172] = 122, - [173] = 124, - [174] = 125, - [175] = 99, - [176] = 162, - [177] = 149, - [178] = 159, - [179] = 163, - [180] = 180, - [181] = 113, - [182] = 112, - [183] = 115, - [184] = 116, - [185] = 117, - [186] = 114, - [187] = 119, - [188] = 120, - [189] = 121, - [190] = 122, - [191] = 123, - [192] = 124, - [193] = 126, - [194] = 128, - [195] = 129, - [196] = 101, - [197] = 102, - [198] = 125, - [199] = 99, - [200] = 103, - [201] = 104, - [202] = 202, - [203] = 96, - [204] = 93, - [205] = 97, + [128] = 82, + [129] = 79, + [130] = 80, + [131] = 131, + [132] = 81, + [133] = 80, + [134] = 102, + [135] = 103, + [136] = 104, + [137] = 105, + [138] = 107, + [139] = 139, + [140] = 84, + [141] = 91, + [142] = 118, + [143] = 86, + [144] = 81, + [145] = 145, + [146] = 82, + [147] = 147, + [148] = 90, + [149] = 83, + [150] = 150, + [151] = 151, + [152] = 152, + [153] = 145, + [154] = 151, + [155] = 85, + [156] = 95, + [157] = 97, + [158] = 98, + [159] = 99, + [160] = 152, + [161] = 100, + [162] = 101, + [163] = 112, + [164] = 92, + [165] = 150, + [166] = 93, + [167] = 167, + [168] = 168, + [169] = 169, + [170] = 123, + [171] = 93, + [172] = 111, + [173] = 114, + [174] = 119, + [175] = 94, + [176] = 95, + [177] = 97, + [178] = 98, + [179] = 99, + [180] = 100, + [181] = 101, + [182] = 102, + [183] = 103, + [184] = 104, + [185] = 105, + [186] = 106, + [187] = 107, + [188] = 108, + [189] = 189, + [190] = 109, + [191] = 169, + [192] = 192, + [193] = 113, + [194] = 115, + [195] = 116, + [196] = 91, + [197] = 118, + [198] = 120, + [199] = 121, + [200] = 200, + [201] = 201, + [202] = 88, + [203] = 87, + [204] = 89, + [205] = 205, [206] = 206, - [207] = 207, - [208] = 208, - [209] = 209, - [210] = 210, - [211] = 127, - [212] = 212, - [213] = 106, - [214] = 214, - [215] = 109, - [216] = 108, - [217] = 110, - [218] = 105, - [219] = 111, - [220] = 220, - [221] = 107, - [222] = 202, - [223] = 206, - [224] = 100, - [225] = 207, - [226] = 113, - [227] = 212, - [228] = 206, - [229] = 207, - [230] = 130, - [231] = 209, - [232] = 210, - [233] = 210, - [234] = 118, - [235] = 235, - [236] = 236, - [237] = 237, - [238] = 238, - [239] = 237, - [240] = 235, + [207] = 167, + [208] = 122, + [209] = 92, + [210] = 189, + [211] = 96, + [212] = 192, + [213] = 200, + [214] = 192, + [215] = 200, + [216] = 117, + [217] = 112, + [218] = 168, + [219] = 169, + [220] = 110, + [221] = 221, + [222] = 222, + [223] = 223, + [224] = 224, + [225] = 225, + [226] = 226, + [227] = 225, + [228] = 226, + [229] = 229, + [230] = 222, + [231] = 229, + [232] = 223, + [233] = 221, + [234] = 234, + [235] = 78, + [236] = 80, + [237] = 79, + [238] = 81, + [239] = 82, + [240] = 240, [241] = 241, [242] = 242, - [243] = 236, - [244] = 242, + [243] = 243, + [244] = 244, [245] = 245, - [246] = 241, - [247] = 238, - [248] = 248, - [249] = 78, - [250] = 80, - [251] = 79, - [252] = 252, - [253] = 86, + [246] = 245, + [247] = 88, + [248] = 89, + [249] = 249, + [250] = 87, + [251] = 243, + [252] = 249, + [253] = 244, [254] = 254, - [255] = 88, + [255] = 255, [256] = 256, - [257] = 257, - [258] = 97, - [259] = 96, - [260] = 93, + [257] = 256, + [258] = 255, + [259] = 259, + [260] = 260, [261] = 261, - [262] = 262, - [263] = 263, - [264] = 263, - [265] = 257, + [262] = 260, + [263] = 260, + [264] = 264, + [265] = 261, [266] = 261, - [267] = 262, + [267] = 267, [268] = 268, [269] = 269, [270] = 270, - [271] = 270, - [272] = 269, + [271] = 271, + [272] = 268, [273] = 273, [274] = 274, [275] = 275, - [276] = 274, + [276] = 269, [277] = 275, - [278] = 275, + [278] = 271, [279] = 274, [280] = 280, [281] = 281, @@ -1246,51 +1221,35 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [283] = 283, [284] = 284, [285] = 285, - [286] = 286, - [287] = 282, + [286] = 284, + [287] = 287, [288] = 288, [289] = 284, - [290] = 286, - [291] = 283, - [292] = 285, - [293] = 293, - [294] = 294, + [290] = 287, + [291] = 291, + [292] = 292, + [293] = 281, + [294] = 287, [295] = 295, - [296] = 295, - [297] = 297, + [296] = 296, + [297] = 287, [298] = 298, [299] = 299, [300] = 300, [301] = 301, [302] = 301, [303] = 303, - [304] = 300, + [304] = 304, [305] = 305, - [306] = 300, + [306] = 306, [307] = 307, [308] = 308, - [309] = 309, - [310] = 301, + [309] = 306, + [310] = 310, [311] = 311, - [312] = 300, + [312] = 307, [313] = 313, - [314] = 314, - [315] = 315, - [316] = 315, - [317] = 317, - [318] = 318, - [319] = 319, - [320] = 320, - [321] = 321, - [322] = 322, - [323] = 323, - [324] = 313, - [325] = 325, - [326] = 317, - [327] = 319, - [328] = 328, - [329] = 328, - [330] = 330, + [314] = 308, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1551,6 +1510,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '+', 52, ',', 47, '-', 51, + '.', 44, '/', 57, ':', 80, ';', 79, @@ -1579,6 +1539,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { '+', 52, ',', 47, '-', 50, + '.', 44, '/', 57, ':', 80, ';', 79, @@ -2051,58 +2012,58 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [78] = {.lex_state = 20}, [79] = {.lex_state = 20}, [80] = {.lex_state = 20}, - [81] = {.lex_state = 19}, - [82] = {.lex_state = 19}, + [81] = {.lex_state = 20}, + [82] = {.lex_state = 20}, [83] = {.lex_state = 19}, [84] = {.lex_state = 19}, [85] = {.lex_state = 19}, - [86] = {.lex_state = 20}, - [87] = {.lex_state = 19}, - [88] = {.lex_state = 20}, - [89] = {.lex_state = 19}, + [86] = {.lex_state = 19}, + [87] = {.lex_state = 22}, + [88] = {.lex_state = 22}, + [89] = {.lex_state = 22}, [90] = {.lex_state = 19}, - [91] = {.lex_state = 19}, - [92] = {.lex_state = 19}, - [93] = {.lex_state = 22}, + [91] = {.lex_state = 21}, + [92] = {.lex_state = 21}, + [93] = {.lex_state = 21}, [94] = {.lex_state = 19}, - [95] = {.lex_state = 19}, - [96] = {.lex_state = 22}, - [97] = {.lex_state = 22}, - [98] = {.lex_state = 19}, + [95] = {.lex_state = 21}, + [96] = {.lex_state = 19}, + [97] = {.lex_state = 21}, + [98] = {.lex_state = 21}, [99] = {.lex_state = 21}, - [100] = {.lex_state = 19}, - [101] = {.lex_state = 19}, - [102] = {.lex_state = 19}, - [103] = {.lex_state = 19}, - [104] = {.lex_state = 19}, - [105] = {.lex_state = 19}, - [106] = {.lex_state = 21}, + [100] = {.lex_state = 21}, + [101] = {.lex_state = 21}, + [102] = {.lex_state = 21}, + [103] = {.lex_state = 21}, + [104] = {.lex_state = 21}, + [105] = {.lex_state = 21}, + [106] = {.lex_state = 19}, [107] = {.lex_state = 21}, [108] = {.lex_state = 19}, [109] = {.lex_state = 19}, [110] = {.lex_state = 19}, [111] = {.lex_state = 19}, - [112] = {.lex_state = 19}, - [113] = {.lex_state = 21}, - [114] = {.lex_state = 21}, - [115] = {.lex_state = 21}, - [116] = {.lex_state = 21}, - [117] = {.lex_state = 21}, + [112] = {.lex_state = 21}, + [113] = {.lex_state = 19}, + [114] = {.lex_state = 19}, + [115] = {.lex_state = 19}, + [116] = {.lex_state = 19}, + [117] = {.lex_state = 19}, [118] = {.lex_state = 21}, - [119] = {.lex_state = 21}, - [120] = {.lex_state = 21}, - [121] = {.lex_state = 21}, - [122] = {.lex_state = 21}, + [119] = {.lex_state = 19}, + [120] = {.lex_state = 19}, + [121] = {.lex_state = 19}, + [122] = {.lex_state = 19}, [123] = {.lex_state = 19}, - [124] = {.lex_state = 21}, - [125] = {.lex_state = 21}, - [126] = {.lex_state = 19}, + [124] = {.lex_state = 2}, + [125] = {.lex_state = 19}, + [126] = {.lex_state = 2}, [127] = {.lex_state = 19}, - [128] = {.lex_state = 19}, + [128] = {.lex_state = 2}, [129] = {.lex_state = 19}, - [130] = {.lex_state = 21}, - [131] = {.lex_state = 2}, - [132] = {.lex_state = 19}, + [130] = {.lex_state = 2}, + [131] = {.lex_state = 19}, + [132] = {.lex_state = 2}, [133] = {.lex_state = 19}, [134] = {.lex_state = 2}, [135] = {.lex_state = 2}, @@ -2111,196 +2072,180 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [138] = {.lex_state = 2}, [139] = {.lex_state = 19}, [140] = {.lex_state = 2}, - [141] = {.lex_state = 19}, + [141] = {.lex_state = 2}, [142] = {.lex_state = 2}, - [143] = {.lex_state = 19}, - [144] = {.lex_state = 2}, + [143] = {.lex_state = 2}, + [144] = {.lex_state = 19}, [145] = {.lex_state = 2}, - [146] = {.lex_state = 2}, - [147] = {.lex_state = 2}, + [146] = {.lex_state = 19}, + [147] = {.lex_state = 19}, [148] = {.lex_state = 2}, - [149] = {.lex_state = 19}, - [150] = {.lex_state = 2}, + [149] = {.lex_state = 2}, + [150] = {.lex_state = 19}, [151] = {.lex_state = 2}, - [152] = {.lex_state = 2}, + [152] = {.lex_state = 19}, [153] = {.lex_state = 2}, [154] = {.lex_state = 2}, - [155] = {.lex_state = 19}, - [156] = {.lex_state = 19}, + [155] = {.lex_state = 2}, + [156] = {.lex_state = 2}, [157] = {.lex_state = 2}, [158] = {.lex_state = 2}, [159] = {.lex_state = 2}, [160] = {.lex_state = 19}, [161] = {.lex_state = 2}, - [162] = {.lex_state = 19}, + [162] = {.lex_state = 2}, [163] = {.lex_state = 2}, [164] = {.lex_state = 2}, - [165] = {.lex_state = 2}, + [165] = {.lex_state = 19}, [166] = {.lex_state = 2}, [167] = {.lex_state = 2}, - [168] = {.lex_state = 2}, - [169] = {.lex_state = 2}, + [168] = {.lex_state = 19}, + [169] = {.lex_state = 19}, [170] = {.lex_state = 2}, - [171] = {.lex_state = 2}, + [171] = {.lex_state = 19}, [172] = {.lex_state = 2}, [173] = {.lex_state = 2}, [174] = {.lex_state = 2}, [175] = {.lex_state = 2}, [176] = {.lex_state = 19}, [177] = {.lex_state = 19}, - [178] = {.lex_state = 2}, - [179] = {.lex_state = 2}, + [178] = {.lex_state = 19}, + [179] = {.lex_state = 19}, [180] = {.lex_state = 19}, - [181] = {.lex_state = 2}, - [182] = {.lex_state = 2}, + [181] = {.lex_state = 19}, + [182] = {.lex_state = 19}, [183] = {.lex_state = 19}, [184] = {.lex_state = 19}, [185] = {.lex_state = 19}, - [186] = {.lex_state = 19}, + [186] = {.lex_state = 2}, [187] = {.lex_state = 19}, - [188] = {.lex_state = 19}, + [188] = {.lex_state = 2}, [189] = {.lex_state = 19}, - [190] = {.lex_state = 19}, - [191] = {.lex_state = 2}, + [190] = {.lex_state = 2}, + [191] = {.lex_state = 19}, [192] = {.lex_state = 19}, [193] = {.lex_state = 2}, [194] = {.lex_state = 2}, [195] = {.lex_state = 2}, - [196] = {.lex_state = 2}, - [197] = {.lex_state = 2}, - [198] = {.lex_state = 19}, - [199] = {.lex_state = 19}, - [200] = {.lex_state = 2}, - [201] = {.lex_state = 2}, - [202] = {.lex_state = 19}, + [196] = {.lex_state = 19}, + [197] = {.lex_state = 19}, + [198] = {.lex_state = 2}, + [199] = {.lex_state = 2}, + [200] = {.lex_state = 21}, + [201] = {.lex_state = 19}, + [202] = {.lex_state = 2}, [203] = {.lex_state = 2}, [204] = {.lex_state = 2}, - [205] = {.lex_state = 2}, + [205] = {.lex_state = 19}, [206] = {.lex_state = 19}, - [207] = {.lex_state = 21}, - [208] = {.lex_state = 19}, + [207] = {.lex_state = 2}, + [208] = {.lex_state = 2}, [209] = {.lex_state = 19}, [210] = {.lex_state = 19}, [211] = {.lex_state = 2}, - [212] = {.lex_state = 2}, - [213] = {.lex_state = 19}, + [212] = {.lex_state = 19}, + [213] = {.lex_state = 21}, [214] = {.lex_state = 19}, - [215] = {.lex_state = 2}, + [215] = {.lex_state = 21}, [216] = {.lex_state = 2}, - [217] = {.lex_state = 2}, - [218] = {.lex_state = 2}, - [219] = {.lex_state = 2}, - [220] = {.lex_state = 19}, - [221] = {.lex_state = 19}, - [222] = {.lex_state = 19}, - [223] = {.lex_state = 19}, - [224] = {.lex_state = 2}, - [225] = {.lex_state = 21}, - [226] = {.lex_state = 19}, - [227] = {.lex_state = 2}, - [228] = {.lex_state = 19}, - [229] = {.lex_state = 21}, - [230] = {.lex_state = 19}, - [231] = {.lex_state = 19}, - [232] = {.lex_state = 19}, - [233] = {.lex_state = 19}, - [234] = {.lex_state = 19}, - [235] = {.lex_state = 1}, - [236] = {.lex_state = 1}, - [237] = {.lex_state = 1}, - [238] = {.lex_state = 1}, - [239] = {.lex_state = 1}, - [240] = {.lex_state = 1}, - [241] = {.lex_state = 1}, - [242] = {.lex_state = 1}, - [243] = {.lex_state = 1}, - [244] = {.lex_state = 1}, - [245] = {.lex_state = 1}, - [246] = {.lex_state = 1}, - [247] = {.lex_state = 1}, - [248] = {.lex_state = 1}, + [217] = {.lex_state = 19}, + [218] = {.lex_state = 19}, + [219] = {.lex_state = 19}, + [220] = {.lex_state = 2}, + [221] = {.lex_state = 1}, + [222] = {.lex_state = 1}, + [223] = {.lex_state = 1}, + [224] = {.lex_state = 1}, + [225] = {.lex_state = 1}, + [226] = {.lex_state = 1}, + [227] = {.lex_state = 1}, + [228] = {.lex_state = 1}, + [229] = {.lex_state = 1}, + [230] = {.lex_state = 1}, + [231] = {.lex_state = 1}, + [232] = {.lex_state = 1}, + [233] = {.lex_state = 1}, + [234] = {.lex_state = 1}, + [235] = {.lex_state = 3}, + [236] = {.lex_state = 3}, + [237] = {.lex_state = 3}, + [238] = {.lex_state = 3}, + [239] = {.lex_state = 3}, + [240] = {.lex_state = 4}, + [241] = {.lex_state = 4}, + [242] = {.lex_state = 4}, + [243] = {.lex_state = 3}, + [244] = {.lex_state = 3}, + [245] = {.lex_state = 3}, + [246] = {.lex_state = 3}, + [247] = {.lex_state = 3}, + [248] = {.lex_state = 3}, [249] = {.lex_state = 3}, [250] = {.lex_state = 3}, - [251] = {.lex_state = 3}, - [252] = {.lex_state = 4}, - [253] = {.lex_state = 3}, - [254] = {.lex_state = 4}, - [255] = {.lex_state = 3}, - [256] = {.lex_state = 4}, - [257] = {.lex_state = 3}, - [258] = {.lex_state = 3}, - [259] = {.lex_state = 3}, - [260] = {.lex_state = 3}, - [261] = {.lex_state = 3}, - [262] = {.lex_state = 3}, - [263] = {.lex_state = 3}, - [264] = {.lex_state = 3}, + [251] = {.lex_state = 1}, + [252] = {.lex_state = 1}, + [253] = {.lex_state = 1}, + [254] = {.lex_state = 0}, + [255] = {.lex_state = 1}, + [256] = {.lex_state = 1}, + [257] = {.lex_state = 1}, + [258] = {.lex_state = 1}, + [259] = {.lex_state = 1}, + [260] = {.lex_state = 1}, + [261] = {.lex_state = 1}, + [262] = {.lex_state = 1}, + [263] = {.lex_state = 1}, + [264] = {.lex_state = 1}, [265] = {.lex_state = 1}, [266] = {.lex_state = 1}, - [267] = {.lex_state = 1}, + [267] = {.lex_state = 0}, [268] = {.lex_state = 0}, [269] = {.lex_state = 1}, - [270] = {.lex_state = 1}, + [270] = {.lex_state = 0}, [271] = {.lex_state = 1}, - [272] = {.lex_state = 1}, + [272] = {.lex_state = 0}, [273] = {.lex_state = 1}, - [274] = {.lex_state = 1}, + [274] = {.lex_state = 0}, [275] = {.lex_state = 1}, [276] = {.lex_state = 1}, [277] = {.lex_state = 1}, [278] = {.lex_state = 1}, - [279] = {.lex_state = 1}, + [279] = {.lex_state = 0}, [280] = {.lex_state = 1}, [281] = {.lex_state = 0}, - [282] = {.lex_state = 0}, - [283] = {.lex_state = 0}, + [282] = {.lex_state = 1}, + [283] = {.lex_state = 1}, [284] = {.lex_state = 1}, - [285] = {.lex_state = 1}, + [285] = {.lex_state = 0}, [286] = {.lex_state = 1}, - [287] = {.lex_state = 0}, + [287] = {.lex_state = 20}, [288] = {.lex_state = 1}, [289] = {.lex_state = 1}, - [290] = {.lex_state = 1}, - [291] = {.lex_state = 0}, - [292] = {.lex_state = 1}, + [290] = {.lex_state = 20}, + [291] = {.lex_state = 1}, + [292] = {.lex_state = 0}, [293] = {.lex_state = 0}, - [294] = {.lex_state = 1}, + [294] = {.lex_state = 20}, [295] = {.lex_state = 0}, - [296] = {.lex_state = 0}, - [297] = {.lex_state = 0}, + [296] = {.lex_state = 1}, + [297] = {.lex_state = 20}, [298] = {.lex_state = 0}, - [299] = {.lex_state = 1}, + [299] = {.lex_state = 0}, [300] = {.lex_state = 20}, - [301] = {.lex_state = 1}, - [302] = {.lex_state = 1}, - [303] = {.lex_state = 1}, - [304] = {.lex_state = 20}, - [305] = {.lex_state = 1}, - [306] = {.lex_state = 20}, + [301] = {.lex_state = 0}, + [302] = {.lex_state = 0}, + [303] = {.lex_state = 0}, + [304] = {.lex_state = 4}, + [305] = {.lex_state = 0}, + [306] = {.lex_state = 1}, [307] = {.lex_state = 0}, [308] = {.lex_state = 1}, - [309] = {.lex_state = 0}, - [310] = {.lex_state = 1}, - [311] = {.lex_state = 1}, - [312] = {.lex_state = 20}, - [313] = {.lex_state = 1}, - [314] = {.lex_state = 0}, - [315] = {.lex_state = 0}, - [316] = {.lex_state = 0}, - [317] = {.lex_state = 0}, - [318] = {.lex_state = 0}, - [319] = {.lex_state = 1}, - [320] = {.lex_state = 0}, - [321] = {.lex_state = 4}, - [322] = {.lex_state = 20}, - [323] = {.lex_state = 0}, - [324] = {.lex_state = 1}, - [325] = {.lex_state = 19}, - [326] = {.lex_state = 0}, - [327] = {.lex_state = 1}, - [328] = {.lex_state = 1}, - [329] = {.lex_state = 1}, - [330] = {.lex_state = 0}, + [309] = {.lex_state = 1}, + [310] = {.lex_state = 0}, + [311] = {.lex_state = 19}, + [312] = {.lex_state = 0}, + [313] = {.lex_state = 0}, + [314] = {.lex_state = 1}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -2361,202 +2306,195 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_GT_GT_GT] = ACTIONS(1), }, [STATE(1)] = { - [sym_source_file] = STATE(318), - [sym_base_ten] = STATE(303), - [sym_octal] = STATE(303), - [sym_hex] = STATE(303), - [sym_binary] = STATE(303), - [sym_integer] = STATE(301), - [sym_signed_integer] = STATE(108), - [sym_unsigned_integer] = STATE(108), + [sym_source_file] = STATE(313), + [sym_base_ten] = STATE(282), + [sym_octal] = STATE(282), + [sym_hex] = STATE(282), + [sym_binary] = STATE(282), + [sym_integer] = STATE(284), + [sym_signed_integer] = STATE(122), + [sym_unsigned_integer] = STATE(122), [sym_number] = STATE(80), [sym__float] = STATE(79), - [sym_scalar] = STATE(108), - [sym_vector2] = STATE(108), - [sym_vector3] = STATE(108), - [sym_vector4] = STATE(108), - [sym_boolean] = STATE(108), - [sym_function_call] = STATE(108), - [sym_method_call] = STATE(108), - [sym_expression] = STATE(214), - [sym_unary_expression] = STATE(108), - [sym_binary_expression] = STATE(108), - [sym_if] = STATE(108), - [sym_let_in] = STATE(108), - [sym_identity_path] = STATE(108), - [sym_self_path] = STATE(108), - [sym_parenthesis] = STATE(108), - [sym_list] = STATE(108), - [sym_struct_definition] = STATE(130), - [sym_dictionary_construction] = STATE(108), - [sym_closure_definition] = STATE(108), - [sym_formula] = STATE(108), + [sym_scalar] = STATE(122), + [sym_vector2] = STATE(122), + [sym_vector3] = STATE(122), + [sym_vector4] = STATE(122), + [sym_boolean] = STATE(122), + [sym_function_call] = STATE(122), + [sym_method_call] = STATE(122), + [sym_expression] = STATE(206), + [sym_unary_expression] = STATE(122), + [sym_binary_expression] = STATE(122), + [sym_if] = STATE(122), + [sym_let_in] = STATE(122), + [sym_member_access] = STATE(122), + [sym_parenthesis] = STATE(122), + [sym_list] = STATE(122), + [sym_struct_definition] = STATE(112), + [sym_dictionary_construction] = STATE(122), + [sym_closure_definition] = STATE(122), + [sym_formula] = STATE(122), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), - [sym_self] = ACTIONS(9), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [anon_sym_LT_LPAREN] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_DASH] = ACTIONS(23), - [anon_sym_PLUS] = ACTIONS(23), - [anon_sym_BANG] = ACTIONS(23), - [anon_sym_if] = ACTIONS(25), - [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(29), - [anon_sym_LBRACK] = ACTIONS(31), - [anon_sym_LT_LT_LT] = ACTIONS(33), + [sym_self] = ACTIONS(5), + [aux_sym_base_ten_token1] = ACTIONS(9), + [aux_sym_octal_token1] = ACTIONS(11), + [aux_sym_hex_token1] = ACTIONS(13), + [aux_sym_binary_token1] = ACTIONS(15), + [anon_sym_LT_LPAREN] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_DASH] = ACTIONS(21), + [anon_sym_PLUS] = ACTIONS(21), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_if] = ACTIONS(23), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(27), + [anon_sym_LBRACK] = ACTIONS(29), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(2)] = { - [sym_base_ten] = STATE(303), - [sym_octal] = STATE(303), - [sym_hex] = STATE(303), - [sym_binary] = STATE(303), - [sym_integer] = STATE(301), - [sym_signed_integer] = STATE(108), - [sym_unsigned_integer] = STATE(108), + [sym_base_ten] = STATE(282), + [sym_octal] = STATE(282), + [sym_hex] = STATE(282), + [sym_binary] = STATE(282), + [sym_integer] = STATE(284), + [sym_signed_integer] = STATE(122), + [sym_unsigned_integer] = STATE(122), [sym_number] = STATE(80), [sym__float] = STATE(79), - [sym_scalar] = STATE(108), - [sym_vector2] = STATE(108), - [sym_vector3] = STATE(108), - [sym_vector4] = STATE(108), - [sym_boolean] = STATE(108), - [sym_function_call] = STATE(108), - [sym_method_call] = STATE(108), - [sym_expression] = STATE(222), - [sym_unary_expression] = STATE(108), - [sym_binary_expression] = STATE(108), - [sym_if] = STATE(108), - [sym_let_in] = STATE(108), - [sym_identity_path] = STATE(108), - [sym_self_path] = STATE(108), - [sym_parenthesis] = STATE(108), - [sym_list] = STATE(108), - [sym_struct_member] = STATE(297), - [sym__struct_final_element] = STATE(315), - [sym_struct_definition] = STATE(130), - [sym_dictionary_member_assignment] = STATE(283), - [sym_dictionary_construction] = STATE(108), - [sym_closure_definition] = STATE(108), - [sym_formula] = STATE(108), - [aux_sym_struct_definition_repeat1] = STATE(269), - [sym_identifier] = ACTIONS(35), + [sym_scalar] = STATE(122), + [sym_vector2] = STATE(122), + [sym_vector3] = STATE(122), + [sym_vector4] = STATE(122), + [sym_boolean] = STATE(122), + [sym_function_call] = STATE(122), + [sym_method_call] = STATE(122), + [sym_expression] = STATE(189), + [sym_unary_expression] = STATE(122), + [sym_binary_expression] = STATE(122), + [sym_if] = STATE(122), + [sym_let_in] = STATE(122), + [sym_member_access] = STATE(122), + [sym_parenthesis] = STATE(122), + [sym_list] = STATE(122), + [sym_struct_member] = STATE(292), + [sym__struct_final_element] = STATE(302), + [sym_struct_definition] = STATE(112), + [sym_dictionary_member_assignment] = STATE(268), + [sym_dictionary_construction] = STATE(122), + [sym_closure_definition] = STATE(122), + [sym_formula] = STATE(122), + [aux_sym_struct_definition_repeat1] = STATE(256), + [sym_identifier] = ACTIONS(33), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), - [sym_self] = ACTIONS(9), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [anon_sym_LT_LPAREN] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_DASH] = ACTIONS(23), - [anon_sym_PLUS] = ACTIONS(23), - [anon_sym_BANG] = ACTIONS(23), - [anon_sym_if] = ACTIONS(25), - [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(29), - [anon_sym_RPAREN] = ACTIONS(37), - [anon_sym_LBRACK] = ACTIONS(31), - [sym_varadic_dots] = ACTIONS(39), - [anon_sym_LT_LT_LT] = ACTIONS(33), + [sym_self] = ACTIONS(5), + [aux_sym_base_ten_token1] = ACTIONS(9), + [aux_sym_octal_token1] = ACTIONS(11), + [aux_sym_hex_token1] = ACTIONS(13), + [aux_sym_binary_token1] = ACTIONS(15), + [anon_sym_LT_LPAREN] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_DASH] = ACTIONS(21), + [anon_sym_PLUS] = ACTIONS(21), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_if] = ACTIONS(23), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(27), + [anon_sym_RPAREN] = ACTIONS(35), + [anon_sym_LBRACK] = ACTIONS(29), + [sym_varadic_dots] = ACTIONS(37), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(3)] = { - [sym_base_ten] = STATE(303), - [sym_octal] = STATE(303), - [sym_hex] = STATE(303), - [sym_binary] = STATE(303), - [sym_integer] = STATE(301), - [sym_signed_integer] = STATE(108), - [sym_unsigned_integer] = STATE(108), + [sym_base_ten] = STATE(282), + [sym_octal] = STATE(282), + [sym_hex] = STATE(282), + [sym_binary] = STATE(282), + [sym_integer] = STATE(284), + [sym_signed_integer] = STATE(122), + [sym_unsigned_integer] = STATE(122), [sym_number] = STATE(80), [sym__float] = STATE(79), - [sym_scalar] = STATE(108), - [sym_vector2] = STATE(108), - [sym_vector3] = STATE(108), - [sym_vector4] = STATE(108), - [sym_boolean] = STATE(108), - [sym_function_call] = STATE(108), - [sym_method_call] = STATE(108), - [sym_expression] = STATE(202), - [sym_unary_expression] = STATE(108), - [sym_binary_expression] = STATE(108), - [sym_if] = STATE(108), - [sym_let_in] = STATE(108), - [sym_identity_path] = STATE(108), - [sym_self_path] = STATE(108), - [sym_parenthesis] = STATE(108), - [sym_list] = STATE(108), - [sym_struct_member] = STATE(297), - [sym__struct_final_element] = STATE(316), - [sym_struct_definition] = STATE(130), - [sym_dictionary_member_assignment] = STATE(291), - [sym_dictionary_construction] = STATE(108), - [sym_closure_definition] = STATE(108), - [sym_formula] = STATE(108), - [aux_sym_struct_definition_repeat1] = STATE(272), - [sym_identifier] = ACTIONS(35), + [sym_scalar] = STATE(122), + [sym_vector2] = STATE(122), + [sym_vector3] = STATE(122), + [sym_vector4] = STATE(122), + [sym_boolean] = STATE(122), + [sym_function_call] = STATE(122), + [sym_method_call] = STATE(122), + [sym_expression] = STATE(210), + [sym_unary_expression] = STATE(122), + [sym_binary_expression] = STATE(122), + [sym_if] = STATE(122), + [sym_let_in] = STATE(122), + [sym_member_access] = STATE(122), + [sym_parenthesis] = STATE(122), + [sym_list] = STATE(122), + [sym_struct_member] = STATE(292), + [sym__struct_final_element] = STATE(301), + [sym_struct_definition] = STATE(112), + [sym_dictionary_member_assignment] = STATE(272), + [sym_dictionary_construction] = STATE(122), + [sym_closure_definition] = STATE(122), + [sym_formula] = STATE(122), + [aux_sym_struct_definition_repeat1] = STATE(257), + [sym_identifier] = ACTIONS(33), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), [sym_string] = ACTIONS(7), - [sym_self] = ACTIONS(9), - [aux_sym_base_ten_token1] = ACTIONS(11), - [aux_sym_octal_token1] = ACTIONS(13), - [aux_sym_hex_token1] = ACTIONS(15), - [aux_sym_binary_token1] = ACTIONS(17), - [anon_sym_LT_LPAREN] = ACTIONS(19), - [sym_true] = ACTIONS(21), - [sym_false] = ACTIONS(21), - [anon_sym_DASH] = ACTIONS(23), - [anon_sym_PLUS] = ACTIONS(23), - [anon_sym_BANG] = ACTIONS(23), - [anon_sym_if] = ACTIONS(25), - [anon_sym_let] = ACTIONS(27), - [anon_sym_LPAREN] = ACTIONS(29), - [anon_sym_RPAREN] = ACTIONS(41), - [anon_sym_LBRACK] = ACTIONS(31), - [sym_varadic_dots] = ACTIONS(39), - [anon_sym_LT_LT_LT] = ACTIONS(33), + [sym_self] = ACTIONS(5), + [aux_sym_base_ten_token1] = ACTIONS(9), + [aux_sym_octal_token1] = ACTIONS(11), + [aux_sym_hex_token1] = ACTIONS(13), + [aux_sym_binary_token1] = ACTIONS(15), + [anon_sym_LT_LPAREN] = ACTIONS(17), + [sym_true] = ACTIONS(19), + [sym_false] = ACTIONS(19), + [anon_sym_DASH] = ACTIONS(21), + [anon_sym_PLUS] = ACTIONS(21), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_if] = ACTIONS(23), + [anon_sym_let] = ACTIONS(25), + [anon_sym_LPAREN] = ACTIONS(27), + [anon_sym_RPAREN] = ACTIONS(39), + [anon_sym_LBRACK] = ACTIONS(29), + [sym_varadic_dots] = ACTIONS(37), + [anon_sym_LT_LT_LT] = ACTIONS(31), }, }; static const uint16_t ts_small_parse_table[] = { - [0] = 25, - ACTIONS(5), 1, - sym_identifier, + [0] = 24, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(43), 1, + ACTIONS(41), 1, anon_sym_RBRACK, STATE(5), 1, aux_sym_list_repeat1, @@ -2564,28 +2502,31 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(80), 1, sym_number, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(162), 1, + STATE(160), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2599,70 +2540,68 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [102] = 25, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, + [99] = 24, + ACTIONS(46), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, + ACTIONS(49), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(52), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(55), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(58), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(61), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(70), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(73), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(76), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(79), 1, anon_sym_LBRACK, - ACTIONS(33), 1, - anon_sym_LT_LT_LT, - ACTIONS(45), 1, + ACTIONS(82), 1, anon_sym_RBRACK, - STATE(6), 1, + ACTIONS(84), 1, + anon_sym_LT_LT_LT, + STATE(5), 1, aux_sym_list_repeat1, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(149), 1, + STATE(205), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(43), 2, + sym_identifier, + sym_self, + ACTIONS(64), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(67), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2676,70 +2615,68 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [204] = 25, - ACTIONS(47), 1, - sym_identifier, - ACTIONS(50), 1, + [198] = 24, + ACTIONS(7), 1, sym_string, - ACTIONS(53), 1, - sym_self, - ACTIONS(56), 1, + ACTIONS(9), 1, aux_sym_base_ten_token1, - ACTIONS(59), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(62), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(65), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(68), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(77), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(80), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(83), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(86), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(89), 1, - anon_sym_RBRACK, - ACTIONS(91), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(6), 1, + ACTIONS(87), 1, + anon_sym_RBRACK, + STATE(4), 1, aux_sym_list_repeat1, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(220), 1, + STATE(165), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(71), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(74), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2753,41 +2690,36 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [306] = 25, - ACTIONS(5), 1, - sym_identifier, + [297] = 24, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(94), 1, + ACTIONS(89), 1, anon_sym_RBRACK, STATE(8), 1, aux_sym_list_repeat1, @@ -2795,28 +2727,31 @@ static const uint16_t ts_small_parse_table[] = { sym__float, STATE(80), 1, sym_number, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(176), 1, + STATE(150), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2830,70 +2765,68 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [408] = 25, - ACTIONS(5), 1, - sym_identifier, + [396] = 24, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(96), 1, + ACTIONS(91), 1, anon_sym_RBRACK, - STATE(6), 1, + STATE(5), 1, aux_sym_list_repeat1, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(177), 1, + STATE(152), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2907,66 +2840,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [510] = 23, - ACTIONS(5), 1, - sym_identifier, + [495] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, - anon_sym_if, ACTIONS(27), 1, - anon_sym_let, - ACTIONS(29), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + ACTIONS(93), 1, + aux_sym_base_ten_token1, + ACTIONS(97), 1, + anon_sym_if, + ACTIONS(99), 1, + anon_sym_let, + STATE(129), 1, sym__float, - STATE(80), 1, + STATE(133), 1, sym_number, - STATE(106), 1, + STATE(178), 1, sym_expression, - STATE(130), 1, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2980,66 +2911,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [606] = 23, - ACTIONS(5), 1, - sym_identifier, + [588] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(210), 1, + STATE(133), 1, + sym_number, + STATE(169), 1, sym_expression, - STATE(230), 1, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3053,66 +2982,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [702] = 23, - ACTIONS(5), 1, - sym_identifier, + [681] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(113), 1, + STATE(95), 1, sym_expression, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3126,66 +3053,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [798] = 23, - ACTIONS(5), 1, - sym_identifier, + [774] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(98), 1, + STATE(90), 1, sym_expression, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3199,66 +3124,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [894] = 23, - ACTIONS(5), 1, - sym_identifier, + [867] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(114), 1, + STATE(97), 1, sym_expression, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3272,66 +3195,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [990] = 23, - ACTIONS(5), 1, - sym_identifier, + [960] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(115), 1, + STATE(98), 1, sym_expression, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3345,66 +3266,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1086] = 23, - ACTIONS(5), 1, - sym_identifier, + [1053] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(116), 1, + STATE(99), 1, sym_expression, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3418,66 +3337,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1182] = 23, - ACTIONS(5), 1, - sym_identifier, + [1146] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(117), 1, + STATE(100), 1, sym_expression, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3491,66 +3408,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1278] = 23, - ACTIONS(5), 1, - sym_identifier, + [1239] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(118), 1, + STATE(101), 1, sym_expression, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3564,66 +3479,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1374] = 23, - ACTIONS(5), 1, - sym_identifier, + [1332] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(119), 1, + STATE(102), 1, sym_expression, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3637,66 +3550,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1470] = 23, - ACTIONS(5), 1, - sym_identifier, + [1425] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(120), 1, + STATE(103), 1, sym_expression, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3710,66 +3621,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1566] = 23, - ACTIONS(5), 1, - sym_identifier, + [1518] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(121), 1, + STATE(104), 1, sym_expression, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3783,66 +3692,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1662] = 23, - ACTIONS(5), 1, - sym_identifier, + [1611] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(122), 1, + STATE(105), 1, sym_expression, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3856,66 +3763,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1758] = 23, - ACTIONS(5), 1, - sym_identifier, + [1704] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(206), 1, + STATE(192), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3929,66 +3834,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1854] = 23, - ACTIONS(13), 1, + [1797] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(159), 1, + STATE(130), 1, + sym_number, + STATE(145), 1, sym_expression, - STATE(302), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4002,66 +3905,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [1950] = 23, - ACTIONS(5), 1, - sym_identifier, + [1890] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(207), 1, + STATE(200), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4075,66 +3976,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2046] = 23, - ACTIONS(5), 1, - sym_identifier, + [1983] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(208), 1, + STATE(201), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4148,66 +4047,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2142] = 23, - ACTIONS(5), 1, - sym_identifier, + [2076] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(124), 1, + STATE(107), 1, sym_expression, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4221,66 +4118,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2238] = 23, - ACTIONS(5), 1, - sym_identifier, + [2169] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(160), 1, + STATE(147), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4294,66 +4189,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2334] = 23, - ACTIONS(5), 1, - sym_identifier, + [2262] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(141), 1, + STATE(131), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4367,66 +4260,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2430] = 23, - ACTIONS(5), 1, - sym_identifier, + [2355] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(180), 1, + STATE(168), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4440,66 +4331,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2526] = 23, - ACTIONS(5), 1, - sym_identifier, + [2448] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(125), 1, - sym_expression, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(139), 1, + sym_expression, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4513,66 +4402,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2622] = 23, - ACTIONS(13), 1, + [2541] = 22, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, - sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, - aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(79), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(163), 1, + STATE(80), 1, + sym_number, + STATE(91), 1, sym_expression, - STATE(302), 1, + STATE(112), 1, + sym_struct_definition, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4586,66 +4473,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2718] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, + [2634] = 22, ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(103), 1, + sym_string, + ACTIONS(105), 1, + aux_sym_base_ten_token1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(126), 1, sym__float, - STATE(80), 1, + STATE(130), 1, sym_number, - STATE(99), 1, + STATE(151), 1, sym_expression, - STATE(130), 1, + STATE(163), 1, sym_struct_definition, - STATE(301), 1, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4659,66 +4544,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2814] = 23, - ACTIONS(5), 1, - sym_identifier, + [2727] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(107), 1, - sym_expression, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(118), 1, + sym_expression, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4732,66 +4615,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [2910] = 23, - ACTIONS(5), 1, - sym_identifier, + [2820] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_let, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, - aux_sym_base_ten_token1, - ACTIONS(102), 1, - anon_sym_if, - ACTIONS(104), 1, - anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(79), 1, sym__float, - STATE(221), 1, + STATE(80), 1, + sym_number, + STATE(92), 1, sym_expression, - STATE(230), 1, + STATE(112), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4805,66 +4686,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3006] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + [2913] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(103), 1, + sym_string, + ACTIONS(105), 1, + aux_sym_base_ten_token1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(113), 1, + anon_sym_if, + ACTIONS(115), 1, + anon_sym_let, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, - aux_sym_base_ten_token1, - ACTIONS(102), 1, - anon_sym_if, - ACTIONS(104), 1, - anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(126), 1, sym__float, - STATE(213), 1, - sym_expression, - STATE(230), 1, + STATE(130), 1, + sym_number, + STATE(163), 1, sym_struct_definition, - STATE(301), 1, + STATE(207), 1, + sym_expression, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4878,66 +4757,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3102] = 23, - ACTIONS(5), 1, - sym_identifier, + [3006] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(226), 1, + STATE(133), 1, + sym_number, + STATE(209), 1, sym_expression, - STATE(230), 1, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4951,66 +4828,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3198] = 23, - ACTIONS(5), 1, - sym_identifier, + [3099] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(98), 1, - sym_expression, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(230), 1, + STATE(133), 1, + sym_number, + STATE(171), 1, + sym_expression, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5024,66 +4899,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3294] = 23, - ACTIONS(5), 1, - sym_identifier, + [3192] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(186), 1, + STATE(133), 1, + sym_number, + STATE(176), 1, sym_expression, - STATE(230), 1, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5097,66 +4970,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3390] = 23, - ACTIONS(5), 1, - sym_identifier, + [3285] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, - sym__float, - STATE(183), 1, + STATE(90), 1, sym_expression, - STATE(230), 1, + STATE(129), 1, + sym__float, + STATE(133), 1, + sym_number, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5170,66 +5041,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3486] = 23, - ACTIONS(5), 1, - sym_identifier, + [3378] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(184), 1, + STATE(133), 1, + sym_number, + STATE(177), 1, sym_expression, - STATE(230), 1, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5243,66 +5112,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3582] = 23, - ACTIONS(5), 1, - sym_identifier, + [3471] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(185), 1, + STATE(133), 1, + sym_number, + STATE(191), 1, sym_expression, - STATE(230), 1, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5316,66 +5183,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3678] = 23, - ACTIONS(5), 1, - sym_identifier, + [3564] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(230), 1, - sym_struct_definition, - STATE(234), 1, + STATE(133), 1, + sym_number, + STATE(179), 1, sym_expression, - STATE(301), 1, + STATE(217), 1, + sym_struct_definition, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5389,66 +5254,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3774] = 23, - ACTIONS(5), 1, - sym_identifier, + [3657] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(187), 1, + STATE(133), 1, + sym_number, + STATE(180), 1, sym_expression, - STATE(230), 1, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5462,66 +5325,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3870] = 23, - ACTIONS(5), 1, - sym_identifier, + [3750] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(188), 1, + STATE(133), 1, + sym_number, + STATE(182), 1, sym_expression, - STATE(230), 1, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5535,66 +5396,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [3966] = 23, - ACTIONS(5), 1, - sym_identifier, + [3843] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(189), 1, + STATE(133), 1, + sym_number, + STATE(183), 1, sym_expression, - STATE(230), 1, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5608,66 +5467,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [4062] = 23, - ACTIONS(5), 1, - sym_identifier, + [3936] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(190), 1, + STATE(133), 1, + sym_number, + STATE(184), 1, sym_expression, - STATE(230), 1, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5681,66 +5538,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [4158] = 23, - ACTIONS(5), 1, - sym_identifier, + [4029] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(192), 1, + STATE(133), 1, + sym_number, + STATE(185), 1, sym_expression, - STATE(230), 1, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5754,66 +5609,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [4254] = 23, - ACTIONS(5), 1, - sym_identifier, + [4122] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(198), 1, + STATE(133), 1, + sym_number, + STATE(187), 1, sym_expression, - STATE(230), 1, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5827,66 +5680,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [4350] = 23, - ACTIONS(5), 1, - sym_identifier, + [4215] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(199), 1, + STATE(133), 1, + sym_number, + STATE(196), 1, sym_expression, - STATE(230), 1, + STATE(217), 1, sym_struct_definition, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5900,66 +5751,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [4446] = 23, - ACTIONS(13), 1, + [4308] = 22, + ACTIONS(7), 1, + sym_string, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, - sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, - aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, - anon_sym_if, - ACTIONS(122), 1, - anon_sym_let, - ACTIONS(124), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + ACTIONS(93), 1, + aux_sym_base_ten_token1, + ACTIONS(97), 1, + anon_sym_if, + ACTIONS(99), 1, + anon_sym_let, + STATE(129), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(150), 1, + STATE(133), 1, + sym_number, + STATE(197), 1, sym_expression, - STATE(302), 1, + STATE(217), 1, + sym_struct_definition, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5973,66 +5822,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [4542] = 23, - ACTIONS(13), 1, + [4401] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, + STATE(130), 1, + sym_number, + STATE(163), 1, sym_struct_definition, - STATE(161), 1, + STATE(164), 1, sym_expression, - STATE(302), 1, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6046,66 +5893,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [4638] = 23, - ACTIONS(13), 1, + [4494] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, + STATE(130), 1, + sym_number, + STATE(163), 1, sym_struct_definition, - STATE(181), 1, + STATE(166), 1, sym_expression, - STATE(302), 1, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6119,66 +5964,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [4734] = 23, - ACTIONS(13), 1, + [4587] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(157), 1, + STATE(130), 1, + sym_number, + STATE(156), 1, sym_expression, - STATE(302), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6192,66 +6035,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [4830] = 23, - ACTIONS(13), 1, + [4680] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, + STATE(130), 1, + sym_number, STATE(148), 1, - sym_struct_definition, - STATE(164), 1, sym_expression, - STATE(302), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6265,66 +6106,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [4926] = 23, - ACTIONS(13), 1, + [4773] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(165), 1, + STATE(130), 1, + sym_number, + STATE(157), 1, sym_expression, - STATE(302), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6338,66 +6177,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [5022] = 23, - ACTIONS(13), 1, + [4866] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(166), 1, + STATE(130), 1, + sym_number, + STATE(158), 1, sym_expression, - STATE(302), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6411,66 +6248,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [5118] = 23, - ACTIONS(13), 1, + [4959] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(167), 1, + STATE(130), 1, + sym_number, + STATE(159), 1, sym_expression, - STATE(302), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6484,66 +6319,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [5214] = 23, - ACTIONS(13), 1, + [5052] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(168), 1, - sym_expression, - STATE(302), 1, - sym_integer, + STATE(130), 1, + sym_number, + STATE(161), 1, + sym_expression, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6557,66 +6390,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [5310] = 23, - ACTIONS(13), 1, + [5145] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(169), 1, + STATE(130), 1, + sym_number, + STATE(162), 1, sym_expression, - STATE(302), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6630,66 +6461,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [5406] = 23, - ACTIONS(13), 1, + [5238] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(170), 1, + STATE(130), 1, + sym_number, + STATE(134), 1, sym_expression, - STATE(302), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6703,66 +6532,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [5502] = 23, - ACTIONS(13), 1, + [5331] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, + STATE(126), 1, + sym__float, + STATE(130), 1, sym_number, STATE(135), 1, - sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(171), 1, sym_expression, - STATE(302), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6776,66 +6603,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [5598] = 23, - ACTIONS(13), 1, + [5424] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(172), 1, + STATE(130), 1, + sym_number, + STATE(136), 1, sym_expression, - STATE(302), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6849,66 +6674,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [5694] = 23, - ACTIONS(13), 1, + [5517] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(173), 1, + STATE(130), 1, + sym_number, + STATE(137), 1, sym_expression, - STATE(302), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6922,66 +6745,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [5790] = 23, - ACTIONS(13), 1, + [5610] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(174), 1, + STATE(130), 1, + sym_number, + STATE(138), 1, sym_expression, - STATE(302), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6995,66 +6816,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [5886] = 23, - ACTIONS(13), 1, + [5703] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(175), 1, + STATE(130), 1, + sym_number, + STATE(141), 1, sym_expression, - STATE(302), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7068,66 +6887,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [5982] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, + [5796] = 22, ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(103), 1, + sym_string, + ACTIONS(105), 1, + aux_sym_base_ten_token1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(126), 1, sym__float, - STATE(80), 1, - sym_number, STATE(130), 1, - sym_struct_definition, - STATE(209), 1, + sym_number, + STATE(142), 1, sym_expression, - STATE(301), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7141,66 +6958,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [6078] = 23, - ACTIONS(5), 1, - sym_identifier, + [5889] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(130), 1, - sym_struct_definition, - STATE(223), 1, + STATE(93), 1, sym_expression, - STATE(301), 1, + STATE(112), 1, + sym_struct_definition, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7214,66 +7029,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [6174] = 23, - ACTIONS(13), 1, + [5982] = 22, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, - sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, - aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(79), 1, sym__float, - STATE(148), 1, + STATE(80), 1, + sym_number, + STATE(112), 1, sym_struct_definition, - STATE(178), 1, + STATE(212), 1, sym_expression, - STATE(302), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7287,66 +7100,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [6270] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, + [6075] = 22, ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(103), 1, + sym_string, + ACTIONS(105), 1, + aux_sym_base_ten_token1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(126), 1, sym__float, - STATE(80), 1, - sym_number, STATE(130), 1, - sym_struct_definition, - STATE(225), 1, + sym_number, + STATE(153), 1, sym_expression, - STATE(301), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7360,66 +7171,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [6366] = 23, - ACTIONS(13), 1, + [6168] = 22, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, - sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, - aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(79), 1, sym__float, - STATE(148), 1, + STATE(80), 1, + sym_number, + STATE(112), 1, sym_struct_definition, - STATE(179), 1, + STATE(213), 1, sym_expression, - STATE(302), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7433,66 +7242,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [6462] = 23, - ACTIONS(13), 1, + [6261] = 22, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, + ACTIONS(103), 1, sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, + ACTIONS(105), 1, aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(122), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(124), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + STATE(126), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(227), 1, + STATE(130), 1, + sym_number, + STATE(154), 1, sym_expression, - STATE(302), 1, + STATE(163), 1, + sym_struct_definition, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7506,66 +7313,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [6558] = 23, - ACTIONS(5), 1, - sym_identifier, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - sym_self, + [6354] = 22, ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(103), 1, + sym_string, + ACTIONS(105), 1, + aux_sym_base_ten_token1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(126), 1, sym__float, - STATE(80), 1, - sym_number, STATE(130), 1, + sym_number, + STATE(163), 1, sym_struct_definition, - STATE(228), 1, + STATE(167), 1, sym_expression, - STATE(301), 1, + STATE(286), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(208), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7579,66 +7384,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [6654] = 23, - ACTIONS(5), 1, - sym_identifier, + [6447] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(229), 1, + STATE(214), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7652,66 +7455,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [6750] = 23, - ACTIONS(5), 1, - sym_identifier, + [6540] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(11), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(25), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(27), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(130), 1, + STATE(112), 1, sym_struct_definition, - STATE(231), 1, + STATE(215), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(23), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7725,66 +7526,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [6846] = 23, - ACTIONS(5), 1, - sym_identifier, + [6633] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_let, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, - aux_sym_base_ten_token1, - ACTIONS(102), 1, - anon_sym_if, - ACTIONS(104), 1, - anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(79), 1, sym__float, - STATE(230), 1, + STATE(80), 1, + sym_number, + STATE(112), 1, sym_struct_definition, - STATE(232), 1, + STATE(218), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7798,66 +7597,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [6942] = 23, - ACTIONS(5), 1, - sym_identifier, + [6726] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - sym_self, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(19), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(29), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(31), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(33), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(98), 1, + ACTIONS(93), 1, aux_sym_base_ten_token1, - ACTIONS(102), 1, + ACTIONS(97), 1, anon_sym_if, - ACTIONS(104), 1, + ACTIONS(99), 1, anon_sym_let, - STATE(139), 1, - sym_number, - STATE(143), 1, + STATE(129), 1, sym__float, - STATE(230), 1, + STATE(133), 1, + sym_number, + STATE(217), 1, sym_struct_definition, - STATE(233), 1, + STATE(219), 1, sym_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(21), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(100), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(108), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7871,66 +7668,64 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [7038] = 23, - ACTIONS(13), 1, + [6819] = 22, + ACTIONS(7), 1, + sym_string, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(106), 1, - sym_identifier, - ACTIONS(108), 1, - sym_string, - ACTIONS(110), 1, - sym_self, - ACTIONS(112), 1, - aux_sym_base_ten_token1, - ACTIONS(114), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(120), 1, - anon_sym_if, - ACTIONS(122), 1, - anon_sym_let, - ACTIONS(124), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(126), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(128), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(134), 1, - sym_number, - STATE(135), 1, + ACTIONS(93), 1, + aux_sym_base_ten_token1, + ACTIONS(97), 1, + anon_sym_if, + ACTIONS(99), 1, + anon_sym_let, + STATE(129), 1, sym__float, - STATE(148), 1, - sym_struct_definition, - STATE(212), 1, + STATE(133), 1, + sym_number, + STATE(181), 1, sym_expression, - STATE(302), 1, + STATE(217), 1, + sym_struct_definition, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(116), 2, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(118), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(216), 20, + STATE(122), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7944,21 +7739,20 @@ static const uint16_t ts_small_parse_table[] = { sym_binary_expression, sym_if, sym_let_in, - sym_identity_path, - sym_self_path, + sym_member_access, sym_parenthesis, sym_list, sym_dictionary_construction, sym_closure_definition, sym_formula, - [7134] = 4, + [6912] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(134), 2, + ACTIONS(127), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(132), 11, + ACTIONS(125), 11, sym_identifier, anon_sym_STAR, anon_sym_GT_GT, @@ -7970,7 +7764,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(130), 22, + ACTIONS(123), 22, ts_builtin_sym_end, sym_unit_quote, anon_sym_DOT, @@ -7993,17 +7787,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7180] = 6, - ACTIONS(138), 1, + [6958] = 6, + ACTIONS(131), 1, sym_identifier, - ACTIONS(140), 1, + ACTIONS(133), 1, sym_unit_quote, - STATE(97), 1, + STATE(89), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(142), 10, + ACTIONS(135), 10, anon_sym_STAR, anon_sym_GT_GT, anon_sym_AMP, @@ -8014,8 +7808,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(136), 20, + ACTIONS(129), 21, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8035,13 +7830,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7228] = 4, - ACTIONS(148), 1, + [7007] = 4, + ACTIONS(141), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(146), 11, + ACTIONS(139), 11, sym_identifier, anon_sym_STAR, anon_sym_GT_GT, @@ -8053,7 +7848,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(144), 21, + ACTIONS(137), 21, ts_builtin_sym_end, sym_unit_quote, anon_sym_COMMA, @@ -8075,25 +7870,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7272] = 5, - ACTIONS(152), 1, - anon_sym_DOT, - STATE(83), 1, - aux_sym_identity_path_repeat1, + [7051] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(154), 8, + ACTIONS(125), 11, + sym_identifier, anon_sym_STAR, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, + anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(150), 22, + ACTIONS(123), 22, ts_builtin_sym_end, + sym_unit_quote, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8101,7 +7897,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8109,31 +7904,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7317] = 5, - ACTIONS(158), 1, - anon_sym_DOT, - STATE(85), 1, - aux_sym_self_path_repeat1, + anon_sym_GT_GT_GT, + [7093] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(160), 8, + ACTIONS(145), 11, + sym_identifier, anon_sym_STAR, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, + anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(156), 22, + ACTIONS(143), 22, ts_builtin_sym_end, + sym_unit_quote, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8141,7 +7936,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8149,21 +7943,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7362] = 5, - ACTIONS(164), 1, - anon_sym_DOT, - STATE(83), 1, - aux_sym_identity_path_repeat1, + anon_sym_GT_GT_GT, + [7135] = 4, + ACTIONS(151), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 8, + ACTIONS(149), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8172,11 +7964,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(162), 22, + ACTIONS(147), 22, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -8195,15 +7987,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7407] = 5, - ACTIONS(158), 1, - anon_sym_DOT, - STATE(82), 1, - aux_sym_self_path_repeat1, + [7178] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(171), 8, + ACTIONS(155), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8212,11 +8001,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(169), 22, + ACTIONS(153), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -8235,15 +8024,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7452] = 5, - ACTIONS(175), 1, - anon_sym_DOT, - STATE(85), 1, - aux_sym_self_path_repeat1, + anon_sym_DASH_GT, + [7219] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(178), 8, + ACTIONS(159), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8252,11 +8039,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(173), 22, + ACTIONS(157), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -8275,32 +8062,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7497] = 3, + anon_sym_DASH_GT, + [7260] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(132), 11, - sym_identifier, + ACTIONS(163), 9, + anon_sym_DASH, anon_sym_STAR, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(130), 21, + ACTIONS(161), 23, ts_builtin_sym_end, - sym_unit_quote, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8308,21 +8094,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7538] = 5, - ACTIONS(152), 1, - anon_sym_DOT, - STATE(81), 1, - aux_sym_identity_path_repeat1, + anon_sym_DASH_GT, + [7301] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(182), 8, + ACTIONS(167), 9, anon_sym_STAR, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -8330,8 +8115,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(180), 22, + ACTIONS(165), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8339,7 +8125,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8353,12 +8138,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7583] = 3, + anon_sym_GT_GT_GT, + [7342] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 11, - sym_identifier, + ACTIONS(171), 9, anon_sym_STAR, anon_sym_GT_GT, anon_sym_AMP, @@ -8366,12 +8151,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(184), 21, + ACTIONS(169), 23, ts_builtin_sym_end, - sym_unit_quote, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8386,18 +8170,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7624] = 3, + [7383] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(190), 9, - anon_sym_DASH, + ACTIONS(175), 9, anon_sym_STAR, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -8405,15 +8191,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(188), 22, + ACTIONS(173), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8427,12 +8214,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_DASH_GT, - [7664] = 3, + anon_sym_GT_GT_GT, + [7424] = 7, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + STATE(123), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 8, + ACTIONS(183), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8441,11 +8236,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(162), 23, + ACTIONS(177), 20, ts_builtin_sym_end, - anon_sym_DOT, anon_sym_COMMA, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8462,52 +8255,175 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7704] = 4, - ACTIONS(196), 1, - anon_sym_DASH_GT, + [7473] = 20, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(199), 1, + anon_sym_AMP, + ACTIONS(201), 1, + anon_sym_PIPE, + ACTIONS(203), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_AMP_AMP, + ACTIONS(211), 1, + anon_sym_PIPE_PIPE, + ACTIONS(213), 1, + anon_sym_CARET_CARET, + STATE(123), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(194), 9, + ACTIONS(189), 2, anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(197), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(205), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(215), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(207), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(187), 6, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [7547] = 20, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(199), 1, anon_sym_AMP, + ACTIONS(201), 1, anon_sym_PIPE, + ACTIONS(203), 1, anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_AMP_AMP, + ACTIONS(211), 1, + anon_sym_PIPE_PIPE, + ACTIONS(213), 1, + anon_sym_CARET_CARET, + STATE(123), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(189), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(197), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, + ACTIONS(219), 2, anon_sym_EQ, anon_sym_COLON, - ACTIONS(192), 21, + ACTIONS(207), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(217), 6, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [7621] = 20, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - anon_sym_PLUS, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, anon_sym_SLASH, + ACTIONS(199), 1, + anon_sym_AMP, + ACTIONS(201), 1, + anon_sym_PIPE, + ACTIONS(203), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_AMP_AMP, + ACTIONS(211), 1, + anon_sym_PIPE_PIPE, + ACTIONS(213), 1, + anon_sym_CARET_CARET, + STATE(123), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(189), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(205), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(223), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, + ACTIONS(221), 6, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7746] = 3, + [7695] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(200), 8, + ACTIONS(227), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8516,7 +8432,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(198), 23, + ACTIONS(225), 23, ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, @@ -8540,13 +8456,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7786] = 3, + [7735] = 10, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + STATE(123), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 9, - anon_sym_STAR, - anon_sym_GT_GT, + ACTIONS(183), 7, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -8554,15 +8482,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(202), 22, + ACTIONS(177), 17, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8570,19 +8496,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7826] = 3, + [7789] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(208), 9, - anon_sym_DASH, + ACTIONS(231), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8591,10 +8513,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(206), 22, + ACTIONS(229), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -8613,13 +8537,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_DASH_GT, - [7866] = 3, + [7829] = 8, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + STATE(123), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(212), 9, - anon_sym_DASH, + ACTIONS(183), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8628,12 +8560,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(210), 22, + ACTIONS(177), 18, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -8644,20 +8575,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_DASH_GT, - [7906] = 3, + [7879] = 11, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + STATE(123), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(216), 9, - anon_sym_STAR, - anon_sym_GT_GT, + ACTIONS(189), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(183), 7, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -8665,15 +8608,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(214), 22, + ACTIONS(177), 15, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8681,20 +8620,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7946] = 3, + [7935] = 12, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + STATE(123), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(220), 9, - anon_sym_STAR, + ACTIONS(189), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(197), 2, + anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(183), 7, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -8702,15 +8656,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(218), 22, + ACTIONS(177), 13, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8718,41 +8666,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7986] = 6, - ACTIONS(224), 1, + [7993] = 14, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - STATE(127), 1, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(199), 1, + anon_sym_AMP, + ACTIONS(203), 1, + anon_sym_CARET, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(226), 8, - anon_sym_STAR, - anon_sym_AMP, + ACTIONS(189), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(197), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(183), 5, anon_sym_PIPE, - anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(222), 20, + ACTIONS(177), 13, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8760,86 +8714,95 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8032] = 19, - ACTIONS(224), 1, + [8055] = 13, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(244), 1, - anon_sym_PIPE, - ACTIONS(246), 1, - anon_sym_CARET, - ACTIONS(252), 1, - anon_sym_AMP_AMP, - ACTIONS(254), 1, - anon_sym_PIPE_PIPE, - ACTIONS(256), 1, - anon_sym_CARET_CARET, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(183), 6, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(258), 2, anon_sym_EQ, anon_sym_COLON, - ACTIONS(250), 4, + ACTIONS(177), 13, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(230), 6, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8103] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(262), 8, + [8115] = 15, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(199), 1, anon_sym_AMP, + ACTIONS(201), 1, anon_sym_PIPE, + ACTIONS(203), 1, anon_sym_CARET, + STATE(123), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(189), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(197), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(183), 4, anon_sym_GT, anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(260), 22, + ACTIONS(177), 13, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8847,161 +8810,171 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8142] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(266), 8, + [8179] = 17, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(199), 1, anon_sym_AMP, + ACTIONS(201), 1, anon_sym_PIPE, + ACTIONS(203), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, + STATE(123), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(183), 2, anon_sym_EQ, anon_sym_COLON, - ACTIONS(264), 22, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_COLON_COLON, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(205), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(177), 9, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8181] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(270), 8, + [8247] = 18, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(199), 1, anon_sym_AMP, + ACTIONS(201), 1, anon_sym_PIPE, + ACTIONS(203), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, + ACTIONS(209), 1, + anon_sym_AMP_AMP, + STATE(123), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(183), 2, anon_sym_EQ, anon_sym_COLON, - ACTIONS(268), 22, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_COLON_COLON, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(205), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(177), 8, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8220] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(274), 8, + [8317] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(199), 1, anon_sym_AMP, + ACTIONS(201), 1, anon_sym_PIPE, + ACTIONS(203), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(272), 22, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(209), 1, anon_sym_AMP_AMP, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [8259] = 3, + STATE(123), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(278), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, + ACTIONS(183), 2, anon_sym_EQ, anon_sym_COLON, - ACTIONS(276), 22, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_COLON_COLON, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(205), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, + ACTIONS(177), 7, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8298] = 3, + [8389] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(282), 8, + ACTIONS(149), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9010,8 +8983,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(280), 22, + ACTIONS(147), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -9033,115 +9007,102 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8337] = 19, - ACTIONS(224), 1, + [8429] = 20, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(286), 2, + ACTIONS(235), 2, anon_sym_EQ, anon_sym_COLON, - ACTIONS(250), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(284), 6, + ACTIONS(233), 6, ts_builtin_sym_end, anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8408] = 19, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, + [8503] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(239), 8, anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - ACTIONS(242), 1, anon_sym_AMP, - ACTIONS(244), 1, anon_sym_PIPE, - ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(252), 1, - anon_sym_AMP_AMP, - ACTIONS(254), 1, - anon_sym_PIPE_PIPE, - ACTIONS(256), 1, - anon_sym_CARET_CARET, - STATE(127), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(232), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(240), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(248), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(290), 2, anon_sym_EQ, anon_sym_COLON, - ACTIONS(250), 4, + ACTIONS(237), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(288), 6, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8479] = 3, + [8543] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 8, + ACTIONS(243), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9150,8 +9111,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(292), 22, + ACTIONS(241), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -9173,11 +9135,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8518] = 3, + [8583] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(298), 8, + ACTIONS(247), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9186,8 +9148,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(296), 22, + ACTIONS(245), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -9209,11 +9172,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8557] = 3, + [8623] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(302), 8, + ACTIONS(251), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9222,8 +9185,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(300), 22, + ACTIONS(249), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -9245,11 +9209,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8596] = 3, + [8663] = 4, + ACTIONS(257), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(306), 8, + ACTIONS(255), 9, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9258,11 +9225,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(304), 22, + ACTIONS(253), 21, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -9275,17 +9242,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8635] = 3, + [8705] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(310), 8, + ACTIONS(261), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9294,8 +9260,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(308), 22, + ACTIONS(259), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -9317,23 +9284,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8674] = 9, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - STATE(127), 1, - sym_dictionary_construction, + [8745] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(226), 7, + ACTIONS(265), 8, + anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -9341,11 +9297,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(222), 17, + ACTIONS(263), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -9355,23 +9315,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8725] = 7, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - STATE(127), 1, - sym_dictionary_construction, + [8785] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(226), 8, + ACTIONS(269), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9380,11 +9334,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(222), 18, + ACTIONS(267), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -9395,30 +9352,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8772] = 10, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - STATE(127), 1, - sym_dictionary_construction, + [8825] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(226), 7, + ACTIONS(273), 8, + anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -9426,9 +9371,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(222), 15, + ACTIONS(271), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -9438,33 +9389,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8825] = 11, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - STATE(127), 1, - sym_dictionary_construction, + [8865] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(240), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(226), 7, + ACTIONS(277), 8, + anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -9472,9 +9408,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(222), 13, + ACTIONS(275), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -9482,90 +9426,90 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8880] = 13, - ACTIONS(224), 1, + [8905] = 20, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(246), 1, + ACTIONS(201), 1, + anon_sym_PIPE, + ACTIONS(203), 1, anon_sym_CARET, - STATE(127), 1, + ACTIONS(209), 1, + anon_sym_AMP_AMP, + ACTIONS(211), 1, + anon_sym_PIPE_PIPE, + ACTIONS(213), 1, + anon_sym_CARET_CARET, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(226), 5, - anon_sym_PIPE, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, + ACTIONS(281), 2, anon_sym_EQ, anon_sym_COLON, - ACTIONS(222), 13, - ts_builtin_sym_end, - anon_sym_COMMA, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, + ACTIONS(279), 6, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8939] = 12, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - ACTIONS(242), 1, - anon_sym_AMP, - STATE(127), 1, - sym_dictionary_construction, + [8979] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(240), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(226), 6, + ACTIONS(285), 8, + anon_sym_STAR, + anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(222), 13, + ACTIONS(283), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -9573,46 +9517,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8996] = 14, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, + [9019] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(289), 8, anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - ACTIONS(242), 1, anon_sym_AMP, - ACTIONS(244), 1, anon_sym_PIPE, - ACTIONS(246), 1, anon_sym_CARET, - STATE(127), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(232), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(240), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(226), 4, anon_sym_GT, anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(222), 13, + ACTIONS(287), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -9620,305 +9554,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [9057] = 16, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - ACTIONS(242), 1, - anon_sym_AMP, - ACTIONS(244), 1, - anon_sym_PIPE, - ACTIONS(246), 1, - anon_sym_CARET, - STATE(127), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(226), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(232), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(240), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(248), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(250), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(222), 9, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9122] = 17, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - ACTIONS(242), 1, - anon_sym_AMP, - ACTIONS(244), 1, - anon_sym_PIPE, - ACTIONS(246), 1, - anon_sym_CARET, - ACTIONS(252), 1, - anon_sym_AMP_AMP, - STATE(127), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(226), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(232), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(240), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(248), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(250), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(222), 8, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9189] = 18, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - ACTIONS(242), 1, - anon_sym_AMP, - ACTIONS(244), 1, - anon_sym_PIPE, - ACTIONS(246), 1, - anon_sym_CARET, - ACTIONS(252), 1, - anon_sym_AMP_AMP, - ACTIONS(254), 1, - anon_sym_PIPE_PIPE, - STATE(127), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(226), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(232), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(240), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(248), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(250), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(222), 7, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9258] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(194), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(192), 22, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9297] = 19, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - ACTIONS(242), 1, - anon_sym_AMP, - ACTIONS(244), 1, - anon_sym_PIPE, - ACTIONS(246), 1, - anon_sym_CARET, - ACTIONS(252), 1, - anon_sym_AMP_AMP, - ACTIONS(254), 1, - anon_sym_PIPE_PIPE, - ACTIONS(256), 1, - anon_sym_CARET_CARET, - STATE(127), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(232), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(240), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(248), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(314), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(250), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(312), 6, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9368] = 19, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - ACTIONS(242), 1, - anon_sym_AMP, - ACTIONS(244), 1, - anon_sym_PIPE, - ACTIONS(246), 1, - anon_sym_CARET, - ACTIONS(252), 1, - anon_sym_AMP_AMP, - ACTIONS(254), 1, - anon_sym_PIPE_PIPE, - ACTIONS(256), 1, - anon_sym_CARET_CARET, - STATE(127), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(232), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(240), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(248), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(318), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(250), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(316), 6, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9439] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(322), 8, + [9059] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(293), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9927,44 +9573,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(320), 22, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9478] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(326), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(324), 22, + ACTIONS(291), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -9986,11 +9597,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [9517] = 3, + [9099] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(330), 8, + ACTIONS(255), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -9999,8 +9610,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(328), 22, + ACTIONS(253), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -10022,11 +9634,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [9556] = 3, + [9139] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(334), 8, + ACTIONS(297), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -10035,8 +9647,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(332), 22, + ACTIONS(295), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -10058,51 +9671,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [9595] = 4, - ACTIONS(336), 1, - anon_sym_DASH_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(294), 9, - anon_sym_DASH, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(292), 20, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9636] = 4, + [9179] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(134), 2, + ACTIONS(127), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(132), 7, + ACTIONS(125), 7, sym_identifier, anon_sym_STAR, anon_sym_AMP, @@ -10110,7 +9686,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(130), 19, + ACTIONS(123), 19, sym_unit_quote, anon_sym_DOT, anon_sym_COMMA, @@ -10130,14 +9706,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [9675] = 4, + [9218] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(134), 2, + ACTIONS(127), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(132), 7, + ACTIONS(125), 7, sym_identifier, anon_sym_STAR, anon_sym_AMP, @@ -10145,7 +9721,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(130), 18, + ACTIONS(123), 18, sym_unit_quote, anon_sym_DOT, anon_sym_COLON_COLON, @@ -10164,94 +9740,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_CARET, anon_sym_then, anon_sym_LPAREN, - [9713] = 8, - ACTIONS(152), 1, - anon_sym_DOT, - ACTIONS(338), 1, - anon_sym_EQ, - ACTIONS(340), 1, - anon_sym_COLON, - STATE(81), 1, - aux_sym_identity_path_repeat1, - STATE(281), 1, - sym_declaration_type, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(182), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(180), 16, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - anon_sym_RPAREN, - [9759] = 4, - ACTIONS(342), 1, - anon_sym_DOT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(146), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(144), 19, - sym_identifier, - sym_unit_quote, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [9796] = 5, - STATE(205), 1, + [9256] = 5, + STATE(204), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(344), 2, + ACTIONS(299), 2, sym_identifier, sym_unit_quote, - ACTIONS(142), 6, + ACTIONS(135), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(136), 17, + ACTIONS(129), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10269,24 +9775,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [9835] = 5, - ACTIONS(346), 1, - anon_sym_DOT, - STATE(144), 1, - aux_sym_self_path_repeat1, + [9296] = 6, + ACTIONS(301), 1, + anon_sym_EQ, + ACTIONS(303), 1, + anon_sym_COLON, + STATE(267), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(160), 6, + ACTIONS(255), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(156), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(253), 17, + anon_sym_DOT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10302,20 +9809,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [9873] = 3, + anon_sym_RPAREN, + [9337] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(132), 6, + ACTIONS(145), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(130), 19, + ACTIONS(143), 20, sym_identifier, sym_unit_quote, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10333,53 +9842,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [9907] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(186), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(184), 19, + [9372] = 6, + ACTIONS(131), 1, sym_identifier, + ACTIONS(133), 1, sym_unit_quote, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [9941] = 4, - ACTIONS(348), 1, - anon_sym_DOT, + STATE(89), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(146), 7, - sym_identifier, + ACTIONS(135), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(144), 17, - sym_unit_quote, + ACTIONS(129), 17, + anon_sym_DOT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10396,22 +9877,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_CARET, anon_sym_then, anon_sym_LPAREN, - [9977] = 5, - ACTIONS(350), 1, + [9413] = 4, + ACTIONS(305), 1, anon_sym_DOT, - STATE(145), 1, - aux_sym_identity_path_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(182), 6, + ACTIONS(139), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(180), 17, + ACTIONS(137), 19, + sym_identifier, + sym_unit_quote, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10429,69 +9910,70 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [10015] = 19, - ACTIONS(224), 1, + [9450] = 20, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(354), 1, + ACTIONS(309), 1, anon_sym_EQ, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(352), 2, + ACTIONS(307), 2, anon_sym_COMMA, anon_sym_RPAREN, - ACTIONS(250), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10081] = 5, - ACTIONS(356), 1, - anon_sym_DOT, - STATE(142), 1, - aux_sym_identity_path_repeat1, + [9519] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 6, + ACTIONS(125), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(162), 17, + ACTIONS(123), 20, + sym_identifier, + sym_unit_quote, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10509,24 +9991,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [10119] = 6, - ACTIONS(138), 1, - sym_identifier, - ACTIONS(140), 1, - sym_unit_quote, - STATE(97), 1, - sym__unit, + [9554] = 4, + ACTIONS(311), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(142), 6, + ACTIONS(139), 7, + sym_identifier, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(136), 16, + ACTIONS(137), 17, + sym_unit_quote, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10543,31 +10023,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_CARET, anon_sym_then, anon_sym_LPAREN, - [10159] = 5, - ACTIONS(359), 1, + [9590] = 15, + ACTIONS(313), 1, anon_sym_DOT, - STATE(144), 1, - aux_sym_self_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(178), 6, + ACTIONS(315), 1, + anon_sym_COLON_COLON, + ACTIONS(319), 1, + anon_sym_STAR_STAR, + ACTIONS(321), 1, anon_sym_STAR, + ACTIONS(323), 1, + anon_sym_SLASH, + ACTIONS(327), 1, anon_sym_AMP, + ACTIONS(329), 1, anon_sym_PIPE, + ACTIONS(331), 1, anon_sym_CARET, + ACTIONS(333), 1, + anon_sym_LPAREN, + STATE(170), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(183), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(173), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(177), 9, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -10575,110 +10066,240 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [10197] = 5, - ACTIONS(350), 1, + [9648] = 16, + ACTIONS(313), 1, anon_sym_DOT, - STATE(142), 1, - aux_sym_identity_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(154), 6, + ACTIONS(315), 1, + anon_sym_COLON_COLON, + ACTIONS(319), 1, + anon_sym_STAR_STAR, + ACTIONS(321), 1, anon_sym_STAR, + ACTIONS(323), 1, + anon_sym_SLASH, + ACTIONS(327), 1, anon_sym_AMP, + ACTIONS(329), 1, anon_sym_PIPE, + ACTIONS(331), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(150), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(333), 1, + anon_sym_LPAREN, + STATE(170), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(335), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(177), 5, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [10235] = 5, - ACTIONS(346), 1, + [9708] = 17, + ACTIONS(313), 1, anon_sym_DOT, - STATE(136), 1, - aux_sym_self_path_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(171), 6, + ACTIONS(315), 1, + anon_sym_COLON_COLON, + ACTIONS(319), 1, + anon_sym_STAR_STAR, + ACTIONS(321), 1, anon_sym_STAR, + ACTIONS(323), 1, + anon_sym_SLASH, + ACTIONS(327), 1, anon_sym_AMP, + ACTIONS(329), 1, anon_sym_PIPE, + ACTIONS(331), 1, anon_sym_CARET, + ACTIONS(333), 1, + anon_sym_LPAREN, + ACTIONS(339), 1, + anon_sym_AMP_AMP, + STATE(170), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(317), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(325), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(169), 17, + ACTIONS(177), 4, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + ACTIONS(337), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9770] = 18, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(319), 1, anon_sym_STAR_STAR, + ACTIONS(321), 1, + anon_sym_STAR, + ACTIONS(323), 1, anon_sym_SLASH, + ACTIONS(327), 1, + anon_sym_AMP, + ACTIONS(329), 1, + anon_sym_PIPE, + ACTIONS(331), 1, + anon_sym_CARET, + ACTIONS(333), 1, + anon_sym_LPAREN, + ACTIONS(339), 1, + anon_sym_AMP_AMP, + ACTIONS(341), 1, + anon_sym_PIPE_PIPE, + STATE(170), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(317), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(335), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(177), 3, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_CARET_CARET, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + [9834] = 19, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, + anon_sym_COLON_COLON, + ACTIONS(319), 1, + anon_sym_STAR_STAR, + ACTIONS(321), 1, + anon_sym_STAR, + ACTIONS(323), 1, + anon_sym_SLASH, + ACTIONS(327), 1, + anon_sym_AMP, + ACTIONS(329), 1, + anon_sym_PIPE, + ACTIONS(331), 1, + anon_sym_CARET, + ACTIONS(333), 1, + anon_sym_LPAREN, + ACTIONS(339), 1, anon_sym_AMP_AMP, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, + ACTIONS(343), 1, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [10273] = 3, + STATE(170), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(162), 18, - anon_sym_DOT, + ACTIONS(233), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(335), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + [9900] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(199), 1, + anon_sym_AMP, + ACTIONS(201), 1, + anon_sym_PIPE, + ACTIONS(203), 1, + anon_sym_CARET, + ACTIONS(209), 1, anon_sym_AMP_AMP, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, + ACTIONS(213), 1, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [10306] = 4, - ACTIONS(362), 1, - anon_sym_DASH_GT, + STATE(123), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(189), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(197), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(205), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(345), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(207), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [9966] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 7, + ACTIONS(155), 7, anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, @@ -10686,7 +10307,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(292), 16, + ACTIONS(153), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10703,104 +10325,106 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [10341] = 19, - ACTIONS(224), 1, + anon_sym_DASH_GT, + [10000] = 19, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(321), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(327), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(329), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(331), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(333), 1, + anon_sym_LPAREN, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(343), 1, anon_sym_CARET_CARET, - ACTIONS(364), 1, - anon_sym_COMMA, - ACTIONS(366), 1, - anon_sym_RBRACK, - STATE(127), 1, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(187), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(250), 4, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10406] = 18, - ACTIONS(368), 1, + [10066] = 19, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(321), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(380), 1, + ACTIONS(327), 1, anon_sym_AMP, - ACTIONS(382), 1, + ACTIONS(329), 1, anon_sym_PIPE, - ACTIONS(384), 1, + ACTIONS(331), 1, anon_sym_CARET, - ACTIONS(390), 1, + ACTIONS(333), 1, + anon_sym_LPAREN, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(392), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(394), 1, + ACTIONS(343), 1, anon_sym_CARET_CARET, - ACTIONS(396), 1, - anon_sym_LPAREN, - STATE(211), 1, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(288), 2, + ACTIONS(279), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - ACTIONS(370), 2, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(386), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(388), 4, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10469] = 4, - ACTIONS(196), 1, - anon_sym_DASH_GT, + [10132] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(194), 7, + ACTIONS(163), 7, anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, @@ -10808,7 +10432,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(192), 16, + ACTIONS(161), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -10825,21 +10450,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [10504] = 3, + anon_sym_DASH_GT, + [10166] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(200), 6, + ACTIONS(125), 7, + sym_identifier, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(198), 18, + ACTIONS(123), 18, + sym_unit_quote, anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10854,72 +10480,61 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_LPAREN, - [10537] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(208), 7, - anon_sym_DASH, + [10200] = 20, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, + anon_sym_COLON_COLON, + ACTIONS(319), 1, + anon_sym_STAR_STAR, + ACTIONS(321), 1, anon_sym_STAR, + ACTIONS(323), 1, + anon_sym_SLASH, + ACTIONS(327), 1, anon_sym_AMP, + ACTIONS(329), 1, anon_sym_PIPE, + ACTIONS(331), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(206), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(333), 1, + anon_sym_LPAREN, + ACTIONS(339), 1, anon_sym_AMP_AMP, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, + ACTIONS(343), 1, anon_sym_CARET_CARET, - anon_sym_LPAREN, - anon_sym_DASH_GT, - [10570] = 3, + ACTIONS(347), 1, + anon_sym_COMMA, + ACTIONS(349), 1, + anon_sym_RPAREN_GT, + STATE(170), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(212), 7, + ACTIONS(317), 2, anon_sym_DASH, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(210), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(335), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - anon_sym_DASH_GT, - [10603] = 3, + [10268] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(132), 7, + ACTIONS(145), 7, sym_identifier, anon_sym_STAR, anon_sym_AMP, @@ -10927,8 +10542,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(130), 17, + ACTIONS(143), 18, sym_unit_quote, + anon_sym_DOT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10945,54 +10561,73 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_CARET, anon_sym_then, anon_sym_LPAREN, - [10636] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(186), 7, - sym_identifier, + [10302] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(199), 1, anon_sym_AMP, + ACTIONS(201), 1, anon_sym_PIPE, + ACTIONS(203), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(184), 17, - sym_unit_quote, - anon_sym_COLON_COLON, + ACTIONS(209), 1, + anon_sym_AMP_AMP, + ACTIONS(211), 1, + anon_sym_PIPE_PIPE, + ACTIONS(213), 1, + anon_sym_CARET_CARET, + STATE(123), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(205), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(351), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_LPAREN, - [10669] = 6, - ACTIONS(368), 1, + [10368] = 7, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(396), 1, + ACTIONS(333), 1, anon_sym_LPAREN, - STATE(211), 1, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(226), 6, + ACTIONS(183), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 15, + ACTIONS(177), 15, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_DASH, @@ -11008,11 +10643,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [10708] = 3, + [10410] = 4, + ACTIONS(151), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(190), 7, + ACTIONS(149), 7, anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, @@ -11020,7 +10657,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(188), 17, + ACTIONS(147), 17, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -11037,259 +10675,265 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - anon_sym_DASH_GT, - [10741] = 19, - ACTIONS(368), 1, + [10446] = 20, + ACTIONS(91), 1, + anon_sym_RBRACK, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(380), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(382), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(384), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(390), 1, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(392), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(394), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(396), 1, - anon_sym_LPAREN, - ACTIONS(398), 1, + ACTIONS(353), 1, anon_sym_COMMA, - ACTIONS(400), 1, - anon_sym_RPAREN_GT, - STATE(211), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(370), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(386), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(388), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10806] = 18, - ACTIONS(224), 1, + [10514] = 20, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(321), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(327), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(329), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(331), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(333), 1, + anon_sym_LPAREN, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(343), 1, anon_sym_CARET_CARET, - STATE(127), 1, + ACTIONS(355), 1, + anon_sym_COMMA, + ACTIONS(357), 1, + anon_sym_RPAREN_GT, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(402), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(250), 4, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10869] = 18, - ACTIONS(368), 1, + [10582] = 20, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(380), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(382), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(384), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(390), 1, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(392), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(394), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(396), 1, - anon_sym_LPAREN, - STATE(211), 1, + ACTIONS(353), 1, + anon_sym_COMMA, + ACTIONS(359), 1, + anon_sym_RBRACK, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(284), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(370), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(386), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(388), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10932] = 19, - ACTIONS(45), 1, - anon_sym_RBRACK, - ACTIONS(224), 1, + [10650] = 20, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(321), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(327), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(329), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(331), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(333), 1, + anon_sym_LPAREN, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(343), 1, anon_sym_CARET_CARET, - ACTIONS(364), 1, + ACTIONS(361), 1, anon_sym_COMMA, - STATE(127), 1, + ACTIONS(363), 1, + anon_sym_RPAREN_GT, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(250), 4, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10997] = 19, - ACTIONS(368), 1, + [10718] = 20, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(321), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(380), 1, + ACTIONS(327), 1, anon_sym_AMP, - ACTIONS(382), 1, + ACTIONS(329), 1, anon_sym_PIPE, - ACTIONS(384), 1, + ACTIONS(331), 1, anon_sym_CARET, - ACTIONS(390), 1, + ACTIONS(333), 1, + anon_sym_LPAREN, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(392), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(394), 1, + ACTIONS(343), 1, anon_sym_CARET_CARET, - ACTIONS(396), 1, - anon_sym_LPAREN, - ACTIONS(404), 1, + ACTIONS(365), 1, anon_sym_COMMA, - ACTIONS(406), 1, + ACTIONS(367), 1, anon_sym_RPAREN_GT, - STATE(211), 1, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(370), 2, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(386), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(388), 4, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11062] = 7, - ACTIONS(368), 1, - anon_sym_COLON_COLON, - ACTIONS(372), 1, - anon_sym_STAR_STAR, - ACTIONS(396), 1, - anon_sym_LPAREN, - STATE(211), 1, - sym_dictionary_construction, + [10786] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(226), 6, + ACTIONS(159), 7, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 14, + ACTIONS(157), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_DASH, + anon_sym_COLON_COLON, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -11300,34 +10944,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [11103] = 10, - ACTIONS(368), 1, + anon_sym_LPAREN, + anon_sym_DASH_GT, + [10820] = 10, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(321), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(396), 1, + ACTIONS(333), 1, anon_sym_LPAREN, - STATE(211), 1, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(370), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(226), 5, + ACTIONS(183), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 11, + ACTIONS(177), 13, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -11337,37 +10984,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [11150] = 11, - ACTIONS(368), 1, + [10868] = 8, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, - anon_sym_STAR, - ACTIONS(376), 1, - anon_sym_SLASH, - ACTIONS(396), 1, + ACTIONS(333), 1, anon_sym_LPAREN, - STATE(211), 1, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(370), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(378), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(226), 5, + ACTIONS(183), 6, + anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 9, + ACTIONS(177), 14, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -11375,39 +11020,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [11199] = 13, - ACTIONS(368), 1, + [10912] = 11, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(321), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(380), 1, - anon_sym_AMP, - ACTIONS(384), 1, - anon_sym_CARET, - ACTIONS(396), 1, + ACTIONS(333), 1, anon_sym_LPAREN, - STATE(211), 1, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(370), 2, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(226), 3, + ACTIONS(183), 5, + anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 9, + ACTIONS(177), 11, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -11415,36 +11059,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [11252] = 12, - ACTIONS(368), 1, + [10962] = 12, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(321), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(380), 1, - anon_sym_AMP, - ACTIONS(396), 1, + ACTIONS(333), 1, anon_sym_LPAREN, - STATE(211), 1, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(370), 2, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(226), 4, + ACTIONS(183), 5, + anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 9, + ACTIONS(177), 9, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_GT_EQ, @@ -11454,565 +11099,670 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [11303] = 14, - ACTIONS(368), 1, + [11014] = 20, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(380), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(382), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(384), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(396), 1, - anon_sym_LPAREN, - STATE(211), 1, + ACTIONS(209), 1, + anon_sym_AMP_AMP, + ACTIONS(211), 1, + anon_sym_PIPE_PIPE, + ACTIONS(213), 1, + anon_sym_CARET_CARET, + ACTIONS(353), 1, + anon_sym_COMMA, + ACTIONS(369), 1, + anon_sym_RBRACK, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(226), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(370), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(222), 9, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(205), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [11358] = 15, - ACTIONS(368), 1, + [11082] = 14, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(321), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(380), 1, + ACTIONS(327), 1, anon_sym_AMP, - ACTIONS(382), 1, - anon_sym_PIPE, - ACTIONS(384), 1, + ACTIONS(331), 1, anon_sym_CARET, - ACTIONS(396), 1, + ACTIONS(333), 1, anon_sym_LPAREN, - STATE(211), 1, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(370), 2, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(386), 2, + ACTIONS(183), 3, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(388), 4, + ACTIONS(177), 9, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(222), 5, - anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [11415] = 16, - ACTIONS(368), 1, + [11138] = 13, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(321), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(380), 1, + ACTIONS(327), 1, anon_sym_AMP, - ACTIONS(382), 1, - anon_sym_PIPE, - ACTIONS(384), 1, - anon_sym_CARET, - ACTIONS(390), 1, - anon_sym_AMP_AMP, - ACTIONS(396), 1, + ACTIONS(333), 1, anon_sym_LPAREN, - STATE(211), 1, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(370), 2, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(386), 2, + ACTIONS(183), 4, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 4, + ACTIONS(177), 9, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - ACTIONS(388), 4, + [11192] = 4, + ACTIONS(371), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(255), 7, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(253), 17, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11474] = 17, - ACTIONS(368), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [11228] = 19, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(321), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(380), 1, + ACTIONS(327), 1, anon_sym_AMP, - ACTIONS(382), 1, + ACTIONS(329), 1, anon_sym_PIPE, - ACTIONS(384), 1, + ACTIONS(331), 1, anon_sym_CARET, - ACTIONS(390), 1, + ACTIONS(333), 1, + anon_sym_LPAREN, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(392), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(396), 1, - anon_sym_LPAREN, - STATE(211), 1, + ACTIONS(343), 1, + anon_sym_CARET_CARET, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(370), 2, + ACTIONS(217), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(386), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 3, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_CARET_CARET, - ACTIONS(388), 4, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11535] = 18, - ACTIONS(368), 1, + [11294] = 20, + ACTIONS(41), 1, + anon_sym_RBRACK, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(380), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(382), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(384), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(390), 1, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(392), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(394), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(396), 1, - anon_sym_LPAREN, - STATE(211), 1, + ACTIONS(353), 1, + anon_sym_COMMA, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(312), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(370), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(386), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(388), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11598] = 18, - ACTIONS(368), 1, + [11362] = 19, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(321), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(380), 1, + ACTIONS(327), 1, anon_sym_AMP, - ACTIONS(382), 1, + ACTIONS(329), 1, anon_sym_PIPE, - ACTIONS(384), 1, + ACTIONS(331), 1, anon_sym_CARET, - ACTIONS(390), 1, + ACTIONS(333), 1, + anon_sym_LPAREN, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(392), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(394), 1, + ACTIONS(343), 1, anon_sym_CARET_CARET, - ACTIONS(396), 1, - anon_sym_LPAREN, - STATE(211), 1, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(316), 2, + ACTIONS(221), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - ACTIONS(370), 2, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(386), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(388), 4, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11661] = 18, - ACTIONS(368), 1, + [11428] = 19, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(321), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(380), 1, + ACTIONS(327), 1, anon_sym_AMP, - ACTIONS(382), 1, + ACTIONS(329), 1, anon_sym_PIPE, - ACTIONS(384), 1, + ACTIONS(331), 1, anon_sym_CARET, - ACTIONS(390), 1, + ACTIONS(333), 1, + anon_sym_LPAREN, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(392), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(394), 1, + ACTIONS(343), 1, anon_sym_CARET_CARET, - ACTIONS(396), 1, - anon_sym_LPAREN, - STATE(211), 1, + ACTIONS(373), 1, + anon_sym_RPAREN_GT, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(230), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(370), 2, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(386), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(388), 4, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11724] = 19, - ACTIONS(96), 1, - anon_sym_RBRACK, - ACTIONS(224), 1, + [11493] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(364), 1, + ACTIONS(375), 1, anon_sym_COMMA, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(250), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11789] = 19, - ACTIONS(224), 1, + [11558] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(387), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(389), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(391), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(397), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(399), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(401), 1, anon_sym_CARET_CARET, - ACTIONS(364), 1, - anon_sym_COMMA, - ACTIONS(408), 1, - anon_sym_RBRACK, - STATE(127), 1, + ACTIONS(403), 1, + anon_sym_then, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(385), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(393), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(395), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [11623] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(297), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(250), 4, + ACTIONS(295), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11854] = 19, - ACTIONS(368), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [11656] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, + anon_sym_then, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(380), 1, + ACTIONS(387), 1, anon_sym_AMP, - ACTIONS(382), 1, + ACTIONS(389), 1, anon_sym_PIPE, - ACTIONS(384), 1, + ACTIONS(391), 1, anon_sym_CARET, - ACTIONS(390), 1, + ACTIONS(397), 1, anon_sym_AMP_AMP, - ACTIONS(392), 1, + ACTIONS(399), 1, anon_sym_PIPE_PIPE, - ACTIONS(394), 1, + ACTIONS(401), 1, anon_sym_CARET_CARET, - ACTIONS(396), 1, - anon_sym_LPAREN, - ACTIONS(410), 1, - anon_sym_COMMA, - ACTIONS(412), 1, - anon_sym_RPAREN_GT, - STATE(211), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(370), 2, + ACTIONS(377), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(385), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(393), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(395), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [11721] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(251), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(249), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(386), 2, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [11754] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(265), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(388), 4, + ACTIONS(263), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11919] = 19, - ACTIONS(368), 1, - anon_sym_COLON_COLON, - ACTIONS(372), 1, - anon_sym_STAR_STAR, - ACTIONS(374), 1, - anon_sym_STAR, - ACTIONS(376), 1, - anon_sym_SLASH, - ACTIONS(380), 1, - anon_sym_AMP, - ACTIONS(382), 1, - anon_sym_PIPE, - ACTIONS(384), 1, - anon_sym_CARET, - ACTIONS(390), 1, anon_sym_AMP_AMP, - ACTIONS(392), 1, anon_sym_PIPE_PIPE, - ACTIONS(394), 1, anon_sym_CARET_CARET, - ACTIONS(396), 1, anon_sym_LPAREN, - ACTIONS(414), 1, - anon_sym_COMMA, - ACTIONS(416), 1, - anon_sym_RPAREN_GT, - STATE(211), 1, - sym_dictionary_construction, + [11787] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(370), 2, + ACTIONS(285), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(283), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(386), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(388), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11984] = 18, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - ACTIONS(242), 1, - anon_sym_AMP, - ACTIONS(244), 1, - anon_sym_PIPE, - ACTIONS(246), 1, - anon_sym_CARET, - ACTIONS(252), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, anon_sym_CARET_CARET, - STATE(127), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + [11820] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(227), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(225), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(418), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12047] = 9, - ACTIONS(368), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [11853] = 10, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(396), 1, - anon_sym_LPAREN, - STATE(211), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(226), 5, + ACTIONS(183), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 13, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(177), 12, anon_sym_DASH, anon_sym_PLUS, anon_sym_LT_LT, @@ -12024,24 +11774,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [12092] = 3, + anon_sym_then, + [11900] = 8, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(379), 1, + anon_sym_STAR_STAR, + STATE(123), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(310), 6, + ACTIONS(183), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(308), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(177), 13, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -12052,33 +11809,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [12124] = 10, - ACTIONS(224), 1, + anon_sym_then, + [11943] = 11, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(422), 1, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(383), 1, anon_sym_SLASH, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(226), 5, + ACTIONS(183), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 10, + ACTIONS(177), 10, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -12089,35 +11848,37 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - [12170] = 11, - ACTIONS(224), 1, + [11992] = 12, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(422), 1, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(383), 1, anon_sym_SLASH, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(385), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(226), 5, + ACTIONS(183), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 8, + ACTIONS(177), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12126,37 +11887,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - [12218] = 13, - ACTIONS(224), 1, + [12043] = 14, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(422), 1, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(430), 1, + ACTIONS(387), 1, anon_sym_AMP, - ACTIONS(432), 1, + ACTIONS(391), 1, anon_sym_CARET, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(385), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(226), 3, + ACTIONS(183), 3, anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 8, + ACTIONS(177), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12165,31 +11928,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - [12270] = 7, - ACTIONS(224), 1, + [12098] = 13, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(422), 1, + ACTIONS(379), 1, anon_sym_STAR_STAR, - STATE(127), 1, + ACTIONS(381), 1, + anon_sym_STAR, + ACTIONS(383), 1, + anon_sym_SLASH, + ACTIONS(387), 1, + anon_sym_AMP, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(226), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(222), 13, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH, + ACTIONS(385), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(183), 4, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(177), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12198,38 +11968,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - [12310] = 14, - ACTIONS(224), 1, + [12151] = 15, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(422), 1, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(430), 1, + ACTIONS(387), 1, anon_sym_AMP, - ACTIONS(432), 1, - anon_sym_CARET, - ACTIONS(434), 1, + ACTIONS(389), 1, anon_sym_PIPE, - STATE(127), 1, + ACTIONS(391), 1, + anon_sym_CARET, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(226), 2, + ACTIONS(183), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(420), 2, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(385), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(222), 8, + ACTIONS(177), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12238,144 +12010,151 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - [12364] = 15, - ACTIONS(224), 1, + [12208] = 16, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(422), 1, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(430), 1, + ACTIONS(387), 1, anon_sym_AMP, - ACTIONS(432), 1, - anon_sym_CARET, - ACTIONS(434), 1, + ACTIONS(389), 1, anon_sym_PIPE, - STATE(127), 1, + ACTIONS(391), 1, + anon_sym_CARET, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(385), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(436), 2, + ACTIONS(393), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 4, + ACTIONS(177), 4, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - ACTIONS(438), 4, + ACTIONS(395), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12420] = 16, - ACTIONS(224), 1, + [12267] = 17, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(422), 1, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(430), 1, + ACTIONS(387), 1, anon_sym_AMP, - ACTIONS(432), 1, - anon_sym_CARET, - ACTIONS(434), 1, + ACTIONS(389), 1, anon_sym_PIPE, - ACTIONS(440), 1, + ACTIONS(391), 1, + anon_sym_CARET, + ACTIONS(397), 1, anon_sym_AMP_AMP, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(385), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(436), 2, + ACTIONS(393), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(222), 3, + ACTIONS(177), 3, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - ACTIONS(438), 4, + ACTIONS(395), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12478] = 17, - ACTIONS(224), 1, + [12328] = 18, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(422), 1, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(430), 1, + ACTIONS(387), 1, anon_sym_AMP, - ACTIONS(432), 1, - anon_sym_CARET, - ACTIONS(434), 1, + ACTIONS(389), 1, anon_sym_PIPE, - ACTIONS(440), 1, + ACTIONS(391), 1, + anon_sym_CARET, + ACTIONS(397), 1, anon_sym_AMP_AMP, - ACTIONS(442), 1, + ACTIONS(399), 1, anon_sym_PIPE_PIPE, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(222), 2, + ACTIONS(177), 2, anon_sym_CARET_CARET, anon_sym_then, - ACTIONS(420), 2, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(385), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(436), 2, + ACTIONS(393), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(438), 4, + ACTIONS(395), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12538] = 3, + [12391] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(194), 6, + ACTIONS(149), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(192), 17, + ACTIONS(147), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12393,62 +12172,65 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [12570] = 18, - ACTIONS(224), 1, + [12424] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(312), 1, + ACTIONS(233), 1, anon_sym_then, - ACTIONS(422), 1, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(430), 1, + ACTIONS(387), 1, anon_sym_AMP, - ACTIONS(432), 1, - anon_sym_CARET, - ACTIONS(434), 1, + ACTIONS(389), 1, anon_sym_PIPE, - ACTIONS(440), 1, + ACTIONS(391), 1, + anon_sym_CARET, + ACTIONS(397), 1, anon_sym_AMP_AMP, - ACTIONS(442), 1, + ACTIONS(399), 1, anon_sym_PIPE_PIPE, - ACTIONS(444), 1, + ACTIONS(401), 1, anon_sym_CARET_CARET, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(385), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(436), 2, + ACTIONS(393), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(438), 4, + ACTIONS(395), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12632] = 3, + [12489] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(322), 6, + ACTIONS(239), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(320), 17, + ACTIONS(237), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12466,105 +12248,65 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [12664] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(330), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(328), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + [12522] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, + ACTIONS(185), 1, anon_sym_LPAREN, - [12696] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(334), 6, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(199), 1, anon_sym_AMP, + ACTIONS(201), 1, anon_sym_PIPE, + ACTIONS(203), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(332), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(209), 1, anon_sym_AMP_AMP, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, + ACTIONS(213), 1, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [12728] = 3, + ACTIONS(405), 1, + anon_sym_RPAREN, + STATE(123), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(266), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(264), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(205), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [12760] = 3, + [12587] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(270), 6, + ACTIONS(243), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(268), 17, + ACTIONS(241), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12582,208 +12324,111 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [12792] = 18, - ACTIONS(224), 1, + [12620] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(316), 1, - anon_sym_then, - ACTIONS(422), 1, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(430), 1, + ACTIONS(387), 1, anon_sym_AMP, - ACTIONS(432), 1, - anon_sym_CARET, - ACTIONS(434), 1, + ACTIONS(389), 1, anon_sym_PIPE, - ACTIONS(440), 1, - anon_sym_AMP_AMP, - ACTIONS(442), 1, - anon_sym_PIPE_PIPE, - ACTIONS(444), 1, - anon_sym_CARET_CARET, - STATE(127), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(420), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(428), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(436), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(438), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [12854] = 18, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(230), 1, - anon_sym_then, - ACTIONS(422), 1, - anon_sym_STAR_STAR, - ACTIONS(424), 1, - anon_sym_STAR, - ACTIONS(426), 1, - anon_sym_SLASH, - ACTIONS(430), 1, - anon_sym_AMP, - ACTIONS(432), 1, + ACTIONS(391), 1, anon_sym_CARET, - ACTIONS(434), 1, - anon_sym_PIPE, - ACTIONS(440), 1, + ACTIONS(397), 1, anon_sym_AMP_AMP, - ACTIONS(442), 1, + ACTIONS(399), 1, anon_sym_PIPE_PIPE, - ACTIONS(444), 1, + ACTIONS(401), 1, anon_sym_CARET_CARET, - STATE(127), 1, + ACTIONS(407), 1, + anon_sym_then, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(428), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(436), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(438), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [12916] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(274), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(272), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(385), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [12948] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(278), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, + ACTIONS(393), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(276), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(395), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [12980] = 18, - ACTIONS(224), 1, + [12685] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(446), 1, - anon_sym_RPAREN, - STATE(127), 1, + ACTIONS(409), 1, + anon_sym_COLON, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(250), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13042] = 3, + [12750] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(216), 6, + ACTIONS(261), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(214), 17, + ACTIONS(259), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12801,18 +12446,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13074] = 3, + [12783] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 6, + ACTIONS(269), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(202), 17, + ACTIONS(267), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12830,18 +12476,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13106] = 3, + [12816] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(220), 6, + ACTIONS(273), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(218), 17, + ACTIONS(271), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12859,238 +12506,141 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13138] = 18, - ACTIONS(224), 1, + [12849] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(187), 1, + anon_sym_then, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(387), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(389), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(391), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(397), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(399), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(401), 1, anon_sym_CARET_CARET, - ACTIONS(448), 1, - anon_sym_COLON, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(385), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(393), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(250), 4, + ACTIONS(395), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13200] = 18, - ACTIONS(224), 1, + [12914] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(279), 1, + anon_sym_then, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(387), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(389), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(391), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(397), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(399), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(401), 1, anon_sym_CARET_CARET, - ACTIONS(450), 1, - anon_sym_else, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(385), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(393), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(250), 4, + ACTIONS(395), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13262] = 18, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, - anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - ACTIONS(242), 1, - anon_sym_AMP, - ACTIONS(244), 1, - anon_sym_PIPE, - ACTIONS(246), 1, - anon_sym_CARET, - ACTIONS(252), 1, - anon_sym_AMP_AMP, - ACTIONS(254), 1, - anon_sym_PIPE_PIPE, - ACTIONS(256), 1, - anon_sym_CARET_CARET, - ACTIONS(452), 1, - anon_sym_SEMI, - STATE(127), 1, - sym_dictionary_construction, + [12979] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(240), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(248), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(250), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [13324] = 18, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(289), 6, anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - ACTIONS(242), 1, anon_sym_AMP, - ACTIONS(244), 1, anon_sym_PIPE, - ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(252), 1, - anon_sym_AMP_AMP, - ACTIONS(254), 1, - anon_sym_PIPE_PIPE, - ACTIONS(256), 1, - anon_sym_CARET_CARET, - ACTIONS(454), 1, + anon_sym_GT, + anon_sym_LT, + ACTIONS(287), 18, + anon_sym_DOT, anon_sym_COMMA, - STATE(127), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(232), 2, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13386] = 18, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(422), 1, - anon_sym_STAR_STAR, - ACTIONS(424), 1, - anon_sym_STAR, - ACTIONS(426), 1, - anon_sym_SLASH, - ACTIONS(430), 1, - anon_sym_AMP, - ACTIONS(432), 1, - anon_sym_CARET, - ACTIONS(434), 1, - anon_sym_PIPE, - ACTIONS(440), 1, anon_sym_AMP_AMP, - ACTIONS(442), 1, anon_sym_PIPE_PIPE, - ACTIONS(444), 1, anon_sym_CARET_CARET, - ACTIONS(456), 1, - anon_sym_then, - STATE(127), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(420), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(428), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(436), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(438), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [13448] = 3, + anon_sym_LPAREN, + [13012] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(326), 6, + ACTIONS(293), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(324), 17, + ACTIONS(291), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13108,150 +12658,111 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13480] = 18, - ACTIONS(368), 1, - anon_sym_COLON_COLON, - ACTIONS(372), 1, - anon_sym_STAR_STAR, - ACTIONS(374), 1, - anon_sym_STAR, - ACTIONS(376), 1, - anon_sym_SLASH, - ACTIONS(380), 1, - anon_sym_AMP, - ACTIONS(382), 1, - anon_sym_PIPE, - ACTIONS(384), 1, - anon_sym_CARET, - ACTIONS(390), 1, - anon_sym_AMP_AMP, - ACTIONS(392), 1, - anon_sym_PIPE_PIPE, - ACTIONS(394), 1, - anon_sym_CARET_CARET, - ACTIONS(396), 1, - anon_sym_LPAREN, - ACTIONS(458), 1, - anon_sym_RPAREN_GT, - STATE(211), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(370), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(378), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(386), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(388), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [13542] = 18, - ACTIONS(224), 1, + [13045] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(284), 1, - anon_sym_then, - ACTIONS(422), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(430), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(432), 1, - anon_sym_CARET, - ACTIONS(434), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(440), 1, + ACTIONS(203), 1, + anon_sym_CARET, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(442), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(444), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - STATE(127), 1, + ACTIONS(411), 1, + anon_sym_else, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(436), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(438), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13604] = 18, - ACTIONS(224), 1, + [13110] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(460), 1, - ts_builtin_sym_end, - STATE(127), 1, + ACTIONS(413), 1, + anon_sym_SEMI, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(250), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13666] = 3, + [13175] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(298), 6, + ACTIONS(171), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(296), 17, + ACTIONS(169), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13269,18 +12780,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13698] = 3, + [13208] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 6, + ACTIONS(167), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(292), 17, + ACTIONS(165), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13298,18 +12810,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13730] = 3, + [13241] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(302), 6, + ACTIONS(175), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(300), 17, + ACTIONS(173), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13327,252 +12840,279 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13762] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(282), 6, + [13274] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, + anon_sym_COLON_COLON, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(199), 1, anon_sym_AMP, + ACTIONS(201), 1, anon_sym_PIPE, + ACTIONS(203), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(280), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(209), 1, anon_sym_AMP_AMP, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, + ACTIONS(213), 1, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [13794] = 3, + ACTIONS(353), 1, + anon_sym_COMMA, + STATE(123), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(306), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(304), 17, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(205), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [13826] = 18, - ACTIONS(224), 1, + [13339] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(364), 1, - anon_sym_COMMA, - STATE(127), 1, + ACTIONS(415), 1, + ts_builtin_sym_end, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(250), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13888] = 18, - ACTIONS(224), 1, + [13404] = 19, + ACTIONS(313), 1, + anon_sym_DOT, + ACTIONS(315), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(288), 1, - anon_sym_then, - ACTIONS(422), 1, + ACTIONS(319), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(321), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(430), 1, + ACTIONS(327), 1, anon_sym_AMP, - ACTIONS(432), 1, - anon_sym_CARET, - ACTIONS(434), 1, + ACTIONS(329), 1, anon_sym_PIPE, - ACTIONS(440), 1, + ACTIONS(331), 1, + anon_sym_CARET, + ACTIONS(333), 1, + anon_sym_LPAREN, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(442), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(444), 1, + ACTIONS(343), 1, anon_sym_CARET_CARET, - STATE(127), 1, + ACTIONS(417), 1, + anon_sym_RPAREN_GT, + STATE(170), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, + ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(436), 2, + ACTIONS(335), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(337), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13469] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(255), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(438), 4, + ACTIONS(253), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13950] = 18, - ACTIONS(224), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [13502] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(217), 1, + anon_sym_then, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(387), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(389), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(391), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(397), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(399), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(401), 1, anon_sym_CARET_CARET, - ACTIONS(462), 1, - anon_sym_RPAREN, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(385), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(393), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(250), 4, + ACTIONS(395), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14012] = 18, - ACTIONS(224), 1, + [13567] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(464), 1, - anon_sym_COLON, - STATE(127), 1, + ACTIONS(419), 1, + anon_sym_RPAREN, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(250), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14074] = 3, + [13632] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(262), 6, + ACTIONS(231), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(260), 17, + ACTIONS(229), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13590,224 +13130,227 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [14106] = 18, - ACTIONS(224), 1, + [13665] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(466), 1, - anon_sym_else, - STATE(127), 1, + ACTIONS(421), 1, + anon_sym_COLON, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(250), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14168] = 9, - ACTIONS(224), 1, + [13730] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(422), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(195), 1, anon_sym_SLASH, - STATE(127), 1, + ACTIONS(199), 1, + anon_sym_AMP, + ACTIONS(201), 1, + anon_sym_PIPE, + ACTIONS(203), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_AMP_AMP, + ACTIONS(211), 1, + anon_sym_PIPE_PIPE, + ACTIONS(213), 1, + anon_sym_CARET_CARET, + ACTIONS(423), 1, + anon_sym_else, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(226), 5, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(222), 12, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(205), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - [14212] = 18, - ACTIONS(368), 1, + [13795] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(372), 1, + ACTIONS(185), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(374), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(376), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(380), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(382), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(384), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(390), 1, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(392), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(394), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(396), 1, - anon_sym_LPAREN, - ACTIONS(468), 1, - anon_sym_RPAREN_GT, - STATE(211), 1, + ACTIONS(425), 1, + anon_sym_COLON, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(370), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(378), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(386), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(388), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14274] = 18, - ACTIONS(224), 1, + [13860] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(470), 1, - anon_sym_COLON, - STATE(127), 1, + ACTIONS(427), 1, + anon_sym_else, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(250), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14336] = 18, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(234), 1, - anon_sym_STAR_STAR, - ACTIONS(236), 1, + [13925] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(277), 6, anon_sym_STAR, - ACTIONS(238), 1, - anon_sym_SLASH, - ACTIONS(242), 1, anon_sym_AMP, - ACTIONS(244), 1, anon_sym_PIPE, - ACTIONS(246), 1, anon_sym_CARET, - ACTIONS(252), 1, - anon_sym_AMP_AMP, - ACTIONS(254), 1, - anon_sym_PIPE_PIPE, - ACTIONS(256), 1, - anon_sym_CARET_CARET, - ACTIONS(472), 1, - anon_sym_else, - STATE(127), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(232), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(275), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(250), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14398] = 4, - ACTIONS(474), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [13958] = 4, + ACTIONS(429), 1, anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(294), 7, + ACTIONS(255), 7, anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, @@ -13815,7 +13358,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(292), 15, + ACTIONS(253), 16, + anon_sym_DOT, anon_sym_COLON_COLON, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -13831,168 +13375,120 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_CARET, anon_sym_then, anon_sym_LPAREN, - [14432] = 18, - ACTIONS(224), 1, + [13993] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(234), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(236), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(238), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(242), 1, + ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(244), 1, + ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(246), 1, + ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(252), 1, + ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(254), 1, + ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(256), 1, + ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(476), 1, + ACTIONS(431), 1, anon_sym_COMMA, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(232), 2, + ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(240), 2, + ACTIONS(197), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(248), 2, + ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(250), 4, + ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14494] = 18, - ACTIONS(224), 1, + [14058] = 19, + ACTIONS(179), 1, + anon_sym_DOT, + ACTIONS(181), 1, anon_sym_COLON_COLON, - ACTIONS(228), 1, + ACTIONS(185), 1, anon_sym_LPAREN, - ACTIONS(422), 1, + ACTIONS(379), 1, anon_sym_STAR_STAR, - ACTIONS(424), 1, + ACTIONS(381), 1, anon_sym_STAR, - ACTIONS(426), 1, + ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(430), 1, + ACTIONS(387), 1, anon_sym_AMP, - ACTIONS(432), 1, - anon_sym_CARET, - ACTIONS(434), 1, + ACTIONS(389), 1, anon_sym_PIPE, - ACTIONS(440), 1, + ACTIONS(391), 1, + anon_sym_CARET, + ACTIONS(397), 1, anon_sym_AMP_AMP, - ACTIONS(442), 1, + ACTIONS(399), 1, anon_sym_PIPE_PIPE, - ACTIONS(444), 1, + ACTIONS(401), 1, anon_sym_CARET_CARET, - ACTIONS(478), 1, + ACTIONS(433), 1, anon_sym_then, - STATE(127), 1, + STATE(123), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, + ACTIONS(377), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + ACTIONS(385), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(436), 2, + ACTIONS(393), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(438), 4, + ACTIONS(395), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14556] = 18, - ACTIONS(224), 1, - anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(422), 1, - anon_sym_STAR_STAR, - ACTIONS(424), 1, - anon_sym_STAR, - ACTIONS(426), 1, - anon_sym_SLASH, - ACTIONS(430), 1, - anon_sym_AMP, - ACTIONS(432), 1, - anon_sym_CARET, - ACTIONS(434), 1, - anon_sym_PIPE, - ACTIONS(440), 1, - anon_sym_AMP_AMP, - ACTIONS(442), 1, - anon_sym_PIPE_PIPE, - ACTIONS(444), 1, - anon_sym_CARET_CARET, - ACTIONS(480), 1, - anon_sym_then, - STATE(127), 1, - sym_dictionary_construction, + [14123] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(420), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(428), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(436), 2, + ACTIONS(247), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(438), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [14618] = 12, - ACTIONS(224), 1, + ACTIONS(245), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - ACTIONS(228), 1, - anon_sym_LPAREN, - ACTIONS(422), 1, - anon_sym_STAR_STAR, - ACTIONS(424), 1, - anon_sym_STAR, - ACTIONS(426), 1, - anon_sym_SLASH, - ACTIONS(430), 1, - anon_sym_AMP, - STATE(127), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(420), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(428), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(226), 4, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(222), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -14000,519 +13496,519 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - [14668] = 14, + anon_sym_LPAREN, + [14156] = 14, ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(437), 1, + aux_sym_base_ten_token1, + ACTIONS(441), 1, anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(80), 1, + STATE(236), 1, sym_number, - STATE(265), 1, + STATE(237), 1, + sym__float, + STATE(245), 1, sym_formula_expression, - STATE(301), 1, + STATE(289), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(439), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(256), 6, + STATE(241), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14721] = 14, - ACTIONS(13), 1, + [14209] = 14, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(441), 1, anon_sym_LPAREN, - ACTIONS(488), 1, - aux_sym_base_ten_token1, - STATE(250), 1, - sym_number, - STATE(251), 1, + STATE(79), 1, sym__float, - STATE(262), 1, + STATE(80), 1, + sym_number, + STATE(258), 1, sym_formula_expression, - STATE(310), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(490), 2, + ACTIONS(443), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(256), 6, + STATE(241), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14774] = 14, - ACTIONS(13), 1, + [14262] = 14, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(486), 1, - anon_sym_LPAREN, - ACTIONS(488), 1, + ACTIONS(437), 1, aux_sym_base_ten_token1, - STATE(250), 1, + ACTIONS(441), 1, + anon_sym_LPAREN, + STATE(236), 1, sym_number, - STATE(251), 1, + STATE(237), 1, sym__float, - STATE(264), 1, + STATE(243), 1, sym_formula_expression, - STATE(310), 1, + STATE(289), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(490), 2, + ACTIONS(439), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(256), 6, + STATE(241), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14827] = 14, - ACTIONS(13), 1, + [14315] = 14, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(441), 1, anon_sym_LPAREN, - ACTIONS(488), 1, - aux_sym_base_ten_token1, - STATE(250), 1, - sym_number, - STATE(251), 1, + STATE(79), 1, sym__float, + STATE(80), 1, + sym_number, STATE(254), 1, sym_formula_expression, - STATE(310), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(490), 2, + ACTIONS(443), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(256), 6, + STATE(241), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14880] = 14, - ACTIONS(13), 1, + [14368] = 14, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(441), 1, anon_sym_LPAREN, - ACTIONS(488), 1, - aux_sym_base_ten_token1, - STATE(250), 1, - sym_number, - STATE(251), 1, + STATE(79), 1, sym__float, - STATE(263), 1, + STATE(80), 1, + sym_number, + STATE(253), 1, sym_formula_expression, - STATE(310), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(490), 2, + ACTIONS(443), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(256), 6, + STATE(241), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14933] = 14, - ACTIONS(13), 1, + [14421] = 14, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(441), 1, anon_sym_LPAREN, - ACTIONS(488), 1, - aux_sym_base_ten_token1, - STATE(250), 1, - sym_number, - STATE(251), 1, + STATE(79), 1, sym__float, - STATE(257), 1, + STATE(80), 1, + sym_number, + STATE(240), 1, sym_formula_expression, - STATE(310), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(490), 2, + ACTIONS(443), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(256), 6, + STATE(241), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [14986] = 14, + [14474] = 14, ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(437), 1, + aux_sym_base_ten_token1, + ACTIONS(441), 1, anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(80), 1, + STATE(236), 1, sym_number, - STATE(271), 1, + STATE(237), 1, + sym__float, + STATE(244), 1, sym_formula_expression, - STATE(301), 1, + STATE(289), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(439), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(256), 6, + STATE(241), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15039] = 14, + [14527] = 14, ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(437), 1, + aux_sym_base_ten_token1, + ACTIONS(441), 1, anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(80), 1, + STATE(236), 1, sym_number, - STATE(266), 1, + STATE(237), 1, + sym__float, + STATE(240), 1, sym_formula_expression, - STATE(301), 1, + STATE(289), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(439), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(256), 6, + STATE(241), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15092] = 14, + [14580] = 14, ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(437), 1, + aux_sym_base_ten_token1, + ACTIONS(441), 1, anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(80), 1, + STATE(236), 1, sym_number, - STATE(267), 1, + STATE(237), 1, + sym__float, + STATE(249), 1, sym_formula_expression, - STATE(301), 1, + STATE(289), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(439), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(256), 6, + STATE(241), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15145] = 14, - ACTIONS(13), 1, + [14633] = 14, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(441), 1, anon_sym_LPAREN, - ACTIONS(488), 1, - aux_sym_base_ten_token1, - STATE(250), 1, - sym_number, - STATE(251), 1, + STATE(79), 1, sym__float, - STATE(261), 1, + STATE(80), 1, + sym_number, + STATE(255), 1, sym_formula_expression, - STATE(310), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(490), 2, + ACTIONS(443), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(256), 6, + STATE(241), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15198] = 14, - ACTIONS(11), 1, + [14686] = 14, + ACTIONS(9), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(441), 1, anon_sym_LPAREN, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(268), 1, + STATE(252), 1, sym_formula_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(443), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(256), 6, + STATE(241), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15251] = 14, - ACTIONS(11), 1, + [14739] = 14, + ACTIONS(9), 1, aux_sym_base_ten_token1, - ACTIONS(13), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(441), 1, anon_sym_LPAREN, STATE(79), 1, sym__float, STATE(80), 1, sym_number, - STATE(270), 1, + STATE(251), 1, sym_formula_expression, - STATE(301), 1, + STATE(284), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(443), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(256), 6, + STATE(241), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15304] = 14, + [14792] = 14, ACTIONS(11), 1, - aux_sym_base_ten_token1, - ACTIONS(13), 1, aux_sym_octal_token1, - ACTIONS(15), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(17), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(482), 1, + ACTIONS(435), 1, sym_identifier, - ACTIONS(486), 1, + ACTIONS(437), 1, + aux_sym_base_ten_token1, + ACTIONS(441), 1, anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(80), 1, + STATE(236), 1, sym_number, - STATE(254), 1, + STATE(237), 1, + sym__float, + STATE(246), 1, sym_formula_expression, - STATE(301), 1, + STATE(289), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(484), 2, + ACTIONS(439), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(303), 4, + STATE(282), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(256), 6, + STATE(241), 6, sym_signed_integer, sym_unsigned_integer, sym_scalar, sym_formula_parenthesis, sym_formula_unary_expression, sym_formula_binary_expression, - [15357] = 3, + [14845] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(492), 7, + ACTIONS(445), 7, sym_identifier, sym_self, aux_sym_base_ten_token1, @@ -14520,7 +14016,7 @@ static const uint16_t ts_small_parse_table[] = { sym_false, anon_sym_if, anon_sym_let, - ACTIONS(89), 12, + ACTIONS(82), 12, sym_string, aux_sym_octal_token1, aux_sym_hex_token1, @@ -14533,19 +14029,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, anon_sym_RBRACK, anon_sym_LT_LT_LT, - [15385] = 4, + [14873] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(134), 2, + ACTIONS(127), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - ACTIONS(132), 4, + ACTIONS(125), 4, sym_identifier, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(130), 10, + ACTIONS(123), 10, sym_unit_quote, anon_sym_DOT, anon_sym_DASH, @@ -14556,17 +14052,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15412] = 4, - ACTIONS(494), 1, + [14900] = 4, + ACTIONS(447), 1, anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(146), 3, + ACTIONS(139), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(144), 10, + ACTIONS(137), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -14577,20 +14073,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15437] = 5, - STATE(258), 1, + [14925] = 5, + STATE(248), 1, sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(496), 2, + ACTIONS(449), 2, sym_identifier, sym_unit_quote, - ACTIONS(142), 3, + ACTIONS(135), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(136), 8, + ACTIONS(129), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14599,15 +14095,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15464] = 3, + [14952] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(500), 3, + ACTIONS(125), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(498), 10, + ACTIONS(123), 10, + sym_identifier, + sym_unit_quote, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14616,17 +14114,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [15486] = 3, + [14974] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(132), 3, + ACTIONS(145), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(130), 10, + ACTIONS(143), 10, sym_identifier, sym_unit_quote, anon_sym_DASH, @@ -14637,15 +14133,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15508] = 3, + [14996] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(504), 3, + ACTIONS(453), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(502), 10, + ACTIONS(451), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14656,17 +14152,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [15530] = 3, + [15018] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(186), 3, + ACTIONS(457), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(184), 10, - sym_identifier, - sym_unit_quote, + ACTIONS(455), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14675,15 +14169,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15552] = 3, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [15040] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(508), 3, + ACTIONS(461), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(506), 10, + ACTIONS(459), 10, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14694,50 +14190,98 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_BANG_EQ, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [15574] = 4, - ACTIONS(510), 1, + [15062] = 7, + ACTIONS(465), 1, anon_sym_STAR_STAR, + ACTIONS(467), 1, + anon_sym_STAR, + ACTIONS(469), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(504), 3, + ACTIONS(463), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(471), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(473), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [15090] = 6, + ACTIONS(465), 1, + anon_sym_STAR_STAR, + ACTIONS(467), 1, anon_sym_STAR, + ACTIONS(469), 1, + anon_sym_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(453), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(502), 7, + ACTIONS(451), 6, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [15116] = 7, + ACTIONS(465), 1, + anon_sym_STAR_STAR, + ACTIONS(467), 1, + anon_sym_STAR, + ACTIONS(469), 1, + anon_sym_SLASH, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(463), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH, + ACTIONS(475), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(477), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15596] = 3, + [15144] = 7, + ACTIONS(465), 1, + anon_sym_STAR_STAR, + ACTIONS(467), 1, + anon_sym_STAR, + ACTIONS(469), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(220), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(218), 8, + ACTIONS(463), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(479), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(481), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15616] = 3, + [15172] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(216), 3, + ACTIONS(171), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(214), 8, + ACTIONS(169), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14746,15 +14290,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15636] = 3, + [15192] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(204), 3, + ACTIONS(175), 3, anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(202), 8, + ACTIONS(173), 8, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14763,1345 +14307,1246 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15656] = 7, - ACTIONS(510), 1, + [15212] = 4, + ACTIONS(465), 1, anon_sym_STAR_STAR, - ACTIONS(514), 1, - anon_sym_STAR, - ACTIONS(516), 1, - anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(512), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(518), 2, + ACTIONS(453), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(520), 4, + ACTIONS(451), 7, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15684] = 6, - ACTIONS(510), 1, - anon_sym_STAR_STAR, - ACTIONS(514), 1, - anon_sym_STAR, - ACTIONS(516), 1, - anon_sym_SLASH, + [15234] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(504), 2, + ACTIONS(167), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(502), 6, + ACTIONS(165), 8, anon_sym_DASH, anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15710] = 7, - ACTIONS(510), 1, anon_sym_STAR_STAR, - ACTIONS(514), 1, - anon_sym_STAR, - ACTIONS(516), 1, anon_sym_SLASH, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(512), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(522), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(524), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15738] = 7, - ACTIONS(510), 1, + [15254] = 6, + ACTIONS(485), 1, anon_sym_STAR_STAR, - ACTIONS(514), 1, + ACTIONS(487), 1, anon_sym_STAR, - ACTIONS(516), 1, + ACTIONS(489), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(512), 2, + ACTIONS(473), 2, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + ACTIONS(483), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(526), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(528), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15766] = 4, - ACTIONS(504), 1, + [15276] = 4, + ACTIONS(453), 1, anon_sym_STAR, - ACTIONS(530), 1, + ACTIONS(485), 1, anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(502), 5, + ACTIONS(451), 5, anon_sym_DASH, anon_sym_PLUS, anon_sym_SLASH, anon_sym_RPAREN, anon_sym_GT_GT_GT, - [15784] = 6, - ACTIONS(530), 1, + [15294] = 5, + ACTIONS(485), 1, anon_sym_STAR_STAR, - ACTIONS(534), 1, + ACTIONS(487), 1, anon_sym_STAR, - ACTIONS(536), 1, + ACTIONS(489), 1, anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(520), 2, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - ACTIONS(532), 2, + ACTIONS(451), 4, anon_sym_DASH, anon_sym_PLUS, - [15806] = 5, - ACTIONS(530), 1, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [15314] = 6, + ACTIONS(485), 1, anon_sym_STAR_STAR, - ACTIONS(534), 1, + ACTIONS(487), 1, anon_sym_STAR, - ACTIONS(536), 1, + ACTIONS(489), 1, anon_sym_SLASH, + ACTIONS(491), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(502), 4, + ACTIONS(483), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [15826] = 6, - ACTIONS(530), 1, + [15335] = 6, + ACTIONS(485), 1, anon_sym_STAR_STAR, - ACTIONS(534), 1, + ACTIONS(487), 1, anon_sym_STAR, - ACTIONS(536), 1, + ACTIONS(489), 1, anon_sym_SLASH, - ACTIONS(538), 1, - anon_sym_RPAREN, + ACTIONS(493), 1, + anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(532), 2, + ACTIONS(483), 2, anon_sym_DASH, anon_sym_PLUS, - [15847] = 7, - ACTIONS(39), 1, + [15356] = 7, + ACTIONS(37), 1, sym_varadic_dots, - ACTIONS(540), 1, + ACTIONS(495), 1, sym_identifier, - ACTIONS(542), 1, + ACTIONS(497), 1, anon_sym_RPAREN, - STATE(273), 1, + STATE(259), 1, aux_sym_struct_definition_repeat1, - STATE(297), 1, + STATE(292), 1, sym_struct_member, - STATE(326), 1, + STATE(307), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15870] = 6, - ACTIONS(530), 1, - anon_sym_STAR_STAR, - ACTIONS(534), 1, - anon_sym_STAR, - ACTIONS(536), 1, - anon_sym_SLASH, - ACTIONS(544), 1, - anon_sym_GT_GT_GT, + [15379] = 7, + ACTIONS(37), 1, + sym_varadic_dots, + ACTIONS(495), 1, + sym_identifier, + ACTIONS(499), 1, + anon_sym_RPAREN, + STATE(259), 1, + aux_sym_struct_definition_repeat1, + STATE(292), 1, + sym_struct_member, + STATE(312), 1, + sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(532), 2, - anon_sym_DASH, - anon_sym_PLUS, - [15891] = 6, - ACTIONS(530), 1, + [15402] = 6, + ACTIONS(485), 1, anon_sym_STAR_STAR, - ACTIONS(534), 1, + ACTIONS(487), 1, anon_sym_STAR, - ACTIONS(536), 1, + ACTIONS(489), 1, anon_sym_SLASH, - ACTIONS(546), 1, + ACTIONS(501), 1, anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(532), 2, + ACTIONS(483), 2, anon_sym_DASH, anon_sym_PLUS, - [15912] = 7, - ACTIONS(39), 1, - sym_varadic_dots, - ACTIONS(540), 1, - sym_identifier, - ACTIONS(548), 1, - anon_sym_RPAREN, - STATE(273), 1, - aux_sym_struct_definition_repeat1, - STATE(297), 1, - sym_struct_member, - STATE(317), 1, - sym__struct_final_element, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [15935] = 5, - ACTIONS(550), 1, + [15423] = 5, + ACTIONS(503), 1, sym_identifier, - STATE(273), 1, + STATE(259), 1, aux_sym_struct_definition_repeat1, - STATE(314), 1, + STATE(310), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(553), 2, + ACTIONS(506), 2, anon_sym_RPAREN, sym_varadic_dots, - [15953] = 4, - ACTIONS(555), 1, + [15441] = 4, + ACTIONS(508), 1, sym_identifier, - ACTIONS(557), 1, + ACTIONS(510), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(275), 2, + STATE(264), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15968] = 4, - ACTIONS(555), 1, + [15456] = 4, + ACTIONS(508), 1, sym_identifier, - ACTIONS(559), 1, + ACTIONS(512), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(280), 2, + STATE(260), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15983] = 4, - ACTIONS(555), 1, + [15471] = 4, + ACTIONS(508), 1, sym_identifier, - ACTIONS(561), 1, + ACTIONS(514), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(278), 2, + STATE(264), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15998] = 4, - ACTIONS(555), 1, + [15486] = 4, + ACTIONS(508), 1, sym_identifier, - ACTIONS(563), 1, + ACTIONS(516), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(280), 2, + STATE(264), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16013] = 4, - ACTIONS(555), 1, + [15501] = 4, + ACTIONS(518), 1, sym_identifier, - ACTIONS(565), 1, + ACTIONS(521), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(280), 2, + STATE(264), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16028] = 4, - ACTIONS(555), 1, + [15516] = 4, + ACTIONS(508), 1, sym_identifier, - ACTIONS(567), 1, + ACTIONS(523), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(277), 2, + STATE(263), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16043] = 4, - ACTIONS(569), 1, + [15531] = 4, + ACTIONS(508), 1, sym_identifier, - ACTIONS(572), 1, + ACTIONS(525), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(280), 2, + STATE(262), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [16058] = 3, - ACTIONS(576), 1, + [15546] = 3, + ACTIONS(529), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(574), 2, + ACTIONS(527), 2, anon_sym_COMMA, anon_sym_RPAREN, - [16070] = 4, - ACTIONS(578), 1, - anon_sym_COMMA, - ACTIONS(580), 1, - anon_sym_RPAREN, - STATE(293), 1, - aux_sym_dictionary_construction_repeat1, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [16084] = 4, - ACTIONS(582), 1, + [15558] = 4, + ACTIONS(531), 1, anon_sym_COMMA, - ACTIONS(584), 1, + ACTIONS(533), 1, anon_sym_RPAREN, - STATE(287), 1, + STATE(279), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16098] = 4, - ACTIONS(586), 1, + [15572] = 4, + ACTIONS(535), 1, sym_identifier, - ACTIONS(588), 1, + ACTIONS(537), 1, anon_sym_RPAREN, - STATE(309), 1, + STATE(285), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16112] = 4, - ACTIONS(586), 1, - sym_identifier, - ACTIONS(590), 1, + [15586] = 4, + ACTIONS(539), 1, + anon_sym_COMMA, + ACTIONS(542), 1, anon_sym_RPAREN, - STATE(283), 1, - sym_dictionary_member_assignment, + STATE(270), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16126] = 4, - ACTIONS(586), 1, + [15600] = 4, + ACTIONS(535), 1, sym_identifier, - ACTIONS(592), 1, + ACTIONS(544), 1, anon_sym_RPAREN, - STATE(309), 1, + STATE(268), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16140] = 4, - ACTIONS(592), 1, - anon_sym_RPAREN, - ACTIONS(594), 1, + [15614] = 4, + ACTIONS(546), 1, anon_sym_COMMA, - STATE(293), 1, + ACTIONS(548), 1, + anon_sym_RPAREN, + STATE(274), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16154] = 2, + [15628] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(553), 3, + ACTIONS(506), 3, sym_identifier, anon_sym_RPAREN, sym_varadic_dots, - [16164] = 4, - ACTIONS(586), 1, + [15638] = 4, + ACTIONS(550), 1, + anon_sym_COMMA, + ACTIONS(552), 1, + anon_sym_RPAREN, + STATE(270), 1, + aux_sym_dictionary_construction_repeat1, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [15652] = 4, + ACTIONS(535), 1, sym_identifier, - ACTIONS(596), 1, + ACTIONS(552), 1, anon_sym_RPAREN, - STATE(309), 1, + STATE(285), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16178] = 4, - ACTIONS(580), 1, - anon_sym_RPAREN, - ACTIONS(586), 1, + [15666] = 4, + ACTIONS(535), 1, sym_identifier, - STATE(309), 1, + ACTIONS(554), 1, + anon_sym_RPAREN, + STATE(285), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16192] = 4, - ACTIONS(598), 1, - anon_sym_COMMA, - ACTIONS(600), 1, + [15680] = 4, + ACTIONS(535), 1, + sym_identifier, + ACTIONS(556), 1, anon_sym_RPAREN, - STATE(282), 1, - aux_sym_dictionary_construction_repeat1, + STATE(285), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16206] = 4, - ACTIONS(586), 1, + [15694] = 4, + ACTIONS(535), 1, sym_identifier, - ACTIONS(602), 1, + ACTIONS(558), 1, anon_sym_RPAREN, - STATE(291), 1, + STATE(272), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16220] = 4, - ACTIONS(604), 1, - anon_sym_COMMA, - ACTIONS(607), 1, + [15708] = 4, + ACTIONS(556), 1, anon_sym_RPAREN, - STATE(293), 1, + ACTIONS(560), 1, + anon_sym_COMMA, + STATE(270), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16234] = 2, + [15722] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(609), 2, + ACTIONS(562), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [16243] = 3, - ACTIONS(228), 1, - anon_sym_LPAREN, - STATE(129), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - [16254] = 3, - ACTIONS(396), 1, + [15731] = 3, + ACTIONS(333), 1, anon_sym_LPAREN, - STATE(195), 1, + STATE(220), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16265] = 3, - ACTIONS(611), 1, - anon_sym_COMMA, - ACTIONS(613), 1, - anon_sym_RPAREN, + [15742] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16276] = 3, - ACTIONS(615), 1, - anon_sym_COLON, - STATE(281), 1, - sym_declaration_type, + ACTIONS(564), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [15751] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16287] = 3, - ACTIONS(586), 1, - sym_identifier, - STATE(309), 1, - sym_dictionary_member_assignment, + ACTIONS(566), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [15760] = 3, + ACTIONS(568), 1, + aux_sym_signed_integer_token1, + ACTIONS(570), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16298] = 3, - ACTIONS(617), 1, - aux_sym_base_ten_token1, - STATE(88), 1, - sym_number, + [15771] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16309] = 3, - ACTIONS(619), 1, + ACTIONS(542), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + [15780] = 3, + ACTIONS(572), 1, aux_sym_signed_integer_token1, - ACTIONS(621), 1, + ACTIONS(574), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16320] = 3, - ACTIONS(623), 1, - aux_sym_signed_integer_token1, - ACTIONS(625), 1, - aux_sym_unsigned_integer_token1, + [15791] = 3, + ACTIONS(576), 1, + aux_sym_base_ten_token1, + STATE(239), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16331] = 2, + [15802] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(627), 2, + ACTIONS(578), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [16340] = 3, - ACTIONS(629), 1, - aux_sym_base_ten_token1, - STATE(255), 1, - sym_number, + [15811] = 3, + ACTIONS(580), 1, + aux_sym_signed_integer_token1, + ACTIONS(582), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16351] = 2, + [15822] = 3, + ACTIONS(584), 1, + aux_sym_base_ten_token1, + STATE(128), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(631), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [16360] = 3, - ACTIONS(633), 1, - aux_sym_base_ten_token1, - STATE(138), 1, - sym_number, + [15833] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16371] = 3, - ACTIONS(613), 1, - anon_sym_RPAREN, - ACTIONS(635), 1, + ACTIONS(586), 2, + sym_identifier, + anon_sym_in, + [15842] = 3, + ACTIONS(588), 1, anon_sym_COMMA, + ACTIONS(590), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16382] = 2, + [15853] = 3, + ACTIONS(185), 1, + anon_sym_LPAREN, + STATE(110), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(637), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [16391] = 2, + [15864] = 3, + ACTIONS(592), 1, + aux_sym_base_ten_token1, + STATE(146), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(607), 2, - anon_sym_COMMA, + [15875] = 3, + ACTIONS(590), 1, anon_sym_RPAREN, - [16400] = 3, - ACTIONS(639), 1, - aux_sym_signed_integer_token1, - ACTIONS(641), 1, - aux_sym_unsigned_integer_token1, + ACTIONS(594), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16411] = 2, + [15886] = 3, + ACTIONS(535), 1, + sym_identifier, + STATE(285), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(643), 2, - sym_identifier, - anon_sym_in, - [16420] = 3, - ACTIONS(645), 1, + [15897] = 3, + ACTIONS(596), 1, aux_sym_base_ten_token1, - STATE(156), 1, + STATE(82), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16431] = 2, - ACTIONS(647), 1, - sym_identifier, + [15908] = 3, + ACTIONS(598), 1, + anon_sym_COLON, + STATE(267), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16439] = 2, - ACTIONS(611), 1, - anon_sym_COMMA, + [15919] = 2, + ACTIONS(600), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16447] = 2, - ACTIONS(649), 1, - anon_sym_RPAREN, + [15927] = 2, + ACTIONS(602), 1, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16455] = 2, - ACTIONS(651), 1, + [15935] = 2, + ACTIONS(604), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16463] = 2, - ACTIONS(653), 1, + [15943] = 2, + ACTIONS(606), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16471] = 2, - ACTIONS(655), 1, - ts_builtin_sym_end, + [15951] = 2, + ACTIONS(608), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16479] = 2, - ACTIONS(657), 1, - sym_identifier, + [15959] = 2, + ACTIONS(610), 1, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16487] = 2, - ACTIONS(659), 1, - anon_sym_RPAREN, + [15967] = 2, + ACTIONS(612), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16495] = 2, - ACTIONS(661), 1, - aux_sym_hex_token2, + [15975] = 2, + ACTIONS(614), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16503] = 2, - ACTIONS(663), 1, - aux_sym_base_ten_token1, + [15983] = 2, + ACTIONS(616), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16511] = 2, - ACTIONS(665), 1, - anon_sym_EQ, + [15991] = 2, + ACTIONS(618), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16519] = 2, - ACTIONS(667), 1, + [15999] = 2, + ACTIONS(620), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16527] = 2, - ACTIONS(669), 1, - aux_sym_binary_token2, + [16007] = 2, + ACTIONS(588), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16535] = 2, - ACTIONS(671), 1, - anon_sym_RPAREN, + [16015] = 2, + ACTIONS(622), 1, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16543] = 2, - ACTIONS(673), 1, - sym_identifier, + [16023] = 2, + ACTIONS(624), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16551] = 2, - ACTIONS(675), 1, - sym_identifier, + [16031] = 2, + ACTIONS(626), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16559] = 2, - ACTIONS(677), 1, + [16039] = 2, + ACTIONS(628), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16567] = 2, - ACTIONS(679), 1, - anon_sym_EQ, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, }; static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(4)] = 0, - [SMALL_STATE(5)] = 102, - [SMALL_STATE(6)] = 204, - [SMALL_STATE(7)] = 306, - [SMALL_STATE(8)] = 408, - [SMALL_STATE(9)] = 510, - [SMALL_STATE(10)] = 606, - [SMALL_STATE(11)] = 702, - [SMALL_STATE(12)] = 798, - [SMALL_STATE(13)] = 894, - [SMALL_STATE(14)] = 990, - [SMALL_STATE(15)] = 1086, - [SMALL_STATE(16)] = 1182, - [SMALL_STATE(17)] = 1278, - [SMALL_STATE(18)] = 1374, - [SMALL_STATE(19)] = 1470, - [SMALL_STATE(20)] = 1566, - [SMALL_STATE(21)] = 1662, - [SMALL_STATE(22)] = 1758, - [SMALL_STATE(23)] = 1854, - [SMALL_STATE(24)] = 1950, - [SMALL_STATE(25)] = 2046, - [SMALL_STATE(26)] = 2142, - [SMALL_STATE(27)] = 2238, - [SMALL_STATE(28)] = 2334, - [SMALL_STATE(29)] = 2430, - [SMALL_STATE(30)] = 2526, - [SMALL_STATE(31)] = 2622, - [SMALL_STATE(32)] = 2718, - [SMALL_STATE(33)] = 2814, - [SMALL_STATE(34)] = 2910, - [SMALL_STATE(35)] = 3006, - [SMALL_STATE(36)] = 3102, - [SMALL_STATE(37)] = 3198, - [SMALL_STATE(38)] = 3294, - [SMALL_STATE(39)] = 3390, - [SMALL_STATE(40)] = 3486, - [SMALL_STATE(41)] = 3582, - [SMALL_STATE(42)] = 3678, - [SMALL_STATE(43)] = 3774, - [SMALL_STATE(44)] = 3870, - [SMALL_STATE(45)] = 3966, - [SMALL_STATE(46)] = 4062, - [SMALL_STATE(47)] = 4158, - [SMALL_STATE(48)] = 4254, - [SMALL_STATE(49)] = 4350, - [SMALL_STATE(50)] = 4446, - [SMALL_STATE(51)] = 4542, - [SMALL_STATE(52)] = 4638, - [SMALL_STATE(53)] = 4734, - [SMALL_STATE(54)] = 4830, - [SMALL_STATE(55)] = 4926, - [SMALL_STATE(56)] = 5022, - [SMALL_STATE(57)] = 5118, - [SMALL_STATE(58)] = 5214, - [SMALL_STATE(59)] = 5310, - [SMALL_STATE(60)] = 5406, - [SMALL_STATE(61)] = 5502, - [SMALL_STATE(62)] = 5598, - [SMALL_STATE(63)] = 5694, - [SMALL_STATE(64)] = 5790, - [SMALL_STATE(65)] = 5886, - [SMALL_STATE(66)] = 5982, - [SMALL_STATE(67)] = 6078, - [SMALL_STATE(68)] = 6174, - [SMALL_STATE(69)] = 6270, - [SMALL_STATE(70)] = 6366, - [SMALL_STATE(71)] = 6462, - [SMALL_STATE(72)] = 6558, - [SMALL_STATE(73)] = 6654, - [SMALL_STATE(74)] = 6750, - [SMALL_STATE(75)] = 6846, - [SMALL_STATE(76)] = 6942, - [SMALL_STATE(77)] = 7038, - [SMALL_STATE(78)] = 7134, - [SMALL_STATE(79)] = 7180, - [SMALL_STATE(80)] = 7228, - [SMALL_STATE(81)] = 7272, - [SMALL_STATE(82)] = 7317, - [SMALL_STATE(83)] = 7362, - [SMALL_STATE(84)] = 7407, - [SMALL_STATE(85)] = 7452, - [SMALL_STATE(86)] = 7497, - [SMALL_STATE(87)] = 7538, - [SMALL_STATE(88)] = 7583, - [SMALL_STATE(89)] = 7624, - [SMALL_STATE(90)] = 7664, - [SMALL_STATE(91)] = 7704, - [SMALL_STATE(92)] = 7746, - [SMALL_STATE(93)] = 7786, - [SMALL_STATE(94)] = 7826, - [SMALL_STATE(95)] = 7866, - [SMALL_STATE(96)] = 7906, - [SMALL_STATE(97)] = 7946, - [SMALL_STATE(98)] = 7986, - [SMALL_STATE(99)] = 8032, - [SMALL_STATE(100)] = 8103, - [SMALL_STATE(101)] = 8142, - [SMALL_STATE(102)] = 8181, - [SMALL_STATE(103)] = 8220, - [SMALL_STATE(104)] = 8259, - [SMALL_STATE(105)] = 8298, - [SMALL_STATE(106)] = 8337, - [SMALL_STATE(107)] = 8408, - [SMALL_STATE(108)] = 8479, - [SMALL_STATE(109)] = 8518, - [SMALL_STATE(110)] = 8557, - [SMALL_STATE(111)] = 8596, - [SMALL_STATE(112)] = 8635, - [SMALL_STATE(113)] = 8674, - [SMALL_STATE(114)] = 8725, - [SMALL_STATE(115)] = 8772, + [SMALL_STATE(5)] = 99, + [SMALL_STATE(6)] = 198, + [SMALL_STATE(7)] = 297, + [SMALL_STATE(8)] = 396, + [SMALL_STATE(9)] = 495, + [SMALL_STATE(10)] = 588, + [SMALL_STATE(11)] = 681, + [SMALL_STATE(12)] = 774, + [SMALL_STATE(13)] = 867, + [SMALL_STATE(14)] = 960, + [SMALL_STATE(15)] = 1053, + [SMALL_STATE(16)] = 1146, + [SMALL_STATE(17)] = 1239, + [SMALL_STATE(18)] = 1332, + [SMALL_STATE(19)] = 1425, + [SMALL_STATE(20)] = 1518, + [SMALL_STATE(21)] = 1611, + [SMALL_STATE(22)] = 1704, + [SMALL_STATE(23)] = 1797, + [SMALL_STATE(24)] = 1890, + [SMALL_STATE(25)] = 1983, + [SMALL_STATE(26)] = 2076, + [SMALL_STATE(27)] = 2169, + [SMALL_STATE(28)] = 2262, + [SMALL_STATE(29)] = 2355, + [SMALL_STATE(30)] = 2448, + [SMALL_STATE(31)] = 2541, + [SMALL_STATE(32)] = 2634, + [SMALL_STATE(33)] = 2727, + [SMALL_STATE(34)] = 2820, + [SMALL_STATE(35)] = 2913, + [SMALL_STATE(36)] = 3006, + [SMALL_STATE(37)] = 3099, + [SMALL_STATE(38)] = 3192, + [SMALL_STATE(39)] = 3285, + [SMALL_STATE(40)] = 3378, + [SMALL_STATE(41)] = 3471, + [SMALL_STATE(42)] = 3564, + [SMALL_STATE(43)] = 3657, + [SMALL_STATE(44)] = 3750, + [SMALL_STATE(45)] = 3843, + [SMALL_STATE(46)] = 3936, + [SMALL_STATE(47)] = 4029, + [SMALL_STATE(48)] = 4122, + [SMALL_STATE(49)] = 4215, + [SMALL_STATE(50)] = 4308, + [SMALL_STATE(51)] = 4401, + [SMALL_STATE(52)] = 4494, + [SMALL_STATE(53)] = 4587, + [SMALL_STATE(54)] = 4680, + [SMALL_STATE(55)] = 4773, + [SMALL_STATE(56)] = 4866, + [SMALL_STATE(57)] = 4959, + [SMALL_STATE(58)] = 5052, + [SMALL_STATE(59)] = 5145, + [SMALL_STATE(60)] = 5238, + [SMALL_STATE(61)] = 5331, + [SMALL_STATE(62)] = 5424, + [SMALL_STATE(63)] = 5517, + [SMALL_STATE(64)] = 5610, + [SMALL_STATE(65)] = 5703, + [SMALL_STATE(66)] = 5796, + [SMALL_STATE(67)] = 5889, + [SMALL_STATE(68)] = 5982, + [SMALL_STATE(69)] = 6075, + [SMALL_STATE(70)] = 6168, + [SMALL_STATE(71)] = 6261, + [SMALL_STATE(72)] = 6354, + [SMALL_STATE(73)] = 6447, + [SMALL_STATE(74)] = 6540, + [SMALL_STATE(75)] = 6633, + [SMALL_STATE(76)] = 6726, + [SMALL_STATE(77)] = 6819, + [SMALL_STATE(78)] = 6912, + [SMALL_STATE(79)] = 6958, + [SMALL_STATE(80)] = 7007, + [SMALL_STATE(81)] = 7051, + [SMALL_STATE(82)] = 7093, + [SMALL_STATE(83)] = 7135, + [SMALL_STATE(84)] = 7178, + [SMALL_STATE(85)] = 7219, + [SMALL_STATE(86)] = 7260, + [SMALL_STATE(87)] = 7301, + [SMALL_STATE(88)] = 7342, + [SMALL_STATE(89)] = 7383, + [SMALL_STATE(90)] = 7424, + [SMALL_STATE(91)] = 7473, + [SMALL_STATE(92)] = 7547, + [SMALL_STATE(93)] = 7621, + [SMALL_STATE(94)] = 7695, + [SMALL_STATE(95)] = 7735, + [SMALL_STATE(96)] = 7789, + [SMALL_STATE(97)] = 7829, + [SMALL_STATE(98)] = 7879, + [SMALL_STATE(99)] = 7935, + [SMALL_STATE(100)] = 7993, + [SMALL_STATE(101)] = 8055, + [SMALL_STATE(102)] = 8115, + [SMALL_STATE(103)] = 8179, + [SMALL_STATE(104)] = 8247, + [SMALL_STATE(105)] = 8317, + [SMALL_STATE(106)] = 8389, + [SMALL_STATE(107)] = 8429, + [SMALL_STATE(108)] = 8503, + [SMALL_STATE(109)] = 8543, + [SMALL_STATE(110)] = 8583, + [SMALL_STATE(111)] = 8623, + [SMALL_STATE(112)] = 8663, + [SMALL_STATE(113)] = 8705, + [SMALL_STATE(114)] = 8745, + [SMALL_STATE(115)] = 8785, [SMALL_STATE(116)] = 8825, - [SMALL_STATE(117)] = 8880, - [SMALL_STATE(118)] = 8939, - [SMALL_STATE(119)] = 8996, - [SMALL_STATE(120)] = 9057, - [SMALL_STATE(121)] = 9122, - [SMALL_STATE(122)] = 9189, - [SMALL_STATE(123)] = 9258, - [SMALL_STATE(124)] = 9297, - [SMALL_STATE(125)] = 9368, - [SMALL_STATE(126)] = 9439, - [SMALL_STATE(127)] = 9478, - [SMALL_STATE(128)] = 9517, - [SMALL_STATE(129)] = 9556, - [SMALL_STATE(130)] = 9595, - [SMALL_STATE(131)] = 9636, - [SMALL_STATE(132)] = 9675, - [SMALL_STATE(133)] = 9713, - [SMALL_STATE(134)] = 9759, - [SMALL_STATE(135)] = 9796, - [SMALL_STATE(136)] = 9835, - [SMALL_STATE(137)] = 9873, - [SMALL_STATE(138)] = 9907, - [SMALL_STATE(139)] = 9941, - [SMALL_STATE(140)] = 9977, - [SMALL_STATE(141)] = 10015, - [SMALL_STATE(142)] = 10081, - [SMALL_STATE(143)] = 10119, - [SMALL_STATE(144)] = 10159, - [SMALL_STATE(145)] = 10197, - [SMALL_STATE(146)] = 10235, - [SMALL_STATE(147)] = 10273, - [SMALL_STATE(148)] = 10306, - [SMALL_STATE(149)] = 10341, - [SMALL_STATE(150)] = 10406, - [SMALL_STATE(151)] = 10469, - [SMALL_STATE(152)] = 10504, - [SMALL_STATE(153)] = 10537, - [SMALL_STATE(154)] = 10570, - [SMALL_STATE(155)] = 10603, - [SMALL_STATE(156)] = 10636, - [SMALL_STATE(157)] = 10669, - [SMALL_STATE(158)] = 10708, - [SMALL_STATE(159)] = 10741, - [SMALL_STATE(160)] = 10806, - [SMALL_STATE(161)] = 10869, - [SMALL_STATE(162)] = 10932, - [SMALL_STATE(163)] = 10997, - [SMALL_STATE(164)] = 11062, - [SMALL_STATE(165)] = 11103, - [SMALL_STATE(166)] = 11150, - [SMALL_STATE(167)] = 11199, - [SMALL_STATE(168)] = 11252, - [SMALL_STATE(169)] = 11303, - [SMALL_STATE(170)] = 11358, - [SMALL_STATE(171)] = 11415, - [SMALL_STATE(172)] = 11474, - [SMALL_STATE(173)] = 11535, - [SMALL_STATE(174)] = 11598, - [SMALL_STATE(175)] = 11661, - [SMALL_STATE(176)] = 11724, - [SMALL_STATE(177)] = 11789, - [SMALL_STATE(178)] = 11854, - [SMALL_STATE(179)] = 11919, - [SMALL_STATE(180)] = 11984, - [SMALL_STATE(181)] = 12047, - [SMALL_STATE(182)] = 12092, - [SMALL_STATE(183)] = 12124, - [SMALL_STATE(184)] = 12170, - [SMALL_STATE(185)] = 12218, - [SMALL_STATE(186)] = 12270, - [SMALL_STATE(187)] = 12310, - [SMALL_STATE(188)] = 12364, - [SMALL_STATE(189)] = 12420, - [SMALL_STATE(190)] = 12478, - [SMALL_STATE(191)] = 12538, - [SMALL_STATE(192)] = 12570, - [SMALL_STATE(193)] = 12632, - [SMALL_STATE(194)] = 12664, - [SMALL_STATE(195)] = 12696, - [SMALL_STATE(196)] = 12728, - [SMALL_STATE(197)] = 12760, - [SMALL_STATE(198)] = 12792, - [SMALL_STATE(199)] = 12854, - [SMALL_STATE(200)] = 12916, - [SMALL_STATE(201)] = 12948, - [SMALL_STATE(202)] = 12980, - [SMALL_STATE(203)] = 13042, - [SMALL_STATE(204)] = 13074, - [SMALL_STATE(205)] = 13106, - [SMALL_STATE(206)] = 13138, - [SMALL_STATE(207)] = 13200, - [SMALL_STATE(208)] = 13262, - [SMALL_STATE(209)] = 13324, - [SMALL_STATE(210)] = 13386, - [SMALL_STATE(211)] = 13448, - [SMALL_STATE(212)] = 13480, - [SMALL_STATE(213)] = 13542, - [SMALL_STATE(214)] = 13604, - [SMALL_STATE(215)] = 13666, - [SMALL_STATE(216)] = 13698, - [SMALL_STATE(217)] = 13730, - [SMALL_STATE(218)] = 13762, - [SMALL_STATE(219)] = 13794, - [SMALL_STATE(220)] = 13826, - [SMALL_STATE(221)] = 13888, - [SMALL_STATE(222)] = 13950, - [SMALL_STATE(223)] = 14012, - [SMALL_STATE(224)] = 14074, - [SMALL_STATE(225)] = 14106, - [SMALL_STATE(226)] = 14168, - [SMALL_STATE(227)] = 14212, - [SMALL_STATE(228)] = 14274, - [SMALL_STATE(229)] = 14336, - [SMALL_STATE(230)] = 14398, - [SMALL_STATE(231)] = 14432, - [SMALL_STATE(232)] = 14494, - [SMALL_STATE(233)] = 14556, - [SMALL_STATE(234)] = 14618, - [SMALL_STATE(235)] = 14668, - [SMALL_STATE(236)] = 14721, - [SMALL_STATE(237)] = 14774, - [SMALL_STATE(238)] = 14827, - [SMALL_STATE(239)] = 14880, - [SMALL_STATE(240)] = 14933, - [SMALL_STATE(241)] = 14986, - [SMALL_STATE(242)] = 15039, - [SMALL_STATE(243)] = 15092, - [SMALL_STATE(244)] = 15145, - [SMALL_STATE(245)] = 15198, - [SMALL_STATE(246)] = 15251, - [SMALL_STATE(247)] = 15304, - [SMALL_STATE(248)] = 15357, - [SMALL_STATE(249)] = 15385, - [SMALL_STATE(250)] = 15412, - [SMALL_STATE(251)] = 15437, - [SMALL_STATE(252)] = 15464, - [SMALL_STATE(253)] = 15486, - [SMALL_STATE(254)] = 15508, - [SMALL_STATE(255)] = 15530, - [SMALL_STATE(256)] = 15552, - [SMALL_STATE(257)] = 15574, - [SMALL_STATE(258)] = 15596, - [SMALL_STATE(259)] = 15616, - [SMALL_STATE(260)] = 15636, - [SMALL_STATE(261)] = 15656, - [SMALL_STATE(262)] = 15684, - [SMALL_STATE(263)] = 15710, - [SMALL_STATE(264)] = 15738, - [SMALL_STATE(265)] = 15766, - [SMALL_STATE(266)] = 15784, - [SMALL_STATE(267)] = 15806, - [SMALL_STATE(268)] = 15826, - [SMALL_STATE(269)] = 15847, - [SMALL_STATE(270)] = 15870, - [SMALL_STATE(271)] = 15891, - [SMALL_STATE(272)] = 15912, - [SMALL_STATE(273)] = 15935, - [SMALL_STATE(274)] = 15953, - [SMALL_STATE(275)] = 15968, - [SMALL_STATE(276)] = 15983, - [SMALL_STATE(277)] = 15998, - [SMALL_STATE(278)] = 16013, - [SMALL_STATE(279)] = 16028, - [SMALL_STATE(280)] = 16043, - [SMALL_STATE(281)] = 16058, - [SMALL_STATE(282)] = 16070, - [SMALL_STATE(283)] = 16084, - [SMALL_STATE(284)] = 16098, - [SMALL_STATE(285)] = 16112, - [SMALL_STATE(286)] = 16126, - [SMALL_STATE(287)] = 16140, - [SMALL_STATE(288)] = 16154, - [SMALL_STATE(289)] = 16164, - [SMALL_STATE(290)] = 16178, - [SMALL_STATE(291)] = 16192, - [SMALL_STATE(292)] = 16206, - [SMALL_STATE(293)] = 16220, - [SMALL_STATE(294)] = 16234, - [SMALL_STATE(295)] = 16243, - [SMALL_STATE(296)] = 16254, - [SMALL_STATE(297)] = 16265, - [SMALL_STATE(298)] = 16276, - [SMALL_STATE(299)] = 16287, - [SMALL_STATE(300)] = 16298, - [SMALL_STATE(301)] = 16309, - [SMALL_STATE(302)] = 16320, - [SMALL_STATE(303)] = 16331, - [SMALL_STATE(304)] = 16340, - [SMALL_STATE(305)] = 16351, - [SMALL_STATE(306)] = 16360, - [SMALL_STATE(307)] = 16371, - [SMALL_STATE(308)] = 16382, - [SMALL_STATE(309)] = 16391, - [SMALL_STATE(310)] = 16400, - [SMALL_STATE(311)] = 16411, - [SMALL_STATE(312)] = 16420, - [SMALL_STATE(313)] = 16431, - [SMALL_STATE(314)] = 16439, - [SMALL_STATE(315)] = 16447, - [SMALL_STATE(316)] = 16455, - [SMALL_STATE(317)] = 16463, - [SMALL_STATE(318)] = 16471, - [SMALL_STATE(319)] = 16479, - [SMALL_STATE(320)] = 16487, - [SMALL_STATE(321)] = 16495, - [SMALL_STATE(322)] = 16503, - [SMALL_STATE(323)] = 16511, - [SMALL_STATE(324)] = 16519, - [SMALL_STATE(325)] = 16527, - [SMALL_STATE(326)] = 16535, - [SMALL_STATE(327)] = 16543, - [SMALL_STATE(328)] = 16551, - [SMALL_STATE(329)] = 16559, - [SMALL_STATE(330)] = 16567, + [SMALL_STATE(117)] = 8865, + [SMALL_STATE(118)] = 8905, + [SMALL_STATE(119)] = 8979, + [SMALL_STATE(120)] = 9019, + [SMALL_STATE(121)] = 9059, + [SMALL_STATE(122)] = 9099, + [SMALL_STATE(123)] = 9139, + [SMALL_STATE(124)] = 9179, + [SMALL_STATE(125)] = 9218, + [SMALL_STATE(126)] = 9256, + [SMALL_STATE(127)] = 9296, + [SMALL_STATE(128)] = 9337, + [SMALL_STATE(129)] = 9372, + [SMALL_STATE(130)] = 9413, + [SMALL_STATE(131)] = 9450, + [SMALL_STATE(132)] = 9519, + [SMALL_STATE(133)] = 9554, + [SMALL_STATE(134)] = 9590, + [SMALL_STATE(135)] = 9648, + [SMALL_STATE(136)] = 9708, + [SMALL_STATE(137)] = 9770, + [SMALL_STATE(138)] = 9834, + [SMALL_STATE(139)] = 9900, + [SMALL_STATE(140)] = 9966, + [SMALL_STATE(141)] = 10000, + [SMALL_STATE(142)] = 10066, + [SMALL_STATE(143)] = 10132, + [SMALL_STATE(144)] = 10166, + [SMALL_STATE(145)] = 10200, + [SMALL_STATE(146)] = 10268, + [SMALL_STATE(147)] = 10302, + [SMALL_STATE(148)] = 10368, + [SMALL_STATE(149)] = 10410, + [SMALL_STATE(150)] = 10446, + [SMALL_STATE(151)] = 10514, + [SMALL_STATE(152)] = 10582, + [SMALL_STATE(153)] = 10650, + [SMALL_STATE(154)] = 10718, + [SMALL_STATE(155)] = 10786, + [SMALL_STATE(156)] = 10820, + [SMALL_STATE(157)] = 10868, + [SMALL_STATE(158)] = 10912, + [SMALL_STATE(159)] = 10962, + [SMALL_STATE(160)] = 11014, + [SMALL_STATE(161)] = 11082, + [SMALL_STATE(162)] = 11138, + [SMALL_STATE(163)] = 11192, + [SMALL_STATE(164)] = 11228, + [SMALL_STATE(165)] = 11294, + [SMALL_STATE(166)] = 11362, + [SMALL_STATE(167)] = 11428, + [SMALL_STATE(168)] = 11493, + [SMALL_STATE(169)] = 11558, + [SMALL_STATE(170)] = 11623, + [SMALL_STATE(171)] = 11656, + [SMALL_STATE(172)] = 11721, + [SMALL_STATE(173)] = 11754, + [SMALL_STATE(174)] = 11787, + [SMALL_STATE(175)] = 11820, + [SMALL_STATE(176)] = 11853, + [SMALL_STATE(177)] = 11900, + [SMALL_STATE(178)] = 11943, + [SMALL_STATE(179)] = 11992, + [SMALL_STATE(180)] = 12043, + [SMALL_STATE(181)] = 12098, + [SMALL_STATE(182)] = 12151, + [SMALL_STATE(183)] = 12208, + [SMALL_STATE(184)] = 12267, + [SMALL_STATE(185)] = 12328, + [SMALL_STATE(186)] = 12391, + [SMALL_STATE(187)] = 12424, + [SMALL_STATE(188)] = 12489, + [SMALL_STATE(189)] = 12522, + [SMALL_STATE(190)] = 12587, + [SMALL_STATE(191)] = 12620, + [SMALL_STATE(192)] = 12685, + [SMALL_STATE(193)] = 12750, + [SMALL_STATE(194)] = 12783, + [SMALL_STATE(195)] = 12816, + [SMALL_STATE(196)] = 12849, + [SMALL_STATE(197)] = 12914, + [SMALL_STATE(198)] = 12979, + [SMALL_STATE(199)] = 13012, + [SMALL_STATE(200)] = 13045, + [SMALL_STATE(201)] = 13110, + [SMALL_STATE(202)] = 13175, + [SMALL_STATE(203)] = 13208, + [SMALL_STATE(204)] = 13241, + [SMALL_STATE(205)] = 13274, + [SMALL_STATE(206)] = 13339, + [SMALL_STATE(207)] = 13404, + [SMALL_STATE(208)] = 13469, + [SMALL_STATE(209)] = 13502, + [SMALL_STATE(210)] = 13567, + [SMALL_STATE(211)] = 13632, + [SMALL_STATE(212)] = 13665, + [SMALL_STATE(213)] = 13730, + [SMALL_STATE(214)] = 13795, + [SMALL_STATE(215)] = 13860, + [SMALL_STATE(216)] = 13925, + [SMALL_STATE(217)] = 13958, + [SMALL_STATE(218)] = 13993, + [SMALL_STATE(219)] = 14058, + [SMALL_STATE(220)] = 14123, + [SMALL_STATE(221)] = 14156, + [SMALL_STATE(222)] = 14209, + [SMALL_STATE(223)] = 14262, + [SMALL_STATE(224)] = 14315, + [SMALL_STATE(225)] = 14368, + [SMALL_STATE(226)] = 14421, + [SMALL_STATE(227)] = 14474, + [SMALL_STATE(228)] = 14527, + [SMALL_STATE(229)] = 14580, + [SMALL_STATE(230)] = 14633, + [SMALL_STATE(231)] = 14686, + [SMALL_STATE(232)] = 14739, + [SMALL_STATE(233)] = 14792, + [SMALL_STATE(234)] = 14845, + [SMALL_STATE(235)] = 14873, + [SMALL_STATE(236)] = 14900, + [SMALL_STATE(237)] = 14925, + [SMALL_STATE(238)] = 14952, + [SMALL_STATE(239)] = 14974, + [SMALL_STATE(240)] = 14996, + [SMALL_STATE(241)] = 15018, + [SMALL_STATE(242)] = 15040, + [SMALL_STATE(243)] = 15062, + [SMALL_STATE(244)] = 15090, + [SMALL_STATE(245)] = 15116, + [SMALL_STATE(246)] = 15144, + [SMALL_STATE(247)] = 15172, + [SMALL_STATE(248)] = 15192, + [SMALL_STATE(249)] = 15212, + [SMALL_STATE(250)] = 15234, + [SMALL_STATE(251)] = 15254, + [SMALL_STATE(252)] = 15276, + [SMALL_STATE(253)] = 15294, + [SMALL_STATE(254)] = 15314, + [SMALL_STATE(255)] = 15335, + [SMALL_STATE(256)] = 15356, + [SMALL_STATE(257)] = 15379, + [SMALL_STATE(258)] = 15402, + [SMALL_STATE(259)] = 15423, + [SMALL_STATE(260)] = 15441, + [SMALL_STATE(261)] = 15456, + [SMALL_STATE(262)] = 15471, + [SMALL_STATE(263)] = 15486, + [SMALL_STATE(264)] = 15501, + [SMALL_STATE(265)] = 15516, + [SMALL_STATE(266)] = 15531, + [SMALL_STATE(267)] = 15546, + [SMALL_STATE(268)] = 15558, + [SMALL_STATE(269)] = 15572, + [SMALL_STATE(270)] = 15586, + [SMALL_STATE(271)] = 15600, + [SMALL_STATE(272)] = 15614, + [SMALL_STATE(273)] = 15628, + [SMALL_STATE(274)] = 15638, + [SMALL_STATE(275)] = 15652, + [SMALL_STATE(276)] = 15666, + [SMALL_STATE(277)] = 15680, + [SMALL_STATE(278)] = 15694, + [SMALL_STATE(279)] = 15708, + [SMALL_STATE(280)] = 15722, + [SMALL_STATE(281)] = 15731, + [SMALL_STATE(282)] = 15742, + [SMALL_STATE(283)] = 15751, + [SMALL_STATE(284)] = 15760, + [SMALL_STATE(285)] = 15771, + [SMALL_STATE(286)] = 15780, + [SMALL_STATE(287)] = 15791, + [SMALL_STATE(288)] = 15802, + [SMALL_STATE(289)] = 15811, + [SMALL_STATE(290)] = 15822, + [SMALL_STATE(291)] = 15833, + [SMALL_STATE(292)] = 15842, + [SMALL_STATE(293)] = 15853, + [SMALL_STATE(294)] = 15864, + [SMALL_STATE(295)] = 15875, + [SMALL_STATE(296)] = 15886, + [SMALL_STATE(297)] = 15897, + [SMALL_STATE(298)] = 15908, + [SMALL_STATE(299)] = 15919, + [SMALL_STATE(300)] = 15927, + [SMALL_STATE(301)] = 15935, + [SMALL_STATE(302)] = 15943, + [SMALL_STATE(303)] = 15951, + [SMALL_STATE(304)] = 15959, + [SMALL_STATE(305)] = 15967, + [SMALL_STATE(306)] = 15975, + [SMALL_STATE(307)] = 15983, + [SMALL_STATE(308)] = 15991, + [SMALL_STATE(309)] = 15999, + [SMALL_STATE(310)] = 16007, + [SMALL_STATE(311)] = 16015, + [SMALL_STATE(312)] = 16023, + [SMALL_STATE(313)] = 16031, + [SMALL_STATE(314)] = 16039, }; 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 = false}}, SHIFT(87), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(84), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(322), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), - [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(105), - [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), - [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(276), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), - [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237), - [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(133), - [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), - [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), - [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), - [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), - [47] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(87), - [50] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(108), - [53] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(84), - [56] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(78), - [59] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(322), - [62] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(321), - [65] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(325), - [68] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(66), - [71] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(105), - [74] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(33), - [77] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [80] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(276), - [83] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), - [86] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(4), - [89] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [91] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(237), - [94] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), - [96] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), - [98] = {.entry = {.count = 1, .reusable = false}}, SHIFT(132), - [100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), - [104] = {.entry = {.count = 1, .reusable = false}}, SHIFT(274), - [106] = {.entry = {.count = 1, .reusable = false}}, SHIFT(140), - [108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), - [110] = {.entry = {.count = 1, .reusable = false}}, SHIFT(146), - [112] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), - [114] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), - [116] = {.entry = {.count = 1, .reusable = false}}, SHIFT(218), - [118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [120] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), - [122] = {.entry = {.count = 1, .reusable = false}}, SHIFT(279), - [124] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), - [126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), - [130] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), - [132] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), - [134] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), - [136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [138] = {.entry = {.count = 1, .reusable = false}}, SHIFT(97), - [140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), - [142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [146] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), - [150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 2, 0, 0), - [152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(319), - [154] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 2, 0, 0), - [156] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 2, 0, 3), - [158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(328), - [160] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 2, 0, 3), - [162] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), - [164] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(319), - [167] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), - [169] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_self_path, 1, 0, 0), - [171] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_self_path, 1, 0, 0), - [173] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [175] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(328), - [178] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), - [180] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identity_path, 1, 0, 0), - [182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identity_path, 1, 0, 0), - [184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 15), - [186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 15), - [188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 20), - [190] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 20), - [192] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), - [198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), - [200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 8), - [202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 5), - [204] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 5), - [206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 12), - [208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 12), - [210] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 14), - [212] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 14), - [214] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 5), - [216] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 5), - [218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 6), - [220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 6), - [222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 16), - [224] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), - [226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 16), - [228] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), - [230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 6, 0, 28), - [232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [234] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [236] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), - [238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [242] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), - [244] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), - [246] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), - [248] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), - [250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [258] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 6, 0, 28), - [260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 22), - [266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 22), - [268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 25), - [270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 25), - [272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 29), - [274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 29), - [276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 30), - [278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 30), - [280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 10), - [286] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 10), - [288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 4), - [290] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 4), - [292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [294] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [298] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 13), - [302] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 13), - [304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [308] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 26), - [310] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 26), - [312] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 17), - [314] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 17), - [316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 27), - [318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 27), - [320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 19), - [322] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 19), - [324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 7), - [326] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 7), - [328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [330] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 21), - [334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 21), - [336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [338] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), - [340] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), - [342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), - [344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), - [346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(329), - [348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(312), - [350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), - [352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), - [354] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), - [356] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_identity_path_repeat1, 2, 0, 0), SHIFT_REPEAT(327), - [359] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_self_path_repeat1, 2, 0, 9), SHIFT_REPEAT(329), - [362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), - [366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), - [368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(313), - [370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), - [372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [374] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), - [376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), - [378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), - [380] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), - [382] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), - [384] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), - [386] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), - [388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), - [390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), - [398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), - [402] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 18), - [404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), - [406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), - [408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), - [410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), - [414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), - [416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), - [418] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 24), - [420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [424] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38), - [426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [430] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), - [432] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), - [434] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), - [436] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), - [438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), - [448] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), - [450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), - [454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), - [460] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), - [464] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), - [466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), - [468] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), - [470] = {.entry = {.count = 1, .reusable = false}}, SHIFT(64), - [472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), - [474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256), - [484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), - [486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245), - [488] = {.entry = {.count = 1, .reusable = false}}, SHIFT(249), - [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), - [492] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), - [496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(258), - [498] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [500] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [502] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), - [504] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 16), - [506] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), - [508] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), - [510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), - [512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), - [514] = {.entry = {.count = 1, .reusable = false}}, SHIFT(240), - [516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), - [518] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), - [520] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 4), - [522] = {.entry = {.count = 1, .reusable = false}}, SHIFT(246), - [524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), - [526] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), - [528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), - [530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), - [532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), - [534] = {.entry = {.count = 1, .reusable = false}}, SHIFT(235), - [536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), - [538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(252), - [540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(298), - [542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), - [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), - [546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), - [548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), - [550] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(298), - [553] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [555] = {.entry = {.count = 1, .reusable = false}}, SHIFT(323), - [557] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), - [559] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), - [561] = {.entry = {.count = 1, .reusable = false}}, SHIFT(9), - [563] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), - [565] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), - [567] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), - [569] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(323), - [572] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), - [574] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 11), - [576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), - [580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(286), - [584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), - [586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(330), - [588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), - [590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(191), - [592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), - [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), - [596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), - [598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), - [600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), - [602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [604] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(299), - [607] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [609] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), - [613] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [615] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [617] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [619] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), - [621] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [623] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), - [625] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), - [627] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [629] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), - [631] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [633] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), - [635] = {.entry = {.count = 1, .reusable = true}}, SHIFT(320), - [637] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [639] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), - [641] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), - [643] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 23), - [645] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), - [647] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), - [649] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), - [651] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), - [653] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [655] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [657] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), - [659] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [661] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), - [663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308), - [665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [667] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), - [669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), - [671] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), - [673] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), - [677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), - [679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(122), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), + [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(96), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(265), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), + [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(127), + [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), + [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [43] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(122), + [46] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(122), + [49] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(78), + [52] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(300), + [55] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(304), + [58] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(311), + [61] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(29), + [64] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(96), + [67] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(34), + [70] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), + [73] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(265), + [76] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(2), + [79] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(6), + [82] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [84] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(221), + [87] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [89] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), + [91] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), + [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), + [95] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), + [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(261), + [101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(208), + [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(208), + [105] = {.entry = {.count = 1, .reusable = false}}, SHIFT(124), + [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [109] = {.entry = {.count = 1, .reusable = false}}, SHIFT(211), + [111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [113] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), + [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(266), + [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), + [123] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [125] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [127] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), + [129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [131] = {.entry = {.count = 1, .reusable = false}}, SHIFT(89), + [133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [135] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [137] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [139] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), + [143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), + [145] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), + [147] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [149] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [151] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), + [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), + [155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), + [157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 18), + [159] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 18), + [161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 11), + [163] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 11), + [165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [167] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [169] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), + [171] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), + [173] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), + [175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), + [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 14), + [179] = {.entry = {.count = 1, .reusable = true}}, SHIFT(314), + [181] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), + [183] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 14), + [185] = {.entry = {.count = 1, .reusable = true}}, SHIFT(271), + [187] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 25), + [189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [193] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), + [195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [199] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), + [201] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), + [203] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), + [205] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), + [207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 25), + [217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), + [219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), + [221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 7), + [223] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 7), + [225] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member_access, 3, 0, 13), + [227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member_access, 3, 0, 13), + [229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [231] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 15), + [235] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 15), + [237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 17), + [239] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 17), + [241] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [243] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [245] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 19), + [247] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 19), + [249] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [251] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [253] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [255] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [257] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [259] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 20), + [261] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 20), + [263] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 10), + [265] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 10), + [267] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 23), + [269] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 23), + [271] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 24), + [273] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 24), + [275] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [277] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [279] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 6, 0, 26), + [281] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 6, 0, 26), + [283] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [285] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [287] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 27), + [289] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 27), + [291] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 28), + [293] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 28), + [295] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), + [297] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), + [299] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), + [301] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), + [303] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), + [305] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), + [307] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), + [309] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), + [311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), + [313] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308), + [315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), + [317] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [321] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), + [325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [327] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), + [329] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), + [331] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), + [333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278), + [335] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), + [337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), + [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [345] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 22), + [347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [351] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 16), + [353] = {.entry = {.count = 1, .reusable = true}}, SHIFT(234), + [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), + [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), + [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), + [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), + [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), + [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [381] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), + [383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [385] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [387] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), + [389] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), + [391] = {.entry = {.count = 1, .reusable = false}}, SHIFT(77), + [393] = {.entry = {.count = 1, .reusable = false}}, SHIFT(44), + [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [409] = {.entry = {.count = 1, .reusable = false}}, SHIFT(31), + [411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), + [415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [421] = {.entry = {.count = 1, .reusable = false}}, SHIFT(49), + [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [425] = {.entry = {.count = 1, .reusable = false}}, SHIFT(65), + [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), + [437] = {.entry = {.count = 1, .reusable = false}}, SHIFT(235), + [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), + [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), + [445] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), + [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), + [451] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 14), + [453] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 14), + [455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), + [457] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), + [459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [461] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), + [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), + [467] = {.entry = {.count = 1, .reusable = false}}, SHIFT(229), + [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), + [471] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), + [473] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), + [475] = {.entry = {.count = 1, .reusable = false}}, SHIFT(222), + [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), + [479] = {.entry = {.count = 1, .reusable = false}}, SHIFT(230), + [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), + [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), + [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), + [487] = {.entry = {.count = 1, .reusable = false}}, SHIFT(231), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), + [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), + [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(195), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(298), + [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [503] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(298), + [506] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [508] = {.entry = {.count = 1, .reusable = false}}, SHIFT(305), + [510] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), + [512] = {.entry = {.count = 1, .reusable = false}}, SHIFT(37), + [514] = {.entry = {.count = 1, .reusable = false}}, SHIFT(64), + [516] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), + [518] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(305), + [521] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), + [523] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), + [525] = {.entry = {.count = 1, .reusable = false}}, SHIFT(52), + [527] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 8), + [529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(277), + [533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), + [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), + [539] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(296), + [542] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), + [546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275), + [548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), + [550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), + [552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), + [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), + [556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), + [558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), + [560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(269), + [562] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [564] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [566] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), + [576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), + [578] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), + [582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), + [584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), + [586] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 21), + [588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(273), + [590] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), + [596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(283), + [604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), + [606] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [608] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(280), + [612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(293), + [616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), + [620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), + [622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), + [624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [626] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), }; #ifdef __cplusplus diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt index 993fb28..f3da4bf 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/closure.txt @@ -1,4 +1,3 @@ - identity_path: $ => seq($.identifier, repeat(seq('.', $.identifier))), ================== Empty ================== @@ -12,11 +11,12 @@ Empty (closure_definition (struct_definition) (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier))) - (expression - (string))))) + (expression + (string))))) ================== With argument @@ -34,13 +34,17 @@ With argument (identifier) (declaration_type (expression - (identity_path - (identifier) - (identifier) + (member_access + (expression + (member_access + (expression + (identifier)) + (identifier))) (identifier)))))) (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier))) (expression (string))))) @@ -61,22 +65,24 @@ With Binary Expression (identifier) (declaration_type (expression - (identity_path - (identifier) - (identifier) + (member_access + (expression + (member_access + (expression + (identifier)) + (identifier))) (identifier)))))) (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier))) (expression (binary_expression (expression - (identity_path - (identifier))) + (identifier)) (expression - (identity_path - (identifier)))))))) + (identifier))))))) ================== Call function @@ -90,14 +96,12 @@ value(value=value) (expression (function_call (expression - (identity_path - (identifier))) + (identifier)) (dictionary_construction (dictionary_member_assignment (identifier) (expression - (identity_path - (identifier)))))))) + (identifier))))))) ================== Call no arguments @@ -111,8 +115,7 @@ value() (expression (function_call (expression - (identity_path - (identifier))) + (identifier)) (dictionary_construction)))) ================== @@ -127,15 +130,15 @@ value.value(value=value) (expression (function_call (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier))) (dictionary_construction (dictionary_member_assignment (identifier) (expression - (identity_path - (identifier)))))))) + (identifier))))))) ================== Call method @@ -149,15 +152,13 @@ value::value(value=value) (expression (method_call (expression - (identity_path - (identifier))) + (identifier)) (identifier) (dictionary_construction (dictionary_member_assignment (identifier) (expression - (identity_path - (identifier)))))))) + (identifier))))))) ================== Call method no arguments @@ -171,8 +172,7 @@ value::value() (expression (method_call (expression - (identity_path - (identifier))) + (identifier)) (identifier) (dictionary_construction)))) @@ -188,16 +188,16 @@ value.value::value(value=value) (expression (method_call (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier))) (identifier) (dictionary_construction (dictionary_member_assignment (identifier) (expression - (identity_path - (identifier)))))))) + (identifier))))))) ================== Call method inside parenthasis @@ -213,8 +213,7 @@ Call method inside parenthasis (expression (method_call (expression - (identity_path - (identifier))) + (identifier)) (identifier) (dictionary_construction)))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt index eb390e3..8406d56 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/comments.txt @@ -27,8 +27,9 @@ Comment before closure (closure_definition (struct_definition) (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier))) (expression (string))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt b/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt index 222872c..39085d4 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt @@ -24,8 +24,7 @@ One (dictionary_member_assignment (identifier) (expression - (identity_path - (identifier))))))) + (identifier)))))) ================== One, @@ -41,8 +40,7 @@ One, (dictionary_member_assignment (identifier) (expression - (identity_path - (identifier))))))) + (identifier)))))) ================== One, two @@ -58,13 +56,11 @@ One, two (dictionary_member_assignment (identifier) (expression - (identity_path - (identifier)))) + (identifier))) (dictionary_member_assignment (identifier) (expression - (identity_path - (identifier))))))) + (identifier)))))) ================== One, two, @@ -80,10 +76,8 @@ One, two, (dictionary_member_assignment (identifier) (expression - (identity_path - (identifier)))) + (identifier))) (dictionary_member_assignment (identifier) (expression - (identity_path - (identifier))))))) + (identifier)))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/list.txt b/crates/tree-sitter-command-cad-model/test/corpus/list.txt index dfef5eb..7ff28fb 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/list.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/list.txt @@ -22,8 +22,7 @@ Single (expression (list (expression - (identity_path - (identifier)))))) + (identifier))))) ================== Multi @@ -37,17 +36,13 @@ Multi (expression (list (expression - (identity_path - (identifier))) + (identifier)) (expression - (identity_path - (identifier))) + (identifier)) (expression - (identity_path - (identifier))) + (identifier)) (expression - (identity_path - (identifier)))))) + (identifier))))) ================== Multi with comma at the end @@ -61,14 +56,10 @@ Multi with comma at the end (expression (list (expression - (identity_path - (identifier))) + (identifier)) (expression - (identity_path - (identifier))) + (identifier)) (expression - (identity_path - (identifier))) + (identifier)) (expression - (identity_path - (identifier)))))) + (identifier))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt b/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt index 965034e..399ce79 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt @@ -16,27 +16,21 @@ Precedence (expression (binary_expression (expression - (identity_path - (identifier))) + (identifier)) (expression (binary_expression (expression - (identity_path - (identifier))) + (identifier)) (expression (binary_expression (expression - (identity_path - (identifier))) + (identifier)) (expression - (identity_path - (identifier))))))))) + (identifier)))))))) (expression - (identity_path - (identifier))))))) + (identifier)))))) (expression - (identity_path - (identifier)))))) + (identifier))))) ================== Vectors @@ -54,24 +48,18 @@ Vectors (expression (vector2 (expression - (identity_path - (identifier))) + (identifier)) (expression - (identity_path - (identifier))))) + (identifier)))) (expression (vector2 (expression - (identity_path - (identifier))) + (identifier)) (expression - (identity_path - (identifier))))))) + (identifier)))))) (expression (vector2 (expression - (identity_path - (identifier))) + (identifier)) (expression - (identity_path - (identifier)))))))) + (identifier))))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt b/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt index a9caa27..8765bcc 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt @@ -25,8 +25,9 @@ One (identifier) (declaration_type (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier)))))))) ================== @@ -44,8 +45,9 @@ One, (identifier) (declaration_type (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier)))))))) ================== @@ -89,8 +91,9 @@ One, ... (identifier) (declaration_type (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier))))) (varadic_dots)))) @@ -109,8 +112,9 @@ One, ..., (identifier) (declaration_type (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier))))) (varadic_dots)))) @@ -129,15 +133,17 @@ One, two (identifier) (declaration_type (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier))))) (struct_member (identifier) (declaration_type (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier)))))))) ================== @@ -155,15 +161,17 @@ One, two, (identifier) (declaration_type (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier))))) (struct_member (identifier) (declaration_type (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier)))))))) ================== @@ -181,15 +189,17 @@ One, two, ..., (identifier) (declaration_type (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier))))) (struct_member (identifier) (declaration_type (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier))))) (varadic_dots)))) @@ -208,12 +218,12 @@ Default (identifier) (declaration_type (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier)))) (expression - (identity_path - (identifier))))))) + (identifier)))))) ================== Default, @@ -230,9 +240,9 @@ Default, (identifier) (declaration_type (expression - (identity_path - (identifier) + (member_access + (expression + (identifier)) (identifier)))) (expression - (identity_path - (identifier))))))) + (identifier)))))) diff --git a/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt b/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt index bbda8f4..83ec5f2 100644 --- a/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt +++ b/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt @@ -7,12 +7,17 @@ this.is.a.test --- (source_file -(expression - (identity_path - (identifier) - (identifier) - (identifier) - (identifier)))) + (expression + (member_access + (expression + (member_access + (expression + (member_access + (expression + (identifier)) + (identifier))) + (identifier))) + (identifier)))) ================== Self Path @@ -24,9 +29,16 @@ self.this.is.a.test (source_file (expression - (self_path - (self) - (identifier) - (identifier) - (identifier) + (member_access + (expression + (member_access + (expression + (member_access + (expression + (member_access + (expression + (self)) + (identifier))) + (identifier))) + (identifier))) (identifier)))) From 0a2bcd22080aefb1714eaf3d06213edcd328e505 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 17 Jan 2026 01:11:18 -0500 Subject: [PATCH 076/106] WIP Formulas --- crates/interpreter/src/compile/expressions.rs | 199 +- crates/interpreter/src/compile/formula.rs | 526 + crates/interpreter/src/compile/mod.rs | 174 +- crates/interpreter/src/execution/mod.rs | 7 + .../src/execution/values/closure.rs | 310 +- .../interpreter/src/execution/values/file.rs | 2 +- .../src/execution/values/integer.rs | 32 +- .../interpreter/src/execution/values/list.rs | 32 +- .../interpreter/src/execution/values/mod.rs | 10 + .../src/execution/values/scalar.rs | 88 +- .../src/execution/values/string/mod.rs | 52 +- .../src/execution/values/value_type.rs | 4 +- .../src/execution/values/vector.rs | 22 +- .../tree-sitter-command-cad-model/grammar.js | 30 +- .../src/grammar.json | 422 +- .../src/node-types.json | 210 + .../src/parser.c | 14446 ++++++++++------ 17 files changed, 10347 insertions(+), 6219 deletions(-) create mode 100644 crates/interpreter/src/compile/formula.rs diff --git a/crates/interpreter/src/compile/expressions.rs b/crates/interpreter/src/compile/expressions.rs index 56469eb..aa73421 100644 --- a/crates/interpreter/src/compile/expressions.rs +++ b/crates/interpreter/src/compile/expressions.rs @@ -1,6 +1,5 @@ use std::{cmp::Ordering, collections::HashSet, path::PathBuf, sync::Arc}; -use common_data_types::{ConversionFactor, Dimension, Float, RawFloat}; use hashable_map::HashableSet; use imstr::ImString; use nodes::SourceFile; @@ -8,7 +7,10 @@ use tree_sitter::Range; use type_sitter::{HasChild, Node}; use unwrap_enum::EnumAs; -use crate::execution::find_all_variable_accesses_in_expression; +use crate::{ + compile::{formula::Formula, Scalar}, + execution::find_all_variable_accesses_in_expression, +}; use super::{nodes, AstNode, Error, Parse}; @@ -114,6 +116,7 @@ pub enum Expression { FunctionCall(AstNode>), MethodCall(AstNode>), LetIn(AstNode>), + Formula(AstNode), } impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for Expression { @@ -132,23 +135,30 @@ impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for Expression { } } +impl<'t> Parse<'t, nodes::Formula<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Formula<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::Formula(Formula::parse(file, input, value)?), + )) + } +} + impl<'t> Parse<'t, nodes::Boolean<'t>> for Expression { fn parse<'i>( file: &Arc, - _input: &'i str, + input: &'i str, value: nodes::Boolean<'t>, ) -> Result, Error<'t, 'i>> { - type ChildType<'t> = as HasChild<'t>>::Child; - let child = value.child()?; - Ok(AstNode::new( file, &value, - Self::Boolean(AstNode::new( - file, - &child, - matches!(child, ChildType::True(_)), - )), + Self::Boolean(bool::parse(file, input, value)?), )) } } @@ -323,34 +333,24 @@ impl<'t> Parse<'t, nodes::SignedInteger<'t>> for Expression { input: &'i str, value: nodes::SignedInteger<'t>, ) -> Result, Error<'t, 'i>> { - let number = value.value()?; - let integer = match number.child()? { - nodes::anon_unions::BaseTen_Binary_Hex_Octal::Hex(value) => { - let text = &input[value.byte_range()][2..]; - i64::from_str_radix(text, 16) - } - nodes::anon_unions::BaseTen_Binary_Hex_Octal::BaseTen(value) => { - let text = &input[value.byte_range()]; - i64::from_str_radix(text, 10) - } - nodes::anon_unions::BaseTen_Binary_Hex_Octal::Octal(value) => { - let text = &input[value.byte_range()][2..]; - i64::from_str_radix(text, 8) - } - nodes::anon_unions::BaseTen_Binary_Hex_Octal::Binary(value) => { - let text = &input[value.byte_range()][2..]; - i64::from_str_radix(text, 2) - } - } - .map_err(|error| ParseIntError { - error, - node: number, - })?; + Ok(AstNode::new( + file, + &value, + Self::SignedInteger(i64::parse(file, input, value)?), + )) + } +} +impl<'t> Parse<'t, nodes::UnsignedInteger<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::UnsignedInteger<'t>, + ) -> Result, Error<'t, 'i>> { Ok(AstNode::new( file, &value, - Self::SignedInteger(AstNode::new(file, &value, integer)), + Self::UnsignedInteger(u64::parse(file, input, value)?), )) } } @@ -413,44 +413,6 @@ impl<'t> Parse<'t, nodes::UnaryExpression<'t>> for Expression { } } -impl<'t> Parse<'t, nodes::UnsignedInteger<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::UnsignedInteger<'t>, - ) -> Result, Error<'t, 'i>> { - let number = value.value()?; - let integer = match number.child()? { - nodes::anon_unions::BaseTen_Binary_Hex_Octal::Hex(value) => { - let text = &input[value.byte_range()][2..]; - u64::from_str_radix(text, 16) - } - nodes::anon_unions::BaseTen_Binary_Hex_Octal::BaseTen(value) => { - let text = &input[value.byte_range()]; - u64::from_str_radix(text, 10) - } - nodes::anon_unions::BaseTen_Binary_Hex_Octal::Octal(value) => { - let text = &input[value.byte_range()][2..]; - u64::from_str_radix(text, 8) - } - nodes::anon_unions::BaseTen_Binary_Hex_Octal::Binary(value) => { - let text = &input[value.byte_range()][2..]; - u64::from_str_radix(text, 2) - } - } - .map_err(|error| ParseIntError { - error, - node: number, - })?; - - Ok(AstNode::new( - file, - &value, - Self::UnsignedInteger(AstNode::new(file, &value, integer)), - )) - } -} - impl<'t> Parse<'t, nodes::FunctionCall<'t>> for Expression { fn parse<'i>( file: &Arc, @@ -539,10 +501,7 @@ impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { } ChildType::FunctionCall(function_call) => Self::parse(file, input, function_call), ChildType::MethodCall(method_call) => Self::parse(file, input, method_call), - ChildType::Formula(formula) => { - // TODO we need to add formula types. - todo!() - } + ChildType::Formula(formula) => Self::parse(file, input, formula), ChildType::LetIn(let_in) => Self::parse(file, input, let_in), } } @@ -708,91 +667,6 @@ impl<'t> Parse<'t, nodes::Self_<'t>> for Self_ { } } -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct Scalar { - pub dimension: Dimension, - pub value: Float, -} - -impl<'t> Parse<'t, nodes::Scalar<'t>> for Scalar { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::Scalar<'t>, - ) -> Result, Error<'t, 'i>> { - const IDENTITY_CONVERSION_FACTOR: ConversionFactor = ConversionFactor { - constant: 0.0, - coefficient: 1.0, - dimension: Dimension::zero(), - }; - - // Get the conversion factor using the unit name. - let conversion_factor = if let Some(unit_name) = value.unit() { - let unit_name = unit_name?; - - let unit_name_str = match unit_name { - nodes::anon_unions::Identifier_UnitQuote::Identifier(_identifier) => { - &input[unit_name.byte_range()] - } - nodes::anon_unions::Identifier_UnitQuote::UnitQuote(_unit_quote) => { - let original = &input[unit_name.byte_range()]; - &original[1..original.len() - 1] - } - }; - - if let Some(conversion_factor) = units::get_conversion_factor(unit_name_str) { - conversion_factor - } else { - // TODO try and list similar names to what they user may have meant. - // We don't know what this is. - return Err(Error::InvalidUnit(InvalidUnitError { - name: unit_name_str, - node: unit_name, - })); - } - } else { - // If a unit is not specified, we assume the zero dimension and no conversion. - &IDENTITY_CONVERSION_FACTOR - }; - - let whole_node = value.whole()?; - let whole = &input[whole_node.byte_range()]; - let whole: u64 = whole.parse().map_err(|error| ParseNumberError { - error, - node: whole_node, - })?; - - let (fraction, fraction_len): (u64, _) = if let Some(fractional_node) = value.fractional() { - let fraction_str = &input[fractional_node.byte_range()]; - let fraction = fraction_str.parse().map_err(|error| ParseNumberError { - error, - node: whole_node, - })?; - - (fraction, fraction_str.len()) - } else { - // Faction is not present. We assume zero. - (0, 1) - }; - - let scale_value: f64 = - whole as RawFloat + (fraction as RawFloat / (10.0 as RawFloat).powi(fraction_len as _)); - let scale_value = Float::new(scale_value).expect("Float was NaN"); - let scale_value = conversion_factor.convert_to_base_unit(scale_value); - - let dimension = conversion_factor.dimension; - - Ok(AstNode::new( - file, - &value, - Self { - dimension, - value: scale_value, - }, - )) - } -} - #[derive(Debug, Hash, Eq, PartialEq)] pub struct Vector2 { pub x: AstNode, @@ -1303,6 +1177,7 @@ pub fn compile<'t, 'i>( #[cfg(test)] mod test { use crate::compile::full_compile; + use common_data_types::{Dimension, Float}; use pretty_assertions::assert_eq; use super::*; diff --git a/crates/interpreter/src/compile/formula.rs b/crates/interpreter/src/compile/formula.rs new file mode 100644 index 0000000..032803f --- /dev/null +++ b/crates/interpreter/src/compile/formula.rs @@ -0,0 +1,526 @@ +/* + * Copyright 2026 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use std::{path::PathBuf, sync::Arc}; + +use crate::compile::{nodes, Error, Parse}; + +use super::{AstNode, Scalar}; +use imstr::ImString; +use type_sitter::HasChild; + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct Formula { + left: AstNode, + right: AstNode, + relation: Relation, +} + +impl<'t> Parse<'t, nodes::Formula<'t>> for Formula { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Formula<'t>, + ) -> Result, Error<'t, 'i>> { + let left = Expression::parse(file, input, value.lhs()?)?; + let right = Expression::parse(file, input, value.rhs()?)?; + + type Operator<'t> = nodes::anon_unions::NotEq_Lt_LtEq_EqEq_Gt_GtEq<'t>; + let relation = match value.relation()? { + Operator::Lt(_) => Relation::Less, + Operator::LtEq(_) => Relation::LessEqual, + Operator::EqEq(_) => Relation::Equal, + Operator::GtEq(_) => Relation::GreaterEqual, + Operator::Gt(_) => Relation::Greater, + Operator::NotEq(_) => Relation::NotEqual, + }; + + Ok(AstNode::new( + file, + &value, + Self { + left, + right, + relation, + }, + )) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub enum Relation { + Less, + LessEqual, + Equal, + GreaterEqual, + Greater, + NotEqual, +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub enum Expression { + Parenthesis(Box>), + SignedInteger(AstNode), + UnsignedInteger(AstNode), + Boolean(AstNode), + Scalar(AstNode), + Vector2(AstNode>), + Vector3(AstNode>), + Vector4(AstNode>), + Identifier(AstNode), + UnaryExpression(Box>), + BinaryExpression(Box>), + FunctionCall(Box>), + MethodCall(Box>), +} + +impl<'t> Parse<'t, nodes::FormulaExpression<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaExpression<'t>, + ) -> Result, Error<'t, 'i>> { + type ChildType<'t> = as HasChild<'t>>::Child; + + match value.child()? { + ChildType::FormulaBinaryExpression(binary_expression) => { + Self::parse(file, input, binary_expression) + } + ChildType::Boolean(value) => Self::parse(file, input, value), + ChildType::FormulaParenthesis(parenthesis) => Self::parse(file, input, parenthesis), + ChildType::Identifier(ident) => Ok(AstNode::new( + file, + &value, + Self::Identifier(ImString::parse(file, input, ident)?), + )), + ChildType::Scalar(scalar) => Self::parse(file, input, scalar), + ChildType::FormulaVector2(vector) => Self::parse(file, input, vector), + ChildType::FormulaVector3(vector) => Self::parse(file, input, vector), + ChildType::FormulaVector4(vector) => Self::parse(file, input, vector), + ChildType::SignedInteger(signed_integer) => Self::parse(file, input, signed_integer), + ChildType::FormulaUnaryExpression(unary_expression) => { + Self::parse(file, input, unary_expression) + } + ChildType::UnsignedInteger(unsigned_integer) => { + Self::parse(file, input, unsigned_integer) + } + ChildType::FormulaFunctionCall(function_call) => { + Self::parse(file, input, function_call) + } + ChildType::FormulaMethodCall(method_call) => Self::parse(file, input, method_call), + } + } +} + +impl<'t> Parse<'t, nodes::FormulaBinaryExpression<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaBinaryExpression<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::BinaryExpression(Box::new(BinaryExpression::parse(file, input, value)?)), + )) + } +} + +impl<'t> Parse<'t, nodes::Boolean<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Boolean<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::Boolean(bool::parse(file, input, value)?), + )) + } +} + +impl<'t> Parse<'t, nodes::FormulaParenthesis<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaParenthesis<'t>, + ) -> Result, Error<'t, 'i>> { + let expression = value.formula_expression()?; + Ok(AstNode::new( + file, + &value, + Self::Parenthesis(Box::new(Self::parse(file, input, expression)?)), + )) + } +} + +impl<'t> Parse<'t, nodes::Scalar<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Scalar<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::Scalar(Scalar::parse(file, input, value)?), + )) + } +} + +impl<'t> Parse<'t, nodes::FormulaVector2<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaVector2<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::Vector2(Vector2::parse(file, input, value)?.into_box()), + )) + } +} + +impl<'t> Parse<'t, nodes::FormulaVector3<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaVector3<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::Vector3(Vector3::parse(file, input, value)?.into_box()), + )) + } +} + +impl<'t> Parse<'t, nodes::FormulaVector4<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaVector4<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::Vector4(Vector4::parse(file, input, value)?.into_box()), + )) + } +} + +impl<'t> Parse<'t, nodes::SignedInteger<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::SignedInteger<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::SignedInteger(i64::parse(file, input, value)?), + )) + } +} + +impl<'t> Parse<'t, nodes::UnsignedInteger<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::UnsignedInteger<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::UnsignedInteger(u64::parse(file, input, value)?), + )) + } +} + +impl<'t> Parse<'t, nodes::FormulaUnaryExpression<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaUnaryExpression<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::UnaryExpression(Box::new(UnaryExpression::parse(file, input, value)?)), + )) + } +} + +impl<'t> Parse<'t, nodes::FormulaFunctionCall<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaFunctionCall<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::FunctionCall(Box::new(FunctionCall::parse(file, input, value)?)), + )) + } +} + +impl<'t> Parse<'t, nodes::FormulaMethodCall<'t>> for Expression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaMethodCall<'t>, + ) -> Result, Error<'t, 'i>> { + Ok(AstNode::new( + file, + &value, + Self::MethodCall(Box::new(MethodCall::parse(file, input, value)?)), + )) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub enum UnaryExpressionOperation { + Add, + Sub, + Not, +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct UnaryExpression { + pub operation: AstNode, + pub expression: AstNode, +} + +impl<'t> Parse<'t, nodes::FormulaUnaryExpression<'t>> for UnaryExpression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaUnaryExpression<'t>, + ) -> Result, Error<'t, 'i>> { + let operation = value.op()?; + + let operation = match operation { + nodes::anon_unions::Not_Add_Sub::Not(not) => { + AstNode::new(file, ¬, UnaryExpressionOperation::Not) + } + nodes::anon_unions::Not_Add_Sub::Add(add) => { + AstNode::new(file, &add, UnaryExpressionOperation::Add) + } + nodes::anon_unions::Not_Add_Sub::Sub(sub) => { + AstNode::new(file, &sub, UnaryExpressionOperation::Sub) + } + }; + + let expression = Expression::parse(file, input, value.formula_expression()?)?; + + Ok(AstNode::new( + file, + &value, + Self { + operation, + expression, + }, + )) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub enum BinaryExpressionOperation { + AndAnd, + Mul, + MulMul, + Add, + Sub, + Div, + Xor, + OrOr, +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct BinaryExpression { + pub operation: AstNode, + pub a: AstNode, + pub b: AstNode, +} + +impl<'t> Parse<'t, nodes::FormulaBinaryExpression<'t>> for BinaryExpression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaBinaryExpression<'t>, + ) -> Result, Error<'t, 'i>> { + type Operation<'t> = + nodes::anon_unions::AndAnd_Mul_MulMul_Add_Sub_Div_BitXorBitXor_OrOr<'t>; + + let operation = value.op()?; + + let operation = match operation { + Operation::AndAnd(and_and) => { + AstNode::new(file, &and_and, BinaryExpressionOperation::AndAnd) + } + Operation::Mul(mul) => AstNode::new(file, &mul, BinaryExpressionOperation::Mul), + Operation::MulMul(mul_mul) => { + AstNode::new(file, &mul_mul, BinaryExpressionOperation::MulMul) + } + Operation::Add(add) => AstNode::new(file, &add, BinaryExpressionOperation::Add), + Operation::Sub(sub) => AstNode::new(file, &sub, BinaryExpressionOperation::Sub), + Operation::Div(div) => AstNode::new(file, &div, BinaryExpressionOperation::Div), + Operation::BitXorBitXor(xor_xor) => { + AstNode::new(file, &xor_xor, BinaryExpressionOperation::Xor) + } + Operation::OrOr(or_or) => AstNode::new(file, &or_or, BinaryExpressionOperation::OrOr), + }; + + let a = value.a()?; + let a = Expression::parse(file, input, a)?; + + let b = value.b()?; + let b = Expression::parse(file, input, b)?; + + Ok(AstNode::new(file, &value, Self { operation, a, b })) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct Vector2 { + pub x: AstNode, + pub y: AstNode, +} + +impl<'t> Parse<'t, nodes::FormulaVector2<'t>> for Vector2 { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaVector2<'t>, + ) -> Result, Error<'t, 'i>> { + let x = value.x()?; + let x = Expression::parse(file, input, x)?; + + let y = value.y()?; + let y = Expression::parse(file, input, y)?; + + Ok(AstNode::new(file, &value, Self { x, y })) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct Vector3 { + pub x: AstNode, + pub y: AstNode, + pub z: AstNode, +} + +impl<'t> Parse<'t, nodes::FormulaVector3<'t>> for Vector3 { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaVector3<'t>, + ) -> Result, Error<'t, 'i>> { + let x = value.x()?; + let x = Expression::parse(file, input, x)?; + + let y = value.y()?; + let y = Expression::parse(file, input, y)?; + + let z = value.z()?; + let z = Expression::parse(file, input, z)?; + + Ok(AstNode::new(file, &value, Self { x, y, z })) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct Vector4 { + pub x: AstNode, + pub y: AstNode, + pub z: AstNode, + pub w: AstNode, +} + +impl<'t> Parse<'t, nodes::FormulaVector4<'t>> for Vector4 { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaVector4<'t>, + ) -> Result, Error<'t, 'i>> { + let x = value.x()?; + let x = Expression::parse(file, input, x)?; + + let y = value.y()?; + let y = Expression::parse(file, input, y)?; + + let z = value.z()?; + let z = Expression::parse(file, input, z)?; + + let w = value.w()?; + let w = Expression::parse(file, input, w)?; + + Ok(AstNode::new(file, &value, Self { x, y, z, w })) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct FunctionCall { + pub to_call: AstNode, + pub argument: AstNode, +} + +impl<'t> Parse<'t, nodes::FormulaFunctionCall<'t>> for FunctionCall { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaFunctionCall<'t>, + ) -> Result, Error<'t, 'i>> { + let to_call = Expression::parse(file, input, value.to_call()?)?; + let argument = Expression::parse(file, input, value.argument()?)?; + + Ok(AstNode::new(file, &value, Self { to_call, argument })) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct MethodCall { + pub self_dictionary: AstNode, + pub to_call: AstNode, + pub argument: AstNode, +} + +impl<'t> Parse<'t, nodes::FormulaMethodCall<'t>> for MethodCall { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::FormulaMethodCall<'t>, + ) -> Result, Error<'t, 'i>> { + let self_dictionary = Expression::parse(file, input, value.self_dictionary()?)?; + let to_call = ImString::parse(file, input, value.to_call()?)?; + let argument = Expression::parse(file, input, value.argument()?)?; + + Ok(AstNode::new( + file, + &value, + Self { + self_dictionary, + to_call, + argument, + }, + )) + } +} diff --git a/crates/interpreter/src/compile/mod.rs b/crates/interpreter/src/compile/mod.rs index 386727f..4f1e549 100644 --- a/crates/interpreter/src/compile/mod.rs +++ b/crates/interpreter/src/compile/mod.rs @@ -1,8 +1,10 @@ mod expressions; +mod formula; +use common_data_types::{ConversionFactor, Dimension, Float, RawFloat}; use imstr::ImString; use std::{path::PathBuf, sync::Arc}; -use type_sitter::{IncorrectKind, Node}; +use type_sitter::{HasChild, IncorrectKind, Node}; pub use expressions::*; @@ -54,6 +56,176 @@ impl<'t, N: Node<'t> + 't> Parse<'t, N> for ImString { } } +impl<'t> Parse<'t, nodes::Boolean<'t>> for bool { + fn parse<'i>( + file: &Arc, + _input: &'i str, + value: nodes::Boolean<'t>, + ) -> Result, Error<'t, 'i>> { + type ChildType<'t> = as HasChild<'t>>::Child; + let child = value.child()?; + + Ok(AstNode::new( + file, + &child, + matches!(child, ChildType::True(_)), + )) + } +} + +impl<'t> Parse<'t, nodes::SignedInteger<'t>> for i64 { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::SignedInteger<'t>, + ) -> Result, Error<'t, 'i>> { + let number = value.value()?; + let integer = match number.child()? { + nodes::anon_unions::BaseTen_Binary_Hex_Octal::Hex(value) => { + let text = &input[value.byte_range()][2..]; + i64::from_str_radix(text, 16) + } + nodes::anon_unions::BaseTen_Binary_Hex_Octal::BaseTen(value) => { + let text = &input[value.byte_range()]; + i64::from_str_radix(text, 10) + } + nodes::anon_unions::BaseTen_Binary_Hex_Octal::Octal(value) => { + let text = &input[value.byte_range()][2..]; + i64::from_str_radix(text, 8) + } + nodes::anon_unions::BaseTen_Binary_Hex_Octal::Binary(value) => { + let text = &input[value.byte_range()][2..]; + i64::from_str_radix(text, 2) + } + } + .map_err(|error| ParseIntError { + error, + node: number, + })?; + + Ok(AstNode::new(file, &value, integer)) + } +} + +impl<'t> Parse<'t, nodes::UnsignedInteger<'t>> for u64 { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::UnsignedInteger<'t>, + ) -> Result, Error<'t, 'i>> { + let number = value.value()?; + let integer = match number.child()? { + nodes::anon_unions::BaseTen_Binary_Hex_Octal::Hex(value) => { + let text = &input[value.byte_range()][2..]; + u64::from_str_radix(text, 16) + } + nodes::anon_unions::BaseTen_Binary_Hex_Octal::BaseTen(value) => { + let text = &input[value.byte_range()]; + u64::from_str_radix(text, 10) + } + nodes::anon_unions::BaseTen_Binary_Hex_Octal::Octal(value) => { + let text = &input[value.byte_range()][2..]; + u64::from_str_radix(text, 8) + } + nodes::anon_unions::BaseTen_Binary_Hex_Octal::Binary(value) => { + let text = &input[value.byte_range()][2..]; + u64::from_str_radix(text, 2) + } + } + .map_err(|error| ParseIntError { + error, + node: number, + })?; + + Ok(AstNode::new(file, &value, integer)) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct Scalar { + pub dimension: Dimension, + pub value: Float, +} + +impl<'t> Parse<'t, nodes::Scalar<'t>> for Scalar { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Scalar<'t>, + ) -> Result, Error<'t, 'i>> { + const IDENTITY_CONVERSION_FACTOR: ConversionFactor = ConversionFactor { + constant: 0.0, + coefficient: 1.0, + dimension: Dimension::zero(), + }; + + // Get the conversion factor using the unit name. + let conversion_factor = if let Some(unit_name) = value.unit() { + let unit_name = unit_name?; + + let unit_name_str = match unit_name { + nodes::anon_unions::Identifier_UnitQuote::Identifier(_identifier) => { + &input[unit_name.byte_range()] + } + nodes::anon_unions::Identifier_UnitQuote::UnitQuote(_unit_quote) => { + let original = &input[unit_name.byte_range()]; + &original[1..original.len() - 1] + } + }; + + if let Some(conversion_factor) = units::get_conversion_factor(unit_name_str) { + conversion_factor + } else { + // TODO try and list similar names to what they user may have meant. + // We don't know what this is. + return Err(Error::InvalidUnit(InvalidUnitError { + name: unit_name_str, + node: unit_name, + })); + } + } else { + // If a unit is not specified, we assume the zero dimension and no conversion. + &IDENTITY_CONVERSION_FACTOR + }; + + let whole_node = value.whole()?; + let whole = &input[whole_node.byte_range()]; + let whole: u64 = whole.parse().map_err(|error| ParseNumberError { + error, + node: whole_node, + })?; + + let (fraction, fraction_len): (u64, _) = if let Some(fractional_node) = value.fractional() { + let fraction_str = &input[fractional_node.byte_range()]; + let fraction = fraction_str.parse().map_err(|error| ParseNumberError { + error, + node: whole_node, + })?; + + (fraction, fraction_str.len()) + } else { + // Faction is not present. We assume zero. + (0, 1) + }; + + let scale_value: f64 = + whole as RawFloat + (fraction as RawFloat / (10.0 as RawFloat).powi(fraction_len as _)); + let scale_value = Float::new(scale_value).expect("Float was NaN"); + let scale_value = conversion_factor.convert_to_base_unit(scale_value); + + let dimension = conversion_factor.dimension; + + Ok(AstNode::new( + file, + &value, + Self { + dimension, + value: scale_value, + }, + )) + } +} + /// Represents an error while compiling. /// I would have preferred to use the `thiserror` crate, but /// the non static lifetime of IncorrectKind ruined any opportunity of that. diff --git a/crates/interpreter/src/execution/mod.rs b/crates/interpreter/src/execution/mod.rs index d2369cb..87384a5 100644 --- a/crates/interpreter/src/execution/mod.rs +++ b/crates/interpreter/src/execution/mod.rs @@ -152,6 +152,10 @@ pub fn find_all_variable_accesses_in_expression( Ok(()) } Expression::Identifier(ast_node) => access_collector(ast_node), + Expression::Formula(_) => { + // Formulas cannot access external variables. + Ok(()) + } Expression::Boolean(_) | Expression::Scalar(_) | Expression::Vector2(_) @@ -288,6 +292,9 @@ pub fn execute_expression( compile::Expression::FunctionCall(ast_node) => execute_function_call(context, ast_node), compile::Expression::MethodCall(ast_node) => execute_method_call(context, ast_node), compile::Expression::LetIn(ast_node) => execute_let_in(context, ast_node), + compile::Expression::Formula(formula) => { + todo!() + } } }) } diff --git a/crates/interpreter/src/execution/values/closure.rs b/crates/interpreter/src/execution/values/closure.rs index 4f93fb4..fc2e90b 100644 --- a/crates/interpreter/src/execution/values/closure.rs +++ b/crates/interpreter/src/execution/values/closure.rs @@ -25,11 +25,11 @@ use crate::{ compile::{AstNode, ClosureDefinition, Expression}, execute_expression, execution::{ - errors::{ExpressionResult, GenericFailure, Raise}, + errors::{ExpressionResult, Raise}, find_all_variable_accesses_in_expression, logging::{LocatedStr, LogLevel, LogMessage}, stack::ScopeType, - values::{string::formatting::Style, Dictionary, MissingAttributeError, Value}, + values::{string::formatting::Style, Dictionary, Value}, ExecutionContext, }, }; @@ -57,74 +57,41 @@ impl BuiltinCallableDatabase { database } - fn register_internal( - &mut self, - forward: Box, - inverse: Option, - ) { + pub fn register(&mut self, callable: Box) { if self .names - .insert(forward.name().to_string(), TypeId::of::()) + .insert(callable.name().to_string(), TypeId::of::()) .is_some() { - panic!("Duplicate bultin function name: {}", forward.name()); + panic!("Duplicate bultin function name: {}", callable.name()); } if self .callables - .insert( - TypeId::of::(), - CallableStorage { - forward, - reverse: inverse, - }, - ) + .insert(TypeId::of::(), CallableStorage { callable }) .is_some() { panic!("Duplicate bultin function tag: {:?}", TypeId::of::()); } } - pub fn register(&mut self, callable: Box) { - self.register_internal::(callable, Option::None); - } - - pub fn register_with_inverse( - &mut self, - forward: Box, - inverse: Box, - ) { - self.register_internal::(forward, Some(TypeId::of::())); - self.register_internal::(inverse, Some(TypeId::of::())); - } - - fn get_forward(&self, id: TypeId) -> &CallableStorage { + fn get_callable(&self, id: TypeId) -> &CallableStorage { self.callables .get(&id) .expect("Forward callable was not present") } - - fn get_inverse(&self, id: TypeId) -> Option { - let forward = self - .callables - .get(&id) - .expect("Forward callable was not present"); - - forward.reverse.clone() - } } #[derive(Debug)] struct CallableStorage { - forward: Box, - reverse: Option, + callable: Box, } impl std::ops::Deref for CallableStorage { type Target = dyn BuiltinCallable; fn deref(&self) -> &Self::Target { - self.forward.as_ref() + self.callable.as_ref() } } @@ -306,6 +273,10 @@ impl StaticTypeName for UserClosure { pub trait BuiltinCallable: Sync + Send { fn call(&self, context: &ExecutionContext, argument: Dictionary) -> ExpressionResult; + fn formula_call(&self, context: &ExecutionContext, _value: Value) -> ExpressionResult; + fn formula_inverse(&self, context: &ExecutionContext, _value: Value) + -> ExpressionResult; + fn name(&self) -> &str; fn signature(&self) -> &Arc; @@ -443,6 +414,28 @@ macro_rules! build_function_callable { (self.function)(context $(, $($arg),*)?) } + fn formula_call( + &self, + context: &$crate::execution::ExecutionContext, + _value: $crate::execution::values::Value + ) -> ExpressionResult<$crate::execution::values::Value> { + Err( + $crate::execution::errors::GenericFailure(format!("Function {} cannot be used in formulas", self.name()).into()) + .to_error(context.stack_trace), + ) + } + + fn formula_inverse( + &self, + context: &$crate::execution::ExecutionContext, + _value: $crate::execution::values::Value, + ) -> ExpressionResult<$crate::execution::values::Value> { + Err( + $crate::execution::errors::GenericFailure(format!("Function {} does not have an inverse", self.name()).into()) + .to_error(context.stack_trace), + ) + } + fn name(&self) -> &str { $name } @@ -462,37 +455,49 @@ macro_rules! build_function_callable { #[macro_export] macro_rules! build_function { ($database:ident, - forward = $ident:ident, $name:literal, ($context:ident: &ExecutionContext $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block + $ident:ident, $name:literal, ($context:ident: &ExecutionContext $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block ) => {{ let callable = $crate::build_function_callable!($name ($context: &ExecutionContext $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code); $database.register::<$ident>(Box::new(callable)) }}; - ($database:ident, - forward = $forward_ident:ident, $forward_name:literal, ($forward_context:ident: &ExecutionContext $(, $($forward_arg:ident: $forward_ty:path $(= $forward_default:expr)?),+)?) -> $forward_return_type:ty $forward_code:block, - reverse = $reverse_ident:ident, $reverse_name:literal, ($reverse_context:ident: &ExecutionContext $(, $($reverse_arg:ident: $reverse_ty:path $(= $reverse_default:expr)?),+)?) -> $reverse_return_type:ty $reverse_code:block - ) => {{ - let forward = $crate::build_function_callable!($forward_name ($forward_context: &ExecutionContext $(, $($forward_arg: $forward_ty $(= $forward_default)?),+)?) -> $forward_return_type $forward_code); - let reverse = $crate::build_function_callable!($reverse_name ($reverse_context: &ExecutionContext $(, $($reverse_arg: $reverse_ty $(= $reverse_default)?),+)?) -> $reverse_return_type $reverse_code); - - $database.register_with_inverse::<$forward_ident, $reverse_ident>(Box::new(forward), Box::new(reverse)) - }}; + // ($database:ident, + // $forward_ident:ident, $forward_name:literal, ($forward_context:ident: &ExecutionContext $(, $($forward_arg:ident: $forward_ty:path $(= $forward_default:expr)?),+)?) -> $forward_return_type:ty $forward_code:block, + // reverse = $reverse_ident:ident, $reverse_name:literal, ($reverse_context:ident: &ExecutionContext $(, $($reverse_arg:ident: $reverse_ty:path $(= $reverse_default:expr)?),+)?) -> $reverse_return_type:ty $reverse_code:block + // ) => {{ + // let $crate::build_function_callable!($forward_name ($forward_context: &ExecutionContext $(, $($forward_arg: $forward_ty $(= $forward_default)?),+)?) -> $forward_return_type $forward_code); + // let reverse = $crate::build_function_callable!($reverse_name ($reverse_context: &ExecutionContext $(, $($reverse_arg: $reverse_ty $(= $reverse_default)?),+)?) -> $reverse_return_type $reverse_code); + + // $database.register_with_inverse::<$forward_ident, $reverse_ident>(Box::new(forward), Box::new(reverse)) + // }}; } #[macro_export] macro_rules! build_method_callable { - ($name:expr, ($context:ident: &ExecutionContext, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block) => {{ - struct BuiltFunction ExpressionResult<$crate::execution::values::Value>> { + ($name:expr, + ($context:ident: &ExecutionContext, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block, + formula = $formula:expr, + inverse = $inverse:expr + ) => {{ + struct BuiltFunction + where + F: Fn(&$crate::execution::ExecutionContext, S $(, $($ty),*)?) -> ExpressionResult<$crate::execution::values::Value> + { function: F, + formula: FC, + inverse: FI, signature: std::sync::Arc<$crate::execution::values::closure::Signature>, name: String, _self_type: std::marker::PhantomData } - impl ExpressionResult<$crate::execution::values::Value> + Send + Sync> $crate::execution::values::closure::BuiltinCallable for BuiltFunction + impl $crate::execution::values::closure::BuiltinCallable for BuiltFunction where S: Send + Sync + Clone + StaticTypeName, - $crate::execution::values::Value: enum_downcast::AsVariant + $crate::execution::values::Value: enum_downcast::AsVariant, + F: Fn(&$crate::execution::ExecutionContext, S $(, $($ty),*)?) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync, + FC: Fn(&$crate::execution::ExecutionContext, $crate::execution::values::Value) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync, + FI: Fn(&$crate::execution::ExecutionContext, $crate::execution::values::Value) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync { fn call( &self, @@ -523,6 +528,22 @@ macro_rules! build_method_callable { (self.function)(context, this $(, $($arg),*)?) } + fn formula_call( + &self, + context: &$crate::execution::ExecutionContext, + value: $crate::execution::values::Value + ) -> ExpressionResult<$crate::execution::values::Value> { + (self.formula)(context, value) + } + + fn formula_inverse( + &self, + context: &$crate::execution::ExecutionContext, + value: $crate::execution::values::Value, + ) -> ExpressionResult<$crate::execution::values::Value> { + (self.inverse)(context, value) + } + fn name(&self) -> &str { &self.name } @@ -534,6 +555,8 @@ macro_rules! build_method_callable { BuiltFunction { function: move |$context: &$crate::execution::ExecutionContext, $this: $this_type $(, $($arg: $ty),*)?| -> ExpressionResult<$crate::execution::values::Value> { let result: $return_type = $code?; Ok(result.into()) }, + formula: $formula, + inverse: $inverse, signature: $crate::build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type), name: $name.into(), _self_type: std::marker::PhantomData @@ -544,20 +567,38 @@ macro_rules! build_method_callable { #[macro_export] macro_rules! build_method { ($database:ident, - forward = $ident:ty, $name:expr, ($context:ident: &ExecutionContext, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block + $ident:ty, $name:expr, ($context:ident: &ExecutionContext, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block ) => {{ - let callable = $crate::build_method_callable!($name, ($context: &ExecutionContext, $this: $this_type $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code); + let callable = $crate::build_method_callable!($name, + ($context: &ExecutionContext, $this: $this_type $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code, + formula = |context: &$crate::execution::ExecutionContext, _value| { + Err( + $crate::execution::errors::GenericFailure(format!("Method {} cannot be used in formulas", stringify!($name)).into()) + .to_error(context.stack_trace), + ) + }, + inverse = |context: &$crate::execution::ExecutionContext, _value| { + Err( + $crate::execution::errors::GenericFailure(format!("Method {} does not have an inverse", stringify!($name)).into()) + .to_error(context.stack_trace), + ) + } + ); $database.register::<$ident>(Box::new(callable)) }}; ($database:ident, - forward = $forward_ident:ty, $forward_name:expr, ($forward_context:ident: &ExecutionContext, $forward_this:ident: $forward_this_type:ty $(, $($forward_arg:ident: $forward_ty:path $(= $forward_default:expr)?),+)?) -> $forward_return_type:path $forward_code:block, - reverse = $reverse_ident:ty, $reverse_name:expr, ($reverse_context:ident: &ExecutionContext, $reverse_this:ident: $reverse_this_type:ty $(, $($reverse_arg:ident: $reverse_ty:path $(= $reverse_default:expr)?),+)?) -> $reverse_return_type:path $reverse_code:block + $ident:ty, $name:expr, ($context:ident: &ExecutionContext, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block, + formula = $formula:expr, + inverse = $inverse:expr ) => {{ - let forward = $crate::build_method_callable!($forward_name, ($forward_context: &ExecutionContext, $forward_this: $forward_this_type $(, $($forward_arg: $forward_ty $(= $forward_default)?),+)?) -> $forward_return_type $forward_code); - let reverse = $crate::build_method_callable!($reverse_name, ($reverse_context: &ExecutionContext, $reverse_this: $reverse_this_type $(, $($reverse_arg: $reverse_ty $(= $reverse_default)?),+)?) -> $reverse_return_type $reverse_code); + let callable = $crate::build_method_callable!($name, + ($context: &ExecutionContext, $this: $this_type $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code, + formula = $formula, + inverse = $inverse + ); - $database.register_with_inverse::<$forward_ident, $reverse_ident>(Box::new(forward), Box::new(reverse)) + $database.register::<$ident>(Box::new(callable)) }}; } @@ -572,7 +613,7 @@ impl BuiltinFunction { impl Object for BuiltinFunction { fn get_type(&self, context: &ExecutionContext) -> ValueType { - ValueType::Closure(context.database.get_forward(self.0).signature().clone()) + ValueType::Closure(context.database.get_callable(self.0).signature().clone()) } fn format( @@ -602,34 +643,14 @@ impl Object for BuiltinFunction { } fn call_scope_type(&self, context: &ExecutionContext) -> ScopeType { - context.database.get_forward(self.0).forward.scope_type() + context.database.get_callable(self.0).callable.scope_type() } fn call(&self, context: &ExecutionContext, argument: Dictionary) -> ExpressionResult { - context.database.get_forward(self.0).call(context, argument) - } - - fn get_attribute( - &self, - context: &ExecutionContext, - attribute: &str, - ) -> ExpressionResult { - match attribute { - "inverse" => { - if let Some(inverse) = context.database.get_inverse(self.0) { - Ok(BuiltinFunction(inverse).into()) - } else { - Err( - GenericFailure("Function does not have an inverse available".into()) - .to_error(context.stack_trace), - ) - } - } - _ => Err(MissingAttributeError { - name: attribute.into(), - } - .to_error(context.stack_trace)), - } + context + .database + .get_callable(self.0) + .call(context, argument) } } @@ -810,7 +831,7 @@ mod test { struct TestFunction; build_function!( database, - forward = TestFunction, "test_function", ( + TestFunction, "test_function", ( _context: &ExecutionContext ) -> UnsignedInteger { Ok(values::UnsignedInteger::from(846)) @@ -844,7 +865,7 @@ mod test { struct TestFunction; build_function!( database, - forward = TestFunction, "test_function", ( + TestFunction, "test_function", ( _context: &ExecutionContext, a: UnsignedInteger, b: UnsignedInteger @@ -873,59 +894,13 @@ mod test { assert_eq!(product, values::UnsignedInteger::from(3).into()); } - #[test] - fn builtin_function_with_inverse() { - let mut database = BuiltinCallableDatabase::default(); - - struct TestFunction; - struct TestInverse; - build_function!( - database, - forward = TestFunction, "test_function", ( - _context: &ExecutionContext, - input: UnsignedInteger - ) -> UnsignedInteger { - Ok(values::UnsignedInteger::from(input.0 + 1)) - }, - reverse = TestInverse, "test_inverse", ( - _context: &ExecutionContext, - input: UnsignedInteger - ) -> UnsignedInteger { - Ok(values::UnsignedInteger::from(input.0 - 1)) - } - ); - - use crate::execution::standard_environment::build_prelude; - - let root = crate::compile::full_compile("test_inverse(input = test_function(input = 1u))"); - let mut prelude = build_prelude(&database); - prelude.insert( - "test_function".into(), - BuiltinFunction::new::().into(), - ); - prelude.insert( - "test_inverse".into(), - BuiltinFunction::new::().into(), - ); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - - let product = execute_expression(&context, &root).unwrap(); - - assert_eq!(product, values::UnsignedInteger::from(1).into()); - } - #[test] fn builtin_function_with_default_value() { let mut database = BuiltinCallableDatabase::default(); struct TestFunction; build_function!( database, - forward = TestFunction, "test_function", ( + TestFunction, "test_function", ( _context: &ExecutionContext, a: UnsignedInteger, b: UnsignedInteger = UnsignedInteger::from(2).into() @@ -962,7 +937,7 @@ mod test { struct TestFunction; build_function!( database, - forward = TestFunction, "test_function", ( + TestFunction, "test_function", ( _context: &ExecutionContext, a: UnsignedInteger ) -> UnsignedInteger { @@ -996,7 +971,7 @@ mod test { struct TestMethod; build_method!( database, - forward = TestMethod, "test_method", (context: &ExecutionContext, this: Dictionary) -> Value { + TestMethod, "test_method", (context: &ExecutionContext, this: Dictionary) -> Value { this.get_attribute(context, "value") } ); @@ -1030,7 +1005,7 @@ mod test { build_method!( database, - forward = TestMethod, "test_method", ( + TestMethod, "test_method", ( context: &ExecutionContext, this: Dictionary, to_add: UnsignedInteger @@ -1063,57 +1038,4 @@ mod test { assert_eq!(product, values::UnsignedInteger::from(15).into()); } - - #[test] - fn builtin_method_with_inverse() { - let mut database = BuiltinCallableDatabase::default(); - struct TestMethod; - struct InverseMethod; - build_method!( - database, - forward = TestMethod, "test_method", ( - context: &ExecutionContext, - this: Dictionary, - input: UnsignedInteger - ) -> UnsignedInteger { - let value: UnsignedInteger = this.get_attribute(context, "value")?.downcast(context.stack_trace)?; - - Ok(UnsignedInteger::from(input.0 + value.0)) - }, - reverse = InverseMethod, "reverse_method", ( - context: &ExecutionContext, - this: Dictionary, - input: UnsignedInteger - ) -> UnsignedInteger { - let value: UnsignedInteger = this.get_attribute(context, "value")?.downcast(context.stack_trace)?; - - Ok(UnsignedInteger::from(input.0 - value.0)) - } - ); - - use crate::execution::standard_environment::build_prelude; - - let root = crate::compile::full_compile( - "let object = (value = 5u, test_method = provided_test_method, inverse_method = provided_inverse_method); in object::inverse_method(input = object::test_method(input = 2u))", - ); - let mut prelude = build_prelude(&database); - prelude.insert( - "provided_test_method".into(), - BuiltinFunction::new::().into(), - ); - prelude.insert( - "provided_inverse_method".into(), - BuiltinFunction::new::().into(), - ); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - - let product = execute_expression(&context, &root).unwrap(); - - assert_eq!(product, values::UnsignedInteger::from(2).into()); - } } diff --git a/crates/interpreter/src/execution/values/file.rs b/crates/interpreter/src/execution/values/file.rs index abba5b2..43fb624 100644 --- a/crates/interpreter/src/execution/values/file.rs +++ b/crates/interpreter/src/execution/values/file.rs @@ -92,7 +92,7 @@ mod methods { pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, - forward = methods::ToString, "File::to_string", ( + methods::ToString, "File::to_string", ( context: &ExecutionContext, this: File ) -> IString { diff --git a/crates/interpreter/src/execution/values/integer.rs b/crates/interpreter/src/execution/values/integer.rs index 055341e..6e657a5 100644 --- a/crates/interpreter/src/execution/values/integer.rs +++ b/crates/interpreter/src/execution/values/integer.rs @@ -608,7 +608,7 @@ mod methods { { build_method!( database, - forward = ::CountOnes, format!("{}::count_ones", Integer::::static_type_name()), ( + ::CountOnes, format!("{}::count_ones", Integer::::static_type_name()), ( _context: &ExecutionContext, this: Integer ) -> UnsignedInteger { @@ -617,7 +617,7 @@ mod methods { ); build_method!( database, - forward = ::CountZeros, format!("{}::count_zeros", Integer::::static_type_name()), ( + ::CountZeros, format!("{}::count_zeros", Integer::::static_type_name()), ( _context: &ExecutionContext, this: Integer ) -> UnsignedInteger { @@ -626,7 +626,7 @@ mod methods { ); build_method!( database, - forward = ::LeadingZeros, format!("{}::leading_zeros", Integer::::static_type_name()), ( + ::LeadingZeros, format!("{}::leading_zeros", Integer::::static_type_name()), ( _context: &ExecutionContext, this: Integer ) -> UnsignedInteger { @@ -635,7 +635,7 @@ mod methods { ); build_method!( database, - forward = ::TrailingZeros, format!("{}::trailing_zeros", Integer::::static_type_name()), ( + ::TrailingZeros, format!("{}::trailing_zeros", Integer::::static_type_name()), ( _context: &ExecutionContext, this: Integer ) -> UnsignedInteger { @@ -644,7 +644,7 @@ mod methods { ); build_method!( database, - forward = ::LeadingOnes, format!("{}::leading_ones", Integer::::static_type_name()), ( + ::LeadingOnes, format!("{}::leading_ones", Integer::::static_type_name()), ( _context: &ExecutionContext, this: Integer ) -> UnsignedInteger { @@ -653,7 +653,7 @@ mod methods { ); build_method!( database, - forward = ::TrailingOnes, format!("{}::trailing_ones", Integer::::static_type_name()), ( + ::TrailingOnes, format!("{}::trailing_ones", Integer::::static_type_name()), ( _context: &ExecutionContext, this: Integer ) -> UnsignedInteger { @@ -662,7 +662,7 @@ mod methods { ); build_method!( database, - forward = ::RotateLeft, format!("{}::rotate_left", Integer::::static_type_name()), ( + ::RotateLeft, format!("{}::rotate_left", Integer::::static_type_name()), ( _context: &ExecutionContext, this: Integer, n: UnsignedInteger @@ -672,7 +672,7 @@ mod methods { ); build_method!( database, - forward = ::RotateRight, format!("{}::rotate_right", Integer::::static_type_name()), ( + ::RotateRight, format!("{}::rotate_right", Integer::::static_type_name()), ( _context: &ExecutionContext, this: Integer, n: UnsignedInteger @@ -682,7 +682,7 @@ mod methods { ); build_method!( database, - forward = ::ReverseBits, format!("{}::reverse_bits", Integer::::static_type_name()), ( + ::ReverseBits, format!("{}::reverse_bits", Integer::::static_type_name()), ( _context: &ExecutionContext, this: Integer ) -> Integer { @@ -691,7 +691,7 @@ mod methods { ); build_method!( database, - forward = ::Abs, format!("{}::abs", Integer::::static_type_name()), ( + ::Abs, format!("{}::abs", Integer::::static_type_name()), ( _context: &ExecutionContext, this: Integer ) -> Integer { @@ -700,7 +700,7 @@ mod methods { ); build_method!( database, - forward = ::Sqrt, format!("{}::sqrt", Integer::::static_type_name()), ( + ::Sqrt, format!("{}::sqrt", Integer::::static_type_name()), ( _context: &ExecutionContext, this: Integer ) -> Integer { @@ -709,7 +709,7 @@ mod methods { ); build_method!( database, - forward = ::AbsDiff, format!("{}::abs_diff", Integer::::static_type_name()), ( + ::AbsDiff, format!("{}::abs_diff", Integer::::static_type_name()), ( context: &ExecutionContext, this: Integer, other: Value @@ -720,7 +720,7 @@ mod methods { ); build_method!( database, - forward = ::Signum, format!("{}::signum", Integer::::static_type_name()), ( + ::Signum, format!("{}::signum", Integer::::static_type_name()), ( _context: &ExecutionContext, this: Integer ) -> SignedInteger { @@ -729,7 +729,7 @@ mod methods { ); build_method!( database, - forward = ::IsPositive, format!("{}::is_positive", Integer::::static_type_name()), ( + ::IsPositive, format!("{}::is_positive", Integer::::static_type_name()), ( _context: &ExecutionContext, this: Integer ) -> Boolean { @@ -738,7 +738,7 @@ mod methods { ); build_method!( database, - forward = ::IsNegative, format!("{}::is_negative", Integer::::static_type_name()), ( + ::IsNegative, format!("{}::is_negative", Integer::::static_type_name()), ( _context: &ExecutionContext, this: Integer ) -> Boolean { @@ -747,7 +747,7 @@ mod methods { ); build_method!( database, - forward = ::Midpoint, format!("{}::midpoint", Integer::::static_type_name()), ( + ::Midpoint, format!("{}::midpoint", Integer::::static_type_name()), ( context: &ExecutionContext, this: Integer, rhs: Value diff --git a/crates/interpreter/src/execution/values/list.rs b/crates/interpreter/src/execution/values/list.rs index f9dbd93..bd73ac3 100644 --- a/crates/interpreter/src/execution/values/list.rs +++ b/crates/interpreter/src/execution/values/list.rs @@ -355,7 +355,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, - forward = methods::Append, "List::append", ( + methods::Append, "List::append", ( context: &ExecutionContext, this: List, rhs: List @@ -368,7 +368,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Slice, "List::slice", ( + methods::Slice, "List::slice", ( context: &ExecutionContext, this: List, start: Option = ValueNone.into(), @@ -398,7 +398,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Get, "List::get", ( + methods::Get, "List::get", ( context: &ExecutionContext, this: List, i: UnsignedInteger @@ -414,7 +414,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Chunks, "List::chunks", ( + methods::Chunks, "List::chunks", ( context: &ExecutionContext, this: List, size: UnsignedInteger, @@ -440,7 +440,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Map, "List::map",( + methods::Map, "List::map",( context: &ExecutionContext, this: List, f: MapClosure @@ -457,7 +457,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Fold, "List::fold",( + methods::Fold, "List::fold",( context: &ExecutionContext, this: List, init: Value, @@ -482,7 +482,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Retain, "List::retain",( + methods::Retain, "List::retain",( context: &ExecutionContext, this: List, f: RetainClosure @@ -507,7 +507,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Sort, "List::sort",( + methods::Sort, "List::sort",( context: &ExecutionContext, this: List ) -> List { @@ -533,7 +533,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Reverse, "List::reverse",( + methods::Reverse, "List::reverse",( context: &ExecutionContext, this: List ) -> List { @@ -545,7 +545,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Truncate, "List::truncate",( + methods::Truncate, "List::truncate",( context: &ExecutionContext, this: List, length: UnsignedInteger @@ -558,7 +558,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Deduplicate, "List::deduplicate",( + methods::Deduplicate, "List::deduplicate",( context: &ExecutionContext, this: List ) -> List { @@ -570,7 +570,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Union, "List::union",( + methods::Union, "List::union",( context: &ExecutionContext, this: List, other: List @@ -588,7 +588,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Intersection, "List::intersection",( + methods::Intersection, "List::intersection",( context: &ExecutionContext, this: List, other: List @@ -606,7 +606,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Difference, "List::difference",( + methods::Difference, "List::difference",( context: &ExecutionContext, this: List, other: List @@ -625,7 +625,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::SymmetricDifference, "List::symmetric_difference",( + methods::SymmetricDifference, "List::symmetric_difference",( context: &ExecutionContext, this: List, other: List @@ -651,7 +651,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::CartesianProduct, "List::cartesian_product",( + methods::CartesianProduct, "List::cartesian_product",( context: &ExecutionContext, this: List, other: List diff --git a/crates/interpreter/src/execution/values/mod.rs b/crates/interpreter/src/execution/values/mod.rs index ce7f3c9..6b6ee45 100644 --- a/crates/interpreter/src/execution/values/mod.rs +++ b/crates/interpreter/src/execution/values/mod.rs @@ -239,6 +239,16 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { fn call(&self, context: &ExecutionContext, _argument: Dictionary) -> ExpressionResult { UnsupportedOperationError::raise(self, context.stack_trace, "call") } + fn formula_call(&self, context: &ExecutionContext, _value: Value) -> ExpressionResult { + UnsupportedOperationError::raise(self, context.stack_trace, "inverse call") + } + fn formula_inverse_call( + &self, + context: &ExecutionContext, + _value: Value, + ) -> ExpressionResult { + UnsupportedOperationError::raise(self, context.stack_trace, "inverse call") + } fn unary_plus(self, context: &ExecutionContext) -> ExpressionResult { UnsupportedOperationError::raise(&self, context.stack_trace, "unary plus") } diff --git a/crates/interpreter/src/execution/values/scalar.rs b/crates/interpreter/src/execution/values/scalar.rs index 4ee35ad..a8e5209 100644 --- a/crates/interpreter/src/execution/values/scalar.rs +++ b/crates/interpreter/src/execution/values/scalar.rs @@ -382,7 +382,7 @@ mod methods { pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, - forward = methods::ToSignedInteger, "Scalar::to_signed_integer", ( + methods::ToSignedInteger, "Scalar::to_signed_integer", ( context: &ExecutionContext, this: Scalar) -> SignedInteger { @@ -396,7 +396,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::ToUnsignedInteger, "Scalar::to_unsigned_integer", ( + methods::ToUnsignedInteger, "Scalar::to_unsigned_integer", ( context: &ExecutionContext, this: Scalar) -> UnsignedInteger { @@ -415,7 +415,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Abs, "Scalar::abs", ( + methods::Abs, "Scalar::abs", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -427,7 +427,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Clamp, "Scalar::clamp", ( + methods::Clamp, "Scalar::clamp", ( context: &ExecutionContext, this: Scalar, min: Value, @@ -444,7 +444,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Copysign, "Scalar::copysign", ( + methods::Copysign, "Scalar::copysign", ( context: &ExecutionContext, this: Scalar, sign: Zero) -> Scalar @@ -457,7 +457,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Hypot, "Scalar::hypot", ( + methods::Hypot, "Scalar::hypot", ( context: &ExecutionContext, this: Scalar, other: Value) -> Scalar @@ -472,7 +472,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::IsFinite, "Scalar::is_finite", ( + methods::IsFinite, "Scalar::is_finite", ( _context: &ExecutionContext, this: Scalar) -> Boolean { @@ -481,7 +481,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::IsInfinite, "Scalar::is_infinite", ( + methods::IsInfinite, "Scalar::is_infinite", ( _context: &ExecutionContext, this: Scalar) -> Boolean { @@ -490,7 +490,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::IsNormal, "Scalar::is_normal", ( + methods::IsNormal, "Scalar::is_normal", ( _context: &ExecutionContext, this: Scalar) -> Boolean { @@ -499,7 +499,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Cbrt, "Scalar::cbrt", ( + methods::Cbrt, "Scalar::cbrt", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -511,7 +511,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Pow, "Scalar::pow", ( + methods::Pow, "Scalar::pow", ( context: &ExecutionContext, this: Scalar, exp: Zero) -> Scalar @@ -524,7 +524,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Sqrt, "Scalar::sqrt", ( + methods::Sqrt, "Scalar::sqrt", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -532,11 +532,27 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { dimension: this.dimension / 2, value: Float::new(this.value.sqrt()).unwrap_not_nan(context.stack_trace)? }) + }, + formula = |context: &ExecutionContext, value: Value| -> ExpressionResult { + let value = value.downcast::(context.stack_trace)?; + + Ok(Scalar { + dimension: value.dimension / 2, + value: Float::new(value.value.sqrt()).unwrap_not_nan(context.stack_trace)? + }.into()) + }, + inverse = |context: &ExecutionContext, value: Value| -> ExpressionResult { + let value = value.downcast::(context.stack_trace)?; + + Ok(Scalar { + dimension: value.dimension * 2, + value: Float::new(value.value.powi(2)).unwrap_not_nan(context.stack_trace)? + }.into()) } ); build_method!( database, - forward = methods::IsSignNegative, "Scalar::is_sign_negative", ( + methods::IsSignNegative, "Scalar::is_sign_negative", ( _context: &ExecutionContext, this: Scalar) -> Boolean { @@ -545,7 +561,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::IsSignPositive, "Scalar::is_sign_positive", ( + methods::IsSignPositive, "Scalar::is_sign_positive", ( _context: &ExecutionContext, this: Scalar) -> Boolean { @@ -554,7 +570,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Recip, "Scalar::recip", ( + methods::Recip, "Scalar::recip", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -566,7 +582,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Round, "Scalar::round", ( + methods::Round, "Scalar::round", ( context: &ExecutionContext, this: Scalar, unit: Value) -> Scalar @@ -583,7 +599,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Trunc, "Scalar::trunc", ( + methods::Trunc, "Scalar::trunc", ( context: &ExecutionContext, this: Scalar, unit: Value) -> Scalar @@ -600,7 +616,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Fract, "Scalar::fract", ( + methods::Fract, "Scalar::fract", ( context: &ExecutionContext, this: Scalar, unit: Value) -> Scalar @@ -617,7 +633,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Floor, "Scalar::floor", ( + methods::Floor, "Scalar::floor", ( context: &ExecutionContext, this: Scalar, unit: Value) -> Scalar @@ -634,7 +650,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Ceil, "Scalar::ceil", ( + methods::Ceil, "Scalar::ceil", ( context: &ExecutionContext, this: Scalar, unit: Value) -> Scalar @@ -651,7 +667,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Max, "Scalar::max", ( + methods::Max, "Scalar::max", ( context: &ExecutionContext, this: Scalar, other: Value) -> Scalar @@ -666,7 +682,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Min, "Scalar::min", ( + methods::Min, "Scalar::min", ( context: &ExecutionContext, this: Scalar, other: Value) -> Scalar @@ -681,7 +697,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Signum, "Scalar::signum", ( + methods::Signum, "Scalar::signum", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -693,7 +709,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Acos, "Scalar::acos", ( + methods::Acos, "Scalar::acos", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -707,7 +723,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Acosh, "Scalar::acosh", ( + methods::Acosh, "Scalar::acosh", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -721,7 +737,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Cos, "Scalar::cos", ( + methods::Cos, "Scalar::cos", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -735,7 +751,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Cosh, "Scalar::cosh", ( + methods::Cosh, "Scalar::cosh", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -749,7 +765,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Asin, "Scalar::asin", ( + methods::Asin, "Scalar::asin", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -763,7 +779,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Asinh, "Scalar::asinh", ( + methods::Asinh, "Scalar::asinh", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -777,7 +793,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Sin, "Scalar::sin", ( + methods::Sin, "Scalar::sin", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -791,7 +807,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Sinh, "Scalar::sinh", ( + methods::Sinh, "Scalar::sinh", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -805,7 +821,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::CosSin, "Scalar::cossin", ( + methods::CosSin, "Scalar::cossin", ( context: &ExecutionContext, this: Scalar) -> Vector2 { @@ -817,7 +833,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Atan, "Scalar::atan", ( + methods::Atan, "Scalar::atan", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -831,7 +847,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Atanh, "Scalar::atanh", ( + methods::Atanh, "Scalar::atanh", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -845,7 +861,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Tan, "Scalar::tan", ( + methods::Tan, "Scalar::tan", ( context: &ExecutionContext, this: Scalar) -> Scalar { @@ -859,7 +875,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Tanh, "Scalar::tanh", ( + methods::Tanh, "Scalar::tanh", ( context: &ExecutionContext, this: Scalar) -> Scalar { diff --git a/crates/interpreter/src/execution/values/string/mod.rs b/crates/interpreter/src/execution/values/string/mod.rs index 00dffe3..4dcd392 100644 --- a/crates/interpreter/src/execution/values/string/mod.rs +++ b/crates/interpreter/src/execution/values/string/mod.rs @@ -199,6 +199,28 @@ fn register_format_method(database: &mut BuiltinCallableDatabase) { Ok(IString(ImString::from(output)).into()) } + fn formula_call( + &self, + context: &ExecutionContext, + _value: Value, + ) -> ExpressionResult { + Err( + GenericFailure("Method String::format cannot be used in formulas".into()) + .to_error(context.stack_trace), + ) + } + + fn formula_inverse( + &self, + context: &ExecutionContext, + _value: Value, + ) -> ExpressionResult { + Err( + GenericFailure("Method String::format does not have an inverse".into()) + .to_error(context.stack_trace), + ) + } + fn name(&self) -> &str { "String::format" } @@ -234,7 +256,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, - forward = methods::Append, "String::append", ( + methods::Append, "String::append", ( _context: &ExecutionContext, this: IString, rhs: IString @@ -246,7 +268,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Slice, "String::slice", ( + methods::Slice, "String::slice", ( _context: &ExecutionContext, this: IString, start: Option = ValueNone.into(), @@ -269,7 +291,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Chunks, "String::chunks", ( + methods::Chunks, "String::chunks", ( context: &ExecutionContext, this: IString, size: UnsignedInteger, @@ -296,7 +318,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Lines, "String::lines", ( + methods::Lines, "String::lines", ( context: &ExecutionContext, this: IString, include_empty: Boolean = Boolean(true).into() @@ -312,7 +334,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Map, "String::map", ( + methods::Map, "String::map", ( context: &ExecutionContext, this: IString, f: MapClosure @@ -336,7 +358,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Fold, "String::fold", ( + methods::Fold, "String::fold", ( context: &ExecutionContext, this: IString, init: Value, @@ -361,7 +383,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Retain, "String::retain",( + methods::Retain, "String::retain",( context: &ExecutionContext, this: IString, f: RetainClosure @@ -386,7 +408,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Reverse, "String::reverse",( + methods::Reverse, "String::reverse",( _context: &ExecutionContext, this: IString ) -> IString { @@ -396,7 +418,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Truncate, "String::truncate",( + methods::Truncate, "String::truncate",( _context: &ExecutionContext, this: IString, length: UnsignedInteger @@ -409,7 +431,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::ToLowercase, "String::to_lowercase",( + methods::ToLowercase, "String::to_lowercase",( _context: &ExecutionContext, this: IString ) -> IString { @@ -419,7 +441,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::ToUppercase, "String::to_uppercase",( + methods::ToUppercase, "String::to_uppercase",( _context: &ExecutionContext, this: IString ) -> IString { @@ -429,7 +451,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::ParseScalar, "String::parse_scalar",( + methods::ParseScalar, "String::parse_scalar",( context: &ExecutionContext, this: IString ) -> Scalar { @@ -444,7 +466,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::ParseUnsignedInteger, "String::parse_unsigned_integer",( + methods::ParseUnsignedInteger, "String::parse_unsigned_integer",( context: &ExecutionContext, this: IString ) -> UnsignedInteger { @@ -455,7 +477,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::ParseSignedInteger, "String::parse_signed_integer",( + methods::ParseSignedInteger, "String::parse_signed_integer",( context: &ExecutionContext, this: IString ) -> SignedInteger { @@ -466,7 +488,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ); build_method!( database, - forward = methods::Contains, "String::contains",( + methods::Contains, "String::contains",( _context: &ExecutionContext, this: IString, pattern: IString diff --git a/crates/interpreter/src/execution/values/value_type.rs b/crates/interpreter/src/execution/values/value_type.rs index e068f6f..7286223 100644 --- a/crates/interpreter/src/execution/values/value_type.rs +++ b/crates/interpreter/src/execution/values/value_type.rs @@ -250,7 +250,7 @@ mod methods { pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, - forward = methods::Qualify, "ValueType::qualify", ( + methods::Qualify, "ValueType::qualify", ( context: &ExecutionContext, this: ValueType, to_qualify: Value) -> ValueNone @@ -262,7 +262,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, - forward = methods::TryQualify, "ValueType::try_qualify", ( + methods::TryQualify, "ValueType::try_qualify", ( context: &ExecutionContext, this: ValueType, to_qualify: Value) -> values::Boolean diff --git a/crates/interpreter/src/execution/values/vector.rs b/crates/interpreter/src/execution/values/vector.rs index 61ccc94..e5df099 100644 --- a/crates/interpreter/src/execution/values/vector.rs +++ b/crates/interpreter/src/execution/values/vector.rs @@ -323,7 +323,7 @@ mod methods { build_method!( database, - forward = M::Abs, format!("Vector{dimension}::abs"), ( + M::Abs, format!("Vector{dimension}::abs"), ( context: &ExecutionContext, this: Vector) -> Vector { @@ -333,7 +333,7 @@ mod methods { ); build_method!( database, - forward = M::AddScalar, format!("Vector{dimension}::add_scalar"), ( + M::AddScalar, format!("Vector{dimension}::add_scalar"), ( context: &ExecutionContext, this: Vector, value: Scalar) -> Vector @@ -352,7 +352,7 @@ mod methods { ); build_method!( database, - forward = M::AMax, format!("Vector{dimension}::amax"), ( + M::AMax, format!("Vector{dimension}::amax"), ( context: &ExecutionContext, this: Vector) -> Scalar { @@ -366,7 +366,7 @@ mod methods { ); build_method!( database, - forward = M::AMin, format!("Vector{dimension}::amin"), ( + M::AMin, format!("Vector{dimension}::amin"), ( context: &ExecutionContext, this: Vector) -> Scalar { @@ -380,7 +380,7 @@ mod methods { ); build_method!( database, - forward = M::Dot, format!("Vector{dimension}::dot"), ( + M::Dot, format!("Vector{dimension}::dot"), ( context: &ExecutionContext, this: Vector, rhs: Value) -> Scalar @@ -404,7 +404,7 @@ mod methods { ); build_method!( database, - forward = M::Norm, format!("Vector{dimension}::norm"),( + M::Norm, format!("Vector{dimension}::norm"),( context: &ExecutionContext, this: Vector) -> Scalar { @@ -418,7 +418,7 @@ mod methods { ); build_method!( database, - forward = M::Normalize, format!("Vector{dimension}::normalize"),( + M::Normalize, format!("Vector{dimension}::normalize"),( context: &ExecutionContext, this: Vector) -> Vector { @@ -428,7 +428,7 @@ mod methods { ); build_method!( database, - forward = M::Angle, format!("Vector{dimension}::angle"),( + M::Angle, format!("Vector{dimension}::angle"),( context: &ExecutionContext, this: Vector, other: Value) -> Scalar @@ -444,7 +444,7 @@ mod methods { ); build_method!( database, - forward = M::Map, format!("Vector{dimension}::map"),( + M::Map, format!("Vector{dimension}::map"),( context: &ExecutionContext, this: Vector, f: MapClosure) -> Vector @@ -476,7 +476,7 @@ mod methods { ); build_method!( database, - forward = M::Fold, format!("Vector{dimension}::fold"),( + M::Fold, format!("Vector{dimension}::fold"),( context: &ExecutionContext, this: Vector, init: Value, @@ -513,7 +513,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, - forward = methods::Vector3Cross, "Vector3::cross", ( + methods::Vector3Cross, "Vector3::cross", ( context: &ExecutionContext, this: Vector3, rhs: Vector3) -> Vector3 diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/crates/tree-sitter-command-cad-model/grammar.js index 907cd70..51b5683 100644 --- a/crates/tree-sitter-command-cad-model/grammar.js +++ b/crates/tree-sitter-command-cad-model/grammar.js @@ -32,7 +32,7 @@ const PREC = { }; const unary_operator_table = ['-', '+', '!']; -const formula_unary_operator_table = ['-', '+']; +const formula_unary_operator_table = ['-', '+', '!']; function make_unary_expression(table, expression) { return choice(...table.map((operator) => seq( @@ -76,6 +76,10 @@ const formula_binary_operator_table = [ [PREC.additive, '+'], [PREC.additive, '-'], + + [PREC.and, '&&'], + [PREC.or, '||'], + [PREC.xor, '^^'], ]; function make_binary_expression(table, expression) { @@ -219,20 +223,38 @@ module.exports = grammar({ field('expression', $.expression), )), - formula: $ => seq('<<<', field('lhs', $.formula_expression), field('relation', choice( - '>', '>=', '==', '<=', '<', '!=' - )), field('rhs', $.formula_expression), '>>>'), + _formula_relation: $ => choice('>', '>=', '==', '<=', '<', '!='), + formula: $ => seq('<<<', field('lhs', $.formula_expression), field('relation', $._formula_relation), field('rhs', $.formula_expression), '>>>'), formula_expression: $ => choice( $.formula_parenthesis, $.signed_integer, $.unsigned_integer, + $.boolean, $.scalar, + $.formula_vector2, + $.formula_vector3, + $.formula_vector4, $.identifier, $.formula_unary_expression, $.formula_binary_expression, + $.formula_method_call, + $.formula_function_call ), formula_parenthesis: $ => seq('(', $.formula_expression, ')'), formula_unary_expression: $ => make_unary_expression(formula_unary_operator_table, $.formula_expression), formula_binary_expression: $ => make_binary_expression(formula_binary_operator_table, $.formula_expression), + formula_method_call: $ => seq( + prec.left(PREC.method_call, seq( + field('self_dictionary', $.formula_expression), '::', field('to_call', $.identifier), '(', field("argument", $.formula_expression), ')' + )) + ), + formula_function_call: $ => seq( + prec.left(PREC.function_call, seq( + field('to_call', $.formula_expression), '(', field("argument", $.formula_expression, ')'), + )) + ), + formula_vector2: $ => seq('<(', field('x', $.formula_expression), ',', field('y', $.formula_expression), ')>'), + formula_vector3: $ => seq('<(', field('x', $.formula_expression), ',', field('y', $.formula_expression), ',', field('z', $.formula_expression), ')>'), + formula_vector4: $ => seq('<(', field('x', $.formula_expression), ',', field('y', $.formula_expression), ',', field('z', $.formula_expression), ',', field('w', $.formula_expression), ')>'), } }); diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/crates/tree-sitter-command-cad-model/src/grammar.json index 51fc1bb..b83d8b0 100644 --- a/crates/tree-sitter-command-cad-model/src/grammar.json +++ b/crates/tree-sitter-command-cad-model/src/grammar.json @@ -1768,6 +1768,35 @@ ] } }, + "_formula_relation": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": ">" + }, + { + "type": "STRING", + "value": ">=" + }, + { + "type": "STRING", + "value": "==" + }, + { + "type": "STRING", + "value": "<=" + }, + { + "type": "STRING", + "value": "<" + }, + { + "type": "STRING", + "value": "!=" + } + ] + }, "formula": { "type": "SEQ", "members": [ @@ -1787,33 +1816,8 @@ "type": "FIELD", "name": "relation", "content": { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": ">" - }, - { - "type": "STRING", - "value": ">=" - }, - { - "type": "STRING", - "value": "==" - }, - { - "type": "STRING", - "value": "<=" - }, - { - "type": "STRING", - "value": "<" - }, - { - "type": "STRING", - "value": "!=" - } - ] + "type": "SYMBOL", + "name": "_formula_relation" } }, { @@ -1845,10 +1849,26 @@ "type": "SYMBOL", "name": "unsigned_integer" }, + { + "type": "SYMBOL", + "name": "boolean" + }, { "type": "SYMBOL", "name": "scalar" }, + { + "type": "SYMBOL", + "name": "formula_vector2" + }, + { + "type": "SYMBOL", + "name": "formula_vector3" + }, + { + "type": "SYMBOL", + "name": "formula_vector4" + }, { "type": "SYMBOL", "name": "identifier" @@ -1860,6 +1880,14 @@ { "type": "SYMBOL", "name": "formula_binary_expression" + }, + { + "type": "SYMBOL", + "name": "formula_method_call" + }, + { + "type": "SYMBOL", + "name": "formula_function_call" } ] }, @@ -1926,6 +1954,28 @@ ] } ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "!" + } + }, + { + "type": "SYMBOL", + "name": "formula_expression" + } + ] + } + ] } ] }, @@ -2096,6 +2146,324 @@ } ] } + }, + { + "type": "PREC_LEFT", + "value": 3, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "&&" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "||" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "a", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "FIELD", + "name": "op", + "content": { + "type": "STRING", + "value": "^^" + } + }, + { + "type": "FIELD", + "name": "b", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + } + ] + } + } + ] + }, + "formula_method_call": { + "type": "SEQ", + "members": [ + { + "type": "PREC_LEFT", + "value": 15, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "self_dictionary", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "STRING", + "value": "::" + }, + { + "type": "FIELD", + "name": "to_call", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "STRING", + "value": ")" + } + ] + } + } + ] + }, + "formula_function_call": { + "type": "SEQ", + "members": [ + { + "type": "PREC_LEFT", + "value": 14, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "to_call", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + } + ] + } + } + ] + }, + "formula_vector2": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "<(" + }, + { + "type": "FIELD", + "name": "x", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "y", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "STRING", + "value": ")>" + } + ] + }, + "formula_vector3": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "<(" + }, + { + "type": "FIELD", + "name": "x", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "y", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "z", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "STRING", + "value": ")>" + } + ] + }, + "formula_vector4": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "<(" + }, + { + "type": "FIELD", + "name": "x", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "y", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "z", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "FIELD", + "name": "w", + "content": { + "type": "SYMBOL", + "name": "formula_expression" + } + }, + { + "type": "STRING", + "value": ")>" } ] } diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/crates/tree-sitter-command-cad-model/src/node-types.json index d489290..c7bafd1 100644 --- a/crates/tree-sitter-command-cad-model/src/node-types.json +++ b/crates/tree-sitter-command-cad-model/src/node-types.json @@ -420,6 +420,10 @@ "multiple": false, "required": true, "types": [ + { + "type": "&&", + "named": false + }, { "type": "*", "named": false @@ -439,6 +443,14 @@ { "type": "/", "named": false + }, + { + "type": "^^", + "named": false + }, + { + "type": "||", + "named": false } ] } @@ -452,10 +464,22 @@ "multiple": false, "required": true, "types": [ + { + "type": "boolean", + "named": true + }, { "type": "formula_binary_expression", "named": true }, + { + "type": "formula_function_call", + "named": true + }, + { + "type": "formula_method_call", + "named": true + }, { "type": "formula_parenthesis", "named": true @@ -464,6 +488,18 @@ "type": "formula_unary_expression", "named": true }, + { + "type": "formula_vector2", + "named": true + }, + { + "type": "formula_vector3", + "named": true + }, + { + "type": "formula_vector4", + "named": true + }, { "type": "identifier", "named": true @@ -483,6 +519,68 @@ ] } }, + { + "type": "formula_function_call", + "named": true, + "fields": { + "argument": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + }, + "to_call": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + } + } + }, + { + "type": "formula_method_call", + "named": true, + "fields": { + "argument": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + }, + "self_dictionary": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + }, + "to_call": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + } + }, { "type": "formula_parenthesis", "named": true, @@ -506,6 +604,10 @@ "multiple": false, "required": true, "types": [ + { + "type": "!", + "named": false + }, { "type": "+", "named": false @@ -528,6 +630,114 @@ ] } }, + { + "type": "formula_vector2", + "named": true, + "fields": { + "x": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + }, + "y": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + } + } + }, + { + "type": "formula_vector3", + "named": true, + "fields": { + "x": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + }, + "y": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + }, + "z": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + } + } + }, + { + "type": "formula_vector4", + "named": true, + "fields": { + "w": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + }, + "x": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + }, + "y": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + }, + "z": { + "multiple": false, + "required": true, + "types": [ + { + "type": "formula_expression", + "named": true + } + ] + } + } + }, { "type": "function_call", "named": true, diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/crates/tree-sitter-command-cad-model/src/parser.c index 6a3971b..9b1fa0c 100644 --- a/crates/tree-sitter-command-cad-model/src/parser.c +++ b/crates/tree-sitter-command-cad-model/src/parser.c @@ -7,16 +7,16 @@ #endif #define LANGUAGE_VERSION 15 -#define STATE_COUNT 315 +#define STATE_COUNT 384 #define LARGE_STATE_COUNT 4 -#define SYMBOL_COUNT 101 +#define SYMBOL_COUNT 107 #define ALIAS_COUNT 0 #define TOKEN_COUNT 58 #define EXTERNAL_TOKEN_COUNT 0 #define FIELD_COUNT 31 #define MAX_ALIAS_SEQUENCE_LENGTH 9 #define MAX_RESERVED_WORD_SET_SIZE 0 -#define PRODUCTION_ID_COUNT 29 +#define PRODUCTION_ID_COUNT 31 #define SUPERTYPE_COUNT 0 enum ts_symbol_identifiers { @@ -111,15 +111,21 @@ enum ts_symbol_identifiers { sym_dictionary_member_assignment = 89, sym_dictionary_construction = 90, sym_closure_definition = 91, - sym_formula = 92, - sym_formula_expression = 93, - sym_formula_parenthesis = 94, - sym_formula_unary_expression = 95, - sym_formula_binary_expression = 96, - aux_sym_let_in_repeat1 = 97, - aux_sym_list_repeat1 = 98, - aux_sym_struct_definition_repeat1 = 99, - aux_sym_dictionary_construction_repeat1 = 100, + sym__formula_relation = 92, + sym_formula = 93, + sym_formula_expression = 94, + sym_formula_parenthesis = 95, + sym_formula_unary_expression = 96, + sym_formula_binary_expression = 97, + sym_formula_method_call = 98, + sym_formula_function_call = 99, + sym_formula_vector2 = 100, + sym_formula_vector3 = 101, + sym_formula_vector4 = 102, + aux_sym_let_in_repeat1 = 103, + aux_sym_list_repeat1 = 104, + aux_sym_struct_definition_repeat1 = 105, + aux_sym_dictionary_construction_repeat1 = 106, }; static const char * const ts_symbol_names[] = { @@ -215,11 +221,17 @@ static const char * const ts_symbol_names[] = { [sym_dictionary_member_assignment] = "dictionary_member_assignment", [sym_dictionary_construction] = "dictionary_construction", [sym_closure_definition] = "closure_definition", + [sym__formula_relation] = "_formula_relation", [sym_formula] = "formula", [sym_formula_expression] = "formula_expression", [sym_formula_parenthesis] = "formula_parenthesis", [sym_formula_unary_expression] = "formula_unary_expression", [sym_formula_binary_expression] = "formula_binary_expression", + [sym_formula_method_call] = "formula_method_call", + [sym_formula_function_call] = "formula_function_call", + [sym_formula_vector2] = "formula_vector2", + [sym_formula_vector3] = "formula_vector3", + [sym_formula_vector4] = "formula_vector4", [aux_sym_let_in_repeat1] = "let_in_repeat1", [aux_sym_list_repeat1] = "list_repeat1", [aux_sym_struct_definition_repeat1] = "struct_definition_repeat1", @@ -319,11 +331,17 @@ static const TSSymbol ts_symbol_map[] = { [sym_dictionary_member_assignment] = sym_dictionary_member_assignment, [sym_dictionary_construction] = sym_dictionary_construction, [sym_closure_definition] = sym_closure_definition, + [sym__formula_relation] = sym__formula_relation, [sym_formula] = sym_formula, [sym_formula_expression] = sym_formula_expression, [sym_formula_parenthesis] = sym_formula_parenthesis, [sym_formula_unary_expression] = sym_formula_unary_expression, [sym_formula_binary_expression] = sym_formula_binary_expression, + [sym_formula_method_call] = sym_formula_method_call, + [sym_formula_function_call] = sym_formula_function_call, + [sym_formula_vector2] = sym_formula_vector2, + [sym_formula_vector3] = sym_formula_vector3, + [sym_formula_vector4] = sym_formula_vector4, [aux_sym_let_in_repeat1] = aux_sym_let_in_repeat1, [aux_sym_list_repeat1] = aux_sym_list_repeat1, [aux_sym_struct_definition_repeat1] = aux_sym_struct_definition_repeat1, @@ -699,6 +717,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym__formula_relation] = { + .visible = false, + .named = true, + }, [sym_formula] = { .visible = true, .named = true, @@ -719,6 +741,26 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym_formula_method_call] = { + .visible = true, + .named = true, + }, + [sym_formula_function_call] = { + .visible = true, + .named = true, + }, + [sym_formula_vector2] = { + .visible = true, + .named = true, + }, + [sym_formula_vector3] = { + .visible = true, + .named = true, + }, + [sym_formula_vector4] = { + .visible = true, + .named = true, + }, [aux_sym_let_in_repeat1] = { .visible = false, .named = false, @@ -825,16 +867,18 @@ static const TSMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [16] = {.index = 24, .length = 2}, [17] = {.index = 26, .length = 2}, [18] = {.index = 28, .length = 2}, - [19] = {.index = 30, .length = 3}, - [20] = {.index = 33, .length = 2}, + [19] = {.index = 30, .length = 2}, + [20] = {.index = 32, .length = 3}, [21] = {.index = 35, .length = 2}, [22] = {.index = 37, .length = 2}, - [23] = {.index = 39, .length = 3}, - [24] = {.index = 42, .length = 3}, - [25] = {.index = 45, .length = 3}, - [26] = {.index = 48, .length = 3}, - [27] = {.index = 51, .length = 3}, - [28] = {.index = 54, .length = 4}, + [23] = {.index = 39, .length = 2}, + [24] = {.index = 41, .length = 3}, + [25] = {.index = 44, .length = 3}, + [26] = {.index = 47, .length = 3}, + [27] = {.index = 50, .length = 3}, + [28] = {.index = 53, .length = 3}, + [29] = {.index = 56, .length = 3}, + [30] = {.index = 59, .length = 4}, }; static const TSFieldMapEntry ts_field_map_entries[] = { @@ -887,39 +931,46 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_final_element, 2}, {field_members, 1}, [30] = + {field_argument, 2}, + {field_to_call, 0}, + [32] = {field_argument, 3}, {field_self_dictionary, 0}, {field_to_call, 2}, - [33] = + [35] = {field_x, 1}, {field_y, 3}, - [35] = + [37] = {field_ident, 0}, {field_value, 2}, - [37] = + [39] = {field_default, 3}, {field_name, 0}, - [39] = + [41] = {field_assignments, 1}, {field_assignments, 2}, {field_assignments, 3}, - [42] = + [44] = {field_lhs, 1}, {field_relation, 2}, {field_rhs, 3}, - [45] = + [47] = {field_argument, 0}, {field_expression, 4}, {field_result, 2}, - [48] = + [50] = {field_condition, 1}, {field_on_false, 5}, {field_on_true, 3}, - [51] = + [53] = {field_x, 1}, {field_y, 3}, {field_z, 5}, - [54] = + [56] = + {field_argument, 4}, + {field_self_dictionary, 0}, + {field_to_call, 2}, + [59] = {field_w, 7}, {field_x, 1}, {field_y, 3}, @@ -942,15 +993,15 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [4] = 4, [5] = 5, [6] = 6, - [7] = 6, - [8] = 4, + [7] = 4, + [8] = 6, [9] = 9, [10] = 10, [11] = 11, [12] = 12, [13] = 13, - [14] = 9, - [15] = 15, + [14] = 14, + [15] = 9, [16] = 16, [17] = 17, [18] = 18, @@ -971,48 +1022,48 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [33] = 33, [34] = 34, [35] = 35, - [36] = 34, - [37] = 37, - [38] = 11, - [39] = 12, - [40] = 13, - [41] = 10, - [42] = 15, - [43] = 16, + [36] = 10, + [37] = 11, + [38] = 12, + [39] = 13, + [40] = 14, + [41] = 34, + [42] = 16, + [43] = 17, [44] = 18, [45] = 19, [46] = 20, - [47] = 21, - [48] = 26, - [49] = 31, - [50] = 33, - [51] = 34, - [52] = 37, - [53] = 11, - [54] = 12, - [55] = 13, + [47] = 30, + [48] = 32, + [49] = 34, + [50] = 35, + [51] = 10, + [52] = 11, + [53] = 12, + [54] = 13, + [55] = 14, [56] = 9, - [57] = 15, - [58] = 16, - [59] = 17, - [60] = 18, - [61] = 19, - [62] = 20, - [63] = 21, - [64] = 26, - [65] = 31, - [66] = 33, - [67] = 37, + [57] = 16, + [58] = 17, + [59] = 18, + [60] = 19, + [61] = 20, + [62] = 25, + [63] = 30, + [64] = 32, + [65] = 35, + [66] = 66, + [67] = 21, [68] = 22, [69] = 23, - [70] = 24, - [71] = 32, - [72] = 35, - [73] = 22, - [74] = 24, - [75] = 29, - [76] = 10, - [77] = 17, + [70] = 31, + [71] = 33, + [72] = 21, + [73] = 23, + [74] = 28, + [75] = 66, + [76] = 66, + [77] = 25, [78] = 78, [79] = 79, [80] = 80, @@ -1025,7 +1076,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [87] = 87, [88] = 88, [89] = 89, - [90] = 90, + [90] = 83, [91] = 91, [92] = 92, [93] = 93, @@ -1036,220 +1087,289 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [98] = 98, [99] = 99, [100] = 100, - [101] = 101, - [102] = 102, + [101] = 86, + [102] = 100, [103] = 103, [104] = 104, [105] = 105, [106] = 106, - [107] = 107, + [107] = 85, [108] = 108, - [109] = 109, - [110] = 110, - [111] = 111, - [112] = 112, + [109] = 87, + [110] = 88, + [111] = 89, + [112] = 91, [113] = 113, - [114] = 114, - [115] = 115, + [114] = 84, + [115] = 100, [116] = 116, - [117] = 117, - [118] = 118, - [119] = 119, - [120] = 120, - [121] = 121, - [122] = 122, - [123] = 123, - [124] = 78, - [125] = 78, - [126] = 79, - [127] = 127, - [128] = 82, - [129] = 79, - [130] = 80, - [131] = 131, - [132] = 81, - [133] = 80, - [134] = 102, - [135] = 103, - [136] = 104, - [137] = 105, - [138] = 107, + [117] = 85, + [118] = 108, + [119] = 87, + [120] = 88, + [121] = 89, + [122] = 83, + [123] = 91, + [124] = 103, + [125] = 92, + [126] = 96, + [127] = 97, + [128] = 98, + [129] = 99, + [130] = 130, + [131] = 108, + [132] = 132, + [133] = 133, + [134] = 134, + [135] = 135, + [136] = 136, + [137] = 137, + [138] = 138, [139] = 139, - [140] = 84, - [141] = 91, - [142] = 118, - [143] = 86, - [144] = 81, + [140] = 140, + [141] = 141, + [142] = 142, + [143] = 143, + [144] = 144, [145] = 145, - [146] = 82, + [146] = 146, [147] = 147, - [148] = 90, - [149] = 83, + [148] = 148, + [149] = 149, [150] = 150, [151] = 151, [152] = 152, - [153] = 145, - [154] = 151, - [155] = 85, - [156] = 95, - [157] = 97, - [158] = 98, - [159] = 99, - [160] = 152, - [161] = 100, - [162] = 101, - [163] = 112, - [164] = 92, - [165] = 150, - [166] = 93, + [153] = 153, + [154] = 154, + [155] = 155, + [156] = 156, + [157] = 157, + [158] = 158, + [159] = 159, + [160] = 160, + [161] = 161, + [162] = 162, + [163] = 163, + [164] = 78, + [165] = 79, + [166] = 78, [167] = 167, [168] = 168, - [169] = 169, - [170] = 123, - [171] = 93, - [172] = 111, - [173] = 114, - [174] = 119, - [175] = 94, - [176] = 95, - [177] = 97, - [178] = 98, - [179] = 99, - [180] = 100, - [181] = 101, - [182] = 102, - [183] = 103, - [184] = 104, - [185] = 105, - [186] = 106, - [187] = 107, - [188] = 108, - [189] = 189, - [190] = 109, - [191] = 169, + [169] = 82, + [170] = 80, + [171] = 81, + [172] = 79, + [173] = 173, + [174] = 133, + [175] = 134, + [176] = 135, + [177] = 136, + [178] = 137, + [179] = 138, + [180] = 139, + [181] = 140, + [182] = 142, + [183] = 95, + [184] = 93, + [185] = 154, + [186] = 157, + [187] = 130, + [188] = 80, + [189] = 161, + [190] = 81, + [191] = 94, [192] = 192, - [193] = 113, - [194] = 115, - [195] = 116, - [196] = 91, - [197] = 118, - [198] = 120, - [199] = 121, - [200] = 200, - [201] = 201, - [202] = 88, - [203] = 87, - [204] = 89, - [205] = 205, - [206] = 206, - [207] = 167, - [208] = 122, - [209] = 92, - [210] = 189, - [211] = 96, - [212] = 192, - [213] = 200, - [214] = 192, - [215] = 200, - [216] = 117, - [217] = 112, - [218] = 168, - [219] = 169, - [220] = 110, - [221] = 221, - [222] = 222, - [223] = 223, - [224] = 224, - [225] = 225, - [226] = 226, - [227] = 225, - [228] = 226, - [229] = 229, - [230] = 222, - [231] = 229, - [232] = 223, - [233] = 221, - [234] = 234, - [235] = 78, - [236] = 80, - [237] = 79, - [238] = 81, - [239] = 82, - [240] = 240, - [241] = 241, + [193] = 193, + [194] = 194, + [195] = 152, + [196] = 173, + [197] = 113, + [198] = 155, + [199] = 192, + [200] = 194, + [201] = 156, + [202] = 132, + [203] = 203, + [204] = 204, + [205] = 82, + [206] = 193, + [207] = 116, + [208] = 208, + [209] = 209, + [210] = 146, + [211] = 152, + [212] = 212, + [213] = 161, + [214] = 133, + [215] = 134, + [216] = 135, + [217] = 136, + [218] = 137, + [219] = 138, + [220] = 139, + [221] = 140, + [222] = 141, + [223] = 142, + [224] = 144, + [225] = 145, + [226] = 149, + [227] = 150, + [228] = 151, + [229] = 153, + [230] = 154, + [231] = 157, + [232] = 160, + [233] = 162, + [234] = 104, + [235] = 105, + [236] = 106, + [237] = 237, + [238] = 238, + [239] = 239, + [240] = 158, + [241] = 143, [242] = 242, - [243] = 243, + [243] = 148, [244] = 244, - [245] = 245, - [246] = 245, - [247] = 88, - [248] = 89, - [249] = 249, - [250] = 87, - [251] = 243, - [252] = 249, - [253] = 244, - [254] = 254, - [255] = 255, - [256] = 256, - [257] = 256, - [258] = 255, - [259] = 259, - [260] = 260, - [261] = 261, - [262] = 260, - [263] = 260, - [264] = 264, - [265] = 261, - [266] = 261, + [245] = 155, + [246] = 246, + [247] = 208, + [248] = 209, + [249] = 239, + [250] = 208, + [251] = 209, + [252] = 163, + [253] = 156, + [254] = 159, + [255] = 132, + [256] = 238, + [257] = 244, + [258] = 244, + [259] = 147, + [260] = 246, + [261] = 78, + [262] = 79, + [263] = 82, + [264] = 80, + [265] = 81, + [266] = 266, [267] = 267, [268] = 268, [269] = 269, [270] = 270, [271] = 271, - [272] = 268, + [272] = 272, [273] = 273, - [274] = 274, - [275] = 275, - [276] = 269, - [277] = 275, - [278] = 271, - [279] = 274, + [274] = 116, + [275] = 105, + [276] = 106, + [277] = 104, + [278] = 278, + [279] = 278, [280] = 280, [281] = 281, [282] = 282, [283] = 283, [284] = 284, [285] = 285, - [286] = 284, - [287] = 287, - [288] = 288, - [289] = 284, - [290] = 287, - [291] = 291, - [292] = 292, + [286] = 286, + [287] = 280, + [288] = 285, + [289] = 286, + [290] = 283, + [291] = 284, + [292] = 282, [293] = 281, - [294] = 287, - [295] = 295, - [296] = 296, - [297] = 287, - [298] = 298, - [299] = 299, - [300] = 300, - [301] = 301, - [302] = 301, + [294] = 267, + [295] = 266, + [296] = 268, + [297] = 286, + [298] = 284, + [299] = 282, + [300] = 273, + [301] = 269, + [302] = 302, [303] = 303, - [304] = 304, - [305] = 305, - [306] = 306, - [307] = 307, - [308] = 308, - [309] = 306, - [310] = 310, - [311] = 311, - [312] = 307, - [313] = 313, - [314] = 308, + [304] = 285, + [305] = 270, + [306] = 281, + [307] = 280, + [308] = 302, + [309] = 283, + [310] = 303, + [311] = 271, + [312] = 312, + [313] = 312, + [314] = 314, + [315] = 315, + [316] = 314, + [317] = 317, + [318] = 317, + [319] = 319, + [320] = 319, + [321] = 315, + [322] = 322, + [323] = 322, + [324] = 324, + [325] = 325, + [326] = 325, + [327] = 327, + [328] = 327, + [329] = 325, + [330] = 327, + [331] = 331, + [332] = 332, + [333] = 333, + [334] = 334, + [335] = 334, + [336] = 336, + [337] = 337, + [338] = 337, + [339] = 339, + [340] = 340, + [341] = 341, + [342] = 336, + [343] = 340, + [344] = 332, + [345] = 345, + [346] = 346, + [347] = 347, + [348] = 348, + [349] = 349, + [350] = 350, + [351] = 351, + [352] = 352, + [353] = 353, + [354] = 354, + [355] = 354, + [356] = 348, + [357] = 357, + [358] = 358, + [359] = 354, + [360] = 358, + [361] = 361, + [362] = 358, + [363] = 358, + [364] = 364, + [365] = 365, + [366] = 366, + [367] = 367, + [368] = 368, + [369] = 369, + [370] = 365, + [371] = 369, + [372] = 372, + [373] = 373, + [374] = 374, + [375] = 372, + [376] = 367, + [377] = 377, + [378] = 368, + [379] = 379, + [380] = 380, + [381] = 381, + [382] = 366, + [383] = 383, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1257,573 +1377,600 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(23); + if (eof) ADVANCE(26); ADVANCE_MAP( - '!', 54, + '!', 57, '"', 5, - '#', 24, - '&', 61, - '\'', 7, - '(', 81, - ')', 82, - '*', 56, - '+', 52, - ',', 47, - '-', 51, - '.', 45, - '/', 57, - '0', 33, - '1', 35, - ':', 80, - ';', 79, - '<', 71, - '=', 78, - '>', 65, - '[', 83, - ']', 84, - '^', 63, - 't', 28, - '|', 62, + '#', 27, + '&', 64, + '\'', 8, + '(', 84, + ')', 85, + '*', 59, + '+', 55, + ',', 50, + '-', 54, + '.', 48, + '/', 60, + '0', 36, + '1', 38, + ':', 83, + ';', 82, + '<', 74, + '=', 81, + '>', 68, + '[', 86, + ']', 87, + '^', 66, + 't', 31, + '|', 65, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(25); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(36); + lookahead == ' ') ADVANCE(28); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(39); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); END_STATE(); case 1: ADVANCE_MAP( - '!', 53, + '!', 56, '"', 5, - '#', 24, - '(', 81, - ')', 82, - '*', 56, - '+', 52, - '-', 50, - '.', 10, - '/', 57, - '0', 34, - '<', 9, - '>', 18, - '[', 83, - ']', 84, + '#', 27, + '&', 7, + '(', 84, + ')', 85, + '*', 59, + '+', 55, + ',', 50, + '-', 53, + '.', 11, + '/', 60, + '0', 37, + ':', 13, + '<', 10, + '>', 19, + '[', 86, + ']', 87, + '^', 20, + '|', 21, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(25); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(36); + lookahead == ' ') ADVANCE(28); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(39); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); END_STATE(); case 2: ADVANCE_MAP( - '!', 14, - '#', 24, - '&', 61, - '\'', 7, - '(', 81, - ')', 17, - '*', 56, - '+', 52, - ',', 47, - '-', 51, - '.', 44, - '/', 57, - ':', 12, - '<', 71, - '=', 15, - '>', 66, - '^', 63, - '|', 62, + '!', 15, + '#', 27, + '&', 64, + '\'', 8, + '(', 84, + ')', 18, + '*', 59, + '+', 55, + ',', 50, + '-', 54, + '.', 47, + '/', 60, + ':', 13, + '<', 74, + '=', 16, + '>', 69, + '^', 66, + '|', 65, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(25); + lookahead == ' ') ADVANCE(28); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); END_STATE(); case 3: ADVANCE_MAP( - '!', 14, - '#', 24, - '\'', 7, - '*', 56, - '+', 52, - '-', 50, - '.', 44, - '/', 57, - '<', 72, - '=', 15, - '>', 64, + '!', 15, + '#', 27, + '&', 7, + '\'', 8, + '(', 84, + ')', 18, + '*', 59, + '+', 55, + ',', 50, + '-', 53, + '.', 47, + '/', 60, + ':', 13, + '<', 75, + '=', 16, + '>', 67, + '^', 20, + '|', 21, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(25); + lookahead == ' ') ADVANCE(28); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); END_STATE(); case 4: ADVANCE_MAP( - '!', 14, - '#', 24, - ')', 82, - '*', 56, - '+', 52, - '-', 50, - '/', 57, - '<', 72, - '=', 15, - '>', 67, + '!', 15, + '#', 27, + '&', 7, + '(', 84, + ')', 85, + '*', 59, + '+', 55, + ',', 50, + '-', 53, + '/', 60, + ':', 13, + '<', 75, + '=', 16, + '>', 70, + '^', 20, + '|', 21, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(25); + lookahead == ' ') ADVANCE(28); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(39); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(42); END_STATE(); case 5: - if (lookahead == '"') ADVANCE(31); + if (lookahead == '"') ADVANCE(34); if (lookahead == '\\') ADVANCE(6); if (lookahead != 0) ADVANCE(5); END_STATE(); case 6: - if (lookahead == '"') ADVANCE(32); + if (lookahead == '"') ADVANCE(35); if (lookahead == '\\') ADVANCE(6); if (lookahead != 0) ADVANCE(5); END_STATE(); case 7: - if (lookahead == '\'') ADVANCE(42); - if (lookahead == '\\') ADVANCE(8); - if (lookahead != 0) ADVANCE(7); + if (lookahead == '&') ADVANCE(77); END_STATE(); case 8: - if (lookahead == '\'') ADVANCE(43); - if (lookahead == '\\') ADVANCE(8); - if (lookahead != 0) ADVANCE(7); + if (lookahead == '\'') ADVANCE(45); + if (lookahead == '\\') ADVANCE(9); + if (lookahead != 0) ADVANCE(8); END_STATE(); case 9: - if (lookahead == '(') ADVANCE(46); - if (lookahead == '<') ADVANCE(13); + if (lookahead == '\'') ADVANCE(46); + if (lookahead == '\\') ADVANCE(9); + if (lookahead != 0) ADVANCE(8); END_STATE(); case 10: - if (lookahead == '.') ADVANCE(11); + if (lookahead == '(') ADVANCE(49); + if (lookahead == '<') ADVANCE(14); END_STATE(); case 11: - if (lookahead == '.') ADVANCE(85); + if (lookahead == '.') ADVANCE(12); END_STATE(); case 12: - if (lookahead == ':') ADVANCE(49); + if (lookahead == '.') ADVANCE(88); END_STATE(); case 13: - if (lookahead == '<') ADVANCE(87); + if (lookahead == ':') ADVANCE(52); END_STATE(); case 14: - if (lookahead == '=') ADVANCE(73); + if (lookahead == '<') ADVANCE(90); END_STATE(); case 15: - if (lookahead == '=') ADVANCE(69); + if (lookahead == '=') ADVANCE(76); END_STATE(); case 16: - if (lookahead == '>') ADVANCE(88); + if (lookahead == '=') ADVANCE(72); END_STATE(); case 17: - if (lookahead == '>') ADVANCE(48); + if (lookahead == '>') ADVANCE(91); END_STATE(); case 18: - if (lookahead == '>') ADVANCE(16); + if (lookahead == '>') ADVANCE(51); END_STATE(); case 19: - if (eof) ADVANCE(23); + if (lookahead == '>') ADVANCE(17); + END_STATE(); + case 20: + if (lookahead == '^') ADVANCE(79); + END_STATE(); + case 21: + if (lookahead == '|') ADVANCE(78); + END_STATE(); + case 22: + if (eof) ADVANCE(26); ADVANCE_MAP( - '!', 14, - '#', 24, - '&', 61, - '\'', 7, - '(', 81, - ')', 82, - '*', 56, - '+', 52, - ',', 47, - '-', 51, - '.', 44, - '/', 57, - ':', 80, - ';', 79, - '<', 71, - '=', 78, - '>', 66, - ']', 84, - '^', 63, - 't', 28, - '|', 62, - '0', 41, - '1', 41, + '!', 15, + '#', 27, + '&', 64, + '\'', 8, + '(', 84, + ')', 85, + '*', 59, + '+', 55, + ',', 50, + '-', 54, + '.', 47, + '/', 60, + ':', 83, + ';', 82, + '<', 74, + '=', 81, + '>', 69, + ']', 87, + '^', 66, + 't', 31, + '|', 65, + '0', 44, + '1', 44, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(25); + lookahead == ' ') ADVANCE(28); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); END_STATE(); - case 20: - if (eof) ADVANCE(23); + case 23: + if (eof) ADVANCE(26); ADVANCE_MAP( - '!', 14, - '#', 24, - '&', 61, - '\'', 7, - '(', 81, - ')', 82, - '*', 56, - '+', 52, - ',', 47, - '-', 50, - '.', 44, - '/', 57, - ':', 80, - ';', 79, - '<', 71, - '=', 78, - '>', 65, - ']', 84, - '^', 63, - '|', 62, + '!', 15, + '#', 27, + '&', 64, + '\'', 8, + '(', 84, + ')', 85, + '*', 59, + '+', 55, + ',', 50, + '-', 53, + '.', 47, + '/', 60, + ':', 83, + ';', 82, + '<', 74, + '=', 81, + '>', 68, + ']', 87, + '^', 66, + '|', 65, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(25); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(36); + lookahead == ' ') ADVANCE(28); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(39); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); END_STATE(); - case 21: - if (eof) ADVANCE(23); + case 24: + if (eof) ADVANCE(26); ADVANCE_MAP( - '!', 14, - '#', 24, - '&', 61, - '(', 81, - ')', 82, - '*', 56, - '+', 52, - ',', 47, - '-', 51, - '.', 44, - '/', 57, - ':', 80, - ';', 79, - '<', 71, - '=', 78, - '>', 66, - ']', 84, - '^', 63, - '|', 62, + '!', 15, + '#', 27, + '&', 64, + '(', 84, + ')', 85, + '*', 59, + '+', 55, + ',', 50, + '-', 54, + '.', 47, + '/', 60, + ':', 83, + ';', 82, + '<', 74, + '=', 81, + '>', 69, + ']', 87, + '^', 66, + '|', 65, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(25); + lookahead == ' ') ADVANCE(28); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); END_STATE(); - case 22: - if (eof) ADVANCE(23); + case 25: + if (eof) ADVANCE(26); ADVANCE_MAP( - '!', 14, - '#', 24, - '&', 61, - '(', 81, - ')', 82, - '*', 56, - '+', 52, - ',', 47, - '-', 50, - '.', 44, - '/', 57, - ':', 80, - ';', 79, - '<', 71, - '=', 78, - '>', 65, - ']', 84, - '^', 63, - 't', 28, - '|', 62, + '!', 15, + '#', 27, + '&', 64, + '(', 84, + ')', 85, + '*', 59, + '+', 55, + ',', 50, + '-', 53, + '.', 47, + '/', 60, + ':', 83, + ';', 82, + '<', 74, + '=', 81, + '>', 68, + ']', 87, + '^', 66, + 't', 31, + '|', 65, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(25); + lookahead == ' ') ADVANCE(28); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); END_STATE(); - case 23: + case 26: ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); - case 24: + case 27: ACCEPT_TOKEN(sym_comment); if (lookahead != 0 && - lookahead != '\n') ADVANCE(24); + lookahead != '\n') ADVANCE(27); END_STATE(); - case 25: + case 28: ACCEPT_TOKEN(sym__whitespace); END_STATE(); - case 26: + case 29: ACCEPT_TOKEN(sym_identifier); - if (lookahead == ' ') ADVANCE(77); + if (lookahead == ' ') ADVANCE(80); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); END_STATE(); - case 27: + case 30: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'e') ADVANCE(29); + if (lookahead == 'e') ADVANCE(32); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); END_STATE(); - case 28: + case 31: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'h') ADVANCE(27); + if (lookahead == 'h') ADVANCE(30); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); END_STATE(); - case 29: + case 32: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'n') ADVANCE(26); + if (lookahead == 'n') ADVANCE(29); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); END_STATE(); - case 30: + case 33: ACCEPT_TOKEN(sym_identifier); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); END_STATE(); - case 31: + case 34: ACCEPT_TOKEN(sym_string); END_STATE(); - case 32: + case 35: ACCEPT_TOKEN(sym_string); - if (lookahead == '"') ADVANCE(31); + if (lookahead == '"') ADVANCE(34); if (lookahead == '\\') ADVANCE(6); if (lookahead != 0) ADVANCE(5); END_STATE(); - case 33: + case 36: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(40); - if (lookahead == 'o') ADVANCE(37); - if (lookahead == 'x') ADVANCE(38); + if (lookahead == 'b') ADVANCE(43); + if (lookahead == 'o') ADVANCE(40); + if (lookahead == 'x') ADVANCE(41); if (lookahead == '0' || - lookahead == '1') ADVANCE(35); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(36); + lookahead == '1') ADVANCE(38); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(39); END_STATE(); - case 34: + case 37: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(40); - if (lookahead == 'o') ADVANCE(37); - if (lookahead == 'x') ADVANCE(38); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(36); + if (lookahead == 'b') ADVANCE(43); + if (lookahead == 'o') ADVANCE(40); + if (lookahead == 'x') ADVANCE(41); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(39); END_STATE(); - case 35: + case 38: ACCEPT_TOKEN(aux_sym_base_ten_token1); if (lookahead == '0' || - lookahead == '1') ADVANCE(35); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(36); + lookahead == '1') ADVANCE(38); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(39); END_STATE(); - case 36: + case 39: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(36); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(39); END_STATE(); - case 37: + case 40: ACCEPT_TOKEN(aux_sym_octal_token1); END_STATE(); - case 38: + case 41: ACCEPT_TOKEN(aux_sym_hex_token1); END_STATE(); - case 39: + case 42: ACCEPT_TOKEN(aux_sym_hex_token2); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(39); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(42); END_STATE(); - case 40: + case 43: ACCEPT_TOKEN(aux_sym_binary_token1); END_STATE(); - case 41: + case 44: ACCEPT_TOKEN(aux_sym_binary_token2); if (lookahead == '0' || - lookahead == '1') ADVANCE(41); + lookahead == '1') ADVANCE(44); END_STATE(); - case 42: + case 45: ACCEPT_TOKEN(sym_unit_quote); END_STATE(); - case 43: + case 46: ACCEPT_TOKEN(sym_unit_quote); - if (lookahead == '\'') ADVANCE(42); - if (lookahead == '\\') ADVANCE(8); - if (lookahead != 0) ADVANCE(7); + if (lookahead == '\'') ADVANCE(45); + if (lookahead == '\\') ADVANCE(9); + if (lookahead != 0) ADVANCE(8); END_STATE(); - case 44: + case 47: ACCEPT_TOKEN(anon_sym_DOT); END_STATE(); - case 45: + case 48: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(11); + if (lookahead == '.') ADVANCE(12); END_STATE(); - case 46: + case 49: ACCEPT_TOKEN(anon_sym_LT_LPAREN); END_STATE(); - case 47: + case 50: ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); - case 48: + case 51: ACCEPT_TOKEN(anon_sym_RPAREN_GT); END_STATE(); - case 49: + case 52: ACCEPT_TOKEN(anon_sym_COLON_COLON); END_STATE(); - case 50: + case 53: ACCEPT_TOKEN(anon_sym_DASH); END_STATE(); - case 51: + case 54: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '>') ADVANCE(86); + if (lookahead == '>') ADVANCE(89); END_STATE(); - case 52: + case 55: ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); - case 53: + case 56: ACCEPT_TOKEN(anon_sym_BANG); END_STATE(); - case 54: + case 57: ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(73); + if (lookahead == '=') ADVANCE(76); END_STATE(); - case 55: + case 58: ACCEPT_TOKEN(anon_sym_STAR_STAR); END_STATE(); - case 56: + case 59: ACCEPT_TOKEN(anon_sym_STAR); - if (lookahead == '*') ADVANCE(55); + if (lookahead == '*') ADVANCE(58); END_STATE(); - case 57: + case 60: ACCEPT_TOKEN(anon_sym_SLASH); END_STATE(); - case 58: + case 61: ACCEPT_TOKEN(anon_sym_LT_LT); END_STATE(); - case 59: + case 62: ACCEPT_TOKEN(anon_sym_GT_GT); END_STATE(); - case 60: + case 63: ACCEPT_TOKEN(anon_sym_GT_GT); - if (lookahead == '>') ADVANCE(88); + if (lookahead == '>') ADVANCE(91); END_STATE(); - case 61: + case 64: ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(74); + if (lookahead == '&') ADVANCE(77); END_STATE(); - case 62: + case 65: ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '|') ADVANCE(75); + if (lookahead == '|') ADVANCE(78); END_STATE(); - case 63: + case 66: ACCEPT_TOKEN(anon_sym_CARET); - if (lookahead == '^') ADVANCE(76); + if (lookahead == '^') ADVANCE(79); END_STATE(); - case 64: + case 67: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(68); + if (lookahead == '=') ADVANCE(71); END_STATE(); - case 65: + case 68: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(68); - if (lookahead == '>') ADVANCE(60); + if (lookahead == '=') ADVANCE(71); + if (lookahead == '>') ADVANCE(63); END_STATE(); - case 66: + case 69: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(68); - if (lookahead == '>') ADVANCE(59); + if (lookahead == '=') ADVANCE(71); + if (lookahead == '>') ADVANCE(62); END_STATE(); - case 67: + case 70: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(68); - if (lookahead == '>') ADVANCE(16); + if (lookahead == '=') ADVANCE(71); + if (lookahead == '>') ADVANCE(17); END_STATE(); - case 68: + case 71: ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); - case 69: + case 72: ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); - case 70: + case 73: ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); - case 71: + case 74: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(58); - if (lookahead == '=') ADVANCE(70); + if (lookahead == '<') ADVANCE(61); + if (lookahead == '=') ADVANCE(73); END_STATE(); - case 72: + case 75: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '=') ADVANCE(70); + if (lookahead == '=') ADVANCE(73); END_STATE(); - case 73: + case 76: ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); - case 74: + case 77: ACCEPT_TOKEN(anon_sym_AMP_AMP); END_STATE(); - case 75: + case 78: ACCEPT_TOKEN(anon_sym_PIPE_PIPE); END_STATE(); - case 76: + case 79: ACCEPT_TOKEN(anon_sym_CARET_CARET); END_STATE(); - case 77: + case 80: ACCEPT_TOKEN(anon_sym_then); END_STATE(); - case 78: + case 81: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(69); + if (lookahead == '=') ADVANCE(72); END_STATE(); - case 79: + case 82: ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); - case 80: + case 83: ACCEPT_TOKEN(anon_sym_COLON); - if (lookahead == ':') ADVANCE(49); + if (lookahead == ':') ADVANCE(52); END_STATE(); - case 81: + case 84: ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); - case 82: + case 85: ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); - case 83: + case 86: ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); - case 84: + case 87: ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); - case 85: + case 88: ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); - case 86: + case 89: ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); - case 87: + case 90: ACCEPT_TOKEN(anon_sym_LT_LT_LT); END_STATE(); - case 88: + case 91: ACCEPT_TOKEN(anon_sym_GT_GT_GT); END_STATE(); default: @@ -2009,243 +2156,312 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [75] = {.lex_state = 1}, [76] = {.lex_state = 1}, [77] = {.lex_state = 1}, - [78] = {.lex_state = 20}, - [79] = {.lex_state = 20}, - [80] = {.lex_state = 20}, - [81] = {.lex_state = 20}, - [82] = {.lex_state = 20}, - [83] = {.lex_state = 19}, - [84] = {.lex_state = 19}, - [85] = {.lex_state = 19}, - [86] = {.lex_state = 19}, - [87] = {.lex_state = 22}, - [88] = {.lex_state = 22}, - [89] = {.lex_state = 22}, - [90] = {.lex_state = 19}, - [91] = {.lex_state = 21}, - [92] = {.lex_state = 21}, - [93] = {.lex_state = 21}, - [94] = {.lex_state = 19}, - [95] = {.lex_state = 21}, - [96] = {.lex_state = 19}, - [97] = {.lex_state = 21}, - [98] = {.lex_state = 21}, - [99] = {.lex_state = 21}, - [100] = {.lex_state = 21}, - [101] = {.lex_state = 21}, - [102] = {.lex_state = 21}, - [103] = {.lex_state = 21}, - [104] = {.lex_state = 21}, - [105] = {.lex_state = 21}, - [106] = {.lex_state = 19}, - [107] = {.lex_state = 21}, - [108] = {.lex_state = 19}, - [109] = {.lex_state = 19}, - [110] = {.lex_state = 19}, - [111] = {.lex_state = 19}, - [112] = {.lex_state = 21}, - [113] = {.lex_state = 19}, - [114] = {.lex_state = 19}, - [115] = {.lex_state = 19}, - [116] = {.lex_state = 19}, - [117] = {.lex_state = 19}, - [118] = {.lex_state = 21}, - [119] = {.lex_state = 19}, - [120] = {.lex_state = 19}, - [121] = {.lex_state = 19}, - [122] = {.lex_state = 19}, - [123] = {.lex_state = 19}, - [124] = {.lex_state = 2}, - [125] = {.lex_state = 19}, - [126] = {.lex_state = 2}, - [127] = {.lex_state = 19}, - [128] = {.lex_state = 2}, - [129] = {.lex_state = 19}, - [130] = {.lex_state = 2}, - [131] = {.lex_state = 19}, - [132] = {.lex_state = 2}, - [133] = {.lex_state = 19}, - [134] = {.lex_state = 2}, - [135] = {.lex_state = 2}, - [136] = {.lex_state = 2}, - [137] = {.lex_state = 2}, - [138] = {.lex_state = 2}, - [139] = {.lex_state = 19}, - [140] = {.lex_state = 2}, - [141] = {.lex_state = 2}, - [142] = {.lex_state = 2}, - [143] = {.lex_state = 2}, - [144] = {.lex_state = 19}, - [145] = {.lex_state = 2}, - [146] = {.lex_state = 19}, - [147] = {.lex_state = 19}, - [148] = {.lex_state = 2}, - [149] = {.lex_state = 2}, - [150] = {.lex_state = 19}, - [151] = {.lex_state = 2}, - [152] = {.lex_state = 19}, - [153] = {.lex_state = 2}, - [154] = {.lex_state = 2}, - [155] = {.lex_state = 2}, - [156] = {.lex_state = 2}, - [157] = {.lex_state = 2}, - [158] = {.lex_state = 2}, - [159] = {.lex_state = 2}, - [160] = {.lex_state = 19}, - [161] = {.lex_state = 2}, - [162] = {.lex_state = 2}, - [163] = {.lex_state = 2}, + [78] = {.lex_state = 23}, + [79] = {.lex_state = 23}, + [80] = {.lex_state = 23}, + [81] = {.lex_state = 23}, + [82] = {.lex_state = 23}, + [83] = {.lex_state = 1}, + [84] = {.lex_state = 1}, + [85] = {.lex_state = 1}, + [86] = {.lex_state = 1}, + [87] = {.lex_state = 1}, + [88] = {.lex_state = 1}, + [89] = {.lex_state = 1}, + [90] = {.lex_state = 1}, + [91] = {.lex_state = 1}, + [92] = {.lex_state = 1}, + [93] = {.lex_state = 22}, + [94] = {.lex_state = 22}, + [95] = {.lex_state = 22}, + [96] = {.lex_state = 1}, + [97] = {.lex_state = 1}, + [98] = {.lex_state = 1}, + [99] = {.lex_state = 1}, + [100] = {.lex_state = 1}, + [101] = {.lex_state = 1}, + [102] = {.lex_state = 1}, + [103] = {.lex_state = 1}, + [104] = {.lex_state = 25}, + [105] = {.lex_state = 25}, + [106] = {.lex_state = 25}, + [107] = {.lex_state = 1}, + [108] = {.lex_state = 1}, + [109] = {.lex_state = 1}, + [110] = {.lex_state = 1}, + [111] = {.lex_state = 1}, + [112] = {.lex_state = 1}, + [113] = {.lex_state = 22}, + [114] = {.lex_state = 1}, + [115] = {.lex_state = 1}, + [116] = {.lex_state = 25}, + [117] = {.lex_state = 1}, + [118] = {.lex_state = 1}, + [119] = {.lex_state = 1}, + [120] = {.lex_state = 1}, + [121] = {.lex_state = 1}, + [122] = {.lex_state = 1}, + [123] = {.lex_state = 1}, + [124] = {.lex_state = 1}, + [125] = {.lex_state = 1}, + [126] = {.lex_state = 1}, + [127] = {.lex_state = 1}, + [128] = {.lex_state = 1}, + [129] = {.lex_state = 1}, + [130] = {.lex_state = 22}, + [131] = {.lex_state = 1}, + [132] = {.lex_state = 24}, + [133] = {.lex_state = 24}, + [134] = {.lex_state = 24}, + [135] = {.lex_state = 24}, + [136] = {.lex_state = 24}, + [137] = {.lex_state = 24}, + [138] = {.lex_state = 24}, + [139] = {.lex_state = 24}, + [140] = {.lex_state = 24}, + [141] = {.lex_state = 22}, + [142] = {.lex_state = 24}, + [143] = {.lex_state = 22}, + [144] = {.lex_state = 22}, + [145] = {.lex_state = 22}, + [146] = {.lex_state = 22}, + [147] = {.lex_state = 22}, + [148] = {.lex_state = 22}, + [149] = {.lex_state = 22}, + [150] = {.lex_state = 22}, + [151] = {.lex_state = 22}, + [152] = {.lex_state = 24}, + [153] = {.lex_state = 22}, + [154] = {.lex_state = 24}, + [155] = {.lex_state = 24}, + [156] = {.lex_state = 24}, + [157] = {.lex_state = 24}, + [158] = {.lex_state = 22}, + [159] = {.lex_state = 22}, + [160] = {.lex_state = 22}, + [161] = {.lex_state = 24}, + [162] = {.lex_state = 22}, + [163] = {.lex_state = 22}, [164] = {.lex_state = 2}, - [165] = {.lex_state = 19}, - [166] = {.lex_state = 2}, - [167] = {.lex_state = 2}, - [168] = {.lex_state = 19}, - [169] = {.lex_state = 19}, + [165] = {.lex_state = 2}, + [166] = {.lex_state = 22}, + [167] = {.lex_state = 22}, + [168] = {.lex_state = 22}, + [169] = {.lex_state = 2}, [170] = {.lex_state = 2}, - [171] = {.lex_state = 19}, - [172] = {.lex_state = 2}, + [171] = {.lex_state = 2}, + [172] = {.lex_state = 22}, [173] = {.lex_state = 2}, [174] = {.lex_state = 2}, [175] = {.lex_state = 2}, - [176] = {.lex_state = 19}, - [177] = {.lex_state = 19}, - [178] = {.lex_state = 19}, - [179] = {.lex_state = 19}, - [180] = {.lex_state = 19}, - [181] = {.lex_state = 19}, - [182] = {.lex_state = 19}, - [183] = {.lex_state = 19}, - [184] = {.lex_state = 19}, - [185] = {.lex_state = 19}, + [176] = {.lex_state = 2}, + [177] = {.lex_state = 2}, + [178] = {.lex_state = 2}, + [179] = {.lex_state = 2}, + [180] = {.lex_state = 2}, + [181] = {.lex_state = 2}, + [182] = {.lex_state = 2}, + [183] = {.lex_state = 2}, + [184] = {.lex_state = 2}, + [185] = {.lex_state = 2}, [186] = {.lex_state = 2}, - [187] = {.lex_state = 19}, - [188] = {.lex_state = 2}, - [189] = {.lex_state = 19}, - [190] = {.lex_state = 2}, - [191] = {.lex_state = 19}, - [192] = {.lex_state = 19}, - [193] = {.lex_state = 2}, + [187] = {.lex_state = 2}, + [188] = {.lex_state = 22}, + [189] = {.lex_state = 2}, + [190] = {.lex_state = 22}, + [191] = {.lex_state = 2}, + [192] = {.lex_state = 22}, + [193] = {.lex_state = 22}, [194] = {.lex_state = 2}, [195] = {.lex_state = 2}, - [196] = {.lex_state = 19}, - [197] = {.lex_state = 19}, + [196] = {.lex_state = 2}, + [197] = {.lex_state = 2}, [198] = {.lex_state = 2}, - [199] = {.lex_state = 2}, - [200] = {.lex_state = 21}, - [201] = {.lex_state = 19}, + [199] = {.lex_state = 22}, + [200] = {.lex_state = 2}, + [201] = {.lex_state = 2}, [202] = {.lex_state = 2}, - [203] = {.lex_state = 2}, - [204] = {.lex_state = 2}, - [205] = {.lex_state = 19}, - [206] = {.lex_state = 19}, + [203] = {.lex_state = 22}, + [204] = {.lex_state = 22}, + [205] = {.lex_state = 22}, + [206] = {.lex_state = 22}, [207] = {.lex_state = 2}, - [208] = {.lex_state = 2}, - [209] = {.lex_state = 19}, - [210] = {.lex_state = 19}, - [211] = {.lex_state = 2}, - [212] = {.lex_state = 19}, - [213] = {.lex_state = 21}, - [214] = {.lex_state = 19}, - [215] = {.lex_state = 21}, - [216] = {.lex_state = 2}, - [217] = {.lex_state = 19}, - [218] = {.lex_state = 19}, - [219] = {.lex_state = 19}, - [220] = {.lex_state = 2}, - [221] = {.lex_state = 1}, - [222] = {.lex_state = 1}, - [223] = {.lex_state = 1}, - [224] = {.lex_state = 1}, - [225] = {.lex_state = 1}, - [226] = {.lex_state = 1}, - [227] = {.lex_state = 1}, - [228] = {.lex_state = 1}, - [229] = {.lex_state = 1}, - [230] = {.lex_state = 1}, - [231] = {.lex_state = 1}, - [232] = {.lex_state = 1}, - [233] = {.lex_state = 1}, - [234] = {.lex_state = 1}, - [235] = {.lex_state = 3}, - [236] = {.lex_state = 3}, - [237] = {.lex_state = 3}, - [238] = {.lex_state = 3}, - [239] = {.lex_state = 3}, - [240] = {.lex_state = 4}, - [241] = {.lex_state = 4}, - [242] = {.lex_state = 4}, - [243] = {.lex_state = 3}, - [244] = {.lex_state = 3}, - [245] = {.lex_state = 3}, - [246] = {.lex_state = 3}, - [247] = {.lex_state = 3}, - [248] = {.lex_state = 3}, - [249] = {.lex_state = 3}, - [250] = {.lex_state = 3}, - [251] = {.lex_state = 1}, - [252] = {.lex_state = 1}, - [253] = {.lex_state = 1}, - [254] = {.lex_state = 0}, - [255] = {.lex_state = 1}, - [256] = {.lex_state = 1}, - [257] = {.lex_state = 1}, - [258] = {.lex_state = 1}, - [259] = {.lex_state = 1}, - [260] = {.lex_state = 1}, - [261] = {.lex_state = 1}, - [262] = {.lex_state = 1}, - [263] = {.lex_state = 1}, - [264] = {.lex_state = 1}, - [265] = {.lex_state = 1}, - [266] = {.lex_state = 1}, - [267] = {.lex_state = 0}, - [268] = {.lex_state = 0}, - [269] = {.lex_state = 1}, - [270] = {.lex_state = 0}, - [271] = {.lex_state = 1}, - [272] = {.lex_state = 0}, - [273] = {.lex_state = 1}, - [274] = {.lex_state = 0}, - [275] = {.lex_state = 1}, - [276] = {.lex_state = 1}, - [277] = {.lex_state = 1}, - [278] = {.lex_state = 1}, - [279] = {.lex_state = 0}, - [280] = {.lex_state = 1}, - [281] = {.lex_state = 0}, - [282] = {.lex_state = 1}, - [283] = {.lex_state = 1}, - [284] = {.lex_state = 1}, - [285] = {.lex_state = 0}, - [286] = {.lex_state = 1}, - [287] = {.lex_state = 20}, + [208] = {.lex_state = 22}, + [209] = {.lex_state = 24}, + [210] = {.lex_state = 2}, + [211] = {.lex_state = 22}, + [212] = {.lex_state = 22}, + [213] = {.lex_state = 22}, + [214] = {.lex_state = 22}, + [215] = {.lex_state = 22}, + [216] = {.lex_state = 22}, + [217] = {.lex_state = 22}, + [218] = {.lex_state = 22}, + [219] = {.lex_state = 22}, + [220] = {.lex_state = 22}, + [221] = {.lex_state = 22}, + [222] = {.lex_state = 2}, + [223] = {.lex_state = 22}, + [224] = {.lex_state = 2}, + [225] = {.lex_state = 2}, + [226] = {.lex_state = 2}, + [227] = {.lex_state = 2}, + [228] = {.lex_state = 2}, + [229] = {.lex_state = 2}, + [230] = {.lex_state = 22}, + [231] = {.lex_state = 22}, + [232] = {.lex_state = 2}, + [233] = {.lex_state = 2}, + [234] = {.lex_state = 2}, + [235] = {.lex_state = 2}, + [236] = {.lex_state = 2}, + [237] = {.lex_state = 22}, + [238] = {.lex_state = 22}, + [239] = {.lex_state = 2}, + [240] = {.lex_state = 2}, + [241] = {.lex_state = 2}, + [242] = {.lex_state = 22}, + [243] = {.lex_state = 2}, + [244] = {.lex_state = 22}, + [245] = {.lex_state = 22}, + [246] = {.lex_state = 22}, + [247] = {.lex_state = 22}, + [248] = {.lex_state = 24}, + [249] = {.lex_state = 2}, + [250] = {.lex_state = 22}, + [251] = {.lex_state = 24}, + [252] = {.lex_state = 2}, + [253] = {.lex_state = 22}, + [254] = {.lex_state = 2}, + [255] = {.lex_state = 22}, + [256] = {.lex_state = 22}, + [257] = {.lex_state = 22}, + [258] = {.lex_state = 22}, + [259] = {.lex_state = 2}, + [260] = {.lex_state = 22}, + [261] = {.lex_state = 3}, + [262] = {.lex_state = 3}, + [263] = {.lex_state = 3}, + [264] = {.lex_state = 3}, + [265] = {.lex_state = 3}, + [266] = {.lex_state = 4}, + [267] = {.lex_state = 4}, + [268] = {.lex_state = 4}, + [269] = {.lex_state = 4}, + [270] = {.lex_state = 4}, + [271] = {.lex_state = 4}, + [272] = {.lex_state = 1}, + [273] = {.lex_state = 4}, + [274] = {.lex_state = 3}, + [275] = {.lex_state = 3}, + [276] = {.lex_state = 3}, + [277] = {.lex_state = 3}, + [278] = {.lex_state = 3}, + [279] = {.lex_state = 3}, + [280] = {.lex_state = 3}, + [281] = {.lex_state = 3}, + [282] = {.lex_state = 3}, + [283] = {.lex_state = 3}, + [284] = {.lex_state = 3}, + [285] = {.lex_state = 3}, + [286] = {.lex_state = 3}, + [287] = {.lex_state = 1}, [288] = {.lex_state = 1}, [289] = {.lex_state = 1}, - [290] = {.lex_state = 20}, + [290] = {.lex_state = 1}, [291] = {.lex_state = 1}, - [292] = {.lex_state = 0}, - [293] = {.lex_state = 0}, - [294] = {.lex_state = 20}, - [295] = {.lex_state = 0}, - [296] = {.lex_state = 1}, - [297] = {.lex_state = 20}, - [298] = {.lex_state = 0}, - [299] = {.lex_state = 0}, - [300] = {.lex_state = 20}, - [301] = {.lex_state = 0}, - [302] = {.lex_state = 0}, - [303] = {.lex_state = 0}, - [304] = {.lex_state = 4}, - [305] = {.lex_state = 0}, - [306] = {.lex_state = 1}, - [307] = {.lex_state = 0}, - [308] = {.lex_state = 1}, - [309] = {.lex_state = 1}, - [310] = {.lex_state = 0}, - [311] = {.lex_state = 19}, - [312] = {.lex_state = 0}, - [313] = {.lex_state = 0}, - [314] = {.lex_state = 1}, + [292] = {.lex_state = 1}, + [293] = {.lex_state = 1}, + [294] = {.lex_state = 2}, + [295] = {.lex_state = 2}, + [296] = {.lex_state = 2}, + [297] = {.lex_state = 2}, + [298] = {.lex_state = 2}, + [299] = {.lex_state = 2}, + [300] = {.lex_state = 2}, + [301] = {.lex_state = 2}, + [302] = {.lex_state = 2}, + [303] = {.lex_state = 2}, + [304] = {.lex_state = 2}, + [305] = {.lex_state = 2}, + [306] = {.lex_state = 2}, + [307] = {.lex_state = 2}, + [308] = {.lex_state = 2}, + [309] = {.lex_state = 2}, + [310] = {.lex_state = 2}, + [311] = {.lex_state = 2}, + [312] = {.lex_state = 1}, + [313] = {.lex_state = 1}, + [314] = {.lex_state = 0}, + [315] = {.lex_state = 0}, + [316] = {.lex_state = 0}, + [317] = {.lex_state = 0}, + [318] = {.lex_state = 0}, + [319] = {.lex_state = 2}, + [320] = {.lex_state = 2}, + [321] = {.lex_state = 0}, + [322] = {.lex_state = 1}, + [323] = {.lex_state = 1}, + [324] = {.lex_state = 1}, + [325] = {.lex_state = 1}, + [326] = {.lex_state = 1}, + [327] = {.lex_state = 1}, + [328] = {.lex_state = 1}, + [329] = {.lex_state = 1}, + [330] = {.lex_state = 1}, + [331] = {.lex_state = 1}, + [332] = {.lex_state = 1}, + [333] = {.lex_state = 0}, + [334] = {.lex_state = 1}, + [335] = {.lex_state = 1}, + [336] = {.lex_state = 0}, + [337] = {.lex_state = 0}, + [338] = {.lex_state = 0}, + [339] = {.lex_state = 0}, + [340] = {.lex_state = 1}, + [341] = {.lex_state = 1}, + [342] = {.lex_state = 0}, + [343] = {.lex_state = 1}, + [344] = {.lex_state = 1}, + [345] = {.lex_state = 0}, + [346] = {.lex_state = 0}, + [347] = {.lex_state = 1}, + [348] = {.lex_state = 0}, + [349] = {.lex_state = 1}, + [350] = {.lex_state = 0}, + [351] = {.lex_state = 1}, + [352] = {.lex_state = 1}, + [353] = {.lex_state = 1}, + [354] = {.lex_state = 1}, + [355] = {.lex_state = 1}, + [356] = {.lex_state = 0}, + [357] = {.lex_state = 1}, + [358] = {.lex_state = 23}, + [359] = {.lex_state = 1}, + [360] = {.lex_state = 23}, + [361] = {.lex_state = 0}, + [362] = {.lex_state = 23}, + [363] = {.lex_state = 23}, + [364] = {.lex_state = 0}, + [365] = {.lex_state = 0}, + [366] = {.lex_state = 1}, + [367] = {.lex_state = 0}, + [368] = {.lex_state = 1}, + [369] = {.lex_state = 0}, + [370] = {.lex_state = 0}, + [371] = {.lex_state = 0}, + [372] = {.lex_state = 1}, + [373] = {.lex_state = 0}, + [374] = {.lex_state = 4}, + [375] = {.lex_state = 1}, + [376] = {.lex_state = 0}, + [377] = {.lex_state = 0}, + [378] = {.lex_state = 1}, + [379] = {.lex_state = 0}, + [380] = {.lex_state = 23}, + [381] = {.lex_state = 22}, + [382] = {.lex_state = 1}, + [383] = {.lex_state = 0}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -2306,35 +2522,35 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_GT_GT_GT] = ACTIONS(1), }, [STATE(1)] = { - [sym_source_file] = STATE(313), - [sym_base_ten] = STATE(282), - [sym_octal] = STATE(282), - [sym_hex] = STATE(282), - [sym_binary] = STATE(282), - [sym_integer] = STATE(284), - [sym_signed_integer] = STATE(122), - [sym_unsigned_integer] = STATE(122), - [sym_number] = STATE(80), + [sym_source_file] = STATE(379), + [sym_base_ten] = STATE(353), + [sym_octal] = STATE(353), + [sym_hex] = STATE(353), + [sym_binary] = STATE(353), + [sym_integer] = STATE(354), + [sym_signed_integer] = STATE(143), + [sym_unsigned_integer] = STATE(143), + [sym_number] = STATE(82), [sym__float] = STATE(79), - [sym_scalar] = STATE(122), - [sym_vector2] = STATE(122), - [sym_vector3] = STATE(122), - [sym_vector4] = STATE(122), - [sym_boolean] = STATE(122), - [sym_function_call] = STATE(122), - [sym_method_call] = STATE(122), - [sym_expression] = STATE(206), - [sym_unary_expression] = STATE(122), - [sym_binary_expression] = STATE(122), - [sym_if] = STATE(122), - [sym_let_in] = STATE(122), - [sym_member_access] = STATE(122), - [sym_parenthesis] = STATE(122), - [sym_list] = STATE(122), - [sym_struct_definition] = STATE(112), - [sym_dictionary_construction] = STATE(122), - [sym_closure_definition] = STATE(122), - [sym_formula] = STATE(122), + [sym_scalar] = STATE(143), + [sym_vector2] = STATE(143), + [sym_vector3] = STATE(143), + [sym_vector4] = STATE(143), + [sym_boolean] = STATE(143), + [sym_function_call] = STATE(143), + [sym_method_call] = STATE(143), + [sym_expression] = STATE(237), + [sym_unary_expression] = STATE(143), + [sym_binary_expression] = STATE(143), + [sym_if] = STATE(143), + [sym_let_in] = STATE(143), + [sym_member_access] = STATE(143), + [sym_parenthesis] = STATE(143), + [sym_list] = STATE(143), + [sym_struct_definition] = STATE(132), + [sym_dictionary_construction] = STATE(143), + [sym_closure_definition] = STATE(143), + [sym_formula] = STATE(143), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2357,38 +2573,38 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(2)] = { - [sym_base_ten] = STATE(282), - [sym_octal] = STATE(282), - [sym_hex] = STATE(282), - [sym_binary] = STATE(282), - [sym_integer] = STATE(284), - [sym_signed_integer] = STATE(122), - [sym_unsigned_integer] = STATE(122), - [sym_number] = STATE(80), + [sym_base_ten] = STATE(353), + [sym_octal] = STATE(353), + [sym_hex] = STATE(353), + [sym_binary] = STATE(353), + [sym_integer] = STATE(354), + [sym_signed_integer] = STATE(143), + [sym_unsigned_integer] = STATE(143), + [sym_number] = STATE(82), [sym__float] = STATE(79), - [sym_scalar] = STATE(122), - [sym_vector2] = STATE(122), - [sym_vector3] = STATE(122), - [sym_vector4] = STATE(122), - [sym_boolean] = STATE(122), - [sym_function_call] = STATE(122), - [sym_method_call] = STATE(122), - [sym_expression] = STATE(189), - [sym_unary_expression] = STATE(122), - [sym_binary_expression] = STATE(122), - [sym_if] = STATE(122), - [sym_let_in] = STATE(122), - [sym_member_access] = STATE(122), - [sym_parenthesis] = STATE(122), - [sym_list] = STATE(122), - [sym_struct_member] = STATE(292), - [sym__struct_final_element] = STATE(302), - [sym_struct_definition] = STATE(112), - [sym_dictionary_member_assignment] = STATE(268), - [sym_dictionary_construction] = STATE(122), - [sym_closure_definition] = STATE(122), - [sym_formula] = STATE(122), - [aux_sym_struct_definition_repeat1] = STATE(256), + [sym_scalar] = STATE(143), + [sym_vector2] = STATE(143), + [sym_vector3] = STATE(143), + [sym_vector4] = STATE(143), + [sym_boolean] = STATE(143), + [sym_function_call] = STATE(143), + [sym_method_call] = STATE(143), + [sym_expression] = STATE(246), + [sym_unary_expression] = STATE(143), + [sym_binary_expression] = STATE(143), + [sym_if] = STATE(143), + [sym_let_in] = STATE(143), + [sym_member_access] = STATE(143), + [sym_parenthesis] = STATE(143), + [sym_list] = STATE(143), + [sym_struct_member] = STATE(350), + [sym__struct_final_element] = STATE(371), + [sym_struct_definition] = STATE(132), + [sym_dictionary_member_assignment] = STATE(338), + [sym_dictionary_construction] = STATE(143), + [sym_closure_definition] = STATE(143), + [sym_formula] = STATE(143), + [aux_sym_struct_definition_repeat1] = STATE(322), [sym_identifier] = ACTIONS(33), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2413,38 +2629,38 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(3)] = { - [sym_base_ten] = STATE(282), - [sym_octal] = STATE(282), - [sym_hex] = STATE(282), - [sym_binary] = STATE(282), - [sym_integer] = STATE(284), - [sym_signed_integer] = STATE(122), - [sym_unsigned_integer] = STATE(122), - [sym_number] = STATE(80), + [sym_base_ten] = STATE(353), + [sym_octal] = STATE(353), + [sym_hex] = STATE(353), + [sym_binary] = STATE(353), + [sym_integer] = STATE(354), + [sym_signed_integer] = STATE(143), + [sym_unsigned_integer] = STATE(143), + [sym_number] = STATE(82), [sym__float] = STATE(79), - [sym_scalar] = STATE(122), - [sym_vector2] = STATE(122), - [sym_vector3] = STATE(122), - [sym_vector4] = STATE(122), - [sym_boolean] = STATE(122), - [sym_function_call] = STATE(122), - [sym_method_call] = STATE(122), - [sym_expression] = STATE(210), - [sym_unary_expression] = STATE(122), - [sym_binary_expression] = STATE(122), - [sym_if] = STATE(122), - [sym_let_in] = STATE(122), - [sym_member_access] = STATE(122), - [sym_parenthesis] = STATE(122), - [sym_list] = STATE(122), - [sym_struct_member] = STATE(292), - [sym__struct_final_element] = STATE(301), - [sym_struct_definition] = STATE(112), - [sym_dictionary_member_assignment] = STATE(272), - [sym_dictionary_construction] = STATE(122), - [sym_closure_definition] = STATE(122), - [sym_formula] = STATE(122), - [aux_sym_struct_definition_repeat1] = STATE(257), + [sym_scalar] = STATE(143), + [sym_vector2] = STATE(143), + [sym_vector3] = STATE(143), + [sym_vector4] = STATE(143), + [sym_boolean] = STATE(143), + [sym_function_call] = STATE(143), + [sym_method_call] = STATE(143), + [sym_expression] = STATE(260), + [sym_unary_expression] = STATE(143), + [sym_binary_expression] = STATE(143), + [sym_if] = STATE(143), + [sym_let_in] = STATE(143), + [sym_member_access] = STATE(143), + [sym_parenthesis] = STATE(143), + [sym_list] = STATE(143), + [sym_struct_member] = STATE(350), + [sym__struct_final_element] = STATE(369), + [sym_struct_definition] = STATE(132), + [sym_dictionary_member_assignment] = STATE(337), + [sym_dictionary_construction] = STATE(143), + [sym_closure_definition] = STATE(143), + [sym_formula] = STATE(143), + [aux_sym_struct_definition_repeat1] = STATE(323), [sym_identifier] = ACTIONS(33), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2500,13 +2716,13 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_list_repeat1, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(160), 1, + STATE(206), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2521,12 +2737,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2575,13 +2791,13 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_list_repeat1, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(205), 1, + STATE(242), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2596,12 +2812,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2650,13 +2866,13 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_list_repeat1, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(165), 1, + STATE(199), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2671,12 +2887,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2721,17 +2937,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, ACTIONS(89), 1, anon_sym_RBRACK, - STATE(8), 1, + STATE(5), 1, aux_sym_list_repeat1, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(150), 1, + STATE(193), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2746,12 +2962,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2796,17 +3012,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, ACTIONS(91), 1, anon_sym_RBRACK, - STATE(5), 1, + STATE(7), 1, aux_sym_list_repeat1, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(152), 1, + STATE(192), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2821,12 +3037,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2869,15 +3085,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(178), 1, + STATE(216), 1, sym_expression, - STATE(217), 1, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2892,12 +3108,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2920,6 +3136,8 @@ static const uint16_t ts_small_parse_table[] = { [588] = 22, ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + aux_sym_base_ten_token1, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -2928,27 +3146,25 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, ACTIONS(17), 1, anon_sym_LT_LPAREN, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_let, ACTIONS(27), 1, anon_sym_LPAREN, ACTIONS(29), 1, anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(93), 1, - aux_sym_base_ten_token1, - ACTIONS(97), 1, - anon_sym_if, - ACTIONS(99), 1, - anon_sym_let, - STATE(129), 1, + STATE(79), 1, sym__float, - STATE(133), 1, + STATE(82), 1, sym_number, - STATE(169), 1, - sym_expression, - STATE(217), 1, + STATE(132), 1, sym_struct_definition, - STATE(284), 1, + STATE(152), 1, + sym_expression, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2959,16 +3175,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(95), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3013,13 +3229,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(95), 1, + STATE(94), 1, sym_expression, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3034,12 +3250,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3084,13 +3300,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(90), 1, - sym_expression, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(284), 1, + STATE(161), 1, + sym_expression, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3105,12 +3321,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3155,13 +3371,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(97), 1, - sym_expression, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(284), 1, + STATE(133), 1, + sym_expression, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3176,12 +3392,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3226,13 +3442,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(98), 1, - sym_expression, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(284), 1, + STATE(134), 1, + sym_expression, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3247,12 +3463,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3297,13 +3513,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(99), 1, - sym_expression, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(284), 1, + STATE(135), 1, + sym_expression, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3318,12 +3534,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3368,13 +3584,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(100), 1, - sym_expression, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(284), 1, + STATE(136), 1, + sym_expression, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3389,12 +3605,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3439,13 +3655,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(101), 1, - sym_expression, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(284), 1, + STATE(137), 1, + sym_expression, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3460,12 +3676,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3510,13 +3726,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(102), 1, - sym_expression, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(284), 1, + STATE(138), 1, + sym_expression, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3531,12 +3747,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3581,13 +3797,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(103), 1, - sym_expression, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(284), 1, + STATE(139), 1, + sym_expression, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3602,12 +3818,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3652,84 +3868,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(104), 1, - sym_expression, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(284), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(5), 2, - sym_identifier, - sym_self, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(21), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(282), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(122), 19, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_vector2, - sym_vector3, - sym_vector4, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_let_in, - sym_member_access, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [1611] = 22, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(17), 1, - anon_sym_LT_LPAREN, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_let, - ACTIONS(27), 1, - anon_sym_LPAREN, - ACTIONS(29), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - anon_sym_LT_LT_LT, - STATE(79), 1, - sym__float, - STATE(80), 1, - sym_number, - STATE(105), 1, + STATE(140), 1, sym_expression, - STATE(112), 1, - sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3744,12 +3889,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3769,7 +3914,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1704] = 22, + [1611] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -3794,13 +3939,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(192), 1, + STATE(208), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3815,12 +3960,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3840,7 +3985,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1797] = 22, + [1704] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -3863,15 +4008,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(145), 1, + STATE(200), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3886,12 +4031,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3911,7 +4056,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1890] = 22, + [1797] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -3936,13 +4081,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(200), 1, + STATE(209), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3957,12 +4102,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3982,7 +4127,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [1983] = 22, + [1890] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4007,13 +4152,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(201), 1, + STATE(212), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4028,12 +4173,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4053,7 +4198,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2076] = 22, + [1983] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4078,13 +4223,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(107), 1, - sym_expression, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(284), 1, + STATE(142), 1, + sym_expression, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4099,12 +4244,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4124,7 +4269,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2169] = 22, + [2076] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4149,13 +4294,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(147), 1, + STATE(203), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4170,12 +4315,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4195,7 +4340,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2262] = 22, + [2169] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4220,13 +4365,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(131), 1, + STATE(168), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4241,12 +4386,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4266,7 +4411,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2355] = 22, + [2262] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4291,13 +4436,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(168), 1, + STATE(238), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4312,12 +4457,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4337,7 +4482,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2448] = 22, + [2355] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4362,13 +4507,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(139), 1, + STATE(204), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4383,12 +4528,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4408,7 +4553,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2541] = 22, + [2448] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4433,13 +4578,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(91), 1, - sym_expression, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(284), 1, + STATE(154), 1, + sym_expression, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4454,12 +4599,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4479,7 +4624,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2634] = 22, + [2541] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -4502,15 +4647,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(151), 1, + STATE(196), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4525,12 +4670,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4550,7 +4695,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2727] = 22, + [2634] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4575,13 +4720,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(118), 1, + STATE(157), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4596,12 +4741,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4621,58 +4766,58 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2820] = 22, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - aux_sym_base_ten_token1, + [2727] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, aux_sym_hex_token1, ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(17), 1, + ACTIONS(103), 1, + sym_string, + ACTIONS(105), 1, + aux_sym_base_ten_token1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(23), 1, + ACTIONS(113), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(115), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(165), 1, sym__float, - STATE(80), 1, + STATE(169), 1, sym_number, - STATE(92), 1, - sym_expression, - STATE(112), 1, + STATE(202), 1, sym_struct_definition, - STATE(284), 1, + STATE(239), 1, + sym_expression, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(5), 2, + ACTIONS(101), 2, sym_identifier, sym_self, - ACTIONS(19), 2, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4692,58 +4837,58 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [2913] = 22, + [2820] = 22, + ACTIONS(7), 1, + sym_string, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, aux_sym_hex_token1, ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(103), 1, - sym_string, - ACTIONS(105), 1, - aux_sym_base_ten_token1, - ACTIONS(107), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(113), 1, - anon_sym_if, - ACTIONS(115), 1, - anon_sym_let, - ACTIONS(117), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(119), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(121), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + ACTIONS(93), 1, + aux_sym_base_ten_token1, + ACTIONS(97), 1, + anon_sym_if, + ACTIONS(99), 1, + anon_sym_let, + STATE(172), 1, sym__float, - STATE(130), 1, + STATE(205), 1, sym_number, - STATE(163), 1, - sym_struct_definition, - STATE(207), 1, + STATE(245), 1, sym_expression, - STATE(286), 1, + STATE(255), 1, + sym_struct_definition, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(101), 2, + ACTIONS(5), 2, sym_identifier, sym_self, - ACTIONS(109), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(111), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4763,7 +4908,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3006] = 22, + [2913] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -4786,15 +4931,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(209), 1, + STATE(253), 1, sym_expression, - STATE(217), 1, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4809,12 +4954,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4834,7 +4979,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3099] = 22, + [3006] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -4857,15 +5002,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(171), 1, + STATE(211), 1, sym_expression, - STATE(217), 1, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4880,12 +5025,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4905,7 +5050,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3192] = 22, + [3099] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -4928,15 +5073,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(94), 1, + sym_expression, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(176), 1, - sym_expression, - STATE(217), 1, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4951,12 +5096,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4976,7 +5121,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3285] = 22, + [3192] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -4999,15 +5144,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(90), 1, - sym_expression, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(217), 1, + STATE(213), 1, + sym_expression, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5022,12 +5167,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5047,7 +5192,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3378] = 22, + [3285] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5070,15 +5215,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(177), 1, + STATE(214), 1, sym_expression, - STATE(217), 1, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5093,12 +5238,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5118,7 +5263,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3471] = 22, + [3378] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5141,15 +5286,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(191), 1, + STATE(215), 1, sym_expression, - STATE(217), 1, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5164,12 +5309,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5189,9 +5334,11 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3564] = 22, + [3471] = 22, ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + aux_sym_base_ten_token1, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -5200,27 +5347,25 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, ACTIONS(17), 1, anon_sym_LT_LPAREN, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_let, ACTIONS(27), 1, anon_sym_LPAREN, ACTIONS(29), 1, anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(93), 1, - aux_sym_base_ten_token1, - ACTIONS(97), 1, - anon_sym_if, - ACTIONS(99), 1, - anon_sym_let, - STATE(129), 1, + STATE(79), 1, sym__float, - STATE(133), 1, + STATE(82), 1, sym_number, - STATE(179), 1, - sym_expression, - STATE(217), 1, + STATE(132), 1, sym_struct_definition, - STATE(284), 1, + STATE(155), 1, + sym_expression, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5231,16 +5376,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(95), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5260,7 +5405,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3657] = 22, + [3564] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5283,15 +5428,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(180), 1, - sym_expression, STATE(217), 1, + sym_expression, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5306,12 +5451,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5331,7 +5476,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3750] = 22, + [3657] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5354,15 +5499,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(182), 1, + STATE(218), 1, sym_expression, - STATE(217), 1, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5377,12 +5522,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5402,7 +5547,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3843] = 22, + [3750] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5425,15 +5570,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(183), 1, + STATE(219), 1, sym_expression, - STATE(217), 1, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5448,12 +5593,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5473,7 +5618,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [3936] = 22, + [3843] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5496,15 +5641,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(184), 1, + STATE(220), 1, sym_expression, - STATE(217), 1, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5519,12 +5664,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5544,7 +5689,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4029] = 22, + [3936] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5567,15 +5712,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(185), 1, + STATE(221), 1, sym_expression, - STATE(217), 1, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5590,12 +5735,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5615,7 +5760,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4122] = 22, + [4029] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5638,15 +5783,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(187), 1, + STATE(230), 1, sym_expression, - STATE(217), 1, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5661,12 +5806,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5686,7 +5831,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4215] = 22, + [4122] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5709,15 +5854,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(196), 1, + STATE(231), 1, sym_expression, - STATE(217), 1, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5732,12 +5877,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5757,58 +5902,58 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4308] = 22, - ACTIONS(7), 1, - sym_string, + [4215] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, aux_sym_hex_token1, ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(17), 1, + ACTIONS(103), 1, + sym_string, + ACTIONS(105), 1, + aux_sym_base_ten_token1, + ACTIONS(107), 1, anon_sym_LT_LPAREN, - ACTIONS(27), 1, + ACTIONS(113), 1, + anon_sym_if, + ACTIONS(115), 1, + anon_sym_let, + ACTIONS(117), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(119), 1, anon_sym_LBRACK, - ACTIONS(31), 1, + ACTIONS(121), 1, anon_sym_LT_LT_LT, - ACTIONS(93), 1, - aux_sym_base_ten_token1, - ACTIONS(97), 1, - anon_sym_if, - ACTIONS(99), 1, - anon_sym_let, - STATE(129), 1, + STATE(165), 1, sym__float, - STATE(133), 1, + STATE(169), 1, sym_number, - STATE(197), 1, + STATE(198), 1, sym_expression, - STATE(217), 1, + STATE(202), 1, sym_struct_definition, - STATE(284), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(5), 2, + ACTIONS(101), 2, sym_identifier, sym_self, - ACTIONS(19), 2, + ACTIONS(109), 2, sym_true, sym_false, - ACTIONS(95), 3, + ACTIONS(111), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5828,7 +5973,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4401] = 22, + [4308] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -5851,15 +5996,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(163), 1, - sym_struct_definition, - STATE(164), 1, + STATE(201), 1, sym_expression, - STATE(286), 1, + STATE(202), 1, + sym_struct_definition, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5874,12 +6019,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5899,7 +6044,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4494] = 22, + [4401] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -5922,15 +6067,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(163), 1, - sym_struct_definition, - STATE(166), 1, + STATE(195), 1, sym_expression, - STATE(286), 1, + STATE(202), 1, + sym_struct_definition, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5945,12 +6090,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5970,7 +6115,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4587] = 22, + [4494] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -5993,15 +6138,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(156), 1, + STATE(191), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6016,12 +6161,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6041,7 +6186,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4680] = 22, + [4587] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -6064,15 +6209,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(148), 1, + STATE(189), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6087,12 +6232,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6112,7 +6257,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4773] = 22, + [4680] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -6135,15 +6280,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(157), 1, + STATE(174), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6158,12 +6303,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6183,7 +6328,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4866] = 22, + [4773] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -6206,15 +6351,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(158), 1, + STATE(175), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6229,12 +6374,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6254,7 +6399,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [4959] = 22, + [4866] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -6277,15 +6422,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(159), 1, + STATE(176), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6300,12 +6445,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6325,7 +6470,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5052] = 22, + [4959] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -6348,15 +6493,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(161), 1, + STATE(177), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6371,12 +6516,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6396,7 +6541,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5145] = 22, + [5052] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -6419,15 +6564,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(162), 1, + STATE(178), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6442,12 +6587,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6467,7 +6612,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5238] = 22, + [5145] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -6490,15 +6635,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(134), 1, + STATE(179), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6513,12 +6658,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6538,7 +6683,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5331] = 22, + [5238] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -6561,15 +6706,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(135), 1, + STATE(180), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6584,12 +6729,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6609,7 +6754,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5424] = 22, + [5331] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -6632,15 +6777,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(136), 1, + STATE(181), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6655,12 +6800,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6680,7 +6825,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5517] = 22, + [5424] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -6703,15 +6848,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(137), 1, + STATE(182), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6726,12 +6871,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6751,7 +6896,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5610] = 22, + [5517] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -6774,15 +6919,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(138), 1, + STATE(185), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6797,12 +6942,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6822,7 +6967,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5703] = 22, + [5610] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -6845,15 +6990,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(141), 1, + STATE(186), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6868,12 +7013,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6893,58 +7038,58 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5796] = 22, + [5703] = 22, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + aux_sym_base_ten_token1, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, aux_sym_hex_token1, ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(103), 1, - sym_string, - ACTIONS(105), 1, - aux_sym_base_ten_token1, - ACTIONS(107), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(113), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(115), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(117), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(119), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(121), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(79), 1, sym__float, - STATE(130), 1, + STATE(82), 1, sym_number, - STATE(142), 1, - sym_expression, - STATE(163), 1, + STATE(132), 1, sym_struct_definition, - STATE(286), 1, + STATE(156), 1, + sym_expression, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(101), 2, + ACTIONS(5), 2, sym_identifier, sym_self, - ACTIONS(109), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(111), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6964,11 +7109,9 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5889] = 22, + [5796] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - aux_sym_base_ten_token1, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -6977,25 +7120,27 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_let, ACTIONS(27), 1, anon_sym_LPAREN, ACTIONS(29), 1, anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + ACTIONS(93), 1, + aux_sym_base_ten_token1, + ACTIONS(97), 1, + anon_sym_if, + ACTIONS(99), 1, + anon_sym_let, + STATE(172), 1, sym__float, - STATE(80), 1, + STATE(205), 1, sym_number, - STATE(93), 1, + STATE(244), 1, sym_expression, - STATE(112), 1, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7006,16 +7151,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7035,7 +7180,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [5982] = 22, + [5889] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -7060,13 +7205,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(212), 1, + STATE(247), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7081,12 +7226,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7106,7 +7251,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6075] = 22, + [5982] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -7129,15 +7274,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(153), 1, + STATE(194), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7152,12 +7297,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7177,7 +7322,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6168] = 22, + [6075] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -7202,13 +7347,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(213), 1, + STATE(248), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7223,12 +7368,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7248,7 +7393,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6261] = 22, + [6168] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -7271,15 +7416,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(154), 1, + STATE(173), 1, sym_expression, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7294,12 +7439,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7319,7 +7464,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6354] = 22, + [6261] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -7342,15 +7487,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(126), 1, + STATE(165), 1, sym__float, - STATE(130), 1, + STATE(169), 1, sym_number, - STATE(163), 1, + STATE(202), 1, sym_struct_definition, - STATE(167), 1, + STATE(249), 1, sym_expression, - STATE(286), 1, + STATE(355), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7365,12 +7510,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(208), 19, + STATE(241), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7390,7 +7535,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6447] = 22, + [6354] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -7415,13 +7560,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(214), 1, + STATE(250), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7436,12 +7581,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7461,7 +7606,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6540] = 22, + [6447] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -7486,13 +7631,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(215), 1, + STATE(251), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7507,12 +7652,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7532,7 +7677,7 @@ static const uint16_t ts_small_parse_table[] = { sym_dictionary_construction, sym_closure_definition, sym_formula, - [6633] = 22, + [6540] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -7557,13 +7702,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, STATE(79), 1, sym__float, - STATE(80), 1, + STATE(82), 1, sym_number, - STATE(112), 1, + STATE(132), 1, sym_struct_definition, - STATE(218), 1, + STATE(256), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7578,12 +7723,83 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(143), 19, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_member_access, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_formula, + [6633] = 22, + ACTIONS(7), 1, + sym_string, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(17), 1, + anon_sym_LT_LPAREN, + ACTIONS(27), 1, + anon_sym_LPAREN, + ACTIONS(29), 1, + anon_sym_LBRACK, + ACTIONS(31), 1, + anon_sym_LT_LT_LT, + ACTIONS(93), 1, + aux_sym_base_ten_token1, + ACTIONS(97), 1, + anon_sym_if, + ACTIONS(99), 1, + anon_sym_let, + STATE(172), 1, + sym__float, + STATE(205), 1, + sym_number, + STATE(255), 1, + sym_struct_definition, + STATE(257), 1, + sym_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(5), 2, + sym_identifier, + sym_self, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(95), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7626,15 +7842,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(217), 1, + STATE(255), 1, sym_struct_definition, - STATE(219), 1, + STATE(258), 1, sym_expression, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7649,12 +7865,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7697,15 +7913,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(129), 1, + STATE(172), 1, sym__float, - STATE(133), 1, + STATE(205), 1, sym_number, - STATE(181), 1, + STATE(223), 1, sym_expression, - STATE(217), 1, + STATE(255), 1, sym_struct_definition, - STATE(284), 1, + STATE(354), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7720,12 +7936,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(282), 4, + STATE(353), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(122), 19, + STATE(143), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7792,7 +8008,7 @@ static const uint16_t ts_small_parse_table[] = { sym_identifier, ACTIONS(133), 1, sym_unit_quote, - STATE(89), 1, + STATE(106), 1, sym__unit, ACTIONS(3), 2, sym_comment, @@ -7830,13 +8046,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7007] = 4, - ACTIONS(141), 1, - anon_sym_DOT, + [7007] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(139), 11, + ACTIONS(125), 11, sym_identifier, anon_sym_STAR, anon_sym_GT_GT, @@ -7848,9 +8062,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(137), 21, + ACTIONS(123), 22, ts_builtin_sym_end, sym_unit_quote, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -7870,11 +8085,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7051] = 3, + [7049] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(125), 11, + ACTIONS(139), 11, sym_identifier, anon_sym_STAR, anon_sym_GT_GT, @@ -7886,7 +8101,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(123), 22, + ACTIONS(137), 22, ts_builtin_sym_end, sym_unit_quote, anon_sym_DOT, @@ -7909,11 +8124,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7093] = 3, + [7091] = 4, + ACTIONS(145), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(145), 11, + ACTIONS(143), 11, sym_identifier, anon_sym_STAR, anon_sym_GT_GT, @@ -7925,10 +8142,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(143), 22, + ACTIONS(141), 21, ts_builtin_sym_end, sym_unit_quote, - anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -7948,127 +8164,2827 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7135] = 4, - ACTIONS(151), 1, - anon_sym_DASH_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(149), 9, - anon_sym_DASH, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(147), 22, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, + [7135] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [7178] = 3, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(292), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(155), 9, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, anon_sym_DASH, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(153), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [7202] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(278), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(159), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [7269] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(281), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(159), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [7336] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(321), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [7403] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(285), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(159), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [7470] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(286), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(159), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [7537] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(284), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(159), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [7604] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(282), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(159), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [7671] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(271), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(159), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [7738] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(313), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [7805] = 4, + ACTIONS(165), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(163), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(161), 22, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [7848] = 7, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, + anon_sym_LPAREN, + STATE(163), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(173), 8, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(167), 20, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [7897] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(179), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(177), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [7938] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + ACTIONS(181), 1, + sym_identifier, + ACTIONS(183), 1, + anon_sym_LT_LPAREN, + ACTIONS(187), 1, + anon_sym_LPAREN, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(308), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(185), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(301), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [8005] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(318), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [8072] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + ACTIONS(181), 1, + sym_identifier, + ACTIONS(183), 1, + anon_sym_LT_LPAREN, + ACTIONS(187), 1, + anon_sym_LPAREN, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(310), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(185), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(301), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [8139] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + ACTIONS(181), 1, + sym_identifier, + ACTIONS(183), 1, + anon_sym_LT_LPAREN, + ACTIONS(187), 1, + anon_sym_LPAREN, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(319), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(185), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(301), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [8206] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(290), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [8273] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(315), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [8340] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(283), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(159), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [8407] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(314), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [8474] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(191), 9, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(189), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [8515] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(195), 9, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(193), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [8556] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(199), 9, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(197), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [8597] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(293), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [8664] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(287), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [8731] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(288), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [8798] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(289), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [8865] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(291), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [8932] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(271), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [8999] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(203), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(201), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [9040] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(279), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(159), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [9107] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + ACTIONS(181), 1, + sym_identifier, + ACTIONS(183), 1, + anon_sym_LT_LPAREN, + ACTIONS(187), 1, + anon_sym_LPAREN, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(309), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(185), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(301), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [9174] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(207), 9, + anon_sym_STAR, + anon_sym_GT_GT, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(205), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_GT_GT_GT, + [9215] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + ACTIONS(181), 1, + sym_identifier, + ACTIONS(183), 1, + anon_sym_LT_LPAREN, + ACTIONS(187), 1, + anon_sym_LPAREN, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(306), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(185), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(301), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [9282] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + ACTIONS(181), 1, + sym_identifier, + ACTIONS(183), 1, + anon_sym_LT_LPAREN, + ACTIONS(187), 1, + anon_sym_LPAREN, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(307), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(185), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(301), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [9349] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + ACTIONS(181), 1, + sym_identifier, + ACTIONS(183), 1, + anon_sym_LT_LPAREN, + ACTIONS(187), 1, + anon_sym_LPAREN, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(304), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(185), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(301), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [9416] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + ACTIONS(181), 1, + sym_identifier, + ACTIONS(183), 1, + anon_sym_LT_LPAREN, + ACTIONS(187), 1, + anon_sym_LPAREN, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(297), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(185), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(301), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [9483] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + ACTIONS(181), 1, + sym_identifier, + ACTIONS(183), 1, + anon_sym_LT_LPAREN, + ACTIONS(187), 1, + anon_sym_LPAREN, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(298), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(185), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(301), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [9550] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + ACTIONS(181), 1, + sym_identifier, + ACTIONS(183), 1, + anon_sym_LT_LPAREN, + ACTIONS(187), 1, + anon_sym_LPAREN, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(299), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(185), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(301), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [9617] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + ACTIONS(181), 1, + sym_identifier, + ACTIONS(183), 1, + anon_sym_LT_LPAREN, + ACTIONS(187), 1, + anon_sym_LPAREN, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(311), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(185), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(301), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [9684] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(316), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [9751] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(312), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [9818] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + ACTIONS(181), 1, + sym_identifier, + ACTIONS(183), 1, + anon_sym_LT_LPAREN, + ACTIONS(187), 1, + anon_sym_LPAREN, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(302), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(185), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(301), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [9885] = 16, + ACTIONS(9), 1, + aux_sym_base_ten_token1, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + STATE(79), 1, + sym__float, + STATE(82), 1, + sym_number, + STATE(317), 1, + sym_formula_expression, + STATE(354), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(19), 2, + sym_true, + sym_false, + ACTIONS(151), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [9952] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + ACTIONS(181), 1, + sym_identifier, + ACTIONS(183), 1, + anon_sym_LT_LPAREN, + ACTIONS(187), 1, + anon_sym_LPAREN, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(303), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(185), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(301), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [10019] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + ACTIONS(181), 1, + sym_identifier, + ACTIONS(183), 1, + anon_sym_LT_LPAREN, + ACTIONS(187), 1, + anon_sym_LPAREN, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(320), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(185), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(301), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [10086] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(211), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(209), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [10127] = 16, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(147), 1, + sym_identifier, + ACTIONS(149), 1, + anon_sym_LT_LPAREN, + ACTIONS(153), 1, + anon_sym_LPAREN, + ACTIONS(155), 1, + aux_sym_base_ten_token1, + STATE(262), 1, + sym__float, + STATE(263), 1, + sym_number, + STATE(280), 1, + sym_formula_expression, + STATE(359), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(157), 2, + sym_true, + sym_false, + ACTIONS(159), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(353), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(269), 12, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_boolean, + sym_formula_parenthesis, + sym_formula_unary_expression, + sym_formula_binary_expression, + sym_formula_method_call, + sym_formula_function_call, + sym_formula_vector2, + sym_formula_vector3, + sym_formula_vector4, + [10194] = 4, + ACTIONS(217), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(215), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(213), 21, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10236] = 11, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, + anon_sym_STAR_STAR, + ACTIONS(223), 1, + anon_sym_STAR, + ACTIONS(225), 1, + anon_sym_SLASH, + STATE(163), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(219), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(173), 7, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(167), 15, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10292] = 12, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, + anon_sym_STAR_STAR, + ACTIONS(223), 1, + anon_sym_STAR, + ACTIONS(225), 1, + anon_sym_SLASH, + STATE(163), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(219), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(227), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(173), 7, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(167), 13, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10350] = 14, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, + anon_sym_STAR_STAR, + ACTIONS(223), 1, + anon_sym_STAR, + ACTIONS(225), 1, + anon_sym_SLASH, + ACTIONS(229), 1, + anon_sym_AMP, + ACTIONS(231), 1, + anon_sym_CARET, + STATE(163), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(219), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(227), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(173), 5, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(167), 13, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10412] = 13, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, + anon_sym_STAR_STAR, + ACTIONS(223), 1, + anon_sym_STAR, + ACTIONS(225), 1, + anon_sym_SLASH, + ACTIONS(229), 1, + anon_sym_AMP, + STATE(163), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(219), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(227), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(173), 6, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(167), 13, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10472] = 15, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, + anon_sym_STAR_STAR, + ACTIONS(223), 1, + anon_sym_STAR, + ACTIONS(225), 1, + anon_sym_SLASH, + ACTIONS(229), 1, + anon_sym_AMP, + ACTIONS(231), 1, + anon_sym_CARET, + ACTIONS(233), 1, + anon_sym_PIPE, + STATE(163), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(219), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(227), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(173), 4, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(167), 13, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10536] = 17, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, + anon_sym_STAR_STAR, + ACTIONS(223), 1, + anon_sym_STAR, + ACTIONS(225), 1, + anon_sym_SLASH, + ACTIONS(229), 1, + anon_sym_AMP, + ACTIONS(231), 1, + anon_sym_CARET, + ACTIONS(233), 1, + anon_sym_PIPE, + STATE(163), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(173), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(219), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(227), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(235), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(237), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(167), 9, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_DASH_GT, - [7219] = 3, + [10604] = 18, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, + anon_sym_STAR_STAR, + ACTIONS(223), 1, + anon_sym_STAR, + ACTIONS(225), 1, + anon_sym_SLASH, + ACTIONS(229), 1, + anon_sym_AMP, + ACTIONS(231), 1, + anon_sym_CARET, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, + anon_sym_AMP_AMP, + STATE(163), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(159), 9, + ACTIONS(173), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(219), 2, anon_sym_DASH, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, + anon_sym_PLUS, + ACTIONS(227), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(157), 23, + ACTIONS(237), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(167), 8, ts_builtin_sym_end, - anon_sym_DOT, anon_sym_COMMA, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10674] = 19, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, anon_sym_COLON_COLON, - anon_sym_PLUS, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, anon_sym_STAR_STAR, + ACTIONS(223), 1, + anon_sym_STAR, + ACTIONS(225), 1, anon_sym_SLASH, + ACTIONS(229), 1, + anon_sym_AMP, + ACTIONS(231), 1, + anon_sym_CARET, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, + anon_sym_AMP_AMP, + ACTIONS(241), 1, + anon_sym_PIPE_PIPE, + STATE(163), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(173), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(219), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(235), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, + ACTIONS(167), 7, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_DASH_GT, - [7260] = 3, + [10746] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(163), 9, - anon_sym_DASH, + ACTIONS(163), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8082,6 +10998,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -8100,14 +11017,66 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_DASH_GT, - [7301] = 3, + [10786] = 20, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, + anon_sym_STAR_STAR, + ACTIONS(223), 1, + anon_sym_STAR, + ACTIONS(225), 1, + anon_sym_SLASH, + ACTIONS(229), 1, + anon_sym_AMP, + ACTIONS(231), 1, + anon_sym_CARET, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, + anon_sym_AMP_AMP, + ACTIONS(241), 1, + anon_sym_PIPE_PIPE, + ACTIONS(245), 1, + anon_sym_CARET_CARET, + STATE(163), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 9, - anon_sym_STAR, + ACTIONS(219), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(227), 2, + anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(235), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(247), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(237), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(243), 6, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [10860] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(215), 8, + anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -8115,7 +11084,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(165), 23, + ACTIONS(213), 23, ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, @@ -8125,6 +11094,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8138,14 +11108,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7342] = 3, + [10900] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(171), 9, + ACTIONS(251), 8, anon_sym_STAR, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -8153,7 +11121,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(169), 23, + ACTIONS(249), 23, ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, @@ -8163,6 +11131,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8176,14 +11145,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7383] = 3, + [10940] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(175), 9, + ACTIONS(255), 8, anon_sym_STAR, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -8191,7 +11158,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(173), 23, + ACTIONS(253), 23, ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, @@ -8201,6 +11168,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8214,20 +11182,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7424] = 7, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - STATE(123), 1, - sym_dictionary_construction, + [10980] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(183), 8, + ACTIONS(259), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8236,9 +11195,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(177), 20, + ACTIONS(257), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8255,175 +11216,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7473] = 20, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, - anon_sym_STAR_STAR, - ACTIONS(193), 1, - anon_sym_STAR, - ACTIONS(195), 1, - anon_sym_SLASH, - ACTIONS(199), 1, - anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, - anon_sym_CARET, - ACTIONS(209), 1, - anon_sym_AMP_AMP, - ACTIONS(211), 1, - anon_sym_PIPE_PIPE, - ACTIONS(213), 1, - anon_sym_CARET_CARET, - STATE(123), 1, - sym_dictionary_construction, + [11020] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(197), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(205), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(215), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(207), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(187), 6, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [7547] = 20, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, - anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(263), 8, anon_sym_STAR, - ACTIONS(195), 1, - anon_sym_SLASH, - ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(209), 1, - anon_sym_AMP_AMP, - ACTIONS(211), 1, - anon_sym_PIPE_PIPE, - ACTIONS(213), 1, - anon_sym_CARET_CARET, - STATE(123), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(189), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(197), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(205), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(219), 2, anon_sym_EQ, anon_sym_COLON, - ACTIONS(207), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(217), 6, + ACTIONS(261), 23, ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [7621] = 20, - ACTIONS(179), 1, anon_sym_DOT, - ACTIONS(181), 1, + anon_sym_COMMA, anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, - anon_sym_STAR_STAR, - ACTIONS(193), 1, - anon_sym_STAR, - ACTIONS(195), 1, - anon_sym_SLASH, - ACTIONS(199), 1, - anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, - anon_sym_CARET, - ACTIONS(209), 1, - anon_sym_AMP_AMP, - ACTIONS(211), 1, - anon_sym_PIPE_PIPE, - ACTIONS(213), 1, - anon_sym_CARET_CARET, - STATE(123), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(189), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(223), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(221), 6, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7695] = 3, + [11060] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(227), 8, + ACTIONS(267), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8432,7 +11269,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(225), 23, + ACTIONS(265), 23, ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, @@ -8456,25 +11293,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7735] = 10, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, - anon_sym_STAR_STAR, - ACTIONS(193), 1, - anon_sym_STAR, - ACTIONS(195), 1, - anon_sym_SLASH, - STATE(123), 1, - sym_dictionary_construction, + [11100] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(183), 7, + ACTIONS(271), 8, + anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -8482,11 +11306,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(177), 17, + ACTIONS(269), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -8496,15 +11324,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7789] = 3, + [11140] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(231), 8, + ACTIONS(275), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8513,7 +11343,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(229), 23, + ACTIONS(273), 23, ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, @@ -8537,21 +11367,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7829] = 8, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, - anon_sym_STAR_STAR, - STATE(123), 1, - sym_dictionary_construction, + [11180] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(183), 8, + ACTIONS(279), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8560,11 +11380,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(177), 18, + ACTIONS(277), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -8575,32 +11398,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7879] = 11, - ACTIONS(179), 1, + [11220] = 10, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(225), 1, anon_sym_SLASH, - STATE(123), 1, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(183), 7, + ACTIONS(173), 7, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -8608,9 +11430,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(177), 15, + ACTIONS(167), 17, ts_builtin_sym_end, anon_sym_COMMA, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -8624,31 +11448,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [7935] = 12, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, - anon_sym_STAR_STAR, - ACTIONS(193), 1, - anon_sym_STAR, - ACTIONS(195), 1, - anon_sym_SLASH, - STATE(123), 1, - sym_dictionary_construction, + [11274] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(197), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(183), 7, + ACTIONS(283), 8, + anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -8656,9 +11461,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(177), 13, + ACTIONS(281), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8666,315 +11479,307 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7993] = 14, - ACTIONS(179), 1, + [11314] = 20, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(199), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(203), 1, + ACTIONS(231), 1, anon_sym_CARET, - STATE(123), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, + anon_sym_AMP_AMP, + ACTIONS(241), 1, + anon_sym_PIPE_PIPE, + ACTIONS(245), 1, + anon_sym_CARET_CARET, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(183), 5, - anon_sym_PIPE, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, + ACTIONS(287), 2, anon_sym_EQ, anon_sym_COLON, - ACTIONS(177), 13, - ts_builtin_sym_end, - anon_sym_COMMA, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, + ACTIONS(285), 6, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8055] = 13, - ACTIONS(179), 1, + [11388] = 20, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(199), 1, + ACTIONS(229), 1, anon_sym_AMP, - STATE(123), 1, + ACTIONS(231), 1, + anon_sym_CARET, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, + anon_sym_AMP_AMP, + ACTIONS(241), 1, + anon_sym_PIPE_PIPE, + ACTIONS(245), 1, + anon_sym_CARET_CARET, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(183), 6, - anon_sym_PIPE, - anon_sym_CARET, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, + ACTIONS(291), 2, anon_sym_EQ, anon_sym_COLON, - ACTIONS(177), 13, - ts_builtin_sym_end, - anon_sym_COMMA, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, + ACTIONS(289), 6, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8115] = 15, - ACTIONS(179), 1, + [11462] = 20, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(199), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, + ACTIONS(231), 1, anon_sym_CARET, - STATE(123), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, + anon_sym_AMP_AMP, + ACTIONS(241), 1, + anon_sym_PIPE_PIPE, + ACTIONS(245), 1, + anon_sym_CARET_CARET, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(183), 4, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, + ACTIONS(295), 2, anon_sym_EQ, anon_sym_COLON, - ACTIONS(177), 13, - ts_builtin_sym_end, - anon_sym_COMMA, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, + ACTIONS(293), 6, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8179] = 17, - ACTIONS(179), 1, + [11536] = 20, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(199), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, + ACTIONS(231), 1, anon_sym_CARET, - STATE(123), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, + anon_sym_AMP_AMP, + ACTIONS(241), 1, + anon_sym_PIPE_PIPE, + ACTIONS(245), 1, + anon_sym_CARET_CARET, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(183), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(189), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(299), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(177), 9, + ACTIONS(297), 6, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, anon_sym_else, anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [8247] = 18, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, - anon_sym_STAR_STAR, - ACTIONS(193), 1, + [11610] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(303), 8, anon_sym_STAR, - ACTIONS(195), 1, - anon_sym_SLASH, - ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(209), 1, - anon_sym_AMP_AMP, - STATE(123), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(183), 2, + anon_sym_GT, + anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(189), 2, + ACTIONS(301), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(177), 8, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8317] = 19, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, - anon_sym_STAR_STAR, - ACTIONS(193), 1, + [11650] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(307), 8, anon_sym_STAR, - ACTIONS(195), 1, - anon_sym_SLASH, - ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(209), 1, - anon_sym_AMP_AMP, - ACTIONS(211), 1, - anon_sym_PIPE_PIPE, - STATE(123), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(183), 2, + anon_sym_GT, + anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(189), 2, + ACTIONS(305), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(177), 7, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8389] = 3, + [11690] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(149), 8, + ACTIONS(311), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8983,7 +11788,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(147), 23, + ACTIONS(309), 23, ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, @@ -9007,77 +11812,142 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8429] = 20, - ACTIONS(179), 1, + [11730] = 8, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + STATE(163), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(173), 8, anon_sym_STAR, - ACTIONS(195), 1, - anon_sym_SLASH, - ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(209), 1, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(167), 18, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, anon_sym_CARET_CARET, - STATE(123), 1, - sym_dictionary_construction, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11780] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(315), 8, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(313), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [11820] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(319), 8, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(235), 2, anon_sym_EQ, anon_sym_COLON, - ACTIONS(207), 4, + ACTIONS(317), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(233), 6, - ts_builtin_sym_end, - anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [8503] = 3, + [11860] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(239), 8, + ACTIONS(127), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(125), 7, + sym_identifier, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(237), 23, - ts_builtin_sym_end, + ACTIONS(123), 19, + sym_unit_quote, anon_sym_DOT, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9092,29 +11962,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [8543] = 3, + [11899] = 5, + STATE(236), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(243), 8, + ACTIONS(321), 2, + sym_identifier, + sym_unit_quote, + ACTIONS(135), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(241), 23, - ts_builtin_sym_end, + ACTIONS(129), 18, anon_sym_DOT, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9129,29 +11997,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [8583] = 3, + [11939] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(247), 8, + ACTIONS(127), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(125), 7, + sym_identifier, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(245), 23, - ts_builtin_sym_end, + ACTIONS(123), 18, + sym_unit_quote, anon_sym_DOT, - anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9167,28 +12031,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [8623] = 3, + [11977] = 6, + ACTIONS(323), 1, + anon_sym_EQ, + ACTIONS(325), 1, + anon_sym_COLON, + STATE(339), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(251), 8, + ACTIONS(215), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(249), 23, - ts_builtin_sym_end, + ACTIONS(213), 17, anon_sym_DOT, - anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9203,33 +12065,77 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, - anon_sym_RBRACK, - [8663] = 4, - ACTIONS(257), 1, - anon_sym_DASH_GT, + [12018] = 20, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, + anon_sym_STAR_STAR, + ACTIONS(223), 1, + anon_sym_STAR, + ACTIONS(225), 1, + anon_sym_SLASH, + ACTIONS(229), 1, + anon_sym_AMP, + ACTIONS(231), 1, + anon_sym_CARET, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, + anon_sym_AMP_AMP, + ACTIONS(241), 1, + anon_sym_PIPE_PIPE, + ACTIONS(245), 1, + anon_sym_CARET_CARET, + ACTIONS(329), 1, + anon_sym_EQ, + STATE(163), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(255), 9, + ACTIONS(219), 2, anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(227), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(235), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(327), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(237), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [12087] = 4, + ACTIONS(331), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(143), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(253), 21, - ts_builtin_sym_end, - anon_sym_DOT, + ACTIONS(141), 19, + sym_identifier, + sym_unit_quote, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -9242,28 +12148,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [8705] = 3, + [12124] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(261), 8, + ACTIONS(125), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(259), 23, - ts_builtin_sym_end, + ACTIONS(123), 20, + sym_identifier, + sym_unit_quote, anon_sym_DOT, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9278,29 +12180,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [8745] = 3, + [12159] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(265), 8, + ACTIONS(139), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(263), 23, - ts_builtin_sym_end, + ACTIONS(137), 20, + sym_identifier, + sym_unit_quote, anon_sym_DOT, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9315,29 +12212,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [8785] = 3, + [12194] = 6, + ACTIONS(131), 1, + sym_identifier, + ACTIONS(133), 1, + sym_unit_quote, + STATE(106), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(269), 8, + ACTIONS(135), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(267), 23, - ts_builtin_sym_end, + ACTIONS(129), 17, anon_sym_DOT, - anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9353,33 +12247,85 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - anon_sym_else, - anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [8825] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(273), 8, + [12235] = 20, + ACTIONS(333), 1, + anon_sym_DOT, + ACTIONS(335), 1, + anon_sym_COMMA, + ACTIONS(337), 1, + anon_sym_RPAREN_GT, + ACTIONS(339), 1, + anon_sym_COLON_COLON, + ACTIONS(343), 1, + anon_sym_STAR_STAR, + ACTIONS(345), 1, anon_sym_STAR, + ACTIONS(347), 1, + anon_sym_SLASH, + ACTIONS(351), 1, anon_sym_AMP, + ACTIONS(353), 1, anon_sym_PIPE, + ACTIONS(355), 1, anon_sym_CARET, + ACTIONS(361), 1, + anon_sym_AMP_AMP, + ACTIONS(363), 1, + anon_sym_PIPE_PIPE, + ACTIONS(365), 1, + anon_sym_CARET_CARET, + ACTIONS(367), 1, + anon_sym_LPAREN, + STATE(252), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(341), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(349), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(271), 23, - ts_builtin_sym_end, + ACTIONS(359), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [12303] = 11, + ACTIONS(333), 1, anon_sym_DOT, - anon_sym_COMMA, + ACTIONS(339), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(343), 1, anon_sym_STAR_STAR, + ACTIONS(345), 1, + anon_sym_STAR, + ACTIONS(347), 1, anon_sym_SLASH, + ACTIONS(367), 1, + anon_sym_LPAREN, + STATE(252), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(341), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(173), 5, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(167), 11, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -9389,36 +12335,81 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, + [12353] = 12, + ACTIONS(333), 1, + anon_sym_DOT, + ACTIONS(339), 1, + anon_sym_COLON_COLON, + ACTIONS(343), 1, + anon_sym_STAR_STAR, + ACTIONS(345), 1, + anon_sym_STAR, + ACTIONS(347), 1, + anon_sym_SLASH, + ACTIONS(367), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [8865] = 3, + STATE(252), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(277), 8, - anon_sym_STAR, + ACTIONS(341), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(349), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(173), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(275), 23, - ts_builtin_sym_end, - anon_sym_DOT, + ACTIONS(167), 9, anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [12405] = 14, + ACTIONS(333), 1, + anon_sym_DOT, + ACTIONS(339), 1, anon_sym_COLON_COLON, + ACTIONS(343), 1, + anon_sym_STAR_STAR, + ACTIONS(345), 1, + anon_sym_STAR, + ACTIONS(347), 1, + anon_sym_SLASH, + ACTIONS(351), 1, + anon_sym_AMP, + ACTIONS(355), 1, + anon_sym_CARET, + ACTIONS(367), 1, + anon_sym_LPAREN, + STATE(252), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(173), 3, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + ACTIONS(167), 9, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -9426,90 +12417,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [8905] = 20, - ACTIONS(179), 1, + [12461] = 13, + ACTIONS(333), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(339), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(343), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(345), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(347), 1, anon_sym_SLASH, - ACTIONS(199), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, - anon_sym_CARET, - ACTIONS(209), 1, - anon_sym_AMP_AMP, - ACTIONS(211), 1, - anon_sym_PIPE_PIPE, - ACTIONS(213), 1, - anon_sym_CARET_CARET, - STATE(123), 1, + ACTIONS(367), 1, + anon_sym_LPAREN, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(281), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(207), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(279), 6, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [8979] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(285), 8, - anon_sym_STAR, - anon_sym_AMP, + ACTIONS(173), 4, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(283), 23, - ts_builtin_sym_end, - anon_sym_DOT, + ACTIONS(167), 9, anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -9517,36 +12458,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9019] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(289), 8, + [12515] = 15, + ACTIONS(333), 1, + anon_sym_DOT, + ACTIONS(339), 1, + anon_sym_COLON_COLON, + ACTIONS(343), 1, + anon_sym_STAR_STAR, + ACTIONS(345), 1, anon_sym_STAR, + ACTIONS(347), 1, + anon_sym_SLASH, + ACTIONS(351), 1, anon_sym_AMP, + ACTIONS(353), 1, anon_sym_PIPE, + ACTIONS(355), 1, anon_sym_CARET, + ACTIONS(367), 1, + anon_sym_LPAREN, + STATE(252), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(173), 2, anon_sym_GT, anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(287), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, + ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(167), 9, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -9554,178 +12501,205 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9059] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(293), 8, + [12573] = 16, + ACTIONS(333), 1, + anon_sym_DOT, + ACTIONS(339), 1, + anon_sym_COLON_COLON, + ACTIONS(343), 1, + anon_sym_STAR_STAR, + ACTIONS(345), 1, anon_sym_STAR, + ACTIONS(347), 1, + anon_sym_SLASH, + ACTIONS(351), 1, anon_sym_AMP, + ACTIONS(353), 1, anon_sym_PIPE, + ACTIONS(355), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(291), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, + ACTIONS(367), 1, + anon_sym_LPAREN, + STATE(252), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(357), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(167), 5, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9099] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(255), 8, + [12633] = 17, + ACTIONS(333), 1, + anon_sym_DOT, + ACTIONS(339), 1, + anon_sym_COLON_COLON, + ACTIONS(343), 1, + anon_sym_STAR_STAR, + ACTIONS(345), 1, anon_sym_STAR, + ACTIONS(347), 1, + anon_sym_SLASH, + ACTIONS(351), 1, anon_sym_AMP, + ACTIONS(353), 1, anon_sym_PIPE, + ACTIONS(355), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(253), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, + ACTIONS(361), 1, + anon_sym_AMP_AMP, + ACTIONS(367), 1, + anon_sym_LPAREN, + STATE(252), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(357), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(167), 4, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + [12695] = 18, + ACTIONS(333), 1, + anon_sym_DOT, + ACTIONS(339), 1, + anon_sym_COLON_COLON, + ACTIONS(343), 1, + anon_sym_STAR_STAR, + ACTIONS(345), 1, + anon_sym_STAR, + ACTIONS(347), 1, + anon_sym_SLASH, + ACTIONS(351), 1, + anon_sym_AMP, + ACTIONS(353), 1, + anon_sym_PIPE, + ACTIONS(355), 1, + anon_sym_CARET, + ACTIONS(361), 1, anon_sym_AMP_AMP, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, + ACTIONS(367), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9139] = 3, + STATE(252), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(297), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(295), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, + ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(357), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(167), 3, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_CARET_CARET, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + [12759] = 19, + ACTIONS(333), 1, + anon_sym_DOT, + ACTIONS(339), 1, + anon_sym_COLON_COLON, + ACTIONS(343), 1, + anon_sym_STAR_STAR, + ACTIONS(345), 1, + anon_sym_STAR, + ACTIONS(347), 1, + anon_sym_SLASH, + ACTIONS(351), 1, + anon_sym_AMP, + ACTIONS(353), 1, + anon_sym_PIPE, + ACTIONS(355), 1, + anon_sym_CARET, + ACTIONS(361), 1, anon_sym_AMP_AMP, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, + ACTIONS(365), 1, + anon_sym_CARET_CARET, + ACTIONS(367), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [9179] = 4, + STATE(252), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(127), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(125), 7, - sym_identifier, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(123), 19, - sym_unit_quote, - anon_sym_DOT, + ACTIONS(243), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(357), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [9218] = 4, + [12825] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(127), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(125), 7, - sym_identifier, + ACTIONS(179), 7, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(123), 18, - sym_unit_quote, + ACTIONS(177), 18, anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -9738,30 +12712,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_LPAREN, - [9256] = 5, - STATE(204), 1, - sym__unit, + anon_sym_DASH_GT, + [12859] = 4, + ACTIONS(165), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(299), 2, - sym_identifier, - sym_unit_quote, - ACTIONS(135), 6, + ACTIONS(163), 7, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(129), 18, + ACTIONS(161), 17, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -9775,94 +12746,117 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [9296] = 6, - ACTIONS(301), 1, - anon_sym_EQ, - ACTIONS(303), 1, - anon_sym_COLON, - STATE(267), 1, - sym_declaration_type, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(255), 6, + [12895] = 19, + ACTIONS(333), 1, + anon_sym_DOT, + ACTIONS(339), 1, + anon_sym_COLON_COLON, + ACTIONS(343), 1, + anon_sym_STAR_STAR, + ACTIONS(345), 1, anon_sym_STAR, + ACTIONS(347), 1, + anon_sym_SLASH, + ACTIONS(351), 1, anon_sym_AMP, + ACTIONS(353), 1, anon_sym_PIPE, + ACTIONS(355), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(253), 17, - anon_sym_DOT, - anon_sym_COLON_COLON, + ACTIONS(361), 1, + anon_sym_AMP_AMP, + ACTIONS(363), 1, + anon_sym_PIPE_PIPE, + ACTIONS(365), 1, + anon_sym_CARET_CARET, + ACTIONS(367), 1, + anon_sym_LPAREN, + STATE(252), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(285), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(357), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + [12961] = 19, + ACTIONS(333), 1, + anon_sym_DOT, + ACTIONS(339), 1, + anon_sym_COLON_COLON, + ACTIONS(343), 1, + anon_sym_STAR_STAR, + ACTIONS(345), 1, + anon_sym_STAR, + ACTIONS(347), 1, + anon_sym_SLASH, + ACTIONS(351), 1, + anon_sym_AMP, + ACTIONS(353), 1, + anon_sym_PIPE, + ACTIONS(355), 1, + anon_sym_CARET, + ACTIONS(361), 1, anon_sym_AMP_AMP, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, + ACTIONS(365), 1, anon_sym_CARET_CARET, + ACTIONS(367), 1, anon_sym_LPAREN, - anon_sym_RPAREN, - [9337] = 3, + STATE(252), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(145), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(143), 20, - sym_identifier, - sym_unit_quote, - anon_sym_DOT, + ACTIONS(297), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(357), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [9372] = 6, - ACTIONS(131), 1, - sym_identifier, - ACTIONS(133), 1, - sym_unit_quote, - STATE(89), 1, - sym__unit, + [13027] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(135), 6, + ACTIONS(211), 7, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(129), 17, + ACTIONS(209), 18, anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -9875,26 +12869,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_LPAREN, - [9413] = 4, - ACTIONS(305), 1, - anon_sym_DOT, + anon_sym_DASH_GT, + [13061] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(139), 6, + ACTIONS(125), 7, + sym_identifier, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(137), 19, - sym_identifier, + ACTIONS(123), 18, sym_unit_quote, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + anon_sym_DOT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -9909,77 +12900,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_LPAREN, - [9450] = 20, - ACTIONS(179), 1, + [13095] = 8, + ACTIONS(333), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(339), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(343), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, - anon_sym_STAR, - ACTIONS(195), 1, - anon_sym_SLASH, - ACTIONS(199), 1, - anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, - anon_sym_CARET, - ACTIONS(209), 1, - anon_sym_AMP_AMP, - ACTIONS(211), 1, - anon_sym_PIPE_PIPE, - ACTIONS(213), 1, - anon_sym_CARET_CARET, - ACTIONS(309), 1, - anon_sym_EQ, - STATE(123), 1, + ACTIONS(367), 1, + anon_sym_LPAREN, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(197), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(205), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(307), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(207), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [9519] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(125), 6, + ACTIONS(173), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(123), 20, - sym_identifier, - sym_unit_quote, - anon_sym_DOT, + ACTIONS(167), 14, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -9990,10 +12938,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [9554] = 4, - ACTIONS(311), 1, - anon_sym_DOT, + [13139] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -10005,8 +12950,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(137), 17, + ACTIONS(137), 18, sym_unit_quote, + anon_sym_DOT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10023,42 +12969,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_CARET, anon_sym_then, anon_sym_LPAREN, - [9590] = 15, - ACTIONS(313), 1, + [13173] = 7, + ACTIONS(333), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(339), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, - anon_sym_STAR_STAR, - ACTIONS(321), 1, - anon_sym_STAR, - ACTIONS(323), 1, - anon_sym_SLASH, - ACTIONS(327), 1, - anon_sym_AMP, - ACTIONS(329), 1, - anon_sym_PIPE, - ACTIONS(331), 1, - anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(367), 1, anon_sym_LPAREN, - STATE(170), 1, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(183), 2, + ACTIONS(173), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(317), 2, + ACTIONS(167), 15, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(177), 9, - anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -10066,240 +13004,241 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [9648] = 16, - ACTIONS(313), 1, + [13215] = 20, + ACTIONS(89), 1, + anon_sym_RBRACK, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(327), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(329), 1, - anon_sym_PIPE, - ACTIONS(331), 1, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_LPAREN, - STATE(170), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, + anon_sym_AMP_AMP, + ACTIONS(241), 1, + anon_sym_PIPE_PIPE, + ACTIONS(245), 1, + anon_sym_CARET_CARET, + ACTIONS(369), 1, + anon_sym_COMMA, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(317), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(335), 2, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(337), 4, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(177), 5, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [9708] = 17, - ACTIONS(313), 1, + [13283] = 20, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(323), 1, - anon_sym_SLASH, - ACTIONS(327), 1, - anon_sym_AMP, - ACTIONS(329), 1, - anon_sym_PIPE, - ACTIONS(331), 1, + ACTIONS(225), 1, + anon_sym_SLASH, + ACTIONS(229), 1, + anon_sym_AMP, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_LPAREN, - ACTIONS(339), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, - STATE(170), 1, + ACTIONS(241), 1, + anon_sym_PIPE_PIPE, + ACTIONS(245), 1, + anon_sym_CARET_CARET, + ACTIONS(369), 1, + anon_sym_COMMA, + ACTIONS(371), 1, + anon_sym_RBRACK, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(317), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(335), 2, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(177), 4, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - ACTIONS(337), 4, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9770] = 18, - ACTIONS(313), 1, + [13351] = 20, + ACTIONS(333), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(339), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(343), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(345), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(347), 1, anon_sym_SLASH, - ACTIONS(327), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(329), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(331), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_LPAREN, - ACTIONS(339), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(341), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - STATE(170), 1, + ACTIONS(365), 1, + anon_sym_CARET_CARET, + ACTIONS(367), 1, + anon_sym_LPAREN, + ACTIONS(373), 1, + anon_sym_COMMA, + ACTIONS(375), 1, + anon_sym_RPAREN_GT, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(317), 2, + ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(335), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(177), 3, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_CARET_CARET, - ACTIONS(337), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9834] = 19, - ACTIONS(313), 1, + [13419] = 10, + ACTIONS(333), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(339), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(343), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(345), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(347), 1, anon_sym_SLASH, - ACTIONS(327), 1, - anon_sym_AMP, - ACTIONS(329), 1, - anon_sym_PIPE, - ACTIONS(331), 1, - anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(367), 1, anon_sym_LPAREN, - ACTIONS(339), 1, - anon_sym_AMP_AMP, - ACTIONS(341), 1, - anon_sym_PIPE_PIPE, - ACTIONS(343), 1, - anon_sym_CARET_CARET, - STATE(170), 1, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(233), 2, + ACTIONS(173), 5, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(167), 13, anon_sym_COMMA, anon_sym_RPAREN_GT, - ACTIONS(317), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(335), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9900] = 19, - ACTIONS(179), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [13467] = 20, + ACTIONS(333), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(339), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(343), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(345), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(347), 1, anon_sym_SLASH, - ACTIONS(199), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(201), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(203), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(209), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(211), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, + ACTIONS(365), 1, anon_sym_CARET_CARET, - STATE(123), 1, + ACTIONS(367), 1, + anon_sym_LPAREN, + ACTIONS(377), 1, + anon_sym_COMMA, + ACTIONS(379), 1, + anon_sym_RPAREN_GT, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(345), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(207), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [9966] = 3, + [13535] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(155), 7, + ACTIONS(203), 7, anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, @@ -10307,7 +13246,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(153), 18, + ACTIONS(201), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -10326,148 +13265,215 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_CARET, anon_sym_LPAREN, anon_sym_DASH_GT, - [10000] = 19, - ACTIONS(313), 1, + [13569] = 19, + ACTIONS(333), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(339), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(343), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(345), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(347), 1, anon_sym_SLASH, - ACTIONS(327), 1, + ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(329), 1, + ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(331), 1, + ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_LPAREN, - ACTIONS(339), 1, + ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(341), 1, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(343), 1, + ACTIONS(365), 1, anon_sym_CARET_CARET, - STATE(170), 1, + ACTIONS(367), 1, + anon_sym_LPAREN, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(187), 2, + ACTIONS(289), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - ACTIONS(317), 2, + ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(335), 2, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(337), 4, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10066] = 19, - ACTIONS(313), 1, + [13635] = 20, + ACTIONS(41), 1, + anon_sym_RBRACK, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(327), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(329), 1, - anon_sym_PIPE, - ACTIONS(331), 1, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_LPAREN, - ACTIONS(339), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, - ACTIONS(341), 1, + ACTIONS(241), 1, anon_sym_PIPE_PIPE, - ACTIONS(343), 1, + ACTIONS(245), 1, anon_sym_CARET_CARET, - STATE(170), 1, + ACTIONS(369), 1, + anon_sym_COMMA, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(279), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(317), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(335), 2, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(337), 4, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10132] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(163), 7, - anon_sym_DASH, + [13703] = 20, + ACTIONS(333), 1, + anon_sym_DOT, + ACTIONS(339), 1, + anon_sym_COLON_COLON, + ACTIONS(343), 1, + anon_sym_STAR_STAR, + ACTIONS(345), 1, anon_sym_STAR, + ACTIONS(347), 1, + anon_sym_SLASH, + ACTIONS(351), 1, anon_sym_AMP, + ACTIONS(353), 1, anon_sym_PIPE, + ACTIONS(355), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(161), 18, - anon_sym_DOT, + ACTIONS(361), 1, + anon_sym_AMP_AMP, + ACTIONS(363), 1, + anon_sym_PIPE_PIPE, + ACTIONS(365), 1, + anon_sym_CARET_CARET, + ACTIONS(367), 1, + anon_sym_LPAREN, + ACTIONS(381), 1, anon_sym_COMMA, + ACTIONS(383), 1, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + STATE(252), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(341), 2, + anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(357), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + [13771] = 19, + ACTIONS(333), 1, + anon_sym_DOT, + ACTIONS(339), 1, + anon_sym_COLON_COLON, + ACTIONS(343), 1, + anon_sym_STAR_STAR, + ACTIONS(345), 1, + anon_sym_STAR, + ACTIONS(347), 1, + anon_sym_SLASH, + ACTIONS(351), 1, + anon_sym_AMP, + ACTIONS(353), 1, + anon_sym_PIPE, + ACTIONS(355), 1, + anon_sym_CARET, + ACTIONS(361), 1, anon_sym_AMP_AMP, + ACTIONS(363), 1, anon_sym_PIPE_PIPE, + ACTIONS(365), 1, anon_sym_CARET_CARET, + ACTIONS(367), 1, anon_sym_LPAREN, + STATE(252), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(293), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(341), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(349), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(357), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(359), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13837] = 4, + ACTIONS(385), 1, anon_sym_DASH_GT, - [10166] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(125), 7, - sym_identifier, + ACTIONS(215), 7, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(123), 18, - sym_unit_quote, + ACTIONS(213), 17, anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -10480,61 +13486,108 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_LPAREN, - [10200] = 20, - ACTIONS(313), 1, + [13873] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(327), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(329), 1, - anon_sym_PIPE, - ACTIONS(331), 1, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(333), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, + anon_sym_AMP_AMP, + ACTIONS(241), 1, + anon_sym_PIPE_PIPE, + ACTIONS(245), 1, + anon_sym_CARET_CARET, + STATE(163), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(219), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(227), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(235), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(387), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(237), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13939] = 19, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(339), 1, + ACTIONS(221), 1, + anon_sym_STAR_STAR, + ACTIONS(223), 1, + anon_sym_STAR, + ACTIONS(225), 1, + anon_sym_SLASH, + ACTIONS(229), 1, + anon_sym_AMP, + ACTIONS(231), 1, + anon_sym_CARET, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, - ACTIONS(341), 1, + ACTIONS(241), 1, anon_sym_PIPE_PIPE, - ACTIONS(343), 1, + ACTIONS(245), 1, anon_sym_CARET_CARET, - ACTIONS(347), 1, - anon_sym_COMMA, - ACTIONS(349), 1, - anon_sym_RPAREN_GT, - STATE(170), 1, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(317), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(335), 2, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(337), 4, + ACTIONS(389), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10268] = 3, + [14005] = 4, + ACTIONS(391), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(145), 7, + ACTIONS(143), 7, sym_identifier, anon_sym_STAR, anon_sym_AMP, @@ -10542,9 +13595,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(143), 18, + ACTIONS(141), 17, sym_unit_quote, - anon_sym_DOT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -10561,107 +13613,71 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_CARET, anon_sym_then, anon_sym_LPAREN, - [10302] = 19, - ACTIONS(179), 1, + [14041] = 20, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(199), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(209), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, - ACTIONS(211), 1, + ACTIONS(241), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, + ACTIONS(245), 1, anon_sym_CARET_CARET, - STATE(123), 1, + ACTIONS(369), 1, + anon_sym_COMMA, + ACTIONS(393), 1, + anon_sym_RBRACK, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(351), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(207), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [10368] = 7, - ACTIONS(313), 1, - anon_sym_DOT, - ACTIONS(315), 1, - anon_sym_COLON_COLON, - ACTIONS(333), 1, - anon_sym_LPAREN, - STATE(170), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(183), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(177), 15, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [10410] = 4, - ACTIONS(151), 1, - anon_sym_DASH_GT, + [14109] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(149), 7, - anon_sym_DASH, + ACTIONS(207), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(147), 17, + ACTIONS(205), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -10675,265 +13691,235 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [10446] = 20, - ACTIONS(91), 1, - anon_sym_RBRACK, - ACTIONS(179), 1, + [14142] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(199), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(209), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, - ACTIONS(211), 1, + ACTIONS(241), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, + ACTIONS(245), 1, anon_sym_CARET_CARET, - ACTIONS(353), 1, - anon_sym_COMMA, - STATE(123), 1, + ACTIONS(395), 1, + anon_sym_COLON, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10514] = 20, - ACTIONS(313), 1, + [14207] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(327), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(329), 1, - anon_sym_PIPE, - ACTIONS(331), 1, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_LPAREN, - ACTIONS(339), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, - ACTIONS(341), 1, + ACTIONS(241), 1, anon_sym_PIPE_PIPE, - ACTIONS(343), 1, + ACTIONS(245), 1, anon_sym_CARET_CARET, - ACTIONS(355), 1, - anon_sym_COMMA, - ACTIONS(357), 1, - anon_sym_RPAREN_GT, - STATE(170), 1, + ACTIONS(397), 1, + anon_sym_else, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(317), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(335), 2, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(337), 4, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10582] = 20, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, - anon_sym_STAR_STAR, - ACTIONS(193), 1, + [14272] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(259), 6, anon_sym_STAR, - ACTIONS(195), 1, - anon_sym_SLASH, - ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(209), 1, - anon_sym_AMP_AMP, - ACTIONS(211), 1, - anon_sym_PIPE_PIPE, - ACTIONS(213), 1, - anon_sym_CARET_CARET, - ACTIONS(353), 1, + anon_sym_GT, + anon_sym_LT, + ACTIONS(257), 18, + anon_sym_DOT, anon_sym_COMMA, - ACTIONS(359), 1, - anon_sym_RBRACK, - STATE(123), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(189), 2, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10650] = 20, - ACTIONS(313), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [14305] = 10, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(399), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(401), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(403), 1, anon_sym_SLASH, - ACTIONS(327), 1, - anon_sym_AMP, - ACTIONS(329), 1, - anon_sym_PIPE, - ACTIONS(331), 1, - anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_LPAREN, - ACTIONS(339), 1, - anon_sym_AMP_AMP, - ACTIONS(341), 1, - anon_sym_PIPE_PIPE, - ACTIONS(343), 1, - anon_sym_CARET_CARET, - ACTIONS(361), 1, - anon_sym_COMMA, - ACTIONS(363), 1, - anon_sym_RPAREN_GT, - STATE(170), 1, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(317), 2, + ACTIONS(173), 5, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(167), 12, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(335), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10718] = 20, - ACTIONS(313), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + [14352] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(327), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(329), 1, - anon_sym_PIPE, - ACTIONS(331), 1, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_LPAREN, - ACTIONS(339), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, - ACTIONS(341), 1, + ACTIONS(241), 1, anon_sym_PIPE_PIPE, - ACTIONS(343), 1, + ACTIONS(245), 1, anon_sym_CARET_CARET, - ACTIONS(365), 1, - anon_sym_COMMA, - ACTIONS(367), 1, - anon_sym_RPAREN_GT, - STATE(170), 1, + ACTIONS(405), 1, + anon_sym_SEMI, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(317), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(335), 2, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(337), 4, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [10786] = 3, + [14417] = 8, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(399), 1, + anon_sym_STAR_STAR, + STATE(163), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(159), 7, - anon_sym_DASH, + ACTIONS(173), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(157), 18, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(167), 13, + anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -10944,37 +13930,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_LPAREN, - anon_sym_DASH_GT, - [10820] = 10, - ACTIONS(313), 1, + anon_sym_then, + [14460] = 11, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(399), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(401), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(403), 1, anon_sym_SLASH, - ACTIONS(333), 1, - anon_sym_LPAREN, - STATE(170), 1, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(183), 5, + ACTIONS(407), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(173), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(177), 13, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(167), 10, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -10984,35 +13968,79 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [10868] = 8, - ACTIONS(313), 1, + anon_sym_then, + [14509] = 12, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, - anon_sym_STAR_STAR, - ACTIONS(333), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - STATE(170), 1, + ACTIONS(399), 1, + anon_sym_STAR_STAR, + ACTIONS(401), 1, + anon_sym_STAR, + ACTIONS(403), 1, + anon_sym_SLASH, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(183), 6, - anon_sym_STAR, + ACTIONS(407), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(409), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(173), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(177), 14, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(167), 8, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + [14560] = 14, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(399), 1, + anon_sym_STAR_STAR, + ACTIONS(401), 1, + anon_sym_STAR, + ACTIONS(403), 1, + anon_sym_SLASH, + ACTIONS(411), 1, + anon_sym_AMP, + ACTIONS(413), 1, + anon_sym_CARET, + STATE(163), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH, + ACTIONS(409), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(173), 3, + anon_sym_PIPE, + anon_sym_GT, + anon_sym_LT, + ACTIONS(167), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -11020,38 +14048,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [10912] = 11, - ACTIONS(313), 1, + anon_sym_then, + [14615] = 13, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(399), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(401), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(403), 1, anon_sym_SLASH, - ACTIONS(333), 1, - anon_sym_LPAREN, - STATE(170), 1, + ACTIONS(411), 1, + anon_sym_AMP, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(317), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(183), 5, - anon_sym_AMP, + ACTIONS(409), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(173), 4, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(177), 11, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(167), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -11059,39 +14088,41 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [10962] = 12, - ACTIONS(313), 1, + anon_sym_then, + [14668] = 15, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(399), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(401), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(403), 1, anon_sym_SLASH, - ACTIONS(333), 1, - anon_sym_LPAREN, - STATE(170), 1, + ACTIONS(411), 1, + anon_sym_AMP, + ACTIONS(413), 1, + anon_sym_CARET, + ACTIONS(415), 1, + anon_sym_PIPE, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(317), 2, + ACTIONS(173), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + ACTIONS(409), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(183), 5, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(177), 9, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(167), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -11099,156 +14130,156 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [11014] = 20, - ACTIONS(179), 1, + anon_sym_then, + [14725] = 16, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(399), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(401), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(403), 1, anon_sym_SLASH, - ACTIONS(199), 1, + ACTIONS(411), 1, anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, + ACTIONS(413), 1, anon_sym_CARET, - ACTIONS(209), 1, - anon_sym_AMP_AMP, - ACTIONS(211), 1, - anon_sym_PIPE_PIPE, - ACTIONS(213), 1, - anon_sym_CARET_CARET, - ACTIONS(353), 1, - anon_sym_COMMA, - ACTIONS(369), 1, - anon_sym_RBRACK, - STATE(123), 1, + ACTIONS(415), 1, + anon_sym_PIPE, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + ACTIONS(409), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(417), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(167), 4, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + ACTIONS(419), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11082] = 14, - ACTIONS(313), 1, + [14784] = 17, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(399), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(401), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(403), 1, anon_sym_SLASH, - ACTIONS(327), 1, + ACTIONS(411), 1, anon_sym_AMP, - ACTIONS(331), 1, + ACTIONS(413), 1, anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_LPAREN, - STATE(170), 1, + ACTIONS(415), 1, + anon_sym_PIPE, + ACTIONS(421), 1, + anon_sym_AMP_AMP, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(317), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + ACTIONS(409), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(183), 3, - anon_sym_PIPE, + ACTIONS(417), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(177), 9, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(167), 3, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + ACTIONS(419), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [11138] = 13, - ACTIONS(313), 1, + [14845] = 18, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(399), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(401), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(403), 1, anon_sym_SLASH, - ACTIONS(327), 1, + ACTIONS(411), 1, anon_sym_AMP, - ACTIONS(333), 1, - anon_sym_LPAREN, - STATE(170), 1, + ACTIONS(413), 1, + anon_sym_CARET, + ACTIONS(415), 1, + anon_sym_PIPE, + ACTIONS(421), 1, + anon_sym_AMP_AMP, + ACTIONS(423), 1, + anon_sym_PIPE_PIPE, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(317), 2, + ACTIONS(167), 2, + anon_sym_CARET_CARET, + anon_sym_then, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + ACTIONS(409), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(183), 4, - anon_sym_PIPE, - anon_sym_CARET, + ACTIONS(417), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(177), 9, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(419), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [11192] = 4, - ACTIONS(371), 1, - anon_sym_DASH_GT, + [14908] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(255), 7, - anon_sym_DASH, + ACTIONS(163), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(253), 17, + ACTIONS(161), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -11262,298 +14293,336 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [11228] = 19, - ACTIONS(313), 1, + [14941] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(315), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(319), 1, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(243), 1, + anon_sym_then, + ACTIONS(399), 1, anon_sym_STAR_STAR, - ACTIONS(321), 1, + ACTIONS(401), 1, anon_sym_STAR, - ACTIONS(323), 1, + ACTIONS(403), 1, anon_sym_SLASH, - ACTIONS(327), 1, + ACTIONS(411), 1, anon_sym_AMP, - ACTIONS(329), 1, - anon_sym_PIPE, - ACTIONS(331), 1, + ACTIONS(413), 1, anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_LPAREN, - ACTIONS(339), 1, + ACTIONS(415), 1, + anon_sym_PIPE, + ACTIONS(421), 1, anon_sym_AMP_AMP, - ACTIONS(341), 1, + ACTIONS(423), 1, anon_sym_PIPE_PIPE, - ACTIONS(343), 1, + ACTIONS(425), 1, anon_sym_CARET_CARET, - STATE(170), 1, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(217), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(317), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + ACTIONS(409), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(335), 2, + ACTIONS(417), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(337), 4, + ACTIONS(419), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11294] = 20, - ACTIONS(41), 1, - anon_sym_RBRACK, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, - anon_sym_STAR_STAR, - ACTIONS(193), 1, + [15006] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(251), 6, anon_sym_STAR, - ACTIONS(195), 1, - anon_sym_SLASH, - ACTIONS(199), 1, anon_sym_AMP, - ACTIONS(201), 1, anon_sym_PIPE, - ACTIONS(203), 1, anon_sym_CARET, - ACTIONS(209), 1, + anon_sym_GT, + anon_sym_LT, + ACTIONS(249), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(353), 1, - anon_sym_COMMA, - STATE(123), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + [15039] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(255), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(253), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(207), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11362] = 19, - ACTIONS(313), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [15072] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(271), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(269), 18, anon_sym_DOT, - ACTIONS(315), 1, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - ACTIONS(319), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(321), 1, - anon_sym_STAR, - ACTIONS(323), 1, anon_sym_SLASH, - ACTIONS(327), 1, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [15105] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(275), 6, + anon_sym_STAR, anon_sym_AMP, - ACTIONS(329), 1, anon_sym_PIPE, - ACTIONS(331), 1, anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_LPAREN, - ACTIONS(339), 1, + anon_sym_GT, + anon_sym_LT, + ACTIONS(273), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(343), 1, anon_sym_CARET_CARET, - STATE(170), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + [15138] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(221), 2, + ACTIONS(279), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(277), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, - ACTIONS(317), 2, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(335), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11428] = 19, - ACTIONS(313), 1, - anon_sym_DOT, - ACTIONS(315), 1, - anon_sym_COLON_COLON, - ACTIONS(319), 1, - anon_sym_STAR_STAR, - ACTIONS(321), 1, - anon_sym_STAR, - ACTIONS(323), 1, - anon_sym_SLASH, - ACTIONS(327), 1, - anon_sym_AMP, - ACTIONS(329), 1, - anon_sym_PIPE, - ACTIONS(331), 1, - anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_LPAREN, - ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(343), 1, anon_sym_CARET_CARET, - ACTIONS(373), 1, - anon_sym_RPAREN_GT, - STATE(170), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + [15171] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(317), 2, + ACTIONS(283), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(281), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(325), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(335), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11493] = 19, - ACTIONS(179), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [15204] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(285), 1, + anon_sym_then, + ACTIONS(399), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(401), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(403), 1, anon_sym_SLASH, - ACTIONS(199), 1, + ACTIONS(411), 1, anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, + ACTIONS(413), 1, anon_sym_CARET, - ACTIONS(209), 1, + ACTIONS(415), 1, + anon_sym_PIPE, + ACTIONS(421), 1, anon_sym_AMP_AMP, - ACTIONS(211), 1, + ACTIONS(423), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, + ACTIONS(425), 1, anon_sym_CARET_CARET, - ACTIONS(375), 1, - anon_sym_COMMA, - STATE(123), 1, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + ACTIONS(409), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(417), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(419), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11558] = 19, - ACTIONS(179), 1, + [15269] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(379), 1, + ACTIONS(297), 1, + anon_sym_then, + ACTIONS(399), 1, anon_sym_STAR_STAR, - ACTIONS(381), 1, + ACTIONS(401), 1, anon_sym_STAR, - ACTIONS(383), 1, + ACTIONS(403), 1, anon_sym_SLASH, - ACTIONS(387), 1, + ACTIONS(411), 1, anon_sym_AMP, - ACTIONS(389), 1, - anon_sym_PIPE, - ACTIONS(391), 1, + ACTIONS(413), 1, anon_sym_CARET, - ACTIONS(397), 1, + ACTIONS(415), 1, + anon_sym_PIPE, + ACTIONS(421), 1, anon_sym_AMP_AMP, - ACTIONS(399), 1, + ACTIONS(423), 1, anon_sym_PIPE_PIPE, - ACTIONS(401), 1, + ACTIONS(425), 1, anon_sym_CARET_CARET, - ACTIONS(403), 1, - anon_sym_then, - STATE(123), 1, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(377), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(385), 2, + ACTIONS(409), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(393), 2, + ACTIONS(417), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(395), 4, + ACTIONS(419), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [11623] = 3, + [15334] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(297), 6, + ACTIONS(311), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(295), 18, + ACTIONS(309), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -11572,64 +14641,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [11656] = 19, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_then, - ACTIONS(379), 1, - anon_sym_STAR_STAR, - ACTIONS(381), 1, - anon_sym_STAR, - ACTIONS(383), 1, - anon_sym_SLASH, - ACTIONS(387), 1, - anon_sym_AMP, - ACTIONS(389), 1, - anon_sym_PIPE, - ACTIONS(391), 1, - anon_sym_CARET, - ACTIONS(397), 1, - anon_sym_AMP_AMP, - ACTIONS(399), 1, - anon_sym_PIPE_PIPE, - ACTIONS(401), 1, - anon_sym_CARET_CARET, - STATE(123), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(377), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(385), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(393), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(395), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [11721] = 3, + [15367] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(251), 6, + ACTIONS(315), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(249), 18, + ACTIONS(313), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -11648,18 +14671,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [11754] = 3, + [15400] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(265), 6, + ACTIONS(191), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(263), 18, + ACTIONS(189), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -11678,18 +14701,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [11787] = 3, + [15433] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(285), 6, + ACTIONS(195), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(283), 18, + ACTIONS(193), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -11708,18 +14731,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [11820] = 3, + [15466] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(227), 6, + ACTIONS(199), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(225), 18, + ACTIONS(197), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -11738,188 +14761,196 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [11853] = 10, - ACTIONS(179), 1, + [15499] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(379), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(381), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(383), 1, + ACTIONS(225), 1, anon_sym_SLASH, - STATE(123), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(183), 5, + ACTIONS(229), 1, anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(231), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(177), 12, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, + ACTIONS(241), 1, anon_sym_PIPE_PIPE, + ACTIONS(245), 1, anon_sym_CARET_CARET, - anon_sym_then, - [11900] = 8, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(379), 1, - anon_sym_STAR_STAR, - STATE(123), 1, + ACTIONS(427), 1, + ts_builtin_sym_end, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(183), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(177), 13, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(235), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - [11943] = 11, - ACTIONS(179), 1, + [15564] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(379), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(381), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(383), 1, + ACTIONS(225), 1, anon_sym_SLASH, - STATE(123), 1, + ACTIONS(229), 1, + anon_sym_AMP, + ACTIONS(231), 1, + anon_sym_CARET, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, + anon_sym_AMP_AMP, + ACTIONS(241), 1, + anon_sym_PIPE_PIPE, + ACTIONS(245), 1, + anon_sym_CARET_CARET, + ACTIONS(429), 1, + anon_sym_COMMA, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(377), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(183), 5, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(177), 10, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(235), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - [11992] = 12, - ACTIONS(179), 1, + [15629] = 19, + ACTIONS(333), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(339), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(379), 1, + ACTIONS(343), 1, anon_sym_STAR_STAR, - ACTIONS(381), 1, + ACTIONS(345), 1, anon_sym_STAR, - ACTIONS(383), 1, + ACTIONS(347), 1, anon_sym_SLASH, - STATE(123), 1, + ACTIONS(351), 1, + anon_sym_AMP, + ACTIONS(353), 1, + anon_sym_PIPE, + ACTIONS(355), 1, + anon_sym_CARET, + ACTIONS(361), 1, + anon_sym_AMP_AMP, + ACTIONS(363), 1, + anon_sym_PIPE_PIPE, + ACTIONS(365), 1, + anon_sym_CARET_CARET, + ACTIONS(367), 1, + anon_sym_LPAREN, + ACTIONS(431), 1, + anon_sym_RPAREN_GT, + STATE(252), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(377), 2, + ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(385), 2, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(183), 5, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, + ACTIONS(357), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(177), 8, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - [12043] = 14, - ACTIONS(179), 1, + [15694] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(303), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(301), 18, anon_sym_DOT, - ACTIONS(181), 1, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(379), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(381), 1, - anon_sym_STAR, - ACTIONS(383), 1, anon_sym_SLASH, - ACTIONS(387), 1, - anon_sym_AMP, - ACTIONS(391), 1, - anon_sym_CARET, - STATE(123), 1, - sym_dictionary_construction, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [15727] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(377), 2, + ACTIONS(215), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(213), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(385), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(183), 3, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - ACTIONS(177), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -11927,81 +14958,75 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - [12098] = 13, - ACTIONS(179), 1, + anon_sym_LPAREN, + [15760] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(379), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(381), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(383), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(387), 1, + ACTIONS(229), 1, anon_sym_AMP, - STATE(123), 1, + ACTIONS(231), 1, + anon_sym_CARET, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, + anon_sym_AMP_AMP, + ACTIONS(241), 1, + anon_sym_PIPE_PIPE, + ACTIONS(245), 1, + anon_sym_CARET_CARET, + ACTIONS(369), 1, + anon_sym_COMMA, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(377), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(385), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(183), 4, - anon_sym_PIPE, - anon_sym_CARET, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(177), 8, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - [12151] = 15, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(379), 1, - anon_sym_STAR_STAR, - ACTIONS(381), 1, + [15825] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(267), 6, anon_sym_STAR, - ACTIONS(383), 1, - anon_sym_SLASH, - ACTIONS(387), 1, anon_sym_AMP, - ACTIONS(389), 1, anon_sym_PIPE, - ACTIONS(391), 1, anon_sym_CARET, - STATE(123), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(183), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(377), 2, + ACTIONS(265), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(385), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(177), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12009,425 +15034,387 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - [12208] = 16, - ACTIONS(179), 1, + anon_sym_LPAREN, + [15858] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(379), 1, + ACTIONS(399), 1, anon_sym_STAR_STAR, - ACTIONS(381), 1, + ACTIONS(401), 1, anon_sym_STAR, - ACTIONS(383), 1, + ACTIONS(403), 1, anon_sym_SLASH, - ACTIONS(387), 1, + ACTIONS(411), 1, anon_sym_AMP, - ACTIONS(389), 1, - anon_sym_PIPE, - ACTIONS(391), 1, + ACTIONS(413), 1, anon_sym_CARET, - STATE(123), 1, + ACTIONS(415), 1, + anon_sym_PIPE, + ACTIONS(421), 1, + anon_sym_AMP_AMP, + ACTIONS(423), 1, + anon_sym_PIPE_PIPE, + ACTIONS(425), 1, + anon_sym_CARET_CARET, + ACTIONS(433), 1, + anon_sym_then, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(377), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(385), 2, + ACTIONS(409), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(393), 2, + ACTIONS(417), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(177), 4, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - ACTIONS(395), 4, + ACTIONS(419), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12267] = 17, - ACTIONS(179), 1, + [15923] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(379), 1, + ACTIONS(289), 1, + anon_sym_then, + ACTIONS(399), 1, anon_sym_STAR_STAR, - ACTIONS(381), 1, + ACTIONS(401), 1, anon_sym_STAR, - ACTIONS(383), 1, + ACTIONS(403), 1, anon_sym_SLASH, - ACTIONS(387), 1, + ACTIONS(411), 1, anon_sym_AMP, - ACTIONS(389), 1, - anon_sym_PIPE, - ACTIONS(391), 1, + ACTIONS(413), 1, anon_sym_CARET, - ACTIONS(397), 1, + ACTIONS(415), 1, + anon_sym_PIPE, + ACTIONS(421), 1, anon_sym_AMP_AMP, - STATE(123), 1, + ACTIONS(423), 1, + anon_sym_PIPE_PIPE, + ACTIONS(425), 1, + anon_sym_CARET_CARET, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(377), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(385), 2, + ACTIONS(409), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(393), 2, + ACTIONS(417), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(177), 3, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - ACTIONS(395), 4, + ACTIONS(419), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12328] = 18, - ACTIONS(179), 1, + [15988] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(379), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(381), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(383), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(387), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(389), 1, - anon_sym_PIPE, - ACTIONS(391), 1, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(397), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, - ACTIONS(399), 1, + ACTIONS(241), 1, anon_sym_PIPE_PIPE, - STATE(123), 1, + ACTIONS(245), 1, + anon_sym_CARET_CARET, + ACTIONS(435), 1, + anon_sym_RPAREN, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(177), 2, - anon_sym_CARET_CARET, - anon_sym_then, - ACTIONS(377), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(385), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(393), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(395), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [12391] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(149), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(147), 18, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [12424] = 19, - ACTIONS(179), 1, + [16053] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(233), 1, - anon_sym_then, - ACTIONS(379), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(381), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(383), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(387), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(389), 1, - anon_sym_PIPE, - ACTIONS(391), 1, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(397), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, - ACTIONS(399), 1, + ACTIONS(241), 1, anon_sym_PIPE_PIPE, - ACTIONS(401), 1, + ACTIONS(245), 1, anon_sym_CARET_CARET, - STATE(123), 1, + ACTIONS(437), 1, + anon_sym_COLON, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(377), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(385), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(393), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(395), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [12489] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(239), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(237), 18, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [12522] = 19, - ACTIONS(179), 1, + [16118] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(199), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(209), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, - ACTIONS(211), 1, + ACTIONS(241), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, + ACTIONS(245), 1, anon_sym_CARET_CARET, - ACTIONS(405), 1, - anon_sym_RPAREN, - STATE(123), 1, + ACTIONS(439), 1, + anon_sym_else, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12587] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(243), 6, + [16183] = 19, + ACTIONS(333), 1, + anon_sym_DOT, + ACTIONS(339), 1, + anon_sym_COLON_COLON, + ACTIONS(343), 1, + anon_sym_STAR_STAR, + ACTIONS(345), 1, anon_sym_STAR, + ACTIONS(347), 1, + anon_sym_SLASH, + ACTIONS(351), 1, anon_sym_AMP, + ACTIONS(353), 1, anon_sym_PIPE, + ACTIONS(355), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(241), 18, - anon_sym_DOT, - anon_sym_COMMA, + ACTIONS(361), 1, + anon_sym_AMP_AMP, + ACTIONS(363), 1, + anon_sym_PIPE_PIPE, + ACTIONS(365), 1, + anon_sym_CARET_CARET, + ACTIONS(367), 1, + anon_sym_LPAREN, + ACTIONS(441), 1, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + STATE(252), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(349), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(357), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [12620] = 19, - ACTIONS(179), 1, + [16248] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(379), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(381), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(383), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(387), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(389), 1, - anon_sym_PIPE, - ACTIONS(391), 1, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(397), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, - ACTIONS(399), 1, + ACTIONS(241), 1, anon_sym_PIPE_PIPE, - ACTIONS(401), 1, + ACTIONS(245), 1, anon_sym_CARET_CARET, - ACTIONS(407), 1, - anon_sym_then, - STATE(123), 1, + ACTIONS(443), 1, + anon_sym_COLON, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(377), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(385), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(393), 2, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(395), 4, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12685] = 19, - ACTIONS(179), 1, + [16313] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(199), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(209), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, - ACTIONS(211), 1, + ACTIONS(241), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, + ACTIONS(245), 1, anon_sym_CARET_CARET, - ACTIONS(409), 1, - anon_sym_COLON, - STATE(123), 1, + ACTIONS(445), 1, + anon_sym_else, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12750] = 3, + [16378] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(261), 6, + ACTIONS(319), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(259), 18, + ACTIONS(317), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -12446,18 +15433,64 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [12783] = 3, + [16411] = 19, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(293), 1, + anon_sym_then, + ACTIONS(399), 1, + anon_sym_STAR_STAR, + ACTIONS(401), 1, + anon_sym_STAR, + ACTIONS(403), 1, + anon_sym_SLASH, + ACTIONS(411), 1, + anon_sym_AMP, + ACTIONS(413), 1, + anon_sym_CARET, + ACTIONS(415), 1, + anon_sym_PIPE, + ACTIONS(421), 1, + anon_sym_AMP_AMP, + ACTIONS(423), 1, + anon_sym_PIPE_PIPE, + ACTIONS(425), 1, + anon_sym_CARET_CARET, + STATE(163), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(407), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(409), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(417), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(419), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [16476] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(269), 6, + ACTIONS(307), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(267), 18, + ACTIONS(305), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -12476,23 +15509,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [12816] = 3, + [16509] = 4, + ACTIONS(447), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(273), 6, + ACTIONS(215), 7, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(271), 18, + ACTIONS(213), 16, anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -12505,141 +15538,158 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_LPAREN, - [12849] = 19, - ACTIONS(179), 1, + [16544] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(187), 1, - anon_sym_then, - ACTIONS(379), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(381), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(383), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(387), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(389), 1, - anon_sym_PIPE, - ACTIONS(391), 1, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(397), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, - ACTIONS(399), 1, + ACTIONS(241), 1, anon_sym_PIPE_PIPE, - ACTIONS(401), 1, + ACTIONS(245), 1, anon_sym_CARET_CARET, - STATE(123), 1, + ACTIONS(449), 1, + anon_sym_COMMA, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(377), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(385), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(393), 2, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(395), 4, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12914] = 19, - ACTIONS(179), 1, + [16609] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(279), 1, - anon_sym_then, - ACTIONS(379), 1, + ACTIONS(399), 1, anon_sym_STAR_STAR, - ACTIONS(381), 1, + ACTIONS(401), 1, anon_sym_STAR, - ACTIONS(383), 1, + ACTIONS(403), 1, anon_sym_SLASH, - ACTIONS(387), 1, + ACTIONS(411), 1, anon_sym_AMP, - ACTIONS(389), 1, - anon_sym_PIPE, - ACTIONS(391), 1, + ACTIONS(413), 1, anon_sym_CARET, - ACTIONS(397), 1, + ACTIONS(415), 1, + anon_sym_PIPE, + ACTIONS(421), 1, anon_sym_AMP_AMP, - ACTIONS(399), 1, + ACTIONS(423), 1, anon_sym_PIPE_PIPE, - ACTIONS(401), 1, + ACTIONS(425), 1, anon_sym_CARET_CARET, - STATE(123), 1, + ACTIONS(451), 1, + anon_sym_then, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(377), 2, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(385), 2, + ACTIONS(409), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(393), 2, + ACTIONS(417), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(395), 4, + ACTIONS(419), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12979] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(289), 6, + [16674] = 19, + ACTIONS(169), 1, + anon_sym_DOT, + ACTIONS(171), 1, + anon_sym_COLON_COLON, + ACTIONS(175), 1, + anon_sym_LPAREN, + ACTIONS(399), 1, + anon_sym_STAR_STAR, + ACTIONS(401), 1, anon_sym_STAR, + ACTIONS(403), 1, + anon_sym_SLASH, + ACTIONS(411), 1, anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(413), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(287), 18, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(415), 1, + anon_sym_PIPE, + ACTIONS(421), 1, + anon_sym_AMP_AMP, + ACTIONS(423), 1, + anon_sym_PIPE_PIPE, + ACTIONS(425), 1, + anon_sym_CARET_CARET, + ACTIONS(453), 1, + anon_sym_then, + STATE(163), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(407), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(409), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(417), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(419), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [13012] = 3, + [16739] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(293), 6, + ACTIONS(263), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(291), 18, + ACTIONS(261), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -12658,120 +15708,157 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13045] = 19, - ACTIONS(179), 1, + [16772] = 19, + ACTIONS(169), 1, anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(171), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, + ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(221), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(223), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(225), 1, anon_sym_SLASH, - ACTIONS(199), 1, + ACTIONS(229), 1, anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, + ACTIONS(231), 1, anon_sym_CARET, - ACTIONS(209), 1, + ACTIONS(233), 1, + anon_sym_PIPE, + ACTIONS(239), 1, anon_sym_AMP_AMP, - ACTIONS(211), 1, + ACTIONS(241), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, + ACTIONS(245), 1, anon_sym_CARET_CARET, - ACTIONS(411), 1, - anon_sym_else, - STATE(123), 1, + ACTIONS(455), 1, + anon_sym_RPAREN, + STATE(163), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(219), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, + ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(235), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13110] = 19, - ACTIONS(179), 1, + [16837] = 4, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(127), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(125), 4, + sym_identifier, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(123), 17, + sym_unit_quote, anon_sym_DOT, - ACTIONS(181), 1, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(193), 1, - anon_sym_STAR, - ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(199), 1, - anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, - anon_sym_CARET, - ACTIONS(209), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(413), 1, - anon_sym_SEMI, - STATE(123), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + [16871] = 5, + STATE(276), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(457), 2, + sym_identifier, + sym_unit_quote, + ACTIONS(135), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(129), 15, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(205), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [16905] = 4, + ACTIONS(459), 1, + anon_sym_DOT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(143), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(141), 17, + sym_identifier, + sym_unit_quote, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13175] = 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [16937] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(171), 6, + ACTIONS(125), 3, anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(169), 18, - anon_sym_DOT, + ACTIONS(123), 17, + sym_identifier, + sym_unit_quote, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12780,19 +15867,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13208] = 3, + [16966] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 6, + ACTIONS(139), 3, anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(165), 18, - anon_sym_DOT, + ACTIONS(137), 17, + sym_identifier, + sym_unit_quote, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -12800,8 +15885,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12810,28 +15893,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13241] = 3, + [16995] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(175), 6, + ACTIONS(463), 3, anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(173), 18, - anon_sym_DOT, + ACTIONS(461), 16, anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12840,166 +15916,98 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13274] = 19, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, - anon_sym_STAR_STAR, - ACTIONS(193), 1, - anon_sym_STAR, - ACTIONS(195), 1, - anon_sym_SLASH, - ACTIONS(199), 1, - anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, - anon_sym_CARET, - ACTIONS(209), 1, - anon_sym_AMP_AMP, - ACTIONS(211), 1, - anon_sym_PIPE_PIPE, - ACTIONS(213), 1, - anon_sym_CARET_CARET, - ACTIONS(353), 1, - anon_sym_COMMA, - STATE(123), 1, - sym_dictionary_construction, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [17023] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(197), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(467), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(465), 16, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13339] = 19, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, - anon_sym_STAR_STAR, - ACTIONS(193), 1, - anon_sym_STAR, - ACTIONS(195), 1, - anon_sym_SLASH, - ACTIONS(199), 1, - anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, - anon_sym_CARET, - ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(415), 1, - ts_builtin_sym_end, - STATE(123), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [17051] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(197), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(471), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(469), 16, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13404] = 19, - ACTIONS(313), 1, - anon_sym_DOT, - ACTIONS(315), 1, - anon_sym_COLON_COLON, - ACTIONS(319), 1, - anon_sym_STAR_STAR, - ACTIONS(321), 1, - anon_sym_STAR, - ACTIONS(323), 1, - anon_sym_SLASH, - ACTIONS(327), 1, - anon_sym_AMP, - ACTIONS(329), 1, - anon_sym_PIPE, - ACTIONS(331), 1, - anon_sym_CARET, - ACTIONS(333), 1, - anon_sym_LPAREN, - ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(343), 1, anon_sym_CARET_CARET, - ACTIONS(417), 1, - anon_sym_RPAREN_GT, - STATE(170), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [17079] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(317), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(325), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(335), 2, + ACTIONS(475), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(337), 4, + ACTIONS(473), 16, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13469] = 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [17107] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(255), 6, + ACTIONS(479), 3, anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(253), 18, - anon_sym_DOT, + ACTIONS(477), 16, anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -13008,111 +16016,93 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13502] = 19, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [17135] = 4, + ACTIONS(483), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(217), 1, - anon_sym_then, - ACTIONS(379), 1, - anon_sym_STAR_STAR, - ACTIONS(381), 1, - anon_sym_STAR, - ACTIONS(383), 1, - anon_sym_SLASH, - ACTIONS(387), 1, - anon_sym_AMP, - ACTIONS(389), 1, - anon_sym_PIPE, - ACTIONS(391), 1, - anon_sym_CARET, - ACTIONS(397), 1, - anon_sym_AMP_AMP, - ACTIONS(399), 1, - anon_sym_PIPE_PIPE, - ACTIONS(401), 1, - anon_sym_CARET_CARET, - STATE(123), 1, - sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(377), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(385), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(393), 2, + ACTIONS(485), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(395), 4, + ACTIONS(481), 15, + anon_sym_COMMA, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13567] = 19, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, - anon_sym_STAR_STAR, - ACTIONS(193), 1, - anon_sym_STAR, - ACTIONS(195), 1, - anon_sym_SLASH, - ACTIONS(199), 1, - anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, - anon_sym_CARET, - ACTIONS(209), 1, anon_sym_AMP_AMP, - ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(419), 1, + anon_sym_LPAREN, anon_sym_RPAREN, - STATE(123), 1, - sym_dictionary_construction, + anon_sym_GT_GT_GT, + [17165] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(487), 7, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_if, + anon_sym_let, + ACTIONS(82), 12, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(205), 2, + anon_sym_BANG, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_LT_LT_LT, + [17193] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(491), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(489), 16, + anon_sym_COMMA, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13632] = 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [17221] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(231), 6, + ACTIONS(207), 3, anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(229), 18, - anon_sym_DOT, + ACTIONS(205), 15, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -13120,8 +16110,6 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -13130,212 +16118,161 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [13665] = 19, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, + [17248] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(195), 3, + anon_sym_STAR, + anon_sym_GT, + anon_sym_LT, + ACTIONS(193), 15, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(193), 1, - anon_sym_STAR, - ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(199), 1, - anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, - anon_sym_CARET, - ACTIONS(209), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(421), 1, - anon_sym_COLON, - STATE(123), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + [17275] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(197), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(199), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [13730] = 19, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, + ACTIONS(197), 15, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(193), 1, - anon_sym_STAR, - ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(199), 1, - anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, - anon_sym_CARET, - ACTIONS(209), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(211), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, anon_sym_CARET_CARET, - ACTIONS(423), 1, - anon_sym_else, - STATE(123), 1, - sym_dictionary_construction, + anon_sym_LPAREN, + [17302] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(197), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(191), 3, + anon_sym_STAR, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(189), 15, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13795] = 19, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, - anon_sym_COLON_COLON, - ACTIONS(185), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - ACTIONS(191), 1, + [17329] = 13, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(495), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(497), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(499), 1, anon_sym_SLASH, - ACTIONS(199), 1, - anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, - anon_sym_CARET, - ACTIONS(209), 1, + ACTIONS(505), 1, anon_sym_AMP_AMP, - ACTIONS(211), 1, + ACTIONS(507), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, + ACTIONS(509), 1, anon_sym_CARET_CARET, - ACTIONS(425), 1, - anon_sym_COLON, - STATE(123), 1, - sym_dictionary_construction, + ACTIONS(511), 1, + anon_sym_LPAREN, + STATE(125), 1, + sym__formula_relation, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(493), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(501), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(503), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13860] = 19, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, + [17375] = 13, + ACTIONS(483), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(495), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(497), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(499), 1, anon_sym_SLASH, - ACTIONS(199), 1, - anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, - anon_sym_CARET, - ACTIONS(209), 1, + ACTIONS(505), 1, anon_sym_AMP_AMP, - ACTIONS(211), 1, + ACTIONS(507), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, + ACTIONS(509), 1, anon_sym_CARET_CARET, - ACTIONS(427), 1, - anon_sym_else, - STATE(123), 1, - sym_dictionary_construction, + ACTIONS(511), 1, + anon_sym_LPAREN, + STATE(92), 1, + sym__formula_relation, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(493), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(513), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(515), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13925] = 3, + [17421] = 5, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(511), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(277), 6, + ACTIONS(519), 3, anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(275), 18, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(517), 11, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -13343,29 +16280,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + [17450] = 8, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(495), 1, + anon_sym_STAR_STAR, + ACTIONS(497), 1, + anon_sym_STAR, + ACTIONS(499), 1, + anon_sym_SLASH, + ACTIONS(511), 1, anon_sym_LPAREN, - [13958] = 4, - ACTIONS(429), 1, - anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(255), 7, - anon_sym_DASH, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, + ACTIONS(519), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(253), 16, - anon_sym_DOT, - anon_sym_COLON_COLON, + ACTIONS(517), 9, + anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -13373,122 +16307,114 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_LPAREN, - [13993] = 19, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, + [17485] = 11, + ACTIONS(483), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(191), 1, + ACTIONS(495), 1, anon_sym_STAR_STAR, - ACTIONS(193), 1, + ACTIONS(497), 1, anon_sym_STAR, - ACTIONS(195), 1, + ACTIONS(499), 1, anon_sym_SLASH, - ACTIONS(199), 1, - anon_sym_AMP, - ACTIONS(201), 1, - anon_sym_PIPE, - ACTIONS(203), 1, - anon_sym_CARET, - ACTIONS(209), 1, + ACTIONS(505), 1, anon_sym_AMP_AMP, - ACTIONS(211), 1, + ACTIONS(507), 1, anon_sym_PIPE_PIPE, - ACTIONS(213), 1, - anon_sym_CARET_CARET, - ACTIONS(431), 1, - anon_sym_COMMA, - STATE(123), 1, - sym_dictionary_construction, + ACTIONS(511), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(189), 2, + ACTIONS(493), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(197), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(205), 2, + ACTIONS(519), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(207), 4, + ACTIONS(517), 5, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14058] = 19, - ACTIONS(179), 1, - anon_sym_DOT, - ACTIONS(181), 1, + anon_sym_CARET_CARET, + [17526] = 12, + ACTIONS(483), 1, anon_sym_COLON_COLON, - ACTIONS(185), 1, - anon_sym_LPAREN, - ACTIONS(379), 1, + ACTIONS(495), 1, anon_sym_STAR_STAR, - ACTIONS(381), 1, + ACTIONS(497), 1, anon_sym_STAR, - ACTIONS(383), 1, + ACTIONS(499), 1, anon_sym_SLASH, - ACTIONS(387), 1, - anon_sym_AMP, - ACTIONS(389), 1, - anon_sym_PIPE, - ACTIONS(391), 1, - anon_sym_CARET, - ACTIONS(397), 1, + ACTIONS(505), 1, anon_sym_AMP_AMP, - ACTIONS(399), 1, + ACTIONS(507), 1, anon_sym_PIPE_PIPE, - ACTIONS(401), 1, + ACTIONS(509), 1, anon_sym_CARET_CARET, - ACTIONS(433), 1, - anon_sym_then, - STATE(123), 1, - sym_dictionary_construction, + ACTIONS(511), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(377), 2, + ACTIONS(493), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(385), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(393), 2, + ACTIONS(521), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(523), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [17569] = 10, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(495), 1, + anon_sym_STAR_STAR, + ACTIONS(497), 1, + anon_sym_STAR, + ACTIONS(499), 1, + anon_sym_SLASH, + ACTIONS(505), 1, + anon_sym_AMP_AMP, + ACTIONS(511), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(493), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(519), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(395), 4, + ACTIONS(517), 6, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14123] = 3, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [17608] = 6, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(495), 1, + anon_sym_STAR_STAR, + ACTIONS(511), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(247), 6, + ACTIONS(519), 3, anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(245), 18, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(517), 10, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -13496,1430 +16422,1360 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + [17639] = 9, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(495), 1, + anon_sym_STAR_STAR, + ACTIONS(497), 1, + anon_sym_STAR, + ACTIONS(499), 1, + anon_sym_SLASH, + ACTIONS(511), 1, anon_sym_LPAREN, - [14156] = 14, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(435), 1, - sym_identifier, - ACTIONS(437), 1, - aux_sym_base_ten_token1, - ACTIONS(441), 1, - anon_sym_LPAREN, - STATE(236), 1, - sym_number, - STATE(237), 1, - sym__float, - STATE(245), 1, - sym_formula_expression, - STATE(289), 1, - sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(439), 2, + ACTIONS(493), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(282), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(241), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [14209] = 14, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(435), 1, - sym_identifier, - ACTIONS(441), 1, + ACTIONS(519), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(517), 7, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [17676] = 5, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(519), 1, + anon_sym_STAR, + ACTIONS(525), 1, anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(80), 1, - sym_number, - STATE(258), 1, - sym_formula_expression, - STATE(284), 1, - sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(443), 2, + ACTIONS(517), 10, + anon_sym_COMMA, anon_sym_DASH, anon_sym_PLUS, - STATE(282), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(241), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [14262] = 14, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(435), 1, - sym_identifier, - ACTIONS(437), 1, - aux_sym_base_ten_token1, - ACTIONS(441), 1, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [17702] = 6, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(519), 1, + anon_sym_STAR, + ACTIONS(525), 1, anon_sym_LPAREN, - STATE(236), 1, - sym_number, - STATE(237), 1, - sym__float, - STATE(243), 1, - sym_formula_expression, - STATE(289), 1, - sym_integer, + ACTIONS(527), 1, + anon_sym_STAR_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(439), 2, + ACTIONS(517), 9, + anon_sym_COMMA, anon_sym_DASH, anon_sym_PLUS, - STATE(282), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(241), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [14315] = 14, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(435), 1, - sym_identifier, - ACTIONS(441), 1, + anon_sym_SLASH, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [17730] = 8, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(525), 1, anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(80), 1, - sym_number, - STATE(254), 1, - sym_formula_expression, - STATE(284), 1, - sym_integer, + ACTIONS(527), 1, + anon_sym_STAR_STAR, + ACTIONS(531), 1, + anon_sym_STAR, + ACTIONS(533), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(443), 2, + ACTIONS(529), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(282), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(241), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [14368] = 14, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(435), 1, - sym_identifier, - ACTIONS(441), 1, + ACTIONS(517), 6, + anon_sym_COMMA, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [17762] = 11, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(525), 1, anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(80), 1, - sym_number, - STATE(253), 1, - sym_formula_expression, - STATE(284), 1, - sym_integer, + ACTIONS(527), 1, + anon_sym_STAR_STAR, + ACTIONS(531), 1, + anon_sym_STAR, + ACTIONS(533), 1, + anon_sym_SLASH, + ACTIONS(535), 1, + anon_sym_AMP_AMP, + ACTIONS(537), 1, + anon_sym_PIPE_PIPE, + ACTIONS(539), 1, + anon_sym_CARET_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(443), 2, + ACTIONS(529), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(282), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(241), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [14421] = 14, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(435), 1, - sym_identifier, - ACTIONS(441), 1, + ACTIONS(523), 3, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [17800] = 9, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(525), 1, anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(80), 1, - sym_number, - STATE(240), 1, - sym_formula_expression, - STATE(284), 1, - sym_integer, + ACTIONS(527), 1, + anon_sym_STAR_STAR, + ACTIONS(531), 1, + anon_sym_STAR, + ACTIONS(533), 1, + anon_sym_SLASH, + ACTIONS(535), 1, + anon_sym_AMP_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(443), 2, + ACTIONS(529), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(282), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(241), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [14474] = 14, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(435), 1, - sym_identifier, - ACTIONS(437), 1, - aux_sym_base_ten_token1, - ACTIONS(441), 1, + ACTIONS(517), 5, + anon_sym_COMMA, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [17834] = 10, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(525), 1, anon_sym_LPAREN, - STATE(236), 1, - sym_number, - STATE(237), 1, - sym__float, - STATE(244), 1, - sym_formula_expression, - STATE(289), 1, - sym_integer, + ACTIONS(527), 1, + anon_sym_STAR_STAR, + ACTIONS(531), 1, + anon_sym_STAR, + ACTIONS(533), 1, + anon_sym_SLASH, + ACTIONS(535), 1, + anon_sym_AMP_AMP, + ACTIONS(537), 1, + anon_sym_PIPE_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(439), 2, + ACTIONS(529), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(282), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(241), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [14527] = 14, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(435), 1, - sym_identifier, - ACTIONS(437), 1, - aux_sym_base_ten_token1, - ACTIONS(441), 1, + ACTIONS(517), 4, + anon_sym_COMMA, + anon_sym_CARET_CARET, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [17870] = 7, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(525), 1, anon_sym_LPAREN, - STATE(236), 1, - sym_number, - STATE(237), 1, - sym__float, - STATE(240), 1, - sym_formula_expression, - STATE(289), 1, - sym_integer, + ACTIONS(527), 1, + anon_sym_STAR_STAR, + ACTIONS(531), 1, + anon_sym_STAR, + ACTIONS(533), 1, + anon_sym_SLASH, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(439), 2, + ACTIONS(517), 8, + anon_sym_COMMA, anon_sym_DASH, anon_sym_PLUS, - STATE(282), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(241), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [14580] = 14, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(435), 1, - sym_identifier, - ACTIONS(437), 1, - aux_sym_base_ten_token1, - ACTIONS(441), 1, - anon_sym_LPAREN, - STATE(236), 1, - sym_number, - STATE(237), 1, - sym__float, - STATE(249), 1, - sym_formula_expression, - STATE(289), 1, - sym_integer, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [17900] = 3, + ACTIONS(467), 1, + anon_sym_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(439), 2, + ACTIONS(465), 11, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - STATE(282), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(241), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [14633] = 14, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(435), 1, - sym_identifier, - ACTIONS(441), 1, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(80), 1, - sym_number, - STATE(255), 1, - sym_formula_expression, - STATE(284), 1, - sym_integer, + [17921] = 3, + ACTIONS(463), 1, + anon_sym_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(443), 2, + ACTIONS(461), 11, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - STATE(282), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(241), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [14686] = 14, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(435), 1, - sym_identifier, - ACTIONS(441), 1, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(80), 1, - sym_number, - STATE(252), 1, - sym_formula_expression, - STATE(284), 1, - sym_integer, + [17942] = 3, + ACTIONS(471), 1, + anon_sym_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(443), 2, + ACTIONS(469), 11, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - STATE(282), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(241), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [14739] = 14, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(435), 1, - sym_identifier, - ACTIONS(441), 1, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [17963] = 8, + ACTIONS(541), 1, + anon_sym_COLON_COLON, + ACTIONS(545), 1, + anon_sym_STAR_STAR, + ACTIONS(547), 1, + anon_sym_STAR, + ACTIONS(549), 1, + anon_sym_SLASH, + ACTIONS(551), 1, anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(80), 1, - sym_number, - STATE(251), 1, - sym_formula_expression, - STATE(284), 1, - sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(443), 2, + ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(282), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(241), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [14792] = 14, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(435), 1, - sym_identifier, - ACTIONS(437), 1, - aux_sym_base_ten_token1, - ACTIONS(441), 1, + ACTIONS(517), 5, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [17994] = 9, + ACTIONS(541), 1, + anon_sym_COLON_COLON, + ACTIONS(545), 1, + anon_sym_STAR_STAR, + ACTIONS(547), 1, + anon_sym_STAR, + ACTIONS(549), 1, + anon_sym_SLASH, + ACTIONS(551), 1, anon_sym_LPAREN, - STATE(236), 1, - sym_number, - STATE(237), 1, - sym__float, - STATE(246), 1, - sym_formula_expression, - STATE(289), 1, - sym_integer, + ACTIONS(553), 1, + anon_sym_AMP_AMP, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(439), 2, + ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(282), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(241), 6, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - [14845] = 3, + ACTIONS(517), 4, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [18027] = 10, + ACTIONS(541), 1, + anon_sym_COLON_COLON, + ACTIONS(545), 1, + anon_sym_STAR_STAR, + ACTIONS(547), 1, + anon_sym_STAR, + ACTIONS(549), 1, + anon_sym_SLASH, + ACTIONS(551), 1, + anon_sym_LPAREN, + ACTIONS(553), 1, + anon_sym_AMP_AMP, + ACTIONS(555), 1, + anon_sym_PIPE_PIPE, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(445), 7, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - ACTIONS(82), 12, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, + ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_LT_LT_LT, - [14873] = 4, + ACTIONS(517), 3, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_CARET_CARET, + [18062] = 3, + ACTIONS(491), 1, + anon_sym_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(127), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(125), 4, - sym_identifier, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(123), 10, - sym_unit_quote, - anon_sym_DOT, + ACTIONS(489), 11, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [14900] = 4, - ACTIONS(447), 1, - anon_sym_DOT, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [18083] = 3, + ACTIONS(475), 1, + anon_sym_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(139), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(137), 10, - sym_identifier, - sym_unit_quote, + ACTIONS(473), 11, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [14925] = 5, - STATE(248), 1, - sym__unit, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [18104] = 12, + ACTIONS(541), 1, + anon_sym_COLON_COLON, + ACTIONS(545), 1, + anon_sym_STAR_STAR, + ACTIONS(547), 1, + anon_sym_STAR, + ACTIONS(549), 1, + anon_sym_SLASH, + ACTIONS(551), 1, + anon_sym_LPAREN, + ACTIONS(553), 1, + anon_sym_AMP_AMP, + ACTIONS(555), 1, + anon_sym_PIPE_PIPE, + ACTIONS(557), 1, + anon_sym_COMMA, + ACTIONS(559), 1, + anon_sym_RPAREN_GT, + ACTIONS(561), 1, + anon_sym_CARET_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(449), 2, - sym_identifier, - sym_unit_quote, - ACTIONS(135), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(129), 8, + ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, + [18143] = 12, + ACTIONS(541), 1, + anon_sym_COLON_COLON, + ACTIONS(545), 1, anon_sym_STAR_STAR, + ACTIONS(547), 1, + anon_sym_STAR, + ACTIONS(549), 1, anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [14952] = 3, + ACTIONS(551), 1, + anon_sym_LPAREN, + ACTIONS(553), 1, + anon_sym_AMP_AMP, + ACTIONS(555), 1, + anon_sym_PIPE_PIPE, + ACTIONS(561), 1, + anon_sym_CARET_CARET, + ACTIONS(563), 1, + anon_sym_COMMA, + ACTIONS(565), 1, + anon_sym_RPAREN_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(125), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(123), 10, - sym_identifier, - sym_unit_quote, + ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, + [18182] = 6, + ACTIONS(519), 1, + anon_sym_STAR, + ACTIONS(541), 1, + anon_sym_COLON_COLON, + ACTIONS(545), 1, anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [14974] = 3, + ACTIONS(551), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(145), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(143), 10, - sym_identifier, - sym_unit_quote, + ACTIONS(517), 8, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [14996] = 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [18209] = 3, + ACTIONS(479), 1, + anon_sym_STAR, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(453), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(451), 10, + ACTIONS(477), 11, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [15018] = 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [18230] = 7, + ACTIONS(541), 1, + anon_sym_COLON_COLON, + ACTIONS(545), 1, + anon_sym_STAR_STAR, + ACTIONS(547), 1, + anon_sym_STAR, + ACTIONS(549), 1, + anon_sym_SLASH, + ACTIONS(551), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(457), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(455), 10, + ACTIONS(517), 7, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [15040] = 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [18259] = 5, + ACTIONS(519), 1, + anon_sym_STAR, + ACTIONS(541), 1, + anon_sym_COLON_COLON, + ACTIONS(551), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(461), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(459), 10, + ACTIONS(517), 9, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [15062] = 7, - ACTIONS(465), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [18284] = 12, + ACTIONS(541), 1, + anon_sym_COLON_COLON, + ACTIONS(545), 1, anon_sym_STAR_STAR, - ACTIONS(467), 1, + ACTIONS(547), 1, anon_sym_STAR, - ACTIONS(469), 1, + ACTIONS(549), 1, anon_sym_SLASH, + ACTIONS(551), 1, + anon_sym_LPAREN, + ACTIONS(553), 1, + anon_sym_AMP_AMP, + ACTIONS(555), 1, + anon_sym_PIPE_PIPE, + ACTIONS(561), 1, + anon_sym_CARET_CARET, + ACTIONS(567), 1, + anon_sym_COMMA, + ACTIONS(569), 1, + anon_sym_RPAREN_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(463), 2, + ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(471), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(473), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15090] = 6, - ACTIONS(465), 1, + [18323] = 11, + ACTIONS(541), 1, + anon_sym_COLON_COLON, + ACTIONS(545), 1, anon_sym_STAR_STAR, - ACTIONS(467), 1, + ACTIONS(547), 1, anon_sym_STAR, - ACTIONS(469), 1, + ACTIONS(549), 1, anon_sym_SLASH, + ACTIONS(551), 1, + anon_sym_LPAREN, + ACTIONS(553), 1, + anon_sym_AMP_AMP, + ACTIONS(555), 1, + anon_sym_PIPE_PIPE, + ACTIONS(561), 1, + anon_sym_CARET_CARET, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(453), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(451), 6, + ACTIONS(523), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15116] = 7, - ACTIONS(465), 1, + [18360] = 12, + ACTIONS(541), 1, + anon_sym_COLON_COLON, + ACTIONS(545), 1, anon_sym_STAR_STAR, - ACTIONS(467), 1, + ACTIONS(547), 1, anon_sym_STAR, - ACTIONS(469), 1, + ACTIONS(549), 1, anon_sym_SLASH, + ACTIONS(551), 1, + anon_sym_LPAREN, + ACTIONS(553), 1, + anon_sym_AMP_AMP, + ACTIONS(555), 1, + anon_sym_PIPE_PIPE, + ACTIONS(561), 1, + anon_sym_CARET_CARET, + ACTIONS(571), 1, + anon_sym_COMMA, + ACTIONS(573), 1, + anon_sym_RPAREN_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(463), 2, + ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(475), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(477), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15144] = 7, - ACTIONS(465), 1, - anon_sym_STAR_STAR, - ACTIONS(467), 1, + [18399] = 4, + ACTIONS(485), 1, anon_sym_STAR, - ACTIONS(469), 1, - anon_sym_SLASH, + ACTIONS(541), 1, + anon_sym_COLON_COLON, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(463), 2, + ACTIONS(481), 10, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(479), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(481), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15172] = 3, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [18422] = 11, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(525), 1, + anon_sym_LPAREN, + ACTIONS(527), 1, + anon_sym_STAR_STAR, + ACTIONS(531), 1, + anon_sym_STAR, + ACTIONS(533), 1, + anon_sym_SLASH, + ACTIONS(535), 1, + anon_sym_AMP_AMP, + ACTIONS(537), 1, + anon_sym_PIPE_PIPE, + ACTIONS(539), 1, + anon_sym_CARET_CARET, + ACTIONS(575), 1, + anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(171), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(169), 8, + ACTIONS(529), 2, anon_sym_DASH, anon_sym_PLUS, + [18458] = 11, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(525), 1, + anon_sym_LPAREN, + ACTIONS(527), 1, anon_sym_STAR_STAR, + ACTIONS(531), 1, + anon_sym_STAR, + ACTIONS(533), 1, anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15192] = 3, + ACTIONS(535), 1, + anon_sym_AMP_AMP, + ACTIONS(537), 1, + anon_sym_PIPE_PIPE, + ACTIONS(539), 1, + anon_sym_CARET_CARET, + ACTIONS(577), 1, + anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(175), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(173), 8, + ACTIONS(529), 2, anon_sym_DASH, anon_sym_PLUS, + [18494] = 11, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(525), 1, + anon_sym_LPAREN, + ACTIONS(527), 1, anon_sym_STAR_STAR, + ACTIONS(531), 1, + anon_sym_STAR, + ACTIONS(533), 1, anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15212] = 4, - ACTIONS(465), 1, - anon_sym_STAR_STAR, + ACTIONS(535), 1, + anon_sym_AMP_AMP, + ACTIONS(537), 1, + anon_sym_PIPE_PIPE, + ACTIONS(539), 1, + anon_sym_CARET_CARET, + ACTIONS(579), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(453), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(451), 7, + ACTIONS(529), 2, anon_sym_DASH, anon_sym_PLUS, + [18530] = 11, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(525), 1, + anon_sym_LPAREN, + ACTIONS(527), 1, + anon_sym_STAR_STAR, + ACTIONS(531), 1, + anon_sym_STAR, + ACTIONS(533), 1, anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15234] = 3, + ACTIONS(535), 1, + anon_sym_AMP_AMP, + ACTIONS(537), 1, + anon_sym_PIPE_PIPE, + ACTIONS(539), 1, + anon_sym_CARET_CARET, + ACTIONS(581), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 3, + ACTIONS(529), 2, + anon_sym_DASH, + anon_sym_PLUS, + [18566] = 11, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(525), 1, + anon_sym_LPAREN, + ACTIONS(527), 1, + anon_sym_STAR_STAR, + ACTIONS(531), 1, anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(165), 8, + ACTIONS(533), 1, + anon_sym_SLASH, + ACTIONS(535), 1, + anon_sym_AMP_AMP, + ACTIONS(537), 1, + anon_sym_PIPE_PIPE, + ACTIONS(539), 1, + anon_sym_CARET_CARET, + ACTIONS(583), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(529), 2, anon_sym_DASH, anon_sym_PLUS, + [18602] = 11, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(525), 1, + anon_sym_LPAREN, + ACTIONS(527), 1, anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15254] = 6, - ACTIONS(485), 1, - anon_sym_STAR_STAR, - ACTIONS(487), 1, + ACTIONS(531), 1, anon_sym_STAR, - ACTIONS(489), 1, + ACTIONS(533), 1, anon_sym_SLASH, + ACTIONS(535), 1, + anon_sym_AMP_AMP, + ACTIONS(537), 1, + anon_sym_PIPE_PIPE, + ACTIONS(539), 1, + anon_sym_CARET_CARET, + ACTIONS(585), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(473), 2, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - ACTIONS(483), 2, + ACTIONS(529), 2, anon_sym_DASH, anon_sym_PLUS, - [15276] = 4, - ACTIONS(453), 1, - anon_sym_STAR, - ACTIONS(485), 1, + [18638] = 11, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(525), 1, + anon_sym_LPAREN, + ACTIONS(527), 1, anon_sym_STAR_STAR, + ACTIONS(531), 1, + anon_sym_STAR, + ACTIONS(533), 1, + anon_sym_SLASH, + ACTIONS(535), 1, + anon_sym_AMP_AMP, + ACTIONS(537), 1, + anon_sym_PIPE_PIPE, + ACTIONS(539), 1, + anon_sym_CARET_CARET, + ACTIONS(587), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(451), 5, + ACTIONS(529), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [15294] = 5, - ACTIONS(485), 1, + [18674] = 11, + ACTIONS(541), 1, + anon_sym_COLON_COLON, + ACTIONS(545), 1, anon_sym_STAR_STAR, - ACTIONS(487), 1, + ACTIONS(547), 1, anon_sym_STAR, - ACTIONS(489), 1, + ACTIONS(549), 1, anon_sym_SLASH, + ACTIONS(551), 1, + anon_sym_LPAREN, + ACTIONS(553), 1, + anon_sym_AMP_AMP, + ACTIONS(555), 1, + anon_sym_PIPE_PIPE, + ACTIONS(561), 1, + anon_sym_CARET_CARET, + ACTIONS(589), 1, + anon_sym_RPAREN_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(451), 4, + ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [15314] = 6, - ACTIONS(485), 1, + [18710] = 11, + ACTIONS(541), 1, + anon_sym_COLON_COLON, + ACTIONS(545), 1, anon_sym_STAR_STAR, - ACTIONS(487), 1, + ACTIONS(547), 1, anon_sym_STAR, - ACTIONS(489), 1, + ACTIONS(549), 1, anon_sym_SLASH, - ACTIONS(491), 1, - anon_sym_RPAREN, + ACTIONS(551), 1, + anon_sym_LPAREN, + ACTIONS(553), 1, + anon_sym_AMP_AMP, + ACTIONS(555), 1, + anon_sym_PIPE_PIPE, + ACTIONS(561), 1, + anon_sym_CARET_CARET, + ACTIONS(591), 1, + anon_sym_RPAREN_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(483), 2, + ACTIONS(543), 2, anon_sym_DASH, anon_sym_PLUS, - [15335] = 6, - ACTIONS(485), 1, + [18746] = 11, + ACTIONS(483), 1, + anon_sym_COLON_COLON, + ACTIONS(525), 1, + anon_sym_LPAREN, + ACTIONS(527), 1, anon_sym_STAR_STAR, - ACTIONS(487), 1, + ACTIONS(531), 1, anon_sym_STAR, - ACTIONS(489), 1, + ACTIONS(533), 1, anon_sym_SLASH, - ACTIONS(493), 1, - anon_sym_GT_GT_GT, + ACTIONS(535), 1, + anon_sym_AMP_AMP, + ACTIONS(537), 1, + anon_sym_PIPE_PIPE, + ACTIONS(539), 1, + anon_sym_CARET_CARET, + ACTIONS(593), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(483), 2, + ACTIONS(529), 2, anon_sym_DASH, anon_sym_PLUS, - [15356] = 7, + [18782] = 7, ACTIONS(37), 1, sym_varadic_dots, - ACTIONS(495), 1, + ACTIONS(595), 1, sym_identifier, - ACTIONS(497), 1, + ACTIONS(597), 1, anon_sym_RPAREN, - STATE(259), 1, + STATE(324), 1, aux_sym_struct_definition_repeat1, - STATE(292), 1, + STATE(350), 1, sym_struct_member, - STATE(307), 1, + STATE(365), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15379] = 7, + [18805] = 7, ACTIONS(37), 1, sym_varadic_dots, - ACTIONS(495), 1, + ACTIONS(595), 1, sym_identifier, - ACTIONS(499), 1, + ACTIONS(599), 1, anon_sym_RPAREN, - STATE(259), 1, + STATE(324), 1, aux_sym_struct_definition_repeat1, - STATE(292), 1, + STATE(350), 1, sym_struct_member, - STATE(312), 1, + STATE(370), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15402] = 6, - ACTIONS(485), 1, - anon_sym_STAR_STAR, - ACTIONS(487), 1, - anon_sym_STAR, - ACTIONS(489), 1, - anon_sym_SLASH, - ACTIONS(501), 1, - anon_sym_GT_GT_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(483), 2, - anon_sym_DASH, - anon_sym_PLUS, - [15423] = 5, - ACTIONS(503), 1, + [18828] = 5, + ACTIONS(601), 1, sym_identifier, - STATE(259), 1, + STATE(324), 1, aux_sym_struct_definition_repeat1, - STATE(310), 1, + STATE(383), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(506), 2, + ACTIONS(604), 2, anon_sym_RPAREN, sym_varadic_dots, - [15441] = 4, - ACTIONS(508), 1, + [18846] = 4, + ACTIONS(606), 1, sym_identifier, - ACTIONS(510), 1, + ACTIONS(608), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(264), 2, + STATE(331), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15456] = 4, - ACTIONS(508), 1, + [18861] = 4, + ACTIONS(606), 1, sym_identifier, - ACTIONS(512), 1, + ACTIONS(610), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(260), 2, + STATE(331), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15471] = 4, - ACTIONS(508), 1, + [18876] = 4, + ACTIONS(606), 1, sym_identifier, - ACTIONS(514), 1, + ACTIONS(612), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(264), 2, + STATE(329), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15486] = 4, - ACTIONS(508), 1, + [18891] = 4, + ACTIONS(606), 1, sym_identifier, - ACTIONS(516), 1, + ACTIONS(614), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(264), 2, + STATE(326), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15501] = 4, - ACTIONS(518), 1, + [18906] = 4, + ACTIONS(606), 1, sym_identifier, - ACTIONS(521), 1, + ACTIONS(616), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(264), 2, + STATE(331), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15516] = 4, - ACTIONS(508), 1, + [18921] = 4, + ACTIONS(606), 1, sym_identifier, - ACTIONS(523), 1, + ACTIONS(618), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(263), 2, + STATE(325), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15531] = 4, - ACTIONS(508), 1, + [18936] = 4, + ACTIONS(620), 1, sym_identifier, - ACTIONS(525), 1, + ACTIONS(623), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(262), 2, + STATE(331), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [15546] = 3, - ACTIONS(529), 1, - anon_sym_EQ, + [18951] = 4, + ACTIONS(625), 1, + sym_identifier, + ACTIONS(627), 1, + anon_sym_RPAREN, + STATE(346), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(527), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - [15558] = 4, - ACTIONS(531), 1, + [18965] = 4, + ACTIONS(629), 1, anon_sym_COMMA, - ACTIONS(533), 1, + ACTIONS(632), 1, anon_sym_RPAREN, - STATE(279), 1, + STATE(333), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15572] = 4, - ACTIONS(535), 1, + [18979] = 4, + ACTIONS(625), 1, sym_identifier, - ACTIONS(537), 1, + ACTIONS(634), 1, anon_sym_RPAREN, - STATE(285), 1, + STATE(346), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15586] = 4, - ACTIONS(539), 1, + [18993] = 4, + ACTIONS(625), 1, + sym_identifier, + ACTIONS(636), 1, + anon_sym_RPAREN, + STATE(346), 1, + sym_dictionary_member_assignment, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [19007] = 4, + ACTIONS(638), 1, anon_sym_COMMA, - ACTIONS(542), 1, + ACTIONS(640), 1, anon_sym_RPAREN, - STATE(270), 1, + STATE(333), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15600] = 4, - ACTIONS(535), 1, - sym_identifier, - ACTIONS(544), 1, + [19021] = 4, + ACTIONS(642), 1, + anon_sym_COMMA, + ACTIONS(644), 1, anon_sym_RPAREN, - STATE(268), 1, - sym_dictionary_member_assignment, + STATE(342), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15614] = 4, - ACTIONS(546), 1, + [19035] = 4, + ACTIONS(646), 1, anon_sym_COMMA, - ACTIONS(548), 1, + ACTIONS(648), 1, anon_sym_RPAREN, - STATE(274), 1, + STATE(336), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15628] = 2, + [19049] = 3, + ACTIONS(652), 1, + anon_sym_EQ, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(650), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + [19061] = 4, + ACTIONS(625), 1, + sym_identifier, + ACTIONS(654), 1, + anon_sym_RPAREN, + STATE(337), 1, + sym_dictionary_member_assignment, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [19075] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(506), 3, + ACTIONS(604), 3, sym_identifier, anon_sym_RPAREN, sym_varadic_dots, - [15638] = 4, - ACTIONS(550), 1, - anon_sym_COMMA, - ACTIONS(552), 1, + [19085] = 4, + ACTIONS(627), 1, anon_sym_RPAREN, - STATE(270), 1, + ACTIONS(656), 1, + anon_sym_COMMA, + STATE(333), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15652] = 4, - ACTIONS(535), 1, + [19099] = 4, + ACTIONS(625), 1, sym_identifier, - ACTIONS(552), 1, + ACTIONS(658), 1, anon_sym_RPAREN, - STATE(285), 1, + STATE(338), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15666] = 4, - ACTIONS(535), 1, + [19113] = 4, + ACTIONS(625), 1, sym_identifier, - ACTIONS(554), 1, + ACTIONS(640), 1, anon_sym_RPAREN, - STATE(285), 1, + STATE(346), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15680] = 4, - ACTIONS(535), 1, - sym_identifier, - ACTIONS(556), 1, - anon_sym_RPAREN, - STATE(285), 1, - sym_dictionary_member_assignment, + [19127] = 3, + ACTIONS(660), 1, + anon_sym_COLON, + STATE(339), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15694] = 4, - ACTIONS(535), 1, - sym_identifier, - ACTIONS(558), 1, + [19138] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(632), 2, + anon_sym_COMMA, anon_sym_RPAREN, - STATE(272), 1, + [19147] = 3, + ACTIONS(625), 1, + sym_identifier, + STATE(346), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15708] = 4, - ACTIONS(556), 1, - anon_sym_RPAREN, - ACTIONS(560), 1, - anon_sym_COMMA, - STATE(270), 1, - aux_sym_dictionary_construction_repeat1, + [19158] = 3, + ACTIONS(367), 1, + anon_sym_LPAREN, + STATE(226), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15722] = 2, + [19169] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(562), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [15731] = 3, - ACTIONS(333), 1, - anon_sym_LPAREN, - STATE(220), 1, - sym_dictionary_construction, + ACTIONS(662), 2, + sym_identifier, + anon_sym_in, + [19178] = 3, + ACTIONS(664), 1, + anon_sym_COMMA, + ACTIONS(666), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15742] = 2, + [19189] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(564), 2, + ACTIONS(668), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [15751] = 2, + [19198] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(566), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [15760] = 3, - ACTIONS(568), 1, + ACTIONS(670), 2, aux_sym_signed_integer_token1, - ACTIONS(570), 1, aux_sym_unsigned_integer_token1, + [19207] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15771] = 2, + ACTIONS(672), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [19216] = 3, + ACTIONS(674), 1, + aux_sym_signed_integer_token1, + ACTIONS(676), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(542), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - [15780] = 3, - ACTIONS(572), 1, + [19227] = 3, + ACTIONS(678), 1, aux_sym_signed_integer_token1, - ACTIONS(574), 1, + ACTIONS(680), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15791] = 3, - ACTIONS(576), 1, - aux_sym_base_ten_token1, - STATE(239), 1, - sym_number, + [19238] = 3, + ACTIONS(175), 1, + anon_sym_LPAREN, + STATE(149), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15802] = 2, + [19249] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(578), 2, + ACTIONS(682), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [15811] = 3, - ACTIONS(580), 1, + [19258] = 3, + ACTIONS(684), 1, + aux_sym_base_ten_token1, + STATE(265), 1, + sym_number, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [19269] = 3, + ACTIONS(686), 1, aux_sym_signed_integer_token1, - ACTIONS(582), 1, + ACTIONS(688), 1, aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15822] = 3, - ACTIONS(584), 1, + [19280] = 3, + ACTIONS(690), 1, aux_sym_base_ten_token1, - STATE(128), 1, + STATE(171), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15833] = 2, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(586), 2, - sym_identifier, - anon_sym_in, - [15842] = 3, - ACTIONS(588), 1, - anon_sym_COMMA, - ACTIONS(590), 1, + [19291] = 3, + ACTIONS(666), 1, anon_sym_RPAREN, + ACTIONS(692), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15853] = 3, - ACTIONS(185), 1, - anon_sym_LPAREN, - STATE(110), 1, - sym_dictionary_construction, + [19302] = 3, + ACTIONS(694), 1, + aux_sym_base_ten_token1, + STATE(81), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15864] = 3, - ACTIONS(592), 1, + [19313] = 3, + ACTIONS(696), 1, aux_sym_base_ten_token1, - STATE(146), 1, + STATE(190), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15875] = 3, - ACTIONS(590), 1, - anon_sym_RPAREN, - ACTIONS(594), 1, - anon_sym_COMMA, + [19324] = 2, + ACTIONS(698), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15886] = 3, - ACTIONS(535), 1, - sym_identifier, - STATE(285), 1, - sym_dictionary_member_assignment, + [19332] = 2, + ACTIONS(700), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15897] = 3, - ACTIONS(596), 1, - aux_sym_base_ten_token1, - STATE(82), 1, - sym_number, + [19340] = 2, + ACTIONS(702), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15908] = 3, - ACTIONS(598), 1, - anon_sym_COLON, - STATE(267), 1, - sym_declaration_type, + [19348] = 2, + ACTIONS(704), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15919] = 2, - ACTIONS(600), 1, - anon_sym_EQ, + [19356] = 2, + ACTIONS(706), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15927] = 2, - ACTIONS(602), 1, - aux_sym_base_ten_token1, + [19364] = 2, + ACTIONS(708), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15935] = 2, - ACTIONS(604), 1, + [19372] = 2, + ACTIONS(710), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15943] = 2, - ACTIONS(606), 1, + [19380] = 2, + ACTIONS(712), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15951] = 2, - ACTIONS(608), 1, - anon_sym_RPAREN, + [19388] = 2, + ACTIONS(714), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15959] = 2, - ACTIONS(610), 1, - aux_sym_hex_token2, + [19396] = 2, + ACTIONS(716), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15967] = 2, - ACTIONS(612), 1, - anon_sym_EQ, + [19404] = 2, + ACTIONS(718), 1, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15975] = 2, - ACTIONS(614), 1, + [19412] = 2, + ACTIONS(720), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15983] = 2, - ACTIONS(616), 1, - anon_sym_RPAREN, + [19420] = 2, + ACTIONS(722), 1, + anon_sym_LPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15991] = 2, - ACTIONS(618), 1, - sym_identifier, + [19428] = 2, + ACTIONS(724), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [15999] = 2, - ACTIONS(620), 1, + [19436] = 2, + ACTIONS(726), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16007] = 2, - ACTIONS(588), 1, - anon_sym_COMMA, + [19444] = 2, + ACTIONS(728), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16015] = 2, - ACTIONS(622), 1, - aux_sym_binary_token2, + [19452] = 2, + ACTIONS(730), 1, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16023] = 2, - ACTIONS(624), 1, - anon_sym_RPAREN, + [19460] = 2, + ACTIONS(732), 1, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16031] = 2, - ACTIONS(626), 1, - ts_builtin_sym_end, + [19468] = 2, + ACTIONS(734), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [16039] = 2, - ACTIONS(628), 1, - sym_identifier, + [19476] = 2, + ACTIONS(664), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -15003,550 +17859,672 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(78)] = 6912, [SMALL_STATE(79)] = 6958, [SMALL_STATE(80)] = 7007, - [SMALL_STATE(81)] = 7051, - [SMALL_STATE(82)] = 7093, + [SMALL_STATE(81)] = 7049, + [SMALL_STATE(82)] = 7091, [SMALL_STATE(83)] = 7135, - [SMALL_STATE(84)] = 7178, - [SMALL_STATE(85)] = 7219, - [SMALL_STATE(86)] = 7260, - [SMALL_STATE(87)] = 7301, - [SMALL_STATE(88)] = 7342, - [SMALL_STATE(89)] = 7383, - [SMALL_STATE(90)] = 7424, - [SMALL_STATE(91)] = 7473, - [SMALL_STATE(92)] = 7547, - [SMALL_STATE(93)] = 7621, - [SMALL_STATE(94)] = 7695, - [SMALL_STATE(95)] = 7735, - [SMALL_STATE(96)] = 7789, - [SMALL_STATE(97)] = 7829, - [SMALL_STATE(98)] = 7879, - [SMALL_STATE(99)] = 7935, - [SMALL_STATE(100)] = 7993, - [SMALL_STATE(101)] = 8055, - [SMALL_STATE(102)] = 8115, - [SMALL_STATE(103)] = 8179, - [SMALL_STATE(104)] = 8247, - [SMALL_STATE(105)] = 8317, - [SMALL_STATE(106)] = 8389, - [SMALL_STATE(107)] = 8429, - [SMALL_STATE(108)] = 8503, - [SMALL_STATE(109)] = 8543, - [SMALL_STATE(110)] = 8583, - [SMALL_STATE(111)] = 8623, - [SMALL_STATE(112)] = 8663, - [SMALL_STATE(113)] = 8705, - [SMALL_STATE(114)] = 8745, - [SMALL_STATE(115)] = 8785, - [SMALL_STATE(116)] = 8825, - [SMALL_STATE(117)] = 8865, - [SMALL_STATE(118)] = 8905, - [SMALL_STATE(119)] = 8979, - [SMALL_STATE(120)] = 9019, - [SMALL_STATE(121)] = 9059, - [SMALL_STATE(122)] = 9099, - [SMALL_STATE(123)] = 9139, - [SMALL_STATE(124)] = 9179, - [SMALL_STATE(125)] = 9218, - [SMALL_STATE(126)] = 9256, - [SMALL_STATE(127)] = 9296, - [SMALL_STATE(128)] = 9337, - [SMALL_STATE(129)] = 9372, - [SMALL_STATE(130)] = 9413, - [SMALL_STATE(131)] = 9450, - [SMALL_STATE(132)] = 9519, - [SMALL_STATE(133)] = 9554, - [SMALL_STATE(134)] = 9590, - [SMALL_STATE(135)] = 9648, - [SMALL_STATE(136)] = 9708, - [SMALL_STATE(137)] = 9770, - [SMALL_STATE(138)] = 9834, - [SMALL_STATE(139)] = 9900, - [SMALL_STATE(140)] = 9966, - [SMALL_STATE(141)] = 10000, - [SMALL_STATE(142)] = 10066, - [SMALL_STATE(143)] = 10132, - [SMALL_STATE(144)] = 10166, - [SMALL_STATE(145)] = 10200, - [SMALL_STATE(146)] = 10268, - [SMALL_STATE(147)] = 10302, - [SMALL_STATE(148)] = 10368, - [SMALL_STATE(149)] = 10410, - [SMALL_STATE(150)] = 10446, - [SMALL_STATE(151)] = 10514, - [SMALL_STATE(152)] = 10582, - [SMALL_STATE(153)] = 10650, - [SMALL_STATE(154)] = 10718, - [SMALL_STATE(155)] = 10786, - [SMALL_STATE(156)] = 10820, - [SMALL_STATE(157)] = 10868, - [SMALL_STATE(158)] = 10912, - [SMALL_STATE(159)] = 10962, - [SMALL_STATE(160)] = 11014, - [SMALL_STATE(161)] = 11082, - [SMALL_STATE(162)] = 11138, - [SMALL_STATE(163)] = 11192, - [SMALL_STATE(164)] = 11228, - [SMALL_STATE(165)] = 11294, - [SMALL_STATE(166)] = 11362, - [SMALL_STATE(167)] = 11428, - [SMALL_STATE(168)] = 11493, - [SMALL_STATE(169)] = 11558, - [SMALL_STATE(170)] = 11623, - [SMALL_STATE(171)] = 11656, - [SMALL_STATE(172)] = 11721, - [SMALL_STATE(173)] = 11754, - [SMALL_STATE(174)] = 11787, - [SMALL_STATE(175)] = 11820, - [SMALL_STATE(176)] = 11853, - [SMALL_STATE(177)] = 11900, - [SMALL_STATE(178)] = 11943, - [SMALL_STATE(179)] = 11992, - [SMALL_STATE(180)] = 12043, - [SMALL_STATE(181)] = 12098, - [SMALL_STATE(182)] = 12151, - [SMALL_STATE(183)] = 12208, - [SMALL_STATE(184)] = 12267, - [SMALL_STATE(185)] = 12328, - [SMALL_STATE(186)] = 12391, - [SMALL_STATE(187)] = 12424, - [SMALL_STATE(188)] = 12489, - [SMALL_STATE(189)] = 12522, - [SMALL_STATE(190)] = 12587, - [SMALL_STATE(191)] = 12620, - [SMALL_STATE(192)] = 12685, - [SMALL_STATE(193)] = 12750, - [SMALL_STATE(194)] = 12783, - [SMALL_STATE(195)] = 12816, - [SMALL_STATE(196)] = 12849, - [SMALL_STATE(197)] = 12914, - [SMALL_STATE(198)] = 12979, - [SMALL_STATE(199)] = 13012, - [SMALL_STATE(200)] = 13045, - [SMALL_STATE(201)] = 13110, - [SMALL_STATE(202)] = 13175, - [SMALL_STATE(203)] = 13208, - [SMALL_STATE(204)] = 13241, - [SMALL_STATE(205)] = 13274, - [SMALL_STATE(206)] = 13339, - [SMALL_STATE(207)] = 13404, - [SMALL_STATE(208)] = 13469, - [SMALL_STATE(209)] = 13502, - [SMALL_STATE(210)] = 13567, - [SMALL_STATE(211)] = 13632, - [SMALL_STATE(212)] = 13665, - [SMALL_STATE(213)] = 13730, - [SMALL_STATE(214)] = 13795, - [SMALL_STATE(215)] = 13860, - [SMALL_STATE(216)] = 13925, - [SMALL_STATE(217)] = 13958, - [SMALL_STATE(218)] = 13993, - [SMALL_STATE(219)] = 14058, - [SMALL_STATE(220)] = 14123, - [SMALL_STATE(221)] = 14156, - [SMALL_STATE(222)] = 14209, - [SMALL_STATE(223)] = 14262, - [SMALL_STATE(224)] = 14315, - [SMALL_STATE(225)] = 14368, - [SMALL_STATE(226)] = 14421, - [SMALL_STATE(227)] = 14474, - [SMALL_STATE(228)] = 14527, - [SMALL_STATE(229)] = 14580, - [SMALL_STATE(230)] = 14633, - [SMALL_STATE(231)] = 14686, - [SMALL_STATE(232)] = 14739, - [SMALL_STATE(233)] = 14792, - [SMALL_STATE(234)] = 14845, - [SMALL_STATE(235)] = 14873, - [SMALL_STATE(236)] = 14900, - [SMALL_STATE(237)] = 14925, - [SMALL_STATE(238)] = 14952, - [SMALL_STATE(239)] = 14974, - [SMALL_STATE(240)] = 14996, - [SMALL_STATE(241)] = 15018, - [SMALL_STATE(242)] = 15040, - [SMALL_STATE(243)] = 15062, - [SMALL_STATE(244)] = 15090, - [SMALL_STATE(245)] = 15116, - [SMALL_STATE(246)] = 15144, - [SMALL_STATE(247)] = 15172, - [SMALL_STATE(248)] = 15192, - [SMALL_STATE(249)] = 15212, - [SMALL_STATE(250)] = 15234, - [SMALL_STATE(251)] = 15254, - [SMALL_STATE(252)] = 15276, - [SMALL_STATE(253)] = 15294, - [SMALL_STATE(254)] = 15314, - [SMALL_STATE(255)] = 15335, - [SMALL_STATE(256)] = 15356, - [SMALL_STATE(257)] = 15379, - [SMALL_STATE(258)] = 15402, - [SMALL_STATE(259)] = 15423, - [SMALL_STATE(260)] = 15441, - [SMALL_STATE(261)] = 15456, - [SMALL_STATE(262)] = 15471, - [SMALL_STATE(263)] = 15486, - [SMALL_STATE(264)] = 15501, - [SMALL_STATE(265)] = 15516, - [SMALL_STATE(266)] = 15531, - [SMALL_STATE(267)] = 15546, - [SMALL_STATE(268)] = 15558, - [SMALL_STATE(269)] = 15572, - [SMALL_STATE(270)] = 15586, - [SMALL_STATE(271)] = 15600, - [SMALL_STATE(272)] = 15614, - [SMALL_STATE(273)] = 15628, - [SMALL_STATE(274)] = 15638, - [SMALL_STATE(275)] = 15652, - [SMALL_STATE(276)] = 15666, - [SMALL_STATE(277)] = 15680, - [SMALL_STATE(278)] = 15694, - [SMALL_STATE(279)] = 15708, - [SMALL_STATE(280)] = 15722, - [SMALL_STATE(281)] = 15731, - [SMALL_STATE(282)] = 15742, - [SMALL_STATE(283)] = 15751, - [SMALL_STATE(284)] = 15760, - [SMALL_STATE(285)] = 15771, - [SMALL_STATE(286)] = 15780, - [SMALL_STATE(287)] = 15791, - [SMALL_STATE(288)] = 15802, - [SMALL_STATE(289)] = 15811, - [SMALL_STATE(290)] = 15822, - [SMALL_STATE(291)] = 15833, - [SMALL_STATE(292)] = 15842, - [SMALL_STATE(293)] = 15853, - [SMALL_STATE(294)] = 15864, - [SMALL_STATE(295)] = 15875, - [SMALL_STATE(296)] = 15886, - [SMALL_STATE(297)] = 15897, - [SMALL_STATE(298)] = 15908, - [SMALL_STATE(299)] = 15919, - [SMALL_STATE(300)] = 15927, - [SMALL_STATE(301)] = 15935, - [SMALL_STATE(302)] = 15943, - [SMALL_STATE(303)] = 15951, - [SMALL_STATE(304)] = 15959, - [SMALL_STATE(305)] = 15967, - [SMALL_STATE(306)] = 15975, - [SMALL_STATE(307)] = 15983, - [SMALL_STATE(308)] = 15991, - [SMALL_STATE(309)] = 15999, - [SMALL_STATE(310)] = 16007, - [SMALL_STATE(311)] = 16015, - [SMALL_STATE(312)] = 16023, - [SMALL_STATE(313)] = 16031, - [SMALL_STATE(314)] = 16039, + [SMALL_STATE(84)] = 7202, + [SMALL_STATE(85)] = 7269, + [SMALL_STATE(86)] = 7336, + [SMALL_STATE(87)] = 7403, + [SMALL_STATE(88)] = 7470, + [SMALL_STATE(89)] = 7537, + [SMALL_STATE(90)] = 7604, + [SMALL_STATE(91)] = 7671, + [SMALL_STATE(92)] = 7738, + [SMALL_STATE(93)] = 7805, + [SMALL_STATE(94)] = 7848, + [SMALL_STATE(95)] = 7897, + [SMALL_STATE(96)] = 7938, + [SMALL_STATE(97)] = 8005, + [SMALL_STATE(98)] = 8072, + [SMALL_STATE(99)] = 8139, + [SMALL_STATE(100)] = 8206, + [SMALL_STATE(101)] = 8273, + [SMALL_STATE(102)] = 8340, + [SMALL_STATE(103)] = 8407, + [SMALL_STATE(104)] = 8474, + [SMALL_STATE(105)] = 8515, + [SMALL_STATE(106)] = 8556, + [SMALL_STATE(107)] = 8597, + [SMALL_STATE(108)] = 8664, + [SMALL_STATE(109)] = 8731, + [SMALL_STATE(110)] = 8798, + [SMALL_STATE(111)] = 8865, + [SMALL_STATE(112)] = 8932, + [SMALL_STATE(113)] = 8999, + [SMALL_STATE(114)] = 9040, + [SMALL_STATE(115)] = 9107, + [SMALL_STATE(116)] = 9174, + [SMALL_STATE(117)] = 9215, + [SMALL_STATE(118)] = 9282, + [SMALL_STATE(119)] = 9349, + [SMALL_STATE(120)] = 9416, + [SMALL_STATE(121)] = 9483, + [SMALL_STATE(122)] = 9550, + [SMALL_STATE(123)] = 9617, + [SMALL_STATE(124)] = 9684, + [SMALL_STATE(125)] = 9751, + [SMALL_STATE(126)] = 9818, + [SMALL_STATE(127)] = 9885, + [SMALL_STATE(128)] = 9952, + [SMALL_STATE(129)] = 10019, + [SMALL_STATE(130)] = 10086, + [SMALL_STATE(131)] = 10127, + [SMALL_STATE(132)] = 10194, + [SMALL_STATE(133)] = 10236, + [SMALL_STATE(134)] = 10292, + [SMALL_STATE(135)] = 10350, + [SMALL_STATE(136)] = 10412, + [SMALL_STATE(137)] = 10472, + [SMALL_STATE(138)] = 10536, + [SMALL_STATE(139)] = 10604, + [SMALL_STATE(140)] = 10674, + [SMALL_STATE(141)] = 10746, + [SMALL_STATE(142)] = 10786, + [SMALL_STATE(143)] = 10860, + [SMALL_STATE(144)] = 10900, + [SMALL_STATE(145)] = 10940, + [SMALL_STATE(146)] = 10980, + [SMALL_STATE(147)] = 11020, + [SMALL_STATE(148)] = 11060, + [SMALL_STATE(149)] = 11100, + [SMALL_STATE(150)] = 11140, + [SMALL_STATE(151)] = 11180, + [SMALL_STATE(152)] = 11220, + [SMALL_STATE(153)] = 11274, + [SMALL_STATE(154)] = 11314, + [SMALL_STATE(155)] = 11388, + [SMALL_STATE(156)] = 11462, + [SMALL_STATE(157)] = 11536, + [SMALL_STATE(158)] = 11610, + [SMALL_STATE(159)] = 11650, + [SMALL_STATE(160)] = 11690, + [SMALL_STATE(161)] = 11730, + [SMALL_STATE(162)] = 11780, + [SMALL_STATE(163)] = 11820, + [SMALL_STATE(164)] = 11860, + [SMALL_STATE(165)] = 11899, + [SMALL_STATE(166)] = 11939, + [SMALL_STATE(167)] = 11977, + [SMALL_STATE(168)] = 12018, + [SMALL_STATE(169)] = 12087, + [SMALL_STATE(170)] = 12124, + [SMALL_STATE(171)] = 12159, + [SMALL_STATE(172)] = 12194, + [SMALL_STATE(173)] = 12235, + [SMALL_STATE(174)] = 12303, + [SMALL_STATE(175)] = 12353, + [SMALL_STATE(176)] = 12405, + [SMALL_STATE(177)] = 12461, + [SMALL_STATE(178)] = 12515, + [SMALL_STATE(179)] = 12573, + [SMALL_STATE(180)] = 12633, + [SMALL_STATE(181)] = 12695, + [SMALL_STATE(182)] = 12759, + [SMALL_STATE(183)] = 12825, + [SMALL_STATE(184)] = 12859, + [SMALL_STATE(185)] = 12895, + [SMALL_STATE(186)] = 12961, + [SMALL_STATE(187)] = 13027, + [SMALL_STATE(188)] = 13061, + [SMALL_STATE(189)] = 13095, + [SMALL_STATE(190)] = 13139, + [SMALL_STATE(191)] = 13173, + [SMALL_STATE(192)] = 13215, + [SMALL_STATE(193)] = 13283, + [SMALL_STATE(194)] = 13351, + [SMALL_STATE(195)] = 13419, + [SMALL_STATE(196)] = 13467, + [SMALL_STATE(197)] = 13535, + [SMALL_STATE(198)] = 13569, + [SMALL_STATE(199)] = 13635, + [SMALL_STATE(200)] = 13703, + [SMALL_STATE(201)] = 13771, + [SMALL_STATE(202)] = 13837, + [SMALL_STATE(203)] = 13873, + [SMALL_STATE(204)] = 13939, + [SMALL_STATE(205)] = 14005, + [SMALL_STATE(206)] = 14041, + [SMALL_STATE(207)] = 14109, + [SMALL_STATE(208)] = 14142, + [SMALL_STATE(209)] = 14207, + [SMALL_STATE(210)] = 14272, + [SMALL_STATE(211)] = 14305, + [SMALL_STATE(212)] = 14352, + [SMALL_STATE(213)] = 14417, + [SMALL_STATE(214)] = 14460, + [SMALL_STATE(215)] = 14509, + [SMALL_STATE(216)] = 14560, + [SMALL_STATE(217)] = 14615, + [SMALL_STATE(218)] = 14668, + [SMALL_STATE(219)] = 14725, + [SMALL_STATE(220)] = 14784, + [SMALL_STATE(221)] = 14845, + [SMALL_STATE(222)] = 14908, + [SMALL_STATE(223)] = 14941, + [SMALL_STATE(224)] = 15006, + [SMALL_STATE(225)] = 15039, + [SMALL_STATE(226)] = 15072, + [SMALL_STATE(227)] = 15105, + [SMALL_STATE(228)] = 15138, + [SMALL_STATE(229)] = 15171, + [SMALL_STATE(230)] = 15204, + [SMALL_STATE(231)] = 15269, + [SMALL_STATE(232)] = 15334, + [SMALL_STATE(233)] = 15367, + [SMALL_STATE(234)] = 15400, + [SMALL_STATE(235)] = 15433, + [SMALL_STATE(236)] = 15466, + [SMALL_STATE(237)] = 15499, + [SMALL_STATE(238)] = 15564, + [SMALL_STATE(239)] = 15629, + [SMALL_STATE(240)] = 15694, + [SMALL_STATE(241)] = 15727, + [SMALL_STATE(242)] = 15760, + [SMALL_STATE(243)] = 15825, + [SMALL_STATE(244)] = 15858, + [SMALL_STATE(245)] = 15923, + [SMALL_STATE(246)] = 15988, + [SMALL_STATE(247)] = 16053, + [SMALL_STATE(248)] = 16118, + [SMALL_STATE(249)] = 16183, + [SMALL_STATE(250)] = 16248, + [SMALL_STATE(251)] = 16313, + [SMALL_STATE(252)] = 16378, + [SMALL_STATE(253)] = 16411, + [SMALL_STATE(254)] = 16476, + [SMALL_STATE(255)] = 16509, + [SMALL_STATE(256)] = 16544, + [SMALL_STATE(257)] = 16609, + [SMALL_STATE(258)] = 16674, + [SMALL_STATE(259)] = 16739, + [SMALL_STATE(260)] = 16772, + [SMALL_STATE(261)] = 16837, + [SMALL_STATE(262)] = 16871, + [SMALL_STATE(263)] = 16905, + [SMALL_STATE(264)] = 16937, + [SMALL_STATE(265)] = 16966, + [SMALL_STATE(266)] = 16995, + [SMALL_STATE(267)] = 17023, + [SMALL_STATE(268)] = 17051, + [SMALL_STATE(269)] = 17079, + [SMALL_STATE(270)] = 17107, + [SMALL_STATE(271)] = 17135, + [SMALL_STATE(272)] = 17165, + [SMALL_STATE(273)] = 17193, + [SMALL_STATE(274)] = 17221, + [SMALL_STATE(275)] = 17248, + [SMALL_STATE(276)] = 17275, + [SMALL_STATE(277)] = 17302, + [SMALL_STATE(278)] = 17329, + [SMALL_STATE(279)] = 17375, + [SMALL_STATE(280)] = 17421, + [SMALL_STATE(281)] = 17450, + [SMALL_STATE(282)] = 17485, + [SMALL_STATE(283)] = 17526, + [SMALL_STATE(284)] = 17569, + [SMALL_STATE(285)] = 17608, + [SMALL_STATE(286)] = 17639, + [SMALL_STATE(287)] = 17676, + [SMALL_STATE(288)] = 17702, + [SMALL_STATE(289)] = 17730, + [SMALL_STATE(290)] = 17762, + [SMALL_STATE(291)] = 17800, + [SMALL_STATE(292)] = 17834, + [SMALL_STATE(293)] = 17870, + [SMALL_STATE(294)] = 17900, + [SMALL_STATE(295)] = 17921, + [SMALL_STATE(296)] = 17942, + [SMALL_STATE(297)] = 17963, + [SMALL_STATE(298)] = 17994, + [SMALL_STATE(299)] = 18027, + [SMALL_STATE(300)] = 18062, + [SMALL_STATE(301)] = 18083, + [SMALL_STATE(302)] = 18104, + [SMALL_STATE(303)] = 18143, + [SMALL_STATE(304)] = 18182, + [SMALL_STATE(305)] = 18209, + [SMALL_STATE(306)] = 18230, + [SMALL_STATE(307)] = 18259, + [SMALL_STATE(308)] = 18284, + [SMALL_STATE(309)] = 18323, + [SMALL_STATE(310)] = 18360, + [SMALL_STATE(311)] = 18399, + [SMALL_STATE(312)] = 18422, + [SMALL_STATE(313)] = 18458, + [SMALL_STATE(314)] = 18494, + [SMALL_STATE(315)] = 18530, + [SMALL_STATE(316)] = 18566, + [SMALL_STATE(317)] = 18602, + [SMALL_STATE(318)] = 18638, + [SMALL_STATE(319)] = 18674, + [SMALL_STATE(320)] = 18710, + [SMALL_STATE(321)] = 18746, + [SMALL_STATE(322)] = 18782, + [SMALL_STATE(323)] = 18805, + [SMALL_STATE(324)] = 18828, + [SMALL_STATE(325)] = 18846, + [SMALL_STATE(326)] = 18861, + [SMALL_STATE(327)] = 18876, + [SMALL_STATE(328)] = 18891, + [SMALL_STATE(329)] = 18906, + [SMALL_STATE(330)] = 18921, + [SMALL_STATE(331)] = 18936, + [SMALL_STATE(332)] = 18951, + [SMALL_STATE(333)] = 18965, + [SMALL_STATE(334)] = 18979, + [SMALL_STATE(335)] = 18993, + [SMALL_STATE(336)] = 19007, + [SMALL_STATE(337)] = 19021, + [SMALL_STATE(338)] = 19035, + [SMALL_STATE(339)] = 19049, + [SMALL_STATE(340)] = 19061, + [SMALL_STATE(341)] = 19075, + [SMALL_STATE(342)] = 19085, + [SMALL_STATE(343)] = 19099, + [SMALL_STATE(344)] = 19113, + [SMALL_STATE(345)] = 19127, + [SMALL_STATE(346)] = 19138, + [SMALL_STATE(347)] = 19147, + [SMALL_STATE(348)] = 19158, + [SMALL_STATE(349)] = 19169, + [SMALL_STATE(350)] = 19178, + [SMALL_STATE(351)] = 19189, + [SMALL_STATE(352)] = 19198, + [SMALL_STATE(353)] = 19207, + [SMALL_STATE(354)] = 19216, + [SMALL_STATE(355)] = 19227, + [SMALL_STATE(356)] = 19238, + [SMALL_STATE(357)] = 19249, + [SMALL_STATE(358)] = 19258, + [SMALL_STATE(359)] = 19269, + [SMALL_STATE(360)] = 19280, + [SMALL_STATE(361)] = 19291, + [SMALL_STATE(362)] = 19302, + [SMALL_STATE(363)] = 19313, + [SMALL_STATE(364)] = 19324, + [SMALL_STATE(365)] = 19332, + [SMALL_STATE(366)] = 19340, + [SMALL_STATE(367)] = 19348, + [SMALL_STATE(368)] = 19356, + [SMALL_STATE(369)] = 19364, + [SMALL_STATE(370)] = 19372, + [SMALL_STATE(371)] = 19380, + [SMALL_STATE(372)] = 19388, + [SMALL_STATE(373)] = 19396, + [SMALL_STATE(374)] = 19404, + [SMALL_STATE(375)] = 19412, + [SMALL_STATE(376)] = 19420, + [SMALL_STATE(377)] = 19428, + [SMALL_STATE(378)] = 19436, + [SMALL_STATE(379)] = 19444, + [SMALL_STATE(380)] = 19452, + [SMALL_STATE(381)] = 19460, + [SMALL_STATE(382)] = 19468, + [SMALL_STATE(383)] = 19476, }; 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 = false}}, SHIFT(122), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), - [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(96), - [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(265), - [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(380), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(374), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(381), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(116), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(327), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), - [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), - [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(127), - [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), - [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), - [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), - [43] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(122), - [46] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(122), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(167), + [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(184), + [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(361), + [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [43] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(143), + [46] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(143), [49] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(78), - [52] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(300), - [55] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(304), - [58] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(311), - [61] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(29), - [64] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(96), - [67] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(34), - [70] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(10), - [73] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(265), - [76] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(2), + [52] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(380), + [55] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(374), + [58] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(381), + [61] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(28), + [64] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(116), + [67] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(41), + [70] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(66), + [73] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(327), + [76] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), [79] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(6), [82] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [84] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(221), - [87] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [89] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), - [91] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), - [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), - [95] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), - [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(261), - [101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(208), - [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(208), - [105] = {.entry = {.count = 1, .reusable = false}}, SHIFT(124), - [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), - [109] = {.entry = {.count = 1, .reusable = false}}, SHIFT(211), - [111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [113] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), - [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(266), - [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), - [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), + [84] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(114), + [87] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [89] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), + [91] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), + [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(166), + [95] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), + [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(330), + [101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), + [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), + [105] = {.entry = {.count = 1, .reusable = false}}, SHIFT(164), + [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [109] = {.entry = {.count = 1, .reusable = false}}, SHIFT(207), + [111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [113] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), + [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(328), + [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), [123] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), [125] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), [127] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), [129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [131] = {.entry = {.count = 1, .reusable = false}}, SHIFT(89), - [133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [131] = {.entry = {.count = 1, .reusable = false}}, SHIFT(106), + [133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), [135] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [137] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [139] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), - [143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), - [145] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), - [147] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [149] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [151] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), - [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), - [155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), - [157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 18), - [159] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 18), - [161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 11), - [163] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 11), - [165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [167] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [169] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), - [171] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), - [173] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), - [175] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), - [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 14), - [179] = {.entry = {.count = 1, .reusable = true}}, SHIFT(314), - [181] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), - [183] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 14), - [185] = {.entry = {.count = 1, .reusable = true}}, SHIFT(271), - [187] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 25), - [189] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [193] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), - [195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [199] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), - [201] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), - [203] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), - [205] = {.entry = {.count = 1, .reusable = false}}, SHIFT(18), - [207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 25), - [217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), - [219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), - [221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 7), - [223] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 7), - [225] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member_access, 3, 0, 13), - [227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member_access, 3, 0, 13), - [229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [231] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 15), - [235] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 15), - [237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 17), - [239] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 17), - [241] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [243] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [245] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 19), - [247] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 19), - [249] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [251] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [253] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [255] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [257] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [259] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 20), - [261] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 20), - [263] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 10), - [265] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 10), - [267] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 23), - [269] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 23), - [271] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 24), - [273] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 24), - [275] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [277] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [279] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 6, 0, 26), - [281] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 6, 0, 26), - [283] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [285] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [287] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 27), - [289] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 27), - [291] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 28), - [293] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 28), - [295] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), - [297] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), - [299] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), - [301] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), - [303] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), - [305] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), - [307] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), - [309] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), - [311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), - [313] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308), - [315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), - [317] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), - [321] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), - [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), - [325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), - [327] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), - [329] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), - [331] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), - [333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278), - [335] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), - [337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), - [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), - [345] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 22), - [347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), - [351] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 16), - [353] = {.entry = {.count = 1, .reusable = true}}, SHIFT(234), - [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), - [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), - [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), - [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), - [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), - [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), - [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), - [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [381] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), - [383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), - [385] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), - [387] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), - [389] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), - [391] = {.entry = {.count = 1, .reusable = false}}, SHIFT(77), - [393] = {.entry = {.count = 1, .reusable = false}}, SHIFT(44), - [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), - [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), - [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), - [409] = {.entry = {.count = 1, .reusable = false}}, SHIFT(31), - [411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), - [415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), - [421] = {.entry = {.count = 1, .reusable = false}}, SHIFT(49), - [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [425] = {.entry = {.count = 1, .reusable = false}}, SHIFT(65), - [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), - [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), - [437] = {.entry = {.count = 1, .reusable = false}}, SHIFT(235), - [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), - [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), - [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), - [445] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), - [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), - [451] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 14), - [453] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 14), - [455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), - [457] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), - [459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [461] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), - [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), - [467] = {.entry = {.count = 1, .reusable = false}}, SHIFT(229), - [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), - [471] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), - [473] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), - [475] = {.entry = {.count = 1, .reusable = false}}, SHIFT(222), - [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), - [479] = {.entry = {.count = 1, .reusable = false}}, SHIFT(230), - [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), - [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), - [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), - [487] = {.entry = {.count = 1, .reusable = false}}, SHIFT(231), - [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), - [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), - [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(195), - [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(298), - [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), - [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), - [503] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(298), - [506] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [508] = {.entry = {.count = 1, .reusable = false}}, SHIFT(305), - [510] = {.entry = {.count = 1, .reusable = false}}, SHIFT(48), - [512] = {.entry = {.count = 1, .reusable = false}}, SHIFT(37), - [514] = {.entry = {.count = 1, .reusable = false}}, SHIFT(64), - [516] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), - [518] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(305), - [521] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), - [523] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), - [525] = {.entry = {.count = 1, .reusable = false}}, SHIFT(52), - [527] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 8), - [529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(277), - [533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), - [535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), - [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), - [539] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(296), - [542] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), - [546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275), - [548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), - [550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), - [552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), - [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), - [556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), - [558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), - [560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(269), - [562] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [564] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [566] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), - [574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), - [576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), - [578] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), - [582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), - [584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), - [586] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 21), - [588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(273), - [590] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), - [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), - [596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), - [598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), - [602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(283), - [604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(140), - [606] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), - [608] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(280), - [612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(293), - [616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), - [620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), - [622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), - [624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), - [626] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [137] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), + [139] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), + [141] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [143] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(362), + [147] = {.entry = {.count = 1, .reusable = false}}, SHIFT(269), + [149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), + [155] = {.entry = {.count = 1, .reusable = false}}, SHIFT(261), + [157] = {.entry = {.count = 1, .reusable = false}}, SHIFT(274), + [159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), + [161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [163] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), + [167] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 14), + [169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(368), + [171] = {.entry = {.count = 1, .reusable = true}}, SHIFT(375), + [173] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 14), + [175] = {.entry = {.count = 1, .reusable = true}}, SHIFT(340), + [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 18), + [179] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 18), + [181] = {.entry = {.count = 1, .reusable = false}}, SHIFT(301), + [183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [185] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), + [187] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [189] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), + [191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), + [193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), + [199] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), + [201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 11), + [203] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 11), + [205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [207] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [209] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), + [211] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), + [213] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [221] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [223] = {.entry = {.count = 1, .reusable = false}}, SHIFT(12), + [225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [227] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [229] = {.entry = {.count = 1, .reusable = false}}, SHIFT(14), + [231] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), + [233] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), + [235] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), + [237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [243] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 15), + [245] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [247] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 15), + [249] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 17), + [251] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 17), + [253] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [255] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [257] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member_access, 3, 0, 13), + [259] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member_access, 3, 0, 13), + [261] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 10), + [263] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 10), + [265] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [267] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [269] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 20), + [271] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 20), + [273] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 21), + [275] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 21), + [277] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 24), + [279] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 24), + [281] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 25), + [283] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 25), + [285] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 26), + [287] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 26), + [289] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), + [291] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), + [293] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 7), + [295] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 7), + [297] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 6, 0, 27), + [299] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 6, 0, 27), + [301] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [303] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [305] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [307] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [309] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 28), + [311] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 28), + [313] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 30), + [315] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 30), + [317] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), + [319] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), + [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), + [323] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), + [325] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), + [327] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), + [329] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), + [331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360), + [333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(378), + [335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), + [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(372), + [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [345] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), + [347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [351] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [353] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), + [355] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), + [357] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), + [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), + [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(343), + [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(272), + [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), + [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), + [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), + [381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [385] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [387] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 16), + [389] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 23), + [391] = {.entry = {.count = 1, .reusable = true}}, SHIFT(363), + [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), + [395] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), + [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [401] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38), + [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(349), + [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [411] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), + [413] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), + [415] = {.entry = {.count = 1, .reusable = false}}, SHIFT(9), + [417] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), + [419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254), + [437] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), + [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), + [443] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), + [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), + [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(358), + [461] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_vector3, 7, 0, 28), + [463] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_vector3, 7, 0, 28), + [465] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [467] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), + [469] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_vector4, 9, 0, 30), + [471] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_vector4, 9, 0, 30), + [473] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), + [475] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), + [477] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_vector2, 5, 0, 21), + [479] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_vector2, 5, 0, 21), + [481] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_function_call, 3, 0, 19), + [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(366), + [485] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_function_call, 3, 0, 19), + [487] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [489] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_method_call, 6, 0, 29), + [491] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_method_call, 6, 0, 29), + [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), + [497] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87), + [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [501] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), + [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [513] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), + [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), + [517] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 14), + [519] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 14), + [521] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), + [523] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), + [525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [527] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), + [529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [531] = {.entry = {.count = 1, .reusable = false}}, SHIFT(109), + [533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), + [535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), + [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(382), + [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [547] = {.entry = {.count = 1, .reusable = false}}, SHIFT(119), + [549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), + [561] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [563] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [565] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), + [567] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), + [569] = {.entry = {.count = 1, .reusable = true}}, SHIFT(270), + [571] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), + [573] = {.entry = {.count = 1, .reusable = true}}, SHIFT(266), + [575] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), + [577] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [579] = {.entry = {.count = 1, .reusable = true}}, SHIFT(267), + [581] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [583] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), + [585] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), + [587] = {.entry = {.count = 1, .reusable = true}}, SHIFT(273), + [589] = {.entry = {.count = 1, .reusable = true}}, SHIFT(268), + [591] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), + [593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(345), + [597] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), + [599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [601] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(345), + [604] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [606] = {.entry = {.count = 1, .reusable = false}}, SHIFT(364), + [608] = {.entry = {.count = 1, .reusable = false}}, SHIFT(77), + [610] = {.entry = {.count = 1, .reusable = false}}, SHIFT(62), + [612] = {.entry = {.count = 1, .reusable = false}}, SHIFT(65), + [614] = {.entry = {.count = 1, .reusable = false}}, SHIFT(50), + [616] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), + [618] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), + [620] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(364), + [623] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), + [625] = {.entry = {.count = 1, .reusable = true}}, SHIFT(373), + [627] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [629] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(347), + [632] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), + [636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(334), + [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), + [642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(332), + [644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(344), + [648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [650] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 8), + [652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), + [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(335), + [658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), + [660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [662] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 22), + [664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(341), + [666] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [668] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [670] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [672] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), + [676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), + [678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(234), + [680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), + [682] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(264), + [686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(277), + [688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275), + [690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(377), + [694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), + [698] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [700] = {.entry = {.count = 1, .reusable = true}}, SHIFT(183), + [702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(367), + [704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [706] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), + [710] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [712] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), + [714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(348), + [716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(352), + [720] = {.entry = {.count = 1, .reusable = true}}, SHIFT(356), + [722] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [724] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), + [726] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210), + [728] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(357), + [732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(351), + [734] = {.entry = {.count = 1, .reusable = true}}, SHIFT(376), }; #ifdef __cplusplus From d7b689317507394f301efa68518de9e4df7ed2ef Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 17 Jan 2026 16:56:32 -0500 Subject: [PATCH 077/106] Convert project into a workspace --- Cargo.lock | 1980 ++------------ Cargo.toml | 55 +- build.rs | 613 ----- .../Cargo.toml | 0 .../src/lib.rs | 0 crates/macros/Cargo.toml | 13 - crates/macros/src/lib.rs | 112 - examples/README.md | 115 - examples/advance_sketches.ccm | 146 - examples/basic_math.ccm | 22 - examples/bearing.ccm | 166 -- examples/fornjot_demos.ccm | 83 - examples/sketches.ccm | 17 - {crates/formatter => formatter}/Cargo.toml | 0 .../formatter => formatter}/src/arguments.rs | 0 {crates/formatter => formatter}/src/main.rs | 0 .../test_files/empty_closure.ccm | 0 interpreter/Cargo.lock | 1244 +++++++++ .../interpreter => interpreter}/Cargo.toml | 0 {crates/interpreter => interpreter}/build.rs | 0 .../src/compile/expressions.rs | 0 .../src/compile/formula.rs | 0 .../src/compile/mod.rs | 0 .../src/execution/errors.rs | 0 .../src/execution/logging.rs | 0 .../src/execution/mod.rs | 0 .../src/execution/stack.rs | 0 .../src/execution/standard_environment.rs | 0 .../src/execution/values/boolean.rs | 0 .../src/execution/values/closure.rs | 0 .../src/execution/values/dictionary.rs | 0 .../src/execution/values/file.rs | 0 .../src/execution/values/integer.rs | 0 .../src/execution/values/list.rs | 0 .../src/execution/values/mod.rs | 0 .../src/execution/values/scalar.rs | 0 .../src/execution/values/string/formatting.rs | 0 .../src/execution/values/string/mod.rs | 0 .../src/execution/values/value_type.rs | 0 .../src/execution/values/vector.rs | 0 .../src/execution/values/void.rs | 0 .../interpreter => interpreter}/src/lib.rs | 0 src/arguments.rs | 204 -- src/main.rs | 283 -- src/package.rs | 127 - src/script/execution/expressions.rs | 628 ----- src/script/execution/failure_message.rs | 456 ---- src/script/execution/mod.rs | 382 --- src/script/execution/module.rs | 494 ---- src/script/execution/stack.rs | 280 -- src/script/execution/statements.rs | 959 ------- src/script/execution/types/boolean.rs | 119 - src/script/execution/types/closure.rs | 219 -- src/script/execution/types/default.rs | 41 - src/script/execution/types/function.rs | 333 --- src/script/execution/types/list.rs | 607 ----- src/script/execution/types/math/mod.rs | 253 -- src/script/execution/types/math/quaternion.rs | 193 -- src/script/execution/types/math/scalar.rs | 1275 --------- src/script/execution/types/math/transform.rs | 465 ---- src/script/execution/types/math/units.csv | 2387 ----------------- src/script/execution/types/math/vector.rs | 1127 -------- src/script/execution/types/mod.rs | 369 --- src/script/execution/types/modeling/curve.rs | 53 - src/script/execution/types/modeling/cycle.rs | 197 -- src/script/execution/types/modeling/face.rs | 56 - .../execution/types/modeling/half_edge.rs | 53 - src/script/execution/types/modeling/mod.rs | 115 - .../execution/types/modeling/object_set.rs | 61 - src/script/execution/types/modeling/region.rs | 265 -- src/script/execution/types/modeling/shell.rs | 232 -- src/script/execution/types/modeling/sketch.rs | 248 -- src/script/execution/types/modeling/solid.rs | 146 - .../execution/types/modeling/structs.rs | 313 --- .../execution/types/modeling/surface.rs | 125 - src/script/execution/types/modeling/vertex.rs | 53 - src/script/execution/types/none.rs | 41 - src/script/execution/types/number.rs | 50 - src/script/execution/types/range.rs | 207 -- src/script/execution/types/serializable.rs | 453 ---- .../execution/types/string/formatting.rs | 534 ---- src/script/execution/types/string/mod.rs | 393 --- src/script/execution/types/structures.rs | 536 ---- src/script/logging.rs | 178 -- src/script/mod.rs | 328 --- src/script/module.rs | 419 --- src/script/parsing/blocks.rs | 441 --- src/script/parsing/closure.rs | 172 -- src/script/parsing/function.rs | 156 -- src/script/parsing/list.rs | 161 -- src/script/parsing/litteral.rs | 156 -- src/script/parsing/member_variable.rs | 484 ---- src/script/parsing/mod.rs | 220 -- src/script/parsing/number.rs | 179 -- src/script/parsing/pstruct.rs | 159 -- src/script/parsing/range.rs | 129 - src/script/parsing/root/import.rs | 58 - src/script/parsing/root/mod.rs | 271 -- src/script/parsing/scalar.rs | 215 -- src/script/parsing/span.rs | 171 -- src/script/parsing/statements/assign.rs | 317 --- .../statements/expression/arithmetic.rs | 150 -- .../statements/expression/comparison.rs | 199 -- .../statements/expression/define_function.rs | 0 .../parsing/statements/expression/factor.rs | 148 - .../parsing/statements/expression/mod.rs | 163 -- .../parsing/statements/expression/term.rs | 148 - .../parsing/statements/expression/trailer.rs | 413 --- src/script/parsing/statements/mod.rs | 259 -- src/script/parsing/statements/s_break.rs | 113 - src/script/parsing/statements/s_continue.rs | 82 - src/script/parsing/statements/s_for.rs | 122 - src/script/parsing/statements/s_if.rs | 143 - src/script/parsing/statements/s_loop.rs | 97 - src/script/parsing/statements/s_match.rs | 185 -- src/script/parsing/statements/s_return.rs | 82 - src/script/parsing/statements/s_while.rs | 108 - src/script/parsing/string.rs | 103 - src/script/parsing/struct_initalization.rs | 99 - src/script/parsing/variable_type.rs | 365 --- .../topiary => topiary}/command_cad_model.scm | 0 {crates/topiary => topiary}/language.ncl | 0 {crates/topiary => topiary}/shell.nix | 0 {crates/topiary => topiary}/test.ccm | 0 .../.editorconfig | 0 .../.gitattributes | 0 .../.gitignore | 0 .../CMakeLists.txt | 0 .../Cargo.toml | 0 .../Makefile | 0 .../Package.swift | 0 .../binding.gyp | 0 .../c/tree-sitter-command_cad_model.h | 0 .../c/tree-sitter-command_cad_model.pc.in | 0 .../bindings/go/binding.go | 0 .../bindings/go/binding_test.go | 0 .../bindings/go/go.mod | 0 .../bindings/node/binding.cc | 0 .../bindings/node/index.d.ts | 0 .../bindings/node/index.js | 0 .../tree_sitter_command_cad_model/__init__.py | 0 .../__init__.pyi | 0 .../tree_sitter_command_cad_model/binding.c | 0 .../tree_sitter_command_cad_model/py.typed | 0 .../bindings/rust/build.rs | 0 .../bindings/rust/lib.rs | 0 .../command_cad_model.h | 0 .../go.mod | 0 .../grammar.js | 0 .../package.json | 0 .../pyproject.toml | 0 .../setup.py | 0 .../src/grammar.json | 0 .../src/node-types.json | 0 .../src/parser.c | 0 .../src/tree_sitter/alloc.h | 0 .../src/tree_sitter/array.h | 0 .../src/tree_sitter/parser.h | 0 .../test/corpus/closure.txt | 0 .../test/corpus/comments.txt | 0 .../test/corpus/dictionary_construction.txt | 0 .../test/corpus/formulas.txt | 0 .../test/corpus/if.txt | 0 .../test/corpus/let_in.txt | 0 .../test/corpus/list.txt | 0 .../test/corpus/precedence.txt | 0 .../test/corpus/primitives.txt | 0 .../test/corpus/struct_definition.txt | 0 .../test/corpus/variable_paths.txt | 0 .../tree-sitter.json | 0 {crates/units => units}/Cargo.toml | 0 {crates/units => units}/build.rs | 0 {crates/units => units}/src/lib.rs | 0 {crates/units => units}/src/units.csv | 0 174 files changed, 1415 insertions(+), 25676 deletions(-) delete mode 100644 build.rs rename {crates/common_data_types => common_data_types}/Cargo.toml (100%) rename {crates/common_data_types => common_data_types}/src/lib.rs (100%) delete mode 100644 crates/macros/Cargo.toml delete mode 100644 crates/macros/src/lib.rs delete mode 100644 examples/README.md delete mode 100644 examples/advance_sketches.ccm delete mode 100644 examples/basic_math.ccm delete mode 100644 examples/bearing.ccm delete mode 100644 examples/fornjot_demos.ccm delete mode 100644 examples/sketches.ccm rename {crates/formatter => formatter}/Cargo.toml (100%) rename {crates/formatter => formatter}/src/arguments.rs (100%) rename {crates/formatter => formatter}/src/main.rs (100%) rename {crates/formatter => formatter}/test_files/empty_closure.ccm (100%) create mode 100644 interpreter/Cargo.lock rename {crates/interpreter => interpreter}/Cargo.toml (100%) rename {crates/interpreter => interpreter}/build.rs (100%) rename {crates/interpreter => interpreter}/src/compile/expressions.rs (100%) rename {crates/interpreter => interpreter}/src/compile/formula.rs (100%) rename {crates/interpreter => interpreter}/src/compile/mod.rs (100%) rename {crates/interpreter => interpreter}/src/execution/errors.rs (100%) rename {crates/interpreter => interpreter}/src/execution/logging.rs (100%) rename {crates/interpreter => interpreter}/src/execution/mod.rs (100%) rename {crates/interpreter => interpreter}/src/execution/stack.rs (100%) rename {crates/interpreter => interpreter}/src/execution/standard_environment.rs (100%) rename {crates/interpreter => interpreter}/src/execution/values/boolean.rs (100%) rename {crates/interpreter => interpreter}/src/execution/values/closure.rs (100%) rename {crates/interpreter => interpreter}/src/execution/values/dictionary.rs (100%) rename {crates/interpreter => interpreter}/src/execution/values/file.rs (100%) rename {crates/interpreter => interpreter}/src/execution/values/integer.rs (100%) rename {crates/interpreter => interpreter}/src/execution/values/list.rs (100%) rename {crates/interpreter => interpreter}/src/execution/values/mod.rs (100%) rename {crates/interpreter => interpreter}/src/execution/values/scalar.rs (100%) rename {crates/interpreter => interpreter}/src/execution/values/string/formatting.rs (100%) rename {crates/interpreter => interpreter}/src/execution/values/string/mod.rs (100%) rename {crates/interpreter => interpreter}/src/execution/values/value_type.rs (100%) rename {crates/interpreter => interpreter}/src/execution/values/vector.rs (100%) rename {crates/interpreter => interpreter}/src/execution/values/void.rs (100%) rename {crates/interpreter => interpreter}/src/lib.rs (100%) delete mode 100644 src/arguments.rs delete mode 100644 src/main.rs delete mode 100644 src/package.rs delete mode 100644 src/script/execution/expressions.rs delete mode 100644 src/script/execution/failure_message.rs delete mode 100644 src/script/execution/mod.rs delete mode 100644 src/script/execution/module.rs delete mode 100644 src/script/execution/stack.rs delete mode 100644 src/script/execution/statements.rs delete mode 100644 src/script/execution/types/boolean.rs delete mode 100644 src/script/execution/types/closure.rs delete mode 100644 src/script/execution/types/default.rs delete mode 100644 src/script/execution/types/function.rs delete mode 100644 src/script/execution/types/list.rs delete mode 100644 src/script/execution/types/math/mod.rs delete mode 100644 src/script/execution/types/math/quaternion.rs delete mode 100644 src/script/execution/types/math/scalar.rs delete mode 100644 src/script/execution/types/math/transform.rs delete mode 100644 src/script/execution/types/math/units.csv delete mode 100644 src/script/execution/types/math/vector.rs delete mode 100644 src/script/execution/types/mod.rs delete mode 100644 src/script/execution/types/modeling/curve.rs delete mode 100644 src/script/execution/types/modeling/cycle.rs delete mode 100644 src/script/execution/types/modeling/face.rs delete mode 100644 src/script/execution/types/modeling/half_edge.rs delete mode 100644 src/script/execution/types/modeling/mod.rs delete mode 100644 src/script/execution/types/modeling/object_set.rs delete mode 100644 src/script/execution/types/modeling/region.rs delete mode 100644 src/script/execution/types/modeling/shell.rs delete mode 100644 src/script/execution/types/modeling/sketch.rs delete mode 100644 src/script/execution/types/modeling/solid.rs delete mode 100644 src/script/execution/types/modeling/structs.rs delete mode 100644 src/script/execution/types/modeling/surface.rs delete mode 100644 src/script/execution/types/modeling/vertex.rs delete mode 100644 src/script/execution/types/none.rs delete mode 100644 src/script/execution/types/number.rs delete mode 100644 src/script/execution/types/range.rs delete mode 100644 src/script/execution/types/serializable.rs delete mode 100644 src/script/execution/types/string/formatting.rs delete mode 100644 src/script/execution/types/string/mod.rs delete mode 100644 src/script/execution/types/structures.rs delete mode 100644 src/script/logging.rs delete mode 100644 src/script/mod.rs delete mode 100644 src/script/module.rs delete mode 100644 src/script/parsing/blocks.rs delete mode 100644 src/script/parsing/closure.rs delete mode 100644 src/script/parsing/function.rs delete mode 100644 src/script/parsing/list.rs delete mode 100644 src/script/parsing/litteral.rs delete mode 100644 src/script/parsing/member_variable.rs delete mode 100644 src/script/parsing/mod.rs delete mode 100644 src/script/parsing/number.rs delete mode 100644 src/script/parsing/pstruct.rs delete mode 100644 src/script/parsing/range.rs delete mode 100644 src/script/parsing/root/import.rs delete mode 100644 src/script/parsing/root/mod.rs delete mode 100644 src/script/parsing/scalar.rs delete mode 100644 src/script/parsing/span.rs delete mode 100644 src/script/parsing/statements/assign.rs delete mode 100644 src/script/parsing/statements/expression/arithmetic.rs delete mode 100644 src/script/parsing/statements/expression/comparison.rs delete mode 100644 src/script/parsing/statements/expression/define_function.rs delete mode 100644 src/script/parsing/statements/expression/factor.rs delete mode 100644 src/script/parsing/statements/expression/mod.rs delete mode 100644 src/script/parsing/statements/expression/term.rs delete mode 100644 src/script/parsing/statements/expression/trailer.rs delete mode 100644 src/script/parsing/statements/mod.rs delete mode 100644 src/script/parsing/statements/s_break.rs delete mode 100644 src/script/parsing/statements/s_continue.rs delete mode 100644 src/script/parsing/statements/s_for.rs delete mode 100644 src/script/parsing/statements/s_if.rs delete mode 100644 src/script/parsing/statements/s_loop.rs delete mode 100644 src/script/parsing/statements/s_match.rs delete mode 100644 src/script/parsing/statements/s_return.rs delete mode 100644 src/script/parsing/statements/s_while.rs delete mode 100644 src/script/parsing/string.rs delete mode 100644 src/script/parsing/struct_initalization.rs delete mode 100644 src/script/parsing/variable_type.rs rename {crates/topiary => topiary}/command_cad_model.scm (100%) rename {crates/topiary => topiary}/language.ncl (100%) rename {crates/topiary => topiary}/shell.nix (100%) rename {crates/topiary => topiary}/test.ccm (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/.editorconfig (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/.gitattributes (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/.gitignore (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/CMakeLists.txt (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/Cargo.toml (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/Makefile (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/Package.swift (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/binding.gyp (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/c/tree-sitter-command_cad_model.h (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/c/tree-sitter-command_cad_model.pc.in (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/go/binding.go (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/go/binding_test.go (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/go/go.mod (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/node/binding.cc (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/node/index.d.ts (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/node/index.js (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/python/tree_sitter_command_cad_model/__init__.py (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/python/tree_sitter_command_cad_model/__init__.pyi (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/python/tree_sitter_command_cad_model/binding.c (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/python/tree_sitter_command_cad_model/py.typed (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/rust/build.rs (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/rust/lib.rs (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/bindings/swift/TreeSitterCommandCadModel/command_cad_model.h (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/go.mod (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/grammar.js (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/package.json (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/pyproject.toml (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/setup.py (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/src/grammar.json (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/src/node-types.json (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/src/parser.c (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/src/tree_sitter/alloc.h (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/src/tree_sitter/array.h (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/src/tree_sitter/parser.h (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/test/corpus/closure.txt (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/test/corpus/comments.txt (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/test/corpus/dictionary_construction.txt (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/test/corpus/formulas.txt (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/test/corpus/if.txt (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/test/corpus/let_in.txt (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/test/corpus/list.txt (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/test/corpus/precedence.txt (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/test/corpus/primitives.txt (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/test/corpus/struct_definition.txt (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/test/corpus/variable_paths.txt (100%) rename {crates/tree-sitter-command-cad-model => tree-sitter-command-cad-model}/tree-sitter.json (100%) rename {crates/units => units}/Cargo.toml (100%) rename {crates/units => units}/build.rs (100%) rename {crates/units => units}/src/lib.rs (100%) rename {crates/units => units}/src/units.csv (100%) diff --git a/Cargo.lock b/Cargo.lock index 86162da..a838a2b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,104 +2,15 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "adler2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" - [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] -[[package]] -name = "aliasable" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" - -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - -[[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 = "anstream" -version = "0.6.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" - -[[package]] -name = "anstyle-parse" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" -dependencies = [ - "anstyle", - "once_cell", - "windows-sys", -] - -[[package]] -name = "anyhow" -version = "1.0.97" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" - [[package]] name = "approx" version = "0.5.1" @@ -109,26 +20,11 @@ dependencies = [ "num-traits", ] -[[package]] -name = "arbitrary" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" -dependencies = [ - "derive_arbitrary", -] - -[[package]] -name = "arrayvec" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" - [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "beef" @@ -136,85 +32,33 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" -[[package]] -name = "bezier-rs" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde3aa314326e2f984f81adcb399c64b93eed3c0f2cd4258b711bf494c5741de" -dependencies = [ - "glam 0.24.2", -] - [[package]] name = "bitflags" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" - -[[package]] -name = "bumpalo" -version = "3.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" - -[[package]] -name = "bytecount" -version = "0.6.8" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bytemuck" -version = "1.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" - -[[package]] -name = "byteorder" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8b41881888cc08af32d47ac4edd52bc7fa27fef774be47a92443756451304" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - -[[package]] -name = "casey" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e779867f62d81627d1438e0d3fb6ed7d7c9d64293ca6d87a1e88781b94ece1c" -dependencies = [ - "syn 2.0.100", -] - -[[package]] -name = "castaway" -version = "0.2.3" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" -dependencies = [ - "rustversion", -] +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" [[package]] name = "cc" -version = "1.2.18" +version = "1.2.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525046617d8376e3db1deffb079e91cef90a89fc3ca5c185bbf8c9ecdd15cd5c" +checksum = "755d2fce177175ffca841e9a06afdb2c4ab0f593d53b4dee48147dfaade85932" dependencies = [ - "jobserver", - "libc", + "find-msvc-tools", "shlex", ] [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "check_keyword" @@ -225,114 +69,12 @@ dependencies = [ "phf", ] -[[package]] -name = "chrono" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", - "wasm-bindgen", - "windows-link", -] - -[[package]] -name = "clap" -version = "4.5.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", - "terminal_size", -] - -[[package]] -name = "clap_derive" -version = "4.5.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "clap_lex" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" - [[package]] name = "coalesce" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7f42f93baa58655bd5b3db91dd9b2073dc8a0c887dc35bd1cfefbd43fc7cf07" -[[package]] -name = "colorchoice" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" - -[[package]] -name = "command_cad" -version = "0.6.0" -dependencies = [ - "anyhow", - "arrayvec", - "bezier-rs", - "casey", - "clap", - "common_data_types", - "compact_str", - "const-str", - "csv", - "enum_dispatch", - "enum_downcast", - "fj-core", - "fj-export", - "fj-math", - "fortuples", - "git2", - "glam 0.24.2", - "imstr 0.2.0 (git+https://github.com/IamTheCarl/imstr)", - "lazy_static", - "log", - "macros", - "nalgebra 0.32.6", - "nom 7.1.3", - "nom_locate", - "ouroboros", - "paste", - "semver", - "serde", - "serde_json", - "serde_yaml", - "stderrlog", - "tempfile", - "uneval", - "uom", - "whoami", -] - [[package]] name = "common_data_types" version = "0.1.0" @@ -342,25 +84,6 @@ dependencies = [ "serde", ] -[[package]] -name = "compact_str" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f" -dependencies = [ - "castaway", - "cfg-if", - "itoa", - "ryu", - "static_assertions", -] - -[[package]] -name = "const-str" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3618cccc083bb987a415d85c02ca6c9994ea5b44731ec28b9ecf09658655fba9" - [[package]] name = "convert_case" version = "0.8.0" @@ -370,21 +93,6 @@ dependencies = [ "unicode-segmentation", ] -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "crc32fast" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" -dependencies = [ - "cfg-if", -] - [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -412,73 +120,31 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "csv" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" dependencies = [ "csv-core", "itoa", "ryu", - "serde", + "serde_core", ] [[package]] name = "csv-core" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" dependencies = [ "memchr", ] -[[package]] -name = "decorum" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcc6bb0c903f3f815b48365bb9182092866f54a132d8ebe906f0b66952936e3" -dependencies = [ - "approx", - "num-traits", - "rustversion", - "serde", - "serde_derive", - "thiserror 2.0.12", -] - -[[package]] -name = "derive_arbitrary" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - [[package]] name = "diff" version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "downcast-rs" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - [[package]] name = "dunce" version = "1.0.5" @@ -491,15 +157,6 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -[[package]] -name = "ena" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" -dependencies = [ - "log", -] - [[package]] name = "enum-map" version = "3.0.0-beta.2" @@ -517,7 +174,7 @@ checksum = "44600091ce205df4f8b661e98617d49c37b2dd609e449ec82b0fb5d7b33e2eeb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", ] [[package]] @@ -529,7 +186,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.100", + "syn", ] [[package]] @@ -549,7 +206,7 @@ checksum = "a0e8987f91d86aa10313adf7c767a8cfd040364432d4e9f722b049b8ff7e634a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", ] [[package]] @@ -560,9 +217,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.11" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", "windows-sys", @@ -585,65 +242,10 @@ dependencies = [ ] [[package]] -name = "fj-core" -version = "0.49.0" -source = "git+https://github.com/hannobraun/fornjot.git#385aee350d5c1c08569c7e4e71ba7c5192bd4633" -dependencies = [ - "fj-interop", - "fj-math", - "itertools 0.14.0", - "parking_lot", - "robust", - "spade", - "thiserror 2.0.12", - "type-map", -] - -[[package]] -name = "fj-export" -version = "0.49.0" -source = "git+https://github.com/hannobraun/fornjot.git#385aee350d5c1c08569c7e4e71ba7c5192bd4633" -dependencies = [ - "fj-interop", - "fj-math", - "stl", - "thiserror 2.0.12", - "threemf", - "wavefront_rs", -] - -[[package]] -name = "fj-interop" -version = "0.49.0" -source = "git+https://github.com/hannobraun/fornjot.git#385aee350d5c1c08569c7e4e71ba7c5192bd4633" -dependencies = [ - "fj-math", -] - -[[package]] -name = "fj-math" -version = "0.49.0" -source = "git+https://github.com/hannobraun/fornjot.git#385aee350d5c1c08569c7e4e71ba7c5192bd4633" -dependencies = [ - "approx", - "decorum", - "iter_fixed", - "nalgebra 0.33.2", - "num-traits", - "parry2d-f64", - "parry3d-f64", - "robust", -] - -[[package]] -name = "flate2" -version = "1.1.1" +name = "find-msvc-tools" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" -dependencies = [ - "crc32fast", - "miniz_oxide", -] +checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db" [[package]] name = "fnv" @@ -651,66 +253,16 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - -[[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 = "formatter" -version = "0.1.0" -dependencies = [ - "anyhow", - "clap", - "tree-sitter-command-cad-model", -] - -[[package]] -name = "fortuples" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87630a8087e9cac4b7edfb6ee5e250ddca9112b57b6b17d8f5107375a3a8eace" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "getrandom" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", "r-efi", - "wasi", -] - -[[package]] -name = "git2" -version = "0.18.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "232e6a7bfe35766bf715e55a88b39a700596c0ccfd88cd3680b4cdb40d66ef70" -dependencies = [ - "bitflags", - "libc", - "libgit2-sys", - "log", - "openssl-probe", - "openssl-sys", - "url", + "wasip2", ] [[package]] @@ -778,9 +330,6 @@ name = "glam" version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" -dependencies = [ - "serde", -] [[package]] name = "glam" @@ -808,18 +357,9 @@ checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" [[package]] name = "glam" -version = "0.30.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd47b05dddf0005d850e5644cae7f2b14ac3df487979dbfff3b56f20b1a6ae46" - -[[package]] -name = "hash32" -version = "0.3.1" +version = "0.30.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" -dependencies = [ - "byteorder 1.5.0", -] +checksum = "19fc433e8437a212d1b6f1e68c7824af3aed907da60afa994e7f542d18d12aa9" [[package]] name = "hashable-map" @@ -829,205 +369,9 @@ checksum = "46ab77e35afc7a5a3087e72e8e93a90a226a78f62c5f4dceaeb3d7ef5decdccb" [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - -[[package]] -name = "heapless" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" -dependencies = [ - "hash32", - "stable_deref_trait", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" - -[[package]] -name = "iana-time-zone" -version = "0.1.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "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 = "icu_collections" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locid" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" - -[[package]] -name = "icu_normalizer" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "utf16_iter", - "utf8_iter", - "write16", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" - -[[package]] -name = "icu_properties" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_locid_transform", - "icu_properties_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" - -[[package]] -name = "icu_provider" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_provider_macros", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "idna" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" -dependencies = [ - "icu_normalizer", - "icu_properties", -] +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" [[package]] name = "imstr" @@ -1035,19 +379,11 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d3441deb04ea9c6b472f313be54d585428cd6a68cdb8dcf40cf43744bec78fe" -[[package]] -name = "imstr" -version = "0.2.0" -source = "git+https://github.com/IamTheCarl/imstr#a679d58d06f06a8e87c8640922aa157a0f86693f" -dependencies = [ - "nom 7.1.3", -] - [[package]] name = "indexmap" -version = "2.8.0" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown", @@ -1062,9 +398,9 @@ dependencies = [ "enum_downcast", "file-guard", "hashable-map", - "imstr 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "nalgebra 0.34.1", - "nom 8.0.0", + "imstr", + "nalgebra", + "nom", "num-traits", "paste", "pretty_assertions", @@ -1079,29 +415,6 @@ dependencies = [ "unwrap-enum", ] -[[package]] -name = "is-terminal" -version = "0.4.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys", -] - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - -[[package]] -name = "iter_fixed" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592ff74cdc6a923b2ae357dad7db2f5dcbf5d4ace9afcf3ab7c7f20b209fd949" - [[package]] name = "itertools" version = "0.10.5" @@ -1111,30 +424,11 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - -[[package]] -name = "jobserver" -version = "0.1.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" -dependencies = [ - "getrandom", - "libc", -] +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "join-lazy-fmt" @@ -1142,16 +436,6 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e90f66baf362a8a5ce2ca820290fbede0572a76fabf8408bc68c02f9ad1d03bf" -[[package]] -name = "js-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -1160,64 +444,18 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.179" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5a2d376baa530d1238d133232d15e239abad80d05838b4b59354e5268af431f" - -[[package]] -name = "libgit2-sys" -version = "0.16.2+1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4126d8b4ee5c9d9ea891dd875cfdc1e9d0950437179104b183d7d8a74d24e8" -dependencies = [ - "cc", - "libc", - "libssh2-sys", - "libz-sys", - "openssl-sys", - "pkg-config", -] +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libloading" -version = "0.8.6" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-targets", -] - -[[package]] -name = "libm" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" - -[[package]] -name = "libssh2-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "220e4f05ad4a218192533b300327f5150e809b54c4ec83b5a1d91833601811b9" -dependencies = [ - "cc", - "libc", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "libz-sys" -version = "1.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", + "windows-link", ] [[package]] @@ -1226,48 +464,20 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" -[[package]] -name = "litemap" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" - -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "lockfree-object-pool" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" - -[[package]] -name = "log" -version = "0.4.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" - [[package]] name = "logos" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab6f536c1af4c7cc81edf73da1f8029896e7e1e16a219ef09b184e76a296f3db" +checksum = "ff472f899b4ec2d99161c51f60ff7075eeb3097069a36050d8037a6325eb8154" dependencies = [ "logos-derive", ] [[package]] name = "logos-codegen" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "189bbfd0b61330abea797e5e9276408f2edbe4f822d7ad08685d67419aafb34e" +checksum = "192a3a2b90b0c05b27a0b2c43eecdb7c415e29243acc3f89cc8247a5b693045c" dependencies = [ "beef", "fnv", @@ -1276,32 +486,23 @@ dependencies = [ "quote", "regex-syntax", "rustc_version", - "syn 2.0.100", + "syn", ] [[package]] name = "logos-derive" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebfe8e1a19049ddbfccbd14ac834b215e11b85b90bab0c2dba7c7b92fb5d5cba" +checksum = "605d9697bcd5ef3a42d38efc51541aa3d6a4a25f7ab6d1ed0da5ac632a26b470" dependencies = [ "logos-codegen", ] -[[package]] -name = "macros" -version = "0.1.0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - [[package]] name = "matrixmultiply" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ "autocfg", "rawpointer", @@ -1309,56 +510,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430" -dependencies = [ - "adler2", -] - -[[package]] -name = "nalgebra" -version = "0.32.6" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4" -dependencies = [ - "approx", - "matrixmultiply", - "nalgebra-macros 0.2.2", - "num-complex", - "num-rational", - "num-traits", - "simba 0.8.1", - "typenum", -] - -[[package]] -name = "nalgebra" -version = "0.33.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" -dependencies = [ - "approx", - "matrixmultiply", - "nalgebra-macros 0.2.2", - "num-complex", - "num-rational", - "num-traits", - "simba 0.9.0", - "typenum", -] +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "nalgebra" @@ -1382,27 +536,16 @@ dependencies = [ "glam 0.27.0", "glam 0.28.0", "glam 0.29.3", - "glam 0.30.9", + "glam 0.30.10", "matrixmultiply", - "nalgebra-macros 0.3.0", + "nalgebra-macros", "num-complex", "num-rational", "num-traits", - "simba 0.9.0", + "simba", "typenum", ] -[[package]] -name = "nalgebra-macros" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - [[package]] name = "nalgebra-macros" version = "0.3.0" @@ -1411,17 +554,7 @@ checksum = "973e7178a678cfd059ccec50887658d482ce16b0aa9da3888ddeab5cd5eb4889" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", -] - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", + "syn", ] [[package]] @@ -1433,17 +566,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "nom_locate" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e3c83c053b0713da60c5b8de47fe8e494fe3ece5267b2f23090a07a053ba8f3" -dependencies = [ - "bytecount", - "memchr", - "nom 7.1.3", -] - [[package]] name = "num-bigint" version = "0.4.6" @@ -1463,17 +585,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "num-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - [[package]] name = "num-integer" version = "0.1.46" @@ -1501,7 +612,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", - "libm", ] [[package]] @@ -1510,24 +620,6 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "ordered-float" version = "4.6.0" @@ -1537,116 +629,12 @@ dependencies = [ "num-traits", ] -[[package]] -name = "ouroboros" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59" -dependencies = [ - "aliasable", - "ouroboros_macro", - "static_assertions", -] - -[[package]] -name = "ouroboros_macro" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "proc-macro2-diagnostics", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets", -] - -[[package]] -name = "parry2d-f64" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb6ad7b4b94d153e501bea7bee863fc83015db2f936a0a0c6745021853f1043" -dependencies = [ - "approx", - "arrayvec", - "bitflags", - "downcast-rs", - "either", - "ena", - "log", - "nalgebra 0.33.2", - "num-derive", - "num-traits", - "ordered-float", - "rustc-hash 2.1.1", - "simba 0.9.0", - "slab", - "smallvec", - "spade", - "thiserror 1.0.69", -] - -[[package]] -name = "parry3d-f64" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8b2e297ab09d7c3b746e59c23f5bd44e235540424dcccbf28314db9ccf0938f" -dependencies = [ - "approx", - "arrayvec", - "bitflags", - "downcast-rs", - "either", - "ena", - "log", - "nalgebra 0.33.2", - "num-derive", - "num-traits", - "ordered-float", - "rstar", - "rustc-hash 2.1.1", - "simba 0.9.0", - "slab", - "smallvec", - "spade", - "thiserror 1.0.69", -] - [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - [[package]] name = "phf" version = "0.11.3" @@ -1677,7 +665,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.100", + "syn", ] [[package]] @@ -1689,12 +677,6 @@ dependencies = [ "siphasher", ] -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - [[package]] name = "pretty_assertions" version = "1.4.1" @@ -1707,36 +689,23 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.31" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.100", + "syn", ] [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" dependencies = [ "unicode-ident", ] -[[package]] -name = "proc-macro2-diagnostics" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", - "version_check", - "yansi", -] - [[package]] name = "quasiquote" version = "0.1.1" @@ -1754,35 +723,25 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79bc0a2b2a185610156579070227676cf31d6282045d01273bbfc65804df6022" dependencies = [ - "itertools 0.10.5", + "itertools", "proc-macro2", "quote", ] -[[package]] -name = "quick-xml" -version = "0.37.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4ce8c88de324ff838700f36fb6ab86c96df0e3c4ab6ef3a9b2044465cce1369" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "quote" -version = "1.0.40" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "rand" @@ -1825,20 +784,11 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "redox_syscall" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" -dependencies = [ - "bitflags", -] - [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -1848,9 +798,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -1859,38 +809,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "robust" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" - -[[package]] -name = "rstar" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "421400d13ccfd26dfa5858199c30a5d76f9c54e0dba7575273025b43c5175dbb" -dependencies = [ - "heapless", - "num-traits", - "smallvec", -] - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc-hash" -version = "2.1.1" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "rustc-stable-hash" @@ -1920,17 +841,11 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "rustversion" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" - [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" [[package]] name = "safe_arch" @@ -1951,64 +866,53 @@ dependencies = [ ] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "semver" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] -name = "semver" -version = "1.0.26" +name = "serde" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ - "serde", + "serde_core", + "serde_derive", ] [[package]] -name = "serde" -version = "1.0.219" +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", ] [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "indexmap", "itoa", "memchr", - "ryu", "serde", -] - -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", + "serde_core", + "zmij", ] [[package]] @@ -2019,22 +923,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "simba" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" -dependencies = [ - "approx", - "num-complex", - "num-traits", - "paste", - "wide", -] - -[[package]] -name = "simba" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" +checksum = "c99284beb21666094ba2b75bbceda012e610f5479dfcc2d6e2426f53197ffd95" dependencies = [ "approx", "num-complex", @@ -2043,241 +934,75 @@ dependencies = [ "wide", ] -[[package]] -name = "simd-adler32" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" - [[package]] name = "siphasher" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" -[[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.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" - -[[package]] -name = "spade" -version = "2.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ece03ff43cd2a9b57ebf776ea5e78bd30b3b4185a619f041079f4109f385034" -dependencies = [ - "hashbrown", - "num-traits", - "robust", - "smallvec", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "stack" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c27dee130f751c0903be703c5355e9b333a17550d7d63d04cf0d3b1601edb8a3" -dependencies = [ - "coalesce", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "stderrlog" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c910772f992ab17d32d6760e167d2353f4130ed50e796752689556af07dc6b" -dependencies = [ - "chrono", - "is-terminal", - "log", - "termcolor", - "thread_local", -] - -[[package]] -name = "stl" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "466e72b3a9258f51f0562a01f2aea3717fb71d9997f4050c65c251a623926e12" -dependencies = [ - "byteorder 0.4.2", -] - -[[package]] -name = "streaming-iterator" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[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.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "synstructure" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "tempfile" -version = "3.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" -dependencies = [ - "fastrand", - "getrandom", - "once_cell", - "rustix", - "windows-sys", -] - -[[package]] -name = "termcolor" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "terminal_size" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" -dependencies = [ - "rustix", - "windows-sys", -] - -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] -name = "thiserror" -version = "2.0.12" +name = "stack" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "c27dee130f751c0903be703c5355e9b333a17550d7d63d04cf0d3b1601edb8a3" dependencies = [ - "thiserror-impl 2.0.12", + "coalesce", ] [[package]] -name = "thiserror-impl" -version = "1.0.69" +name = "streaming-iterator" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] +checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" [[package]] -name = "thiserror-impl" -version = "2.0.12" +name = "syn" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "unicode-ident", ] [[package]] -name = "thread_local" -version = "1.1.8" +name = "tempfile" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ - "cfg-if", + "fastrand", + "getrandom", "once_cell", + "rustix", + "windows-sys", ] [[package]] -name = "threemf" -version = "0.7.0" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d946000a45b7cd15c3e64d781b2ea4270f30f82c2712de3267195d4fb24475" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "quick-xml", - "serde", - "thiserror 2.0.12", - "zip", + "thiserror-impl", ] [[package]] -name = "tinystr" -version = "0.7.6" +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "displaydoc", - "zerovec", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -2304,18 +1029,9 @@ dependencies = [ [[package]] name = "tree-sitter-language" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4013970217383f67b18aef68f6fb2e8d409bc5755227092d32efb0422ba24b8" - -[[package]] -name = "type-map" -version = "0.5.0" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" -dependencies = [ - "rustc-hash 1.1.0", -] +checksum = "4ae62f7eae5eb549c71b76658648b72cc6111f2d87d24a1e31fa907f4943e3ce" [[package]] name = "type-sitter" @@ -2349,7 +1065,7 @@ dependencies = [ "serde", "serde_json", "slice-group-by", - "syn 2.0.100", + "syn", "tree-sitter", "tree-sitter-language", "walkdir", @@ -2371,15 +1087,15 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4240aa23c38a18dc53f8422374fac3d7514654ec28258ef173b53ba9bee37a6e" dependencies = [ - "syn 2.0.100", + "syn", "type-sitter-gen", ] [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "uneval" @@ -2388,14 +1104,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63cc5d2fd8648d7e2be86098f60c9ece7045cc710b3c1e226910e2f37d11dc73" dependencies = [ "serde", - "thiserror 1.0.69", + "thiserror", ] [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-segmentation" @@ -2413,84 +1129,27 @@ dependencies = [ "uneval", ] -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - [[package]] name = "unwrap-enum" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8161548e56cec5b635552524711010ce2eefbe0aed221b05e7fcd80f4d0a20c" +checksum = "e5639235db46432e23bff2caf3a02096d9a801c99560198f3edba4edf8d015a5" dependencies = [ "unwrap-enum-proc-macro", ] [[package]] name = "unwrap-enum-proc-macro" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9309938e63f1a5cff15f2e4c5d426e1fed0354d3e66800942b3e1e4083984d39" +checksum = "5771812808a3442129fa6c692ecb4ae77e690b530598854af2be0fda01657a94" dependencies = [ "proc-macro2", "quasiquote", "quote", - "syn 2.0.100", -] - -[[package]] -name = "uom" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8362194c7a9845a7a7f3562173d6e1da3f24f7132018cb78fe77a5b4474187b2" -dependencies = [ - "num-traits", - "typenum", -] - -[[package]] -name = "url" -version = "2.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", + "syn", ] -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[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.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - [[package]] name = "walkdir" version = "2.5.0" @@ -2502,110 +1161,19 @@ dependencies = [ ] [[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" -dependencies = [ - "wit-bindgen-rt", -] - -[[package]] -name = "wasite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" - -[[package]] -name = "wasm-bindgen" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" -dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.100", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "wavefront_rs" -version = "2.0.0-beta.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2f237e2271c3f9ccc633ee16918789514fd5a823bf62ddce21f8a730a1d9930" - -[[package]] -name = "web-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "whoami" -version = "1.6.0" +name = "wasip2" +version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ - "redox_syscall", - "wasite", - "web-sys", + "wit-bindgen", ] [[package]] name = "wide" -version = "0.7.32" +version = "0.7.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" dependencies = [ "bytemuck", "safe_arch", @@ -2629,9 +1197,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ "windows-sys", ] @@ -2642,158 +1210,26 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-core" -version = "0.61.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" -dependencies = [ - "windows-implement", - "windows-interface", - "windows-link", - "windows-result", - "windows-strings", -] - -[[package]] -name = "windows-implement" -version = "0.60.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "windows-interface" -version = "0.59.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - [[package]] name = "windows-link" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" - -[[package]] -name = "windows-result" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-strings" -version = "0.4.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" -dependencies = [ - "windows-link", -] +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "bitflags", + "windows-link", ] [[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - -[[package]] -name = "writeable" -version = "0.5.5" +name = "wit-bindgen" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" [[package]] name = "yansi" @@ -2802,97 +1238,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] -name = "yoke" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", - "synstructure", -] - -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", - "synstructure", -] - -[[package]] -name = "zerovec" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "zip" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dcb24d0152526ae49b9b96c1dcf71850ca1e0b882e4e28ed898a93c41334744" -dependencies = [ - "arbitrary", - "crc32fast", - "crossbeam-utils", - "flate2", - "indexmap", - "memchr", - "zopfli", -] - -[[package]] -name = "zopfli" -version = "0.8.1" +name = "zmij" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" -dependencies = [ - "bumpalo", - "crc32fast", - "lockfree-object-pool", - "log", - "once_cell", - "simd-adler32", -] +checksum = "bd8f3f50b848df28f887acb68e41201b5aea6bc8a8dacc00fb40635ff9a72fea" diff --git a/Cargo.toml b/Cargo.toml index f808e5b..e6ca685 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,48 +1,9 @@ -workspace = { members = ["crates/common_data_types", "crates/macros", "crates/formatter", "crates/interpreter", "crates/units"] } -[package] -name = "command_cad" -version = "0.6.0" -edition = "2021" +[workspace] +resolver = "3" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -anyhow = "1.0" -casey = "0.4" -clap = { version = "4.4", features = [ "derive", "wrap_help" ] } -compact_str = "0.7" -const-str = "0.5" -enum_dispatch = "0.3" -enum_downcast = { version = "0.1", features = [ "derive" ] } -fj-core = { git = "https://github.com/hannobraun/fornjot.git" } -fj-math = { git = "https://github.com/hannobraun/fornjot.git" } -fj-export = { git = "https://github.com/hannobraun/fornjot.git" } -fortuples = "0.9" -git2 = "0.18" -imstr = { git = "https://github.com/IamTheCarl/imstr", version = "0.2", features = [ "std", "nom" ] } -lazy_static = "1.4" -log = "0.4" -nom = "7.1" -nom_locate = "4.2" -paste = "1.0" -semver = { version = "1.0", features = [ "serde" ] } -serde = { version = "1.0", features = [ "derive" ] } -serde_json = "1.0.113" -serde_yaml = "0.9" -uom = "0.35" -whoami = "1.4" -stderrlog = "0.6" -tempfile = "3.10" -common_data_types = { path = "crates/common_data_types" } -nalgebra = "0.32" -arrayvec = "0.7.4" -ouroboros = "0.18.3" -bezier-rs = "=0.4.0" -macros = { path = "crates/macros" } -glam = "0.24" - -[build-dependencies] -csv = "1.3.0" -serde = { version = "1.0", features = [ "derive" ] } -uneval = "0.2.4" -common_data_types = { path = "crates/common_data_types" } +members = [ + "interpreter", + "common_data_types", + "tree-sitter-command-cad-model", + "units" +] diff --git a/build.rs b/build.rs deleted file mode 100644 index c024905..0000000 --- a/build.rs +++ /dev/null @@ -1,613 +0,0 @@ -use std::{collections::HashMap, fs::File, io::Write}; - -use serde::Deserialize; - -use common_data_types::{ - BaseUnits, ConversionFactor, ConversionFactorDatabase, Dimension, DimensionNameDatabase, - RatioTypeHint, UnitDescription, UnitList, -}; - -#[derive(Debug, Deserialize)] -pub struct Row { - pub dimension_name: String, - pub length: i8, - pub mass: i8, - pub time: i8, - pub electric_current: i8, - pub thermodynamic_temperature: i8, - pub amount_of_substance: i8, - pub luminous_intensity: i8, - pub angle_kind: bool, - pub constituent_concentration_kind: bool, - pub information_kind: bool, - pub solid_angle_kind: bool, - pub temperature_kind: bool, - pub pixel_kind: bool, - pub singular: String, - pub plural: String, - pub abbreviation: String, - pub keyboard_friendly_abbreviation: String, - pub conversion_coefficient: f64, - pub conversion_constant: f64, -} - -macro_rules! get_base_unit { - ($unit_names:ident, $unit_info:ident, $name:literal) => {{ - let dimension = $unit_info.get($name).expect("Did not find unit info"); - let name = $unit_names - .get($name) - .expect("Did not find unit name") - .clone(); - (*dimension, name.into()) - }}; -} - -fn main() { - let mut source_data = csv::ReaderBuilder::new() - .flexible(false) - .has_headers(true) - .from_path("src/script/execution/types/math/units.csv") - .unwrap(); - - let mut conversion_factors = ConversionFactorDatabase::new(); - let mut dimension_names = DimensionNameDatabase::new(); - let mut unit_list: HashMap> = HashMap::new(); - - let mut dimension_base_units: HashMap = HashMap::new(); - let mut unit_names_to_abbreviations: HashMap = HashMap::new(); - - for result in source_data.deserialize() { - let row: Row = result.unwrap(); - - // Enforce keyboard friendly abbreviations only using ascii characters. - if !row.keyboard_friendly_abbreviation.is_ascii() { - panic!( - "Abbreviation `{}` contains non-ascii characters", - row.keyboard_friendly_abbreviation - ); - } - - unit_names_to_abbreviations.insert( - row.singular.clone(), - row.keyboard_friendly_abbreviation.clone(), - ); - - let mut ratio_type_hint = RatioTypeHint::default(); - - ratio_type_hint.set_is_angle(row.angle_kind); - ratio_type_hint.set_is_constituent_concentration(row.constituent_concentration_kind); - ratio_type_hint.set_is_information(row.information_kind); - ratio_type_hint.set_is_solid_angle(row.solid_angle_kind); - ratio_type_hint.set_is_temperature(row.temperature_kind); - ratio_type_hint.set_is_pixel(row.pixel_kind); - - let dimension = Dimension { - length: row.length, - mass: row.mass, - time: row.time, - electric_current: row.electric_current, - thermodynamic_temprature: row.thermodynamic_temperature, - amount_of_substance: row.amount_of_substance, - luminous_intensity: row.luminous_intensity, - ratio_type_hint, - }; - - dimension_base_units.insert(row.singular.clone(), dimension); - - // Record conversion factor. - let already_exists = conversion_factors - .insert( - row.keyboard_friendly_abbreviation.clone().into(), - ConversionFactor { - constant: row.conversion_constant, - coefficient: row.conversion_coefficient, - dimension, - }, - ) - .is_some(); - - if already_exists { - panic!( - "Multiple units use the abbreviation `{}`", - row.keyboard_friendly_abbreviation - ); - } - - // Self-deduplicating list of names for the dimensions. - dimension_names.insert(dimension, row.dimension_name.clone().into()); - - unit_list - .entry(row.dimension_name) - .or_default() - .push(UnitDescription { - abbreviation: row.abbreviation, - keyboard_friendly_abbreviation: row.keyboard_friendly_abbreviation, - name: row.singular, - plural_name: row.plural, - }); - } - - let base_units: BaseUnits = BaseUnits::from([ - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "meter second" - ), // abasement - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "meter per second squared" - ), // acceleration - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "joule second" - ), // action - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "mole"), // amount_of_substance - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "radian"), // angle - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "radian second" - ), // angular_abasement - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "radian per second squared" - ), // angular_acceleration - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "radian per second cubed" - ), // angular_jerk - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "radian per second" - ), // angular_velocity - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "square meter" - ), // area - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "state per square meter joule" - ), // areal_density_of_states - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "kilogram per square meter" - ), // areal_mass_density - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "per square meter" - ), // areal_number_density - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "per square meter second" - ), // areal_number_rate - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "joule per kilogram" - ), // available_energy - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "farad"), // capacitance - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "katal"), // catalytic_activity - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "katal per cubic meter" - ), // catalytic_activity_concentration - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "radian per meter" - ), // curvature - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "square meter per second" - ), // diffusion_coefficient - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "pascal second" - ), // dynamic_viscosity - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "coulomb"), // electric_charge - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "coulomb per square meter" - ), // electric_charge_areal_density - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "coulomb per meter" - ), // electric_charge_linear_density - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "coulomb per cubic meter" - ), // electric_charge_volumetric_density - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "ampere"), // electric_current - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "ampere per square meter" - ), // electric_current_density - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "coulomb meter" - ), // electric_dipole_moment - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "coulomb per square meter" - ), // electric_displacement_field - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "volt per meter" - ), // electric_field - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "volt meter" - ), // electric_flux - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "farad per meter" - ), // electric_permittivity - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "volt"), // electric_potential - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "coulomb square meter" - ), // electric_quadrupole_moment - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "siemens"), // electrical_conductance - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "siemens per meter" - ), // electrical_conductivity - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "square meter per volt second" - ), // electrical_mobility - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "ohm"), // electrical_resistance - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "ohm meter" - ), // electrical_resistivity - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "joule"), // energy - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "newton"), // force - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "hertz"), // frequency - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "hertz per second" - ), // frequency_drift - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "joule per kelvin" - ), // heat_capacity - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "watt per square meter" - ), // heat_flux_density - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "watt per square meter kelvin" - ), // heat_transfer - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "henry"), // inductance - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "byte"), // information - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "byte per second" - ), // information_rate - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "second per meter" - ), // inverse_velocity - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "meter per second cubed" - ), // jerk - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "meter"), // length - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "state per meter joule" - ), // linear_density_of_states - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "kilogram per meter" - ), // linear_mass_density - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "per meter" - ), // linear_number_density - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "per meter second" - ), // linear_number_rate - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "watt per meter" - ), // linear_power_density - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "candela per square meter" - ), // luminance - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "candela"), // luminous_intensity - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "ampere per meter" - ), // magnetic_field_strength - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "weber"), // magnetic_flux - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "tesla"), // magnetic_flux_density - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "ampere square meter" - ), // magnetic_moment - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "henry per meter" - ), // magnetic_permeability - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "kilogram" - ), // mass - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "kilogram per cubic meter" - ), // mass_concentration - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "kilogram per cubic meter" - ), // mass_density - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "kilogram per square meter second" - ), // mass_flux - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "kilogram per joule" - ), // mass_per_energy - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "kilogram per second" - ), // mass_rate - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "mole per kilogram" - ), // molality - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "mole per cubic meter" - ), // molar_concentration - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "joule per mole" - ), // molar_energy - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "mole per square meter second" - ), // molar_flux - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "joule per kelvin mole" - ), // molar_heat_capacity - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "kilogram per mole" - ), // molar_mass - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "becquerel per mole" - ), // molar_radioactivity - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "cubic meter per mole" - ), // molar_volume - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "kilogram square meter" - ), // moment_of_inertia - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "kilogram meter per second" - ), // momentum - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "watt"), // power - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "watt per second" - ), // power_rate - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "pascal"), // pressure - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "joule per square meter" - ), // radiant_exposure - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "becquerel" - ), // radioactivity - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "number"), // ratio - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "reciprocal meter" - ), // reciprocal_length - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "steradian" - ), // solid_angle - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "square meter per kilogram" - ), // specific_area - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "joule per kilogram kelvin" - ), // specific_heat_capacity - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "watt per kilogram" - ), // specific_power - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "becquerel per kilogram" - ), // specific_radioactivity - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "cubic meter per kilogram" - ), // specific_volume - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "ampere per meter" - ), // surface_electric_current_density - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "per kelvin" - ), // temperature_coefficient - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "kelvin per meter" - ), // temperature_gradient - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "kelvin"), // temperature_interval - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "watt per kelvin" - ), // thermal_conductance - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "watt per meter kelvin" - ), // thermal_conductivity - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "kelvin"), // thermodynamic_temperature - get_base_unit!(unit_names_to_abbreviations, dimension_base_units, "second"), // time - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "newton meter" - ), // torque - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "meter per second" - ), // velocity - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "cubic meter" - ), // volume - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "cubic meter per second" - ), // volume_rate - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "state per cubic meter joule" - ), // volumetric_density_of_states - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "joule per cubic meter kelvin" - ), // volumetric_heat_capacity - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "per cubic meter" - ), // volumetric_number_density - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "per cubic meter second" - ), // volumetric_number_rate - get_base_unit!( - unit_names_to_abbreviations, - dimension_base_units, - "watt per cubic meter" - ), // volumetric_power_density - ]); - - let mut unit_list: UnitList = unit_list.into_iter().collect(); - unit_list.sort_by(|(key_a, _list_a), (key_b, _list_b)| key_a.cmp(key_b)); - - // Conversion factors has some constants in it, but there's no way to represent those constants in a CSV file, so we'll just have to - // insert this warning suppression at the start of the generated file. - let conversion_factor_file_path: std::path::PathBuf = [ - std::env::var("OUT_DIR").unwrap(), - "conversion_factors.rs".into(), - ] - .iter() - .collect(); - let mut conversion_factor_file = File::create(conversion_factor_file_path).unwrap(); - writeln!( - &mut conversion_factor_file, - "#[allow(clippy::approx_constant)]" - ) - .unwrap(); - uneval::write(conversion_factors, conversion_factor_file).unwrap(); - - uneval::to_out_dir(dimension_names, "dimension_names.rs").unwrap(); - uneval::to_out_dir(unit_list, "unit_list.rs").unwrap(); - uneval::to_out_dir(base_units, "base_units.rs").unwrap(); - - println!("cargo:rerun-if-changed=build.rs"); - println!("cargo:rerun-if-changed=src/script/execution/types/math/units.csv"); - println!("cargo:rerun-if-changed=crates/common_data_types/src/lib.rs"); -} diff --git a/crates/common_data_types/Cargo.toml b/common_data_types/Cargo.toml similarity index 100% rename from crates/common_data_types/Cargo.toml rename to common_data_types/Cargo.toml diff --git a/crates/common_data_types/src/lib.rs b/common_data_types/src/lib.rs similarity index 100% rename from crates/common_data_types/src/lib.rs rename to common_data_types/src/lib.rs diff --git a/crates/macros/Cargo.toml b/crates/macros/Cargo.toml deleted file mode 100644 index 6520800..0000000 --- a/crates/macros/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "macros" -version = "0.1.0" -edition = "2021" - - -[lib] -proc-macro = true - -[dependencies] -quote = "1.0" -syn = { version = "2.0", features = ["derive"] } -proc-macro2 = "1.0" diff --git a/crates/macros/src/lib.rs b/crates/macros/src/lib.rs deleted file mode 100644 index 7d0f4a9..0000000 --- a/crates/macros/src/lib.rs +++ /dev/null @@ -1,112 +0,0 @@ -use proc_macro::TokenStream; -use quote::quote; -use syn::{parse_macro_input, DeriveInput, Fields, Meta}; - -#[proc_macro_derive(Struct, attributes(default))] -pub fn derive_struct(input: TokenStream) -> TokenStream { - let input = parse_macro_input!(input as DeriveInput); - - let struct_name = input.ident; - - let contains_span = input.generics.type_params().any(|param| param.ident == "S"); - - let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl(); - let struct_name_string = struct_name.to_string(); - let struct_definition_name = struct_name.to_string(); - let struct_definition_name2 = struct_definition_name.clone(); - - let function_generics = if !contains_span { - quote! { } - } else { - quote! {} - }; - - let fields = match input.data { - syn::Data::Struct(data) => match data.fields { - Fields::Named(fields) => fields.named, - _ => panic!("Struct must have named fields."), - }, - _ => { - panic!("Only structs can be made available to scripts."); - } - }; - let define_fields = fields.clone().into_iter().map(|field| { - let name = field.ident.unwrap().to_string(); - let ty = field.ty; - - let mut default = quote! { None }; - - for attribute in field.attrs.iter() { - if let Meta::NameValue(name_value) = &attribute.meta { - if name_value.path.is_ident("default") { - let value = &name_value.value; - default = quote! { Some(crate::script::parsing::Litteral::parse(S::from_str(#value)).unwrap().1) }; - } - } - } - - quote! { - MemberVariable { - name: S::from_str(#name), - ty: MemberVariableType { - ty: <#ty as crate::script::execution::types::TypedObject>::get_type(), - constraints: None, - default_value: #default, - } - } - } - }); - - let extract_fields = fields.clone().into_iter().map(|field| { - let name = field.ident.unwrap(); - let name_string = name.to_string(); - let ty = field.ty; - - quote! { - let #name = members.remove(#name_string).unwrap(); - let #name = #name.downcast::<#ty>(span)?; - } - }); - - let import_fields = fields.clone().into_iter().map(|field| { - let name = field.ident.unwrap(); - quote! { #name } - }); - - quote! { - impl #impl_generics #struct_name #ty_generics #where_clause { - pub fn unpack_struct #function_generics (span: &S, structure: crate::script::execution::types::Structure) -> std::result::Result> { - // Check that it's the correct type. - if structure.name() == #struct_name_string { - let mut members = Rc::unwrap_or_clone(structure.members); - - // Extract fields. - #(#extract_fields)* - - // Import fields into the struct. - Ok(#struct_name { - #(#import_fields),* - }) - } else { - Err(crate::script::execution::Failure::ExpectedGot(span.clone(), #struct_name_string.into(), structure.name().to_string().into())) - } - } - } - impl #impl_generics #struct_name #ty_generics #where_clause { - fn define_struct #function_generics (context: &mut crate::script::execution::ExecutionContext<'_, S>) { - context.stack.new_variable_str( - #struct_definition_name, - StructDefinition { - definition: Rc::new(parsing::StructDefinition { - name: S::from_str(#struct_definition_name2), - members: vec![ - #(#define_fields),* - ], - }), - } - .into(), - ); - } - } - }.into() -} diff --git a/examples/README.md b/examples/README.md deleted file mode 100644 index e68ec32..0000000 --- a/examples/README.md +++ /dev/null @@ -1,115 +0,0 @@ -# Examples - -These are examples of what can currently be done with Command CAD. -Please note that most files contain multiple examples you can run. - -## Basic Math - -Examples of mathmatical operations, and some control flow demos. Really demonstraights the CLI serialization and deserialization features. - -### Addition - -Performs addition of two numbers. - -``` -cargo run -- run examples/basic_math.ccm addition -- 2 3 -5.0 -``` - -### Recursive Addition - -A recursive function that will count down from the specified number of cycles, and add the remaning number of cycles to the total sum. -For example, if I were to input 3, the output would be the sum of 3 + 2 + 1, resulting in 6. - -``` -cargo run -- run examples/basic_math.ccm recursive_addition -- 3 -6.0 -``` - -### Convert to Meters - -Converts lengths to meters. - -``` -cargo run -- run examples/basic_math.ccm convert_to_meters -- 3yd -2.7432 -``` - -### Default value - -Functions can have default values provided, but you can also override the default value from the CLI. - -``` -cargo run -- run examples/basic_math.ccm default_value -- default -42.0 -``` - -``` -cargo run -- run examples/basic_math.ccm default_value -- 3yd -2.7432 -``` - -## Bearing - -The file `bearing.ccm` is actually pseudo code that was used to drive the design of Command CAD. Eventually it will be a working example but for the moment it is not. - -## Fornjot Demos - -Copies the demos from the Fornjot repository (Fornjot being the CAD kernel this project is built on) - -### Cuboid - -Create a box structure by providing its measurements. -``` -cargo run -- form examples/fornjot_demos.ccm cuboid --output ~/cuboid.stl -- 1cm 1cm 1cm -``` - -### Holes - -Craete a box and show off some holes! -``` -cargo run -- form examples/fornjot_demos.ccm holes --output ~/output.stl -- 5mm -``` - -### Spacer - -Create a simple ring spacer. -``` -cargo run -- form examples/fornjot_demos.ccm spacer --output ~/output.stl -- 10mm 5mm 5mm -``` - -### Star - -Create a star. -``` -cargo run -- form examples/fornjot_demos.ccm star --output ~/output.stl -- 5 10mm 5mm 5mm -``` - -## Sketches - -Demonstrates the creation of 2D objects. -Please note that export of 2D objects is not yet supported, so the output of these is not very exciting. - -### Circle - -Creates a circle with the provided diameter. - -``` -cargo run -- sketch examples/sketches.ccm circle -- 1cm -``` - -### Square - -Creates a square with the provided side length. - -``` -cargo run -- sketch examples/sketches.ccm square -- 1cm -``` - -### Square with Circle - -Creates a sketch with both a square and a circle with the provided dimensions. - -``` -cargo run -- sketch examples/sketches.ccm square_with_circle -- 2cm 1cm -``` diff --git a/examples/advance_sketches.ccm b/examples/advance_sketches.ccm deleted file mode 100644 index 761b0d1..0000000 --- a/examples/advance_sketches.ccm +++ /dev/null @@ -1,146 +0,0 @@ - -sketch square(width: Length, height: Length) { - let half_width = width / 2; - let half_height = height / 2; - - let corner_1 = vec2(-half_width, -half_height); - let corner_2 = vec2(half_width, -half_height); - let corner_3 = vec2(half_width, half_height); - let corner_4 = vec2(-half_width, half_height); - - new_sketch(sketch_plane(), [ - new_region(Segments { - start = corner_1, - surface = sketch_plane(), - distance_between_verticies = default, - segments = [ - Line { - end = corner_2 - }, - Line { - end = corner_3 - }, - Line { - end = corner_4 - }, - Line { - end = corner_1 - }, - ] - }), - ]) -} - -solid square_sweep(depth: Length = 2mm, width: Length = 2cm, height: Length = 3cm) { - let square_sketch = square(width, height); - - square_sketch.sweep(global_xy_plane(), vec3(0m, 0m, depth)) -} - -sketch rounded_square(width: Length, height: Length, corner_radius: Length) { - let half_width = width / 2; - let half_height = height / 2; - - print("Half Width: {} Half Height: {}".format(half_width, half_height)); - - let corner_1 = vec2(-half_width, -half_height); - let corner_2 = vec2(half_width, -half_height); - let corner_3 = vec2(half_width, half_height); - let corner_4 = vec2(-half_width, half_height); - - print("Corner 1: ({})x({})".format(corner_1.x, corner_1.y)); - print("Corner 2: ({})x({})".format(corner_2.x, corner_2.y)); - print("Corner 3: ({})x({})".format(corner_3.x, corner_3.y)); - print("Corner 4: ({})x({})".format(corner_4.x, corner_4.y)); - - new_sketch(sketch_plane(), [ - new_region(Segments { - start = corner_1 + vec2(0m, corner_radius), - surface = sketch_plane(), - distance_between_verticies = default, - segments = [ - CenterArc { - center = corner_1 + vec2(corner_radius, corner_radius), - angle = 90deg, - clockwise = false, - }, - Line { - end = corner_2 + vec2(-corner_radius, 0m), - }, - CenterArc { - center = corner_2 + vec2(-corner_radius, corner_radius), - angle = 90deg, - clockwise = false, - }, - Line { - end = corner_3 + vec2(0m, -corner_radius), - }, - CenterArc { - center = corner_3 + vec2(-corner_radius, -corner_radius), - angle = 90deg, - clockwise = false, - }, - Line { - end = corner_4 + vec2(corner_radius, 0m), - }, - CenterArc { - center = corner_4 + vec2(corner_radius, -corner_radius), - angle = 90deg, - clockwise = false, - }, - Line { - end = corner_1 + vec2(0m, corner_radius), - }, - ] - }), - ]) -} - -solid rounded_square_sweep(depth: Length = 2mm, width: Length = 2cm, height: Length = 3cm, corner_radius: Length = 5mm) { - let square_sketch = rounded_square(width, height, corner_radius); - - square_sketch.sweep(global_xy_plane(), vec3(0m, 0m, depth)) -} - -sketch beziers(width: Length, height: Length) { - let half_width = width / 2; - let half_height = height / 2; - - print("Half Width: {} Half Height: {}".format(half_width, half_height)); - - let corner_1 = vec2(-half_width, -half_height); - let corner_2 = vec2(half_width, -half_height); - let corner_3 = vec2(half_width, half_height); - let corner_4 = vec2(-half_width, half_height); - - new_sketch(sketch_plane(), [ - new_region(Segments { - start = corner_1, - surface = sketch_plane(), - distance_between_verticies = default, - segments = [ - Line { - end = corner_2, - }, - QuadraticBezier { - end = corner_3, - handle = vec2(half_width * 2, 0m), - }, - Line { - end = corner_4, - }, - CubicBezier { - end = corner_1, - start_handle = corner_4 + vec2(half_width, 0m), - end_handle = corner_1 + vec2(-half_width, 0m), - }, - ] - }), - ]) -} - -solid beziers_sweep(depth: Length = 2mm, width: Length = 2cm, height: Length = 3cm) { - let beziers_sketch = beziers(width, height); - - beziers_sketch.sweep(global_xy_plane(), vec3(0m, 0m, depth)) -} \ No newline at end of file diff --git a/examples/basic_math.ccm b/examples/basic_math.ccm deleted file mode 100644 index 26f01e1..0000000 --- a/examples/basic_math.ccm +++ /dev/null @@ -1,22 +0,0 @@ - -task addition(a: Number, b: Number) -> Number { - a + b -} - -task recursive_addition(number_of_cycles: Number) -> Number { - if number_of_cycles > 0 { - number_of_cycles + recursive_addition(number_of_cycles - 1) - } else { - 0 - } -} - -task convert_to_meters(input: Length) -> Number { - // We can't return measurements to the CLI. - // External programs won't know how to interpret those, so we have to convert it to a number. - input.to_number("m") -} - -task default_value(input: Length = 42m) -> Number { - input.to_number("m") -} \ No newline at end of file diff --git a/examples/bearing.ccm b/examples/bearing.ccm deleted file mode 100644 index b6298bb..0000000 --- a/examples/bearing.ccm +++ /dev/null @@ -1,166 +0,0 @@ - -struct Parameters { - drum_bottom_radius: Length = 50mm; - drum_top_radius: Length = 51mm; - drum_height: Length = 50mm; - - thickness: Length = 10mm; - depth: Length = 10mm; - - support_ring_thickness_scalar: Number = 0.2; - ring_position_on_bucket: Length = 25mm; - - printer_preferred_slope: Angle = 60degrees; - - #[min(1), integer] - number_of_segments: Number = 4; - - - #[min(0)] - bearing_gap: Length = 0.5mm; - - groove_depth: Length = 1mm; -} - -struct CommonDerived { - drum_slope: Length, - outer_starting_radius: Length, - outer_ending_radius: Length, - mid_radius: Length, - support_ring_thickness: Length, - bearing_space: Length, - bearing_radius: Length, -} - -function common_derived(parameters: Parameters) -> CommonDerived { - CommonDerived { - drum_slope: (parameters.drum_top_radius - parameters.drum_bottom_radius) / parameters.drum_height, - outer_starting_radius: parameters.drum_bottom_radius + parameters.ring_position_on_bucket * parameters.drum_slope, - outer_ending_radius: parameters.outer_starting_radius - parameters.thickness * parameters.drum_slope, - mid_radius: parameters.outer_starting_radius - parameters.thickness * 0.5, - support_ring_thickness: parameters.support_ring_thickness_scalar * parameters.thickness, - bearing_space: parameters.thickness - parameters.support_ring_thickness * 2, - bearing_radius: parameters.bearing_space - parameters.bearing_gap, - groove_width: tan(parameters.printer_preferred_slope) * parameters.groove_depth, - } -} - -// sketch RingPolygon() {} - -widget OuterRing(parameters: Parameters) { - let derived = common_derived(parameters); - - let ring_points = - [V2(outer_starting_radius, 0), V2(outer_ending_radius, depth), - V2(derived.mid_radius + derived.bearing_space * 0.5 + parameters.groove_depth, parameters.depth), - V2(derived.mid_radius + derived.bearing_space * 0.5, parameters.depth - tan(parameters.printer_preferred_slope) * parameters.groove_depth), - V2(derived.mid_radius + derived.bearing_space * 0.5, tan(parameters.printer_preferred_slope) * parameters.groove_depth), - V2(derived.mid_radius + derived.bearing_space * 0.5 + parameters.groove_depth, 0)]; - - let sketch = polygon(ring_points); - let main_rail = sketch.rotate_extrude(360degrees / parameteres.number_of_segments); - - let mid_point = V2(outer_starting_radius - groove_depth * 0.8, depth/2); - - let male_tongue_points = [ - mid_point, - ring_points[2], - ring_points[3], - ring_points[4], - ring_points[5]]; - - let sketch = polygon(male_tongue_points); - let male_tongue = sketch.rotate_extrude(-10degrees); - - let female_tonge_points = [ - outer_ring_points[2], - mid_point, - outer_ring_points[5], - outer_ring_points[0], - outer_ring_points[1]]; - - let sketch = polygon(female_tonge_points); - let female_tonge = sketch.rotate_extrude(10degrees); - let female_tonge.rotate(V3(0mm, 0mm, 1mm), 360degrees / parameters.number_of_segments); - - female_tonge -} - - -// module InnerRing() { -// inner_starting_radius_mm = OUTER_STARTING__MM - THICKNESS_MM; -// inner_ending_radius_mm = OUTER_ENDING_RADIUS_MM - THICKNESS_MM; -// -// outer_ring_points = -// [[inner_starting_radius_mm, 0], [inner_ending_radius_mm, DEPTH_MM], -// [MID_RADIUS_MM - BEARING_SPACE_MM * 0.5 - GROOVE_DEPTH_MM, DEPTH_MM], -// [MID_RADIUS_MM - BEARING_SPACE_MM * 0.5, DEPTH_MM - GROOVE_WIDTH_MM], -// [MID_RADIUS_MM - BEARING_SPACE_MM * 0.5, GROOVE_WIDTH_MM], -// [MID_RADIUS_MM - BEARING_SPACE_MM * 0.5 - GROOVE_DEPTH_MM, 0]]; -// -// rotate_extrude(angle = 360 / NUMBER_OF_SEGMENTS, $fn=360) { -// polygon(outer_ring_points); -// } -// -// mid_point = [inner_starting_radius_mm + GROOVE_DEPTH_MM * 0.8, DEPTH_MM/2]; -// -// male_tongue_points = [ -// mid_point, -// outer_ring_points[2], -// outer_ring_points[3], -// outer_ring_points[4], -// outer_ring_points[5]]; -// -// rotate_extrude(angle = -10, $fn=360) { -// polygon(male_tongue_points); -// } -// -// female_tonge_points = [ -// outer_ring_points[2], -// mid_point, -// outer_ring_points[5], -// outer_ring_points[0], -// outer_ring_points[1]]; -// -// rotate([0, 0, 360 / NUMBER_OF_SEGMENTS]) { -// rotate_extrude(angle = 10, $fn=360) { -// polygon(female_tonge_points); -// } -// } -// } -// -// module Bearing() { -// roller_radius_mm = BEARING_RADIUS_MM * 0.5; -// flange_radius_mm = roller_radius_mm + GROOVE_DEPTH_MM; -// -// points = [ -// [0.0, 0.0], -// [flange_radius_mm, 0.0], -// [roller_radius_mm, GROOVE_WIDTH_MM], -// [roller_radius_mm, DEPTH_MM - GROOVE_WIDTH_MM], -// [flange_radius_mm, DEPTH_MM], -// [0.0, DEPTH_MM]]; -// -// rotate_extrude($fn=360) { -// polygon(points); -// } -// } -// -// if (EXPORT == "PREVIEW") { -// for (i = [0:NUMBER_OF_SEGMENTS]) { -// rotate([0, 0, i*(360/NUMBER_OF_SEGMENTS)]) { -// OuterRing(); -// InnerRing(); -// } -// } -// -// number_of_bearings = floor((MID_RADIUS_MM * PI * 2) / (BEARING_SPACE_MM + GROOVE_DEPTH_MM * 2)); -// -// for (i = [0:number_of_bearings]) { -// rotate([0, 0, i*(360/number_of_bearings)]) { -// translate([MID_RADIUS_MM, 0, 0]) { -// Bearing(); -// } -// } -// } -// } diff --git a/examples/fornjot_demos.ccm b/examples/fornjot_demos.ccm deleted file mode 100644 index 2b84248..0000000 --- a/examples/fornjot_demos.ccm +++ /dev/null @@ -1,83 +0,0 @@ - -solid cuboid(x: Length, y: Length, z: Length) { - let base_sketch = new_sketch(Polygon { points = [ - vec2(-x / 2., -y / 2.), - vec2(x / 2., -y / 2.), - vec2(x / 2., y / 2.), - vec2(-x / 2., y / 2.) - ], - surface = global_xy_plane() - }); - - base_sketch.sweep(global_xy_plane(), vec3(0cm, 0cm, z)) -} - -solid holes(hole_radius: Length) { - let size = hole_radius * 4; - let cube = cuboid(size * 2, size, size); - - let cube = cube.update_shell(cube.shells[0], [hole_radius, size](shell: Shell) -> Shell { - let offset = size / 2; - let depth = size / 2; - - let bottom_face = shell.faces[0]; - let shell = shell.add_blind_hole(bottom_face, vec2(-offset, 0mm), hole_radius, vec3(0mm, 0mm, depth)); - - let bottom_face = shell.faces[0]; - let top_face = shell.faces[5]; - let shell = shell.add_through_hole(bottom_face, vec2(offset, 0mm), top_face, vec2(offset, 0mm), hole_radius); - - [shell] - }); - - cube -} - -solid spacer(outer_radius: Length, inner_radius: Length, height: Length) { - let bottom_surface = global_xy_plane(); - let sweep_path = vec3(0mm, 0mm, height); - - let base_sketch = new_sketch(global_xy_plane(), [ - new_region(RawRegion { - exterior = new_cycle(Circle { center = vec2(0mm, 0mm), radius = outer_radius, surface = global_xy_plane() }), - interiors = [new_cycle(Circle { center = vec2(0mm, 0mm), radius = inner_radius, surface = global_xy_plane() }).reverse()], - }) - ]); - - base_sketch.sweep(bottom_surface, sweep_path) -} - -solid star(num_points: Number, r1: Length, r2: Length, h: Length) { - let num_verticies = num_points * 2; - - let outer_points = []; - let inner_points = []; - - for index in 0..num_verticies { - let angle = 2rad / num_verticies * index; - - // TODO We need to add support for the modulous operator. - let radius = if (index / 2).fract() == 0 { r1 } else { r2 }; - - let normal_vector = angle.sin_cos(); - let point = normal_vector * radius; - - outer_points.append([point]); - inner_points.append([point / 2]); - } - - let bottom_surface = global_xy_plane(); - let sweep_path = vec3(0mm, 0mm, h); - - let exterior = new_cycle(Polygon { points = outer_points, surface = global_xy_plane() }); - let interiors = [ new_cycle(Polygon { points = inner_points, surface = global_xy_plane() }).reverse() ]; - - let base = new_sketch(global_xy_plane(), [new_region(RawRegion { - exterior = exterior, - interiors = interiors, - })]); - - base.sweep(bottom_surface, sweep_path) -} - -// Further demos are not yet possible with the current limitations of the language. \ No newline at end of file diff --git a/examples/sketches.ccm b/examples/sketches.ccm deleted file mode 100644 index ed98a8b..0000000 --- a/examples/sketches.ccm +++ /dev/null @@ -1,17 +0,0 @@ - -sketch circle(diameter: Length) { - new_sketch(Circle { center = vec2(0mm, 0mm), radius = diameter / 2, surface = sketch_plane() }) -} - -sketch square(width: Length) { - new_sketch(Polygon { points = [vec2(width, 0m), vec2(width, width), vec2(0m, width), vec2(0m, 0m)], - surface = sketch_plane() }) -} - -sketch square_with_circle(square_width: Length, hole_diameter: Length) { - new_sketch(sketch_plane(), [ - new_region(Circle { center = vec2(0m, 0m), radius = hole_diameter / 2, surface = sketch_plane() }), - new_region(Polygon { points = [vec2(hole_diameter, 0m), vec2(0m, square_width), vec2(square_width, square_width), vec2(square_width, 0m)], surface = sketch_plane() }) - ]) -} - diff --git a/crates/formatter/Cargo.toml b/formatter/Cargo.toml similarity index 100% rename from crates/formatter/Cargo.toml rename to formatter/Cargo.toml diff --git a/crates/formatter/src/arguments.rs b/formatter/src/arguments.rs similarity index 100% rename from crates/formatter/src/arguments.rs rename to formatter/src/arguments.rs diff --git a/crates/formatter/src/main.rs b/formatter/src/main.rs similarity index 100% rename from crates/formatter/src/main.rs rename to formatter/src/main.rs diff --git a/crates/formatter/test_files/empty_closure.ccm b/formatter/test_files/empty_closure.ccm similarity index 100% rename from crates/formatter/test_files/empty_closure.ccm rename to formatter/test_files/empty_closure.ccm diff --git a/interpreter/Cargo.lock b/interpreter/Cargo.lock new file mode 100644 index 0000000..a838a2b --- /dev/null +++ b/interpreter/Cargo.lock @@ -0,0 +1,1244 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" + +[[package]] +name = "bitflags" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" + +[[package]] +name = "bytemuck" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" + +[[package]] +name = "cc" +version = "1.2.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "755d2fce177175ffca841e9a06afdb2c4ab0f593d53b4dee48147dfaade85932" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "check_keyword" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dcba1e35fcf6c9350d9fb4863d87c66e5e37f1583f883560dca2c9320840bcc" +dependencies = [ + "phf", +] + +[[package]] +name = "coalesce" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f42f93baa58655bd5b3db91dd9b2073dc8a0c887dc35bd1cfefbd43fc7cf07" + +[[package]] +name = "common_data_types" +version = "0.1.0" +dependencies = [ + "ordered-float", + "paste", + "serde", +] + +[[package]] +name = "convert_case" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +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.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "csv" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde_core", +] + +[[package]] +name = "csv-core" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" +dependencies = [ + "memchr", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "enum-map" +version = "3.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb2a23ad36148a32085addb3ef1aa39805d044d4532ff258360d523a4eff38e5" +dependencies = [ + "enum-map-derive", +] + +[[package]] +name = "enum-map-derive" +version = "1.0.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44600091ce205df4f8b661e98617d49c37b2dd609e449ec82b0fb5d7b33e2eeb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "enum_dispatch" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" +dependencies = [ + "once_cell", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "enum_downcast" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e532035fcb0d794ae56f74a0a39fea24bca14c7d47c428e3ab0667ebdccd8b4a" +dependencies = [ + "enum_downcast_derive", +] + +[[package]] +name = "enum_downcast_derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0e8987f91d86aa10313adf7c767a8cfd040364432d4e9f722b049b8ff7e634a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "file-guard" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21ef72acf95ec3d7dbf61275be556299490a245f017cf084bd23b4f68cf9407c" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + +[[package]] +name = "glam" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "333928d5eb103c5d4050533cec0384302db6be8ef7d3cebd30ec6a35350353da" + +[[package]] +name = "glam" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3abb554f8ee44336b72d522e0a7fe86a29e09f839a36022fa869a7dfe941a54b" + +[[package]] +name = "glam" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4126c0479ccf7e8664c36a2d719f5f2c140fbb4f9090008098d2c291fa5b3f16" + +[[package]] +name = "glam" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01732b97afd8508eee3333a541b9f7610f454bb818669e66e90f5f57c93a776" + +[[package]] +name = "glam" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525a3e490ba77b8e326fb67d4b44b4bd2f920f44d4cc73ccec50adc68e3bee34" + +[[package]] +name = "glam" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b8509e6791516e81c1a630d0bd7fbac36d2fa8712a9da8662e716b52d5051ca" + +[[package]] +name = "glam" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" + +[[package]] +name = "glam" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "518faa5064866338b013ff9b2350dc318e14cc4fcd6cb8206d7e7c9886c98815" + +[[package]] +name = "glam" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f597d56c1bd55a811a1be189459e8fad2bbc272616375602443bdfb37fa774" + +[[package]] +name = "glam" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e4afd9ad95555081e109fe1d21f2a30c691b5f0919c67dfa690a2e1eb6bd51c" + +[[package]] +name = "glam" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" + +[[package]] +name = "glam" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" + +[[package]] +name = "glam" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e05e7e6723e3455f4818c7b26e855439f7546cf617ef669d1adedb8669e5cb9" + +[[package]] +name = "glam" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "779ae4bf7e8421cf91c0b3b64e7e8b40b862fba4d393f59150042de7c4965a94" + +[[package]] +name = "glam" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" + +[[package]] +name = "glam" +version = "0.30.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19fc433e8437a212d1b6f1e68c7824af3aed907da60afa994e7f542d18d12aa9" + +[[package]] +name = "hashable-map" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46ab77e35afc7a5a3087e72e8e93a90a226a78f62c5f4dceaeb3d7ef5decdccb" + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" + +[[package]] +name = "imstr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d3441deb04ea9c6b472f313be54d585428cd6a68cdb8dcf40cf43744bec78fe" + +[[package]] +name = "indexmap" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "interpreter" +version = "0.1.0" +dependencies = [ + "common_data_types", + "enum_dispatch", + "enum_downcast", + "file-guard", + "hashable-map", + "imstr", + "nalgebra", + "nom", + "num-traits", + "paste", + "pretty_assertions", + "rayon", + "stack", + "tempfile", + "tree-sitter", + "tree-sitter-command-cad-model", + "type-sitter", + "type-sitter-gen", + "units", + "unwrap-enum", +] + +[[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.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + +[[package]] +name = "join-lazy-fmt" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e90f66baf362a8a5ce2ca820290fbede0572a76fabf8408bc68c02f9ad1d03bf" + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.180" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" + +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link", +] + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "logos" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff472f899b4ec2d99161c51f60ff7075eeb3097069a36050d8037a6325eb8154" +dependencies = [ + "logos-derive", +] + +[[package]] +name = "logos-codegen" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "192a3a2b90b0c05b27a0b2c43eecdb7c415e29243acc3f89cc8247a5b693045c" +dependencies = [ + "beef", + "fnv", + "lazy_static", + "proc-macro2", + "quote", + "regex-syntax", + "rustc_version", + "syn", +] + +[[package]] +name = "logos-derive" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "605d9697bcd5ef3a42d38efc51541aa3d6a4a25f7ab6d1ed0da5ac632a26b470" +dependencies = [ + "logos-codegen", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "nalgebra" +version = "0.34.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4d5b3eff5cd580f93da45e64715e8c20a3996342f1e466599cf7a267a0c2f5f" +dependencies = [ + "approx", + "glam 0.14.0", + "glam 0.15.2", + "glam 0.16.0", + "glam 0.17.3", + "glam 0.18.0", + "glam 0.19.0", + "glam 0.20.5", + "glam 0.21.3", + "glam 0.22.0", + "glam 0.23.0", + "glam 0.24.2", + "glam 0.25.0", + "glam 0.27.0", + "glam 0.28.0", + "glam 0.29.3", + "glam 0.30.10", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "973e7178a678cfd059ccec50887658d482ce16b0aa9da3888ddeab5cd5eb4889" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "nom" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" +dependencies = [ + "memchr", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "ordered-float" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" +dependencies = [ + "num-traits", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi", +] + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quasiquote" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d7f3e24436387bc9ee9963246739f2a851d9ca85ed73a2c5b878bf908e9b34d" +dependencies = [ + "proc-macro2", + "quasiquote-proc-macro", + "quote", +] + +[[package]] +name = "quasiquote-proc-macro" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79bc0a2b2a185610156579070227676cf31d6282045d01273bbfc65804df6022" +dependencies = [ + "itertools", + "proc-macro2", + "quote", +] + +[[package]] +name = "quote" +version = "1.0.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "regex" +version = "1.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" + +[[package]] +name = "rustc-stable-hash" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "781442f29170c5c93b7185ad559492601acdc71d5bb0706f5868094f45cfcd08" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "ryu" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" + +[[package]] +name = "safe_arch" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +dependencies = [ + "bytemuck", +] + +[[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 = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "indexmap", + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "simba" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c99284beb21666094ba2b75bbceda012e610f5479dfcc2d6e2426f53197ffd95" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "slice-group-by" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + +[[package]] +name = "stack" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c27dee130f751c0903be703c5355e9b333a17550d7d63d04cf0d3b1601edb8a3" +dependencies = [ + "coalesce", +] + +[[package]] +name = "streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" + +[[package]] +name = "syn" +version = "2.0.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" +dependencies = [ + "fastrand", + "getrandom", + "once_cell", + "rustix", + "windows-sys", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tree-sitter" +version = "0.25.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78f873475d258561b06f1c595d93308a7ed124d9977cb26b148c2084a4a3cc87" +dependencies = [ + "cc", + "regex", + "regex-syntax", + "serde_json", + "streaming-iterator", + "tree-sitter-language", +] + +[[package]] +name = "tree-sitter-command-cad-model" +version = "0.0.1" +dependencies = [ + "cc", + "tree-sitter", +] + +[[package]] +name = "tree-sitter-language" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae62f7eae5eb549c71b76658648b72cc6111f2d87d24a1e31fa907f4943e3ce" + +[[package]] +name = "type-sitter" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d7b6c3bc4c60ecee2147ecb3cd7820fe9ee1df4251e1b2b8b5a214fe0084ba" +dependencies = [ + "type-sitter-lib", + "type-sitter-proc", +] + +[[package]] +name = "type-sitter-gen" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ad6a9e8aa527b2c037cd5016d6291e197c98eb6160ff09b25f2398374a3003" +dependencies = [ + "cc", + "check_keyword", + "convert_case", + "dunce", + "enum-map", + "join-lazy-fmt", + "libc", + "libloading", + "logos", + "prettyplease", + "proc-macro2", + "quote", + "rustc-stable-hash", + "serde", + "serde_json", + "slice-group-by", + "syn", + "tree-sitter", + "tree-sitter-language", + "walkdir", +] + +[[package]] +name = "type-sitter-lib" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092e2a9b5f4eb14bdd2246eb1557b2b99e67fe43be3e0411535d9483e73236b7" +dependencies = [ + "streaming-iterator", + "tree-sitter", +] + +[[package]] +name = "type-sitter-proc" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4240aa23c38a18dc53f8422374fac3d7514654ec28258ef173b53ba9bee37a6e" +dependencies = [ + "syn", + "type-sitter-gen", +] + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "uneval" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63cc5d2fd8648d7e2be86098f60c9ece7045cc710b3c1e226910e2f37d11dc73" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "unicode-ident" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "units" +version = "0.1.0" +dependencies = [ + "common_data_types", + "csv", + "serde", + "uneval", +] + +[[package]] +name = "unwrap-enum" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5639235db46432e23bff2caf3a02096d9a801c99560198f3edba4edf8d015a5" +dependencies = [ + "unwrap-enum-proc-macro", +] + +[[package]] +name = "unwrap-enum-proc-macro" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5771812808a3442129fa6c692ecb4ae77e690b530598854af2be0fda01657a94" +dependencies = [ + "proc-macro2", + "quasiquote", + "quote", + "syn", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasip2" +version = "1.0.2+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wide" +version = "0.7.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[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.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys", +] + +[[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-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "zmij" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd8f3f50b848df28f887acb68e41201b5aea6bc8a8dacc00fb40635ff9a72fea" diff --git a/crates/interpreter/Cargo.toml b/interpreter/Cargo.toml similarity index 100% rename from crates/interpreter/Cargo.toml rename to interpreter/Cargo.toml diff --git a/crates/interpreter/build.rs b/interpreter/build.rs similarity index 100% rename from crates/interpreter/build.rs rename to interpreter/build.rs diff --git a/crates/interpreter/src/compile/expressions.rs b/interpreter/src/compile/expressions.rs similarity index 100% rename from crates/interpreter/src/compile/expressions.rs rename to interpreter/src/compile/expressions.rs diff --git a/crates/interpreter/src/compile/formula.rs b/interpreter/src/compile/formula.rs similarity index 100% rename from crates/interpreter/src/compile/formula.rs rename to interpreter/src/compile/formula.rs diff --git a/crates/interpreter/src/compile/mod.rs b/interpreter/src/compile/mod.rs similarity index 100% rename from crates/interpreter/src/compile/mod.rs rename to interpreter/src/compile/mod.rs diff --git a/crates/interpreter/src/execution/errors.rs b/interpreter/src/execution/errors.rs similarity index 100% rename from crates/interpreter/src/execution/errors.rs rename to interpreter/src/execution/errors.rs diff --git a/crates/interpreter/src/execution/logging.rs b/interpreter/src/execution/logging.rs similarity index 100% rename from crates/interpreter/src/execution/logging.rs rename to interpreter/src/execution/logging.rs diff --git a/crates/interpreter/src/execution/mod.rs b/interpreter/src/execution/mod.rs similarity index 100% rename from crates/interpreter/src/execution/mod.rs rename to interpreter/src/execution/mod.rs diff --git a/crates/interpreter/src/execution/stack.rs b/interpreter/src/execution/stack.rs similarity index 100% rename from crates/interpreter/src/execution/stack.rs rename to interpreter/src/execution/stack.rs diff --git a/crates/interpreter/src/execution/standard_environment.rs b/interpreter/src/execution/standard_environment.rs similarity index 100% rename from crates/interpreter/src/execution/standard_environment.rs rename to interpreter/src/execution/standard_environment.rs diff --git a/crates/interpreter/src/execution/values/boolean.rs b/interpreter/src/execution/values/boolean.rs similarity index 100% rename from crates/interpreter/src/execution/values/boolean.rs rename to interpreter/src/execution/values/boolean.rs diff --git a/crates/interpreter/src/execution/values/closure.rs b/interpreter/src/execution/values/closure.rs similarity index 100% rename from crates/interpreter/src/execution/values/closure.rs rename to interpreter/src/execution/values/closure.rs diff --git a/crates/interpreter/src/execution/values/dictionary.rs b/interpreter/src/execution/values/dictionary.rs similarity index 100% rename from crates/interpreter/src/execution/values/dictionary.rs rename to interpreter/src/execution/values/dictionary.rs diff --git a/crates/interpreter/src/execution/values/file.rs b/interpreter/src/execution/values/file.rs similarity index 100% rename from crates/interpreter/src/execution/values/file.rs rename to interpreter/src/execution/values/file.rs diff --git a/crates/interpreter/src/execution/values/integer.rs b/interpreter/src/execution/values/integer.rs similarity index 100% rename from crates/interpreter/src/execution/values/integer.rs rename to interpreter/src/execution/values/integer.rs diff --git a/crates/interpreter/src/execution/values/list.rs b/interpreter/src/execution/values/list.rs similarity index 100% rename from crates/interpreter/src/execution/values/list.rs rename to interpreter/src/execution/values/list.rs diff --git a/crates/interpreter/src/execution/values/mod.rs b/interpreter/src/execution/values/mod.rs similarity index 100% rename from crates/interpreter/src/execution/values/mod.rs rename to interpreter/src/execution/values/mod.rs diff --git a/crates/interpreter/src/execution/values/scalar.rs b/interpreter/src/execution/values/scalar.rs similarity index 100% rename from crates/interpreter/src/execution/values/scalar.rs rename to interpreter/src/execution/values/scalar.rs diff --git a/crates/interpreter/src/execution/values/string/formatting.rs b/interpreter/src/execution/values/string/formatting.rs similarity index 100% rename from crates/interpreter/src/execution/values/string/formatting.rs rename to interpreter/src/execution/values/string/formatting.rs diff --git a/crates/interpreter/src/execution/values/string/mod.rs b/interpreter/src/execution/values/string/mod.rs similarity index 100% rename from crates/interpreter/src/execution/values/string/mod.rs rename to interpreter/src/execution/values/string/mod.rs diff --git a/crates/interpreter/src/execution/values/value_type.rs b/interpreter/src/execution/values/value_type.rs similarity index 100% rename from crates/interpreter/src/execution/values/value_type.rs rename to interpreter/src/execution/values/value_type.rs diff --git a/crates/interpreter/src/execution/values/vector.rs b/interpreter/src/execution/values/vector.rs similarity index 100% rename from crates/interpreter/src/execution/values/vector.rs rename to interpreter/src/execution/values/vector.rs diff --git a/crates/interpreter/src/execution/values/void.rs b/interpreter/src/execution/values/void.rs similarity index 100% rename from crates/interpreter/src/execution/values/void.rs rename to interpreter/src/execution/values/void.rs diff --git a/crates/interpreter/src/lib.rs b/interpreter/src/lib.rs similarity index 100% rename from crates/interpreter/src/lib.rs rename to interpreter/src/lib.rs diff --git a/src/arguments.rs b/src/arguments.rs deleted file mode 100644 index 57340da..0000000 --- a/src/arguments.rs +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use clap::builder::{NonEmptyStringValueParser, PossibleValuesParser, TypedValueParser}; -use std::{fmt::Display, path::PathBuf, str::FromStr}; - -use clap::Parser; - -#[derive(Clone, Debug)] -pub enum OutputTarget { - Stdout, - File(PathBuf), -} - -impl Display for OutputTarget { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Self::Stdout => write!(f, "[stdout]"), - Self::File(path) => write!(f, "{:?}", path), - } - } -} - -impl Default for OutputTarget { - fn default() -> Self { - Self::Stdout - } -} - -impl FromStr for OutputTarget { - type Err = (); - - fn from_str(s: &str) -> Result { - match s { - "-" => Ok(Self::Stdout), - "[stdout]" => Ok(Self::Stdout), - _ => Ok(Self::File(PathBuf::from(s))), - } - } -} - -#[derive(Parser)] -#[command(name = "ccad")] -#[command(bin_name = "ccad")] -/// Create fabricatable 3D and 2D models from code and generate output with commands. -pub enum Command { - Run(RunArgs), - Sketch(SketchArgs), - Form(FormArgs), - ListUnits(ListUnitsArgs), -} - -#[derive(Clone, Debug)] -pub enum TaskOutputFormat { - Yaml, - Json, -} - -impl Default for TaskOutputFormat { - fn default() -> Self { - Self::Json - } -} - -impl Display for TaskOutputFormat { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - TaskOutputFormat::Yaml => write!(f, "yaml"), - TaskOutputFormat::Json => write!(f, "json"), - } - } -} - -impl FromStr for TaskOutputFormat { - type Err = (); - - fn from_str(s: &str) -> Result { - match s { - "yaml" => Ok(Self::Yaml), - "json" => Ok(Self::Json), - _ => Err(()), - } - } -} - -#[derive(clap::Args)] -#[command(version, about)] -/// Run a task and write the output to a file, or stdout. -pub struct RunArgs { - /// Path to script to run - pub script: PathBuf, - - /// Name of the task within the script to be ran - pub task_name: String, - - /// The format to output the result in (is automatically derived if outputting to a file, or defaults to json if outputting to stdout) - #[arg(long, default_value = Option::None, - value_parser = PossibleValuesParser::new(["json", "yaml"]) - .map(|s| s.parse::().unwrap()),)] - pub output_format: Option, - - /// Path to target output file. Set to - or leave blank to output to stdout - #[arg(long, default_value_t = OutputTarget::default(), - value_parser = NonEmptyStringValueParser::new().map(|s| s.parse::().unwrap()))] - pub output: OutputTarget, - - /// Arguments to be passed to the task function - #[arg(last = true)] - pub arguments: Vec, -} - -#[derive(clap::Args)] -#[command(version, about)] -/// Build a 2D sketch. -pub struct SketchArgs { - pub script: PathBuf, - pub sketch_name: String, - - #[arg(last = true)] - pub arguments: Vec, -} - -#[derive(Clone, Debug)] -pub enum SolidOutputFormat { - ThreeMF, - Stl, - Obj, -} - -impl Default for SolidOutputFormat { - fn default() -> Self { - Self::Stl - } -} - -impl Display for SolidOutputFormat { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - SolidOutputFormat::ThreeMF => write!(f, "3mf"), - SolidOutputFormat::Stl => write!(f, "stl"), - SolidOutputFormat::Obj => write!(f, "obj"), - } - } -} - -impl FromStr for SolidOutputFormat { - type Err = (); - - fn from_str(s: &str) -> Result { - match s.to_ascii_lowercase().as_str() { - "3mf" => Ok(Self::ThreeMF), - "stl" => Ok(Self::Stl), - "obj" => Ok(Self::Obj), - _ => Err(()), - } - } -} - -#[derive(clap::Args)] -#[command(version, about)] -/// Form a 3D solid. -pub struct FormArgs { - pub script: PathBuf, - pub solid_name: String, - - /// File to write solid to (3MF, STL, or STL) - #[arg(long, default_value = Option::None, - value_parser = PossibleValuesParser::new(["3mf", "stl", "obj"]) - .map(|s| s.parse::().unwrap()),)] - pub output_format: Option, - - pub tolerance: Option, - - /// Path to target output file. Set to - or leave blank to output to stdout - #[arg(long, default_value_t = OutputTarget::default(), - value_parser = NonEmptyStringValueParser::new().map(|s| s.parse::().unwrap()))] - pub output: OutputTarget, - - #[arg(last = true)] - pub arguments: Vec, -} - -#[derive(clap::Args)] -#[command(version, about)] -/// List builtin units of measurement -pub struct ListUnitsArgs { - /// Optional filter. Will only print results containing the keyword. - pub search: Option, -} diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 9ddf3c7..0000000 --- a/src/main.rs +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::{ - fs::{self, File}, - io::{IsTerminal, Seek, Write}, - ops::Deref, - path::PathBuf, - str::FromStr, -}; - -use anyhow::{anyhow, bail, Context, Result}; -use arguments::{ListUnitsArgs, OutputTarget, SolidOutputFormat, TaskOutputFormat}; -use clap::Parser; - -mod arguments; -// mod package; -mod script; - -use fj_core::algorithms::{ - approx::Tolerance, bounding_volume::BoundingVolume, triangulate::Triangulate, -}; -use fj_export::{export_3mf, export_obj, export_stl}; -use fj_math::{Aabb, Point, Scalar as FornjotScalar}; -use imstr::ImString; -use nom_locate::LocatedSpan; -use script::{Failure, Runtime, SerializableValue}; -use tempfile::SpooledTempFile; -use uom::si::{f64::Length, length::millimeter}; - -use crate::script::{print_all_supported_units, Scalar}; - -fn main() { - stderrlog::new() - .show_level(true) - .verbosity(3) - .init() - .unwrap(); - let command = arguments::Command::parse(); - - match command { - arguments::Command::Run(run_args) => run(run_args), - arguments::Command::Sketch(sketch_args) => sketch(sketch_args), - arguments::Command::Form(form_args) => form(form_args), - arguments::Command::ListUnits(list_args) => list_units(list_args), - } -} - -fn list_units(list_args: ListUnitsArgs) { - let mut output = std::io::stdout(); - if let Err(error) = print_all_supported_units(&mut output, list_args.search.as_deref()) { - log::error!("Output failure: {:?}", error); - } -} - -fn run(run_args: arguments::RunArgs) { - if let Err(error) = trampoline( - run_args.script, - run_args.arguments, - |runtime, arguments| runtime.run_task(&run_args.task_name, arguments), - |value, _runtime| { - let (mut output, format): (Box, TaskOutputFormat) = match run_args.output { - OutputTarget::Stdout => { - let format = run_args.output_format.unwrap_or_default(); - - (Box::new(std::io::stdout()), format) - } - OutputTarget::File(path) => { - let format = if let Some(output_format) = run_args.output_format { - output_format - } else { - path.extension() - .and_then(|ext| ext.to_str()) - .and_then(|s| TaskOutputFormat::from_str(s).ok()) - .ok_or(anyhow!("Could not infer output format from file name"))? - }; - - (Box::new(File::create(path)?), format) - } - }; - - match format { - TaskOutputFormat::Yaml => serde_yaml::to_writer(&mut output, &value) - .context("Failed to serialize results")?, - TaskOutputFormat::Json => serde_json::to_writer(&mut output, &value) - .context("Failed to serialize results")?, - }; - - writeln!(&mut output)?; - - Ok(()) - }, - ) { - log::error!("Failed to run task: {:?}", error); - } -} - -fn sketch(sketch_args: arguments::SketchArgs) { - if let Err(error) = trampoline( - sketch_args.script, - sketch_args.arguments, - |runtime, arguments| runtime.run_sketch(&sketch_args.sketch_name, arguments), - |_value, _runtime| Ok(()), // Sketches are not yet serializable. - ) { - log::error!("Failed to build sketch: {:?}", error); - } -} - -fn form(form_args: arguments::FormArgs) { - if let Err(error) = trampoline( - form_args.script, - form_args.arguments, - |runtime, arguments| runtime.run_solid(&form_args.solid_name, arguments), - |solid, runtime| { - let tolerance = match form_args.tolerance { - Some(tolerance) => { - let tolerance = Scalar::from_str(&tolerance)?; - let tolerance: Length = tolerance - .try_into() - .map_err(|_| anyhow!("Failed to parse tolerance as a length"))?; - - Tolerance::from_scalar(tolerance.get::())? - } - None => { - // Compute a default tolerance derived from the bounding box. - let aabb = solid - .handle - .deref() - .aabb(&runtime.global_resources.fornjot_core.layers.geometry) - .unwrap_or(Aabb { - min: Point::origin(), - max: Point::origin(), - }); - - // Find the smallest face. - let mut min_extent = FornjotScalar::MAX; - for extent in aabb.size().components { - if extent > FornjotScalar::ZERO && extent < min_extent { - min_extent = extent; - } - } - - // Our smallest face will be divided into 1000 parts. - let tolerance = min_extent / FornjotScalar::from_f64(1000.0); - Tolerance::from_scalar(tolerance)? - } - }; - - let mesh = (solid.handle.deref(), tolerance) - .triangulate(&mut runtime.global_resources.fornjot_core); - - match form_args.output { - OutputTarget::Stdout => { - let format = form_args.output_format.unwrap_or_default(); - let mut output = std::io::stdout(); - - let is_binary_format = match format { - SolidOutputFormat::ThreeMF => true, - SolidOutputFormat::Stl => true, - SolidOutputFormat::Obj => false, - }; - - if is_binary_format && output.is_terminal() { - bail!("Refusing to output binary data to terminal."); - } - - match format { - SolidOutputFormat::ThreeMF => { - // We'll use a bout a megabyte of memory before buffering to the filesystem. - let mut tempfile = SpooledTempFile::new(1024 * 1024); - - export_3mf(&mesh, &mut tempfile)?; - tempfile.seek(std::io::SeekFrom::Start(0))?; - - std::io::copy(&mut tempfile, &mut output)?; - } - SolidOutputFormat::Stl => export_stl(&mesh, &mut output)?, - SolidOutputFormat::Obj => export_obj(&mesh, &mut output)?, - } - } - OutputTarget::File(path) => { - let format = if let Some(output_format) = form_args.output_format { - output_format - } else { - path.extension() - .and_then(|ext| ext.to_str()) - .and_then(|s| SolidOutputFormat::from_str(s).ok()) - .ok_or(anyhow!("Could not infer output format from file name"))? - }; - - let mut output = File::create(path)?; - - match format { - SolidOutputFormat::ThreeMF => export_3mf(&mesh, &mut output)?, - SolidOutputFormat::Stl => export_stl(&mesh, &mut output)?, - SolidOutputFormat::Obj => export_obj(&mesh, &mut output)?, - } - } - }; - - Ok(()) - }, - ) { - log::error!("Failed to build solid: {:?}", error); - } -} - -fn trampoline( - script: PathBuf, - arguments: Vec, - runtime_action: A, - serialize_action: S, -) -> Result<()> -where - A: FnOnce( - &mut Runtime>, - Vec, - ) -> std::result::Result>>, - S: FnOnce(R, &mut Runtime>) -> Result<()>, -{ - fn parse_argument(argument: &str) -> Result { - match serde_json::from_str(argument) { - Ok(value) => Ok(value), - Err(json_error) => match serde_yaml::from_str(argument) { - Ok(value) => Ok(value), - Err(yaml_error) => Err(anyhow!( - "Could not parse as Json or Yaml.\nJson Error: {:?}\n Yaml Error: {:?}", - json_error, - yaml_error - )), - }, - } - } - - let module_name = script - .file_name() - .context("Script file does not have a name")? - .to_str() - .context("Script name could not be UTF8 encoded")?; - - let code = fs::read_to_string(&script).context("Failed to read script into memory")?; - let code: ImString = code.into(); - let code = LocatedSpan::new(code); - - let mut runtime = script::Runtime::load(module_name, code).context("Failed to load runtime")?; - - let mut unpacked_arguments = Vec::with_capacity(arguments.len()); - - for (index, argument) in arguments.into_iter().enumerate() { - let argument = parse_argument(&argument) - .with_context(|| format!("Failed to parse function argument {}", index))?; - - unpacked_arguments.push(argument); - } - - let result = runtime_action(&mut runtime, unpacked_arguments); - - match result { - Ok(result) => { - serialize_action(result, &mut runtime)?; - } - Err(failure) => { - log::error!("{}", failure); - } - } - - Ok(()) -} diff --git a/src/package.rs b/src/package.rs deleted file mode 100644 index 028f77e..0000000 --- a/src/package.rs +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::{ - fs, - path::{Path, PathBuf}, -}; - -use anyhow::{bail, Context, Result}; -use semver::Version; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Serialize, Deserialize)] -pub struct PackageManifest { - name: String, - #[serde(default)] - authors: Vec, - version: Version, - edition: Edition, -} - -impl PackageManifest { - pub fn create_new(name: String, path: impl Into) -> Result<()> { - let path = path.into(); - - if path.exists() { - bail!("Target directory for package already exists"); - } - - fs::create_dir_all(&path).context("Failed to create project directory")?; - - let authors = get_author().map(|author| vec![author]).unwrap_or_default(); - - let package = Self { - name, - authors, - version: Version::new(0, 1, 0), - edition: Edition::default(), - }; - - let package = - serde_yaml::to_string(&package).context("Failed to serialize package manifest")?; - - let manifest_path = path.join("manifest.yaml"); - fs::write(&manifest_path, package).context("Failed to write project manifest.")?; - - if let Err(error) = init_git(&path, &manifest_path) { - log::warn!("Failed to initalize project as git repository: {:?}", error); - } - - Ok(()) - } -} - -#[derive(Debug, Serialize, Deserialize)] -pub enum Edition { - #[serde(rename = "2024")] - E2024, -} - -impl Default for Edition { - fn default() -> Self { - Self::E2024 - } -} - -fn init_git(path: &Path, manifest_path: &Path) -> Result<()> { - let repository = git2::Repository::init(path).context("Failed to initalize")?; - let mut index = repository.index().context("Failed to get index")?; - index - .add_path(manifest_path) - .context("Failed to add manifest to index.")?; - - Ok(()) -} - -/// Attempts to get the name of the developer authoring this package. -fn get_author() -> Option { - match get_author_from_git() { - Ok(author) => Some(author), - Err(error) => { - log::warn!("Failed to get author name from git: {:?}", error); - log::info!("Will fallback to using system user's name instead"); - Some(get_author_from_username()) - } - } -} - -fn get_author_from_username() -> String { - whoami::realname() -} - -fn get_author_from_git() -> Result { - use git2::Config; - - let git_config = Config::open_default().context("Failed to open git config")?; - let name = git_config.get_string("user.name").ok(); - let email = git_config.get_string("user.email").ok(); - - match (name, email) { - (Some(name), Some(email)) => Ok(format!("{}: {}", name, email)), - (Some(name), None) => { - log::warn!("Designer email not set in git config"); - Ok(name) - } - (None, Some(email)) => { - log::warn!("Designer name not set in git config"); - Ok(email) - } - _ => bail!("Git configuration did not contain a name or email"), - } -} diff --git a/src/script/execution/expressions.rs b/src/script/execution/expressions.rs deleted file mode 100644 index d54736e..0000000 --- a/src/script/execution/expressions.rs +++ /dev/null @@ -1,628 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::cmp::Ordering; - -use crate::script::{ - parsing::{ArithmeticExpression, Comparison, Expression, Factor, Term, Trailer}, - Span, -}; - -use super::{ - types::{Object, Range, Structure, Value}, - ExecutionContext, Failure, -}; - -type Result = std::result::Result>; - -// TODO this should not be returning a control flow. -pub fn run_expression( - context: &mut ExecutionContext, - expression: &Expression, -) -> Result> { - match expression { - Expression::And(a, b) => { - let a_value = run_expression(context, a)?; - let b_value = run_comparison(context, b)?; - - a_value.and(context.log, a.get_span(), &b_value) - } - Expression::Or(a, b) => { - let a_value = run_expression(context, a)?; - let b_value = run_comparison(context, b)?; - - a_value.or(context.log, a.get_span(), &b_value) - } - Expression::Buffer(comparison) => run_comparison(context, comparison), - } -} - -pub fn run_comparison( - context: &mut ExecutionContext, - comparison: &Comparison, -) -> Result> { - fn cmp( - context: &mut ExecutionContext, - a: &Comparison, - b: &ArithmeticExpression, - ) -> Result { - let value_a = run_comparison(context, a)?; - let value_b = run_arithmetic_expression(context, b)?; - - value_a.cmp(context.log, a.get_span(), &value_b) - } - - match comparison { - // TODO it would be valuable to test if both sides are equivalent statements and print a warning if so. - Comparison::LessThan(a, b) => Ok(matches!(cmp(context, a, b)?, Ordering::Less).into()), - Comparison::LessThanEqual(a, b) => { - Ok(matches!(cmp(context, a, b)?, Ordering::Less | Ordering::Equal).into()) - } - Comparison::Equal(a, b) => Ok(matches!(cmp(context, a, b)?, Ordering::Equal).into()), - Comparison::GreaterThanEqual(a, b) => { - Ok(matches!(cmp(context, a, b)?, Ordering::Greater | Ordering::Equal).into()) - } - Comparison::GreaterThan(a, b) => { - Ok(matches!(cmp(context, a, b)?, Ordering::Greater).into()) - } - Comparison::None(expression) => run_arithmetic_expression(context, expression), - } -} - -pub fn run_arithmetic_expression( - context: &mut ExecutionContext, - expression: &ArithmeticExpression, -) -> Result> { - match expression { - ArithmeticExpression::Addition(a, b) => { - let value_a = run_arithmetic_expression(context, a)?; - let value_b = run_term(context, b)?; - - value_a.addition(context.log, a.get_span(), &value_b) - } - ArithmeticExpression::Subtraction(a, b) => { - let value_a = run_arithmetic_expression(context, a)?; - let value_b = run_term(context, b)?; - - value_a.subtraction(context.log, a.get_span(), &value_b) - } - ArithmeticExpression::Term(term) => run_term(context, term), - } -} - -pub fn run_term(context: &mut ExecutionContext, term: &Term) -> Result> { - match term { - Term::Multiply(a, b) => { - let a_value = run_term(context, a)?; - let b_value = run_trailer(context, b)?; - - a_value.multiply(context.log, a.get_span(), &b_value) - } - Term::Divide(a, b) => { - let a_value = run_term(context, a)?; - let b_value = run_trailer(context, b)?; - - a_value.divide(context.log, a.get_span(), &b_value) - } - Term::Range(range) => Ok(Range::from_parsed(context, range)?.into()), - Term::Trailer(trailer) => run_trailer(context, trailer), - } -} - -pub fn run_trailer( - context: &mut ExecutionContext, - trailer: &Trailer, -) -> Result> { - match trailer { - Trailer::None(factor) => run_factor(context, factor), - Trailer::Attribute(trailer, attribute) => { - let value = run_trailer(context, trailer)?; - - value.attribute(context.log, trailer.get_span(), attribute) - } - Trailer::Call(trailer, arguments) => { - let value = run_trailer(context, trailer)?; - - let mut evaluated_arguments = Vec::with_capacity(arguments.len()); - - for argument in arguments.iter() { - let argument = run_expression(context, argument)?; - evaluated_arguments.push(argument); - } - - value.call(context, trailer.get_span(), evaluated_arguments, arguments) - } - Trailer::MethodCall(trailer, attribute, arguments) => { - let value = run_trailer(context, trailer)?; - - let mut evaluated_arguments = Vec::with_capacity(arguments.len()); - - for argument in arguments.iter() { - let argument = run_expression(context, argument)?; - evaluated_arguments.push(argument); - } - - value.method_call( - context, - trailer.get_span(), - attribute, - evaluated_arguments, - arguments, - ) - } - Trailer::StructInitalization(definition, initalization) => { - Structure::initalization(context, definition, initalization) - } - Trailer::Index(trailer, index) => { - let value = run_trailer(context, trailer)?; - let index = run_expression(context, index)?; - - value.index(context.log, trailer.get_span(), index) - } - } -} - -pub fn run_factor( - context: &mut ExecutionContext, - factor: &Factor, -) -> Result> { - match factor { - Factor::Litteral(litteral) => Value::from_litteral(context, litteral), - Factor::Variable(variable) => Ok(context.stack.get_variable(variable)?.clone()), - Factor::Parenthesis(expression) => run_expression(context, expression), - Factor::UnaryPlus(factor) => { - run_factor(context, factor)?.unary_plus(context.log, factor.get_span()) - } - Factor::UnaryMinus(factor) => { - run_factor(context, factor)?.unary_minus(context.log, factor.get_span()) - } - Factor::UnaryLogicalNot(factor) => { - run_factor(context, factor)?.unary_logical_not(context.log, factor.get_span()) - } - } -} - -#[cfg(test)] -mod test { - use super::*; - - use common_data_types::Float; - - use crate::script::{ - execution::{ - types::{function::IntoBuiltinFunction, DefaultValue, List, SString, Scalar}, - Module, - }, - parsing::Litteral, - Runtime, - }; - - #[test] - fn expression_straight_number() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("24").unwrap().1), - Ok(Float::new(24.0).unwrap().into()) - ); - }); - } - - #[test] - fn expression_logical_operators() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("true").unwrap().1), - Ok(Value::Boolean(true)) - ); - assert_eq!( - run_expression(context, &Expression::parse("false").unwrap().1), - Ok(Value::Boolean(false)) - ); - - // Not - assert_eq!( - run_expression(context, &Expression::parse("!true").unwrap().1), - Ok(Value::Boolean(false)) - ); - assert_eq!( - run_expression(context, &Expression::parse("!false").unwrap().1), - Ok(Value::Boolean(true)) - ); - - // And - assert_eq!( - run_expression(context, &Expression::parse("false && false").unwrap().1), - Ok(Value::Boolean(false)) - ); - assert_eq!( - run_expression(context, &Expression::parse("true && false").unwrap().1), - Ok(Value::Boolean(false)) - ); - assert_eq!( - run_expression(context, &Expression::parse("false && true").unwrap().1), - Ok(Value::Boolean(false)) - ); - assert_eq!( - run_expression(context, &Expression::parse("true && true").unwrap().1), - Ok(Value::Boolean(true)) - ); - - // Or - assert_eq!( - run_expression(context, &Expression::parse("false || false").unwrap().1), - Ok(Value::Boolean(false)) - ); - assert_eq!( - run_expression(context, &Expression::parse("true || false").unwrap().1), - Ok(Value::Boolean(true)) - ); - assert_eq!( - run_expression(context, &Expression::parse("false || true").unwrap().1), - Ok(Value::Boolean(true)) - ); - assert_eq!( - run_expression(context, &Expression::parse("true || true").unwrap().1), - Ok(Value::Boolean(true)) - ); - }); - } - - #[test] - fn value_from_litteral() { - ExecutionContext::create(&mut Runtime::default(), |context| { - // Scalar - assert_eq!( - Value::from_litteral(context, &Litteral::parse("22mm").unwrap().1), - Ok( - Scalar::try_from(uom::si::f64::Length::new::( - 22.0 - )) - .unwrap() - .into() - ) - ); - // Number - assert_eq!( - Value::from_litteral(context, &Litteral::parse("22").unwrap().1), - Ok(Float::new(22.0).unwrap().into()) - ); - // String - assert_eq!( - Value::from_litteral(context, &Litteral::parse("\"test\"").unwrap().1), - Ok(SString::from("test").into()) - ); - // List - assert_eq!( - Value::from_litteral(context, &Litteral::parse("[1, 2, 3]").unwrap().1), - Ok(List::from([ - Float::new(1.0).unwrap().into(), - Float::new(2.0).unwrap().into(), - Float::new(3.0).unwrap().into() - ]) - .into()) - ); - // Boolean - assert_eq!( - Value::from_litteral(context, &Litteral::parse("true").unwrap().1), - Ok(true.into()) - ); - assert_eq!( - Value::from_litteral(context, &Litteral::parse("false").unwrap().1), - Ok(false.into()) - ); - // Default - assert_eq!( - Value::from_litteral(context, &Litteral::parse("default").unwrap().1), - Ok(DefaultValue.into()) - ); - }); - } - - #[test] - fn variable_access() { - ExecutionContext::create(&mut Runtime::default(), |context| { - context.stack.new_variable(&"global_scope", true.into()); - - context.new_scope(|context| { - context.stack.new_variable(&"sub_scope", false.into()); - - assert_eq!( - run_expression( - context, - Box::leak(Box::new(Expression::parse("sub_scope").unwrap().1)) - ), - Ok(Value::Boolean(false)) - ); - - assert_eq!( - run_expression( - context, - Box::leak(Box::new(Expression::parse("global_scope").unwrap().1)) - ), - Ok(Value::Boolean(true)) - ); - - assert_eq!( - run_expression( - context, - Box::leak(Box::new(Expression::parse("non_existant_scope").unwrap().1)) - ), - Err(Failure::VariableNotInScope( - "non_existant_scope", - "non_existant_scope".into() - )) - ); - }); - }); - } - - #[test] - fn unary_operators() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("+15").unwrap().1), - Ok(Float::new(15.0).unwrap().into()) - ); - - assert_eq!( - run_expression(context, &Expression::parse("-15").unwrap().1), - Ok(Float::new(-15.0).unwrap().into()) - ); - }); - } - - #[test] - fn parenthasis() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("(1 + 2) * 3").unwrap().1), - Ok(Float::new(9.0).unwrap().into()) - ); - }); - } - - #[test] - fn attribute_access() { - let mut log = Vec::new(); - - let module = Module::load( - &mut log, - "test_module.ccm", - "struct DefaultStruct { value: Number = 42 }", - ) - .unwrap(); - - assert!(log.is_empty()); - - ExecutionContext::create(&mut module.into(), |context| { - assert_eq!( - run_expression( - context, - &Expression::parse("DefaultStruct { ..default }.value") - .unwrap() - .1 - ), - Ok(Float::new(42.0).unwrap().into()) - ); - }); - } - - #[test] - fn method_call() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("24.25.floor()").unwrap().1), - Ok(Float::new(24.0).unwrap().into()) - ); - }); - } - - #[test] - fn call() { - ExecutionContext::create(&mut Runtime::default(), |context| { - fn my_function( - _context: &mut ExecutionContext, - _span: &S, - ) -> Result> { - Ok(Float::new(42.0).unwrap().into()) - } - - let my_function = my_function::<&'static str>.into_builtin_function(); - - context - .stack - .new_variable(&"my_function", my_function.into()); - - assert_eq!( - run_expression(context, &Expression::parse("my_function()").unwrap().1), - Ok(Float::new(42.0).unwrap().into()) - ); - }); - } - - #[test] - fn index() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("[1, 2, 3][0]").unwrap().1), - Ok(Float::new(1.0).unwrap().into()) - ); - }); - } - - #[test] - fn multiply() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("1 + 2 * 3").unwrap().1), - Ok(Float::new(7.0).unwrap().into()) - ); - }); - } - - #[test] - fn divide() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("9 / 3").unwrap().1), - Ok(Float::new(3.0).unwrap().into()) - ); - }); - } - - #[test] - fn range() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("..").unwrap().1), - Ok(Range { - lower_bound: None, - upper_bound_is_inclusive: false, - upper_bound: None - } - .into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("..=").unwrap().1), - Err(Failure::MissingUpperBound("..=")) - ); - assert_eq!( - run_expression(context, &Expression::parse("5..").unwrap().1), - Ok(Range { - lower_bound: Some(Float::new(5.0).unwrap().into()), - upper_bound_is_inclusive: false, - upper_bound: None - } - .into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("..5").unwrap().1), - Ok(Range { - lower_bound: None, - upper_bound_is_inclusive: false, - upper_bound: Some(Float::new(5.0).unwrap().into()) - } - .into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("..=5").unwrap().1), - Ok(Range { - lower_bound: None, - upper_bound_is_inclusive: true, - upper_bound: Some(Float::new(5.0).unwrap().into()) - } - .into()) - ); - }); - } - - #[test] - fn addition() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("1 + 2").unwrap().1), - Ok(Float::new(3.0).unwrap().into()) - ); - }); - } - - #[test] - fn subtraction() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("1 + 2").unwrap().1), - Ok(Float::new(3.0).unwrap().into()) - ); - }); - } - - #[test] - fn comparisions() { - ExecutionContext::create(&mut Runtime::default(), |context| { - // LessThan(_, _) - assert_eq!( - run_expression(context, &Expression::parse("1 < 2").unwrap().1), - Ok(true.into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("2 < 2").unwrap().1), - Ok(false.into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("2 < 1").unwrap().1), - Ok(false.into()) - ); - - // LessThanEqual(_, _) - assert_eq!( - run_expression(context, &Expression::parse("1 <= 2").unwrap().1), - Ok(true.into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("2 <= 2").unwrap().1), - Ok(true.into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("2 <= 1").unwrap().1), - Ok(false.into()) - ); - - // Equal(_, _) - assert_eq!( - run_expression(context, &Expression::parse("1 == 2").unwrap().1), - Ok(false.into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("2 == 2").unwrap().1), - Ok(true.into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("2 == 1").unwrap().1), - Ok(false.into()) - ); - - // GreaterThanEqual(_, _) - assert_eq!( - run_expression(context, &Expression::parse("1 >= 2").unwrap().1), - Ok(false.into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("2 >= 2").unwrap().1), - Ok(true.into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("2 >= 1").unwrap().1), - Ok(true.into()) - ); - - // GreaterThan(_, _) - assert_eq!( - run_expression(context, &Expression::parse("1 > 2").unwrap().1), - Ok(false.into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("2 > 2").unwrap().1), - Ok(false.into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("2 > 1").unwrap().1), - Ok(true.into()) - ); - }); - } -} diff --git a/src/script/execution/failure_message.rs b/src/script/execution/failure_message.rs deleted file mode 100644 index b5396b9..0000000 --- a/src/script/execution/failure_message.rs +++ /dev/null @@ -1,456 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::{borrow::Cow, num::ParseFloatError}; - -use common_data_types::ParseNotNanError; - -use crate::script::Span; - -// TODO We need stack traces. -// TODO we should separate out the failure span and failure type. -#[derive(Debug, Eq, PartialEq)] -pub enum Failure { - UnclosedStatement(S), - ReservedKeyword(S, &'static str), - DuplicateGlobal(S, S), - ExpectedGot(S, Cow<'static, str>, Cow<'static, str>), - NumberConversion(S, ParseNotNanError), - VariableNotInScope(S, Cow<'static, str>), - StructMissingAssignment(S, S), - StructExcessAssignment(S), - StructWrongInheritanceType(S, S, S), - NoDefault(S, S), - UnsupportedOperation(S, Cow<'static, str>, &'static str), - UnknownAttribute(S), - ResultIsNan(S), - MissingArguments(S), - IndexOutOfRange(S, isize), - ListIsEmpty(S), - UnknownUnitType(S, Cow<'static, str>), - CannotConvertFromTo(S, Cow<'static, str>, Cow<'static, str>), - DimensionalMissmatch(S, Cow<'static, str>, Cow<'static, str>), - InvalidCharIndex(S, isize), - Formatting(S, std::fmt::Error), - FormatArgumentIndexOutOfRange(S, isize), - ParseFormatter(S), - InvalidPrecision(S, isize), - MissingUpperBound(S), - ListLengthsDontMatch(S), - DidNotMatch(S), - BreakOutsideOfLoop(S), - BreakLabelNotFound(S, S), - ContinueOutsideOfLoop(S), - ContinueLabelNotFound(S, S), - BadArgumentTypes(S, Vec>), - StructConstruction(S, Vec>), - SliceOutOfRange(S, Option, &'static str, Option), - TooManyArguments(S), - ListWrongLength(S, usize, usize), - ListElement(S, usize, Box>), - ListContainsDuplicate(S, usize), - ShellNotInSolid(S), - FaceNotInShell(S), - RegionNotInFace(S), - User(S, String), - InverseTrigIncompatible(S), - TrigIncompatible(S), - ExpectedZeroDimension(S), - NumberMustBePositive(S), - FunctionCall(Box>), - CharacterNotInVector(S, char), - SwizzleTooLong(S, usize), - CannotBorrowImmutably(S, S), - CannotBorrowMutably(S, S), -} - -impl Failure { - pub fn make_from_function_call(self) -> Self { - Self::FunctionCall(Box::new(self)) - } -} - -impl std::fmt::Display for Failure { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Self::UnclosedStatement(span) => { - write!( - f, - "{}: Non-tail expressions must be closed with a semicolon", - span.format_span() - ) - } - Self::ReservedKeyword(span, keyword) => { - write!( - f, - "{}: Keyword `{}` is reserved", - span.format_span(), - keyword - ) - } - Self::DuplicateGlobal(first_instance, second_instance) => { - write!( - f, - "Duplicate global {}:{}", - first_instance.format_span(), - second_instance.format_span() - ) - } - Self::ExpectedGot(span, expected, got) => { - write!( - f, - "{}: Expected `{}`, got `{}`", - span.format_span(), - expected, - got - ) - } - Self::NumberConversion(span, error) => { - write!( - f, - "{}: Failed to convert to number: {:?}", - span.format_span(), - error - ) - } - Self::VariableNotInScope(span, name) => { - write!( - f, - "{}: Variable `{}` was not found in current scope", - span.format_span(), - name - ) - } - Self::StructMissingAssignment(span, name) => { - write!( - f, - "{}: Missing assignment for struct: {}", - span.format_span(), - name.as_str() - ) - } - Self::StructExcessAssignment(assignment) => { - write!( - f, - "{}: Excess value assigned to struct", - assignment.format_span() - ) - } - Self::StructWrongInheritanceType(span, expected_type, given_type) => { - write!( - f, - "{}: Wrong type given for in inheritance. Expected `{}`, got `{}`", - span.format_span(), - expected_type.as_str(), - given_type.as_str() - ) - } - Self::NoDefault(span, name) => { - write!( - f, - "{}: Default value not available for memeber `{}`", - span.format_span(), - name.as_str() - ) - } - Self::UnsupportedOperation(span, name, operation) => { - write!( - f, - "{}: Type `{}` does not support {} operation", - span.format_span(), - name, - operation - ) - } - Self::UnknownAttribute(attribute) => write!( - f, - "{}: Unknown attribute: {}", - attribute.format_span(), - attribute.as_str() - ), - Self::ResultIsNan(span) => write!( - f, - "{}: Result of arithmetic operation is NaN", - span.format_span() - ), - Self::MissingArguments(span) => write!( - f, - "{}: Not enough arguments for function", - span.format_span() - ), - Self::IndexOutOfRange(span, index) => write!( - f, - "{}: Index `{}` is out of range", - span.format_span(), - index - ), - Self::ListIsEmpty(span) => write!(f, "{}: List is empty", span.format_span()), - Self::UnknownUnitType(span, unit_type) => write!( - f, - "{}: Unknown unit type `{}`", - span.format_span(), - unit_type - ), - Self::CannotConvertFromTo(span, from, to) => { - write!( - f, - "{}: Cannot convert from `{}` to `{}`", - span.format_span(), - from, - to - ) - } - Self::DimensionalMissmatch(span, from, to) => { - write!( - f, - "{}: Cannot convert from `{}` to `{}` because they are not of the same dimension", - span.format_span(), - from, - to - ) - } - Self::InvalidCharIndex(span, index) => { - write!( - f, - "{}: Index `{}` does not lie on a character boundary", - span.format_span(), - index - ) - } - Self::Formatting(span, error) => { - write!( - f, - "{}: Error formatting text: {:?}", - span.format_span(), - error - ) - } - Self::FormatArgumentIndexOutOfRange(span, index) => { - write!( - f, - "{}: Format requests argument index `{}` which is not present", - span.format_span(), - *index, - ) - } - Self::ParseFormatter(span) => { - write!( - f, - "{}: Failed to parse string as format", - span.format_span() - ) - } - Self::InvalidPrecision(span, precision) => { - write!( - f, - "{}: Invalid precision `{}`. Precision must be greater than zero", - span.format_span(), - *precision - ) - } - Self::MissingUpperBound(span) => { - write!( - f, - "{}: Upper bound of range be specified when inclusive", - span.format_span() - ) - } - Self::ListLengthsDontMatch(span) => { - write!( - f, - "{}: Attempt to assign list from list of a different length. You can use range access `[..]` to trim an oversized list down to the expected size", - span.format_span() - ) - } - Self::DidNotMatch(span) => { - write!( - f, - "{}: No branches in match statement matched input", - span.format_span() - ) - } - Self::BreakOutsideOfLoop(span) => { - write!(f, "{}: Break outside of loop", span.format_span()) - } - Self::BreakLabelNotFound(span, label) => { - write!( - f, - "{}: Could not find loop with label `{}`", - span.format_span(), - label.as_str() - ) - } - Self::ContinueOutsideOfLoop(span) => { - write!(f, "{}: Continue outside of loop", span.format_span()) - } - Self::ContinueLabelNotFound(span, label) => { - write!( - f, - "{}: Could not find loop with label `{}`", - span.format_span(), - label.as_str() - ) - } - Self::BadArgumentTypes(span, failures) => { - writeln!(f, "{}: Bad arguments to function call:", span.format_span())?; - - for failure in failures.iter() { - writeln!(f, "\t{}", failure)?; - } - - Ok(()) - } - Self::StructConstruction(span, failures) => { - writeln!(f, "{}: Faild to build struct:", span.format_span())?; - - for failure in failures.iter() { - writeln!(f, "\t{}", failure)?; - } - - Ok(()) - } - Self::SliceOutOfRange(span, lower, ty, upper) => match (lower, upper) { - (None, None) => write!(f, "{}: Slice out of range [{}]", span.format_span(), ty,), - (Some(lower), None) => write!( - f, - "{}: Slice out of range [{}{}]", - span.format_span(), - lower, - ty, - ), - (Some(lower), Some(upper)) => write!( - f, - "{}: Slice out of range [{}{}{}]", - span.format_span(), - lower, - ty, - upper - ), - (None, Some(upper)) => write!( - f, - "{}: Slice out of range [{}{}]", - span.format_span(), - ty, - upper - ), - }, - Self::TooManyArguments(span) => { - write!( - f, - "{}: Too many arguemnts for function call", - span.format_span() - ) - } - Self::ListWrongLength(span, expected_length, actual_length) => write!( - f, - "{}: Expected list of length {}; got a length of {}", - span.format_span(), - expected_length, - actual_length - ), - Self::ListElement(span, index, failure) => { - write!( - f, - "{}: Error with element {} of list: {}", - span.format_span(), - index, - failure - ) - } - Self::ListContainsDuplicate(span, index) => { - write!( - f, - "{}: Element {} is a duplicate", - span.format_span(), - index - ) - } - Self::ShellNotInSolid(span) => { - write!(f, "{}: Could not find shell in solid", span.format_span()) - } - Self::FaceNotInShell(span) => { - write!(f, "{}: Could not find face in shell", span.format_span()) - } - Self::RegionNotInFace(span) => { - write!(f, "{}: Could not find region in face", span.format_span()) - } - Self::User(span, message) => { - write!(f, "{}: {}", span.format_span(), message) - } - Self::InverseTrigIncompatible(span) => { - write!(f, "{}: Inverse trigonometric functions can only be used with zero dimensional types (Angles, Ratios)", span.format_span()) - } - Self::TrigIncompatible(span) => { - write!( - f, - "{}: Trigonometric functions can only be used with angles", - span.format_span() - ) - } - Self::ExpectedZeroDimension(span) => { - write!( - f, - "{}: Operation expects zero dimensional type, such as numbers, ratios, angles, etc", - span.format_span() - ) - } - Self::NumberMustBePositive(span) => { - write!( - f, - "{}: Operation requires a positive value", - span.format_span() - ) - } - // Failures related to the signature of a function call are wrapped like this so that we can catch them - // and use it for multi-signature functions - Self::FunctionCall(failure) => failure.fmt(f), - Self::CharacterNotInVector(span, c) => { - write!( - f, - "{}: Vector does not contain component `{}`", - span.format_span(), - c - ) - } - Self::SwizzleTooLong(span, length) => { - write!( - f, - "{}: A swizzle of {} is too long. It must be 4 components or less", - span.format_span(), - length - ) - } - Self::CannotBorrowImmutably(span, name) => { - write!( - f, - "{}: Failed to immutably borrow `{}`, because it currently has an exclusively mutable borrow on it", - span.format_span(), - name.as_str() - ) - } - Self::CannotBorrowMutably(span, name) => { - write!( - f, - "{}: Failed to get an exclusively mutable borrow on `{}`, because it already has another borrow on it", - span.format_span(), - name.as_str() - ) - } - } - } -} diff --git a/src/script/execution/mod.rs b/src/script/execution/mod.rs deleted file mode 100644 index c123560..0000000 --- a/src/script/execution/mod.rs +++ /dev/null @@ -1,382 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use crate::script::execution::types::NoneType; - -use self::{ - stack::ScopeType, - types::{Object, OperatorResult, Scalar}, -}; - -use super::{ - logging::{self, RuntimeLog, StandardLog, UnpackValidationWarnings}, - parsing::{self, Block, CallableBlock, MemberVariable}, - Runtime, Span, -}; - -pub mod types; -use common_data_types::ConversionFactor; -use fj_core::Core; -pub use types::print_all_supported_units; -use types::Value; - -mod expressions; -mod failure_message; -mod module; -mod stack; -pub mod statements; -pub use module::Module; - -pub use failure_message::Failure; -pub use stack::Stack; - -pub type ExecutionResult = std::result::Result>; - -#[derive(Debug, PartialEq)] -pub enum ControlFlow { - Failure(Failure), - Break { - span: S, - label: Option, - value: Value, - }, - Continue { - span: S, - label: Option, - }, - Return { - value: Value, - }, -} - -impl From> for ControlFlow { - fn from(value: Failure) -> Self { - Self::Failure(value) - } -} - -pub struct GlobalResources { - pub fornjot_unit_conversion_factor: &'static ConversionFactor, - pub fornjot_core: Core, -} - -impl Default for GlobalResources { - fn default() -> Self { - Self { - fornjot_unit_conversion_factor: Scalar::get_conversion_factor("mm").unwrap(), - fornjot_core: Default::default(), - } - } -} - -pub struct ExecutionContext<'a, S: Span> { - pub global_resources: &'a mut GlobalResources, - pub log: &'a mut dyn RuntimeLog, - pub stack: &'a mut Stack, -} - -impl<'a, S: Span> ExecutionContext<'a, S> { - pub fn create(runtime: &'a mut Runtime, run: impl FnOnce(&mut Self) -> R) -> R { - let mut context = Self { - global_resources: &mut runtime.global_resources, - log: StandardLog::global(), - stack: &mut runtime.stack, - }; - - // FIXME this registers the global functions as part of the module, - // which is not actually global. This is a bad way to do this because - // other modules won't have access to the global functions. - // TODO add constants: std::constants::PI, Angle::HALF_TURN, Angle::FULL_TURN, Scalar::ZERO for all measurement types, SolidAngle::SPHERE. - types::register_globals(&mut context); - logging::register_globals(&mut context); - - run(&mut context) - } - - pub fn unpack_validation_warnings(&mut self, span: &S) { - self.global_resources - .unpack_validation_warnings(span, self.log) - } - - pub fn new_scope(&mut self, scope: impl FnOnce(&mut Self) -> R) -> R { - // This doesn't copy any variables, so it can't fail. - self.stack - .push_scope(std::iter::empty(), ScopeType::Inherited) - .unwrap(); - let result = scope(self); - self.stack.pop_scope(); - - result - } - - pub fn new_isolated_scope(&mut self, scope: impl FnOnce(&mut Self) -> R) -> R { - // This doesn't copy any variables, so it can't fail. - self.stack - .push_scope(std::iter::empty(), ScopeType::Isolated) - .unwrap(); - let result = scope(self); - self.stack.pop_scope(); - - result - } - - pub fn new_closure_scope<'s, R>( - &mut self, - references: impl Iterator>, - copies: impl Iterator, - scope: impl FnOnce(&mut Self) -> R, - ) -> OperatorResult { - self.stack.push_scope( - copies, - ScopeType::Closure { - references: references.map(|s| s.into()).collect(), - }, - )?; - let result = scope(self); - self.stack.pop_scope(); - - Ok(result) - } -} - -pub fn validate_assignment_type( - context: &mut ExecutionContext, - member: &MemberVariable, - variable_assignment: &S, - value: Value, - value_name: &S, -) -> OperatorResult> { - match value { - Value::Default(_) => { - // They want to use a default value. - if let Some(default) = member.ty.default_value.as_ref() { - Value::from_litteral(context, default) - } else { - Err(Failure::NoDefault( - variable_assignment.clone(), - variable_assignment.clone(), - )) - } - } - // No request for default. Check the type. - value => { - if value.matches_type(&member.ty.ty, context.log, value_name)? { - Ok(value) - } else { - Err(Failure::ExpectedGot( - variable_assignment.clone(), - member.ty.ty.name(), - value.type_name(), - )) - } - } - } -} - -fn run_block( - context: &mut ExecutionContext, - block: &Block, -) -> ExecutionResult> { - let mut result = NoneType.into(); - - for statement in block.statements.iter() { - if let Some(statement) = statement.get() { - result = statements::run_statement(context, statement)?; - } - } - - Ok(result) -} - -fn run_callable_block( - context: &mut ExecutionContext, - block: &CallableBlock, - arguments: Vec>, - spans: &[parsing::Expression], - default_span: &S, -) -> Result, Failure> { - // We do not return a ControlFlow because control flow does not - // pass through named blocks (we can't continue or break a for loop outside of this named block) - match arguments.len().cmp(&block.parameters.len()) { - std::cmp::Ordering::Equal => { - let mut failures = Vec::new(); - - // Validate the arguments and put them into scope.. - for (span, (argument, parameter)) in spans - .iter() - .map(|expression| expression.get_span()) - .chain(std::iter::repeat(default_span)) - .zip(arguments.into_iter().zip(&block.parameters)) - { - match validate_assignment_type(context, parameter, span, argument, ¶meter.name) - { - Ok(value) => { - context.stack.new_variable(¶meter.name, value); - } - Err(failure) => failures.push(failure), - } - } - - if failures.is_empty() { - match run_block(context, &block.block) { - Ok(value) => Ok(value), - Err(control_flow) => match control_flow { - ControlFlow::Return { value } => Ok(value), // Oh that's normal behavior. - ControlFlow::Failure(failure) => Err(failure), - ControlFlow::Break { - span, - label: None, - value: _, - } => Err(Failure::BreakOutsideOfLoop(span)), - ControlFlow::Break { - span, - label: Some(label), - value: _, - } => Err(Failure::BreakLabelNotFound(span, label)), - ControlFlow::Continue { span, label: None } => { - Err(Failure::ContinueOutsideOfLoop(span)) - } - ControlFlow::Continue { - span, - label: Some(label), - } => Err(Failure::ContinueLabelNotFound(span, label)), - }, - } - } else { - Err(Failure::BadArgumentTypes( - block.parameter_span.clone(), - failures, - )) - } - } - std::cmp::Ordering::Less => Err(Failure::MissingArguments(block.parameter_span.clone())), - std::cmp::Ordering::Greater => Err(Failure::MissingArguments(block.parameter_span.clone())), - } -} - -#[cfg(test)] -mod test { - use super::*; - - use crate::script::{ - execution::{expressions::run_expression, run_block, ExecutionContext}, - parsing::Expression, - }; - use common_data_types::Float; - - #[test] - fn functions() { - let mut log = Vec::new(); - - let module = Module::load( - &mut log, - "test_module.ccm", - "function my_function(input: Number) -> Number { input }", - ) - .unwrap(); - - assert!(log.is_empty()); - - ExecutionContext::create(&mut module.into(), |context| { - let block = parsing::Block::parse("{ my_function(5) }").unwrap().1; - - let result = run_block(context, Box::leak(Box::new(block))); - assert_eq!(result, Ok(Float::new(5.0).unwrap().into())); - }); - } - - #[test] - fn default_function() { - let mut log = Vec::new(); - - let module = Module::load( - &mut log, - "test_module.ccm", - "function my_function(input: Number = 5) -> Number { input }", - ) - .unwrap(); - - assert!(log.is_empty()); - - ExecutionContext::create(&mut module.into(), |context| { - let block = parsing::Block::parse("{ my_function(default) }").unwrap().1; - - let result = run_block(context, Box::leak(Box::new(block))); - assert_eq!(result, Ok(Float::new(5.0).unwrap().into())); - }); - } - - #[test] - fn function_scope() { - let mut log = Vec::new(); - - let module = Module::load( - &mut log, - "test_module.ccm", - "function my_function(input: Number) -> Number { value = input; input }", - ) - .unwrap(); - - assert!(log.is_empty()); - - ExecutionContext::create(&mut module.into(), |context| { - let block = parsing::Block::parse("{ let value = 0; my_function(5); value }") - .unwrap() - .1; - - let result = - context.new_scope(|context| run_block(context, Box::leak(Box::new(block)))); - assert_eq!( - result, - Err(ControlFlow::Failure(Failure::VariableNotInScope( - "value", - "value".into() - ))) - ); - }); - } - - #[test] - fn function_hygene() { - let mut log = Vec::new(); - - let module = Module::load( - &mut log, - "test_module.ccm", - "struct MyStruct {} function my_function() -> struct MyStruct { MyStruct {} }", - ) - .unwrap(); - - assert!(log.is_empty()); - - ExecutionContext::create(&mut module.into(), |context| { - let block = parsing::Block::parse("{ my_function() }").unwrap().1; - - let result = - context.new_scope(|context| run_block(context, Box::leak(Box::new(block)))); - assert_eq!( - result.unwrap(), - run_expression( - context, - Box::leak(Box::new(Expression::parse("MyStruct {}").unwrap().1)) - ) - .unwrap() - ); - }); - } -} diff --git a/src/script/execution/module.rs b/src/script/execution/module.rs deleted file mode 100644 index 2685749..0000000 --- a/src/script/execution/module.rs +++ /dev/null @@ -1,494 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::collections::HashMap; - -use anyhow::{anyhow, Result}; - -use super::{parsing, Failure}; -use parsing::Span; - -const RESERVED_KEYWORDS: &[&str] = &[ - "let", "import", "extern", "struct", "sketch", "widget", "function", "return", "if", "else", - "match", "for", "while", "loop", "in", "break", "continue", "struct", "true", "false", - "default", "self", -]; - -fn is_reserved_keyword(word: &S) -> Option<&'static str> { - RESERVED_KEYWORDS - .iter() - .find(|keyword| word.as_str() == **keyword) - .copied() -} - -#[derive(Debug, Eq, PartialEq)] -enum CallableReference { - Struct(usize), - Function(usize), - Sketch(usize), - Widget(usize), -} - -#[derive(Debug, Eq, PartialEq)] -pub struct Module { - pub(super) file_name: String, - pub(super) root_elements: RootElements, - span: S, -} - -impl Default for Module { - fn default() -> Self { - Self { - file_name: String::from("default"), - root_elements: Default::default(), - span: S::default(), - } - } -} - -impl Module { - pub fn load( - log: &mut Vec>, - file_name: impl Into, - code: impl Into, - ) -> Result { - let file_name = file_name.into(); - let code = code.into(); - - let root_elements = Self::load_ast(code.clone())?; - let mut callables = HashMap::new(); - - // TODO Validation should have its own message types and not be considered a runtime failure. - // It should probably be moved into parsing, whenever the parser overhaul happens. - Self::check_for_name_conflicts( - log, - &root_elements, - &mut callables, - || root_elements.structs.iter(), - |structure| structure.name.clone(), - |index| root_elements.structs[index].name.clone(), - CallableReference::Struct, - ); - Self::check_for_name_conflicts( - log, - &root_elements, - &mut callables, - || root_elements.functions.iter(), - |function| function.named_block.name.clone(), - |index| root_elements.functions[index].named_block.name.clone(), - CallableReference::Function, - ); - Self::check_for_name_conflicts( - log, - &root_elements, - &mut callables, - || root_elements.sketches.iter(), - |sketch| sketch.named_block.name.clone(), - |index| root_elements.sketches[index].named_block.name.clone(), - CallableReference::Sketch, - ); - Self::check_for_name_conflicts( - log, - &root_elements, - &mut callables, - || root_elements.solids.iter(), - |widget| widget.named_block.name.clone(), - |index| root_elements.solids[index].named_block.name.clone(), - CallableReference::Widget, - ); - - let module = Self { - file_name, - root_elements, - span: code, - }; - - module.validate(log); - - Ok(module) - } - - pub fn get_span(&self) -> &S { - &self.span - } - - fn load_ast(code: S) -> Result> { - let (_, ast) = parsing::FileAST::parse(code) - .map_err(|error| anyhow!("Failed to parse file: {:?}", error))?; - - let mut imports = Vec::new(); - let mut structs = Vec::new(); - let mut functions = Vec::new(); - let mut tasks = Vec::new(); - let mut sketches = Vec::new(); - let mut solids = Vec::new(); - - for element in ast.root_elements.into_iter() { - match element { - parsing::RootElement::Import(import) => imports.push(import), - parsing::RootElement::Struct(sstruct) => structs.push(sstruct), - parsing::RootElement::Function(function) => match function.signature { - parsing::FunctionSignature::Function { .. } => functions.push(function), - parsing::FunctionSignature::Task { .. } => tasks.push(function), - parsing::FunctionSignature::Sketch { .. } => sketches.push(function), - parsing::FunctionSignature::Solid { .. } => solids.push(function), - }, - } - } - - Ok(RootElements { - imports, - structs, - functions, - tasks, - sketches, - solids, - }) - } - - fn check_for_name_conflicts( - log: &mut Vec>, - root_elements: &RootElements, - callables: &mut HashMap, - get_iter: FI, - get_name: FN, - get_span: FS, - build_reference: FBR, - ) where - I: Iterator, - FI: FnOnce() -> I, - FN: Fn(&T) -> S, - FS: Fn(usize) -> S, - FBR: Fn(usize) -> CallableReference, - { - for (index, item) in get_iter().enumerate() { - if let Some(old) = callables.insert(get_name(&item).to_string(), build_reference(index)) - { - let old_span = match old { - CallableReference::Struct(index) => root_elements.structs[index].name.clone(), - CallableReference::Function(index) => { - root_elements.functions[index].named_block.name.clone() - } - CallableReference::Sketch(index) => { - root_elements.sketches[index].named_block.name.clone() - } - CallableReference::Widget(index) => { - root_elements.solids[index].named_block.name.clone() - } - }; - let new_span = get_span(index); - - log.push(Failure::DuplicateGlobal(old_span, new_span)); - } - } - } - - /// Validation is checking for errors that don't require the context of execution. - fn validate(&self, log: &mut Vec>) { - self.root_elements.validate(log); - } -} - -#[derive(Debug, Eq, PartialEq)] -pub(super) struct RootElements { - pub(super) imports: Vec>, - pub(super) structs: Vec>, - pub(super) functions: Vec>, - pub(super) tasks: Vec>, - pub(super) sketches: Vec>, - pub(super) solids: Vec>, -} - -impl Default for RootElements { - fn default() -> Self { - Self { - imports: Default::default(), - structs: Default::default(), - functions: Default::default(), - tasks: Default::default(), - sketches: Default::default(), - solids: Default::default(), - } - } -} - -impl RootElements { - /// Validation is checking for errors that don't require the context of execution.1 - fn validate(&self, log: &mut Vec>) { - // There is no validation to be done for imports. - - for structure in self.structs.iter() { - Self::validate_struct(log, structure); - } - for function in self.functions.iter() { - Self::validate_named_block(log, &function.named_block); - } - for task in self.tasks.iter() { - Self::validate_named_block(log, &task.named_block); - } - for sketch in self.sketches.iter() { - Self::validate_named_block(log, &sketch.named_block); - } - for solid in self.solids.iter() { - Self::validate_named_block(log, &solid.named_block); - } - } - - fn validate_struct(log: &mut Vec>, structure: &parsing::StructDefinition) { - // Name should not be a reserved keyword. - if let Some(keyword) = is_reserved_keyword(&structure.name) { - log.push(Failure::ReservedKeyword(structure.name.clone(), keyword)); - } - - // None of the members should have a reserved keyword for a name. - for member in structure.members.iter() { - if let Some(keyword) = is_reserved_keyword(&member.name) { - log.push(Failure::ReservedKeyword(member.name.clone(), keyword)); - } - } - } - - fn validate_named_block(log: &mut Vec>, block: &parsing::NamedBlock) { - // Name should not be a reserved keyword. - if let Some(keyword) = is_reserved_keyword(&block.name) { - log.push(Failure::ReservedKeyword(block.name.clone(), keyword)); - } - - // Parameter names should not be reserved keywords. - for parameter in block.callable.parameters.iter() { - if let Some(keyword) = is_reserved_keyword(¶meter.name) { - log.push(Failure::ReservedKeyword(parameter.name.clone(), keyword)); - } - } - - Self::validate_block(log, &block.callable.block); - } - - fn validate_block(log: &mut Vec>, block: &parsing::Block) { - let mut core_iter = block.statements.iter().peekable(); - let statement_iter = std::iter::from_fn(|| { - core_iter - .next() - .map(|next| (next, core_iter.peek().is_none())) - }); - - for (statement, is_last) in statement_iter { - // Variables should not contain keywords. - if let Some(parsing::Statement::Assign(assignment)) = statement.get() { - for to_assign in assignment.to_assign.iter() { - if let Some(keyword) = is_reserved_keyword(&to_assign.name) { - log.push(Failure::ReservedKeyword(to_assign.name.clone(), keyword)); - } - } - } - - // Some statements require that they have a semicolon behind them, unless they are the last line. - // Enforce that. - if let parsing::BlockStatement::Open(statement) = statement { - if !is_last { - if let Some(span) = match statement { - parsing::Statement::Expression(spanable) => Some(spanable.get_span()), - parsing::Statement::Assign(spanable) => Some(spanable.get_span()), - parsing::Statement::Return(spanable) => Some(spanable.get_span()), - parsing::Statement::Break(spanable) => Some(spanable.get_span()), - parsing::Statement::Continue(spanable) => Some(spanable.get_span()), - - _ => None, - } { - log.push(Failure::UnclosedStatement(span.clone())); - } - } - } - } - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::{CallableBlock, FunctionSignature, VariableType}; - - use super::*; - - const TEST_AST_CODE: &str = r#" - import path::to::module; - struct MyStruct {} - sketch my_sketch() {} - solid my_solid() {} - function my_function() -> Length {} -"#; - - #[test] - fn load_module() { - let mut log = Vec::new(); - assert!(Module::<&str>::load(&mut log, "my_module.ccm", "").is_ok()); - } - - #[test] - fn load_ast() { - let root: RootElements<&str> = Module::load_ast(TEST_AST_CODE).unwrap(); - - assert_eq!( - root.imports, - [parsing::Import { - path: vec!["path", "to", "module"], - external: false - }] - ); - - assert_eq!( - root.structs, - [parsing::StructDefinition { - name: "MyStruct", - members: vec![] - }] - ); - assert_eq!( - root.sketches, - [parsing::Function { - starting_span: "sketch", - named_block: parsing::NamedBlock { - name: "my_sketch", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: parsing::Block { statements: vec![] } - } - }, - signature: FunctionSignature::Sketch { arguments: vec![] }, - }] - ); - assert_eq!( - root.solids, - [parsing::Function { - starting_span: "solid", - named_block: parsing::NamedBlock { - name: "my_solid", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: parsing::Block { statements: vec![] } - } - }, - signature: FunctionSignature::Solid { arguments: vec![] }, - }] - ); - - // TODO test tasks. - - assert_eq!( - root.functions, - [parsing::Function { - starting_span: "function", - named_block: parsing::NamedBlock { - name: "my_function", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: parsing::Block { statements: vec![] } - } - }, - signature: FunctionSignature::Function { - return_type: Box::new(VariableType::Scalar("Length")), - arguments: vec![] - }, - }] - ); - } - - fn validate(code: &'static str) -> Vec> { - let mut log = Vec::new(); - Module::load(&mut log, "my_module.ccs", code).unwrap(); // Even if validation "fails" we get the validation log back. - - log - } - - #[test] - fn validate_block_empty() { - assert_eq!(validate("solid MySolid() {}"), []); - } - - #[test] - fn validate_block_tail_expressions() { - assert_eq!(validate("solid MySolid() { let a = b; }"), []); - assert_eq!(validate("solid MySolid() { let a = b }"), []); - assert_eq!(validate("solid MySolid() { let a = b; let c = d }"), []); - assert_eq!( - validate("solid MySolid() { let a = b let c = d }"), - [Failure::UnclosedStatement("let"),] - ); - } - - #[test] - fn validate_assignment_keyword_resurvation() { - assert_eq!( - validate("solid MySolid() { let break = b; }"), - [Failure::ReservedKeyword("break", "break")] - ); - - assert_eq!(validate("solid MySolid() { let break_beat = b; }"), []); - } - - #[test] - fn validate_named_block_keyword_resurvation() { - assert_eq!( - validate("solid break() { }"), - [Failure::ReservedKeyword("break", "break")] - ); - } - - #[test] - fn validate_parameter_names_are_not_keywords() { - assert_eq!(validate("solid MySolid() { }"), []); - - assert_eq!(validate("solid MySolid(okay: Length) { }"), []); - - assert_eq!( - validate("solid MySolid(break: Length) { }"), - [Failure::ReservedKeyword("break", "break")] - ); - } - - #[test] - fn validate_struct_name_not_keyword() { - assert_eq!(validate("struct MyStruct { }"), []); - assert_eq!( - validate("struct break { }"), - [Failure::ReservedKeyword("break", "break")] - ); - } - - #[test] - fn validate_struct_member_not_keyword() { - assert_eq!(validate("struct MyStruct { }"), []); - assert_eq!(validate("struct MyStruct { okay: Length }"), []); - assert_eq!( - validate("struct MyStruct { break: Length }"), - [Failure::ReservedKeyword("break", "break")] - ); - } - - #[test] - fn validate_no_duplicate_global_names() { - assert_eq!(validate("struct MyThing1 {} function MyThing2() -> Length {} sketch MyThing3() {} solid MyThing4() {}"), []); - assert_eq!(validate("struct MyThing {} function MyThing() -> Length {} sketch MyThing() {} solid MyThing() {}"), [ - Failure::DuplicateGlobal("MyThing", "MyThing"), - Failure::DuplicateGlobal("MyThing", "MyThing"), - Failure::DuplicateGlobal("MyThing", "MyThing"), - ]); - } -} diff --git a/src/script/execution/stack.rs b/src/script/execution/stack.rs deleted file mode 100644 index eca4f15..0000000 --- a/src/script/execution/stack.rs +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::{ - collections::{HashMap, HashSet}, - rc::Rc, -}; - -use compact_str::CompactString; - -use crate::script::Span; - -use super::{ - types::{OperatorResult, StructDefinition, UserFunction, Value}, - Failure, Module, -}; - -#[derive(Debug)] -pub(super) enum ScopeType { - Inherited, - Isolated, - Module, - Closure { references: HashSet }, -} - -impl Default for ScopeType { - fn default() -> Self { - Self::Inherited - } -} - -#[derive(Debug)] -struct Scope { - ty: ScopeType, - variables: HashMap>, -} - -impl Default for Scope { - fn default() -> Self { - Self { - ty: ScopeType::Module, - variables: Default::default(), - } - } -} - -macro_rules! optionally_mut_ref { - (mutable $l:lifetime $ty:ty) => { - & $l mut $ty - }; - (immutable $l:lifetime $ty:ty) => { - & $l $ty - }; -} - -macro_rules! generate_variable_getter { - ($self:ident, $span:ident, $name:ident, $iter:ident, $get:ident, $mutable:ident) => { - { - fn check_module_scope<'a, 'b, S: Span>( - mut scope_iterator: impl Iterator)>, - name: &str, - ) -> Option)> { - if let Some(value) = scope_iterator - .find(|scope| matches!(&scope.ty, ScopeType::Module)) - .and_then(|scope| scope.variables.$get(name)) - { - Some(value) - } else { - None - } - } - - // TODO we should refuse to provide module level scopes when doing an immutable access, since those need to be fully immutable. - let mut scope_iterator = $self.scopes[..=$self.active_scope].$iter().rev(); - - for scope in &mut scope_iterator { - if let Some(value) = scope.variables.$get($name) { - return Ok(value); - } - - match &scope.ty { - // This is the scope of a closure. If the variable we are looking for is referenced, keep searching up the stack for it. - ScopeType::Closure { references } => { - if references.contains($name) { - continue; - } else { - // Oh, well then let's skip to the module scope. - if let Some(value) = check_module_scope(scope_iterator, $name) { - return Ok(value); - } - } - break; - } - // If this scope is isolated, then we should skip to the module scope. - ScopeType::Isolated => { - if let Some(value) = check_module_scope(scope_iterator, $name) { - return Ok(value); - } - break; - } - _ => {} - } - } - - Err(Failure::VariableNotInScope( - $span.clone(), - $name.to_string().into(), - )) - } - }; -} - -// TODO do we want to implement a stack limit? -#[derive(Debug)] -pub struct Stack { - scopes: Vec>, - active_scope: usize, -} - -impl Default for Stack { - fn default() -> Self { - Self { - scopes: vec![Scope { - ty: ScopeType::Module, - ..Default::default() - }], - active_scope: 0, - } - } -} - -impl Stack { - pub fn new(module: Module) -> Self { - let mut root_scope = Scope { - ty: ScopeType::Module, - ..Default::default() - }; - - let structs = module - .root_elements - .structs - .into_iter() - .map(|structure| (structure.name.to_string(), structure)); - for (name, definition) in structs { - root_scope.variables.insert( - name.into(), - StructDefinition { - definition: Rc::new(definition), - } - .into(), - ); - } - - let functions = module - .root_elements - .functions - .into_iter() - .map(|function| (function.named_block.name.to_string(), function)); - for (name, function) in functions { - root_scope - .variables - .insert(name.into(), UserFunction::new(function).into()); - } - - let tasks = module - .root_elements - .tasks - .into_iter() - .map(|task| (task.named_block.name.to_string(), task)); - for (name, task) in tasks { - root_scope - .variables - .insert(name.into(), UserFunction::new(task).into()); - } - - let sketches = module - .root_elements - .sketches - .into_iter() - .map(|sketch| (sketch.named_block.name.to_string(), sketch)); - for (name, sketch) in sketches { - root_scope - .variables - .insert(name.into(), UserFunction::new(sketch).into()); - } - - let solids = module - .root_elements - .solids - .into_iter() - .map(|wolid| (wolid.named_block.name.to_string(), wolid)); - for (name, solid) in solids { - root_scope - .variables - .insert(name.into(), UserFunction::new(solid).into()); - } - - Self { - scopes: vec![root_scope], - active_scope: 0, - } - } - - pub(super) fn push_scope<'a>( - &mut self, - variables_to_copy: impl Iterator, - mode: ScopeType, - ) -> OperatorResult - where - S: 'a, - { - let next_scope_index = self.active_scope + 1; - if next_scope_index >= self.scopes.len() { - self.scopes.push(Scope::default()); - } - - self.scopes[next_scope_index].ty = mode; - - for variable in variables_to_copy { - let value = self.get_variable(variable)?.clone(); - self.scopes[next_scope_index] - .variables - .insert(variable.as_str().into(), value); - } - - self.active_scope = next_scope_index; - - Ok(()) - } - - pub(super) fn pop_scope(&mut self) { - self.scopes[self.active_scope].variables.clear(); - self.active_scope -= 1; - } - - // TODO Recommending similar named variables would help users to notice typos. - pub fn get_variable(&self, name: &S) -> std::result::Result<&Value, Failure> { - self.get_variable_str(name, name.as_str()) - } - - pub fn get_variable_mut(&mut self, name: &S) -> Result<&mut Value, Failure> { - self.get_variable_str_mut(name, name.as_str()) - } - - pub fn get_variable_str(&self, span: &S, name: &str) -> Result<&Value, Failure> { - generate_variable_getter!(self, span, name, iter, get, immutable) - } - pub fn get_variable_str_mut( - &mut self, - span: &S, - name: &str, - ) -> Result<&mut Value, Failure> { - generate_variable_getter!(self, span, name, iter_mut, get_mut, mutable) - } - - pub fn new_variable(&mut self, name: &S, value: Value) { - self.new_variable_str(name.as_str(), value) - } - - pub fn new_variable_str(&mut self, name: impl Into, value: Value) { - let current_scope = &mut self.scopes[self.active_scope]; - - current_scope.variables.insert(name.into(), value); - } -} diff --git a/src/script/execution/statements.rs b/src/script/execution/statements.rs deleted file mode 100644 index ef3eb2f..0000000 --- a/src/script/execution/statements.rs +++ /dev/null @@ -1,959 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::rc::Rc; - -use crate::script::{ - execution::{types::List, Failure}, - parsing::{ - self, Assign, AssignableVariable, Break, Continue, For, Function, If, Loop, Match, Return, - Statement, While, - }, - Span, -}; - -use super::{ - expressions::{self, run_expression}, - run_block, - types::{NoneType, Object, /*List, */ StructDefinition, UserFunction, Value}, - ControlFlow, ExecutionContext, ExecutionResult, -}; - -pub fn run_statement( - context: &mut ExecutionContext, - statement: &Statement, -) -> ExecutionResult> { - match statement { - Statement::Expression(expression) => Ok(expressions::run_expression(context, expression)?), - Statement::Assign(assignment) => run_assignment(context, assignment), - Statement::Return(return_statement) => run_return(context, return_statement), - Statement::If(if_statement) => run_if(context, if_statement), - Statement::Match(match_statement) => run_match(context, match_statement), - Statement::For(for_statement) => run_for(context, for_statement), - Statement::While(while_statement) => run_while(context, while_statement), - Statement::Loop(loop_statement) => run_loop(context, loop_statement), - Statement::Break(break_statement) => run_break(context, break_statement), - Statement::Continue(continue_statement) => run_continue(context, continue_statement), - Statement::DefineFunction(function) => run_define_function(context, function), - Statement::DefineStruct(structure) => run_define_structure(context, structure), - } -} - -fn assign_values( - context: &mut ExecutionContext, - to_assign: &parsing::Assignable, - assignment_span: &S, - source_span: &S, - value: Value, - mut assign: impl FnMut(&mut ExecutionContext, &S, Value) -> ExecutionResult>, -) -> ExecutionResult> { - fn assign_single_value( - context: &mut ExecutionContext, - assignment_span: &S, - value: Value, - variable: &AssignableVariable, - assign: impl FnOnce(&mut ExecutionContext, &S, Value) -> ExecutionResult>, - ) -> ExecutionResult> { - if let Some(ty) = &variable.ty { - if value.matches_type(ty, context.log, assignment_span)? { - assign(context, &variable.name, value) - } else { - Err(ControlFlow::Failure(Failure::ExpectedGot( - assignment_span.clone(), - ty.name(), - value.type_name(), - ))) - } - } else { - assign(context, &variable.name, value) - } - } - - match to_assign { - parsing::Assignable::Variable(variable) => { - assign_single_value(context, assignment_span, value, variable, &mut assign) - } - parsing::Assignable::List(span, variables) => { - let values = value.downcast::>(source_span)?; - - if values.len(span)? != variables.len() { - return Err(ControlFlow::Failure(Failure::ListLengthsDontMatch( - source_span.clone(), - ))); - } - - let value_iter = values.iter(span)?; - for (variable, value) in variables.iter().zip(value_iter) { - assign_single_value(context, assignment_span, value, variable, &mut assign)?; - } - - Ok(NoneType.into()) - } - } -} - -fn run_assignment( - context: &mut ExecutionContext, - assignment: &Assign, -) -> ExecutionResult> { - let value = run_statement(context, &assignment.statement)?; - - if assignment.is_new { - let assign = |context: &mut ExecutionContext, - name: &S, - value: Value| - -> ExecutionResult> { - context.stack.new_variable(name, value); - - Ok(NoneType.into()) - }; - - assign_values( - context, - &assignment.to_assign, - assignment.get_span(), - assignment.statement.get_span(), - value, - assign, - ) - } else { - let assign = |context: &mut ExecutionContext, - name: &S, - value: Value| - -> ExecutionResult> { - let variable = context.stack.get_variable_mut(name)?; - *variable = value; - - Ok(NoneType.into()) - }; - - assign_values( - context, - &assignment.to_assign, - assignment.get_span(), - assignment.statement.get_span(), - value, - assign, - ) - } -} - -fn run_return( - context: &mut ExecutionContext, - return_statement: &Return, -) -> ExecutionResult> { - let value = if let Some(expression) = return_statement.expression.as_ref() { - run_expression(context, expression)? - } else { - NoneType.into() - }; - - Err(ControlFlow::Return { value }) -} - -fn run_if( - context: &mut ExecutionContext, - if_statement: &If, -) -> ExecutionResult> { - let condition = expressions::run_expression(context, &if_statement.expression)?; - - if condition.downcast::(if_statement.expression.get_span())? { - context.new_scope(|context| run_block(context, &if_statement.block)) - } else { - match &if_statement.else_statement { - None => Ok(NoneType.into()), - Some(parsing::Else::Else(block)) => { - context.new_scope(|context| run_block(context, block)) - } - Some(parsing::Else::IfElse(if_statement)) => run_if(context, if_statement), // FIXME an if else chain that's too deep can cause a stack overflow. - } - } -} - -fn run_match( - context: &mut ExecutionContext, - match_statement: &Match, -) -> ExecutionResult> { - fn check_branch_matches( - span: &S, - value: &Value, - branch_value: &Value, - ) -> ExecutionResult { - if value == branch_value || matches!(branch_value, &Value::Default(_)) { - Ok(true) - } else if let (Value::List(value_list), Value::List(branch_value_list)) = - (value, branch_value) - { - // These are lists. We need to check the individual components. - if value_list.len(span)? == branch_value_list.len(span)? { - let branch_value_list = branch_value_list.iter(span)?; - for (value, branch_value) in value_list.iter(span)?.zip(branch_value_list) { - if !check_branch_matches(span, &value, &branch_value)? { - return Ok(false); - } - } - - Ok(true) - } else { - Ok(false) - } - } else { - Ok(false) - } - } - - let value = run_expression(context, &match_statement.expression)?; - - // TODO should we cache these values in a hash map for situations where we may run this match statement several times? - for branch in match_statement.branches.iter() { - let branch_value = Value::from_litteral(context, &branch.litteral)?; - - if check_branch_matches(branch.litteral.get_span(), &value, &branch_value)? { - return context.new_scope(|context| run_block(context, &branch.block)); - } - } - - Err(ControlFlow::Failure(Failure::DidNotMatch( - match_statement.expression.get_span().clone(), - ))) -} - -fn loop_impl( - mut loop_control: F, - context: &mut ExecutionContext, - name: Option<&S>, - block: &parsing::Block, -) -> ExecutionResult> -where - S: Span, - F: FnMut(&mut ExecutionContext) -> ExecutionResult, -{ - context.new_scope(|context| { - loop { - if loop_control(context)? { - let result = run_block(context, block); - - match result { - Ok(result) => { - // Loops must end with a none-type. - if !matches!(result, Value::NoneType(_)) { - // If it returned something that's not None, then there must have been a final statement. - let final_statement = block.statements.last().unwrap(); - - break Err(ControlFlow::Failure(Failure::ExpectedGot( - final_statement.get_span().clone(), - "None".into(), - result.type_name(), - ))); - } - } - Err(exit_reason) => match exit_reason { - ControlFlow::Failure(failure) => break Err(ControlFlow::Failure(failure)), - ControlFlow::Return { value } => break Err(ControlFlow::Return { value }), - ControlFlow::Break { span, label, value } => match (label, name) { - (None, _) => break Ok(value), - (Some(label), Some(loop_name)) => { - let label_str = label.as_str(); - let loop_name = loop_name.as_str(); - - if label_str != loop_name { - // We are not the loop breaking. - // Pass it to our caller. - break Err(ControlFlow::Break { - span, - value, - label: Some(label), - }); - } else { - // We are the loop breaking. - break Ok(value); - } - } - (Some(label), None) => { - // This is for a labelled loop, but we are not labeled. Not for us it seems. - break Err(ControlFlow::Break { - span, - value, - label: Some(label), - }); - } - }, - ControlFlow::Continue { span, label } => match (label, name) { - (None, _) => break Ok(NoneType.into()), - (Some(label), Some(loop_name)) => { - let label_str = label.as_str(); - let loop_name = loop_name.as_str(); - - if label_str != loop_name { - // We are not the loop breaking. - // Pass it to our caller. - break Err(ControlFlow::Continue { - span, - label: Some(label), - }); - } else { - // We are the loop breaking. - break Ok(NoneType.into()); - } - } - (Some(label), None) => { - // This is for a labelled loop, but we are not labeled. Not for us it seems. - break Err(ControlFlow::Continue { - span, - label: Some(label), - }); - } - }, - }, - } - } else { - break Ok(NoneType.into()); - } - } - }) -} - -fn run_for( - context: &mut ExecutionContext, - for_statement: &For, -) -> ExecutionResult> { - let iter_expression = run_expression(context, &for_statement.iterator_expression)?; - let mut iterator = - iter_expression.iterate(context.log, for_statement.iterator_expression.get_span())?; - - loop_impl( - |context| { - if let Some(next_value) = iterator.next() { - let assign = |context: &mut ExecutionContext, - name: &S, - value: Value| - -> ExecutionResult> { - context.stack.new_variable(name, value); - - Ok(NoneType.into()) - }; - let next_value = next_value.clone(); - - assign_values( - context, - &for_statement.variable_assignment, - for_statement.variable_assignment.get_span(), - for_statement.iterator_expression.get_span(), - next_value, - assign, - )?; - - Ok(true) - } else { - Ok(false) - } - }, - context, - for_statement.name.as_ref(), - &for_statement.block, - ) -} - -fn run_while( - context: &mut ExecutionContext, - while_statement: &While, -) -> ExecutionResult> { - loop_impl( - |context| { - Ok(run_expression(context, &while_statement.expression)? - .downcast::(while_statement.expression.get_span())?) - }, - context, - while_statement.name.as_ref(), - &while_statement.block, - ) -} - -fn run_loop( - context: &mut ExecutionContext, - loop_statement: &Loop, -) -> ExecutionResult> { - loop_impl( - |_context| Ok(true), - context, - loop_statement.name.as_ref(), - &loop_statement.block, - ) -} - -fn run_break( - context: &mut ExecutionContext, - break_statement: &Break, -) -> ExecutionResult> { - let value = if let Some(expression) = &break_statement.expression { - run_expression(context, expression)? - } else { - NoneType.into() - }; - - Err(ControlFlow::Break { - span: break_statement.get_span().clone(), - label: break_statement.loop_name.clone(), - value, - }) -} - -fn run_continue( - _context: &mut ExecutionContext, - continue_statement: &Continue, -) -> ExecutionResult> { - Err(ControlFlow::Continue { - span: continue_statement.get_span().clone(), - label: continue_statement.loop_name.clone(), - }) -} - -fn run_define_function( - context: &mut ExecutionContext, - function: &Rc>, -) -> ExecutionResult> { - context.stack.new_variable( - &function.named_block.name, - UserFunction::from(function).into(), - ); - - Ok(NoneType.into()) -} - -fn run_define_structure( - context: &mut ExecutionContext, - definition: &Rc>, -) -> ExecutionResult> { - context.stack.new_variable( - &definition.name, - StructDefinition { - definition: Rc::clone(definition), - } - .into(), - ); - - Ok(NoneType.into()) -} - -#[cfg(test)] -mod test { - use crate::script::{ - execution::{ControlFlow, Failure}, - Runtime, - }; - use common_data_types::Float; - - use super::*; - - #[test] - fn assignment() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_statement(context, &parsing::Statement::parse("value = 1").unwrap().1), - Err(ControlFlow::Failure(Failure::VariableNotInScope( - "value", - "value".into(), - ))) - ); - assert!(context.stack.get_variable(&"value").is_err()); - - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("let value = 1").unwrap().1 - ), - Ok(NoneType.into()) - ); - assert_eq!( - context.stack.get_variable(&"value"), - Ok(&Float::new(1.0).unwrap().into()) - ); - - assert_eq!( - run_statement(context, &parsing::Statement::parse("value = 2").unwrap().1), - Ok(NoneType.into()) - ); - assert_eq!( - context.stack.get_variable(&"value"), - Ok(&Float::new(2.0).unwrap().into()) - ); - - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("let [one, two] = [1, 2]") - .unwrap() - .1 - ), - Ok(NoneType.into()) - ); - assert_eq!( - context.stack.get_variable(&"one"), - Ok(&Float::new(1.0).unwrap().into()) - ); - assert_eq!( - context.stack.get_variable(&"two"), - Ok(&Float::new(2.0).unwrap().into()) - ); - - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("[one, two] = [3, 4]").unwrap().1 - ), - Ok(NoneType.into()) - ); - assert_eq!( - context.stack.get_variable(&"one"), - Ok(&Float::new(3.0).unwrap().into()) - ); - assert_eq!( - context.stack.get_variable(&"two"), - Ok(&Float::new(4.0).unwrap().into()) - ); - - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("let [one, two] = [1, 2, 3]") - .unwrap() - .1 - ), - Err(ControlFlow::Failure(Failure::ListLengthsDontMatch("["))) - ); - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("let [one, two] = [1]").unwrap().1 - ), - Err(ControlFlow::Failure(Failure::ListLengthsDontMatch("["))) - ); - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("let [one, two] = 1").unwrap().1 - ), - Err(ControlFlow::Failure(Failure::ExpectedGot( - "1", - "List".into(), - "Number".into() - ))) - ); - }); - } - - #[test] - fn assign_scopes() { - ExecutionContext::create(&mut Runtime::default(), |context| { - context - .stack - .new_variable(&"one", Float::new(1.0).unwrap().into()); - context - .stack - .new_variable(&"value", Float::new(1.0).unwrap().into()); - - context.new_scope(|context| { - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("let one = 2").unwrap().1 - ), - Ok(NoneType.into()) - ); - - assert_eq!( - context.stack.get_variable(&"value"), - Ok(&Float::new(1.0).unwrap().into()) - ); - assert_eq!( - run_statement(context, &parsing::Statement::parse("value = 2").unwrap().1), - Ok(NoneType.into()) - ); - assert_eq!( - context.stack.get_variable(&"value"), - Ok(&Float::new(2.0).unwrap().into()) - ); - }); - - assert_eq!( - context.stack.get_variable(&"value"), - Ok(&Float::new(2.0).unwrap().into()) - ); - assert_eq!( - context.stack.get_variable(&"one"), - Ok(&Float::new(1.0).unwrap().into()) - ); - }); - } - - #[test] - fn loop_statement() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("loop { break; }").unwrap().1 - ), - Ok(NoneType.into()) - ); - }); - } - - #[test] - fn if_statement() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("if true { 1.0 }").unwrap().1 - ), - Ok(Float::new(1.0).unwrap().into()) - ); - - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("if false { 1.0 }").unwrap().1 - ), - Ok(NoneType.into()) - ); - - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("if true { 1.0 } else { 2.0 }") - .unwrap() - .1 - ), - Ok(Float::new(1.0).unwrap().into()) - ); - - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("if false { 1.0 } else { 2.0 }") - .unwrap() - .1 - ), - Ok(Float::new(2.0).unwrap().into()) - ); - - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("if false { 1.0 } else if true { 2.0 }") - .unwrap() - .1 - ), - Ok(Float::new(2.0).unwrap().into()) - ); - - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("if true { 1.0 } else if true { 2.0 }") - .unwrap() - .1 - ), - Ok(Float::new(1.0).unwrap().into()) - ); - - assert_eq!( - run_statement( - context, - &parsing::Statement::parse( - "if false { 1.0 } else if false { 2.0 } else { 3.0 }" - ) - .unwrap() - .1 - ), - Ok(Float::new(3.0).unwrap().into()) - ); - }); - } - - #[test] - fn break_statement() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("loop { break; }").unwrap().1 - ), - Ok(NoneType.into()) - ); - - assert_eq!( - run_block( - context, - &parsing::Block::parse( - "{ let test_one = 0; loop { test_one = 1; break; test_one = 2 } }", - ) - .unwrap() - .1 - ), - Ok(NoneType.into()) - ); - assert_eq!( - context.stack.get_variable(&"test_one"), - Ok(&Float::new(1.0).unwrap().into()) - ); - - assert_eq!( - run_block(context, &parsing::Block::parse( - "{ let test_one = 0; loop { if test_one >= 5 { break; } test_one = test_one + 1; } }", - ) - .unwrap() - .1), - Ok(NoneType.into()) - ); - assert_eq!( - context.stack.get_variable(&"test_one"), - Ok(&Float::new(5.0).unwrap().into()) - ); - - assert_eq!( - run_block(context, &parsing::Block::parse( - "{ let test_one = 0; 'parent: loop { loop { break 'parent; } test_one = 1 } }", - ) - .unwrap() - .1), - Ok(NoneType.into()) - ); - assert_eq!( - context.stack.get_variable(&"test_one"), - Ok(&Float::new(0.0).unwrap().into()) - ); - - assert_eq!( - run_block( - context, - &parsing::Block::parse("{ loop { break 1.0; } }").unwrap().1 - ), - Ok(Float::new(1.0).unwrap().into()) - ); - }); - } - - #[test] - fn continue_statement() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_block(context, &parsing::Block::parse( - "{ let a = 0; let b = false; loop { a = a + 1; if a >= 2 { break; } continue; b = true; } }", - ) - .unwrap() - .1), - Ok(NoneType.into()) - ); - assert_eq!(context.stack.get_variable(&"b"), Ok(&false.into())); - - assert_eq!( - run_block(context, &parsing::Block::parse( - "{ let a = 0; let b = false; 'parent: loop { a = a + 1; if a >= 2 { break; } loop { continue 'parent; } b = true; } }", - ) - .unwrap() - .1), - Ok(NoneType.into()) - ); - assert_eq!(context.stack.get_variable(&"b"), Ok(&false.into())); - }); - } - - #[test] - fn while_statement() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_block( - context, - &parsing::Block::parse( - "{ let count = 0; while count < 5 { count = count + 1; } }" - ) - .unwrap() - .1 - ), - Ok(NoneType.into()) - ); - assert_eq!( - context.stack.get_variable(&"count"), - Ok(&Float::new(5.0).unwrap().into()) - ); - }); - } - - #[test] - fn for_statement() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_block( - context, - &parsing::Block::parse( - "{ let count = 0; for i in 0..5 { count = count + 1; } }" - ) - .unwrap() - .1 - ), - Ok(NoneType.into()) - ); - assert_eq!( - context.stack.get_variable(&"count"), - Ok(&Float::new(5.0).unwrap().into()) - ); - - assert_eq!( - run_block( - context, - &parsing::Block::parse( - "{ let count = 0; for i in 0..5 { count = count + i; } }" - ) - .unwrap() - .1 - ), - Ok(NoneType.into()) - ); - assert_eq!( - context.stack.get_variable(&"count"), - Ok(&Float::new(10.0).unwrap().into()) - ); - - assert_eq!( - run_block(context, &parsing::Block::parse( - "{ let a = 0; let b = 0; for [x, y] in [[1, 2], [3, 4]] { a = a + x; b = b + y; } }", - ) - .unwrap() - .1), - Ok(NoneType.into()) - ); - assert_eq!( - context.stack.get_variable(&"a"), - Ok(&Float::new(4.0).unwrap().into()) - ); - assert_eq!( - context.stack.get_variable(&"b"), - Ok(&Float::new(6.0).unwrap().into()) - ); - }); - } - - #[test] - fn match_statement() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_block( - context, - &parsing::Block::parse("{ match 1 { 1 => true, default => false } }") - .unwrap() - .1 - ), - Ok(true.into()) - ); - - assert_eq!( - run_block( - context, - &parsing::Block::parse("{ match 2 { 1 => true, default => false } }") - .unwrap() - .1 - ), - Ok(false.into()) - ); - - assert_eq!( - run_block( - context, - &parsing::Block::parse( - "{ match [1, 2] { [1, 1] => 2, [1, 2] => 1, default => 0 } }" - ) - .unwrap() - .1 - ), - Ok(Float::new(1.0).unwrap().into()) - ); - - assert_eq!( - run_block( - context, - &parsing::Block::parse( - "{ match [1, 1] { [1, 1] => 2, [1, 2] => 1, default => 0 } }" - ) - .unwrap() - .1 - ), - Ok(Float::new(2.0).unwrap().into()) - ); - - assert_eq!( - run_block( - context, - &parsing::Block::parse("{ match [1, 2] { [1, default] => 1, default => 0 } }") - .unwrap() - .1 - ), - Ok(Float::new(1.0).unwrap().into()) - ); - - assert_eq!( - run_block( - context, - &parsing::Block::parse("{ match [1, 1] { [1, default] => 1, default => 0 } }") - .unwrap() - .1 - ), - Ok(Float::new(1.0).unwrap().into()) - ); - }); - } - - #[test] - fn define_function() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("function my_function() -> Number { 0 }") - .unwrap() - .1 - ), - Ok(NoneType.into()) - ); - - assert!(matches!( - context.stack.get_variable(&"my_function"), - Ok(Value::UserFunction(_)) - )); - }); - } - - #[test] - fn define_structure() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_statement( - context, - &parsing::Statement::parse("struct MyStruct {}").unwrap().1 - ), - Ok(NoneType.into()) - ); - - assert!(matches!( - context.stack.get_variable(&"MyStruct"), - Ok(Value::StructDefinition(_)) - )); - }); - } -} diff --git a/src/script/execution/types/boolean.rs b/src/script/execution/types/boolean.rs deleted file mode 100644 index a6698be..0000000 --- a/src/script/execution/types/boolean.rs +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::fmt::Write; - -use crate::script::{logging::RuntimeLog, parsing::VariableType, Span}; - -use super::{ - serializable::SerializableValue, - string::formatting::{Style, UnsupportedMessage, UnwrapFormattingResult}, - NamedObject, Object, OperatorResult, TypedObject, Value, -}; - -pub type Boolean = bool; - -impl Object for Boolean { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::Boolean)) - } - - fn format( - &self, - _context: &mut dyn RuntimeLog, - span: &S, - f: &mut dyn Write, - style: Style, - precision: Option, - ) -> OperatorResult { - match (style, precision) { - (Style::Default | Style::Debug, None) => { - write!(f, "{}", self).unwrap_formatting_result(span) - } - (_, None) => style.unsupported_message(self, span), - (Style::Default | Style::Debug, _) => style.unsupported_message(self, span), - _ => { - style.unsupported_message(self, span).ok(); - precision.unsupported_message(self, span) - } - } - } - - fn eq( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult { - let rhs = rhs.downcast_ref::(span)?; - Ok(*self == *rhs) - } - - fn and( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let rhs = rhs.downcast_ref(span)?; - Ok((*self && *rhs).into()) - } - - fn or( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let rhs = rhs.downcast_ref(span)?; - Ok((*self || *rhs).into()) - } - - fn unary_logical_not( - &self, - _log: &mut dyn RuntimeLog, - _span: &S, - ) -> OperatorResult> { - Ok((!self).into()) - } - - fn export( - &self, - _log: &mut dyn RuntimeLog, - _span: &S, - ) -> OperatorResult { - Ok(SerializableValue::Boolean(*self)) - } -} - -impl TypedObject for Boolean { - fn get_type() -> VariableType { - VariableType::Boolean - } -} - -impl NamedObject for Boolean { - fn static_type_name() -> &'static str { - "Boolean" - } -} diff --git a/src/script/execution/types/closure.rs b/src/script/execution/types/closure.rs deleted file mode 100644 index 9102d35..0000000 --- a/src/script/execution/types/closure.rs +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::rc::Rc; - -use crate::script::{ - execution::{run_callable_block, ExecutionContext}, - logging::RuntimeLog, - parsing::{self, CapturedVariable, Expression, VariableType}, - Span, -}; - -use super::{NamedObject, Object, OperatorResult, Value}; - -#[derive(Clone)] -pub struct Closure { - pub source: Rc>, -} - -impl Object for Closure { - fn matches_type( - &self, - _ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(false) - } - - fn call( - &self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - spans: &[Expression], - ) -> OperatorResult> { - let referenced_variables = self.source.captured_variables.iter().filter_map(|v| { - if let CapturedVariable::Reference(name) = v { - Some(name.as_str()) - } else { - None - } - }); - - let copied_variables = self.source.captured_variables.iter().filter_map(|v| { - if let CapturedVariable::Copy(name) = v { - Some(name) - } else { - None - } - }); - - context.new_closure_scope(referenced_variables, copied_variables, |context| { - run_callable_block(context, &self.source.callable, arguments, spans, span) - })? - } -} - -impl<'a, S: Span> From<&'a Rc>> for Closure { - fn from(source: &'a Rc>) -> Self { - Self { - source: Rc::clone(source), - } - } -} - -impl std::fmt::Debug for Closure { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("Closure") - .field("address", &Rc::as_ptr(&self.source)) - .finish() - } -} - -impl PartialEq for Closure { - fn eq(&self, _other: &Self) -> bool { - false - } -} - -impl NamedObject for Closure { - fn static_type_name() -> &'static str { - "Closure" - } -} - -#[cfg(test)] -mod test { - use common_data_types::Float; - - use crate::script::{ - execution::{ - expressions::run_expression, run_block, types::NoneType, ControlFlow, Failure, - }, - Runtime, - }; - - use super::*; - - #[test] - fn call_closure() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression( - context, - &Expression::parse("[]() -> Number { 1 }()").unwrap().1 - ), - Ok(Float::new(1.0).unwrap().into()) - ); - }); - } - - #[test] - fn closure_hygene() { - ExecutionContext::create(&mut Runtime::default(), |context| { - let block = parsing::Block::parse( - "{ let closure = []() -> Number { let value = 1; }; closure(); }", - ) - .unwrap() - .1; - - assert_eq!(run_block(context, &block), Ok(NoneType.into())); - - assert_eq!( - context.stack.get_variable(&"value"), - Err(Failure::VariableNotInScope("value", "value".into())) - ); - - let block = parsing::Block::parse( - "{ let closure = []() -> Number { value = 1; }; closure(); }", - ) - .unwrap() - .1; - - assert_eq!( - run_block(context, &block), - Err(ControlFlow::Failure(Failure::VariableNotInScope( - "value", - "value".into() - ))) - ); - - let block = parsing::Block::parse( - "{ let value = 2; let closure = []() -> Number { value = 1; }; closure(); }", - ) - .unwrap() - .1; - - // Running the test right on the module scope creates issues, so we need to create a new scope. - context.new_scope(|context| { - assert_eq!( - run_block(context, &block), - Err(ControlFlow::Failure(Failure::VariableNotInScope( - "value", - "value".into() - ))) - ); - - assert_eq!( - context.stack.get_variable(&"value"), - Ok(&Float::new(2.0).unwrap().into()) - ); - }); - }); - } - - #[test] - fn pass_by_copy() { - ExecutionContext::create(&mut Runtime::default(), |context| { - let block = parsing::Block::parse( - "{ let value = 1; let closure = [value]() -> Number { value = 2; value }; closure() }", - ) - .unwrap() - .1; - - let result = run_block(context, &block); - assert_eq!(result, Ok(Float::new(2.0).unwrap().into())); - - assert_eq!( - context.stack.get_variable(&"value"), - Ok(&Float::new(1.0).unwrap().into()) - ); - }); - } - - #[test] - fn pass_by_reference() { - ExecutionContext::create(&mut Runtime::default(), |context| { - let block = parsing::Block::parse( - "{ let value = 1; let closure = [&value]() -> Number { value = 2; value }; closure() }", - ) - .unwrap() - .1; - - let result = run_block(context, &block); - assert_eq!(result, Ok(Float::new(2.0).unwrap().into())); - - assert_eq!( - context.stack.get_variable(&"value"), - Ok(&Float::new(2.0).unwrap().into()) - ); - }); - } -} diff --git a/src/script/execution/types/default.rs b/src/script/execution/types/default.rs deleted file mode 100644 index f821c20..0000000 --- a/src/script/execution/types/default.rs +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use crate::script::{logging::RuntimeLog, parsing::VariableType, Span}; - -use super::{NamedObject, Object, OperatorResult}; - -#[derive(Debug, Clone, PartialEq)] -pub struct DefaultValue; - -impl Object for DefaultValue { - fn matches_type( - &self, - _ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(false) - } -} - -impl NamedObject for DefaultValue { - fn static_type_name() -> &'static str { - "Default" - } -} diff --git a/src/script/execution/types/function.rs b/src/script/execution/types/function.rs deleted file mode 100644 index 0186c3a..0000000 --- a/src/script/execution/types/function.rs +++ /dev/null @@ -1,333 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::rc::Rc; - -use fortuples::fortuples; - -use crate::script::{ - execution::{run_callable_block, types::NoneType, ExecutionContext, Failure}, - logging::RuntimeLog, - parsing::{Expression, Function, VariableType}, - Span, -}; - -use super::{NamedObject, Object, OperatorResult, Value}; - -#[derive(Clone)] -pub struct UserFunction { - pub source: Rc>, -} - -impl std::fmt::Debug for UserFunction { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("UserFunction") - .field("address", &Rc::as_ptr(&self.source)) - .finish() - } -} - -impl From<&'_ Rc>> for UserFunction { - fn from(value: &'_ Rc>) -> Self { - Self { - source: Rc::clone(value), - } - } -} - -impl UserFunction { - pub fn new(source: Function) -> Self { - Self { - source: Rc::new(source), - } - } -} - -impl Object for UserFunction { - fn matches_type( - &self, - _ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(false) - } - - fn call( - &self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - spans: &[Expression], - ) -> OperatorResult> { - context.new_isolated_scope(|context| { - run_callable_block( - context, - &self.source.named_block.callable, - arguments, - spans, - span, - ) - }) - } -} - -impl PartialEq for UserFunction { - fn eq(&self, _other: &Self) -> bool { - false - } -} - -impl NamedObject for UserFunction { - fn static_type_name() -> &'static str { - "Function" - } -} - -pub type BuiltinFunction = dyn Fn( - &mut ExecutionContext, - &S, - Vec>, - &[Expression], -) -> OperatorResult>; - -pub struct BuiltinFunctionRef(Rc>); - -impl std::ops::Deref for BuiltinFunctionRef { - type Target = BuiltinFunction; - - fn deref(&self) -> &Self::Target { - &*self.0 - } -} - -impl std::cmp::Eq for BuiltinFunctionRef {} -impl std::cmp::PartialEq for BuiltinFunctionRef { - fn eq(&self, other: &Self) -> bool { - std::ptr::addr_eq(Rc::as_ptr(&self.0), Rc::as_ptr(&other.0)) - } -} - -impl Clone for BuiltinFunctionRef { - fn clone(&self) -> Self { - Self(Rc::clone(&self.0)) - } -} - -impl std::fmt::Debug for BuiltinFunctionRef { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let mut debug_struct = f.debug_struct("BuiltinFunction"); - debug_struct.field("address", &Rc::as_ptr(&self.0)); - debug_struct.finish() - } -} - -impl From>> for BuiltinFunctionRef { - fn from(value: Box>) -> Self { - Self(value.into()) - } -} - -impl Object for BuiltinFunctionRef { - fn matches_type( - &self, - _ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(false) - } - - fn call( - &self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult> { - (*self)(context, span, arguments, expressions) - } -} - -impl NamedObject for BuiltinFunctionRef { - fn static_type_name() -> &'static str { - "BuiltinFunction" - } -} - -pub trait UnpackArguments { - fn unpack_arguments( - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult; - - fn unpack_arguments_optional( - _span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult; -} - -#[rustfmt::skip] -fortuples! { - impl UnpackArguments for #Tuple - where - S: Span, - #(#Member: NamedObject),* - #(Value: TryInto<#Member>),* - { - fn unpack_arguments( - _span: &S, - mut arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult { - arguments.reverse(); - let mut expression_iter = expressions.iter(); - - #(let casey::lower!(#Member) = { - if let Some(value) = arguments.pop() { - value.downcast(expression_iter.next().unwrap().get_span()).map_err(|f| f.make_from_function_call())? - } else { - return Err(Failure::MissingArguments(_span.clone()).make_from_function_call()); - } - };)* - - if let Some(extra_expression) = expression_iter.next() { - Err(Failure::TooManyArguments(extra_expression.get_span().clone()).make_from_function_call()) - } else { - Ok((#(casey::lower!(#Member)),*)) - } - } - - fn unpack_arguments_optional( - _span: &S, - mut arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult { - arguments.reverse(); - let mut expression_iter = expressions.iter(); - - #(let casey::lower!(#Member) = { - if let Some(value) = arguments.pop() { - value.downcast(expression_iter.next().unwrap().get_span()).map_err(|f| f.make_from_function_call())? - } else { - Value::::from(NoneType).downcast(_span)? - } - };)* - - if let Some(extra_expression) = expression_iter.next() { - Err(Failure::TooManyArguments(extra_expression.get_span().clone()).make_from_function_call()) - } else { - Ok((#(casey::lower!(#Member)),*)) - } - } - } -} - -pub trait AutoCall -where - S: Span, -{ - type Unpacker: UnpackArguments; - - fn auto_call( - self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult>; - - fn auto_call_optional( - self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult>; -} - -#[rustfmt::skip] -fortuples! { - impl AutoCall for F - where - S: Span, - #(#Member: NamedObject),* - #(Value: TryInto<#Member>),* - F: FnOnce(&mut ExecutionContext, &S, #(#Member),*) -> OperatorResult>, - { - type Unpacker = #Tuple; - - fn auto_call( - self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult> { - let (#(casey::lower!(#Member)),*) = Self::Unpacker::unpack_arguments(span, arguments, expressions)?; - - (self)(context, span, #(casey::lower!(#Member)),*) - } - - fn auto_call_optional( - self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult> { - let (#(casey::lower!(#Member)),*) = Self::Unpacker::unpack_arguments_optional(span, arguments, expressions)?; - - (self)(context, span, #(casey::lower!(#Member)),*) - } - } -} - -pub trait IntoBuiltinFunction: AutoCall { - fn into_builtin_function(self) -> BuiltinFunctionRef; - fn into_builtin_function_optional(self) -> BuiltinFunctionRef; -} - -#[rustfmt::skip] - fortuples! { - impl IntoBuiltinFunction for F - where - S: Span, - F: Fn(&mut ExecutionContext, &S, #(#Member),*) -> OperatorResult> + Clone + 'static, - #(#Member: NamedObject),* - #(Value: TryInto<#Member>),* - { - fn into_builtin_function(self) -> BuiltinFunctionRef { - let function: Box> = Box::new(move |context: &mut ExecutionContext, span: &S, arguments: Vec>, expressions: &[Expression]| -> OperatorResult> { - self.clone().auto_call(context, span, arguments, expressions) - }); - - BuiltinFunctionRef::from(function) - } - - fn into_builtin_function_optional(self) -> BuiltinFunctionRef { - let function: Box> = Box::new(move |context: &mut ExecutionContext, span: &S, arguments: Vec>, expressions: &[Expression]| -> OperatorResult> { - self.clone().auto_call_optional(context, span, arguments, expressions) - }); - - BuiltinFunctionRef::from(function) - } - } - } diff --git a/src/script/execution/types/list.rs b/src/script/execution/types/list.rs deleted file mode 100644 index 884ce7e..0000000 --- a/src/script/execution/types/list.rs +++ /dev/null @@ -1,607 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use common_data_types::Float; -use enum_downcast::{AsVariant, EnumDowncast, IntoVariant}; -use ouroboros::self_referencing; -use std::{cell::RefCell, fmt::Write, isize, rc::Rc}; - -use crate::script::{ - execution::{expressions::run_expression, ExecutionContext, Failure}, - logging::RuntimeLog, - parsing::{self, Expression, VariableType}, - Span, -}; - -use super::{ - function::AutoCall, math::Number, number::UnwrapNotNan, serializable::SerializableValue, - string::formatting::Style, NamedObject, NoneType, Object, OperatorResult, Scalar, TypedObject, - UnwrapBorrowFailure, Value, -}; - -#[derive(Debug, Clone, PartialEq)] -pub struct List { - vector: Rc>>>, -} - -impl From for List -where - I: IntoIterator>, -{ - fn from(value: I) -> Self { - let value = value.into_iter(); - - Self { - vector: Rc::new(RefCell::new(value.collect())), - } - } -} - -impl List { - pub(crate) fn from_parsed( - context: &mut ExecutionContext, - list: &parsing::List, - ) -> OperatorResult> { - let mut vector = Vec::with_capacity(list.expressions.len()); - - for expression in list.expressions.iter() { - let value = run_expression(context, expression)?; - - vector.push(value); - } - - Ok(Self { - vector: Rc::new(RefCell::new(vector)), - } - .into()) - } - - fn internalize_index(&self, span: &S, index: isize) -> OperatorResult { - let vector = self.vector.try_borrow().unwrap_borrow_failure(span)?; - - let new_index = if index >= 0 { - Ok(index as usize) - } else if let Some(new_index) = vector.len().checked_sub(index.unsigned_abs()) { - Ok(new_index) - } else { - Err(Failure::IndexOutOfRange(span.clone(), index)) - }?; - - if new_index >= vector.len() { - Err(Failure::IndexOutOfRange(span.clone(), index)) - } else { - Ok(new_index) - } - } - - pub fn len(&self, span: &S) -> OperatorResult { - let vector = self.vector.try_borrow().unwrap_borrow_failure(span)?; - Ok(vector.len()) - } - - pub fn iter(&self, span: &S) -> OperatorResult>> { - let vector = Rc::clone(&self.vector); - - #[self_referencing] - struct ListIter { - vector: Rc>>>, - - #[borrows(vector)] - #[not_covariant] - reference: std::cell::Ref<'this, Vec>>, - - #[borrows(reference)] - #[not_covariant] - iterator: std::iter::Cloned>>, - } - - impl Iterator for ListIter { - type Item = Value; - - fn next(&mut self) -> Option { - self.with_iterator_mut(|iterator| iterator.next()) - } - } - - ListIter::try_new( - vector, - |vector| vector.try_borrow().unwrap_borrow_failure(span), - |reference| Ok(reference.iter().cloned()), - ) - } -} - -impl Object for List { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::List)) - } - - fn format( - &self, - log: &mut dyn RuntimeLog, - span: &S, - f: &mut dyn Write, - style: Style, - precision: Option, - ) -> OperatorResult { - let vector = self.vector.try_borrow().unwrap_borrow_failure(span)?; - - for item in vector.iter() { - item.format(log, span, f, style, precision)?; - } - - Ok(()) - } - - fn index( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - index: Value, - ) -> OperatorResult> { - match index { - Value::Scalar(scalar) => { - let index = Number::try_from(scalar.clone()).map_err(|_| { - Failure::ExpectedGot( - span.clone(), - Number::static_type_name().into(), - >::type_name(&scalar), - ) - })?; - let index = index.to_index(); - - let localized_index = self.internalize_index(span, index)?; - - self.vector - .try_borrow() - .unwrap_borrow_failure(span)? - .get(localized_index) - .cloned() - .ok_or(Failure::IndexOutOfRange(span.clone(), index)) - } - Value::Range(range) => { - let vector = self.vector.try_borrow().unwrap_borrow_failure(span)?; - - // TODO could we keep an immutable reference to the original list to avoid a copy? - let slice = match ( - range.lower_bound, - range.upper_bound, - range.upper_bound_is_inclusive, - ) { - (None, None, false) => vector.get(..).ok_or((None, None)), - (Some(lower_bound), None, false) => { - let signed_lower_bound = lower_bound.to_index(); - let lower_bound = self.internalize_index(span, signed_lower_bound)?; - vector - .get(lower_bound..) - .ok_or((Some(signed_lower_bound), None)) - } - (None, Some(upper_bound), false) => { - let signed_upper_bound = upper_bound.to_index(); - let upper_bound = self.internalize_index(span, signed_upper_bound)?; - vector - .get(..upper_bound) - .ok_or((None, Some(signed_upper_bound))) - } - (None, Some(upper_bound), true) => { - let signed_upper_bound = upper_bound.to_index(); - let upper_bound = self.internalize_index(span, signed_upper_bound)?; - vector - .get(..=upper_bound) - .ok_or((None, Some(signed_upper_bound))) - } - (Some(lower_bound), Some(upper_bound), false) => { - let signed_lower_bound = lower_bound.to_index(); - let lower_bound = self.internalize_index(span, signed_lower_bound)?; - let signed_upper_bound = upper_bound.to_index(); - let upper_bound = self.internalize_index(span, signed_upper_bound)?; - vector - .get(lower_bound..upper_bound) - .ok_or((Some(signed_lower_bound), Some(signed_upper_bound))) - } - (Some(lower_bound), Some(upper_bound), true) => { - let signed_lower_bound = lower_bound.to_index(); - let lower_bound = self.internalize_index(span, signed_lower_bound)?; - let signed_upper_bound = upper_bound.to_index(); - let upper_bound = self.internalize_index(span, signed_upper_bound)?; - vector - .get(lower_bound..=upper_bound) - .ok_or((Some(signed_lower_bound), Some(signed_upper_bound))) - } - (_, None, true) => unreachable!(), // Inclusive ranges without an upper bound are illegal to construct. - }; - - // TODO String has an identical error handling. We should probably move this to a common library. - let range_type = if range.upper_bound_is_inclusive { - "..=" - } else { - ".." - }; - - slice - .map(|slice| Self::from(slice.iter().cloned()).into()) - .map_err(|(lower_bound, upper_bound)| { - Failure::SliceOutOfRange(span.clone(), lower_bound, range_type, upper_bound) - }) - } - _ => Err(Failure::ExpectedGot( - span.clone(), - "Number or Range".into(), - index.type_name(), - )), - } - } - - fn iterate( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - ) -> OperatorResult>>> { - Ok(Box::new(self.iter(span)?)) - } - - fn method_call( - &self, - context: &mut ExecutionContext, - span: &S, - attribute: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult> { - match attribute.as_str() { - "append" => |_context: &mut ExecutionContext, - span: &S, - other: List| - -> OperatorResult> { - let mut other = other.vector.try_borrow_mut().unwrap_borrow_failure(span)?; - - self.vector - .try_borrow_mut() - .unwrap_borrow_failure(span)? - .append(&mut other); - - Ok(NoneType.into()) - } - .auto_call(context, span, arguments, expressions), - "dedup" => { - |_context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - self.vector - .try_borrow_mut() - .unwrap_borrow_failure(span)? - .dedup(); - Ok(NoneType.into()) - } - .auto_call(context, span, arguments, expressions) - } - "insert" => move |_context: &mut ExecutionContext, - span: &S, - index: Number, - value: Value| - -> OperatorResult> { - let index = index.to_index(); - let index = self.internalize_index(span, index)?; - self.vector - .try_borrow_mut() - .unwrap_borrow_failure(span)? - .insert(index, value); - - Ok(NoneType.into()) - } - .auto_call(context, span, arguments, expressions), - "is_empty" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - Ok(self - .vector - .try_borrow() - .unwrap_borrow_failure(span)? - .is_empty() - .into()) - } - .auto_call(context, span, arguments, expressions) - } - "len" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - Float::new(self.vector.try_borrow().unwrap_borrow_failure(span)?.len() as f64) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - "push" => |_context: &mut ExecutionContext, - span: &S, - other: Value| - -> OperatorResult> { - self.vector - .try_borrow_mut() - .unwrap_borrow_failure(span)? - .push(other); - - Ok(NoneType.into()) - } - .auto_call(context, span, arguments, expressions), - "remove" => |_context: &mut ExecutionContext, - span: &S, - index: Number| - -> OperatorResult> { - let index = index.to_index(); - let index = self.internalize_index(span, index)?; - - self.vector - .try_borrow_mut() - .unwrap_borrow_failure(span)? - .remove(index); - - Ok(NoneType.into()) - } - .auto_call(context, span, arguments, expressions), - "contains" => |_context: &mut ExecutionContext, - span: &S, - search: Value| - -> OperatorResult> { - Ok(self - .vector - .try_borrow() - .unwrap_borrow_failure(span)? - .contains(&search) - .into()) - } - .auto_call(context, span, arguments, expressions), - "last" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - let vector = self.vector.try_borrow().unwrap_borrow_failure(span)?; - let last = vector.last(); - - if let Some(last) = last { - Ok(last.clone()) - } else { - Err(Failure::ListIsEmpty(span.clone())) - } - } - .auto_call(context, span, arguments, expressions) - } - "first" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - let vector = self.vector.try_borrow().unwrap_borrow_failure(span)?; - let first = vector.first(); - - if let Some(first) = first { - Ok(first.clone()) - } else { - Err(Failure::ListIsEmpty(span.clone())) - } - } - .auto_call(context, span, arguments, expressions) - } - "reverse" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - self.vector - .try_borrow_mut() - .unwrap_borrow_failure(span)? - .reverse(); - - Ok(NoneType.into()) - } - .auto_call(context, span, arguments, expressions) - } - "rotate_left" => |_context: &mut ExecutionContext, - span: &S, - mid: Number| - -> OperatorResult> { - let mid = mid.to_index(); - if mid.is_positive() { - let mut vector = self.vector.try_borrow_mut().unwrap_borrow_failure(span)?; - let mid = mid as usize % vector.len(); - vector.rotate_left(mid); - - Ok(NoneType.into()) - } else { - Err(Failure::NumberMustBePositive(span.clone())) - } - } - .auto_call(context, span, arguments, expressions), - "rotate_right" => |_context: &mut ExecutionContext, - span: &S, - mid: Number| - -> OperatorResult> { - let mid = mid.to_index(); - if mid.is_positive() { - let mut vector = self.vector.try_borrow_mut().unwrap_borrow_failure(span)?; - let mid = mid as usize % vector.len(); - vector.rotate_right(mid); - - Ok(NoneType.into()) - } else { - Err(Failure::NumberMustBePositive(span.clone())) - } - } - .auto_call(context, span, arguments, expressions), - "clone" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - Ok(List::from(self.iter(span)?).into()) - } - .auto_call(context, span, arguments, expressions) - } - _ => Err(Failure::UnknownAttribute(attribute.clone())), - } - } - - fn export( - &self, - log: &mut dyn RuntimeLog, - span: &S, - ) -> OperatorResult { - let vector = self.vector.try_borrow().unwrap_borrow_failure(span)?; - - let mut list = Vec::with_capacity(vector.len()); - - for item in vector.iter() { - let serializable = item.export(log, span)?; - list.push(serializable); - } - - Ok(SerializableValue::List(list)) - } -} - -impl TypedObject for List { - fn get_type() -> VariableType { - VariableType::List - } -} - -impl NamedObject for List { - fn static_type_name() -> &'static str { - "List" - } -} - -impl List { - pub fn unpack_dynamic_length(self, span: &S) -> OperatorResult> - where - T: NamedObject, - Value: IntoVariant + AsVariant + TryInto, - { - // We're going to return copies of all the values in the end anyway, so may as well just own/copy it now. - let vector = Rc::unwrap_or_clone(self.vector).into_inner(); - - // Verify that they're all of the right type. - for (index, item) in vector.iter().enumerate() { - if item.enum_downcast_ref::().is_none() { - return Err(Failure::ListElement( - span.clone(), - index, - Box::new(Failure::ExpectedGot( - span.clone(), - T::static_type_name().into(), - item.type_name(), - )), - )); - } - } - - // Okay, we've validated them. Now we can really take them. - // The unwraps will not fail because we've already validated the types. - let iter = vector.into_iter().map(|v| v.enum_downcast::().unwrap()); - Ok(iter) - } - - pub fn unpack_fixed_length( - self, - span: &S, - ) -> OperatorResult> - where - T: NamedObject, - Value: IntoVariant + AsVariant + TryInto, - { - let length = self.vector.try_borrow().unwrap_borrow_failure(span)?.len(); - if length == D { - // This cannot exceed length D because we already validated that the list matched that length. - self.unpack_dynamic_length(span) - } else { - Err(Failure::ListWrongLength(span.clone(), D, length)) - } - } -} - -#[cfg(test)] -mod test { - use super::*; - - use crate::script::{ - execution::{expressions::run_expression, ExecutionContext}, - parsing::Expression, - Runtime, Scalar, - }; - - #[test] - fn index() { - let mut runtime = Runtime::default(); - ExecutionContext::create(&mut runtime, |context| { - assert_eq!( - run_expression(context, &Expression::parse("[1, 2, 3][0]").unwrap().1), - Ok(Float::new(1.0).unwrap().into()) - ); - - assert_eq!( - run_expression(context, &Expression::parse("[1, 2, 3][-1]").unwrap().1), - Ok(Float::new(3.0).unwrap().into()) - ); - - assert_eq!( - run_expression(context, &Expression::parse("[1, 2, 3][3]").unwrap().1), - Err(Failure::IndexOutOfRange("[", 3)) - ); - assert_eq!( - run_expression(context, &Expression::parse("[1, 2, 3][-4]").unwrap().1), - Err(Failure::IndexOutOfRange("[", -4)) - ); - }); - } - - #[test] - fn test_unpack() { - assert_eq!( - List::<&'static str>::from([ - Float::new(1.0).unwrap().into(), - Float::new(2.0).unwrap().into(), - Float::new(3.0).unwrap().into(), - ]) - .unpack_fixed_length::(&"span",) - .map(|v| v.collect::>()), - Ok(vec![ - Float::new(1.0).unwrap().into(), - Float::new(2.0).unwrap().into(), - Float::new(3.0).unwrap().into(), - ]) - ); - - let values = [ - Float::new(1.0).unwrap().into(), - Float::new(2.0).unwrap().into(), - ]; - - assert_eq!( - List::<&'static str>::from(values) - .unpack_fixed_length::(&"span",) - .map(|v| v.collect::>()), - Err(Failure::ListWrongLength("span", 3, 2)) - ); - - let values = [Float::new(1.0).unwrap().into(), true.into()]; - - assert_eq!( - List::<&'static str>::from(values) - .unpack_fixed_length::(&"span") - .map(|v| v.collect::>()), - Err(Failure::ListElement( - "span", - 1, - Box::new(Failure::ExpectedGot( - "span", - "Scalar".into(), - "Boolean".into() - )) - )) - ); - } -} diff --git a/src/script/execution/types/math/mod.rs b/src/script/execution/types/math/mod.rs deleted file mode 100644 index 88fea51..0000000 --- a/src/script/execution/types/math/mod.rs +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::{borrow::Cow, io}; - -use common_data_types::{ - BaseUnits, ConversionFactor, ConversionFactorDatabase, Dimension, DimensionNameDatabase, Float, - RatioTypeHint, RawFloat, UnitDescription, UnitList, -}; -use nalgebra::{DefaultAllocator, DimName}; - -use crate::script::{ - execution::{ExecutionContext, Failure}, - Span, -}; - -mod scalar; -pub use scalar::{Angle, Length, Number, Scalar}; - -mod vector; -use self::vector::Vector; -pub use vector::{LengthVector2, LengthVector3, Vector2, Vector3, Vector4}; - -mod transform; -pub use transform::{Transform2D, Transform3D}; - -mod quaternion; -pub use quaternion::Quaternion; - -use super::OperatorResult; - -lazy_static::lazy_static! { - static ref CONVERSION_FACTORS: ConversionFactorDatabase = include!(concat!(env!("OUT_DIR"), "/conversion_factors.rs")); - static ref DIMENSION_NAMES: DimensionNameDatabase = include!(concat!(env!("OUT_DIR"), "/dimension_names.rs")); - static ref UNIT_LIST: UnitList = include!(concat!(env!("OUT_DIR"), "/unit_list.rs")); - static ref BASE_UNITS: BaseUnits = include!(concat!(env!("OUT_DIR"), "/base_units.rs")); -} - -pub fn register_globals(context: &mut ExecutionContext) { - // TODO this would be a good point call into scalar and create some global constants. - vector::register_globals(context); - transform::register_globals(context); - quaternion::register_globals(context); -} - -trait CheckNan { - fn check_nan(self, span: &S) -> OperatorResult; -} - -impl< - R: nalgebra::base::Dim, - C: nalgebra::base::Dim, - S: nalgebra::base::storage::RawStorage, - > CheckNan for nalgebra::Matrix -{ - fn check_nan(self, span: &SP) -> OperatorResult { - if !self.iter().any(|c| c.is_nan()) { - Ok(()) - } else { - Err(Failure::ResultIsNan(span.clone())) - } - } -} - -fn format_dimension(dimension: &Dimension) -> Cow<'static, str> { - format!( - "Scalar", - dimension.length, - dimension.mass, - dimension.time, - dimension.electric_current, - dimension.thermodynamic_temprature, - dimension.amount_of_substance, - dimension.luminous_intensity - ) - .into() -} - -fn get_dimension_name(dimension: &Dimension) -> Cow<'static, str> { - if let Some(name) = DIMENSION_NAMES.get(dimension) { - name.clone() - } else { - format_dimension(dimension) - } -} - -pub trait ConvertUnit { - fn convert_to_base_unit(&self, input: Float) -> Float; - fn convert_from_base_unit(&self, input: Float) -> Float; - fn convert_from_measurement_to_number( - &self, - span: &S, - measurement: &Scalar, - ) -> OperatorResult; - fn convert_from_vector_to_iter( - &self, - span: &S, - vector: &Vector, - ) -> OperatorResult> - where - DefaultAllocator: nalgebra::allocator::Allocator; - fn convert_from_vector_to_iter_without_dimension_check( - &self, - vector: &vector::NVector, - ) -> impl Iterator - where - DefaultAllocator: nalgebra::allocator::Allocator; -} - -impl ConvertUnit for ConversionFactor { - fn convert_to_base_unit(&self, input: Float) -> Float { - input * self.coefficient + self.constant - } - - fn convert_from_base_unit(&self, input: Float) -> Float { - (input - self.constant) / self.coefficient - } - - fn convert_from_measurement_to_number( - &self, - span: &S, - measurement: &Scalar, - ) -> OperatorResult { - if measurement.dimension == self.dimension { - Ok(self.convert_from_base_unit(measurement.value)) - } else { - Err(Failure::ExpectedGot( - span.clone(), - get_dimension_name(&self.dimension), - get_dimension_name(&measurement.dimension), - )) - } - } - - fn convert_from_vector_to_iter_without_dimension_check( - &self, - vector: &vector::NVector, - ) -> impl Iterator - where - DefaultAllocator: nalgebra::allocator::Allocator, - { - vector - .iter() - .copied() - .map(|c| self.convert_from_base_unit(Float::new(c).unwrap())) - } - - fn convert_from_vector_to_iter( - &self, - span: &S, - vector: &Vector, - ) -> OperatorResult> - where - DefaultAllocator: nalgebra::allocator::Allocator, - { - if vector.dimension == self.dimension { - Ok(vector - .value - .iter() - .copied() - .map(|c| self.convert_from_base_unit(Float::new(c).unwrap()))) - } else { - Err(Failure::ExpectedGot( - span.clone(), - get_dimension_name(&self.dimension), - get_dimension_name(&vector.dimension), - )) - } - } -} - -pub fn print_all_supported_units( - f: &mut dyn io::Write, - filter: Option<&str>, -) -> std::result::Result<(), io::Error> { - for (dimension, units) in UNIT_LIST.iter() { - let units = units.iter().filter(|unit| { - if let Some(filter) = filter { - unit.name.contains(filter) || unit.abbreviation.contains(filter) - } else { - true - } - }); - - let name = "Name"; - let abbreviation = "Abbreviation"; - let keyboard_friendly_abbreviation = "Keyboard Friendly Abbreviation"; - let plural_name = "Plural Name"; - - let mut name_length = name.len(); - let mut abbreviation_length = abbreviation.len(); - let mut keyboard_friendly_abbreviation_length = keyboard_friendly_abbreviation.len(); - let mut plural_name_length = plural_name.len(); - - let mut contained_any = false; - - for unit in units.clone() { - contained_any = true; - - name_length = name_length.max(unit.name.len()); - abbreviation_length = abbreviation_length.max(unit.abbreviation.len()); - keyboard_friendly_abbreviation_length = keyboard_friendly_abbreviation_length - .max(unit.keyboard_friendly_abbreviation.len()); - plural_name_length = plural_name_length.max(unit.plural_name.len()); - } - - if contained_any { - writeln!(f, "{}:\n", dimension)?; - let header = format!( - "[{:", unit.keyboard_friendly_abbreviation)) - }; - - writeln!( - f, - " {:. - */ - -use std::borrow::Cow; - -use common_data_types::{Dimension, RawFloat}; -use nalgebra::Unit; - -use crate::script::{ - execution::{ - types::{function::IntoBuiltinFunction, NamedObject, Object, OperatorResult, Value}, - ExecutionContext, - }, - logging::RuntimeLog, - parsing::VariableType, - Span, -}; - -use super::{Angle, Vector3}; - -pub type Quaternion = nalgebra::UnitQuaternion; - -pub fn register_globals(context: &mut ExecutionContext) { - context.stack.new_variable_str( - "new_quaternion", - |_context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(Quaternion::identity().into()) - } - .into_builtin_function() - .into(), - ); - - context.stack.new_variable_str( - "vector_to_quaternion", - |_context: &mut ExecutionContext, - span: &S, - axis: Vector3| - -> OperatorResult> { - axis.check_dimension(span, Dimension::zero())?; - Ok(Quaternion::new(axis.value).into()) - } - .into_builtin_function() - .into(), - ); - - context.stack.new_variable_str( - "axis_quaternion", - |_context: &mut ExecutionContext, - span: &S, - axis: Vector3, - angle: Angle| - -> OperatorResult> { - axis.check_dimension(span, Dimension::zero())?; - - let angle = angle.value; - - Ok(Quaternion::from_axis_angle(&Unit::new_normalize(axis.value), *angle).into()) - } - .into_builtin_function() - .into(), - ); -} - -impl Object for Quaternion -where - S: Span, -{ - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::Quaternion)) - } - - fn type_name(&self) -> Cow<'static, str> { - Self::static_type_name().into() - } - - fn addition( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let rhs = rhs.downcast_ref::(span)?; - - Ok(Quaternion::new_normalize(self.into_inner() * rhs.into_inner()).into()) - } - fn subtraction( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let rhs = rhs.downcast_ref::(span)?; - - Ok(Quaternion::new_normalize(self.into_inner() * rhs.inverse().into_inner()).into()) - } -} - -impl NamedObject for Quaternion { - fn static_type_name() -> &'static str { - "Quaternion" - } -} - -#[cfg(test)] -mod test { - use nalgebra::Const; - - use crate::script::{ - execution::{ - expressions::run_expression, - types::math::vector::{NVector, Vector}, - }, - parsing::Expression, - Runtime, - }; - - use super::*; - - #[test] - fn rotate() { - ExecutionContext::create(&mut Runtime::default(), |context| { - let result = run_expression( - context, - & - Expression::parse( - "(new_transform3D() * axis_quaternion(vec3(0, 0, 1), 90deg)).apply_to_vector(vec3(1m, 0m, 0m))", - ) - .unwrap() - .1, - ) - .unwrap(); - let vector = result.downcast::>>(&"").unwrap(); - - assert!((vector.value - NVector::>::new(0.0, 1.0, 0.0)).norm() < 0.01); - }); - } - - #[test] - fn addition() { - ExecutionContext::create(&mut Runtime::default(), |context| { - let result = run_expression( - context, - &Expression::parse( - "(new_transform3D() * (axis_quaternion(vec3(0, 0, 1), 45deg) + axis_quaternion(vec3(0, 0, 1), 45deg))).apply_to_vector(vec3(1m, 0m, 0m))", - ) - .unwrap() - .1, - ) - .unwrap(); - let vector = result.downcast::>>(&"").unwrap(); - - assert!((vector.value - NVector::>::new(0.0, 1.0, 0.0)).norm() < 0.01); - }); - } - - #[test] - fn subtraction() { - ExecutionContext::create(&mut Runtime::default(), |context| { - let result = run_expression( - context, - &Expression::parse( - "(new_transform3D() * (axis_quaternion(vec3(0, 0, 1), 45deg) - axis_quaternion(vec3(0, 0, 1), 45deg))).apply_to_vector(vec3(1m, 0m, 0m))", - ) - .unwrap() - .1, - ) - .unwrap(); - let vector = result.downcast::>>(&"").unwrap(); - - assert!((vector.value - NVector::>::new(1.0, 0.0, 0.0)).norm() < 0.01); - }); - } -} diff --git a/src/script/execution/types/math/scalar.rs b/src/script/execution/types/math/scalar.rs deleted file mode 100644 index 5de37ff..0000000 --- a/src/script/execution/types/math/scalar.rs +++ /dev/null @@ -1,1275 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use std::{borrow::Cow, cmp::Ordering, fmt, str::FromStr}; - -use enum_downcast::EnumDowncast; -use fj_math::Scalar as FornjotScalar; -use imstr::ImString; -use nalgebra::Const; -use serde::{ - de::{self, Visitor}, - Deserialize, Serialize, -}; -use uom::{ - si::{Dimension as UomDimension, Quantity, Units}, - typenum::ToInt, -}; - -use common_data_types::{consts, ConversionFactor, Dimension, Float, RatioTypeHint, RawFloat}; - -use crate::script::{ - execution::{ - types::{ - function::AutoCall, - number::{unwrap_float, UnwrapNotNan}, - NamedObject, Object, OperatorResult, SString, SerializableValue, Style, TypedObject, - UnwrapFormattingResult, Value, - }, - ExecutionContext, Failure, - }, - logging::{LogMessage, RuntimeLog}, - parsing::{self, Expression, VariableType}, - Span, -}; - -use super::{ - format_dimension, get_dimension_name, vector::NVector, ConvertUnit, Vector2, BASE_UNITS, - CONVERSION_FACTORS, -}; - -macro_rules! define_fixed_dimension_scalar { - ($name:ident, $dimension:expr) => { - #[derive(Debug, Clone, Copy, Eq, PartialEq)] - pub struct $name { - pub value: Float, - } - - impl From<$name> for Scalar { - fn from(value: $name) -> Scalar { - Scalar { - dimension: $dimension, - value: value.value, - } - } - } - - impl From<$name> for Value { - fn from(value: $name) -> Value { - Value::from(Scalar::from(value)) - } - } - - impl TryFrom> for $name { - type Error = (); - - fn try_from(value: Value) -> Result { - let scalar: Scalar = value.enum_downcast().map_err(|_| ())?; - Self::try_from(scalar).map_err(|_| ()) - } - } - - impl TryFrom for $name { - type Error = Scalar; - - fn try_from(value: Scalar) -> Result { - if value.dimension == $dimension { - Ok(Self { value: value.value }) - } else { - Err(value) - } - } - } - - impl<'a> TryFrom<&'a Scalar> for $name { - type Error = &'a Scalar; - - fn try_from(value: &'a Scalar) -> Result { - if value.dimension == $dimension { - Ok(Self { value: value.value }) - } else { - Err(value) - } - } - } - - impl TypedObject for $name { - fn get_type() -> VariableType { - VariableType::Scalar(S::from_str(stringify!($name))) - } - } - - impl NamedObject for $name { - fn static_type_name() -> &'static str { - "Scalar" - } - } - }; -} - -define_fixed_dimension_scalar!(Length, Dimension::length()); - -impl Length { - pub fn as_fornjot_scale_float(&self, context: &ExecutionContext) -> Float { - context - .global_resources - .fornjot_unit_conversion_factor - .convert_from_base_unit(self.value) - } - - pub fn as_fornjot_scalar(&self, context: &ExecutionContext) -> FornjotScalar { - FornjotScalar::from_f64(self.as_fornjot_scale_float(context).into_inner()) - } -} - -define_fixed_dimension_scalar!(Angle, Dimension::angle()); -define_fixed_dimension_scalar!(Number, Dimension::zero()); - -impl Number { - pub fn to_index(self) -> isize { - self.value.round() as isize - } -} - -impl From for Number { - fn from(value: Float) -> Self { - Self { value } - } -} - -#[derive(Debug, Clone, PartialEq)] -pub struct Scalar { - pub(super) dimension: Dimension, - pub(super) value: Float, -} - -impl Object for Scalar { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(if let VariableType::Scalar(name) = ty { - name.as_str() == Object::::type_name(self).as_ref() - } else { - false - }) - } - - fn type_name(&self) -> Cow<'static, str> { - get_dimension_name(&self.dimension) - } - - fn format( - &self, - log: &mut dyn RuntimeLog, - span: &S, - f: &mut dyn fmt::Write, - style: Style, - precision: Option, - ) -> OperatorResult { - // This just takes a reference to the unit name, so it's pretty cheap. I don't mind if it's not always used. - // In the rare case that a unit name is generated and memory is allocated on the heap, well we're clearly - // not about to format a number, so it's clear that we're going to use this. - let unit_name = BASE_UNITS - .get(&self.dimension) - .cloned() - .unwrap_or_else(|| format_dimension(&self.dimension)); - - match (style, precision, self.is_number()) { - (Style::Default, None, true) => { - write!(f, "{}", self.value).unwrap_formatting_result(span) - } - (Style::Default, None, false) => { - write!(f, "{} {unit_name}", self.value).unwrap_formatting_result(span) - } - (Style::Default, Some(precision), true) => { - write!(f, "{:.1$}", self.value, precision as usize).unwrap_formatting_result(span) - } - (Style::Default, Some(precision), false) => { - write!(f, "{:.1$} {unit_name}", self.value, precision as usize) - .unwrap_formatting_result(span) - } - (Style::Debug, None, true) => { - write!(f, "{}", self.value).unwrap_formatting_result(span) - } - (Style::Debug, None, false) => { - write!(f, "{} {unit_name}", self.value).unwrap_formatting_result(span) - } - (Style::Debug, Some(precision), true) => { - write!(f, "{:.1$}", self.value, precision as usize).unwrap_formatting_result(span) - } - (Style::Debug, Some(precision), false) => { - write!(f, "{:.1$} {unit_name}", self.value, precision as usize) - .unwrap_formatting_result(span) - } - (Style::Octal, _, true) => { - if precision.is_some() { - log.push(LogMessage::FormatIntegerPrecision(span.clone())); - } - write!(f, "{:o}", self.value.into_inner() as usize).unwrap_formatting_result(span) - } - (Style::Octal, _, false) => { - if precision.is_some() { - log.push(LogMessage::FormatIntegerPrecision(span.clone())); - } - write!(f, "{:o} {unit_name}", self.value.into_inner() as usize) - .unwrap_formatting_result(span) - } - (Style::Hex, _, true) => { - if precision.is_some() { - log.push(LogMessage::FormatIntegerPrecision(span.clone())); - } - write!(f, "{:x}", self.value.into_inner() as usize).unwrap_formatting_result(span) - } - (Style::Hex, _, false) => { - if precision.is_some() { - log.push(LogMessage::FormatIntegerPrecision(span.clone())); - } - write!(f, "{:x} {unit_name}", self.value.into_inner() as usize) - .unwrap_formatting_result(span) - } - (Style::CapitalizedHex, _, true) => { - if precision.is_some() { - log.push(LogMessage::FormatIntegerPrecision(span.clone())); - } - write!(f, "{:X}", self.value.into_inner() as usize).unwrap_formatting_result(span) - } - (Style::CapitalizedHex, _, false) => { - if precision.is_some() { - log.push(LogMessage::FormatIntegerPrecision(span.clone())); - } - write!(f, "{:X} {unit_name}", self.value.into_inner() as usize) - .unwrap_formatting_result(span) - } - (Style::Exponent, None, true) => { - write!(f, "{:e}", self.value.into_inner() as usize).unwrap_formatting_result(span) - } - (Style::Exponent, None, false) => { - write!(f, "{:e} {unit_name}", self.value.into_inner() as usize) - .unwrap_formatting_result(span) - } - (Style::Exponent, Some(precision), true) => { - write!(f, "{:.1$e}", self.value.into_inner(), precision as usize) - .unwrap_formatting_result(span) - } - (Style::Exponent, Some(precision), false) => write!( - f, - "{:.1$e} {unit_name}", - self.value.into_inner(), - precision as usize - ) - .unwrap_formatting_result(span), - (Style::CapitalizedExponent, None, true) => { - write!(f, "{:E}", self.value.into_inner()).unwrap_formatting_result(span) - } - (Style::CapitalizedExponent, None, false) => { - write!(f, "{:E} {unit_name}", self.value.into_inner()) - .unwrap_formatting_result(span) - } - (Style::CapitalizedExponent, Some(precision), true) => { - write!(f, "{:.1$E}", self.value.into_inner(), precision as usize) - .unwrap_formatting_result(span) - } - (Style::CapitalizedExponent, Some(precision), false) => write!( - f, - "{:.1$E} {unit_name}", - self.value.into_inner(), - precision as usize - ) - .unwrap_formatting_result(span), - } - } - - fn addition( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let rhs = self.unpack_for_addition_or_subtraction(span, rhs)?; - - let value = Float::new(*self.value + *rhs.value).unwrap_not_nan(span)?; - - Ok(Self { - value, - ..self.clone() - } - .into()) - } - fn subtraction( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let rhs = self.unpack_for_addition_or_subtraction(span, rhs)?; - - let value = Float::new(*self.value - *rhs.value).unwrap_not_nan(span)?; - - Ok(Self { - value, - ..self.clone() - } - .into()) - } - fn multiply( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let rhs = rhs.downcast_ref::(span)?; - self.multiply_by_scalar(span, rhs).map(|rhs| rhs.into()) - } - fn divide( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let rhs = rhs.downcast_ref::(span)?; - self.divide_by_measurement(span, rhs).map(|rhs| rhs.into()) - } - fn unary_plus(&self, _log: &mut dyn RuntimeLog, _span: &S) -> OperatorResult> { - Ok(self.clone().into()) - } - fn unary_minus(&self, _log: &mut dyn RuntimeLog, _span: &S) -> OperatorResult> { - Ok(Self { - value: -self.value, - ..self.clone() - } - .into()) - } - fn cmp( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult { - let rhs = rhs.downcast_ref::(span)?; - if self.dimension == rhs.dimension { - Ok(std::cmp::Ord::cmp(&self.value, &rhs.value)) - } else { - Err(Failure::ExpectedGot( - span.clone(), - Object::::type_name(self), - Object::::type_name(rhs), - )) - } - } - fn method_call( - &self, - context: &mut ExecutionContext, - span: &S, - attribute: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult> { - match attribute.as_str() { - "to_number" => |_context: &mut ExecutionContext, - span: &S, - ty: SString| - -> OperatorResult> { - self.convert_to_number(span, &ty.as_str(span)?) - } - .auto_call(context, span, arguments, expressions), - "abs" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - Ok(Self { - value: Float::new(self.value.abs()).unwrap_not_nan(span)?, - ..self.clone() - } - .into()) - } - .auto_call(context, span, arguments, expressions) - } - "clamp" => |_context: &mut ExecutionContext, - span: &S, - min: Value, - max: Value| - -> OperatorResult> { - let min = self.unpack_for_addition_or_subtraction(span, &min)?; - let max = self.unpack_for_addition_or_subtraction(span, &max)?; - - Ok(Self { - value: self.value.clamp(min.value, max.value), - ..self.clone() - } - .into()) - } - .auto_call(context, span, arguments, expressions), - "copysign" => |_context: &mut ExecutionContext, - span: &S, - sign: Number| - -> OperatorResult> { - let sign = sign.to_index(); - - Ok(Self { - value: Float::new(self.value.copysign(sign as RawFloat)) - .unwrap_not_nan(span)?, - ..self.clone() - } - .into()) - } - .auto_call(context, span, arguments, expressions), - "hypot" => |_context: &mut ExecutionContext, - span: &S, - other: Value| - -> OperatorResult> { - let other = self.unpack_for_addition_or_subtraction(span, &other)?; - - Ok(Self { - value: Float::new(self.value.hypot(*other.value)).unwrap_not_nan(span)?, - ..self.clone() - } - .into()) - } - .auto_call(context, span, arguments, expressions), - "is_finite" => { - |_context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(self.value.is_finite().into()) - } - .auto_call(context, span, arguments, expressions) - } - "is_infinite" => { - |_context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(self.value.is_infinite().into()) - } - .auto_call(context, span, arguments, expressions) - } - "is_normal" => { - |_context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(self.value.is_normal().into()) - } - .auto_call(context, span, arguments, expressions) - } - "cbrt" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - Ok(Self { - dimension: self.dimension / 3, - value: Float::new(self.value.cbrt()).unwrap_not_nan(span)?, - } - .into()) - } - .auto_call(context, span, arguments, expressions) - } - "pow" => |_context: &mut ExecutionContext, - _span: &S, - exponent: Scalar| - -> OperatorResult> { - let exponent = exponent.to_number(span)?; - - self.check_is_zero_dimension(span)?; - - Ok(Self { - dimension: self.dimension, - value: Float::new(self.value.powf(exponent.into_inner())) - .unwrap_not_nan(span)?, - } - .into()) - } - .auto_call(context, span, arguments, expressions), - "powi" => |_context: &mut ExecutionContext, - _span: &S, - exponent: Number| - -> OperatorResult> { - let exponent = exponent.to_index() as i8; - - Ok(Self { - dimension: self.dimension * exponent, - value: Float::new(self.value.powi(exponent as i32)).unwrap_not_nan(span)?, - } - .into()) - } - .auto_call(context, span, arguments, expressions), - "sqrt" => { - |_context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(Self { - dimension: self.dimension / 2, - value: Float::new(self.value.sqrt()).unwrap_not_nan(span)?, - } - .into()) - } - .auto_call(context, span, arguments, expressions) - } - "is_sign_negative" => { - |_context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(self.value.is_sign_negative().into()) - } - .auto_call(context, span, arguments, expressions) - } - "is_sign_positive" => { - |_context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(self.value.is_sign_positive().into()) - } - .auto_call(context, span, arguments, expressions) - } - "recip" => { - |_context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(Self { - dimension: -self.dimension, - value: Float::new(1.0 / self.value.into_inner()).unwrap_not_nan(span)?, - } - .into()) - } - .auto_call(context, span, arguments, expressions) - } - "round" => |_context: &mut ExecutionContext, - span: &S, - unit: Value| - -> OperatorResult> { - let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; - - let value = conversion_factor.convert_from_measurement_to_number(span, self)?; - let value = Float::new(value.round()).unwrap_not_nan(span)?; - - Ok(Self { - dimension: self.dimension, - value: conversion_factor.convert_to_base_unit(value), - } - .into()) - } - .auto_call_optional(context, span, arguments, expressions), - "trunc" => |_context: &mut ExecutionContext, - span: &S, - unit: Value| - -> OperatorResult> { - let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; - - let value = conversion_factor.convert_from_measurement_to_number(span, self)?; - let value = Float::new(value.trunc()).unwrap_not_nan(span)?; - - Ok(Self { - dimension: self.dimension, - value: conversion_factor.convert_to_base_unit(value), - } - .into()) - } - .auto_call_optional(context, span, arguments, expressions), - "fract" => |_context: &mut ExecutionContext, - span: &S, - unit: Value| - -> OperatorResult> { - let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; - - let value = conversion_factor.convert_from_measurement_to_number(span, self)?; - let value = Float::new(value.fract()).unwrap_not_nan(span)?; - - Ok(Self { - dimension: self.dimension, - value: conversion_factor.convert_to_base_unit(value), - } - .into()) - } - .auto_call_optional(context, span, arguments, expressions), - "floor" => |_context: &mut ExecutionContext, - span: &S, - unit: Value| - -> OperatorResult> { - let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; - - let value = conversion_factor.convert_from_measurement_to_number(span, self)?; - let value = Float::new(value.floor()).unwrap_not_nan(span)?; - - Ok(Self { - dimension: self.dimension, - value: conversion_factor.convert_to_base_unit(value), - } - .into()) - } - .auto_call_optional(context, span, arguments, expressions), - "ceil" => |_context: &mut ExecutionContext, - span: &S, - unit: Value| - -> OperatorResult> { - let conversion_factor = Self::get_operation_conversion_factor(span, unit)?; - - let value = conversion_factor.convert_from_measurement_to_number(span, self)?; - let value = Float::new(value.ceil()).unwrap_not_nan(span)?; - - Ok(Self { - dimension: self.dimension, - value: conversion_factor.convert_to_base_unit(value), - } - .into()) - } - .auto_call_optional(context, span, arguments, expressions), - "max" => |_context: &mut ExecutionContext, - _span: &S, - other: Value| - -> OperatorResult> { - let other = self.unpack_for_addition_or_subtraction(span, &other)?; - Ok(Float::new(*self.value.max(other.value)) - .unwrap_not_nan(span)? - .into()) - } - .auto_call(context, span, arguments, expressions), - "min" => |_context: &mut ExecutionContext, - _span: &S, - other: Value| - -> OperatorResult> { - let other = self.unpack_for_addition_or_subtraction(span, &other)?; - Ok(Float::new(*self.value.min(other.value)) - .unwrap_not_nan(span)? - .into()) - } - .auto_call(context, span, arguments, expressions), - "mul_add" => |context: &mut ExecutionContext, - span: &S, - a: Value, - b: Value| - -> OperatorResult> { - let multiply_result = self.multiply(context.log, span, &b)?; - let add_result = multiply_result.addition(context.log, span, &a)?; - - Ok(add_result) - } - .auto_call(context, span, arguments, expressions), - "signum" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - Float::new(self.value.signum()) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - "acos" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - self.check_inverse_trig_compatible(span)?; - Float::new((self.value * consts::PI).acos()) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - "acosh" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - self.check_inverse_trig_compatible(span)?; - Float::new((self.value * consts::PI).acosh()) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - "asin" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - self.check_inverse_trig_compatible(span)?; - Float::new((self.value * consts::PI).asin()) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - "asinh" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - self.check_inverse_trig_compatible(span)?; - Float::new((self.value * consts::PI).asinh()) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - "atan" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - self.check_inverse_trig_compatible(span)?; - Float::new((self.value * consts::PI).atan()) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - "atanh" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - self.check_inverse_trig_compatible(span)?; - Float::new((self.value * consts::PI).atanh()) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - "cos" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - self.check_trig_compatible(span)?; - Float::new((self.value * consts::PI).cos()) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - "cosh" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - self.check_trig_compatible(span)?; - Float::new((self.value * consts::PI).cosh()) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - "sin" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - self.check_trig_compatible(span)?; - Float::new((self.value * consts::PI).sin()) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - "sin_cos" => { - |_context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - self.check_trig_compatible(span)?; - let (sin, cos) = (self.value * consts::PI).sin_cos(); - - Ok(Vector2 { - dimension: Dimension::zero(), - value: NVector::>::new(cos, sin), - } - .into()) - } - .auto_call(context, span, arguments, expressions) - } - "sinh" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - self.check_trig_compatible(span)?; - Float::new((self.value * consts::PI).sinh()) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - "tan" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - self.check_trig_compatible(span)?; - Float::new((self.value * consts::PI).tan()) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - "tanh" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - self.check_trig_compatible(span)?; - Float::new((self.value * consts::PI).tanh()) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - // TODO we need functions to convert zero dimensional types to: Angles, Constitute Concentration, Information, Solid Angle, and Temperature. - _ => Err(Failure::UnknownAttribute(attribute.clone())), - } - } - - fn export( - &self, - _log: &mut dyn RuntimeLog, - _span: &S, - ) -> OperatorResult { - Ok(SerializableValue::Scalar(self.clone())) - } -} - -impl NamedObject for Scalar { - fn static_type_name() -> &'static str { - "Scalar" - } -} - -impl Scalar { - fn multiply_by_scalar(&self, span: &S, rhs: &Self) -> OperatorResult { - let value = Float::new(*self.value * *rhs.value).unwrap_not_nan(span)?; - let dimension = self.dimension + rhs.dimension; - - Ok(Self { dimension, value }) - } - - fn divide_by_measurement(&self, span: &S, rhs: &Self) -> OperatorResult { - let value = Float::new(*self.value / *rhs.value).unwrap_not_nan(span)?; - let dimension = self.dimension - rhs.dimension; - - Ok(Self { dimension, value }) - } - - fn check_is_zero_dimension(&self, span: &S) -> OperatorResult { - if self.dimension.is_zero_dimension() { - Ok(()) - } else { - Err(Failure::ExpectedZeroDimension(span.clone())) - } - } - - fn check_inverse_trig_compatible(&self, span: &S) -> OperatorResult { - if self.dimension.is_zero_dimension() { - Ok(()) - } else { - Err(Failure::InverseTrigIncompatible(span.clone())) - } - } - - fn check_trig_compatible(&self, span: &S) -> OperatorResult { - if self.dimension.is_zero_dimension() && self.dimension.ratio_type_hint.is_angle() { - Ok(()) - } else { - Err(Failure::TrigIncompatible(span.clone())) - } - } - - fn is_number(&self) -> bool { - self.dimension.is_zero_dimension() && self.dimension.ratio_type_hint.0 == 0 - } - - fn unpack_for_addition_or_subtraction<'b, S: Span>( - &'b self, - span: &S, - rhs: &'b Value, - ) -> OperatorResult { - if let Value::Scalar(rhs) = rhs { - if self.dimension == rhs.dimension { - Ok(rhs) - } else { - Err(Failure::ExpectedGot( - span.clone(), - >::type_name(self), - >::type_name(rhs), - )) - } - } else { - Err(Failure::ExpectedGot( - span.clone(), - >::type_name(self), - rhs.type_name(), - )) - } - } - - // pub fn convert_from_number( - // span: &S, - // value: Number, - // ty: SString, - // ) -> OperatorResult> { - // if let Some(conversion_factor) = CONVERSION_FACTORS.get(ty.as_str()) { - // let value = conversion_factor.convert_to_base_unit(value); - // let dimension = conversion_factor.dimension; - - // Ok(Self { dimension, value }.into()) - // } else { - // Err(Failure::UnknownUnitType( - // span.clone(), - // ty.into_string().into(), - // )) - // } - // } - - pub fn convert_to_number(&self, span: &S, ty: &str) -> OperatorResult> { - if let Some(conversion_factor) = CONVERSION_FACTORS.get(ty) { - if self.dimension == conversion_factor.dimension { - Ok(conversion_factor.convert_from_base_unit(self.value).into()) - } else { - Err(Failure::DimensionalMissmatch( - span.clone(), - Object::::type_name(self), - ty.to_string().into(), - )) - } - } else { - Err(Failure::UnknownUnitType( - span.clone(), - ty.to_string().into(), - )) - } - } - - pub fn to_number(&self, span: &S) -> OperatorResult { - self.check_is_zero_dimension(span)?; - if self.dimension.ratio_type_hint.0 == 0 { - // It's just a number/ratio, we can use that. - Ok(self.value) - } else { - Err(Failure::ExpectedGot( - span.clone(), - "Number".into(), - Object::::type_name(self), - )) - } - } - - pub fn from_number(value: Float) -> Self { - let dimension = Dimension { - length: 0, - mass: 0, - time: 0, - electric_current: 0, - thermodynamic_temprature: 0, - amount_of_substance: 0, - luminous_intensity: 0, - ratio_type_hint: RatioTypeHint(0), - }; - - Self { dimension, value } - } - - pub fn from_parsed_raw(measurement: &parsing::Scalar) -> OperatorResult { - if let Some(conversion_factor) = CONVERSION_FACTORS.get(measurement.ty.as_str()) { - let value = unwrap_float(measurement.number.get_span().clone(), &measurement.number)?; - let value = conversion_factor.convert_to_base_unit(value); - - let dimension = conversion_factor.dimension; - - Ok(Self { dimension, value }) - } else { - Err(Failure::UnknownUnitType( - measurement.ty.clone(), - measurement.ty.to_string().into(), - )) - } - } - - pub fn from_parsed(measurement: &parsing::Scalar) -> OperatorResult> { - Self::from_parsed_raw(measurement).map(|measurement| measurement.into()) - } - - pub fn get_conversion_factor( - keyboard_friendly_abbreviation: &str, - ) -> Option<&'static ConversionFactor> { - CONVERSION_FACTORS.get(keyboard_friendly_abbreviation) - } - - fn get_operation_conversion_factor( - span: &S, - unit: Value, - ) -> OperatorResult { - let unit_specification = unit - .downcast_optional::(span)? - .map(|s| s.to_string(span)); - - Ok(match unit_specification { - Some(unit_specification) => { - let unit_specification = unit_specification?; - Self::get_conversion_factor(unit_specification.as_ref()).ok_or( - Failure::UnknownUnitType(span.clone(), unit_specification.into()), - )? - } - None => Self::get_conversion_factor("").unwrap(), - }) - } -} - -impl TryFrom> for Scalar -where - D: UomDimension + ?Sized, - D::L: ToInt, - D::M: ToInt, - D::T: ToInt, - D::I: ToInt, - D::Th: ToInt, - D::N: ToInt, - D::J: ToInt, - U: Units + ?Sized, -{ - type Error = common_data_types::FloatIsNan; - - fn try_from(value: Quantity) -> std::result::Result { - // Due to language limitations in Rust, we are incapable of getting ratio type hints. - // https://stackoverflow.com/questions/30274091/is-it-possible-to-check-if-an-object-implements-a-trait-at-runtime - - let length = D::L::INT; - let mass = D::M::INT; - let time = D::T::INT; - let electric_current = D::I::INT; - let thermodynamic_temprature = D::Th::INT; - let amount_of_substance = D::N::INT; - let luminous_intensity = D::J::INT; - - let dimension = Dimension { - length, - mass, - time, - electric_current, - thermodynamic_temprature, - amount_of_substance, - luminous_intensity, - ratio_type_hint: RatioTypeHint::default(), - }; - - let value = Float::new(value.value)?; - - Ok(Self { dimension, value }) - } -} - -impl TryInto> for Scalar -where - D: UomDimension + ?Sized, - D::L: ToInt, - D::M: ToInt, - D::T: ToInt, - D::I: ToInt, - D::Th: ToInt, - D::N: ToInt, - D::J: ToInt, - U: Units + ?Sized, -{ - type Error = (); - - fn try_into(self) -> std::result::Result, Self::Error> { - // Due to language limitations in Rust, we are incapable of getting ratio type hints. - // https://stackoverflow.com/questions/30274091/is-it-possible-to-check-if-an-object-implements-a-trait-at-runtime - - if D::L::INT == self.dimension.length - && D::M::INT == self.dimension.mass - && D::T::INT == self.dimension.time - && D::I::INT == self.dimension.electric_current - && D::Th::INT == self.dimension.thermodynamic_temprature - && D::N::INT == self.dimension.amount_of_substance - && D::J::INT == self.dimension.luminous_intensity - { - Ok(Quantity { - dimension: std::marker::PhantomData, - units: std::marker::PhantomData, - value: self.value.into_inner(), - }) - } else { - // We are not the same measurement type. - Err(()) - } - } -} - -impl FromStr for Scalar { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - let (_leftover, measurement) = parsing::Scalar::parse(ImString::from(s)) - .map_err(|error| anyhow::anyhow!("Failed to parse measurement: {}", error))?; - let measurement = Self::from_parsed_raw(&measurement) - .map_err(|failure| anyhow::anyhow!("{}", failure))?; - - Ok(measurement) - } -} - -impl From for Scalar { - fn from(value: Float) -> Self { - Self { - dimension: Dimension { - length: 0, - mass: 0, - time: 0, - electric_current: 0, - thermodynamic_temprature: 0, - amount_of_substance: 0, - luminous_intensity: 0, - ratio_type_hint: RatioTypeHint::default(), - }, - value, - } - } -} - -impl Serialize for Scalar { - fn serialize(&self, serializer: S) -> Result - where - S: serde::Serializer, - { - if self.is_number() { - serializer.serialize_f64(self.value.into_inner()) - } else { - let unit_name = BASE_UNITS - .get(&self.dimension) - .cloned() - .unwrap_or_else(|| format_dimension(&self.dimension)); - - serializer.serialize_str(&format!("{} {}", self.value, unit_name)) - } - } -} - -impl<'de> Deserialize<'de> for Scalar { - fn deserialize(deserializer: D) -> Result - where - D: serde::Deserializer<'de>, - { - deserializer.deserialize_any(ScalarVisitor) - } -} - -struct ScalarVisitor; - -impl<'de> Visitor<'de> for ScalarVisitor { - type Value = Scalar; - - fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str("a measurement or number") - } - - fn visit_i64(self, v: i64) -> Result - where - E: de::Error, - { - self.visit_f64(v as f64) - } - - fn visit_u64(self, v: u64) -> Result - where - E: de::Error, - { - self.visit_f64(v as f64) - } - - fn visit_f64(self, v: f64) -> Result - where - E: de::Error, - { - let v = Float::new(v).map_err(|e| E::custom(e))?; - Ok(Scalar::from_number(v)) - } - - fn visit_str(self, v: &str) -> Result - where - E: de::Error, - { - Scalar::from_str(v).map_err(|e| E::custom(e)) - } -} - -#[cfg(test)] -mod test { - use uom::si::f64 as si; - - use crate::script::{ - execution::{expressions::run_expression, ExecutionContext}, - logging::StandardLog, - Runtime, - }; - - use super::*; - - use uom::si::length::meter; - - #[test] - fn addition() { - let mut log = StandardLog; - - let a = si::Length::new::(3.0); - let b = si::Length::new::(2.0); - let value_a: Value<&str> = Scalar::try_from(a).unwrap().into(); - let value_b: Value<&str> = Scalar::try_from(b).unwrap().into(); - assert_eq!( - value_a.addition(&mut log, &"span", &value_b), - Ok(Scalar::try_from(a + b).unwrap().into()) - ); - } - - #[test] - fn subtraction() { - let mut log = StandardLog; - - let a = si::Length::new::(3.0); - let b = si::Length::new::(2.0); - let value_a: Value<&str> = Scalar::try_from(a).unwrap().into(); - let value_b: Value<&str> = Scalar::try_from(b).unwrap().into(); - assert_eq!( - value_a.subtraction(&mut log, &"span", &value_b), - Ok(Scalar::try_from(a - b).unwrap().into()) - ); - } - - #[test] - fn multiplication() { - let mut log = StandardLog; - - let a = si::Length::new::(3.0); - let b = si::Length::new::(2.0); - let c = a * b; - let value_a: Value<&str> = Scalar::try_from(a).unwrap().into(); - let value_b: Value<&str> = Scalar::try_from(b).unwrap().into(); - let value_c: Value<&str> = Scalar::try_from(c).unwrap().into(); - assert_eq!( - value_a.clone().multiply(&mut log, &"span", &value_b), - Ok(Scalar::try_from(a * b).unwrap().into()) - ); - assert_eq!( - value_a.multiply(&mut log, &"span", &value_c), - Ok(Scalar::try_from(a * c).unwrap().into()) - ); - } - - #[test] - fn division() { - let mut log = StandardLog; - - let a = si::Length::new::(3.0); - let b = si::Length::new::(2.0); - let value_a: Value<&str> = Scalar::try_from(a).unwrap().into(); - let value_b: Value<&str> = Scalar::try_from(b).unwrap().into(); - - assert_eq!( - value_a.clone().divide(&mut log, &"span", &value_b), - Ok(Scalar::try_from(a / b).unwrap().into()) - ); - - let c: si::Area = a * b; - let value_c: Value<&str> = Scalar::try_from(c).unwrap().into(); - assert_eq!( - value_c.divide(&mut log, &"span", &value_a), - Ok(Scalar::try_from(c / a).unwrap().into()) - ); - } - - #[test] - fn comparisions() { - let mut log = StandardLog; - - let a = si::Length::new::(3.0); - let b = si::Length::new::(2.0); - let value_a: Value<&str> = Scalar::try_from(a).unwrap().into(); - let value_b: Value<&str> = Scalar::try_from(b).unwrap().into(); - assert_eq!( - value_a.cmp(&mut log, &"span", &value_b), - Ok(Ordering::Greater) - ); - assert_eq!( - value_a.cmp(&mut log, &"span", &value_a), - Ok(Ordering::Equal) - ); - assert_eq!(value_b.cmp(&mut log, &"span", &value_a), Ok(Ordering::Less)); - } - - #[test] - fn conversions() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("1m + 100cm == 2m").unwrap().1), - Ok(true.into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("2m * 2m == 4m^2").unwrap().1), - Ok(true.into()) - ); - assert_eq!( - run_expression( - context, - &Expression::parse("(2m).to_number(\"cm\") == 200") - .unwrap() - .1 - ), - { Ok(true.into()) } - ); - }); - } -} diff --git a/src/script/execution/types/math/transform.rs b/src/script/execution/types/math/transform.rs deleted file mode 100644 index 94e3de5..0000000 --- a/src/script/execution/types/math/transform.rs +++ /dev/null @@ -1,465 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::borrow::Cow; - -use common_data_types::{Dimension, RawFloat}; -use enum_downcast::AsVariant; -use nalgebra::{ - allocator::Allocator, Const, DefaultAllocator, Dim, DimName, DimNameDiff, DimNameSub, OPoint, - U1, -}; - -use crate::script::{ - execution::{ - types::{ - function::{AutoCall, IntoBuiltinFunction}, - NamedObject, Object, OperatorResult, Value, - }, - ExecutionContext, Failure, - }, - logging::RuntimeLog, - parsing::{Expression, VariableType}, - Span, -}; - -use super::{ - get_dimension_name, - vector::{LengthVector, NVector, Vector}, - Angle, Vector2, -}; - -pub type Transform = nalgebra::OMatrix; - -pub type Transform2D = Transform>; -pub type Transform3D = Transform>; - -pub fn register_globals(context: &mut ExecutionContext) { - context.stack.new_variable_str( - "new_transform2D", - |_context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(Transform2D::identity().into()) - } - .into_builtin_function() - .into(), - ); - context.stack.new_variable_str( - "new_transform3D", - |_context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(Transform3D::identity().into()) - } - .into_builtin_function() - .into(), - ); -} - -impl Object for Transform -where - D: DimName + DimNameSub, - S: Span, - DefaultAllocator: Allocator - + Allocator>::Output, >::Output> - + Allocator - + Allocator>::Output>, - Self: NamedObject - + TransformPoint<>::Output> - + Rotate - + CustomMultiply<>::Output>, - Vector: Into>, - Vector<>::Output>: NamedObject + Into>, - Value: From - + AsVariant>::Output>> - + TryInto>::Output>> - + TryInto>::Output>>, -{ - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(if let VariableType::Transform(dimension) = ty { - *dimension as usize == D::USIZE - } else { - false - }) - } - - fn type_name(&self) -> Cow<'static, str> { - Self::static_type_name().into() - } - - fn unary_minus(&self, _log: &mut dyn RuntimeLog, _span: &S) -> OperatorResult> { - Ok((-self.clone()).into()) - } - fn addition( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let translation = - Vector::>::from_value_ref(span, rhs, Dimension::length())?; - let translation = &translation.value; - let translation = Self::new_translation(translation); - - Ok((self * translation).into()) - } - fn subtraction( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let translation = - Vector::>::from_value_ref(span, rhs, Dimension::length())?; - - let translation = &translation.value; - let translation = Self::new_translation(&-translation); - - Ok((self * translation).into()) - } - fn multiply( - &self, - log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - self.custom_multiply(log, span, rhs) - } - fn method_call( - &self, - context: &mut ExecutionContext, - span: &S, - attribute: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult> { - match attribute.as_str() { - "apply_to_vector" => |_context: &mut ExecutionContext, - _span: &S, - vector: LengthVector>| - -> OperatorResult> { - let value = self.transform_point(&vector.value); - Ok(Vector::> { - dimension: Dimension::length(), - value, - } - .into()) - } - .auto_call(context, span, arguments, expressions), - "rotate" => self.rotate(context, span, arguments, expressions), - _ => Err(Failure::UnknownAttribute(attribute.clone())), - } - } -} - -impl NamedObject for Transform2D { - fn static_type_name() -> &'static str { - "Transform2D" - } -} - -impl NamedObject for Transform3D { - fn static_type_name() -> &'static str { - "Transform3D" - } -} - -trait Rotate { - fn rotate( - &self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult>; -} - -impl Rotate for Transform2D { - fn rotate( - &self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult> { - |_context: &mut ExecutionContext, - _span: &S, - angle: Angle| - -> OperatorResult> { - let angle = angle.value; - let angle = Self::new_rotation(*angle); - - Ok((self * angle).into()) - } - .auto_call(context, span, arguments, expressions) - } -} - -impl Rotate for Transform3D { - fn rotate( - &self, - context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult> { - |_context: &mut ExecutionContext, - span: &S, - axis: Vector>, - angle: Angle| - -> OperatorResult> { - axis.check_dimension(span, Dimension::zero())?; - - let angle = angle.value; - let rotation = Self::new_rotation(*angle * axis.value); - - Ok((self * rotation).into()) - } - .auto_call(context, span, arguments, expressions) - } -} - -trait CustomMultiply -where - D: Dim, -{ - fn custom_multiply( - &self, - log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult>; -} - -impl CustomMultiply> for Transform2D { - fn custom_multiply( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let scale = rhs.downcast_ref::(span)?; - if scale.dimension.is_zero_dimension() { - let scale = Self::new_nonuniform_scaling(&scale.value); - Ok((self * scale).into()) - } else { - Err(Failure::ExpectedGot( - span.clone(), - "Number".into(), - get_dimension_name(&scale.dimension), - )) - } - } -} - -impl CustomMultiply> for Transform3D { - fn custom_multiply( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - match rhs { - Value::Vector3(scale) => { - if scale.dimension.is_zero_dimension() { - let scale = Self::new_nonuniform_scaling(&scale.value); - Ok((self * scale).into()) - } else { - Err(Failure::ExpectedGot( - span.clone(), - "Number".into(), - get_dimension_name(&scale.dimension), - )) - } - } - Value::Quaternion(quat) => Ok((self * quat.to_homogeneous()).into()), - _ => Err(Failure::ExpectedGot( - span.clone(), - "Scalar Vector3 or Quaternion".into(), - Object::type_name(rhs), - )), - } - } -} - -trait TransformPoint -where - DefaultAllocator: Allocator, -{ - fn transform_point(&self, pt: &NVector) -> NVector; -} - -impl TransformPoint> for Transform2D -where - DefaultAllocator: Allocator> + Allocator, Const<2>>, -{ - fn transform_point(&self, pt: &NVector>) -> NVector> { - let point = OPoint { coords: *pt }; - let point = self.transform_point(&point); - point.coords - } -} - -impl TransformPoint> for Transform3D -where - DefaultAllocator: Allocator> + Allocator, Const<3>>, -{ - fn transform_point(&self, pt: &NVector>) -> NVector> { - let point = OPoint { coords: *pt }; - let point = self.transform_point(&point); - point.coords - } -} - -#[cfg(test)] -mod test { - use crate::script::{ - execution::{expressions::run_expression, types::math::vector::NVector}, - Runtime, - }; - - use super::*; - - #[test] - fn translate() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression( - context, - &Expression::parse( - "(new_transform2D() + vec2(1m, 2m)).apply_to_vector(vec2(0m, 0m))" - ) - .unwrap() - .1 - ), - Ok(Vector { - dimension: Dimension::length(), - value: NVector::>::new(1.0, 2.0), - } - .into()) - ); - - assert_eq!( - run_expression( - context, - &Expression::parse( - "(new_transform2D() - vec2(1m, 2m)).apply_to_vector(vec2(0m, 0m))" - ) - .unwrap() - .1 - ), - Ok(Vector { - dimension: Dimension::length(), - value: NVector::>::new(-1.0, -2.0), - } - .into()) - ); - - assert_eq!( - run_expression( - context, - &Expression::parse( - "(new_transform2D() + vec2(1m, 2m)).apply_to_vector(vec2(1m, 2m))" - ) - .unwrap() - .1 - ), - Ok(Vector { - dimension: Dimension::length(), - value: NVector::>::new(2.0, 4.0), - } - .into()) - ); - - assert_eq!( - run_expression( - context, - &Expression::parse( - "(new_transform2D() - vec2(1m, 2m)).apply_to_vector(vec2(2m, 3m))" - ) - .unwrap() - .1 - ), - Ok(Vector { - dimension: Dimension::length(), - value: NVector::>::new(1.0, 1.0), - } - .into()) - ); - }); - } - - #[test] - fn scale() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression( - context, - &Expression::parse( - "(new_transform2D() * vec2(1, 2)).apply_to_vector(vec2(2m, 2m))" - ) - .unwrap() - .1 - ), - Ok(Vector { - dimension: Dimension::length(), - value: NVector::>::new(2.0, 4.0), - } - .into()) - ); - }); - } - - #[test] - fn rotate_2d() { - ExecutionContext::create(&mut Runtime::default(), |context| { - let result = run_expression( - context, - &Expression::parse( - "(new_transform2D().rotate(90deg)).apply_to_vector(vec2(1m, 0m))", - ) - .unwrap() - .1, - ) - .unwrap(); - let vector = result.downcast::>>(&"").unwrap(); - - assert!((vector.value - NVector::>::new(0.0, 1.0)).norm() < 0.01); - }); - } - - #[test] - fn rotate_3d() { - ExecutionContext::create(&mut Runtime::default(), |context| { - let result = run_expression( - context, - & Expression::parse( - "(new_transform3D().rotate(vec3(0, 0, 1), 90deg)).apply_to_vector(vec3(1m, 0m, 0m))", - ) - .unwrap() - .1, - ) - .unwrap(); - let vector = result.downcast::>>(&"").unwrap(); - - assert!((vector.value - NVector::>::new(0.0, 1.0, 0.0)).norm() < 0.01); - }); - } -} diff --git a/src/script/execution/types/math/units.csv b/src/script/execution/types/math/units.csv deleted file mode 100644 index df68a1a..0000000 --- a/src/script/execution/types/math/units.csv +++ /dev/null @@ -1,2387 +0,0 @@ -dimension_name,length,mass,time,electric_current,thermodynamic_temperature,amount_of_substance,luminous_intensity,angle_kind,constituent_concentration_kind,information_kind,solid_angle_kind,temperature_kind,pixel_kind,singular,plural,abbreviation,keyboard_friendly_abbreviation,conversion_coefficient,conversion_constant -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,attometer second,attometer seconds,am · s,am*s,1E-18,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,centimeter second,centimeter seconds,cm · s,cm*s,0.01,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,decameter second,decameter seconds,dam · s,dam*s,10,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,decimeter second,decimeter seconds,dm · s,dm*s,0.1,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,exameter second,exameter seconds,Em · s,Em*s,1E+018,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,femtometer second,femtometer seconds,fm · s,fm*s,1E-15,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,foot second,foot seconds,ft · s,ft*s,0.3048,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,gigameter second,gigameter seconds,Gm · s,Gm*s,1000000000,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,hectometer second,hectometer seconds,hm · s,hm*s,100,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,inch second,inch seconds,in · s,in*s,0.0254,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,kilometer hour,kilometer hours,km · h,km*h,3600000,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,kilometer second,kilometer seconds,km · s,km*s,1000,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,megameter second,megameter seconds,Mm · s,Mm*s,1000000,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,meter second,meter seconds,m · s,m*s,1,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,micrometer second,micrometer seconds,µm · s,um*s,0.000001,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,millimeter second,millimeter seconds,mm · s,mm*s,0.001,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,nanometer second,nanometer seconds,nm · s,nm*s,0.000000001,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,petameter second,petameter seconds,Pm · s,Pm*s,1000000000000000,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,picometer second,picometer seconds,pm · s,pm*s,1E-12,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,terameter second,terameter seconds,Tm · s,Tm*s,1000000000000,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,yoctometer second,yoctometer seconds,ym · s,ym*s,1E-24,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,yottameter second,yottameter seconds,Ym · s,Ym*s,1E+024,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,zeptometer second,zeptometer seconds,zm · s,zm*s,1E-21,0 -Absement,1,0,1,0,0,0,0,false,false,false,false,false,false,zettameter second,zettameter seconds,Zm · s,Zm*s,1E+021,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,attometer per second squared,attometers per second squared,am/s²,am/s^2,1E-18,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,centimeter per second squared,centimeters per second squared,cm/s²,cm/s^2,0.01,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,decameter per second squared,decameters per second squared,dam/s²,dam/s^2,10,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,decimeter per second squared,decimeters per second squared,dm/s²,dm/s^2,0.1,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,exameter per second squared,exameters per second squared,Em/s²,Em/s^2,1E+018,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,femtometer per second squared,femtometers per second squared,fm/s²,fm/s^2,1E-15,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,foot per second squared,feet per second squared,ft/s²,ft/s^2,0.3048,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,galileo,galileos,Gal,Gal,0.01,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,gigameter per second squared,gigameters per second squared,Gm/s²,Gm/s^2,1000000000,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,hectometer per second squared,hectometers per second squared,hm/s²,hm/s^2,100,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,inch per second squared,inches per second squared,in/s²,in/s^2,0.0254,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,kilometer per second squared,kilometers per second squared,km/s²,km/s^2,1000,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,megameter per second squared,megameters per second squared,Mm/s²,Mm/s^2,1000000,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,meter per second squared,meters per second squared,m/s²,m/s^2,1,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,micrometer per second squared,micrometers per second squared,µm/s²,um/s^2,0.000001,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,millimeter per minute squared,millimeters per minute squared,mm/min²,mm/min^2,2.77777777777778E-07,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,millimeter per second squared,millimeters per second squared,mm/s²,mm/s^2,0.001,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,nanometer per second squared,nanometers per second squared,nm/s²,nm/s^2,0.000000001,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,petameter per second squared,petameters per second squared,Pm/s²,Pm/s^2,1000000000000000,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,picometer per second squared,picometers per second squared,pm/s²,pm/s^2,1E-12,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,standard acceleration of gravity,standard accelerations of gravity,g₀,g\0,9.80665,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,terameter per second squared,terameters per second squared,Tm/s²,Tm/s^2,1000000000000,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,yoctometer per second squared,yoctometers per second squared,ym/s²,ym/s^2,1E-24,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,yottameter per second squared,yottameters per second squared,Ym/s²,Ym/s^2,1E+024,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,zeptometer per second squared,zeptometers per second squared,zm/s²,zm/s^2,1E-21,0 -Acceleration,1,0,2,0,0,0,0,false,false,false,false,false,false,zettameter per second squared,zettameters per second squared,Zm/s²,Zm/s^2,1E+021,0 -Action,2,1,-1,0,0,0,0,false,false,false,false,false,false,atomic unit of action,atomic units of action,ħ,n<-,1.054571817E-34,0 -Action,2,1,-1,0,0,0,0,false,false,false,false,false,false,electronvolt second,electronvolt seconds,eV · s,eV*s,1.602176634E-19,0 -Action,2,1,-1,0,0,0,0,false,false,false,false,false,false,erg second,erg seconds,erg · s,erg*s,0.0000001,0 -Action,2,1,-1,0,0,0,0,false,false,false,false,false,false,joule second,joule seconds,J · s,J*s,1,0 -Action,2,1,-1,0,0,0,0,false,false,false,false,false,false,planck constant,planck constants,h,h (planck),6.62607015E-34,0 -Action,2,1,-1,0,0,0,0,false,false,false,false,false,false,reduced planck constant,reduced planck constants,ħ,n<- planc,1.054571817E-34,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,attomole,attomoles,amol,amol,1E-18,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,centimole,centimoles,cmol,cmol,0.01,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,decamole,decamoles,damol,damol,10,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,decimole,decimoles,dmol,dmol,0.1,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,examole,examoles,Emol,Emol,1E+018,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,femtomole,femtomoles,fmol,fmol,1E-15,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,gigamole,gigamoles,Gmol,Gmol,1000000000,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,hectomole,hectomoles,hmol,hmol,100,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,kilomole,kilomoles,kmol,kmol,1000,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,megamole,megamoles,Mmol,Mmol,1000000,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,micromole,micromoles,µmol,umol,0.000001,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,millimole,millimoles,mmol,mmol,0.001,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,mole,moles,mol,mol,1,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,nanomole,nanomoles,nmol,nmol,0.000000001,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,particle,particles,particle,particle,1.66053906717385E-24,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,petamole,petamoles,Pmol,Pmol,1000000000000000,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,picomole,picomoles,pmol,pmol,1E-12,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,standard cubic centimeter,standard cubic centimeters,cm³(STP),cm^3(STP),4.40316145139823E-05,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,standard cubic foot,standard cubic feet,scf,scf,1.24683662345026,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,standard cubic meter,standard cubic meters,m³(STP),m^3(STP),44.0316145139823,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,standard liter,standard liters,L(STP),L(STP),0.0440316145139823,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,teramole,teramoles,Tmol,Tmol,1000000000000,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,yoctomole,yoctomoles,ymol,ymol,1E-24,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,yottamole,yottamoles,Ymol,Ymol,1E+024,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,zeptomole,zeptomoles,zmol,zmol,1E-21,0 -AmountOfSubstance,0,0,0,0,0,1,0,false,false,false,false,false,false,zettamole,zettamoles,Zmol,Zmol,1E+021,0 -Angle,0,0,0,0,0,0,0,true,false,false,false,false,false,degree,degrees,°,deg,0.0174532925199433,0 -Angle,0,0,0,0,0,0,0,true,false,false,false,false,false,gon,gons,gon,gon,0.015707963267949,0 -Angle,0,0,0,0,0,0,0,true,false,false,false,false,false,mil,mils,mil,mil,0.0009817477,0 -Angle,0,0,0,0,0,0,0,true,false,false,false,false,false,minute,minutes,′,angle_minute,0.000290888208665722,0 -Angle,0,0,0,0,0,0,0,true,false,false,false,false,false,radian,radians,rad,rad,1,0 -Angle,0,0,0,0,0,0,0,true,false,false,false,false,false,revolution,revolutions,r,r,6.28318530717959,0 -Angle,0,0,0,0,0,0,0,true,false,false,false,false,false,second,seconds,″,angle_second,4.84813681109536E-06,0 -AngularAbsement,0,0,1,0,0,0,0,true,false,false,false,false,false,degree second,degree seconds,° · s,deg*s,0.0174532925199433,0 -AngularAbsement,0,0,1,0,0,0,0,true,false,false,false,false,false,radian second,radian seconds,rad · s,rad*s,1,0 -AngularAcceleration,0,0,-2,0,0,0,0,true,false,false,false,false,false,degree per second squared,degrees per second squared,°/s²,deg/s^2,0.0174532925199433,0 -AngularAcceleration,0,0,-2,0,0,0,0,true,false,false,false,false,false,radian per second squared,radians per second squared,rad/s²,rad/s^2,1,0 -AngularJerk,0,0,-3,0,0,0,0,true,false,false,false,false,false,degree per second cubed,degrees per second cubed,°/s³,deg/s^3,0.0174532925199433,0 -AngularJerk,0,0,-3,0,0,0,0,true,false,false,false,false,false,radian per second cubed,radians per second cubed,rad/s³,rad/s^3,1,0 -AngularVelocity,0,0,-1,0,0,0,0,true,false,false,false,false,false,degree per second,degrees per second,°/s,deg/s,0.0174532925199433,0 -AngularVelocity,0,0,-1,0,0,0,0,true,false,false,false,false,false,radian per second,radians per second,rad/s,rad/s,1,0 -AngularVelocity,0,0,-1,0,0,0,0,true,false,false,false,false,false,revolution per hour,revolutions per hour,rph,rph,0.00174532925199433,0 -AngularVelocity,0,0,-1,0,0,0,0,true,false,false,false,false,false,revolution per minute,revolutions per minute,rpm,rpm,0.10471975511966,0 -AngularVelocity,0,0,-1,0,0,0,0,true,false,false,false,false,false,revolution per second,revolutions per second,rps,rps,6.28318530717959,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,acre,acres,ac,ac,4046.873,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,are,ares,a,a,100,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,barn,barns,b,b,1E-28,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,circular mil,circular mils,cmil,cmil,5.067075E-10,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,hectare,hectares,ha,ha,10000,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square attometer,square attometers,am²,am^2,1E-36,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square centimeter,square centimeters,cm²,cm^2,0.0001,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square decameter,square decameters,dam²,dam^2,100,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square decimeter,square decimeters,dm²,dm^2,0.01,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square exameter,square exameters,Em²,Em^2,1E+036,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square femtometer,square femtometers,fm²,fm^2,1E-30,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square foot,square feet,ft²,ft^2,0.09290304,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square gigameter,square gigameters,Gm²,Gm^2,1E+018,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square hectometer,square hectometers,hm²,hm^2,10000,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square inch,square inches,in²,in^2,0.00064516,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square kilometer,square kilometers,km²,km^2,1000000,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square megameter,square megameters,Mm²,Mm^2,1000000000000,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square meter,square meters,m²,m^2,1,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square micrometer,square micrometers,µm²,um^2,1E-12,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square mile,square miles,mi²,mi^2,2589988,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square millimeter,square millimeters,mm²,mm^2,0.000001,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square nanometer,square nanometers,nm²,nm^2,1E-18,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square petameter,square petameters,Pm²,Pm^2,1E+030,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square picometer,square picometers,pm²,pm^2,1E-24,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square terameter,square terameters,Tm²,Tm^2,1E+024,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square yard,square yards,yd²,yd^2,0.8361274,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square yoctometer,square yoctometers,ym²,ym^2,1E-48,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square yottameter,square yottameters,Ym²,Ym^2,1E+048,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square zeptometer,square zeptometers,zm²,zm^2,1E-42,0 -Area,2,0,0,0,0,0,0,false,false,false,false,false,false,square zettameter,square zettameters,Zm²,Zm^2,1E+042,0 -ArealDensityOfStates,-4,-1,2,0,0,0,0,false,true,false,false,false,false,state per square centimeter electronvolt,states per square centimeter electronvolt,1/(cm² · eV),1/(cm^2*eV),6.24150907446076E+022,0 -ArealDensityOfStates,-4,-1,2,0,0,0,0,false,true,false,false,false,false,state per square centimeter joule,states per square centimeter joule,1/(cm² · J),1/(cm^2*J),10000,0 -ArealDensityOfStates,-4,-1,2,0,0,0,0,false,true,false,false,false,false,state per square meter joule,states per square meter joule,1/(m² · J),1/(m^2*J),1,0 -ArealMassDensity,-2,1,0,0,-1,0,0,false,false,false,false,false,false,gram per square centimeter,grams per square centimeter,g/cm²,g/cm^2,10,0 -ArealMassDensity,-2,1,0,0,-1,0,0,false,false,false,false,false,false,gram per square meter,grams per square meter,g/m²,g/m^2,0.001,0 -ArealMassDensity,-2,1,0,0,-1,0,0,false,false,false,false,false,false,kilogram per square meter,kilograms per square meter,kg/m²,kg/m^2,1,0 -ArealMassDensity,-2,1,0,0,-1,0,0,false,false,false,false,false,false,ounce per square foot,ounces per square foot,oz/ft²,oz/ft^2,0.305151693636721,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per acre,per acre,ac⁻²,Ac^-2,0.000247104369225325,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per are,per are,a⁻²,A^-2,0.01,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per barn,per barn,b⁻²,b^-2,1E+028,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per circular mil,per circular mil,cmil⁻²,cmil^-2,1973525159.97888,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per hectare,per hectare,ha⁻²,ha^-2,0.0001,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square centimeter,per square centimeter,cm⁻²,cm^-2,10000,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square decimeter,per square decimeter,dm⁻²,dm^-2,100,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square foot,per square foot,ft⁻²,ft^-2,10.7639104167097,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square inch,per square inch,in⁻²,in^-2,1550.0031000062,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square kilometer,per square kilometer,km⁻²,km^-2,0.000001,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square meter,per square meter,m⁻²,m^-2,1,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square micrometer,per square micrometer,µm⁻²,um^-2,1000000000000,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square mile,per square mile,mi⁻²,mi^-2,3.86102174990772E-07,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square millimeter,per square millimeter,mm⁻²,mm^-2,1000000,0 -ArealNumberDensity,-2,0,0,0,0,0,0,false,true,false,false,false,false,per square yard,per square yard,yd⁻²,yd^-2,1.1959899890854,0 -ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per acre second,per acre second,ac⁻¹ · s⁻¹,ac^-1*s^-1,0.000247104369225325,0 -ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per are second,per are second,a⁻¹ · s⁻¹,a^-1*s^-1,0.01,0 -ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per barn second,per barn second,b⁻¹ · s⁻¹,b^-1*s^-1,1E+028,0 -ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per circular mil second,per circular mil second,cmil⁻¹ · s⁻¹,cmil^-1*s^-1,1973525159.97888,0 -ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per hectare second,per hectare second,ha⁻¹ · s⁻¹,ha^-1*s^-1,0.0001,0 -ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per square centimeter second,per square centimeter second,cm⁻² · s⁻¹,cm^-2*s^-1,10000,0 -ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per square foot second,per square foot second,ft⁻² · s⁻¹,ft^-2*s^-1,10.7639104167097,0 -ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per square inch second,per square inch second,in⁻² · s⁻¹,in^-2*s^-1,1550.0031000062,0 -ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per square meter second,per square meter second,m⁻² · s⁻¹,m^-2*s^-1,1,0 -ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per square mile second,per square mile second,mi⁻² · s⁻¹,mi^-2*s^-1,3.86102174990772E-07,0 -ArealNumberRate,-2,0,1,0,0,0,0,false,true,false,false,false,false,per square yard second,per square yard second,yd⁻² · s⁻¹,yd^-2*s^-1,1.1959899890854,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,attojoule per kilogram,attojoules per kilogram,aJ/kg,aJ/kg,1E-18,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,British thermal unit (IT) per pound,British thermal units (IT) per pound,Btu (IT)/lb,Btu (IT)/lb,2326.0001710787,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,British thermal unit per pound,British thermal units per pound,Btu/lb,Btu/lb,2324.44370761062,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,calorie (IT) per gram,calories (IT) per gram,cal (IT)/lb,Cal (IT)/lb,4186.8,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,calorie per gram,calories per gram,cal/lb,cal/lb,4184,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,centijoule per kilogram,centijoules per kilogram,cJ/kg,cJ/kg,0.01,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,decajoule per kilogram,decajoules per kilogram,daJ/kg,daJ/kg,10,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,decijoule per kilogram,decijoules per kilogram,dJ/kg,dJ/kg,0.1,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,exajoule per kilogram,exajoules per kilogram,EJ/kg,EJ/kg,1E+018,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,femtojoule per kilogram,femtojoules per kilogram,fJ/kg,fJ/kg,1E-15,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,gigajoule per kilogram,gigajoules per kilogram,GJ/kg,GJ/kg,1000000000,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,hectojoule per kilogram,hectojoules per kilogram,hJ/kg,hJ/kg,100,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per attogram,joules per attogram,J/ag,J/ag,1E+021,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per exagram,joules per exagram,J/Eg,J/Eg,1E-15,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per femtogram,joules per femtogram,J/fg,J/fg,1E+018,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per gigagram,joules per gigagram,J/Gg,J/Gg,0.000001,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per gram,joules per gram,J/g,J/g,1000,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per kilogram,joules per kilogram,J/kg,J/kg,1,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per megagram,joules per megagram,J/Mg,J/Mg,0.001,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per microgram,joules per microgram,J/µg,J/ug,1000000000,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per milligram,joules per milligram,J/mg,J/mg,1000000,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per nanogram,joules per nanogram,J/ng,J/ng,1000000000000,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per petagram,joules per petagram,J/Pg,J/Pg,1E-12,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per picogram,joules per picogram,J/pg,J/pg,1000000000000000,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per teragram,joules per teragram,J/Tg,J/Tg,0.000000001,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per yottagram,joules per yottagram,J/Yg,J/Yg,1E-21,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per zeptogram,joules per zeptogram,J/zg,J/zg,1E+024,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,joule per zettagram,joules per zettagram,J/Zg,J/Zg,1E-18,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,kilojoule per kilogram,kilojoules per kilogram,kJ/kg,kJ/kg,1000,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,megajoule per kilogram,megajoules per kilogram,MJ/kg,MJ/kg,1000000,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,microjoule per kilogram,microjoules per kilogram,µJ/kg,uJ/kg,0.000001,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,millijoule per kilogram,millijoules per kilogram,mJ/kg,mJ/kg,0.001,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,nanojoule per kilogram,nanojoules per kilogram,nJ/kg,nJ/kg,0.000000001,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,petajoule per kilogram,petajoules per kilogram,PJ/kg,PJ/kg,1000000000000000,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,picojoule per kilogram,picojoules per kilogram,pJ/kg,pJ/kg,1E-12,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,terajoule per kilogram,terajoules per kilogram,TJ/kg,TJ/kg,1000000000000,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,yoctojoule per kilogram,yoctojoules per kilogram,yJ/kg,yJ/kg,1E-24,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,yottajoule per kilogram,yottajoules per kilogram,YJ/kg,YJ/kg,1E+024,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,zeptojoule per kilogram,zeptojoules per kilogram,zJ/kg,zJ/kg,1E-21,0 -AvailableEnergy,2,0,-2,0,0,0,0,false,false,false,false,false,false,zettajoule per kilogram,zettajoules per kilogram,ZJ/kg,ZJ/kg,1E+021,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,abfarad,abfarads,abF,abF,1000000000,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,attofarad,attofarads,aF,aF,1E-18,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,centifarad,centifarads,cF,cF,0.01,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,decafarad,decafarads,daF,daF,10,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,decifarad,decifarads,dF,dF,0.1,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,exafarad,exafarads,EF,EF,1E+018,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,farad,farads,F,F,1,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,femtofarad,femtofarads,fF,fF,1E-15,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,gigafarad,gigafarads,GF,GF,1000000000,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,hectofarad,hectofarads,hF,hF,100,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,kilofarad,kilofarads,kF,kF,1000,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,megafarad,megafarads,MF,MF,1000000,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,microfarad,microfarads,µF,uF,0.000001,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,millifarad,millifarads,mF,mF,0.001,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,nanofarad,nanofarads,nF,nF,0.000000001,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,petafarad,petafarads,PF,PF,1000000000000000,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,picofarad,picofarads,pF,pF,1E-12,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,statfarad,statfarads,statF,statF,1.11265E-12,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,terafarad,terafarads,TF,TF,1000000000000,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,yoctofarad,yoctofarads,yF,yF,1E-24,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,yottafarad,yottafarads,YF,YF,1E+024,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,zeptofarad,zeptofarads,zF,zF,1E-21,0 -Capacitance,-2,-1,4,2,0,0,0,false,false,false,false,false,false,zettafarad,zettafarads,ZF,ZF,1E+021,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,atto enzyme unit,atto enzyme units,aU,aU,1.66666666666667E-26,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,attokatal,attokatals,akat,akat,1E-18,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,centi enzyme unit,centi enzyme units,cU,cU,1.66666666666667E-10,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,centikatal,centikatals,ckat,ckat,0.01,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,deca enzyme unit,deca enzyme units,daU,daU,1.66666666666667E-07,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,decakatal,decakatals,dakat,dakat,10,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,deci enzyme unit,deci enzyme units,dU,dU,1.66666666666667E-09,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,decikatal,decikatals,dkat,dkat,0.1,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,enzyme unit,enzyme units,U,U,1.66666666666667E-08,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,exa enzyme unit,exa enzyme units,EU,EU,16666666666.6667,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,exakatal,exakatals,Ekat,Ekat,1E+018,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,femto enzyme unit,femto enzyme units,fU,fU,1.66666666666667E-23,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,femtokatal,femtokatals,fkat,fkat,1E-15,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,giga enzyme unit,giga enzyme units,GU,GU,16.6666666666667,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,gigakatal,gigakatals,Gkat,Gkat,1000000000,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,hecto enzyme unit,hecto enzyme units,hU,hU,1.66666666666667E-06,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,hectokatal,hectokatals,hkat,hkat,100,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,katal,katals,kat,kat,1,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,kilo enzyme unit,kilo enzyme units,kU,kU,1.66666666666667E-05,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,kilokatal,kilokatals,kkat,kkat,1000,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,mega enzyme unit,mega enzyme units,MU,MU,0.0166666666666667,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,megakatal,megakatals,Mkat,Mkat,1000000,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,micro enzyme unit,micro enzyme units,μU,uU,1.66666666666667E-14,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,microkatal,microkatals,µkat,ukat,0.000001,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,milli enzyme unit,milli enzyme units,mU,mU,1.66666666666667E-11,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,millikatal,millikatals,mkat,mkat,0.001,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,mole per second,moles per second,mol/s,mol/s,1,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,nano enzyme unit,nano enzyme units,nU,nU,1.66666666666667E-17,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,nanokatal,nanokatals,nkat,nkat,0.000000001,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,particle per second,particles per second,particle/s,particle/s,1.66053906717385E-24,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,peta enzyme unit,peta enzyme units,PU,PU,16666666.6666667,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,petakatal,petakatals,Pkat,Pkat,1000000000000000,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,pico enzyme unit,pico enzyme units,pU,pU,1.66666666666667E-20,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,picokatal,picokatals,pkat,pkat,1E-12,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,standard centimeter per minute,standard centimeters per minute,sccm,sccm,7.33860241899706E-07,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,standard cubic foot per hour,standard cubic feet per hour,scfm,scfm,0.0207806103908377,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,standard cubic meter per minute,standard cubic meters per minute,m³(STP)/min,m^3(STP)/min,0.733860241899705,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,standard liter per minute,standard liters per minute,slm,slm,0.000733860241899706,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,tera enzyme unit,tera enzyme units,TU,TU,16666.6666666667,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,terakatal,terakatals,Tkat,Tkat,1000000000000,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,yocto enzyme unit,yocto enzyme units,yU,yU,1.66666666666667E-32,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,yoctokatal,yoctokatals,ykat,ykat,1E-24,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,yotta enzyme unit,yotta enzyme units,YU,YU,1.66666666666667E+016,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,yottakatal,yottakatals,Ykat,Ykat,1E+024,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,zepto enzyme unit,zepto enzyme units,zU,zU,1.66666666666667E-29,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,zeptokatal,zeptokatals,zkat,zkat,1E-21,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,zetta enzyme unit,zetta enzyme units,ZU,ZU,16666666666666.7,0 -CatalyticActivity,0,0,-1,0,0,1,0,false,false,false,false,false,false,zettakatal,zettakatals,Zkat,Zkat,1E+021,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,atto enzyme unit per cubic meter,atto enzyme units per cubic meter,aU/m³,aU/m^3,1.66666666666667E-26,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,attokatal per cubic meter,attokatals per cubic meter,akat/m³,akat/m^3,1E-18,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,centi enzyme unit per cubic meter,centi enzyme units per cubic meter,cU/m³,cU/m^3,1.66666666666667E-10,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,centikatal per cubic meter,centikatals per cubic meter,ckat/m³,ckat/m^3,0.01,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,deca enzyme unit per cubic meter,deca enzyme units per cubic meter,daU/m³,daU/m^3,1.66666666666667E-07,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,decakatal per cubic meter,decakatals per cubic meter,dakat/m³,dakat/m^3,10,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,deci enzyme unit per cubic meter,deci enzyme units per cubic meter,dU/m³,dU/m^3,1.66666666666667E-09,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,decikatal per cubic meter,decikatals per cubic meter,dkat/m³,dkat/m^3,0.1,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,enzyme unit per cubic decimeter,enzyme units per cubic decimeter,U/dm³,U/dm^3,1.66666666666667E-05,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,enzyme unit per cubic meter,enzyme units per cubic meter,U/m³,U/m^3,1.66666666666667E-08,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,enzyme unit per deciliter,enzyme units per deciliter,U/dL,U/dL,0.000166666666666667,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,enzyme unit per liter,enzyme units per liter,U/L,U/L,1.66666666666667E-05,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,enzyme unit per milliliter,enzyme units per milliliter,U/mL,U/mL,0.0166666666666667,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,exa enzyme unit per cubic meter,exa enzyme units per cubic meter,EU/m³,EU/m^3,16666666666.6667,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,exakatal per cubic meter,exakatals per cubic meter,Ekat/m³,Ekat/m^3,1E+018,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femto enzyme unit per cubic decimeter,femto enzyme units per cubic decimeter,fU/dm³,fU/dm^3,1.66666666666667E-20,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femto enzyme unit per cubic meter,femto enzyme units per cubic meter,fU/m³,fU/m^3,1.66666666666667E-23,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femto enzyme unit per deciliter,femto enzyme units per deciliter,fU/dL,fU/dL,1.66666666666667E-19,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femto enzyme unit per liter,femto enzyme units per liter,fU/L,fU/L,1.66666666666667E-20,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femto enzyme unit per milliliter,femto enzyme units per milliliter,fU/mL,fU/mL,1.66666666666667E-17,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femtokatal per cubic decimeter,femtokatals per cubic decimeter,fkat/dm³,fkat/dm^3,1E-12,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femtokatal per cubic meter,femtokatals per cubic meter,fkat/m³,fkat/m^3,1E-15,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femtokatal per deciliter,femtokatals per deciliter,fkat/dL,fkat/dL,1E-11,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femtokatal per liter,femtokatals per liter,fkat/L,fkat/L,1E-12,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,femtokatal per milliliter,femtokatals per milliliter,fkat/mL,fkat/mL,0.000000001,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,giga enzyme unit per cubic meter,giga enzyme units per cubic meter,GU/m³,GU/m^3,16.6666666666667,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,gigakatal per cubic meter,gigakatals per cubic meter,Gkat/m³,Gkat/m^3,1000000000,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,hecto enzyme unit per cubic meter,hecto enzyme units per cubic meter,hU/m³,hU/m^3,1.66666666666667E-06,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,hectokatal per cubic meter,hectokatals per cubic meter,hkat/m³,hkat/m^3,100,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,katal per cubic decimeter,katals per cubic decimeter,kat/dm³,kat/dm^3,1000,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,katal per cubic meter,katals per cubic meter,kat/m³,kat/m^3,1,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,katal per deciliter,katals per deciliter,kat/dL,kat/dL,10000,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,katal per liter,katals per liter,kat/L,kat/L,1000,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,katal per milliliter,katals per milliliter,kat/mL,kat/mL,1000000,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilo enzyme unit per cubic decimeter,kilo enzyme units per cubic decimeter,kU/dm³,kU/dm^3,0.0166666666666667,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilo enzyme unit per cubic meter,kilo enzyme units per cubic meter,kU/m³,kU/m^3,1.66666666666667E-05,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilo enzyme unit per deciliter,kilo enzyme units per deciliter,kU/dL,kU/dL,0.166666666666667,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilo enzyme unit per liter,kilo enzyme units per liter,kU/L,kU/L,0.0166666666666667,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilo enzyme unit per milliliter,kilo enzyme units per milliliter,kU/mL,kU/mL,16.6666666666667,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilokatal per cubic decimeter,kilokatals per cubic decimeter,kkat/dm³,kkat/dm^3,1000000,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilokatal per cubic meter,kilokatals per cubic meter,kkat/m³,kkat/m^3,1000,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilokatal per deciliter,kilokatals per deciliter,kkat/dL,kkat/dL,10000000,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilokatal per liter,kilokatals per liter,kkat/L,kkat/L,1000000,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,kilokatal per milliliter,kilokatals per milliliter,kkat/mL,kkat/mL,1000000000,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,mega enzyme unit per cubic meter,mega enzyme units per cubic meter,MU/m³,MU/m^3,0.0166666666666667,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,megakatal per cubic meter,megakatals per cubic meter,Mkat/m³,Mkat/m^3,1000000,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,micro enzyme unit per cubic decimeter,micro enzyme units per cubic decimeter,μU/dm³,uU/dm^3,1.66666666666667E-11,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,micro enzyme unit per cubic meter,micro enzyme units per cubic meter,µU/m³,uU/m^3,1.66666666666667E-14,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,micro enzyme unit per deciliter,micro enzyme units per deciliter,μU/dL,uU/dL,1.66666666666667E-10,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,micro enzyme unit per liter,micro enzyme units per liter,μU/L,uU/L,1.66666666666667E-11,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,micro enzyme unit per milliliter,micro enzyme units per milliliter,μU/mL,uU/mL,1.66666666666667E-08,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,microkatal per cubic decimeter,microkatals per cubic decimeter,μkat/dm³,ukat/dm^3,0.001,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,microkatal per cubic meter,microkatals per cubic meter,µkat/m³,ukat/m^3,0.000001,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,microkatal per deciliter,microkatals per deciliter,μkat/dL,ukat/dL,0.01,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,microkatal per liter,microkatals per liter,μkat/L,ukat/L,0.001,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,microkatal per milliliter,microkatals per milliliter,μkat/mL,ukat/mL,1,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,milli enzyme unit per cubic decimeter,milli enzyme units per cubic decimeter,mU/dm³,mU/dm^3,1.66666666666667E-08,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,milli enzyme unit per cubic meter,milli enzyme units per cubic meter,mU/m³,mU/m^3,1.66666666666667E-11,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,milli enzyme unit per deciliter,milli enzyme units per deciliter,mU/dL,mU/dL,1.66666666666667E-07,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,milli enzyme unit per liter,milli enzyme units per liter,mU/L,mU/L,1.66666666666667E-08,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,milli enzyme unit per milliliter,milli enzyme units per milliliter,mU/mL,mU/mL,1.66666666666667E-05,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,millikatal per cubic decimeter,millikatals per cubic decimeter,mkat/dm³,mkat/dm^3,1,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,millikatal per cubic meter,millikatals per cubic meter,mkat/m³,mkat/m^3,0.001,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,millikatal per deciliter,millikatals per deciliter,mkat/dL,mkat/dL,10,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,millikatal per liter,millikatals per liter,mkat/L,mkat/L,1,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,millikatal per milliliter,millikatals per milliliter,mkat/mL,mkat/mL,1000,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nano enzyme unit per cubic decimeter,nano enzyme units per cubic decimeter,nU/dm³,nU/dm^3,1.66666666666667E-14,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nano enzyme unit per cubic meter,nano enzyme units per cubic meter,nU/m³,nU/m^3,1.66666666666667E-17,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nano enzyme unit per deciliter,nano enzyme units per deciliter,nU/dL,nU/dL,1.66666666666667E-13,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nano enzyme unit per liter,nano enzyme units per liter,nU/L,nU/L,1.66666666666667E-14,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nano enzyme unit per milliliter,nano enzyme units per milliliter,nU/mL,nU/mL,1.66666666666667E-11,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nanokatal per cubic decimeter,nanokatals per cubic decimeter,nkat/dm³,nkat/dm^3,0.000001,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nanokatal per cubic meter,nanokatals per cubic meter,nkat/m³,nkat/m^3,0.000000001,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nanokatal per deciliter,nanokatals per deciliter,nkat/dL,nkat/dL,0.00001,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nanokatal per liter,nanokatals per liter,nkat/L,nkat/L,0.000001,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,nanokatal per milliliter,nanokatals per milliliter,nkat/mL,nkat/mL,0.001,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,particle per second cubic meter,particles per second cubic meter,particle · s⁻¹ · m⁻³,particle*s^-1*m^-3,1.66053906717385E-24,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,peta enzyme unit per cubic meter,peta enzyme units per cubic meter,PU/m³,PU/m^3,16666666.6666667,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,petakatal per cubic meter,petakatals per cubic meter,Pkat/m³,Pkat/m^3,1000000000000000,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,pico enzyme unit per cubic decimeter,pico enzyme units per cubic decimeter,pU/dm³,pU/dm^3,1.66666666666667E-17,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,pico enzyme unit per cubic meter,pico enzyme units per cubic meter,pU/m³,pU/m^3,1.66666666666667E-20,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,pico enzyme unit per deciliter,pico enzyme units per deciliter,pU/dL,pU/dL,1.66666666666667E-16,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,pico enzyme unit per liter,pico enzyme units per liter,pU/L,pU/L,1.66666666666667E-17,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,pico enzyme unit per milliliter,pico enzyme units per milliliter,pU/mL,pU/mL,1.66666666666667E-14,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,picokatal per cubic decimeter,picokatals per cubic decimeter,pkat/dm³,pkat/dm^3,0.000000001,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,picokatal per cubic meter,picokatals per cubic meter,pkat/m³,pkat/m^3,1E-12,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,picokatal per deciliter,picokatals per deciliter,pkat/dL,pkat/dL,0.00000001,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,picokatal per liter,picokatals per liter,pkat/L,pkat/L,0.000000001,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,picokatal per milliliter,picokatals per milliliter,pkat/mL,pkat/mL,0.000001,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,tera enzyme unit per cubic meter,tera enzyme units per cubic meter,TU/m³,TU/m^3,16666.6666666667,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,terakatal per cubic meter,terakatals per cubic meter,Tkat/m³,Tkat/m^3,1000000000000,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,yocto enzyme unit per cubic meter,yocto enzyme units per cubic meter,yU/m³,yU/m^3,1.66666666666667E-32,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,yoctokatal per cubic meter,yoctokatals per cubic meter,ykat/m³,ykat/m^3,1E-24,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,yotta enzyme unit per cubic meter,yotta enzyme units per cubic meter,YU/m³,YU/m^3,1.66666666666667E+016,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,yottakatal per cubic meter,yottakatals per cubic meter,Ykat/m³,Ykat/m^3,1E+024,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,zepto enzyme unit per cubic meter,zepto enzyme units per cubic meter,zU/m³,zU/m^3,1.66666666666667E-29,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,zeptokatal per cubic meter,zeptokatals per cubic meter,zkat/m³,zkat/m^3,1E-21,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,zetta enzyme unit per cubic meter,zetta enzyme units per cubic meter,ZU/m³,ZU/m^3,16666666666666.7,0 -CatalyticActivityConcentration,-3,0,-1,0,0,1,0,false,true,false,false,false,false,zettakatal per cubic meter,zettakatals per cubic meter,Zkat/m³,Zkat/m^3,1E+021,0 -Curvature,-1,0,0,0,0,0,0,true,false,false,false,false,false,degree per meter,degrees per meter,°/m,deg/m,0.0174532925199433,0 -Curvature,-1,0,0,0,0,0,0,true,false,false,false,false,false,degree per millimeter,degrees per millimeter,°/mm,deg/mm,17.4532925199433,0 -Curvature,-1,0,0,0,0,0,0,true,false,false,false,false,false,radian per meter,radians per meter,rad/m,rad/m,1,0 -Curvature,-1,0,0,0,0,0,0,true,false,false,false,false,false,radian per millimeter,radians per millimeter,rad/mm,rad/mm,1000,0 -DiffusionCoefficient,2,0,-1,0,0,0,0,false,false,false,false,false,false,centistokes,centistokes,cSt,cSt,0.000001,0 -DiffusionCoefficient,2,0,-1,0,0,0,0,false,false,false,false,false,false,square centimeter per second,square centimeters per second,cm²/s,cm^2/s,0.0001,0 -DiffusionCoefficient,2,0,-1,0,0,0,0,false,false,false,false,false,false,square meter per second,square meters per second,m²/s,m^2/s,1,0 -DiffusionCoefficient,2,0,-1,0,0,0,0,false,false,false,false,false,false,square micrometer per second,square micrometers per second,µm²/s,um^2/s,1E-12,0 -DiffusionCoefficient,2,0,-1,0,0,0,0,false,false,false,false,false,false,square millimeter per second,square millimeters per second,mm²/s,mm^2/s,0.000001,0 -DiffusionCoefficient,2,0,-1,0,0,0,0,false,false,false,false,false,false,square nanometer per second,square nanometers per second,nm²/s,nm^2/s,1E-18,0 -DiffusionCoefficient,2,0,-1,0,0,0,0,false,false,false,false,false,false,Stokes,Stokes,St,St,0.0001,0 -DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,centipoise,centipoises,cP,cP,0.001,0 -DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,gram per centimeter second,grams per centimeter second,g/(cm · s),g/(cm*s),0.1,0 -DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,micropascal second,micropascal seconds,µPa · s,uPa*s,0.000001,0 -DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,millipascal second,millipascal seconds,mPa · s,mPa*s,0.001,0 -DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,pascal second,pascal seconds,Pa · s,Pa*s,1,0 -DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,poise,poises,P,P,0.1,0 -DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,pound-force second per square foot,pound-force seconds per square foot,lbf · s/ft²,lbf*s/ft^2,47.8802631216374,0 -DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,pound-force second per square inch,pound-force seconds per square inch,lbf · s/in²,lbf*s/in^2,6894.75788951578,0 -DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,pound per foot hour,pounds per foot hour,lb/(ft · h),lb/(ft*h),0.000413378900554097,0 -DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,pound per foot second,pounds per foot second,lb/(ft · s),lb/(ft*s),1.48816404199475,0 -DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,reyn,reyns,reyn,reyn,6894.75788951578,0 -DynamicViscosity,-1,1,-1,0,0,0,0,false,false,false,false,false,false,slug per foot second,slugs per foot second,slug/(ft · s),slug/(ft*s),47.880249343832,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,abcoulomb,abcoulombs,abC,abC,10,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,ampere hour,ampere hours,A · h,A*h,3600,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,atomic unit of charge,atomic units of charge,a.u. of charge,a.u. of charge,1.602176634E-19,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,attocoulomb,attocoulombs,aC,aC,1E-18,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,centicoulomb,centicoulombs,cC,cC,0.01,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,coulomb,coulombs,C,C,1,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,decaampere hour,decaampere hours,daA · h,daA*h,36000,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,decacoulomb,decacoulombs,daC,daC,10,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,decicoulomb,decicoulombs,dC,dC,0.1,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,elementary charge,elementary charges,e,e,1.602176634E-19,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,exacoulomb,exacoulombs,EC,EC,1E+018,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,faraday,faradays,F,Faraday,96485.31,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,femtocoulomb,femtocoulombs,fC,fC,1E-15,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,franklin,franklins,Fr,Fr,3.335641E-10,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,gigaampere hour,gigaampere hours,GA · h,GA*h,3600000000000,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,gigacoulomb,gigacoulombs,GC,GC,1000000000,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,hectoampere hour,hectoampere hours,hA · h,hA*h,360000,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,hectocoulomb,hectocoulombs,hC,hC,100,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,kiloampere hour,kiloampere hours,kA · h,kA*h,3600000,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,kilocoulomb,kilocoulombs,kC,kC,1000,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,megaampere hour,megaampere hours,MA · h,MA*h,3600000000,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,megacoulomb,megacoulombs,MC,MC,1000000,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,microampere hour,microampere hours,µA · h,uA*h,0.0036,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,microcoulomb,microcoulombs,µC,uC,0.000001,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,milliampere hour,milliampere hours,mA · h,mA*h,3.6,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,millcoulomb,millcoulombs,mC,mC,0.001,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,nanocoulomb,nanocoulombs,nC,nC,0.000000001,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,petaampere hour,petaampere hours,PA · h,PA*h,3.6E+018,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,petacoulomb,petacoulombs,PC,PC,1000000000000000,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,picocoulomb,picocoulombs,pC,pC,1E-12,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,statcoulomb,statcoulombs,statC,statC,3.335641E-10,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,teraampere hour,teraampere hours,TA · h,TA*h,3600000000000000,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,teracoulomb,teracoulombs,TC,TC,1000000000000,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,yoctocoulomb,yoctocoulombs,yC,yC,1E-24,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,yottacoulomb,yottacoulombs,YC,YC,1E+024,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,zeptocoulomb,zeptocoulombs,zC,zC,1E-21,0 -ElectricCharge,0,0,1,1,0,0,0,false,false,false,false,false,false,zettacoulomb,zettacoulombs,ZC,ZC,1E+021,0 -ElectricChargeArealDensity,-2,0,1,1,0,0,0,false,true,false,false,false,false,coulomb per square centimeter,coulombs per square centimeter,C/cm²,C/cm^2,10000,0 -ElectricChargeArealDensity,-2,0,1,1,0,0,0,false,true,false,false,false,false,coulomb per square meter,coulombs per square meter,C/m²,C/m^2,1,0 -ElectricChargeLinearDensity,-1,0,1,1,0,0,0,false,true,false,false,false,false,coulomb per centimeter,coulombs per centimeter,C/cm,C/cm,100,0 -ElectricChargeLinearDensity,-1,0,1,1,0,0,0,false,true,false,false,false,false,coulomb per meter,coulombs per meter,C/m,C/m,1,0 -ElectricChargeVolumetricDensity,-3,0,1,1,0,0,0,false,true,false,false,false,false,coulomb per cubic centimeter,coulombs per cubic centimeter,C/cm³,C/cm^3,1000000,0 -ElectricChargeVolumetricDensity,-3,0,1,1,0,0,0,false,true,false,false,false,false,coulomb per cubic meter,coulombs per cubic meter,C/m³,C/m^3,1,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,abampere,abamperes,abA,abA,10,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,ampere,amperes,A,A,1,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,atomic unit of charge per second,atomic units of charge per second,a.u. of charge/s,a.u. of charge/s,1.602176634E-19,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,attoampere,attoamperes,aA,aA,1E-18,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,centiampere,centiamperes,cA,cA,0.01,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,decaampere,decaamperes,daA,daA,10,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,deciampere,deciamperes,dA,dA,0.1,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,elementary charge per second,elementary charges per second,e/s,e/s,1.602176634E-19,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,exaampere,exaamperes,EA,EA,1E+018,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,femtoampere,femtoamperes,fA,fA,1E-15,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,gigaampere,gigaamperes,GA,GA,1000000000,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,gilbert,gilberts,Gi,Gi,0.7957747,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,hectoampere,hectoamperes,hA,hA,100,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,kiloampere,kiloamperes,kA,kA,1000,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,megaampere,megaamperes,MA,MA,1000000,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,microampere,microamperes,µA,uA,0.000001,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,millampere,millamperes,mA,mA,0.001,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,nanoampere,nanoamperes,nA,nA,0.000000001,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,petaampere,petaamperes,PA,PA,1000000000000000,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,picoampere,picoamperes,pA,pA,1E-12,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,statampere,statamperes,statA,statA,3.335641E-10,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,teraampere,teraamperes,TA,TA,1000000000000,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,yoctoampere,yoctoamperes,yA,yA,1E-24,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,yottaampere,yottaamperes,YA,YA,1E+024,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,zeptoampere,zeptoamperes,zA,zA,1E-21,0 -ElectricCurrent,0,0,0,1,0,0,0,false,false,false,false,false,false,zettaampere,zettaamperes,ZA,ZA,1E+021,0 -ElectricCurrentDensity,-2,0,0,1,0,0,0,false,false,false,false,false,false,ampere per square centimeter,amperes per square centimeter,A/cm²,A/cm^2,10000,0 -ElectricCurrentDensity,-2,0,0,1,0,0,0,false,false,false,false,false,false,ampere per square meter,amperes per square meter,A/m²,A/m^2,1,0 -ElectricCurrentDensity,-2,0,0,1,0,0,0,false,false,false,false,false,false,ampere per square millimeter,amperes per square millimeter,A/mm²,A/mm^2,1000000,0 -ElectricDipoleMoment,1,0,1,1,0,0,0,false,false,false,false,false,false,atomic unit of charge centimeter,atomic unit of charge centimeters,a.u. of charge · cm,a.u. of charge*cm,1.602176634E-21,0 -ElectricDipoleMoment,1,0,1,1,0,0,0,false,false,false,false,false,false,atomic unit of electric dipole moment,atomic units of electric dipole moment,e · a₀,e*a\0,8.47835362554077E-30,0 -ElectricDipoleMoment,1,0,1,1,0,0,0,false,false,false,false,false,false,coulomb meter,coulomb meters,C · m,C*m,1,0 -ElectricDipoleMoment,1,0,1,1,0,0,0,false,false,false,false,false,false,debye,debyes,D,D,3.33564095198152E-30,0 -ElectricDipoleMoment,1,0,1,1,0,0,0,false,false,false,false,false,false,elementary charge centimeter,elementary charge centimeters,e · cm,e*cm,1.602176634E-21,0 -ElectricDisplacementField,-2,0,1,1,0,0,0,false,false,false,false,false,false,coulomb per square centimeter,coulombs per square centimeter,C/cm²,C/cm^2 (displacement),10000,0 -ElectricDisplacementField,-2,0,1,1,0,0,0,false,false,false,false,false,false,coulomb per square meter,coulombs per square meter,C/m²,C/m^2 (displacement),1,0 -ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,atomic unit of electric field,atomic units of electric field,a.u. of electric field,a.u. of electric field,514220674763.26,0 -ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,kilovolt per millimeter,kilovolts per millimeter,kV/mm,kV/mm,1000000,0 -ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,megavolt per centimeter,megavolts per centimeter,MV/cm,MV/cm,100000000,0 -ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,megavolt per meter,megavolts per meter,MV/m,MV/m,1000000,0 -ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,volt per centimeter,volts per centimeter,V/cm,V/cm,100,0 -ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,volt per meter,volts per meter,V/m,V/m,1,0 -ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,volt per micrometer,volts per micrometer,V/μm,V/um,1000000,0 -ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,volt per mil,volts per mil,V/mil,V/mil,39370.0787401575,0 -ElectricField,1,1,-3,-1,0,0,0,false,false,false,false,false,false,volt per millimeter,volts per millimeter,V/mm,V/mm,1000,0 -ElectricFlux,3,1,-3,-1,0,0,0,false,false,false,false,false,false,volt centimeter,volt centimeters,V ⋅ cm,V*cm,0.01,0 -ElectricFlux,3,1,-3,-1,0,0,0,false,false,false,false,false,false,volt meter,volt meters,V ⋅ m,V*m,1,0 -ElectricPermittivity,-3,-1,4,2,0,0,0,false,false,false,false,false,false,farad per meter,farads per meter,F/m,F/m,1,0 -ElectricPermittivity,-3,-1,4,2,0,0,0,false,false,false,false,false,false,vacuum electric permittivity,vacuum electric permittivity,ε₀,epsilon\0,8.8541878128E-12,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,abvolt,abvolts,abV,abV,0.00000001,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,attovolt,attovolts,aV,aV,1E-18,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,centivolt,centivolts,cV,cV,0.01,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,decavolt,decavolts,daV,daV,10,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,decivolt,decivolts,dV,dV,0.1,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,exavolt,exavolts,EV,EV,1E+018,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,femtovolt,femtovolts,fV,fV,1E-15,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,gigavolt,gigavolts,GV,GV,1000000000,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,hectovolt,hectovolts,hV,hV,100,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,kilovolt,kilovolts,kV,kV,1000,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,megavolt,megavolts,MV,MV,1000000,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,microvolt,microvolts,µV,uV,0.000001,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,millivolt,millivolts,mV,mV,0.001,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,nanovolt,nanovolts,nV,nV,0.000000001,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,petavolt,petavolts,PV,PV,1000000000000000,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,picovolt,picovolts,pV,pV,1E-12,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,statvolt,statvolts,statV,statV,299.7925,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,teravolt,teravolts,TV,TV,1000000000000,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,volt,volts,V,V,1,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,yoctovolt,yoctovolts,yV,yV,1E-24,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,yottavolt,yottavolts,YV,YV,1E+024,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,zeptovolt,zeptovolts,zV,zV,1E-21,0 -ElectricPotential,2,1,-3,-1,0,0,0,false,false,false,false,false,false,zettavolt,zettavolts,ZV,ZV,1E+021,0 -ElectricQuadrupoleMoment,2,0,1,1,0,0,0,false,false,false,false,false,false,atomic unit of electric quadrupole moment,atomic units of electric quadrupole moment,e · a₀²,e*a\0^2,4.486551524613E-40,0 -ElectricQuadrupoleMoment,2,0,1,1,0,0,0,false,false,false,false,false,false,coulomb square meter,coulomb square meters,C · m²,C*m^2,1,0 -ElectricQuadrupoleMoment,2,0,1,1,0,0,0,false,false,false,false,false,false,elementary charge barn,elementary charge barns,e · b,e*b,1.602176634E-47,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,abmho,abmhos,abmho,abmho,1000000000,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,abmsiemens,abmsiemens,abS,abS,1000000000,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,attosiemens,attosiemens,aS,aS,1E-18,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,centisiemens,centisiemens,cS,cS,0.01,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,decasiemens,decasiemens,daS,daS,10,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,decisiemens,decisiemens,dS,dS,0.1,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,exasiemens,exasiemens,ES,ES,1E+018,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,femtosiemens,femtosiemens,fS,fS,1E-15,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,gigasiemens,gigasiemens,GS,GS,1000000000,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,hectosiemens,hectosiemens,hS,hS,100,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,kilosiemens,kilosiemens,kS,kS,1000,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,megasiemens,megasiemens,MS,MS,1000000,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,mho,mhos,℧,mho,1,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,microsiemens,microsiemens,µS,uS,0.000001,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,millisiemens,millisiemens,mS,mS,0.001,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,nanosiemens,nanosiemens,nS,nS,0.000000001,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,petasiemens,petasiemens,PS,PS,1000000000000000,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,picosiemens,picosiemens,pS,pS,1E-12,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,siemens,siemens,S,S,1,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,statmho,statmhos,statmho,statmho,1.11265E-12,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,statsiemens,statsiemens,statS,statS,1.11265E-12,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,terasiemens,terasiemens,TS,TS,1000000000000,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,yoctosiemens,yoctosiemens,yS,yS,1E-24,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,yottasiemens,yottasiemens,YS,YS,1E+024,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,zeptosiemens,zeptosiemens,zS,zS,1E-21,0 -ElectricalConductance,-2,-1,3,0,0,0,0,false,false,false,false,false,false,zettasiemens,zettasiemens,ZS,ZS,1E+021,0 -ElectricalConductivity,-3,-1,3,2,0,0,0,false,false,false,false,false,false,siemens per centimeter,siemens per centimeter,S/cm,S/cm,100,0 -ElectricalConductivity,-3,-1,3,2,0,0,0,false,false,false,false,false,false,siemens per meter,siemens per meter,S/m,S/m,1,0 -ElectricalMobility,0,-1,2,1,0,0,0,false,false,false,false,false,false,square centimeter per volt second,square centimeters per volt second,cm²/(V · s),cm^2/(V*s),0.0001,0 -ElectricalMobility,0,-1,2,1,0,0,0,false,false,false,false,false,false,square meter per volt second,square meters per volt second,m²/(V · s),m^2/(V*s),1,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,abohm,abohms,abΩ,abohm,0.000000001,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,attoohm,attoohms,aΩ,aohm,1E-18,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,centiohm,centiohms,cΩ,cohm,0.01,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,decaohm,decaohms,daΩ,daohm,10,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,deciohm,deciohms,dΩ,dohm,0.1,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,exaohm,exaohms,EΩ,Eohm,1E+018,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,femtoohm,femtoohms,fΩ,fohm,1E-15,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,gigaohm,gigaohms,GΩ,Gohm,1000000000,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,hectoohm,hectoohms,hΩ,hohm,100,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,kiloohm,kiloohms,kΩ,kohm,1000,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,megaohm,megaohms,MΩ,Mohm,1000000,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,microohm,microohms,µΩ,uohm,0.000001,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,milliohm,milliohms,mΩ,mohm,0.001,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,nanoohm,nanoohms,nΩ,nohm,0.000000001,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,ohm,ohms,Ω,ohm,1,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,petaohm,petaohms,PΩ,Pohm,1000000000000000,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,picoohm,picoohms,pΩ,pohm,1E-12,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,statohm,statohms,statΩ,statohm,898755291711.548,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,teraohm,teraohms,TΩ,Tohm,1000000000000,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,yoctoohm,yoctoohms,yΩ,yohm,1E-24,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,yottaohm,yottaohms,YΩ,Yohm,1E+024,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,zeptoohm,zeptoohms,zΩ,zohm,1E-21,0 -ElectricalResistance,2,1,-3,-2,0,0,0,false,false,false,false,false,false,zettaohm,zettaohms,ZΩ,Zohm,1E+021,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,abohm centimeter,abohm centimeters,abΩ · cm,abohm*cm,1E-11,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,abohm meter,abohm meters,abΩ · m,abohm*m,0.000000001,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,attoohm meter,attoohm meters,aΩ · m,aohm*m,1E-18,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,centiohm meter,centiohm meters,cΩ · m,cohm*m,0.01,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,decaohm meter,decaohm meters,daΩ · m,daohm*m,10,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,deciohm meter,deciohm meters,dΩ · m,dohm*m,0.1,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,exaohm meter,exaohm meters,EΩ · m,Eohm*m,1E+018,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,femtoohm meter,femtoohm meters,fΩ · m,fohm*m,1E-15,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,gigaohm meter,gigaohm meters,GΩ · m,Gohm*m,1000000000,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,hectoohm meter,hectoohm meters,hΩ · m,hohm*m,100,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,kiloohm meter,kiloohm meters,kΩ · m,kohm*m,1000,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,megaohm meter,megaohm meters,MΩ · m,Mohm*m,1000000,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,microohm meter,microohm meters,µΩ · m,uohm*m,0.000001,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,milliohm meter,milliohm meters,mΩ · m,mohm*m,0.001,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,nanoohm meter,nanoohm meters,nΩ · m,nohm*m,0.000000001,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,ohm centimeter,ohm centimeters,Ω · cm,ohm*cm,0.01,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,ohm foot,ohm feet,Ω · ft,ohm*ft,0.3048,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,ohm inch,ohm inches,Ω · in,ohm*in,0.0254,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,ohm meter,ohm meters,Ω · m,ohm*m,1,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,ohm square millimeter per meter,ohm square millimeters per meter,Ω · mm²/m,ohm*mm^2/m,0.000001,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,ohm yard,ohm yards,Ω · yd,ohm*yd,0.9144,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,petaohm meter,petaohm meters,PΩ · m,Pohm*m,1000000000000000,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,picoohm meter,picoohm meters,pΩ · m,pohm*m,1E-12,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,statohm centimeter,statohm centimeters,statΩ · cm,statohm*cm,8987552917.11548,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,statohm meter,statohm meters,statΩ · m,statohm*m,898755291711.548,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,teraohm meter,teraohm meters,TΩ · m,Tohm*m,1000000000000,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,yoctoohm meter,yoctoohm meters,yΩ · m,yohm*m,1E-24,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,yottaohm meter,yottaohm meters,YΩ · m,Yohm*m,1E+024,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,zeptoohm meter,zeptoohm meters,zΩ · m,zohm*m,1E-21,0 -ElectricalResistivity,3,1,-3,-2,0,0,0,false,false,false,false,false,false,zettaohm meter,zettaohm meters,ZΩ · m,Zohm*m,1E+021,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,attojoule,attojoules,aJ,aJ,1E-18,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,British thermal unit,British thermal units,Btu,Btu,1054.35,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,British thermal unit (39 °F),British thermal units (39 °F),Btu₃₉,Btu\39,1059.67,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,British thermal unit (59 °F),British thermal units (59 °F),Btu₅₉,Btu\59,1054.8,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,British thermal unit (60 °F),British thermal units (60 °F),Btu₆₀,Btu\60,1054.68,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,British thermal unit (IT),British thermal units (IT),Btu (IT),Btu (IT),1055.056,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,calorie,calories,cal,cal,4.184,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,calorie (15 °C),calories (15 °C),cal₁₅,Cal\15,4.1858,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,calorie (20 °C),calories (20 °C),cal₂₀,Cal\20,4.1819,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,calorie (IT),calories (IT),cal (IT),cal (IT),4.1868,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,Calorie (IT),Calories (IT),Cal (IT),Cal (IT),4186.8,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,Calorie,Calories,Cal,Cal,4184,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,centijoule,centijoules,cJ,cJ,0.01,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,decaelectronvolt,decaelectronvolts,daeV,daeV,1.602176634E-18,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,decajoule,decajoules,daJ,daJ,10,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,decawatt hour,decawatt hours,daW · h,daW*h,36000,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,decijoule,decijoules,dJ,dJ,0.1,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,electronvolt,electronvolts,eV,eV,1.602176634E-19,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,erg,ergs,erg,erg,0.0000001,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,exajoule,exajoules,EJ,EJ,1E+018,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,femtojoule,femtojoules,fJ,fJ,1E-15,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,foot pound-force,foot pounds-force,ft · lbf,ft*lbf,1.355818,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,foot poundal,foot poundals,ft · pdl,ft*pdl,0.04214011,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,gigaelectronvolt,gigaelectronvolts,GeV,GeV,1.602176634E-10,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,gigajoule,gigajoules,GJ,GJ,1000000000,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,gigawatt hour,gigawatt hours,GW · h,GW*h,3600000000000,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,hartree,hartrees,Eₕ,E\h,4.3597447222071E-18,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,hectoelectronvolt,hectoelectronvolts,heV,heV,1.602176634E-17,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,hectojoule,hectojoules,hJ,hJ,100,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,hectowatt hour,hectowatt hours,hW · h,hW*h,360000,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,joule,joules,J,J,1,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,kilocalorie,kilocalories,kcal,kcal,4184,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,kilocalorie (IT),kilocalories (IT),kcal (IT),Kcal (IT),4186.8,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,kiloelectronvolt,kiloelectronvolts,keV,keV,1.602176634E-16,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,kilojoule,kilojoules,kJ,kJ,1000,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,kilowatt hour,kilowatt hours,kW · h,kW*h,3600000,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,megaelectronvolt,megaelectronvolts,MeV,MeV,1.602176634E-13,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,megajoule,megajoules,MJ,MJ,1000000,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,megawatt hour,megawatt hours,MW · h,MW*h,3600000000,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,microjoule,microjoules,µJ,uJ,0.000001,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,microwatt hour,microwatt hours,µW · h,uW*h,0.0036,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,millijoule,millijoules,mJ,mJ,0.001,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,milliwatt hour,milliwatt hours,mW · h,mW*h,3.6,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,nanojoule,nanojoules,nJ,nJ,0.000000001,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,petaelectronvolt,petaelectronvolts,PeV,PeV,0.0001602176634,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,petajoule,petajoules,PJ,PJ,1000000000000000,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,petawatt hour,petawatt hours,PW · h,PW*h,3.6E+018,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,picojoule,picojoules,pJ,pJ,1E-12,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,quad,quads,10¹⁵ Btu (IT),10^15 Btu (IT),1.055056E+018,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,teraelectronvolt,teraelectronvolts,TeV,TeV,0.0000001602176634,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,terajoule,terajoules,TJ,TJ,1000000000000,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,terawatt hour,terawatt hours,TW · h,TW*h,3600000000000000,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,therm (EC),therms (EC),thm (EC),Thm (EC),105506000,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,therm,therms,thm,thm,105480400,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,ton of TNT,tons of TNT,t of TNT,T of TNT,4184000000,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,watt hour,watt hours,W · h,W*h,3600,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,watt second,watt seconds,W · s,W*s,1,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,yoctojoule,yoctojoules,yJ,yJ,1E-24,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,yottajoule,yottajoules,YJ,YJ,1E+024,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,zeptojoule,zeptojoules,zJ,zJ,1E-21,0 -Energy,2,1,-2,0,0,0,0,false,false,false,false,false,false,zettajoule,zettajoules,ZJ,ZJ,1E+021,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,attonewton,attonewtons,aN,aN,1E-18,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,centinewton,centinewtons,cN,cN,0.01,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,decanewton,decanewtons,daN,daN,10,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,decinewton,decinewtons,dN,dN,0.1,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,dyne,dynes,dyn,dyn,0.00001,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,exanewton,exanewtons,EN,EN,1E+018,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,femtonewton,femtonewtons,fN,fN,1E-15,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,giganewton,giganewtons,GN,GN,1000000000,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,hectonewton,hectonewtons,hN,hN,100,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,kilogram-force,kilograms-force,kgf,kgf,9.80665,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,kilonewton,kilonewtons,kN,kN,1000,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,kip,kips,kip,kip,4448.222,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,meganewton,meganewtons,MN,MN,1000000,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,micronewton,micronewtons,µN,uN,0.000001,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,millinewton,millinewtons,mN,mN,0.001,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,nanonewton,nanonewtons,nN,nN,0.000000001,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,newton,newtons,N,N,1,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,ounce-force,ounces-force,ozf,ozf,0.2780139,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,petanewton,petanewtons,PN,PN,1000000000000000,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,piconewton,piconewtons,pN,pN,1E-12,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,pound-force,pounds-force,lbf,lbf,4.448222,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,poundal,poundals,pdl,pdl,0.138255,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,teranewton,teranewtons,TN,TN,1000000000000,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,ton-force,tons-force,2000 lbf,2000 lbf,8896.443,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,yoctonewton,yoctonewtons,yN,yN,1E-24,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,yottanewton,yottanewtons,YN,YN,1E+024,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,zeptonewton,zeptonewtons,zN,zN,1E-21,0 -Force,1,1,-2,0,0,0,0,false,false,false,false,false,false,zettanewton,zettanewtons,ZN,ZN,1E+021,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,attohertz,attohertz,aHz,aHz,1E-18,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,centihertz,centihertz,cHz,cHz,0.01,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,cycle per day,cycles per day,1/d,1/d,1.15740740740741E-05,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,cycle per hour,cycles per hour,1/h,1/h,0.000277777777777778,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,cycle per minute,cycles per minute,1/min,1/min,0.0166666666666667,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,cycle per shake,cycles per shake,100 MHz,100 MHz,100000000,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,cycle per year,cycles per year,1/a,1/a,3.17097919837646E-08,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,decahertz,decahertz,daHz,daHz,10,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,decihertz,decihertz,dHz,dHz,0.1,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,exahertz,exahertz,EHz,EHz,1E+018,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,femtohertz,femtohertz,fHz,fHz,1E-15,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,gigahertz,gigahertz,GHz,GHz,1000000000,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,hectohertz,hectohertz,hHz,hHz,100,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,hertz,hertz,Hz,Hz,1,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,kilohertz,kilohertz,kHz,kHz,1000,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,megahertz,megahertz,MHz,MHz,1000000,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,microhertz,microhertz,µHz,uHz,0.000001,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,millihertz,millihertz,mHz,mHz,0.001,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,nanohertz,nanohertz,nHz,nHz,0.000000001,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,petahertz,petahertz,PHz,PHz,1000000000000000,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,picohertz,picohertz,pHz,pHz,1E-12,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,terahertz,terahertz,THz,THz,1000000000000,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,yoctohertz,yoctohertz,yHz,yHz,1E-24,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,yottahertz,yottahertz,YHz,YHz,1E+024,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,zeptohertz,zeptohertz,zHz,zHz,1E-21,0 -Frequency,0,0,-1,0,0,0,0,false,false,false,false,false,false,zettahertz,zettahertz,ZHz,ZHz,1E+021,0 -FrequencyDrift,0,0,-2,0,0,0,0,false,false,false,false,false,false,gigahertz per second,gigahertz per second,GHz/s,GHz/s,1000000000,0 -FrequencyDrift,0,0,-2,0,0,0,0,false,false,false,false,false,false,hertz per second,hertz per second,Hz/s,Hz/s,1,0 -FrequencyDrift,0,0,-2,0,0,0,0,false,false,false,false,false,false,kilohertz per second,kilohertz per second,kHz/s,kHz/s,1000,0 -FrequencyDrift,0,0,-2,0,0,0,0,false,false,false,false,false,false,megahertz per second,megahertz per second,MHz/s,MHz/s,1000000,0 -FrequencyDrift,0,0,-2,0,0,0,0,false,false,false,false,false,false,terahertz per second,terahertz per second,THz/s,THz/s,1000000000000,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,attogram square meter per second squared kelvin,attogram square meters per second squared kelvin,ag · m²/(s² · K),ag*m^2/(s^2*K),1E-21,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,attojoule per kelvin,attojoules per kelvin,aJ/K,aJ/K,1E-18,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,Boltzmann constant,Boltzmann constants,k,k,1.380649E-23,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per degree Fahrenheit,British thermal units (IT) per degree Fahrenheit,Btu (IT)/°F,Btu (IT)/degF,1899.1008,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,British thermal unit per degree Fahrenheit,British thermal units per degree Fahrenheit,Btu/°F,Btu/degF,1897.83,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,calorie per kelvin,calories per kelvin,cal/K,cal/K,4.184,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,centigram square meter per second squared kelvin,centigram square meters per second squared kelvin,cg · m²/(s² · K),cg*m^2/(s^2*K),0.00001,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,centijoule per kelvin,centijoules per kelvin,cJ/K,cJ/K,0.01,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,decagram square meter per second squared kelvin,decagram square meters per second squared kelvin,dag · m²/(s² · K),dag*m^2/(s^2*K),0.01,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,decajoule per kelvin,decajoules per kelvin,daJ/K,daJ/K,10,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,decigram square meter per second squared kelvin,decigram square meters per second squared kelvin,dg · m²/(s² · K),dg*m^2/(s^2*K),0.0001,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,decijoule per kelvin,decijoules per kelvin,dJ/K,dJ/K,0.1,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,exagram square meter per second squared kelvin,exagram square meters per second squared kelvin,Eg · m²/(s² · K),Eg*m^2/(s^2*K),1000000000000000,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,exajoule per kelvin,exajoules per kelvin,EJ/K,EJ/K,1E+018,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,femtogram square meter per second squared kelvin,femtogram square meters per second squared kelvin,fg · m²/(s² · K),fg*m^2/(s^2*K),1E-18,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,femtojoule per kelvin,femtojoules per kelvin,fJ/K,fJ/K,1E-15,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,gigagram square meter per second squared kelvin,gigagram square meters per second squared kelvin,Gg · m²/(s² · K),Gg*m^2/(s^2*K),1000000,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,gigajoule per kelvin,gigajoules per kelvin,GJ/K,GJ/K,1000000000,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,gram square meter per second squared kelvin,gram square meters per second squared kelvin,g · m²/(s² · K),g*m^2/(s^2*K),0.001,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,hectogram square meter per second squared kelvin,hectogram square meters per second squared kelvin,hg · m²/(s² · K),hg*m^2/(s^2*K),0.1,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,hectojoule per kelvin,hectojoules per kelvin,hJ/K,hJ/K,100,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,joule per degree celsius,joules per degree celsius,J/°C,J/degC,1,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,joule per kelvin,joules per kelvin,J/K,J/K,1,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,kilogram square meter per second squared kelvin,kilogram square meters per second squared kelvin,kg · m²/(s² · K),kg*m^2/(s^2*K),1,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,kilojoule per degree celsius,kilojoules per degree celsius,kJ/°C,kJ/degC,1000,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,kilojoule per kelvin,kilojoules per kelvin,kJ/K,kJ/K,1000,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,megagram square meter per second squared kelvin,megagram square meters per second squared kelvin,Mg · m²/(s² · K),Mg*m^2/(s^2*K),1000,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,megajoule per kelvin,megajoules per kelvin,MJ/K,MJ/K,1000000,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,microgram square meter per second squared kelvin,microgram square meters per second squared kelvin,µg · m²/(s² · K),ug*m^2/(s^2*K),0.000000001,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,microjoule per kelvin,microjoules per kelvin,µJ/K,uJ/K,0.000001,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,milligram square meter per second squared kelvin,milligram square meters per second squared kelvin,mg · m²/(s² · K),mg*m^2/(s^2*K),0.000001,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,millijoule per degree celsius,millijoules per degree celsius,mJ/°C,mJ/degC,0.001,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,millijoule per kelvin,millijoules per kelvin,mJ/K,mJ/K,0.001,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,nanogram square meter per second squared kelvin,nanogram square meters per second squared kelvin,ng · m²/(s² · K),ng*m^2/(s^2*K),1E-12,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,nanojoule per kelvin,nanojoules per kelvin,nJ/K,nJ/K,0.000000001,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,petagram square meter per second squared kelvin,petagram square meters per second squared kelvin,Pg · m²/(s² · K),Pg*m^2/(s^2*K),1000000000000,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,petajoule per kelvin,petajoules per kelvin,PJ/K,PJ/K,1000000000000000,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,picogram square meter per second squared kelvin,picogram square meters per second squared kelvin,pg · m²/(s² · K),pg*m^2/(s^2*K),1E-15,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,picojoule per kelvin,picojoules per kelvin,pJ/K,pJ/K,1E-12,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,teragram square meter per second squared kelvin,teragram square meters per second squared kelvin,Tg · m²/(s² · K),Tg*m^2/(s^2*K),1000000000,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,terajoule per kelvin,terajoules per kelvin,TJ/K,TJ/K,1000000000000,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,yoctogram square meter per second squared kelvin,yoctogram square meters per second squared kelvin,yg · m²/(s² · K),yg*m^2/(s^2*K),1E-27,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,yoctojoule per kelvin,yoctojoules per kelvin,yJ/K,yJ/K,1E-24,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,yottagram square meter per second squared kelvin,yottagram square meters per second squared kelvin,Yg · m²/(s² · K),Yg*m^2/(s^2*K),1E+021,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,yottajoule per kelvin,yottajoules per kelvin,YJ/K,YJ/K,1E+024,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,zeptogram square meter per second squared kelvin,zeptogram square meters per second squared kelvin,zg · m²/(s² · K),zg*m^2/(s^2*K),1E-24,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,zeptojoule per kelvin,zeptojoules per kelvin,zJ/K,zJ/K,1E-21,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,zettagram square meter per second squared kelvin,zettagram square meters per second squared kelvin,Zg · m²/(s² · K),Zg*m^2/(s^2*K),1E+018,0 -HeatCapacity,2,1,-2,0,-1,0,0,false,false,false,false,false,false,zettajoule per kelvin,zettajoules per kelvin,ZJ/K,ZJ/K,1E+021,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,attowatt per square meter,attowatts per square meter,aW/m²,aW/m^2,1E-18,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,centiwatt per square meter,centiwatts per square meter,cW/m²,cW/m^2,0.01,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,decawatt per square meter,decawatts per square meter,daW/m²,daW/m^2,10,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,deciwatt per square meter,deciwatts per square meter,dW/m²,dW/m^2,0.1,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,exawatt per square meter,exawatts per square meter,EW/m²,EW/m^2,1E+018,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,femtowatt per square meter,femtowatts per square meter,fW/m²,fW/m^2,1E-15,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,gigawatt per square meter,gigawatts per square meter,GW/m²,GW/m^2,1000000000,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,hectowatt per square meter,hectowatts per square meter,hW/m²,hW/m^2,100,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,kilowatt per square meter,kilowatts per square meter,kW/m²,kW/m^2,1000,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,megawatt per square meter,megawatts per square meter,MW/m²,MW/m^2,1000000,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,microwatt per square meter,microwatts per square meter,µW/m²,uW/m^2,0.000001,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,milliwatt per square meter,milliwatts per square meter,mW/m²,mW/m^2,0.001,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,nanowatt per square meter,nanowatts per square meter,nW/m²,nW/m^2,0.000000001,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,petawatt per square meter,petawatts per square meter,PW/m²,PW/m^2,1000000000000000,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,picowatt per square meter,picowatts per square meter,pW/m²,pW/m^2,1E-12,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,terawatt per square meter,terawatts per square meter,TW/m²,TW/m^2,1000000000000,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,watt per square centimeter,watts per square centimeter,W/cm²,W/cm^2,10000,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,watt per square meter,watts per square meter,W/m²,W/m^2,1,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,watt per square millimeter,watts per square millimeter,W/mm²,W/mm^2,1000000,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,yoctowatt per square meter,yoctowatts per square meter,yW/m²,yW/m^2,1E-24,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,yottawatt per square meter,yottawatts per square meter,YW/m²,YW/m^2,1E+024,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,zeptowatt per square meter,zeptowatts per square meter,zW/m²,zW/m^2,1E-21,0 -HeatFluxDensity,0,1,-3,0,0,0,0,false,false,false,false,false,false,zettawatt per square meter,zettawatts per square meter,ZW/m²,ZW/m^2,1E+021,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,attogram per second cubed kelvin,attograms per second cubed kelvin,ag/(s³ · K),ag/(s^3*K),1E-21,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,attowatt per square meter kelvin,attowatts per square meter kelvin,aW/(m² · K),aW/(m^2*K),1E-18,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per hour square foot degree Fahrenheit,British thermal units (IT) per hour square foot degree Fahrenheit,Btu (IT)/(hr · ft² · °F),Btu (IT)/(hr*ft^2*degF),5.67826413430605,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per hour square inch degree Fahrenheit,British thermal units (IT) per hour square inch degree Fahrenheit,Btu (IT)/(hr · in² · °F),Btu (IT)/(hr*in^2*degF),817.670035340071,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per minute square foot degree Fahrenheit,British thermal units (IT) per minute square foot degree Fahrenheit,Btu (IT)/(min · ft² · °F),Btu (IT)/(min*ft^2*degF),340.695848058363,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per minute square inch degree Fahrenheit,British thermal units (IT) per minute square inch degree Fahrenheit,Btu (IT)/(min · in² · °F),Btu (IT)/(min*in^2*degF),49060.2021204043,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per second square foot degree Fahrenheit,British thermal units (IT) per second square foot degree Fahrenheit,Btu (IT)/(s · ft² · °F),Btu (IT)/(s*ft^2*degF),20441.7508835018,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per second square inch degree Fahrenheit,British thermal units (IT) per second square inch degree Fahrenheit,Btu (IT)/(s · in² · °F),Btu (IT)/(s*in^2*degF),2943612.12722425,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit per hour square foot degree Fahrenheit,British thermal units per hour square foot degree Fahrenheit,Btu/(hr · ft² · °F),Btu/(hr*ft^2*degF),5.67446447392895,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit per hour square inch degree Fahrenheit,British thermal units per hour square inch degree Fahrenheit,Btu/(hr · in² · °F),Btu/(hr*in^2*degF),817.122884245769,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit per minute square foot degree Fahrenheit,British thermal units per minute square foot degree Fahrenheit,Btu/(min · ft² · °F),Btu/(min*ft^2*degF),340.467868435737,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit per minute square inch degree Fahrenheit,British thermal units per minute square inch degree Fahrenheit,Btu/(min · in² · °F),Btu/(min*in^2*degF),49027.3730547461,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit per second square foot degree Fahrenheit,British thermal units per second square foot degree Fahrenheit,Btu/(s · ft² · °F),Btu/(s*ft^2*degF),20428.0721061442,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,British thermal unit per second square inch degree Fahrenheit,British thermal units per second square inch degree Fahrenheit,Btu/(s · in² · °F),Btu/(s*in^2*degF),2941642.38328477,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,centigram per second cubed kelvin,centigrams per second cubed kelvin,cg/(s³ · K),cg/(s^3*K),0.00001,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,centiwatt per square meter kelvin,centiwatts per square meter kelvin,cW/(m² · K),cW/(m^2*K),0.01,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,decagram per second cubed kelvin,decagrams per second cubed kelvin,dag/(s³ · K),dag/(s^3*K),0.01,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,decawatt per square meter kelvin,decawatts per square meter kelvin,daW/(m² · K),daW/(m^2*K),10,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,decigram per second cubed kelvin,decigrams per second cubed kelvin,dg/(s³ · K),dg/(s^3*K),0.0001,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,deciwatt per square meter kelvin,deciwatts per square meter kelvin,dW/(m² · K),dW/(m^2*K),0.1,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,exagram per second cubed kelvin,exagrams per second cubed kelvin,Eg/(s³ · K),Eg/(s^3*K),1000000000000000,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,exawatt per square meter kelvin,exawatts per square meter kelvin,EW/(m² · K),EW/(m^2*K),1E+018,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,femtogram per second cubed kelvin,femtograms per second cubed kelvin,fg/(s³ · K),fg/(s^3*K),1E-18,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,femtowatt per square meter kelvin,femtowatts per square meter kelvin,fW/(m² · K),fW/(m^2*K),1E-15,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,gigagram per second cubed kelvin,gigagrams per second cubed kelvin,Gg/(s³ · K),Gg/(s^3*K),1000000,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,gigawatt per square meter kelvin,gigawatts per square meter kelvin,GW/(m² · K),GW/(m^2*K),1000000000,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,gram per second cubed kelvin,grams per second cubed kelvin,g/(s³ · K),g/(s^3*K),0.001,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,hectogram per second cubed kelvin,hectograms per second cubed kelvin,hg/(s³ · K),hg/(s^3*K),0.1,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,hectowatt per square meter kelvin,hectowatts per square meter kelvin,hW/(m² · K),hW/(m^2*K),100,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,joule per second square meter degree celsius,joules per second square meter degree celsius,J/(s · m² · °C),J/(s*m^2*degC),1,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,joule per second square meter kelvin,joules per second square meter kelvin,J/(s · m² · K),J/(s*m^2*K),1,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,kilogram per second cubed degree celsius,kilograms per second cubed degree celsius,kg/(s³ · °C),kg/(s^3*degC),1,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,kilogram per second cubed kelvin,kilograms per second cubed kelvin,kg/(s³ · K),kg/(s^3*K),1,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,kilowatt per square meter kelvin,kilowatts per square meter kelvin,kW/(m² · K),kW/(m^2*K),1000,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,megagram per second cubed kelvin,megagrams per second cubed kelvin,Mg/(s³ · K),Mg/(s^3*K),1000,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,megawatt per square meter kelvin,megawatts per square meter kelvin,MW/(m² · K),MW/(m^2*K),1000000,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,microgram per second cubed kelvin,micrograms per second cubed kelvin,µg/(s³ · K),ug/(s^3*K),0.000000001,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,microwatt per square meter kelvin,microwatts per square meter kelvin,µW/(m² · K),uW/(m^2*K),0.000001,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,milligram per second cubed kelvin,milligrams per second cubed kelvin,mg/(s³ · K),mg/(s^3*K),0.000001,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,milliwatt per square meter kelvin,milliwatts per square meter kelvin,mW/(m² · K),mW/(m^2*K),0.001,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,nanogram per second cubed kelvin,nanograms per second cubed kelvin,ng/(s³ · K),ng/(s^3*K),1E-12,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,nanowatt per square meter kelvin,nanowatts per square meter kelvin,nW/(m² · K),nW/(m^2*K),0.000000001,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,petagram per second cubed kelvin,petagrams per second cubed kelvin,Pg/(s³ · K),Pg/(s^3*K),1000000000000,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,petawatt per square meter kelvin,petawatts per square meter kelvin,PW/(m² · K),PW/(m^2*K),1000000000000000,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,picogram per second cubed kelvin,picograms per second cubed kelvin,pg/(s³ · K),pg/(s^3*K),1E-15,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,picowatt per square meter kelvin,picowatts per square meter kelvin,pW/(m² · K),pW/(m^2*K),1E-12,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,teragram per second cubed kelvin,teragrams per second cubed kelvin,Tg/(s³ · K),Tg/(s^3*K),1000000000,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,terawatt per square meter kelvin,terawatts per square meter kelvin,TW/(m² · K),TW/(m^2*K),1000000000000,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per square centimeter degree celsius,watts per square centimeter degree celsius,W/(cm² · °C),W/(cm^2*degC),10000,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per square kilometer degree celsius,watts per square kilometer degree celsius,W/(km² · °C),W/(km^2*degC),0.000001,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per square meter degree celsius,watts per square meter degree celsius,W/(m² · °C),W/(m^2*degC),1,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per square meter kelvin,watts per square meter kelvin,W/(m² · K),W/(m^2*K),1,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per square millimeter degree celsius,watts per square millimeter degree celsius,W/(mm² · °C),W/(mm^2*degC),1000000,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,yoctogram per second cubed kelvin,yoctograms per second cubed kelvin,yg/(s³ · K),yg/(s^3*K),1E-27,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,yoctowatt per square meter kelvin,yoctowatts per square meter kelvin,yW/(m² · K),yW/(m^2*K),1E-24,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,yottagram per second cubed kelvin,yottagrams per second cubed kelvin,Yg/(s³ · K),Yg/(s^3*K),1E+021,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,yottawatt per square meter kelvin,yottawatts per square meter kelvin,YW/(m² · K),YW/(m^2*K),1E+024,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,zeptogram per second cubed kelvin,zeptograms per second cubed kelvin,zg/(s³ · K),zg/(s^3*K),1E-24,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,zeptowatt per square meter kelvin,zeptowatts per square meter kelvin,zW/(m² · K),zW/(m^2*K),1E-21,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,zettagram per second cubed kelvin,zettagrams per second cubed kelvin,Zg/(s³ · K),Zg/(s^3*K),1E+018,0 -HeatTransfer,0,1,-3,0,-1,0,0,false,false,false,false,false,false,zettawatt per square meter kelvin,zettawatts per square meter kelvin,ZW/(m² · K),ZW/(m^2*K),1E+021,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,abhenry,abhenries,abH,abH,0.000000001,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,attohenry,attohenries,aH,aH,1E-18,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,centihenry,centihenries,cH,cH,0.01,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,decahenry,decahenries,daH,daH,10,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,decihenry,decihenries,dH,dH,0.1,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,exahenry,exahenries,EH,EH,1E+018,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,femtohenry,femtohenries,fH,fH,1E-15,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,gigahenry,gigahenries,GH,GH,1000000000,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,hectohenry,hectohenries,hH,hH,100,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,henry,henries,H,H,1,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,kilohenry,kilohenries,kH,kH,1000,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,megahenry,megahenries,MH,MH,1000000,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,microhenry,microhenries,µH,uH,0.000001,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,millihenry,millihenries,mH,mH,0.001,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,nanohenry,nanohenries,nH,nH,0.000000001,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,petahenry,petahenries,PH,PH,1000000000000000,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,picohenry,picohenries,pH,pH,1E-12,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,stathenry,stathenries,statH,statH,898755291711.548,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,terahenry,terahenries,TH,TH,1000000000000,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,yoctohenry,yoctohenries,yH,yH,1E-24,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,yottahenry,yottahenries,YH,YH,1E+024,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,zeptohenry,zeptohenries,zH,zH,1E-21,0 -Inductance,2,1,-2,-2,0,0,0,false,false,false,false,false,false,zettahenry,zettahenries,ZH,ZH,1E+021,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,bit,bits,b,bit,0.125,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,byte,bytes,B,B,1,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,crumb,crumbs,crumb,crumb,0.25,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,deciban,decibans,deciban,deciban,0.041524101186092,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,exabit,exabits,Eb,Eb,1.25E+017,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,exabyte,exabytes,EB,EB,1E+018,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,exbibit,exbibits,Eib,Eib,1.44115188075856E+017,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,exbibyte,exbibytes,EiB,EiB,1.15292150460685E+018,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,gibibit,gibibits,Gib,Gib,134217728,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,gibibyte,gibibytes,GiB,GiB,1073741824,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,gigabit,gigabits,Gb,Gb,125000000,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,gigabyte,gigabytes,GB,GB,1000000000,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,hartley,hartleys,Hart,Hart,0.41524101186092,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,kibibit,kibibits,Kib,Kib,128,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,kibibyte,kibibytes,KiB,KiB,1024,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,kilobit,kilobits,kb,kb,125,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,kilobyte,kilobytes,kB,kB,1000,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,mebibit,mebibits,Mib,Mib,131072,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,mebibyte,mebibytes,MiB,MiB,1048576,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,megabit,megabits,Mb,Mb,125000,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,megabyte,megabytes,MB,MB,1000000,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,natural unit of uniformation,natural units of information,nat,nat,0.18033688011112,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,nibble,nibbles,nibble,nibble,0.5,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,octet,octets,o,o,1,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,pebibit,pebibits,Pib,Pib,140737488355328,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,pebibyte,pebibytes,PiB,PiB,1125899906842624,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,petabit,petabits,Pb,Pb,125000000000000,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,petabyte,petabytes,PB,PB,1000000000000000,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,shannon,shannons,Sh,Sh,0.125,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,tibibit,tibibits,Tib,Tib,137438953472,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,tibibyte,tibibytes,TiB,TiB,1099511627776,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,terabit,terabits,Tb,Tb,125000000000,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,terabyte,terabytes,TB,TB,1000000000000,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,trit,trits,trit,trit,0.198120312590145,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,yobibit,yobibits,Yib,Yib,1.51115727451829E+023,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,yobibyte,yobibytes,YiB,YiB,1.20892581961463E+024,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,yottabit,yottabits,Yb,Yb,1.25E+023,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,yottabyte,yottabytes,YB,YB,1E+024,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,zebibit,zebibits,Zib,Zib,1.47573952589676E+020,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,zebibyte,zebibytes,ZiB,ZiB,1.18059162071741E+021,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,zettabit,zettabits,Zb,Zb,1.25E+020,0 -Information,0,0,0,0,0,0,0,false,false,true,false,false,false,zettabyte,zettabytes,ZB,ZB,1E+021,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,bit per second,bits per second,b/s,b/s,0.125,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,byte per second,bytes per second,B/s,B/s,1,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,exabit per second,exabits per second,Eb/s,Eb/s,1.25E+017,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,exabyte per second,exabytes per second,EB/s,EB/s,1E+018,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,exbibit per second,exbibits per second,Eib/s,Eib/s,1.44115188075856E+017,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,exbibyte per second,exbibytes per second,EiB/s,EiB/s,1.15292150460685E+018,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,gibibit per second,gibibits per second,Gib/s,Gib/s,134217728,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,gibibyte per second,gibibytes per second,GiB/s,GiB/s,1073741824,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,gigabit per second,gigabits per second,Gb/s,Gb/s,125000000,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,gigabyte per second,gigabytes per second,GB/s,GB/s,1000000000,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,kibibit per second,kibibits per second,Kib/s,Kib/s,128,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,kibibyte per second,kibibytes per second,KiB/s,KiB/s,1024,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,kilobit per second,kilobits per second,kb/s,kb/s,125,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,kilobyte per second,kilobytes per second,kB/s,kB/s,1000,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,mebibit per second,mebibits per second,Mib/s,Mib/s,131072,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,mebibyte per second,mebibytes per second,MiB/s,MiB/s,1048576,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,megabit per second,megabits per second,Mb/s,Mb/s,125000,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,megabyte per second,megabytes per second,MB/s,MB/s,1000000,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,octet per second,octets per second,o/s,o/s,1,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,pebibit per second,pebibits per second,Pib/s,Pib/s,140737488355328,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,pebibyte per second,pebibytes per second,PiB/s,PiB/s,1125899906842624,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,petabit per second,petabits per second,Pb/s,Pb/s,125000000000000,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,petabyte per second,petabytes per second,PB/s,PB/s,1000000000000000,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,tebibit per second,tebibits per second,Tib/s,Tib/s,137438953472,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,tebibyte per second,tebibytes per second,TiB/s,TiB/s,1099511627776,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,terabit per second,terabits per second,Tb/s,Tb/s,125000000000,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,terabyte per second,terabytes per second,TB/s,TB/s,1000000000000,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,yobibit per second,yobibits per second,Yib/s,Yib/s,1.51115727451829E+023,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,yobibyte per second,yobibytes per second,YiB/s,YiB/s,1.20892581961463E+024,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,yottabit per second,yottabits per second,Yb/s,Yb/s,1.25E+023,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,yottabyte per second,yottabytes per second,YB/s,YB/s,1E+024,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,zebibit per second,zebibits per second,Zib/s,Zib/s,1.47573952589676E+020,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,zebibyte per second,zebibytes per second,ZiB/s,ZiB/s,1.18059162071741E+021,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,zettabit per second,zettabits per second,Zb/s,Zb/s,1.25E+020,0 -InformationRate,0,0,-1,0,0,0,0,false,true,false,false,false,false,zettabyte per second,zettabytes per second,ZB/s,ZB/s,1E+021,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,attosecond per meter,attoseconds per meter,am/s,am/s (inverse),1E-18,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,centisecond per meter,centiseconds per meter,cm/s,cm/s (inverse),0.01,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,decasecond per meter,decaseconds per meter,dam/s,dam/s (inverse),10,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,decisecond per meter,deciseconds per meter,dm/s,dm/s (inverse),0.1,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,exasecond per meter,exaseconds per meter,Em/s,Em/s (inverse),1E+018,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,femtosecond per meter,femtoseconds per meter,fm/s,fm/s (inverse),1E-15,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,gigasecond per meter,gigaseconds per meter,Gm/s,Gm/s (inverse),1000000000,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,hectosecond per meter,hectoseconds per meter,hm/s,hm/s (inverse),100,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,hour per foot,hours per foot,h/ft,h/ft (inverse),11811.0236220472,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,hour per kilometer,hours per kilometer,h/km,h/km (inverse),3.6,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,hour per mile,hours per mile,h/mi,h/mi (inverse),2.2369362920544,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,kilosecond per meter,kiloseconds per meter,km/s,km/s (inverse),1000,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,megasecond per meter,megaseconds per meter,Mm/s,Mm/s (inverse),1000000,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,microsecond per meter,microseconds per meter,µm/s,um/s (inverse),0.000001,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,millisecond per meter,milliseconds per meter,mm/s,mm/s (inverse),0.001,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,minute per foot,minutes per foot,min/ft,min/ft (inverse),196.850393700787,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,minute per mile,minutes per mile,min/mi,min/mi (inverse),0.03728227153,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,nanosecond per meter,nanoseconds per meter,nm/s,nm/s (inverse),0.000000001,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,petasecond per meter,petaseconds per meter,Pm/s,Pm/s (inverse),1000000000000000,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,picosecond per meter,picoseconds per meter,pm/s,pm/s (inverse),1E-12,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,second per foot,seconds per foot,s/ft,s/ft (inverse),3.28083989501312,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,second per inch,seconds per inch,s/in,s/in (inverse),39.3700787401575,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,second per meter,seconds per meter,m/s,m/s (inverse),1,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,second per mile,seconds per mile,s/mi,s/mi (inverse),0.000621371192237334,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,terasecond per meter,teraseconds per meter,Tm/s,Tm/s (inverse),1000000000000,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,yoctosecond per meter,yoctoseconds per meter,ym/s,ym/s (inverse),1E-24,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,yottasecond per meter,yottaseconds per meter,Ym/s,Ym/s (inverse),1E+024,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,zeptosecond per meter,zeptoseconds per meter,zm/s,zm/s (inverse),1E-21,0 -InverseVelocity,-1,0,1,0,0,0,0,false,false,false,false,false,false,zettasecond per meter,zettaseconds per meter,Zm/s,Zm/s (inverse),1E+021,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,attometer per second cubed,attometers per second cubed,am/s³,am/s^3,1E-18,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,centimeter per second cubed,centimeters per second cubed,cm/s³,cm/s^3,0.01,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,decameter per second cubed,decameters per second cubed,dam/s³,dam/s^3,10,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,decimeter per second cubed,decimeters per second cubed,dm/s³,dm/s^3,0.1,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,exameter per second cubed,exameters per second cubed,Em/s³,Em/s^3,1E+018,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,femtometer per second cubed,femtometers per second cubed,fm/s³,fm/s^3,1E-15,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,foot per second cubed,feet per second cubed,ft/s³,ft/s^3,0.3048,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,gigameter per second cubed,gigameters per second cubed,Gm/s³,Gm/s^3,1000000000,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,hectometer per second cubed,hectometers per second cubed,hm/s³,hm/s^3,100,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,inch per second cubed,inches per second cubed,in/s³,in/s^3,0.0254,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,kilometer per minute cubed,kilometers per minute cubed,km/min³,km/min^3,0.00462962962962963,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,kilometer per second cubed,kilometers per second cubed,km/s³,km/s^3,1000,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,megameter per second cubed,megameters per second cubed,Mm/s³,Mm/s^3,1000000,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,meter per second cubed,meters per second cubed,m/s³,m/s^3,1,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,micrometer per second cubed,micrometers per second cubed,µm/s³,um/s^3,0.000001,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,millimeter per second cubed,millimeters per second cubed,mm/s³,mm/s^3,0.001,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,nanometer per second cubed,nanometers per second cubed,nm/s³,nm/s^3,0.000000001,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,petameter per second cubed,petameters per second cubed,Pm/s³,Pm/s^3,1000000000000000,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,picometer per second cubed,picometers per second cubed,pm/s³,pm/s^3,1E-12,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,terameter per second cubed,terameters per second cubed,Tm/s³,Tm/s^3,1000000000000,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,yoctometer per second cubed,yoctometers per second cubed,ym/s³,ym/s^3,1E-24,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,yottameter per second cubed,yottameters per second cubed,Ym/s³,Ym/s^3,1E+024,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,zeptometer per second cubed,zeptometers per second cubed,zm/s³,zm/s^3,1E-21,0 -Jerk,1,0,-3,0,0,0,0,false,false,false,false,false,false,zettameter per second cubed,zettameters per second cubed,Zm/s³,Zm/s^3,1E+021,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,ångström,ångströms,Å,ang,1E-10,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,astronomical unit,astronomical units,ua,ua,149597900000,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,atomic unit of length,atomic units of length,a.u. of length,a.u. of length,5.29177210903E-11,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,attometer,attometers,am,am,1E-18,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,bohr radius,bohr radiuses,a₀,a\0,5.29177210903E-11,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,centimeter,centimeters,cm,cm,0.01,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,chain,chains,ch,ch,20.11684,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,decameter,decameters,dam,dam,10,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,decimeter,decimeters,dm,dm,0.1,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,exameter,exameters,Em,Em,1E+018,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,fathom,fathoms,fathom,fathom,1.828804,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,femtometer,femtometers,fm,fm,1E-15,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,fermi,fermis,fermi,fermi,1E-15,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,foot,feet,ft,ft,0.3048,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,foot (U.S. survey),feet (U.S. survey),ft (U.S. survey),ft (U.S. survey),0.3048006,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,gigameter,gigameters,Gm,Gm,1000000000,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,hectometer,hectometers,hm,hm,100,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,inch,inches,in,in,0.0254,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,kilometer,kilometers,km,km,1000,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,light year,light years,l. y.,l. y.,9.46073E+015,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,megameter,megameters,Mm,Mm,1000000,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,meter,meters,m,m,1,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,microinch,microinches,μin,uin,0.0000000254,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,micrometer,micrometers,µm,um,0.000001,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,micron,microns,μ,u,0.000001,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,mil,mils,0.001 in,0.001 in,0.0000254,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,mile,miles,mi,mi,1609.344,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,mile (U.S. survey),miles (U.S. survey),mi (U.S. survey),mi (U.S. survey),1609.347,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,millimeter,millimeters,mm,mm,0.001,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,nanometer,nanometers,nm,nm,0.000000001,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,nautical mile,nautical miles,M,M,1852,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,parsec,parsecs,pc,pc,3.085678E+016,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,petameter,petameters,Pm,Pm,1000000000000000,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,pica (computer),picas (computer),1/6 in (computer),1/6 in (computer),0.00423333333333333,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,pica (printer's),picas (printer's),1/6 in,1/6 in,0.004217518,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,picometer,picometers,pm,pm,1E-12,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,point (computer),points (computer),1/72 in (computer),1/72 in (computer),0.0003527778,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,point (printer's),points (printer's),1/72 in,1/72 in,0.0003514598,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,rod,rods,rd,rd,5.02921,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,terameter,terameters,Tm,Tm,1000000000000,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,yard,yards,yd,yd,0.9144,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,yoctometer,yoctometers,ym,ym,1E-24,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,yottameter,yottameters,Ym,Ym,1E+024,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,zeptometer,zeptometers,zm,zm,1E-21,0 -Length,1,0,0,0,0,0,0,false,false,false,false,false,false,zettameter,zettameters,Zm,Zm,1E+021,0 -LinearDensityOfStates,-3,-1,2,0,0,0,0,false,true,false,false,false,false,state per centimeter electronvolt,states per centimeter electronvolt,1/(cm · eV),1/(cm*eV),6.24150907446076E+020,0 -LinearDensityOfStates,-3,-1,2,0,0,0,0,false,true,false,false,false,false,state per centimeter joule,states per centimeter joule,1/(cm · J),1/(cm*J),100,0 -LinearDensityOfStates,-3,-1,2,0,0,0,0,false,true,false,false,false,false,state per meter joule,states per meter joule,1/(m · J),1/(m*J),1,0 -LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,gram per centimeter,grams per centimeter,g/cm,g/cm,0.1,0 -LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,gram per kilometer,grams per kilometer,g/km,g/km,0.000001,0 -LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,kilogram per meter,kilograms per meter,kg/m,kg/m,1,0 -LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,ounce per foot,ounces per foot,oz/ft,oz/ft,0.0930102362204724,0 -LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,ounce per inch,ounces per inch,oz/in,oz/in,1.11612283464567,0 -LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,pound per foot,pounds per foot,lb/ft,lb/ft,1.48816404199475,0 -LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,pound per inch,pounds per inch,lb/in,lb/in,17.857968503937,0 -LinearMassDensity,-1,1,0,0,0,0,0,false,false,false,false,false,false,pound per yard,pounds per yard,lb/yd,lb/yd,0.496054680664917,0 -LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per centimeter,per centimeter,cm⁻¹,cm^-1 (number density),100,0 -LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per decimeter,per decimeter,dm⁻¹,dm^-1 (number density),10,0 -LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per foot,per foot,ft⁻¹,ft^-1,3.28083989501312,0 -LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,foot (U.S. survey),foot (U.S. survey),ft (U.S. survey),ft (U.S. survey) (number density),3.28083343667959,0 -LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per inch,per inch,in⁻¹,in^-1,39.3700787401575,0 -LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per kilometer,per kilometer,km⁻¹,km^-1 (number density),0.001,0 -LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per meter,per meter,m⁻¹,m^-1 (number density),1,0 -LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per mile,per mile,mi⁻¹,mi^-1,0.000621371192237334,0 -LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per mile (U.S. survey),per mile (U.S. survey),mi⁻¹ (U.S. survey),mi^-1 (U.S. survey),0.000621370033933018,0 -LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per millimeter,per millimeter,mm⁻¹,mm^-1 (number density),1000,0 -LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per nautical mile,per nautical mile,M⁻¹,M^-1,0.000539956803455724,0 -LinearNumberDensity,-1,0,0,0,0,0,0,false,true,false,false,false,false,per yard,per yard,yd⁻¹,yd^-1,1.09361329833771,0 -LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per centimeter second,per centimeter second,cm⁻¹ · s⁻¹,cm^-1*s^-1,100,0 -LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per foot second,per foot second,ft⁻¹ · s⁻¹,ft^-1*s^-1,3.28083989501312,0 -LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per foot (U.S. survey) second,per foot (U.S. survey) second,ft⁻¹ (U.S. survey) · s⁻¹,ft^-1 (U.S. survey)*s^-1,3.28083343667959,0 -LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per inch second,per inch second,in⁻¹ · s⁻¹,in^-1*s^-1,39.3700787401575,0 -LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per kilometer second,per kilometer second,km⁻¹ · s⁻¹,km^-1*s^-1,0.001,0 -LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per meter second,per meter second,m⁻¹ · s⁻¹,m^-1*s^-1,1,0 -LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per mile second,per mile second,mi⁻¹ · s⁻¹,mi^-1*s^-1,0.000621371192237334,0 -LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per mile (U.S. survey) second,per mile (U.S. survey) second,mi⁻¹ (U.S. survey) · s⁻¹,mi^-1 (U.S. survey)*s^-1,0.000621370033933018,0 -LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per millimeter second,per millimeter second,mm⁻¹ · s⁻¹,mm^-1*s^-1,1000,0 -LinearNumberRate,-1,0,-1,0,0,0,0,false,true,false,false,false,false,per yard second,per yard second,yd⁻¹ · s⁻¹,yd^-1*s^-1,1.09361329833771,0 -LinearPowerDensity,1,1,-3,0,0,0,0,false,false,false,false,false,false,watt per centimeter,watts per centimeter,W/cm,W/cm,100,0 -LinearPowerDensity,1,1,-3,0,0,0,0,false,false,false,false,false,false,watt per meter,watts per meter,W/m,W/m,1,0 -LinearPowerDensity,1,1,-3,0,0,0,0,false,false,false,false,false,false,watt per millimeter,watts per millimeter,W/mm,W/mm,1000,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,attocandela per square meter,attocandelas per square meter,acd/m²,acd/m^2,1E-18,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square centimeter,candelas per square centimeter,cd/cm²,cd/cm^2,10000,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square foot,candelas per square foot,cd/ft²,cd/ft^2,10.7639104167097,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square gigameter,candelas per square gigameter,cd/Gm²,cd/Gm^2,1E-18,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square inch,candelas per square inch,cd/in²,cd/in^2,1550.0031000062,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square kilometer,candelas per square kilometer,cd/km²,cd/km^2,0.000001,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square megameter,candelas per square megameter,cd/Mm²,cd/Mm^2,1E-12,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square meter,candelas per square meter,cd/m²,cd/m^2,1,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square micrometer,candelas per square micrometer,cd/µm²,cd/um^2,1000000000000,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square millimeter,candelas per square millimeter,cd/mm²,cd/mm^2,1000000,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square nanometer,candelas per square nanometer,cd/nm²,cd/nm^2,1E+018,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square picometer,candelas per square picometer,cd/pm²,cd/pm^2,1E+024,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,candela per square terameter,candelas per square terameter,cd/Tm²,cd/Tm^2,1E-24,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,centicandela per square meter,centicandelas per square meter,ccd/m²,ccd/m^2,0.01,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,decacandela per square meter,decacandelas per square meter,dacd/m²,dacd/m^2,10,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,decicandela per square meter,decicandelas per square meter,dcd/m²,dcd/m^2,0.1,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,exacandela per square meter,exacandelas per square meter,Ecd/m²,Ecd/m^2,1E+018,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,femtocandela per square meter,femtocandelas per square meter,fcd/m²,fcd/m^2,1E-15,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,footlambert,footlamberts,fl,fl,3.42625909963539,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,gigacandela per square meter,gigacandelas per square meter,Gcd/m²,Gcd/m^2,1000000000,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,hectocandela per square meter,hectocandelas per square meter,hcd/m²,hcd/m^2,100,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,kilocandela per square meter,kilocandelas per square meter,kcd/m²,kcd/m^2,1000,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,lambert,lamberts,la,la,3183.09886183791,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,megacandela per square meter,megacandelas per square meter,Mcd/m²,Mcd/m^2,1000000,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,microcandela per square meter,microcandelas per square meter,µcd/m²,ucd/m^2,0.000001,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,millicandela per square meter,millicandelas per square meter,mcd/m²,mcd/m^2,0.001,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,nanocandela per square meter,nanocandelas per square meter,ncd/m²,ncd/m^2,0.000000001,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,petacandela per square meter,petacandelas per square meter,Pcd/m²,Pcd/m^2,1000000000000000,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,picocandela per square meter,picocandelas per square meter,pcd/m²,pcd/m^2,1E-12,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,stilb,stilbs,sb,sb,10000,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,teracandela per square meter,teracandelas per square meter,Tcd/m²,Tcd/m^2,1000000000000,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,yoctocandela per square meter,yoctocandelas per square meter,ycd/m²,ycd/m^2,1E-24,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,yottacandela per square meter,yottacandelas per square meter,Ycd/m²,Ycd/m^2,1E+024,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,zeptocandela per square meter,zeptocandelas per square meter,zcd/m²,zcd/m^2,1E-21,0 -Luminance,-2,0,0,0,0,0,1,false,false,false,false,false,false,zettacandela per square meter,zettacandelas per square meter,Zcd/m²,Zcd/m^2,1E+021,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,attocandela,attocandelas,acd,acd,1E-18,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,candela,candelas,cd,cd,1,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,centicandela,centicandelas,ccd,ccd,0.01,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,decacandela,decacandelas,dacd,dacd,10,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,decicandela,decicandelas,dcd,dcd,0.1,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,exacandela,exacandelas,Ecd,Ecd,1E+018,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,femtocandela,femtocandelas,fcd,fcd,1E-15,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,gigacandela,gigacandelas,Gcd,Gcd,1000000000,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,hectocandela,hectocandelas,hcd,hcd,100,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,kilocandela,kilocandelas,kcd,kcd,1000,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,megacandela,megacandelas,Mcd,Mcd,1000000,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,microcandela,microcandelas,µcd,ucd,0.000001,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,millicandela,millicandelas,mcd,mcd,0.001,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,nanocandela,nanocandelas,ncd,ncd,0.000000001,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,petacandela,petacandelas,Pcd,Pcd,1000000000000000,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,picocandela,picocandelas,pcd,pcd,1E-12,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,teracandela,teracandelas,Tcd,Tcd,1000000000000,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,yoctocandela,yoctocandelas,ycd,ycd,1E-24,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,yottacandela,yottacandelas,Ycd,Ycd,1E+024,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,zeptocandela,zeptocandelas,zcd,zcd,1E-21,0 -LuminousIntensity,0,0,0,0,0,0,1,false,false,false,false,false,false,zettacandela,zettacandelas,Zcd,Zcd,1E+021,0 -MagneticFieldStrength,-1,0,0,1,0,0,0,false,false,false,false,false,false,ampere per centimeter,amperes per centimeter,A/cm,A/cm,100,0 -MagneticFieldStrength,-1,0,0,1,0,0,0,false,false,false,false,false,false,ampere per meter,amperes per meter,A/m,A/m,1,0 -MagneticFieldStrength,-1,0,0,1,0,0,0,false,false,false,false,false,false,ampere per micrometer,amperes per micrometer,A/μm,A/um,1000000,0 -MagneticFieldStrength,-1,0,0,1,0,0,0,false,false,false,false,false,false,ampere per millimeter,amperes per millimeter,A/mm,A/mm,1000,0 -MagneticFieldStrength,-1,0,0,1,0,0,0,false,false,false,false,false,false,oersted,oersteds,Oe,Oe,79.5774715459477,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,attoweber,attowebers,aWb,aWb,1E-18,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,centiweber,centiwebers,cWb,cWb,0.01,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,decaweber,decawebers,daWb,daWb,10,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,deciweber,deciwebers,dWb,dWb,0.1,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,exaweber,exawebers,EWb,EWb,1E+018,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,femtoweber,femtowebers,fWb,fWb,1E-15,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,gigaweber,gigawebers,GWb,GWb,1000000000,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,hectoweber,hectowebers,hWb,hWb,100,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,kiloweber,kilowebers,kWb,kWb,1000,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,maxwell,maxwells,Mx,Mx,0.00000001,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,megaweber,megawebers,MWb,MWb,1000000,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,microweber,microwebers,µWb,uWb,0.000001,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,milliweber,milliwebers,mWb,mWb,0.001,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,nanoweber,nanowebers,nWb,nWb,0.000000001,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,petaweber,petawebers,PWb,PWb,1000000000000000,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,picoweber,picowebers,pWb,pWb,1E-12,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,teraweber,terawebers,TWb,TWb,1000000000000,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,weber,webers,Wb,Wb,1,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,yoctoweber,yoctowebers,yWb,yWb,1E-24,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,yottaweber,yottawebers,YWb,YWb,1E+024,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,zeptoweber,zeptowebers,zWb,zWb,1E-21,0 -MagneticFlux,2,1,-2,-1,0,0,0,false,false,false,false,false,false,zettaweber,zettawebers,ZWb,ZWb,1E+021,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,attotesla,attoteslas,aT,aT,1E-18,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,centitesla,centiteslas,cT,cT,0.01,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,decatesla,decateslas,daT,daT,10,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,decitesla,deciteslas,dT,dT,0.1,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,exatesla,exateslas,ET,ET,1E+018,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,femtotesla,femtoteslas,fT,fT,1E-15,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,gamma,gammas,γ,Gamma,0.000000001,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,gauss,gauss,G,G,0.0001,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,gigatesla,gigateslas,GT,GT,1000000000,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,hectotesla,hectoteslas,hT,hT,100,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,kilotesla,kiloteslas,kT,kT,1000,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,megatesla,megateslas,MT,MT,1000000,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,microtesla,microteslas,µT,uT,0.000001,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,millitesla,milliteslas,mT,mT,0.001,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,nanotesla,nanoteslas,nT,nT,0.000000001,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,petatesla,petateslas,PT,PT,1000000000000000,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,picotesla,picoteslas,pT,pT,1E-12,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,teratesla,terateslas,TT,TT,1000000000000,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,tesla,teslas,T,T,1,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,yoctotesla,yoctoteslas,yT,yT,1E-24,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,yottatesla,yottateslas,YT,YT,1E+024,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,zeptotesla,zeptoteslas,zT,zT,1E-21,0 -MagneticFluxDensity,0,1,-2,-1,0,0,0,false,false,false,false,false,false,zettatesla,zettateslas,ZT,ZT,1E+021,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,ampere square centimeter,ampere square centimeters,A · cm²,A*cm^2,0.0001,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,ampere square meter,ampere square meters,A · m²,A*m^2,1,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,atomic unit of magnetic dipole moment, atomic units of magnetic dipole moment,ħ · e/mₑ,n<-*e/m\e,1.85480201566E-23,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,Bohr magneton,Bohr magnetons,µ(Bohr),u(Bohr),9.2740100783E-24,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,deuteron magnetic moment,deuteron magnetic moments,μ(deuteron),u(deuteron),4.330735094E-27,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,electron magnetic moment,electron magnetic moments,μₑ,u\e,-9.2847647043E-24,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,erg per gauss,ergs per gauss,erg/G,erg/G,0.001,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,helion magnetic moment,helion magnetic moments,μ(helion),u(helion),-1.074617532E-26,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,joule per tesla,joules per tesla,J/T,J/T,1,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,muon magnetic moment,muon magnetic moments,μ(muon),u(muon),-4.4904483E-26,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,neutron magnetic moment,neutron magnetic moments,μ(neutron),u(neutron),-9.6623651E-27,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,newton meter per tesla,newton meters per tesla,N · m/T,N*m/T,1,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,nuclear magneton,nuclear magnetons,μ(Nuclear),u(Nuclear),5.0507837461E-27,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,proton magnetic moment,proton magnetic moments,μ(proton),u(proton),1.41060679736E-26,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,shielded helion magnetic moment,shielded helion magnetic moments,μ’(helion),u'(helion),-1.07455309E-26,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,shielded proton magnetic moment,shielded proton magnetic moments,μ’(proton),u'(proton),1.41057056E-26,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,statampere square centimeter,statampere square centimeters,statA · cm²,statA*cm^2,3.335641E-14,0 -MagneticMoment,2,0,0,1,0,0,0,false,false,false,false,false,false,triton magnetic moment,triton magnetic moments,μ(triton),u(triton),1.5046095202E-26,0 -MagneticPermeability,1,1,-2,-2,0,0,0,false,false,false,false,false,false,henry per meter,henrys per meter,H/m,H/m,1,0 -MagneticPermeability,1,1,-2,-2,0,0,0,false,false,false,false,false,false,vacuum magnetic permeability,vacuum magnetic permeability,µ₀,u\0,1.25663706212E-06,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,attogram,attograms,ag,ag,1E-21,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,carat,carats,ct,ct,0.0002,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,centigram,centigrams,cg,cg,0.00001,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,dalton,daltons,Da,Da,1.6605390666E-27,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,decagram,decagrams,dag,dag,0.01,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,decigram,decigrams,dg,dg,0.0001,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,exagram,exagrams,Eg,Eg,1000000000000000,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,femtogram,femtograms,fg,fg,1E-18,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,gigagram,gigagrams,Gg,Gg,1000000,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,grain,grains,gr,gr,0.00006479891,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,gram,grams,g,g,0.001,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,hectogram,hectograms,hg,hg,0.1,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,hundredweight (long),hundredweight (long),cwt long,cwt long,50.80235,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,hundredweight (short),hundredweight (short),cwt short,cwt short,45.35924,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,kilogram,kilograms,kg,kg,1,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,megagram,megagrams,Mg,Mg,1000,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,microgram,micrograms,µg,ug,0.000000001,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,milligram,milligrams,mg,mg,0.000001,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,nanogram,nanograms,ng,ng,1E-12,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,ounce,ounces,oz,oz,0.02834952,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,troy ounce,troy ounces,oz t,oz t,0.03110348,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,pennyweight,pennyweight,dwt,dwt,0.001555174,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,petagram,petagrams,Pg,Pg,1000000000000,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,picogram,picograms,pg,pg,1E-15,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,pound,pounds,lb,lb,0.4535924,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,troy pound,troy pounds,lb t,lb t,0.3732417,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,slug,slugs,slug,slug,14.5939,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,teragram,teragrams,Tg,Tg,1000000000,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,ton,tons,t,t,1000,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,assay ton,assay tons,AT,AT,0.02916667,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,long ton,long tons,2240 lb,2240 lb,1016.047,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,short ton,short tons,2000 lb,2000 lb,907.1847,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,yoctogram,yoctograms,yg,yg,1E-27,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,yottagram,yottagrams,Yg,Yg,1E+021,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,zeptogram,zeptograms,zg,zg,1E-24,0 -Mass,0,1,0,0,0,0,0,false,false,false,false,false,false,zettagram,zettagrams,Zg,Zg,1E+018,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,attogram per cubic meter,attograms per cubic meter,ag/m³,ag/m^3 (mass concentration),1E-21,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,centigram per cubic meter,centigrams per cubic meter,cg/m³,cg/m^3 (mass concentration),0.00001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,decagram per cubic meter,decagrams per cubic meter,dag/m³,dag/m^3 (mass concentration),0.01,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,decigram per cubic meter,decigrams per cubic meter,dg/m³,dg/m^3 (mass concentration),0.0001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,exagram per cubic meter,exagrams per cubic meter,Eg/m³,Eg/m^3 (mass concentration),1000000000000000,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,femtogram per cubic decimeter,femtograms per cubic decimeter,fg/dm³,fg/dm^3 (mass concentration),1E-15,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,femtogram per cubic meter,femtograms per cubic meter,fg/m³,fg/m^3 (mass concentration),1E-18,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,femtogram per deciliter,femtograms per deciliter,fg/dL,fg/dL (mass concentration),1E-14,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,femtogram per liter,femtograms per liter,fg/L,fg/L (mass concentration),1E-15,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,femtogram per milliliter,femtograms per milliliter,fg/mL,fg/mL (mass concentration),1E-12,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,gigagram per cubic meter,gigagrams per cubic meter,Gg/m³,Gg/m^3 (mass concentration),1000000,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,gram per cubic decimeter,grams per cubic decimeter,g/dm³,g/dm^3 (mass concentration),1,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,gram per cubic meter,grams per cubic meter,g/m³,g/m^3 (mass concentration),0.001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,gram per deciliter,grams per deciliter,g/dL,g/dL (mass concentration),10,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,gram per liter,grams per liter,g/L,g/L (mass concentration),1,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,gram per milliliter,grams per milliliter,g/mL,g/mL (mass concentration),1000,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,hectogram per cubic meter,hectograms per cubic meter,hg/m³,hg/m^3 (mass concentration),0.1,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,kilogram per cubic decimeter,kilograms per cubic decimeter,kg/dm³,kg/dm^3 (mass concentration),1000,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,kilogram per cubic meter,kilograms per cubic meter,kg/m³,kg/m^3 (mass concentration),1,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,kilogram per deciliter,kilograms per deciliter,kg/dL,kg/dL (mass concentration),10000,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,kilogram per liter,kilograms per liter,kg/L,kg/L (mass concentration),1000,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,kilogram per milliliter,kilograms per milliliter,kg/mL,kg/mL (mass concentration),1000000,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,megagram per cubic meter,megagrams per cubic meter,Mg/m³,Mg/m^3 (mass concentration),1000,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,microgram per cubic decimeter,micrograms per cubic decimeter,μg/dm³,ug/dm^3 (mass concentration),0.000001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,microgram per cubic meter,micrograms per cubic meter,µg/m³,ug/m^3 (mass concentration),0.000000001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,microgram per deciliter,micrograms per deciliter,μg/dL,ug/dL (mass concentration),0.00001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,microgram per liter,micrograms per liter,μg/L,ug/L (mass concentration),0.000001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,microgram per milliliter,micrograms per milliliter,μg/mL,ug/mL (mass concentration),0.001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,milligram per cubic decimeter,milligrams per cubic decimeter,mg/dm³,mg/dm^3 (mass concentration),0.001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,milligram per cubic meter,milligrams per cubic meter,mg/m³,mg/m^3 (mass concentration),0.000001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,milligram per deciliter,milligrams per deciliter,mg/dL,mg/dL (mass concentration),0.01,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,milligram per liter,milligrams per liter,mg/L,mg/L (mass concentration),0.001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,milligram per milliliter,milligrams per milliliter,mg/mL,mg/mL (mass concentration),1,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,nanogram per cubic decimeter,nanograms per cubic decimeter,ng/dm³,ng/dm^3 (mass concentration),0.000000001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,nanogram per cubic meter,nanograms per cubic meter,ng/m³,ng/m^3 (mass concentration),1E-12,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,nanogram per deciliter,nanograms per deciliter,ng/dL,ng/dL (mass concentration),0.00000001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,nanogram per liter,nanograms per liter,ng/L,ng/L (mass concentration),0.000000001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,nanogram per milliliter,nanograms per milliliter,ng/mL,ng/mL (mass concentration),0.000001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,petagram per cubic meter,petagrams per cubic meter,Pg/m³,Pg/m^3 (mass concentration),1000000000000,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,picogram per cubic decimeter,picograms per cubic decimeter,pg/dm³,pg/dm^3 (mass concentration),1E-12,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,picogram per cubic meter,picograms per cubic meter,pg/m³,pg/m^3 (mass concentration),1E-15,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,picogram per deciliter,picograms per deciliter,pg/dL,pg/dL (mass concentration),1E-11,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,picogram per liter,picograms per liter,pg/L,pg/L (mass concentration),1E-12,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,picogram per milliliter,picograms per milliliter,pg/mL,pg/mL (mass concentration),0.000000001,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,teragram per cubic meter,teragrams per cubic meter,Tg/m³,Tg/m^3 (mass concentration),1000000000,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,yoctogram per cubic meter,yoctograms per cubic meter,yg/m³,yg/m^3 (mass concentration),1E-27,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,yottagram per cubic meter,yottagrams per cubic meter,Yg/m³,Yg/m^3 (mass concentration),1E+021,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,zeptogram per cubic meter,zeptograms per cubic meter,zg/m³,zg/m^3 (mass concentration),1E-24,0 -MassConcentration,-3,1,0,0,0,0,0,false,true,false,false,false,false,zettagram per cubic meter,zettagrams per cubic meter,Zg/m³,Zg/m^3 (mass concentration),1E+018,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,attogram per cubic meter,attograms per cubic meter,ag/m³,ag/m^3,1E-21,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,carat per cubic meter,carats per cubic meter,ct/m³,ct/m^3,0.0002,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,centigram per cubic meter,centigrams per cubic meter,cg/m³,cg/m^3,0.00001,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,decagram per cubic meter,decagrams per cubic meter,dag/m³,dag/m^3,0.01,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,decigram per cubic meter,decigrams per cubic meter,dg/m³,dg/m^3,0.0001,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,exagram per cubic meter,exagrams per cubic meter,Eg/m³,Eg/m^3,1000000000000000,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,femtogram per cubic meter,femtograms per cubic meter,fg/m³,fg/m^3,1E-18,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,gigagram per cubic meter,gigagrams per cubic meter,Gg/m³,Gg/m^3,1000000,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,grain per cubic meter,grains per cubic meter,gr/m³,gr/m^3,0.00006479891,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,grain per gallon,grains per gallon,gr/gal,gr/gal,0.0171180600684945,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,gram per cubic centimeter,grams per cubic centimeter,g/cm³,g/cm^3,1000,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,gram per cubic meter,grams per cubic meter,g/m³,g/m^3,0.001,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,hectogram per cubic meter,hectograms per cubic meter,hg/m³,hg/m^3,0.1,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,hundredweight (long) per cubic meter,hundredweight (long) per cubic meter,cwt long/m³,cwt long/m^3,50.80235,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,hundredweight (short) per cubic meter,hundredweight (short) per cubic meter,cwt short/m³,cwt short/m^3,45.35924,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,kilogram per cubic meter,kilograms per cubic meter,kg/m³,kg/m^3,1,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,megagram per cubic meter,megagrams per cubic meter,Mg/m³,Mg/m^3,1000,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,microgram per cubic meter,micrograms per cubic meter,µg/m³,ug/m^3,0.000000001,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,milligram per cubic meter,milligrams per cubic meter,mg/m³,mg/m^3,0.000001,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,nanogram per cubic meter,nanograms per cubic meter,ng/m³,ng/m^3,1E-12,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,ounce per cubic inch,ounces per cubic inch,oz/in³,oz/in^3,1729.99427597141,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,ounce per cubic meter,ounces per cubic meter,oz/m³,oz/m^3,0.02834952,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,ounce per gallon,ounces per gallon,oz/gal,oz/gal,7.48915045442874,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,ounce per Imperial gallon,ounces per Imperial gallon,oz/gal (UK),oz/gal (UK),6.23602260403996,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,troy ounce per cubic meter,troy ounces per cubic meter,oz t/m³,oz t/m^3,0.03110348,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,pennyweight per cubic meter,pennyweight per cubic meter,dwt/m³,dwt/m^3,0.001555174,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,petagram per cubic meter,petagrams per cubic meter,Pg/m³,Pg/m^3,1000000000000,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,picogram per cubic meter,picograms per cubic meter,pg/m³,pg/m^3,1E-15,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,pound per cubic foot,pounds per cubic foot,lb/ft³,lb/ft^3,16.01846250554,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,pound per cubic inch,pounds per cubic inch,lb/in³,lb/in^3,27679.9132974432,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,pound per cubic meter,pounds per cubic meter,lb/m³,lb/m^3,0.4535924,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,pound per cubic yard,pounds per cubic yard,lb/yd³,lb/yd^3,0.593276427892882,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,pound per gallon,pounds per gallon,lb/gal,lb/gal,119.826428404623,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,pound per Imperial gallon,pounds per Imperial gallon,lb/gal (UK),lb/gal (UK),99.7763792621791,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,troy pound per cubic meter,troy pounds per cubic meter,lb t/m³,lb t/m^3,0.3732417,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,slug per cubic foot,slugs per cubic foot,slug/ft³,slug/ft^3,515.378652639683,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,slug per cubic meter,slugs per cubic meter,slug/m³,slug/m^3,14.5939,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,teragram per cubic meter,teragrams per cubic meter,Tg/m³,Tg/m^3,1000000000,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,assay ton per cubic meter,assay tons per cubic meter,AT/m³,AT/m^3,0.02916667,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,long ton per cubic meter,long tons per cubic meter,2240 lb/m³,2240 lb/m^3,1016.047,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,long ton per cubic yard,long tons per cubic yard,2240 lb/yd³,2240 lb/yd^3,1328.93922987087,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,ton per cubic meter,tons per cubic meter,t/m³,t/m^3,1000,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,short ton per cubic meter,short tons per cubic meter,2000 lb/m³,2000 lb/m^3,907.1847,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,short ton per cubic yard,short tons per cubic yard,2000 lb/yd³,2000 lb/yd^3,1186.55272499071,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,yoctogram per cubic meter,yoctograms per cubic meter,yg/m³,yg/m^3,1E-27,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,yottagram per cubic meter,yottagrams per cubic meter,Yg/m³,Yg/m^3,1E+021,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,zeptogram per cubic meter,zeptograms per cubic meter,zg/m³,zg/m^3,1E-24,0 -MassDensity,-3,1,0,0,0,0,0,false,false,false,false,false,false,zettagram per cubic meter,zettagrams per cubic meter,Zg/m³,Zg/m^3,1E+018,0 -MassFlux,-2,1,-1,0,0,0,0,false,false,false,false,false,false,gram per square centimeter second,grams per square centimeter second,g/(cm² · s),g/(cm^2*s),10,0 -MassFlux,-2,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram per square meter second,kilograms per square meter second,kg/(m² · s),kg/(m^2*s),1,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,centigram per joule,centigrams per joule,cg/J,cg/J,0.00001,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,decagram per joule,decagrams per joule,dag/J,dag/J,0.01,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,decigram per joule,decigrams per joule,dg/J,dg/J,0.0001,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,gigagram per joule,gigagrams per joule,Gg/J,Gg/J,1000000,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,gram per gigawatt hour,grams per gigawatt hour,g/GWh,g/GWh,2.77777777777778E-16,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,gram per joule,grams per joule,g/J,g/J,0.001,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,gram per kilowatt hour,grams per kilowatt hour,g/kWh,g/kWh,2.77777777777778E-10,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,gram per megawatt hour,grams per megawatt hour,g/MWh,g/MWh,2.77777777777778E-13,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,gram per watt hour,grams per watt hour,g/Wh,g/Wh,2.77777777777778E-07,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,hectogram per joule,hectograms per joule,hg/J,hg/J,0.1,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,kilogram per gigawatt hour,kilograms per gigawatt hour,kg/GWh,kg/GWh,2.77777777777778E-13,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,kilogram per joule,kilograms per joule,kg/J,kg/J,1,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,kilogram per kilowatt hour,kilograms per kilowatt hour,kg/kWh,kg/kWh,2.77777777777778E-07,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,kilogram per megawatt hour,kilograms per megawatt hour,kg/MWh,kg/MWh,2.77777777777778E-10,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,kilogram per watt hour,kilograms per watt hour,kg/Wh,kg/Wh,0.000277777777777778,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,megagram per joule,megagrams per joule,Mg/J,Mg/J,1000,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,microgram per joule,micrograms per joule,µg/J,ug/J,0.000000001,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,milligram per joule,milligrams per joule,mg/J,mg/J,0.000001,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,pound per gigawatt hour,pounds per gigawatt hour,lb/GWh,lb/GWh,1.25997888888889E-13,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,pound per joule,pounds per joule,lb/J,lb/J,0.4535924,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,pound per kilowatt hour,pounds per kilowatt hour,lb/kWh,lb/kWh,1.25997888888889E-07,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,pound per megawatt hour,pounds per megawatt hour,lb/MWh,lb/MWh,1.25997888888889E-10,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,pound per watt hour,pounds per watt hour,lb/Wh,lb/Wh,0.000125997888888889,0 -MassPerEnergy,-2,0,2,0,0,0,0,false,false,false,false,false,false,teragram per joule,teragrams per joule,Tg/J,Tg/J,1000000000,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,attogram per second,attograms per second,ag/s,ag/s,1E-21,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,carat per second,carats per second,ct/s,ct/s,0.0002,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,centigram per second,centigrams per second,cg/s,cg/s,0.00001,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,decagram per second,decagrams per second,dag/s,dag/s,0.01,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,decigram per second,decigrams per second,dg/s,dg/s,0.0001,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,exagram per second,exagrams per second,Eg/s,Eg/s,1000000000000000,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,femtogram per second,femtograms per second,fg/s,fg/s,1E-18,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,gigagram per second,gigagrams per second,Gg/s,Gg/s,1000000,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,grain per second,grains per second,gr/s,gr/s,0.00006479891,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,gram per day,grams per day,g/d,g/d,1.15740740740741E-08,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,gram per hour,grams per hour,g/h,g/h,2.77777777777778E-07,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,gram per minute,grams per minute,g/min,g/min,1.66666666666667E-05,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,gram per second,grams per second,g/s,g/s,0.001,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,hectogram per second,hectograms per second,hg/s,hg/s,0.1,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,hundredweight (long) per second,hundredweight (long) per second,cwt long/s,cwt long/s,50.80235,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,hundredweight (short) per second,hundredweight (short) per second,cwt short/s,cwt short/s,45.35924,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram per day,kilograms per day,kg/d,kg/d,1.15740740740741E-05,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram per hour,kilograms per hour,kg/h,kg/h,0.000277777777777778,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram per minute,kilograms per minute,kg/min,kg/min,0.0166666666666667,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram per second,kilograms per second,kg/s,kg/s,1,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,megagram per second,megagrams per second,Mg/s,Mg/s,1000,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,microgram per second,micrograms per second,µg/s,ug/s,0.000000001,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,milligram per second,milligrams per second,mg/s,mg/s,0.000001,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,nanogram per second,nanograms per second,ng/s,ng/s,1E-12,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,ounce per second,ounces per second,oz/s,oz/s,0.02834952,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,troy ounce per second,troy ounces per second,oz t/s,oz t/s,0.03110348,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,pennyweight per second,pennyweight per second,dwt/s,dwt/s,0.001555174,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,petagram per second,petagrams per second,Pg/s,Pg/s,1000000000000,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,picogram per second,picograms per second,pg/s,pg/s,1E-15,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,pound per day,pounds per day,lb/d,lb/d,5.24991203703704E-06,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,pound per hour,pounds per hour,lb/h,lb/h,0.000125997888888889,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,pound per minute,pounds per minute,lb/min,lb/min,0.00755987333333333,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,pound per second,pounds per second,lb/s,lb/s,0.4535924,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,troy pound per second,troy pounds per second,lb t/s,lb t/s,0.3732417,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,slug per second,slugs per second,slug/s,slug/s,14.5939,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,teragram per second,teragrams per second,Tg/s,Tg/s,1000000000,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,assay ton per second,assay tons per second,AT/s,AT/s,0.02916667,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,long ton per second,long tons per second,2240 lb/s,2240 lb/s,1016.047,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,ton per day,tons per day,t/d,t/d,0.0115740740740741,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,ton per hour,tons per hour,t/h,t/h,0.277777777777778,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,ton per minute,tons per minute,t/min,t/min,16.6666666666667,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,ton per second,tons per second,t/s,t/s,1000,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,short ton per hour,short tons per hour,2000 lb/h,2000 lb/h,0.25199575,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,short ton per second,short tons per second,2000 lb/s,2000 lb/s,907.1847,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,yoctogram per second,yoctograms per second,yg/s,yg/s,1E-27,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,yottagram per second,yottagrams per second,Yg/s,Yg/s,1E+021,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,zeptogram per second,zeptograms per second,zg/s,zg/s,1E-24,0 -MassRate,0,1,-1,0,0,0,0,false,false,false,false,false,false,zettagram per second,zettagrams per second,Zg/s,Zg/s,1E+018,0 -Molality,0,-1,0,0,0,1,0,false,true,false,false,false,false,mole per kilogram,moles per kilogram,mol/kg,mol/kg,1,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,attomole per cubic meter,attomoles per cubic meter,amol/m³,amol/m^3,1E-18,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,centimole per cubic meter,centimoles per cubic meter,cmol/m³,cmol/m^3,0.01,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,decamole per cubic meter,decamoles per cubic meter,damol/m³,damol/m^3,10,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,decimole per cubic meter,decimoles per cubic meter,dmol/m³,dmol/m^3,0.1,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,examole per cubic meter,examoles per cubic meter,Emol/m³,Emol/m^3,1E+018,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,femtomole per cubic decimeter,femtomoles per cubic decimeter,fmol/dm³,fmol/dm^3,1E-12,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,femtomole per cubic meter,femtomoles per cubic meter,fmol/m³,fmol/m^3,1E-15,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,femtomole per deciliter,femtomoles per deciliter,fmol/dL,fmol/dL,1E-11,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,femtomole per liter,femtomoles per liter,fmol/L,fmol/L,1E-12,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,femtomole per milliliter,femtomoles per milliliter,fmol/mL,fmol/mL,0.000000001,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,gigamole per cubic meter,gigamoles per cubic meter,Gmol/m³,Gmol/m^3,1000000000,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,hectomole per cubic meter,hectomoles per cubic meter,hmol/m³,hmol/m^3,100,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,kilomole per cubic decimeter,kilomoles per cubic decimeter,kmol/dm³,kmol/dm^3,1000000,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,kilomole per cubic meter,kilomoles per cubic meter,kmol/m³,kmol/m^3,1000,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,kilomole per deciliter,kilomoles per deciliter,kmol/dL,kmol/dL,10000000,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,kilomole per liter,kilomoles per liter,kmol/L,kmol/L,1000000,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,kilomole per milliliter,kilomoles per milliliter,kmol/mL,kmol/mL,1000000000,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,megamole per cubic meter,megamoles per cubic meter,Mmol/m³,Mmol/m^3,1000000,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,micromole per cubic decimeter,micromoles per cubic decimeter,μmol/dm³,umol/dm^3,0.001,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,micromole per cubic meter,micromoles per cubic meter,µmol/m³,umol/m^3,0.000001,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,micromole per deciliter,micromoles per deciliter,μmol/dL,umol/dL,0.01,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,micromole per liter,micromoles per liter,μmol/L,umol/L,0.001,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,micromole per milliliter,micromoles per milliliter,μmol/mL,umol/mL,1,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,millimole per cubic decimeter,millimoles per cubic decimeter,mmol/dm³,mmol/dm^3,1,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,millimole per cubic meter,millimoles per cubic meter,mmol/m³,mmol/m^3,0.001,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,millimole per deciliter,millimoles per deciliter,mmol/dL,mmol/dL,10,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,millimole per liter,millimoles per liter,mmol/L,mmol/L,1,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,millimole per milliliter,millimoles per milliliter,mmol/mL,mmol/mL,1000,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,mole per cubic decimeter,moles per cubic decimeter,mol/dm³,mol/dm^3,1000,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,mole per cubic meter,moles per cubic meter,mol/m³,mol/m^3,1,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,mole per deciliter,moles per deciliter,mol/dL,mol/dL,10000,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,mole per liter,moles per liter,mol/L,mol/L,1000,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,mole per milliliter,moles per milliliter,mol/mL,mol/mL,1000000,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,nanomole per cubic decimeter,nanomoles per cubic decimeter,nmol/dm³,nmol/dm^3,0.000001,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,nanomole per cubic meter,nanomoles per cubic meter,nmol/m³,nmol/m^3,0.000000001,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,nanomole per deciliter,nanomoles per deciliter,nmol/dL,nmol/dL,0.00001,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,nanomole per liter,nanomoles per liter,nmol/L,nmol/L,0.000001,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,nanomole per milliliter,nanomoles per milliliter,nmol/mL,nmol/mL,0.001,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,particle per cubic decimeter,particles per cubic decimeter,particle/dm³,particle/dm^3,1.66053906717385E-21,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,particle per cubic meter,particles per cubic meter,particle/m³,particle/m^3,1.66053906717385E-24,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,particle per deciliter,particles per deciliter,particle/dL,particle/dL,1.66053906717385E-20,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,particle per liter,particles per liter,particle/L,particle/L,1.66053906717385E-21,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,particle per milliliter,particles per milliliter,particle/mL,particle/mL,1.66053906717385E-18,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,petamole per cubic meter,petamoles per cubic meter,Pmol/m³,Pmol/m^3,1000000000000000,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,picomole per cubic decimeter,picomoles per cubic decimeter,pmol/dm³,pmol/dm^3,0.000000001,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,picomole per cubic meter,picomoles per cubic meter,pmol/m³,pmol/m^3,1E-12,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,picomole per deciliter,picomoles per deciliter,pmol/dL,pmol/dL,0.00000001,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,picomole per liter,picomoles per liter,pmol/L,pmol/L,0.000000001,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,picomole per milliliter,picomoles per milliliter,pmol/mL,pmol/mL,0.000001,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,teramole per cubic meter,teramoles per cubic meter,Tmol/m³,Tmol/m^3,1000000000000,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,yoctomole per cubic meter,yoctomoles per cubic meter,ymol/m³,ymol/m^3,1E-24,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,yottamole per cubic meter,yottamoles per cubic meter,Ymol/m³,Ymol/m^3,1E+024,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,zeptomole per cubic meter,zeptomoles per cubic meter,zmol/m³,zmol/m^3,1E-21,0 -MolarConcentration,-3,0,0,0,0,1,0,false,false,false,false,false,false,zettamole per cubic meter,zettamoles per cubic meter,Zmol/m³,Zmol/m^3,1E+021,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,attojoule per mole,attojoules per mole,aJ/mol,aJ/mol,1E-18,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,British thermal unit (39 °F) per mole,British thermal units (39 °F) per mole,Btu₃₉/mol,Btu\3\9/mol,1059.67,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,British thermal unit (59 °F) per mole,British thermal units (59 °F) per mole,Btu₅₉/mol,Btu\5\9/mol,1054.8,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,British thermal unit (60 °F) per mole,British thermal units (60 °F) per mole,Btu₆₀/mol,Btu\6\0/mol,1054.68,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,British thermal unit (IT) per mole,British thermal units (IT) per mole,Btu (IT)/mol,Btu (IT)/mol,1055.056,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,British thermal unit per mole,British thermal units per mole,Btu/mol,Btu/mol,1054.35,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,calorie (15 °C) per mole,calories (15 °C) per mole,cal₁₅/mol,Cal\15/mol,4.1858,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,calorie (20 °C) per mole,calories (20 °C) per mole,cal₂₀/mol,Cal\20/mol,4.1819,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,Calorie (IT) per mole,Calories (IT) per mole,Cal (IT)/mol,Cal (IT)/mol,4186.8,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,calorie (IT) per mole,calories (IT) per mole,cal (IT)/mol,cal (IT)/mol,4.1868,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,Calorie per mole,Calories per mole,Cal/mol,Cal/mol,4184,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,calorie per mole,calories per mole,cal/mol,cal/mol,4.184,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,centijoule per mole,centijoules per mole,cJ/mol,cJ/mol,0.01,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,decajoule per mole,decajoules per mole,daJ/mol,daJ/mol,10,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,decawatt hour per mole,decawatt hours per mole,daW · h/mol,daW*h/mol,36000,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,decijoule per mole,decijoules per mole,dJ/mol,dJ/mol,0.1,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,electronvolt per mole,electronvolts per mole,eV/mol,eV/mol,1.602176634E-19,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,electronvolt per particle,electronvolts per particle,eV/particle,eV/particle,96485.33212331,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,erg per mole,ergs per mole,erg/mol,erg/mol,0.0000001,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,exajoule per mole,exajoules per mole,EJ/mol,EJ/mol,1E+018,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,femtojoule per mole,femtojoules per mole,fJ/mol,fJ/mol,1E-15,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,foot pound-force per mole,foot pounds-force per mole,ft · lbf/mol,ft*lbf/mol,1.355818,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,foot poundal per mole,foot poundals per mole,ft · pdl/mol,ft*pdl/mol,0.04214011,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,gigajoule per mole,gigajoules per mole,GJ/mol,GJ/mol,1000000000,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,gigawatt hour per mole,gigawatt hours per mole,GW · h/mol,GW*h/mol,3600000000000,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,hectojoule per mole,hectojoules per mole,hJ/mol,hJ/mol,100,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,hectowatt hour per mole,hectowatt hours per mole,hW · h/mol,hW*h/mol,360000,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,joule per mole,joules per mole,J/mol,J/mol,1,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,joule per particle,joules per particle,J/particle,J/particle,6.02214076E+023,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,kilocalorie (IT) per mole,kilocalories (IT) per mole,kcal (IT)/mol,kcal (IT)/mol,4186.8,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,kilocalorie per mole,kilocalories per mole,kcal/mol,kcal/mol,4184,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,kilogram square meter per second squared mole,kilograms square meter per second squared mole,kg · m²/(s² · mol),kg*m^2/(s^2*mol),1,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,kilojoule per mole,kilojoules per mole,kJ/mol,kJ/mol,1000,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,kilowatt hour per mole,kilowatt hours per mole,kW · h/mol,kW*h/mol,3600000,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,megajoule per mole,megajoules per mole,MJ/mol,MJ/mol,1000000,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,megawatt hour per mole,megawatt hours per mole,MW · h/mol,MW*h/mol,3600000000,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,microjoule per mole,microjoules per mole,µJ/mol,uJ/mol,0.000001,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,microwatt hour per mole,microwatt hours per mole,µW · h/mol,uW*h/mol,0.0036,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,millijoule per mole,millijoules per mole,mJ/mol,mJ/mol,0.001,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,milliwatt hour per mole,milliwatt hours per mole,mW · h/mol,mW*h/mol,3.6,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,nanojoule per mole,nanojoules per mole,nJ/mol,nJ/mol,0.000000001,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,petajoule per mole,petajoules per mole,PJ/mol,PJ/mol,1000000000000000,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,petawatt hour per mole,petawatt hours per mole,PW · h/mol,PW*h/mol,3.6E+018,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,picojoule per mole,picojoules per mole,pJ/mol,pJ/mol,1E-12,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,quad per mole,quads per mole,10¹⁵ Btu (IT)/mol,10^15 Btu (IT)/mol,1.055056E+018,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,terajoule per mole,terajoules per mole,TJ/mol,TJ/mol,1000000000000,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,terawatt hour per mole,terawatt hours per mole,TW · h/mol,TW*h/mol,3600000000000000,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,therm (EC) per mole,therms (EC) per mole,thm (EC)/mol,thm (EC)/mol,105506000,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,therm per mole,therms per mole,thm/mol,thm/mol,105480400,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,ton of TNT per mole,tons of TNT per mole,t of TNT/mol,t of TNT/mol,4184000000,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,watt hour per mole,watt hours per mole,W · h/mol,W*h/mol,3600,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,watt second per mole,watt seconds per mole,W · s/mol,W*s/mol,1,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,yoctojoule per mole,yoctojoules per mole,yJ/mol,yJ/mol,1E-24,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,yottajoule per mole,yottajoules per mole,YJ/mol,YJ/mol,1E+024,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,zeptojoule per mole,zeptojoules per mole,zJ/mol,zJ/mol,1E-21,0 -MolarEnergy,2,1,-2,0,0,-1,0,false,false,false,false,false,false,zettajoule per mole,zettajoules per mole,ZJ/mol,ZJ/mol,1E+021,0 -MolarFlux,-2,0,-1,0,0,1,0,false,false,false,false,false,false,mole per square meter second,moles per square meter second,mol/(m² · s),mol/(m^2*s),1,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,attojoule per kelvin mole,attojoules per kelvin mole,aJ/(K · mol),aJ/(K*mol),1E-18,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,British thermal unit (39 °F) per kelvin mole,British thermal units (39 °F) per kelvin mole,Btu₃₉/(K · mol),Btu\3\9/(K*mol),1059.67,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,British thermal unit (59 °F) per kelvin mole,British thermal units (59 °F) per kelvin mole,Btu₅₉/(K · mol),Btu\5\9/(K*mol),1054.8,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,British thermal unit (60 °F) per kelvin mole,British thermal units (60 °F) per kelvin mole,Btu₆₀/(K · mol),Btu\6\0/(K*mol),1054.68,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,British thermal unit (IT) per kelvin mole,British thermal units (IT) per kelvin mole,Btu (IT)/(K · mol),Btu (IT)/(K*mol),1055.056,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,British thermal unit per kelvin mole,British thermal units per kelvin mole,Btu/(K · mol),Btu/(K*mol),1054.35,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,calorie (15 °C) per kelvin mole,calories (15 °C) per kelvin mole,cal₁₅/(K · mol),cal\15/(K*mol),4.1858,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,calorie (20 °C) per kelvin mole,calories (20 °C) per kelvin mole,cal₂₀/(K · mol),cal\20/(K*mol),4.1819,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,Calorie (IT) per kelvin mole,Calories (IT) per kelvin mole,Cal (IT)/(K · mol),Cal (IT)/(K*mol),4186.8,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,calorie (IT) per kelvin mole,calories (IT) per kelvin mole,cal (IT)/(K · mol),cal (IT)/(K*mol),4.1868,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,Calorie per kelvin mole,Calories per kelvin mole,Cal/(K · mol),Cal/(K*mol),4184,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,calorie per kelvin mole,calories per kelvin mole,cal/(K · mol),cal/(K*mol),4.184,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,centijoule per kelvin mole,centijoules per kelvin mole,cJ/(K · mol),cJ/(K*mol),0.01,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,decajoule per kelvin mole,decajoules per kelvin mole,daJ/(K · mol),daJ/(K*mol),10,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,decijoule per kelvin mole,decijoules per kelvin mole,dJ/(K · mol),dJ/(K*mol),0.1,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,electronvolt per kelvin particle,electronvolts per kelvin particle,eV/(K · particle),eV/(K*particle),96485.33212331,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,exajoule per kelvin mole,exajoules per kelvin mole,EJ/(K · mol),EJ/(K*mol),1E+018,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,femtojoule per kelvin mole,femtojoules per kelvin mole,fJ/(K · mol),fJ/(K*mol),1E-15,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,gigajoule per kelvin mole,gigajoules per kelvin mole,GJ/(K · mol),GJ/(K*mol),1000000000,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,hectojoule per kelvin mole,hectojoules per kelvin mole,hJ/(K · mol),hJ/(K*mol),100,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,joule per kelvin mole,joules per kelvin mole,J/(K · mol),J/(K*mol),1,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,joule per kelvin particle,joules per kelvin particle,J/(K · particle),J/(K*particle),6.02214076E+023,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,kilocalorie (IT) per kelvin mole,kilocalories (IT) per kelvin mole,kcal (IT)/(K · mol),kcal (IT)/(K*mol),4186.8,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,kilocalorie per kelvin mole,kilocalories per kelvin mole,kcal/(K · mol),kcal/(K*mol),4184,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,kilojoule per kelvin mole,kilojoules per kelvin mole,kJ/(K · mol),kJ/(K*mol),1000,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,megajoule per kelvin mole,megajoules per kelvin mole,MJ/(K · mol),MJ/(K*mol),1000000,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,microjoule per kelvin mole,microjoules per kelvin mole,µJ/(K · mol),uJ/(K*mol),0.000001,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,millijoule per kelvin mole,millijoules per kelvin mole,mJ/(K · mol),mJ/(K*mol),0.001,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,molar gas constant,molar gas constants,R,R,8.314462618,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,nanojoule per kelvin mole,nanojoules per kelvin mole,nJ/(K · mol),nJ/(K*mol),0.000000001,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,petajoule per kelvin mole,petajoules per kelvin mole,PJ/(K · mol),PJ/(K*mol),1000000000000000,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,picojoule per kelvin mole,picojoules per kelvin mole,pJ/(K · mol),pJ/(K*mol),1E-12,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,terajoule per kelvin mole,terajoules per kelvin mole,TJ/(K · mol),TJ/(K*mol),1000000000000,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,yoctojoule per kelvin mole,yoctojoules per kelvin mole,yJ/(K · mol),yJ/(K*mol),1E-24,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,yottajoule per kelvin mole,yottajoules per kelvin mole,YJ/(K · mol),YJ/(K*mol),1E+024,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,zeptojoule per kelvin mole,zeptojoules per kelvin mole,zJ/(K · mol),zJ/(K*mol),1E-21,0 -MolarHeatCapacity,2,1,-2,0,-1,-1,0,false,false,false,false,false,false,zettajoule per kelvin mole,zettajoules per kelvin mole,ZJ/(K · mol),ZJ/(K*mol),1E+021,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,attogram per mole,attograms per mole,ag/mol,ag/mol,1E-21,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,centigram per mole,centigrams per mole,cg/mol,cg/mol,0.00001,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,decagram per mole,decagrams per mole,dag/mol,dag/mol,0.01,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,decigram per mole,decigrams per mole,dg/mol,dg/mol,0.0001,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,exagram per mole,exagrams per mole,Eg/mol,Eg/mol,1000000000000000,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,femtogram per mole,femtograms per mole,fg/mol,fg/mol,1E-18,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,gigagram per mole,gigagrams per mole,Gg/mol,Gg/mol,1000000,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,gram per mole,grams per mole,g/mol,g/mol,0.001,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,hectogram per mole,hectograms per mole,hg/mol,hg/mol,0.1,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,kilogram per mole,kilograms per mole,kg/mol,kg/mol,1,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,megagram per mole,megagrams per mole,Mg/mol,Mg/mol,1000,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,microgram per mole,micrograms per mole,µg/mol,ug/mol,0.000000001,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,milligram per mole,milligrams per mole,mg/mol,mg/mol,0.000001,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,nanogram per mole,nanograms per mole,ng/mol,ng/mol,1E-12,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,petagram per mole,petagrams per mole,Pg/mol,Pg/mol,1000000000000,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,picogram per mole,picograms per mole,pg/mol,pg/mol,1E-15,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,teragram per mole,teragrams per mole,Tg/mol,Tg/mol,1000000000,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,yoctogram per mole,yoctograms per mole,yg/mol,yg/mol,1E-27,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,yottagram per mole,yottagrams per mole,Yg/mol,Yg/mol,1E+021,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,zeptogram per mole,zeptograms per mole,zg/mol,zg/mol,1E-24,0 -MolarMass,0,1,0,0,0,-1,0,false,false,false,false,false,false,zettagram per mole,zettagrams per mole,Zg/mol,Zg/mol,1E+018,0 -MolarRadioactivity,0,0,-1,0,0,-1,0,false,true,false,false,false,false,becquerel per mole,becquerels per mole,Bq/mol,Bq/mol,1,0 -MolarRadioactivity,0,0,-1,0,0,-1,0,false,true,false,false,false,false,curie per mole,curies per mole,Ci/mol,Ci/mol,37000000000,0 -MolarRadioactivity,0,0,-1,0,0,-1,0,false,true,false,false,false,false,disintegration per minute per mole,disintegrations per minute per mole,dpm/mol,dpm/mol,0.0166666666666667,0 -MolarVolume,3,0,0,0,0,-1,0,false,false,false,false,false,false,cubic centimeter per mole,cubic centimeters per mole,cm³/mol,cm^3/mol,0.000001,0 -MolarVolume,3,0,0,0,0,-1,0,false,false,false,false,false,false,cubic decimeter per mole,cubic decimeters per mole,dm³/mol,dm^3/mol,0.001,0 -MolarVolume,3,0,0,0,0,-1,0,false,false,false,false,false,false,cubic meter per mole,cubic meters per mole,m³/mol,m^3/mol,1,0 -MolarVolume,3,0,0,0,0,-1,0,false,false,false,false,false,false,cubic meter per particle,cubic meters per particle,m³/particle,m^3/particle,6.02214076E+023,0 -MolarVolume,3,0,0,0,0,-1,0,false,false,false,false,false,false,cubic micrometer per particle,cubic micrometers per particle,µm³/particle,um^3/particle,602214.076,0 -MolarVolume,3,0,0,0,0,-1,0,false,false,false,false,false,false,cubic nanometer per particle,cubic nanometers per particle,nm³/particle,nm^3/particle,0.000602214076,0 -MomentOfInertia,2,1,0,0,0,0,0,false,false,false,false,false,false,dalton square ångström,dalton square ångströms,Da · Ų,Da*ang^2,1.6605390666E-47,0 -MomentOfInertia,2,1,0,0,0,0,0,false,false,false,false,false,false,kilogram square meter,kilogram square meters,kg · m²,kg*m^2,1,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,attogram meter per second,attogram meters per second,ag · m/s,ag*m/s,1E-21,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,centigram meter per second,centigram meters per second,cg · m/s,cg*m/s,0.00001,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,decagram meter per second,decagram meters per second,dag · m/s,dag*m/s,0.01,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,decigram meter per second,decigram meters per second,dg · m/s,dg*m/s,0.0001,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,exagram meter per second,exagram meters per second,Eg · m/s,Eg*m/s,1000000000000000,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,femtogram meter per second,femtogram meters per second,fg · m/s,fg*m/s,1E-18,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,gigagram meter per second,gigagram meters per second,Gg · m/s,Gg*m/s,1000000,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,gram meter per second,gram meters per second,g · m/s,g*m/s,0.001,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,hectogram meter per second,hectogram meters per second,hg · m/s,hg*m/s,0.1,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram attometer per second,kilogram attometers per second,kg · am/s,kg*am/s,1E-18,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram centimeter per second,kilogram centimeters per second,kg · cm/s,kg*cm/s,0.01,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram decameter per second,kilogram decameters per second,kg · dam/s,kg*dam/s,10,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram decimeter per second,kilogram decimeters per second,kg · dm/s,kg*dm/s,0.1,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram exameter per second,kilogram exameters per second,kg · Em/s,kg*Em/s,1E+018,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram femtometer per second,kilogram femtometers per second,kg · fm/s,kg*fm/s,1E-15,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram gigameter per second,kilogram gigameters per second,kg · Gm/s,kg*Gm/s,1000000000,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram hectometer per second,kilogram hectometers per second,kg · hm/s,kg*hm/s,100,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram kilometer per second,kilogram kilometers per second,kg · km/s,kg*km/s,1000,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram megameter per second,kilogram megameters per second,kg · Mm/s,kg*Mm/s,1000000,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram meter per day,kilogram meters per day,kg · m/d,kg*m/d,1.15740740740741E-05,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram meter per hour,kilogram meters per hour,kg · m/h,kg*m/h,0.000277777777777778,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram meter per minute,kilogram meters per minute,kg · m/min,kg*m/min,0.0166666666666667,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram meter per second,kilogram meters per second,kg · m/s,kg*m/s,1,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram micrometer per second,kilogram micrometers per second,kg · µm/s,kg*um/s,0.000001,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram millimeter per second,kilogram millimeters per second,kg · mm/s,kg*mm/s,0.001,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram nanometer per second,kilogram nanometers per second,kg · nm/s,kg*nm/s,0.000000001,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram petameter per second,kilogram petameters per second,kg · Pm/s,kg*Pm/s,1000000000000000,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram picometer per second,kilogram picometers per second,kg · pm/s,kg*pm/s,1E-12,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram terameter per second,kilogram terameters per second,kg · Tm/s,kg*Tm/s,1000000000000,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram yoctometer per second,kilogram yoctometers per second,kg · ym/s,kg*ym/s,1E-24,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram yottameter per second,kilogram yottameters per second,kg · Ym/s,kg*Ym/s,1E+024,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram zeptometer per second,kilogram zeptometers per second,kg · zm/s,kg*zm/s,1E-21,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,kilogram zettameter per second,kilogram zettameters per second,kg · Zm/s,kg*Zm/s,1E+021,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,megagram meter per second,megagram meters per second,Mg · m/s,Mg*m/s,1000,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,microgram meter per second,microgram meters per second,µg · m/s,ug*m/s,0.000000001,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,milligram meter per second,milligram meters per second,mg · m/s,mg*m/s,0.000001,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,nanogram meter per second,nanogram meters per second,ng · m/s,ng*m/s,1E-12,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,petagram meter per second,petagram meters per second,Pg · m/s,Pg*m/s,1000000000000,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,picogram meter per second,picogram meters per second,pg · m/s,pg*m/s,1E-15,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,pound foot per second,pound feet per second,lb · ft/s,lb*ft/s,0.13825496352,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,pound inch per second,pound inches per second,lb · in/s,lb*in/s,0.01152124696,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,slug foot per second,slug feet per second,slug · ft/s,slug*ft/s,4.44822072,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,slug inch per second,slug inches per second,slug · in/s,slug*in/s,0.37068506,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,teragram meter per second,teragram meters per second,Tg · m/s,Tg*m/s,1000000000,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,ton meter per second,ton meters per second,t · m/s,t*m/s,1000,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,yoctogram meter per second,yoctogram meters per second,yg · m/s,yg*m/s,1E-27,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,yottagram meter per second,yottagram meters per second,Yg · m/s,Yg*m/s,1E+021,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,zeptogram meter per second,zeptogram meters per second,zg · m/s,zg*m/s,1E-24,0 -Momentum,1,1,-1,0,0,0,0,false,false,false,false,false,false,zettagram meter per second,zettagram meters per second,Zg · m/s,Zg*m/s,1E+018,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,attowatt,attowatts,aW,aW,1E-18,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,centiwatt,centiwatts,cW,cW,0.01,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,decawatt,decawatts,daW,daW,10,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,deciwatt,deciwatts,dW,dW,0.1,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,erg per second,ergs per second,erg/s,erg/s,0.0000001,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,exawatt,exawatts,EW,EW,1E+018,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,femtowatt,femtowatts,fW,fW,1E-15,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,foot pound-force per hour,foot pounds-force per hour,ft · lbf/h,ft*lbf/h,0.000376616111111111,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,foot pound-force per minute,foot pounds-force per minute,ft · lbf/min,ft*lbf/min,0.0225969666666667,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,foot pound-force per second,foot pounds-force per second,ft · lbf/s,ft*lbf/s,1.355818,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,gigawatt,gigawatts,GW,GW,1000000000,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,hectowatt,hectowatts,hW,hW,100,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,horsepower,horsepower,hp,hp,745.6999,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,horsepower (boiler),horsepower (boiler),hp (S),hp (S),9809.5,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,horsepower (electric),horsepower (electric),hp (E),hp (E),746,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,horsepower (Imperial),horsepower (Imperial),hp (I),hp (I),745.7,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,metric horsepower,metric horsepower,hp (M),hp (M),735.4988,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,hydraulic horsepower,hydraulic horsepower,hp (hydraulic),hp (hydraulic),746.043,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,kilowatt,kilowatts,kW,kW,1000,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,megawatt,megawatts,MW,MW,1000000,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,microwatt,microwatts,µW,uW,0.000001,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,milliwatt,milliwatts,mW,mW,0.001,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,nanowatt,nanowatts,nW,nW,0.000000001,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,petawatt,petawatts,PW,PW,1000000000000000,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,picowatt,picowatts,pW,pW,1E-12,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,terawatt,terawatts,TW,TW,1000000000000,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,watt,watts,W,W,1,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,yoctowatt,yoctowatts,yW,yW,1E-24,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,yottawatt,yottawatts,YW,YW,1E+024,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,zeptowatt,zeptowatts,zW,zW,1E-21,0 -Power,2,1,-3,0,0,0,0,false,false,false,false,false,false,zettawatt,zettawatts,ZW,ZW,1E+021,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,attowatt per second,attowatts per second,aW/s,aW/s,1E-18,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,centiwatt per second,centiwatts per second,cW/s,cW/s,0.01,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,decawatt per second,decawatts per second,daW/s,daW/s,10,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,deciwatt per second,deciwatts per second,dW/s,dW/s,0.1,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,erg per second squared,ergs per second squared,erg/s²,erg/s^2,0.0000001,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,exawatt per second,exawatts per second,EW/s,EW/s,1E+018,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,femtowatt per second,femtowatts per second,fW/s,fW/s,1E-15,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,foot pound-force per second squared,foot pounds-force per second squared,ft · lbf/s²,ft*lbf/s^2,1.355818,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,gigawatt per second,gigawatts per second,GW/s,GW/s,1000000000,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,hectowatt per second,hectowatts per second,hW/s,hW/s,100,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,horsepower per second,horsepower per second,hp/s,hp/s,745.6999,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,horsepower per second (boiler),horsepower per second (boiler),hp/s (S),hp/s (S),9809.5,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,horsepower per second (electric),horsepower per second (electric),hp/s (E),hp/s (E),746,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,horsepower per second (Imperial),horsepower per second (Imperial),hp/s (I),hp/s (I),745.7,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,metric horsepower per second,metric horsepower per second,hp/s (M),hp/s (M),735.4988,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,hydraulic horsepower per second,hydraulic horsepower per second,hp/s (hydraulic),hp/s (hydraulic),746.043,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,kilowatt per second,kilowatts per second,kW/s,kW/s,1000,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,megawatt per second,megawatts per second,MW/s,MW/s,1000000,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,microwatt per second,microwatts per second,µW/s,uW/s,0.000001,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,milliwatt per second,milliwatts per second,mW/s,mW/s,0.001,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,nanowatt per second,nanowatts per second,nW/s,nW/s,0.000000001,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,petawatt per second,petawatts per second,PW/s,PW/s,1000000000000000,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,picowatt per second,picowatts per second,pW/s,pW/s,1E-12,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,terawatt per second,terawatts per second,TW/s,TW/s,1000000000000,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,watt per second,watts per second,W/s,W/s,1,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,yoctowatt per second,yoctowatts per second,yW/s,yW/s,1E-24,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,yottawatt per second,yottawatts per second,YW/s,YW/s,1E+024,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,zeptowatt per second,zeptowatts per second,zW/s,zW/s,1E-21,0 -PowerRate,2,1,-4,0,0,0,0,false,false,false,false,false,false,zettawatt per second,zettawatts per second,ZW/s,ZW/s,1E+021,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,atmosphere,atmospheres,atm,atm,101325,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,atmosphere (technical),atmospheres (technical),at,at,98066.5,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,attopascal,attopascals,aPa,aPa,1E-18,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,bar,bar,bar,bar,100000,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,centimeter of mercury,centimeters of mercury,cm Hg,cm Hg,1333.224,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,centimeter of mercury (0 °C),centimeters of mercury (0 °C),cm Hg (0 °C),cm Hg (0 degC),1333.22,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,centimeter of water,centimeters of water,cm H₂O,cm H\2O,98.0665,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,centimeter of water (4 °C),centimeters of water (4 °C),cm H₂O (4 °C),cm H\2O (4 degC),98.0638,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,centipascal,centipascals,cPa,cPa,0.01,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,decapascal,decapascals,daPa,daPa,10,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,decipascal,decipascals,dPa,dPa,0.1,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,dyne per square centimeter,dynes per square centimeter,dyn/cm²,dyn/cm^2,0.1,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,exapascal,exapascals,EPa,EPa,1E+018,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,femtopascal,femtopascals,fPa,fPa,1E-15,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,foot of mercury,feet of mercury,ft Hg,ft Hg,40636.66,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,foot of water,feet of water,ft H₂O,ft H\2O,2989.067,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,foot of water (39.2 °F),feet of water (39.2 °F),ft H₂O (39.2 °F),ft H\2O (39.2 degF),2988.98,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,gigapascal,gigapascals,GPa,GPa,1000000000,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,gram-force per square centimeter,grams-force per square centimeter,gf/cm²,gf/cm^2,98.0665,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,hectopascal,hectopascals,hPa,hPa,100,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,inch of mercury,inches of mercury,in Hg,in Hg,3386.389,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,inch of mercury (32 °F),inches of mercury (32 °F),in Hg (32 °F),in Hg (32 degF),3386.38,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,inch of mercury (60 °F),inches of mercury (60 °F),in Hg (60 °F),in Hg (60 degF),3376.85,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,inch of water,inches of water,in H₂O,in H\2O,249.0889,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,inch of water (39.2 °F),inches of water (39.2 °F),in H₂O (39.2 °F),in H\2O (39.2 degF),249.082,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,inch of water (60 °F),inches of water (60 °F),in H₂O (60 °F),in H\2O (60 degF),248.84,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,kilogram-force per square centimeter,kilograms-force per square centimeter,kgf/cm²,kgf/cm^2,98066.5,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,kilogram-force per square meter,kilograms-force per square meter,kgf/m²,kgf/m^2,9.80665,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,kilogram-force per square millimeter,kilograms-force per square millimeter,kgf/mm²,kgf/mm^2,9806650,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,kilopascal,kilopascals,kPa,kPa,1000,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,kip per square inch,kips per square inch,kip/in²,kip/in^2,6894757.88951578,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,megapascal,megapascals,MPa,MPa,1000000,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,micropascal,micropascals,µPa,uPa,0.000001,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,millibar,millibar,mbar,mbar,100,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,millimeter of mercury,millimeters of mercury,mm Hg,mm Hg,133.3224,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,millimeter of water,millimeters of water,mm H₂O,mm H\2O,9.80665,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,millipascal,millipascals,mPa,mPa,0.001,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,millitorr,millitorr,mTorr,mTorr,0.1333224,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,nanopascal,nanopascals,nPa,nPa,0.000000001,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,newton per square millimeter,newtons per square millimeter,N/mm²,N/mm^2,1000000,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,pascal,pascals,Pa,Pa,1,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,petapascal,petapascals,PPa,PPa,1000000000000000,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,picopascal,picopascals,pPa,pPa,1E-12,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,pound-force per square foot,pounds-force per square foot,lbf/ft²,lbf/ft^2,47.8802631216374,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,pound-force per square inch,pounds-force per square inch,lbf/in²,lbf/in^2,6894.75788951578,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,poundal per square foot,poundals per square foot,pdl/ft²,pdl/ft^2,1.4881644346622,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,pound-force per square inch,pounds-force per square inch,psi,psi,6894.757,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,terapascal,terapascals,TPa,TPa,1000000000000,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,torr,torr,Torr,Torr,133.3224,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,yoctopascal,yoctopascals,yPa,yPa,1E-24,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,yottapascal,yottapascals,YPa,YPa,1E+024,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,zeptopascal,zeptopascals,zPa,zPa,1E-21,0 -Pressure,-1,1,-2,0,0,0,0,false,false,false,false,false,false,zettapascal,zettapascals,ZPa,ZPa,1E+021,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,attojoule per square meter,attojoules per square meter,aJ/m²,aJ/m^2,1E-18,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,centijoule per square centimeter,centijoules per square centimeter,cJ/cm²,cJ/cm^2,100,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,centijoule per square meter,centijoules per square meter,cJ/m²,cJ/m^2,0.01,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,centijoule per square millimeter,centijoules per square millimeter,cJ/mm²,cJ/mm^2,10000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,decajoule per square centimeter,decajoules per square centimeter,daJ/cm²,daJ/cm^2,100000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,decajoule per square meter,decajoules per square meter,daJ/m²,daJ/m^2,10,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,decajoule per square millimeter,decajoules per square millimeter,daJ/mm²,daJ/mm^2,10000000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,decijoule per square centimeter,decijoules per square centimeter,dJ/cm²,dJ/cm^2,1000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,decijoule per square meter,decijoules per square meter,dJ/m²,dJ/m^2,0.1,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,decijoule per square millimeter,decijoules per square millimeter,dJ/mm²,dJ/mm^2,100000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,exajoule per square meter,exajoules per square meter,EJ/m²,EJ/m^2,1E+018,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,femtojoule per square meter,femtojoules per square meter,fJ/m²,fJ/m^2,1E-15,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,gigajoule per square centimeter,gigajoules per square centimeter,GJ/cm²,GJ/cm^2,10000000000000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,gigajoule per square meter,gigajoules per square meter,GJ/m²,GJ/m^2,1000000000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,gigajoule per square millimeter,gigajoules per square millimeter,GJ/mm²,GJ/mm^2,1000000000000000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,hectojoule per square centimeter,hectojoules per square centimeter,hJ/cm²,hJ/cm^2,1000000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,hectojoule per square meter,hectojoules per square meter,hJ/m²,hJ/m^2,100,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,hectojoule per square millimeter,hectojoules per square millimeter,hJ/mm²,hJ/mm^2,100000000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,joule per square centimeter,joules per square centimeter,J/cm²,J/cm^2,10000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,joule per square meter,joules per square meter,J/m²,J/m^2,1,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,joule per square millimeter,joules per square millimeter,J/mm²,J/mm^2,1000000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,kilojoule per square centimeter,kilojoules per square centimeter,kJ/cm²,kJ/cm^2,10000000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,kilojoule per square meter,kilojoules per square meter,kJ/m²,kJ/m^2,1000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,kilojoule per square millimeter,kilojoules per square millimeter,kJ/mm²,kJ/mm^2,1000000000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,megajoule per square centimeter,megajoules per square centimeter,MJ/cm²,MJ/cm^2,10000000000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,megajoule per square meter,megajoules per square meter,MJ/m²,MJ/m^2,1000000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,megajoule per square millimeter,megajoules per square millimeter,MJ/mm²,MJ/mm^2,1000000000000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,microjoule per square centimeter,microjoules per square centimeter,µJ/cm²,uJ/cm^2,0.01,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,microjoule per square meter,microjoules per square meter,µJ/m²,uJ/m^2,0.000001,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,microjoule per square millimeter,microjoules per square millimeter,µJ/mm²,uJ/mm^2,1,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,millijoule per square centimeter,millijoules per square centimeter,mJ/cm²,mJ/cm^2,10,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,millijoule per square meter,millijoules per square meter,mJ/m²,mJ/m^2,0.001,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,millijoule per square millimeter,millijoules per square millimeter,mJ/mm²,mJ/mm^2,1000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,nanojoule per square centimeter,nanojoules per square centimeter,nJ/cm²,nJ/cm^2,0.00001,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,nanojoule per square meter,nanojoules per square meter,nJ/m²,nJ/m^2,0.000000001,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,nanojoule per square millimeter,nanojoules per square millimeter,nJ/mm²,nJ/mm^2,0.001,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,petajoule per square meter,petajoules per square meter,PJ/m²,PJ/m^2,1000000000000000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,picojoule per square meter,picojoules per square meter,pJ/m²,pJ/m^2,1E-12,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,terajoule per square meter,terajoules per square meter,TJ/m²,TJ/m^2,1000000000000,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,yoctojoule per square meter,yoctojoules per square meter,yJ/m²,yJ/m^2,1E-24,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,yottajoule per square meter,yottajoules per square meter,YJ/m²,YJ/m^2,1E+024,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,zeptojoule per square meter,zeptojoules per square meter,zJ/m²,zJ/m^2,1E-21,0 -RadiantExposure,0,1,-2,0,0,0,0,false,false,false,false,false,false,zettajoule per square meter,zettajoules per square meter,ZJ/m²,ZJ/m^2,1E+021,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,becquerel,becquerels,Bq,Bq,1,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,curie,curies,Ci,Ci,37000000000,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,decabecquerel,decabecquerels,daBq,daBq,10,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,disintegration per minute,disintegrations per minute,dpm,dpm,0.0166666666666667,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,exabecquerel,exabecquerels,EBq,EBq,1E+018,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,gigabecquerel,gigabecquerels,GBq,GBq,1000000000,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,gigacurie,gigacuries,GCi,GCi,3.7E+019,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,hectobecquerel,hectobecquerels,hBq,hBq,100,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,kilobecquerel,kilobecquerels,kBq,kBq,1000,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,kilocurie,kilocuries,kCi,kCi,37000000000000,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,megabecquerel,megabecquerels,MBq,MBq,1000000,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,megacurie,megacuries,MCi,MCi,3.7E+016,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,microbecquerel,microbecquerels,µBq,uBq,0.000001,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,microcurie,microcuries,µCi,uCi,37000,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,millibecquerel,millibecquerels,mBq,mBq,0.001,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,millicurie,millicuries,mCi,mCi,37000000,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,nanobecquerel,nanobecquerels,nBq,nBq,0.000000001,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,nanocurie,nanocuries,nCi,nCi,37,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,petabecquerel,petabecquerels,PBq,PBq,1000000000000000,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,terabecquerel,terabecquerels,TBq,TBq,1000000000000,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,yottabecquerel,yottabecquerels,YBq,YBq,1E+024,0 -Radioactivity,0,0,-1,0,0,0,0,false,true,false,false,false,false,zettabecquerel,zettabecquerels,ZBq,ZBq,1E+021,0 -Number,0,0,0,0,0,0,0,false,false,false,false,false,false,basis point,basis points,bp,bp,0.0001,0 -Number,0,0,0,0,0,0,0,false,false,false,false,false,false,part per billion,parts per billion,ppb,ppb,0.000000001,0 -Number,0,0,0,0,0,0,0,false,false,false,false,false,false,part per hundred,parts per hundred,parts per hundred,parts per hundred,0.01,0 -Number,0,0,0,0,0,0,0,false,false,false,false,false,false,part per million,parts per million,ppm,ppm (ratio),0.000001,0 -Number,0,0,0,0,0,0,0,false,false,false,false,false,false,part per quadrillion,parts per quadrillion,ppq,ppq,1E-15,0 -Number,0,0,0,0,0,0,0,false,false,false,false,false,false,part per then thousand,parts per ten thousand,parts per ten thousand,parts per ten thousand,0.0001,0 -Number,0,0,0,0,0,0,0,false,false,false,false,false,false,part per thousand,parts per thousand,parts per thousand,parts per thousand,0.001,0 -Number,0,0,0,0,0,0,0,false,false,false,false,false,false,part per trillion,parts per trillion,ppt,ppt,1E-12,0 -Number,0,0,0,0,0,0,0,false,false,false,false,false,false,per mille,per mille,‰,%\0,0.001,0 -Number,0,0,0,0,0,0,0,false,false,false,false,false,false,percent,percent,%,%,0.01,0 -Number,0,0,0,0,0,0,0,false,false,false,false,false,false,number,number,,,1,0 -ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,diopter,diopters,dpt,dpt,1,0 -ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal ångström,reciprocal ångströms,Å⁻¹,ang^-1,10000000000,0 -ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal centimeter,reciprocal centimeters,cm⁻¹,cm^-1,100,0 -ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal decimeter,reciprocal decimeters,dm⁻¹,dm^-1,10,0 -ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal kilometer,reciprocal kilometers,km⁻¹,km^-1,0.001,0 -ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal meter,reciprocal meters,m⁻¹,m^-1,1,0 -ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal micrometer,reciprocal micrometers,µm⁻¹,um^-1,1000000,0 -ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal millimeter,reciprocal millimeters,mm⁻¹,mm^-1,1000,0 -ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,reciprocal nanometer,reciprocal nanometers,nm⁻¹,nm^-1,1000000000,0 -ReciprocalLength,-1,0,0,0,0,0,0,false,false,false,false,false,false,Rydberg constant,Rydberg constants,R∞,Rinfinity,10973731.56816,0 -SolidAngle,2,-1,0,0,0,0,0,false,false,false,true,false,false,spat,spats,sp,sp,12.5663706143592,0 -SolidAngle,2,-1,0,0,0,0,0,false,false,false,true,false,false,square degree,square degrees,°²,deg^2,0.000304617419786709,0 -SolidAngle,2,-1,0,0,0,0,0,false,false,false,true,false,false,square minute,square minutes,′²,angle_minute^2,8.46159499407524E-08,0 -SolidAngle,2,-1,0,0,0,0,0,false,false,false,true,false,false,square second,square seconds,″²,angle_second^2,2.35044305390979E-11,0 -SolidAngle,2,-1,0,0,0,0,0,false,false,false,true,false,false,steradian,steradians,sr,sr,1,0 -SpecificArea,2,-1,0,0,0,0,0,false,false,false,false,false,false,square centimeter per gram,square centimeters per gram,cm²/g,cm^2/g,0.1,0 -SpecificArea,2,-1,0,0,0,0,0,false,false,false,false,false,false,square centimeter per kilogram,square centimeters per kilogram,cm²/kg,cm^2/kg,0.0001,0 -SpecificArea,2,-1,0,0,0,0,0,false,false,false,false,false,false,square meter per gram,square meters per gram,m²/g,m^2/g,1000,0 -SpecificArea,2,-1,0,0,0,0,0,false,false,false,false,false,false,square meter per kilogram,square meters per kilogram,m²/kg,m^2/kg,1,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,attojoule per kilogram kelvin,attojoules per kilogram kelvin,aJ/(kg · K),aJ/(kg*K),1E-18,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per ounce degree Fahrenheit,British thermal units (IT) per ounce degree Fahrenheit,Btu (IT)/(oz · °F),Btu (IT)/(oz*degF),66988.8167418708,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per pound degree Fahrenheit,British thermal units (IT) per pound degree Fahrenheit,Btu (IT)/(lb · °F),Btu (IT)/(lb*degF),4186.80030794167,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,British thermal unit (IT) per ton degree Fahrenheit,British thermal units (IT) per ton degree Fahrenheit,Btu (IT)/(t · °F),Btu (IT)/(t*degF),1.8991008,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,British thermal unit per ounce degree Fahrenheit,British thermal units per ounce degree Fahrenheit,Btu/(oz · °F),Btu/(oz*degF),66943.990586084,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,British thermal unit per pound degree Fahrenheit,British thermal units per pound degree Fahrenheit,Btu/(lb · °F),Btu/(lb*degF),4183.99867369912,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,British thermal unit per ton degree Fahrenheit,British thermal units per ton degree Fahrenheit,Btu/(t · °F),Btu/(t*degF),1.89783,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,calorie per gram kelvin,calories per gram kelvin,cal/(g · K),cal/(g*K),4184,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,calorie per kilogram kelvin,calories per kilogram kelvin,cal/(kg · K),cal/(kg*K),4.184,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,centijoule per kilogram kelvin,centijoules per kilogram kelvin,cJ/(kg · K),cJ/(kg*K),0.01,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,decajoule per kilogram kelvin,decajoules per kilogram kelvin,daJ/(kg · K),daJ/(kg*K),10,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,decijoule per kilogram kelvin,decijoules per kilogram kelvin,dJ/(kg · K),dJ/(kg*K),0.1,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,exajoule per kilogram kelvin,exajoules per kilogram kelvin,EJ/(kg · K),EJ/(kg*K),1E+018,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,femtojoule per kilogram kelvin,femtojoules per kilogram kelvin,fJ/(kg · K),fJ/(kg*K),1E-15,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,gigajoule per kilogram kelvin,gigajoules per kilogram kelvin,GJ/(kg · K),GJ/(kg*K),1000000000,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,hectojoule per kilogram kelvin,hectojoules per kilogram kelvin,hJ/(kg · K),hJ/(kg*K),100,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,joule per gram degree celsius,joules per gram degree celsius,J/(g · °C),J/(g*degC),1000,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,joule per kilogram degree celsius,joules per kilogram degree celsius,J/(kg · °C),J/(kg*degC),1,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,joule per kilogram kelvin,joules per kilogram kelvin,J/(kg · K),J/(kg*K),1,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,kilojoule per gram degree celsius,kilojoules per gram degree celsius,kJ/(g · °C),kJ/(g*degC),1000000,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,kilojoule per kilogram degree celsius,kilojoules per kilogram degree celsius,kJ/(kg · °C),kJ/(kg*degC),1000,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,kilojoule per kilogram kelvin,kilojoules per kilogram kelvin,kJ/(kg · K),kJ/(kg*K),1000,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,megajoule per kilogram kelvin,megajoules per kilogram kelvin,MJ/(kg · K),MJ/(kg*K),1000000,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,microjoule per kilogram kelvin,microjoules per kilogram kelvin,µJ/(kg · K),uJ/(kg*K),0.000001,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,millijoule per gram degree celsius,millijoules per gram degree celsius,mJ/(g · °C),mJ/(g*degC),1,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,millijoule per kilogram degree celsius,millijoules per kilogram degree celsius,mJ/(kg · °C),mJ/(kg*degC),0.001,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,millijoule per kilogram kelvin,millijoules per kilogram kelvin,mJ/(kg · K),mJ/(kg*K),0.001,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,nanojoule per kilogram kelvin,nanojoules per kilogram kelvin,nJ/(kg · K),nJ/(kg*K),0.000000001,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,petajoule per kilogram kelvin,petajoules per kilogram kelvin,PJ/(kg · K),PJ/(kg*K),1000000000000000,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,picojoule per kilogram kelvin,picojoules per kilogram kelvin,pJ/(kg · K),pJ/(kg*K),1E-12,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,square centimeter per second squared kelvin,square centimeters per second squared kelvin,cm²/(s² · K),cm^2/(s^2*K),0.0001,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,square kilometer per second squared kelvin,square kilometers per second squared kelvin,km²/(s² · K),km^2/(s^2*K),1000000,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,square meter per second squared kelvin,square meters per second squared kelvin,m²/(s² · K),m^2/(s^2*K),1,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,square micrometer per second squared kelvin,square micrometers per second squared kelvin,µm²/(s² · K),um^2/(s^2*K),1E-12,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,square millimeter per second squared kelvin,square millimeters per second squared kelvin,mm²/(s² · K),mm^2/(s^2*K),0.000001,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,terajoule per kilogram kelvin,terajoules per kilogram kelvin,TJ/(kg · K),TJ/(kg*K),1000000000000,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,yoctojoule per kilogram kelvin,yoctojoules per kilogram kelvin,yJ/(kg · K),yJ/(kg*K),1E-24,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,yottajoule per kilogram kelvin,yottajoules per kilogram kelvin,YJ/(kg · K),YJ/(kg*K),1E+024,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,zeptojoule per kilogram kelvin,zeptojoules per kilogram kelvin,zJ/(kg · K),zJ/(kg*K),1E-21,0 -SpecificHeatCapacity,2,0,0,0,-1,0,0,false,false,false,false,false,false,zettajoule per kilogram kelvin,zettajoules per kilogram kelvin,ZJ/(kg · K),ZJ/(kg*K),1E+021,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,attowatt per kilogram,attowatts per kilogram,aW/kg,aW/kg,1E-18,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,centiwatt per kilogram,centiwatts per kilogram,cW/kg,cW/kg,0.01,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,decawatt per kilogram,decawatts per kilogram,daW/kg,daW/kg,10,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,deciwatt per kilogram,deciwatts per kilogram,dW/kg,dW/kg,0.1,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,erg per second per kilogram,ergs per second per kilogram,(erg/s)/kg,(erg/s)/kg,0.0000001,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,exawatt per kilogram,exawatts per kilogram,EW/kg,EW/kg,1E+018,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,femtowatt per kilogram,femtowatts per kilogram,fW/kg,fW/kg,1E-15,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,foot pound-force per hour per pound,foot pounds-force per hour per pound,(ft · lbf/h)/lb,(ft*lbf/h)/lb,0.000830296343393565,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,foot pound-force per minute per pound,foot pounds-force per minute per pound,(ft · lbf/min)/lb,(ft*lbf/min)/lb,0.0498177806036139,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,foot pound-force per second per pound,foot pounds-force per second per pound,(ft · lbf/s)/lb,(ft*lbf/s)/lb,2.98906683621683,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,gigawatt per kilogram,gigawatts per kilogram,GW/kg,GW/kg,1000000000,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,hectowatt per kilogram,hectowatts per kilogram,hW/kg,hW/kg,100,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,horsepower (boiler) per pound,horsepower (boiler) per pound,(hp (S))/lb,(hp (S))/lb,21626.2441786944,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,horsepower (electric) per pound,horsepower (electric) per pound,(hp (E))/lb,(hp (E))/lb,1644.64836712432,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,horsepower (Imperial) per pound,horsepower (Imperial) per pound,(hp (I))/lb,(hp (I))/lb,1643.98698038151,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,metric horsepower per pound,metric horsepower per pound,(hp (M))/lb,(hp (M))/lb,1621.49718557895,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,horsepower per pound,horsepower per pound,hp/lb,hp/lb,1643.98675991926,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,hydraulic horsepower per pound,hydraulic horsepower per pound,(hp (hydraulic))/lb,(hp (hydraulic))/lb,1644.74316589079,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,kilowatt per kilogram,kilowatts per kilogram,kW/kg,kW/kg,1000,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,megawatt per kilogram,megawatts per kilogram,MW/kg,MW/kg,1000000,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,microwatt per kilogram,microwatts per kilogram,µW/kg,uW/kg,0.000001,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,milliwatt per kilogram,milliwatts per kilogram,mW/kg,mW/kg,0.001,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,nanowatt per kilogram,nanowatts per kilogram,nW/kg,nW/kg,0.000000001,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,petawatt per kilogram,petawatts per kilogram,PW/kg,PW/kg,1000000000000000,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,picowatt per kilogram,picowatts per kilogram,pW/kg,pW/kg,1E-12,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,square meter per cubic second,square meters per cubic second,m² · s⁻³,m^2*s^-3,1,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,terawatt per kilogram,terawatts per kilogram,TW/kg,TW/kg,1000000000000,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,watt per kilogram,watts per kilogram,W/kg,W/kg,1,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,yoctowatt per kilogram,yoctowatts per kilogram,yW/kg,yW/kg,1E-24,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,yottawatt per kilogram,yottawatts per kilogram,YW/kg,YW/kg,1E+024,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,zeptowatt per kilogram,zeptowatts per kilogram,zW/kg,zW/kg,1E-21,0 -SpecificPower,2,0,-3,0,0,0,0,false,false,false,false,false,false,zettawatt per kilogram,zettawatts per kilogram,ZW/kg,ZW/kg,1E+021,0 -SpecificRadioactivity,0,-1,-1,0,0,0,0,false,true,false,false,false,false,becquerel per kilogram,becquerels per kilogram,Bq/kg,Bq/kg,1,0 -SpecificRadioactivity,0,-1,-1,0,0,0,0,false,true,false,false,false,false,curie per kilogram,curie per kilogram,Ci/kg,Ci/kg,37000000000,0 -SpecificRadioactivity,0,-1,-1,0,0,0,0,false,true,false,false,false,false,disintegration per minute per kilogram,disintegrations per minute per kilogram,dpm/kg,dpm/kg,0.0166666666666667,0 -SpecificVolume,3,-1,0,0,0,0,0,false,false,false,false,false,false,cubic centimeter per gram,cubic centimeters per gram,cm³/g,cm^3/g,0.001,0 -SpecificVolume,3,-1,0,0,0,0,0,false,false,false,false,false,false,cubic centimeter per kilogram,cubic centimeters per kilogram,cm³/kg,cm^3/kg,0.000001,0 -SpecificVolume,3,-1,0,0,0,0,0,false,false,false,false,false,false,cubic meter per gram,cubic meters per gram,m³/g,m^3/g,1000,0 -SpecificVolume,3,-1,0,0,0,0,0,false,false,false,false,false,false,cubic meter per kilogram,cubic meters per kilogram,m³/kg,m^3/kg,1,0 -SurfaceElectricCurrentDensity,-1,0,0,1,0,0,0,false,true,false,false,false,false,ampere per centimeter,amperes per centimeter,A/cm,A/cm (surface density),100,0 -SurfaceElectricCurrentDensity,-1,0,0,1,0,0,0,false,true,false,false,false,false,ampere per meter,amperes per meter,A/m,A/m (surface density),1,0 -SurfaceElectricCurrentDensity,-1,0,0,1,0,0,0,false,true,false,false,false,false,ampere per micrometer,amperes per micrometer,A/μm,A/um (surface density),1000000,0 -SurfaceElectricCurrentDensity,-1,0,0,1,0,0,0,false,true,false,false,false,false,ampere per millimeter,amperes per millimeter,A/mm,A/mm (surface density),1000,0 -TemperatureCoefficient,0,0,0,0,-1,0,0,false,false,false,false,false,false,per kelvin,per kelvin,K⁻¹,K^-1,1,0 -TemperatureCoefficient,0,0,0,0,-1,0,0,false,false,false,false,false,false,ppm per degree Celsius,ppm per degree Celsius,ppm/°C,ppm/degC,0.000001,0 -TemperatureCoefficient,0,0,0,0,-1,0,0,false,false,false,false,false,false,ppm per kelvin,ppm per kelvin,ppm/K,ppm/K,0.000001,0 -TemperatureGradient,-1,0,0,0,1,0,0,false,false,false,false,false,false,kelvin per centimeter,kelvins per centimeter,K/cm,K/cm,100,0 -TemperatureGradient,-1,0,0,0,1,0,0,false,false,false,false,false,false,kelvin per hectometer,kelvins per hectometer,K/hm,K/hm,0.01,0 -TemperatureGradient,-1,0,0,0,1,0,0,false,false,false,false,false,false,kelvin per kilometer,kelvins per kilometer,K/km,K/km,0.001,0 -TemperatureGradient,-1,0,0,0,1,0,0,false,false,false,false,false,false,kelvin per meter,kelvins per meter,K/m,K/m,1,0 -TemperatureGradient,-1,0,0,0,1,0,0,false,false,false,false,false,false,kelvin per micrometer,kelvins per micrometer,K/µm,K/um,1000000,0 -TemperatureGradient,-1,0,0,0,1,0,0,false,false,false,false,false,false,kelvin per millimeter,kelvins per millimeter,K/mm,K/mm,1000,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,attokelvin,attokelvins,aK,aK (interval),1E-18,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,centikelvin,centikelvins,cK,cK (interval),0.01,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,decakelvin,decakelvins,daK,daK (interval),10,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,decikelvin,decikelvins,dK,dK (interval),0.1,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,degree Celsius,degrees Celsius,°C,degC (interval),1,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,degree Fahrenheit,degrees Fahrenheit,°F,degF (interval),0.555555555555556,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,degree Rankine,degrees Rankine,°R,degR (interval),0.555555555555556,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,exakelvin,exakelvins,EK,EK (interval),1E+018,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,femtokelvin,femtokelvins,fK,fK (interval),1E-15,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,gigakelvin,gigakelvins,GK,GK (interval),1000000000,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,hectokelvin,hectokelvins,hK,hK (interval),100,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,kelvin,kelvins,K,K (interval),1,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,kilokelvin,kilokelvins,kK,kK (interval),1000,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,megakelvin,megakelvins,MK,MK (interval),1000000,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,microkelvin,microkelvins,µK,uK (interval),0.000001,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,millikelvin,millikelvins,mK,mK (interval),0.001,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,nanokelvin,nanokelvins,nK,nK (interval),0.000000001,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,petakelvin,petakelvins,PK,PK (interval),1000000000000000,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,picokelvin,picokelvins,pK,pK (interval),1E-12,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,terakelvin,terakelvins,TK,TK (interval),1000000000000,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,yoctokelvin,yoctokelvins,yK,yK (interval),1E-24,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,yottakelvin,yottakelvins,YK,YK (interval),1E+024,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,zeptokelvin,zeptokelvins,zK,zK (interval),1E-21,0 -TemperatureInterval,0,0,0,0,1,0,0,false,false,false,false,false,false,zettakelvin,zettakelvins,ZK,ZK (interval),1E+021,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,attogram meter squared per second cubed kelvin,attograms meter squared per second cubed kelvin,ag · m²/(s³ · K),ag*m^2/(s^3*K),1E-21,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,attowatt per kelvin,attowatts per kelvin,aW/K,aW/K,1E-18,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,centigram meter squared per second cubed kelvin,centigrams meter squared per second cubed kelvin,cg · m²/(s³ · K),cg*m^2/(s^3*K),0.00001,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,centiwatt per kelvin,centiwatts per kelvin,cW/K,cW/K,0.01,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,decagram meter squared per second cubed kelvin,decagrams meter squared per second cubed kelvin,dag · m²/(s³ · K),dag*m^2/(s^3*K),0.01,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,decawatt per kelvin,decawatts per kelvin,daW/K,daW/K,10,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,decigram meter squared per second cubed kelvin,decigrams meter squared per second cubed kelvin,dg · m²/(s³ · K),dg*m^2/(s^3*K),0.0001,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,deciwatt per kelvin,deciwatts per kelvin,dW/K,dW/K,0.1,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,exagram meter squared per second cubed kelvin,exagrams meter squared per second cubed kelvin,Eg · m²/(s³ · K),Eg*m^2/(s^3*K),1000000000000000,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,exawatt per kelvin,exawatts per kelvin,EW/K,EW/K,1E+018,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,femtogram meter squared per second cubed kelvin,femtograms meter squared per second cubed kelvin,fg · m²/(s³ · K),fg*m^2/(s^3*K),1E-18,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,femtowatt per kelvin,femtowatts per kelvin,fW/K,fW/K,1E-15,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,gigagram meter squared per second cubed kelvin,gigagrams meter squared per second cubed kelvin,Gg · m²/(s³ · K),Gg*m^2/(s^3*K),1000000,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,gigawatt per kelvin,gigawatts per kelvin,GW/K,GW/K,1000000000,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,gram meter squared per second cubed kelvin,grams meter squared per second cubed kelvin,g · m/(s³ · K),g*m/(s^3*K),0.001,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,hectogram meter squared per second cubed kelvin,hectograms meter squared per second cubed kelvin,hg · m²/(s³ · K),hg*m^2/(s^3*K),0.1,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,hectowatt per kelvin,hectowatts per kelvin,hW/K,hW/K,100,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,kilogram meter squared per second cubed degree Celsius,kilograms meter squared per second cubed degree Celsius,kg · m²/(s³ · °C),kg*m^2/(s^3*degC),1,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,kilogram meter squared per second cubed kelvin,kilograms meter squared per second cubed kelvin,kg · m²/(s³ · K),kg*m^2/(s^3*K),1,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,kilowatt per degree Celsius,kilowatts per degree Celsius,kW/°C,kW/degC,1000,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,kilowatt per kelvin,kilowatts per kelvin,kW/K,kW/K,1000,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,megagram meter squared per second cubed kelvin,megagrams meter squared per second cubed kelvin,Mg · m²/(s³ · K),Mg*m^2/(s^3*K),1000,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,megawatt per kelvin,megawatts per kelvin,MW/K,MW/K,1000000,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,microgram meter squared per second cubed kelvin,micrograms meter squared per second cubed kelvin,µg · m/(s³ · K),ug*m/(s^3*K),0.000000001,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,microwatt per kelvin,microwatts per kelvin,µW/K,uW/K,0.000001,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,milligram meter squared per second cubed kelvin,milligrams meter squared per second cubed kelvin,mg · m²/(s³ · K),mg*m^2/(s^3*K),0.000001,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,milliwatt per degree Celsius,milliwatts per degree Celsius,mW/°C,mW/degC,0.001,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,milliwatt per kelvin,milliwatts per kelvin,mW/K,mW/K,0.001,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,nanogram meter squared per second cubed kelvin,nanograms meter squared per second cubed kelvin,ng · m²/(s³ · K),ng*m^2/(s^3*K),1E-12,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,nanowatt per kelvin,nanowatts per kelvin,nW/K,nW/K,0.000000001,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,petagram meter squared per second cubed kelvin,petagrams meter squared per second cubed kelvin,Pg · m²/(s³ · K),Pg*m^2/(s^3*K),1000000000000,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,petawatt per kelvin,petawatts per kelvin,PW/K,PW/K,1000000000000000,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,picogram meter squared per second cubed kelvin,picograms meter squared per second cubed kelvin,pg · m²/(s³ · K),pg*m^2/(s^3*K),1E-15,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,picowatt per kelvin,picowatts per kelvin,pW/K,pW/K,1E-12,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,teragram meter squared per second cubed kelvin,teragrams meter squared per second cubed kelvin,Tg · m²/(s³ · K),Tg*m^2/(s^3*K),1000000000,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,terawatt per kelvin,terawatts per kelvin,TW/K,TW/K,1000000000000,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per kelvin,watts per kelvin,W/K,W/K,1,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per degree Celsius,watts per degree Celsius,W/°C,W/degC,1,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,yoctogram meter squared per second cubed kelvin,yoctograms meter squared per second cubed kelvin,yg · m²/(s³ · K),yg*m^2/(s^3*K),1E-27,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,yoctowatt per kelvin,yoctowatts per kelvin,yW/K,yW/K,1E-24,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,yottagram meter squared per second cubed kelvin,yottagrams meter squared per second cubed kelvin,Yg · m²/(s³ · K),Yg*m^2/(s^3*K),1E+021,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,yottawatt per kelvin,yottawatts per kelvin,YW/K,YW/K,1E+024,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,zeptogram meter squared per second cubed kelvin,zeptograms meter squared per second cubed kelvin,zg · m²/(s³ · K),zg*m^2/(s^3*K),1E-24,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,zeptowatt per kelvin,zeptowatts per kelvin,zW/K,zW/K,1E-21,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,zettagram meter squared per second cubed kelvin,zettagrams meter squared per second cubed kelvin,Zg · m²/(s³ · K),Zg*m^2/(s^3*K),1E+018,0 -ThermalConductance,2,1,-3,0,-1,0,0,false,false,false,false,false,false,zettawatt per kelvin,zettawatts per kelvin,ZW/K,ZW/K,1E+021,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,attogram meter per second cubed kelvin,attograms meter per second cubed kelvin,ag · m/(s³ · K),ag*m/(s^3*K),1E-21,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,attowatt per meter kelvin,attowatts per meter kelvin,aW/(m · K),aW/(m*K),1E-18,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,centigram meter per second cubed kelvin,centigrams meter per second cubed kelvin,cg · m/(s³ · K),cg*m/(s^3*K),0.00001,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,centiwatt per meter kelvin,centiwatts per meter kelvin,cW/(m · K),cW/(m*K),0.01,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,decagram meter per second cubed kelvin,decagrams meter per second cubed kelvin,dag · m/(s³ · K),dag*m/(s^3*K),0.01,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,decawatt per meter kelvin,decawatts per meter kelvin,daW/(m · K),daW/(m*K),10,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,decigram meter per second cubed kelvin,decigrams meter per second cubed kelvin,dg · m/(s³ · K),dg*m/(s^3*K),0.0001,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,deciwatt per meter kelvin,deciwatts per meter kelvin,dW/(m · K),dW/(m*K),0.1,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,exagram meter per second cubed kelvin,exagrams meter per second cubed kelvin,Eg · m/(s³ · K),Eg*m/(s^3*K),1000000000000000,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,exawatt per meter kelvin,exawatts per meter kelvin,EW/(m · K),EW/(m*K),1E+018,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,femtogram meter per second cubed kelvin,femtograms meter per second cubed kelvin,fg · m/(s³ · K),fg*m/(s^3*K),1E-18,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,femtowatt per meter kelvin,femtowatts per meter kelvin,fW/(m · K),fW/(m*K),1E-15,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,gigagram meter per second cubed kelvin,gigagrams meter per second cubed kelvin,Gg · m/(s³ · K),Gg*m/(s^3*K),1000000,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,gigawatt per meter kelvin,gigawatts per meter kelvin,GW/(m · K),GW/(m*K),1000000000,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,gram meter per second cubed kelvin,grams meter per second cubed kelvin,g · m/(s³ · K),g*m/(s^3*K) (conductivity),0.001,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,hectogram meter per second cubed kelvin,hectograms meter per second cubed kelvin,hg · m/(s³ · K),hg*m/(s^3*K),0.1,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,hectowatt per meter kelvin,hectowatts per meter kelvin,hW/(m · K),hW/(m*K),100,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,kilogram meter per second cubed degree celsius,kilograms meter per second cubed degree celsius,kg · m/(s³ · °C),kg*m/(s^3*degC),1,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,kilogram meter per second cubed kelvin,kilograms meter per second cubed kelvin,kg · m/(s³ · K),kg*m/(s^3*K),1,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,kilowatt per meter degree celsius,kilowatts per meter degree celsius,kW/(m · °C),kW/(m*degC),1000,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,kilowatt per meter kelvin,kilowatts per meter kelvin,kW/(m · K),kW/(m*K),1000,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,megagram meter per second cubed kelvin,megagrams meter per second cubed kelvin,Mg · m/(s³ · K),Mg*m/(s^3*K),1000,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,megawatt per meter kelvin,megawatts per meter kelvin,MW/(m · K),MW/(m*K),1000000,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,microgram meter per second cubed kelvin,micrograms meter per second cubed kelvin,µg · m/(s³ · K),ug*m/(s^3*K) (conductivity),0.000000001,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,microwatt per meter kelvin,microwatts per meter kelvin,µW/(m · K),uW/(m*K),0.000001,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,milligram meter per second cubed kelvin,milligrams meter per second cubed kelvin,mg · m/(s³ · K),mg*m/(s^3*K),0.000001,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,milliwatt per meter degree celsius,milliwatts per meter degree celsius,mW/(m · °C),mW/(m*degC),0.001,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,milliwatt per meter kelvin,milliwatts per meter kelvin,mW/(m · K),mW/(m*K),0.001,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,nanogram meter per second cubed kelvin,nanograms meter per second cubed kelvin,ng · m/(s³ · K),ng*m/(s^3*K),1E-12,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,nanowatt per meter kelvin,nanowatts per meter kelvin,nW/(m · K),nW/(m*K),0.000000001,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,petagram meter per second cubed kelvin,petagrams meter per second cubed kelvin,Pg · m/(s³ · K),Pg*m/(s^3*K),1000000000000,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,petawatt per meter kelvin,petawatts per meter kelvin,PW/(m · K),PW/(m*K),1000000000000000,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,picogram meter per second cubed kelvin,picograms meter per second cubed kelvin,pg · m/(s³ · K),pg*m/(s^3*K),1E-15,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,picowatt per meter kelvin,picowatts per meter kelvin,pW/(m · K),pW/(m*K),1E-12,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,teragram meter per second cubed kelvin,teragrams meter per second cubed kelvin,Tg · m/(s³ · K),Tg*m/(s^3*K),1000000000,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,terawatt per meter kelvin,terawatts per meter kelvin,TW/(m · K),TW/(m*K),1000000000000,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per meter degree celsius,watts per meter degree celsius,W/(m · °C),W/(m*degC),1,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,watt per meter kelvin,watts per meter kelvin,W/(m · K),W/(m*K),1,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,yoctogram meter per second cubed kelvin,yoctograms meter per second cubed kelvin,yg · m/(s³ · K),yg*m/(s^3*K),1E-27,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,yoctowatt per meter kelvin,yoctowatts per meter kelvin,yW/(m · K),yW/(m*K),1E-24,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,yottagram meter per second cubed kelvin,yottagrams meter per second cubed kelvin,Yg · m/(s³ · K),Yg*m/(s^3*K),1E+021,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,yottawatt per meter kelvin,yottawatts per meter kelvin,YW/(m · K),YW/(m*K),1E+024,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,zeptogram meter per second cubed kelvin,zeptograms meter per second cubed kelvin,zg · m/(s³ · K),zg*m/(s^3*K),1E-24,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,zeptowatt per meter kelvin,zeptowatts per meter kelvin,zW/(m · K),zW/(m*K),1E-21,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,zettagram meter per second cubed kelvin,zettagrams meter per second cubed kelvin,Zg · m/(s³ · K),Zg*m/(s^3*K),1E+018,0 -ThermalConductivity,1,1,-3,0,-1,0,0,false,false,false,false,false,false,zettawatt per meter kelvin,zettawatts per meter kelvin,ZW/(m · K),ZW/(m*K),1E+021,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,attokelvin,attokelvins,aK,aK,1E-18,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,centikelvin,centikelvins,cK,cK,0.01,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,decakelvin,decakelvins,daK,daK,10,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,decikelvin,decikelvins,dK,dK,0.1,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,degree Celsius,degrees Celsius,°C,degC,1,273.15 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,degree Fahrenheit,degrees Fahrenheit,°F,degF,0.555555555555556,459.67 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,degree Rankine,degrees Rankine,°R,degR,0.555555555555556,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,exakelvin,exakelvins,EK,EK,1E+018,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,femtokelvin,femtokelvins,fK,fK,1E-15,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,gigakelvin,gigakelvins,GK,GK,1000000000,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,hectokelvin,hectokelvins,hK,hK,100,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,kelvin,kelvins,K,K,1,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,kilokelvin,kilokelvins,kK,kK,1000,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,megakelvin,megakelvins,MK,MK,1000000,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,microkelvin,microkelvins,µK,uK,0.000001,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,millikelvin,millikelvins,mK,mK,0.001,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,nanokelvin,nanokelvins,nK,nK,0.000000001,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,petakelvin,petakelvins,PK,PK,1000000000000000,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,picokelvin,picokelvins,pK,pK,1E-12,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,terakelvin,terakelvins,TK,TK,1000000000000,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,yoctokelvin,yoctokelvins,yK,yK,1E-24,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,yottakelvin,yottakelvins,YK,YK,1E+024,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,zeptokelvin,zeptokelvins,zK,zK,1E-21,0 -ThermodynamicTemperature,0,0,0,0,1,0,0,false,false,false,false,true,false,zettakelvin,zettakelvins,ZK,ZK,1E+021,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,attosecond,attoseconds,as,as,1E-18,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,centisecond,centiseconds,cs,cs,0.01,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,day,days,d,d,86400,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,day (sidereal),days (sidereal),d (sidereal),d (sidereal),86164.09,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,decasecond,decaseconds,das,das,10,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,decisecond,deciseconds,ds,ds,0.1,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,exasecond,exaseconds,Es,Es,1E+018,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,femtosecond,femtoseconds,fs,fs,1E-15,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,gigasecond,gigaseconds,Gs,Gs,1000000000,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,hectosecond,hectoseconds,hs,hs,100,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,hour,hours,h,h,3600,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,hour (sidereal),hours (sidereal),h (sidereal),h (sidereal),3590.17,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,kilosecond,kiloseconds,ks,ks,1000,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,megasecond,megaseconds,Ms,Ms,1000000,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,microsecond,microseconds,µs,us,0.000001,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,millisecond,milliseconds,ms,ms,0.001,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,minute,minutes,min,min,60,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,nanosecond,nanoseconds,ns,ns,0.000000001,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,petasecond,petaseconds,Ps,Ps,1000000000000000,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,picosecond,picoseconds,ps,ps,1E-12,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,second,seconds,s,s,1,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,second (sidereal),seconds (sidereal),s (sidereal),s (sidereal),0.9972696,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,shake,shakes,10.0 ns,10.0 ns,0.00000001,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,terasecond,teraseconds,Ts,Ts,1000000000000,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,year,years,a,y,31536000,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,year (sidereal),years (sidereal),a (sidereal),a (sidereal),31558150,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,year (tropical),years (tropical),a (tropical),a (tropical),31556930,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,yoctosecond,yoctoseconds,ys,ys,1E-24,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,yottasecond,yottaseconds,Ys,Ys,1E+024,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,zeptosecond,zeptoseconds,zs,zs,1E-21,0 -Time,0,0,1,0,0,0,0,false,false,false,false,false,false,zettasecond,zettaseconds,Zs,Zs,1E+021,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,attonewton meter,attonewton meters,aN · m,aN*m,1E-18,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,centinewton meter,centinewton meters,cN · m,cN*m,0.01,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,decanewton meter,decanewton meters,daN · m,daN*m,10,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,decinewton meter,decinewton meters,dN · m,dN*m,0.1,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,dyne centimeter,dyne centimeters,dyn · cm,dyn*cm,0.0000001,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,dyne meter,dyne meters,dyn · m,dyn*m,0.00001,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,exanewton meter,exanewton meters,EN · m,EN*m,1E+018,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,femtonewton meter,femtonewton meters,fN · m,fN*m,1E-15,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,giganewton meter,giganewton meters,GN · m,GN*m,1000000000,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,hectonewton meter,hectonewton meters,hN · m,hN*m,100,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,kilogram-force meter,kilogram-force meters,kgf · m,kgf*m,9.80665,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,kilonewton meter,kilonewton meters,kN · m,kN*m,1000,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,meganewton meter,meganewton meters,MN · m,MN*m,1000000,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,micronewton meter,micronewton meters,µN · m,uN*m,0.000001,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,millinewton meter,millinewton meters,mN · m,mN*m,0.001,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,nanonewton meter,nanonewton meters,nN · m,nN*m,0.000000001,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton attometer,newton attometers,N · am,N*am,1E-18,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton centimeter,newton centimeters,N · cm,N*cm,0.01,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton decameter,newton decameters,N · dam,N*dam,10,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton decimeter,newton decimeters,N · dm,N*dm,0.1,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton exameter,newton exameters,N · Em,N*Em,1E+018,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton femtometer,newton femtometers,N · fm,N*fm,1E-15,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton gigameter,newton gigameters,N · Gm,N*Gm,1000000000,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton hectometer,newton hectometers,N · hm,N*hm,100,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton kilometer,newton kilometers,N · km,N*km,1000,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton megameter,newton megameters,N · Mm,N*Mm,1000000,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton meter,newton meters,N · m,N*m,1,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton micrometer,newton micrometers,N · µm,N*um,0.000001,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton millimeter,newton millimeters,N · mm,N*mm,0.001,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton nanometer,newton nanometers,N · nm,N*nm,0.000000001,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton petameter,newton petameters,N · Pm,N*Pm,1000000000000000,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton picometer,newton picometers,N · pm,N*pm,1E-12,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton terameter,newton terameters,N · Tm,N*Tm,1000000000000,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton yoctometer,newton yoctometers,N · ym,N*ym,1E-24,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton yottameter,newton yottameters,N · Ym,N*Ym,1E+024,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton zeptometer,newton zeptometers,N · zm,N*zm,1E-21,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,newton zettameter,newton zettameters,N · Zm,N*Zm,1E+021,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,ounce-force inch,ounces-force inches,ozf · in,ozf*in,0.00706155306,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,petanewton meter,petanewton meters,PN · m,PN*m,1000000000000000,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,piconewton meter,piconewton meters,pN · m,pN*m,1E-12,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,pound-force foot,pounds-force feet,lbf · ft,lbf*ft,1.3558180656,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,pound-force inch,pounds-force inches,lbf · in,lbf*in,0.1129848388,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,teranewton meter,teranewton meters,TN · m,TN*m,1000000000000,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,yoctonewton meter,yoctonewton meters,yN · m,yN*m,1E-24,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,yottanewton meter,yottanewton meters,YN · m,YN*m,1E+024,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,zeptonewton meter,zeptonewton meters,zN · m,zN*m,1E-21,0 -Torque,2,1,-2,0,0,0,0,true,false,false,false,false,false,zettanewton meter,zettanewton meters,ZN · m,ZN*m,1E+021,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,atomic unit of velocity,atomic units of velocity,a₀ · Eₕ/ħ,a\0*E\h/n<-,2187691.26364,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,attometer per second,attometers per second,am/s,am/s,1E-18,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,centimeter per second,centimeters per second,cm/s,cm/s,0.01,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,decameter per second,decameters per second,dam/s,dam/s,10,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,decimeter per second,decimeters per second,dm/s,dm/s,0.1,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,exameter per second,exameters per second,Em/s,Em/s,1E+018,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,femtometer per second,femtometers per second,fm/s,fm/s,1E-15,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,foot per hour,feet per hour,ft/h,ft/h,8.46666666666667E-05,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,foot per minute,feet per minute,ft/min,ft/min,0.00508,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,foot per second,feet per second,ft/s,ft/s,0.3048,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,gigameter per second,gigameters per second,Gm/s,Gm/s,1000000000,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,hectometer per second,hectometers per second,hm/s,hm/s,100,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,inch per second,inches per second,in/s,in/s,0.0254,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,kilometer per hour,kilometers per hour,km/h,km/h,0.277777777777778,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,kilometer per second,kilometers per second,km/s,km/s,1000,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,knot,knots,kn,kn,0.514444444444445,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,megameter per second,megameters per second,Mm/s,Mm/s,1000000,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,meter per second,meters per second,m/s,m/s,1,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,micrometer per second,micrometers per second,µm/s,um/s,0.000001,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,mile per hour,miles per hour,mi/h,mi/h,0.44704,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,mile per minute,miles per minute,mi/min,mi/min,26.8224,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,mile per second,miles per second,mi/s,mi/s,1609.344,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,millimeter per minute,millimeters per minute,mm/min,mm/min,1.66666666666667E-05,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,millimeter per second,millimeters per second,mm/s,mm/s,0.001,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,nanometer per second,nanometers per second,nm/s,nm/s,0.000000001,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,natural unit of velocity,natural units of velocity,c,c (natural units),299792458,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,petameter per second,petameters per second,Pm/s,Pm/s,1000000000000000,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,picometer per second,picometers per second,pm/s,pm/s,1E-12,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,speed of light in vacuum,speeds of light in vacuum,c,c (speed of light),299792458,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,terameter per second,terameters per second,Tm/s,Tm/s,1000000000000,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,yoctometer per second,yoctometers per second,ym/s,ym/s,1E-24,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,yottameter per second,yottameters per second,Ym/s,Ym/s,1E+024,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,zeptometer per second,zeptometers per second,zm/s,zm/s,1E-21,0 -Velocity,1,0,-1,0,0,0,0,false,false,false,false,false,false,zettameter per second,zettameters per second,Zm/s,Zm/s,1E+021,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,acre-foot,acre-feet,ac · ft,ac*ft,1233.489,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,attoliter,attoliters,aL,aL,1E-21,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,barrel,barrels,bbl,bbl,0.1589873,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,bushel,bushels,bu,bu,0.03523907,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,centiliter,centiliters,cL,cL,0.00001,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cord,cords,cords,cords,3.624556,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic attometer,cubic attometers,am³,am^3,1E-54,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic centimeter,cubic centimeters,cm³,cm^3,0.000001,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic decameter,cubic decameters,dam³,dam^3,1000,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic decimeter,cubic decimeters,dm³,dm^3,0.001,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic exameter,cubic exameters,Em³,Em^3,1E+054,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic femtometer,cubic femtometers,fm³,fm^3,1E-45,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic foot,cubic feet,ft³,ft^3,0.02831685,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic gigameter,cubic gigameters,Gm³,Gm^3,1E+027,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic hectometer,cubic hectometers,hm³,hm^3,1000000,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic inch,cubic inches,in³,in^3,0.00001638706,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic kilometer,cubic kilometers,km³,km^3,1000000000,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic megameter,cubic megameters,Mm³,Mm^3,1E+018,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic meter,cubic meters,m³,m^3,1,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic micrometer,cubic micrometers,µm³,um^3,1E-18,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic mile,cubic miles,mi³,mi^3,4168182000,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic millimeter,cubic millimeters,mm³,mm^3,0.000000001,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic nanometer,cubic nanometers,nm³,nm^3,1E-27,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic petameter,cubic petameters,Pm³,Pm^3,1E+045,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic picometer,cubic picometers,pm³,pm^3,1E-36,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic terameter,cubic terameters,Tm³,Tm^3,1E+036,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic yard,cubic yards,yd³,yd^3,0.7645549,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic yoctometer,cubic yoctometers,ym³,ym^3,1E-72,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic yottameter,cubic yottameters,Ym³,Ym^3,1E+072,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic zeptometer,cubic zeptometers,zm³,zm^3,1E-63,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cubic zettameter,cubic zettameters,Zm³,Zm^3,1E+063,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,cup,cups,cup,cup,0.0002365882,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,decaliter,decaliters,daL,daL,0.01,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,deciliter,deciliters,dL,dL,0.0001,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,exaliter,exaliters,EL,EL,1000000000000000,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,femtoliter,femtoliters,fL,fL,1E-18,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,fluid ounce,fluid ounces,fl oz,fl_oz,0.00002957353,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,Imperial fluid ounce,Imperial fluid ounces,fl oz (UK),fl oz (UK),0.00002841306,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,gallon,gallons,gal,gal,0.003785412,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,Imperial gallon,Imperial gallons,gal (UK),gal (UK),0.00454609,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,gigaliter,gigaliters,GL,GL,1000000,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,gill,gills,gi,gi,0.0001182941,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,Imperial gill,Imperial gills,gi (UK),gi (UK),0.0001420653,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,hectoliter,hectoliters,hL,hL,0.1,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,kiloliter,kiloliters,kL,kL,1,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,liter,liters,L,L,0.001,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,megaliter,megaliters,ML,ML,1000,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,microliter,microliters,µL,uL,0.000000001,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,milliliter,milliliters,mL,mL,0.000001,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,nanoliter,nanoliters,nL,nL,1E-12,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,peck,pecks,pk,pk,0.008809768,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,petaliter,petaliters,PL,PL,1000000000000,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,picoliter,picoliters,pL,pL,1E-15,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,dry pint,dry pints,dry pt,dry_pt,0.0005506105,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,liquid pint,liquid pints,liq pt,liq_pt,0.0004731765,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,dry quart,dry quarts,dry qt,dry_qt,0.001101221,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,liquid quart,liquid quarts,liq qt,liq_qt,0.0009463529,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,register ton,register tons,RT,RT,2.831685,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,stere,steres,st,st,1,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,tablespoon,tablespoons,tbsp,tbsp,0.00001478676,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,teaspoon,teaspoons,tsp,tsp,0.000004928922,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,teraliter,teraliters,TL,TL,1000000000,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,yoctoliter,yoctoliters,yL,yL,1E-27,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,yottaliter,yottaliters,YL,YL,1E+021,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,zeptoliter,zeptoliters,zL,zL,1E-24,0 -Volume,3,0,0,0,0,0,0,false,false,false,false,false,false,zettaliter,zettaliters,ZL,ZL,1E+018,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,acre-foot per second,acre-feet per second,ac · ft/s,ac*ft/s,1233.489,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,attoliter per second,attoliters per second,aL/s,aL/s,1E-21,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,barrel per second,barrels per second,bbl/s,bbl/s,0.1589873,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,bushel per second,bushels per second,bu/s,bu/s,0.03523907,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,centiliter per second,centiliters per second,cL/s,cL/s,0.00001,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cord per second,cords per second,cords/s,cords/s,3.624556,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic attometer per second,cubic attometers per second,am³/s,am^3/s,1E-54,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic centimeter per second,cubic centimeters per second,cm³/s,cm^3/s,0.000001,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic decameter per second,cubic decameters per second,dam³/s,dam^3/s,1000,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic decimeter per second,cubic decimeters per second,dm³/s,dm^3/s,0.001,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic exameter per second,cubic exameters per second,Em³/s,Em^3/s,1E+054,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic femtometer per second,cubic femtometers per second,fm³/s,fm^3/s,1E-45,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic foot per minute,cubic feet per minute,ft³/min,ft^3/min,0.0004719475,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic foot per second,cubic feet per second,ft³/s,ft^3/s,0.02831685,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic gigameter per second,cubic gigameters per second,Gm³/s,Gm^3/s,1E+027,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic hectometer per second,cubic hectometers per second,hm³/s,hm^3/s,1000000,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic inch per minute,cubic inches per minute,in³/min,in^3/min,2.73117666666667E-07,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic inch per second,cubic inches per second,in³/s,in^3/s,0.00001638706,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic kilometer per second,cubic kilometers per second,km³/s,km^3/s,1000000000,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic megameter per second,cubic megameters per second,Mm³/s,Mm^3/s,1E+018,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic meter per hour,cubic meters per hour,m³/h,m^3/h,0.000277777777777778,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic meter per minute,cubic meters per minute,m³/min,m^3/min,0.0166666666666667,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic meter per second,cubic meters per second,m³/s,m^3/s,1,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic micrometer per second,cubic micrometers per second,µm³/s,um^3/s,1E-18,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic mile per second,cubic miles per second,mi³/s,mi^3/s,4168182000,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic millimeter per second,cubic millimeters per second,mm³/s,mm^3/s,0.000000001,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic nanometer per second,cubic nanometers per second,nm³/s,nm^3/s,1E-27,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic petameter per second,cubic petameters per second,Pm³/s,Pm^3/s,1E+045,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic picometer per second,cubic picometers per second,pm³/s,pm^3/s,1E-36,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic terameter per second,cubic terameters per second,Tm³/s,Tm^3/s,1E+036,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic yard per minute,cubic yards per minute,yd³/min,yd^3/min,0.0127425816666667,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic yard per second,cubic yards per second,yd³/s,yd^3/s,0.7645549,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic yoctometer per second,cubic yoctometers per second,ym³/s,ym^3/s,1E-72,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic yottameter per second,cubic yottameters per second,Ym³/s,Ym^3/s,1E+072,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic zeptometer per second,cubic zeptometers per second,zm³/s,zm^3/s,1E-63,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cubic zettameter per second,cubic zettameters per second,Zm³/s,Zm^3/s,1E+063,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,cup per second,cups per second,cup/s,cup/s,0.0002365882,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,decaliter per second,decaliters per second,daL/s,daL/s,0.01,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,deciliter per second,deciliters per second,dL/s,dL/s,0.0001,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,exaliter per second,exaliters per second,EL/s,EL/s,1000000000000000,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,femtoliter per second,femtoliters per second,fL/s,fL/s,1E-18,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,Imperial fluid ounce per second,Imperial fluid ounces per second,fl oz (UK)/s,fl oz (UK)/s,0.00002841306,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,fluid ounce per second,fluid ounces per second,fl oz/s,fl_oz/s,0.00002957353,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,Imperial gallon per second,Imperial gallons per second,gal (UK)/s,gal (UK)/s,0.00454609,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,gallon per day,gallons per day,gal/d,gal/d,4.38126388888889E-08,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,gallon per minute,gallons per minute,gal/min,gal/min,0.0000630902,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,gallon per second,gallons per second,gal/s,gal/s,0.003785412,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,gigaliter per second,gigaliters per second,GL/s,GL/s,1000000,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,Imperial gill per second,Imperial gills per second,gi (UK)/s,gi (UK)/s,0.0001420653,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,gill per second,gills per second,gi/s,gi/s,0.0001182941,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,hectoliter per second,hectoliters per second,hL/s,hL/s,0.1,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,kiloliter per second,kiloliters per second,kL/s,kL/s,1,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,liter per minute,liters per minute,L/min,L/min,1.66666666666667E-05,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,liter per second,liters per second,L/s,L/s,0.001,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,megaliter per second,megaliters per second,ML/s,ML/s,1000,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,microliter per second,microliters per second,µL/s,uL/s,0.000000001,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,milliliter per second,milliliters per second,mL/s,mL/s,0.000001,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,nanoliter per second,nanoliters per second,nL/s,nL/s,1E-12,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,peck per second,pecks per second,pk/s,pk/s,0.008809768,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,petaliter per second,petaliters per second,PL/s,PL/s,1000000000000,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,picoliter per second,picoliters per second,pL/s,pL/s,1E-15,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,dry pint per second,dry pints per second,dry pt/s,dry pt/s,0.0005506105,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,liquid pint per second,liquid pints per second,liq pt/s,liq pt/s,0.0004731765,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,dry quart per second,dry quarts per second,dry qt/s,dry qt/s,0.001101221,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,liquid quart per second,liquid quarts per second,liq qt/s,liq qt/s,0.0009463529,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,register ton per second,register tons per second,RT/s,RT/s,2.831685,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,stere per second,steres per second,st/s,st/s,1,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,tablespoon per second,tablespoons per second,tbsp/s,tbsp/s,0.00001478676,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,teaspoon per second,teaspoons per second,tsp/s,tsp/s,0.000004928922,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,teraliter per second,teraliters per second,TL/s,TL/s,1000000000,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,yoctoliter per second,yoctoliters per second,yL/s,yL/s,1E-27,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,yottaliter per second,yottaliters per second,YL/s,YL/s,1E+021,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,zeptoliter per second,zeptoliters per second,zL/s,zL/s,1E-24,0 -VolumeRate,3,0,-1,0,0,0,0,false,false,false,false,false,false,zettaliter per second,zettaliters per second,ZL/s,ZL/s,1E+018,0 -VolumetricDensityOfStates,-5,-1,2,0,0,0,0,false,true,false,false,false,false,state per cubic centimeter electronvolt,states per cubic centimeter electronvolt,1/(cm³ · eV),1/(cm^3*eV),6.24150907446076E+024,0 -VolumetricDensityOfStates,-5,-1,2,0,0,0,0,false,true,false,false,false,false,state per cubic centimeter joule,states per cubic centimeter joule,1/(cm³ · J),1/(cm^3*J),1000000,0 -VolumetricDensityOfStates,-5,-1,2,0,0,0,0,false,true,false,false,false,false,state per cubic meter joule,states per cubic meter joule,1/(m³ · J),1/(m^3*J),1,0 -VolumetricHeatCapacity,-3,0,0,0,0,0,0,false,true,false,false,false,false,calorie per cubic meter kelvin,calories per cubic meter kelvin,cal/(m³ · K),cal/(m^3*K),4.184,0 -VolumetricHeatCapacity,-3,0,0,0,0,0,0,false,true,false,false,false,false,joule per cubic meter kelvin,joules per cubic meter kelvin,J/(m³ · K),J/(m^3*K),1,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per centiliter,per centiliter,cL⁻¹,cL^-1,100000,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic centimeter,per cubic centimeter,cm⁻³,cm^-3,1000000,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic decimeter,per cubic decimeter,dm⁻³,dm^-3,1000,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic foot,per cubic foot,ft⁻³,ft^-3,35.3146624712848,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic inch,per cubic inch,in⁻³,in^-3,61023.7589903253,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic kilometer,per cubic kilometer,km⁻³,km^-3,0.000000001,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic meter,per cubic meter,m⁻³,m^-3,1,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic mile,per cubic mile,mi⁻³,mi^-3,2.39912748531614E-10,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic millimeter,per cubic millimeter,mm⁻³,mm^-3,1000000000,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per cubic yard,per cubic yard,yd⁻³,yd^-3,1.30795054743616,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per deciliter,per deciliter,dL⁻¹,dL^-1,10000,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per fluid ounce,per fluid ounce,per fl oz,per fl oz,33814.0222016107,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per Imperial fluid ounce,per Imperial fluid ounce,per fl oz (UK),per fl oz (UK),35195.0828245884,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per gallon,per gallon,per gal,per_gal,264.172037284185,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per Imperial gallon,per Imperial gallon,per gal (UK),per gal (UK),219.969248299088,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per liter,per liter,L⁻¹,L^-1,1000,0 -VolumetricNumberDensity,-3,0,0,0,0,0,0,false,true,false,false,false,false,per milliliter,per milliliter,mL⁻¹,mL^-1,1000000,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,becquerel per cubic meter,becquerels per cubic meter,Bq/m³,Bq/m^3,1,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,curie per cubic meter,curies per cubic meter,Ci/m³,Ci/m^3,37000000000,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,disintegration per minute per cubic meter,disintegrations per minute per cubic meter,dpm/m³,dpm/m^3,0.0166666666666667,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per cubic centimeter second,per cubic centimeter second,cm⁻³ · s⁻¹,cm^-3*s^-1,1000000,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per cubic foot second,per cubic foot second,ft⁻³ · s⁻¹,ft^-3*s^-1,35.3146624712848,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per cubic inch second,per cubic inch second,in⁻³ · s⁻¹,in^-3*s^-1,61023.7589903253,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per cubic meter second,per cubic meter second,m⁻³ · s⁻¹,m^-3*s^-1,1,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per cubic mile second,per cubic mile second,mi⁻³ · s⁻¹,mi^-3*s^-1,2.39912748531614E-10,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per cubic millimeter second,per cubic millimeter second,mm⁻³ · s⁻¹,mm^-3*s^-1,1000000000,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per cubic yard second,per cubic yard second,yd⁻³ · s⁻¹,yd^-3*s^-1,1.30795054743616,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per Imperial fluid ounce second,per Imperial fluid ounce second,fl oz⁻¹ (UK) · s⁻¹,fl oz^-1 (UK)*s^-1,35195.0828245884,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per fluid ounce second,per fluid ounce second,fl oz⁻¹ · s⁻¹,fl oz^-1*s^-1,33814.0222016107,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per Imperial gallon second,per Imperial gallon second,gal⁻¹ (UK) · s⁻¹,gal^-1 (UK)*s^-1,219.969248299088,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per gallon second,per gallon second,gal⁻¹ · s⁻¹,gal^-1*s^-1,264.172037284185,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per liter second,per liter second,L⁻¹ · s⁻¹,L^-1*s^-1,1000,0 -VolumetricNumberRate,-3,0,-1,0,0,0,0,false,true,false,false,false,false,per milliliter second,per milliliter second,mL⁻¹ · s⁻¹,mL^-1*s^-1,1000000,0 -VolumetricPowerDensity,-1,1,-3,0,0,0,0,false,false,false,false,false,false,watt per cubic centimeter,watts per cubic centimeter,W/cm³,W/cm^3,1000000,0 -VolumetricPowerDensity,-1,1,-3,0,0,0,0,false,false,false,false,false,false,watt per cubic meter,watts per cubic meter,W/m³,W/m^3,1,0 -VolumetricPowerDensity,-1,1,-3,0,0,0,0,false,false,false,false,false,false,watt per cubic millimeter,watts per cubic millimeter,W/mm³,W/mm^3,1000000000,0 -Pixel,0,0,0,0,0,0,0,false,false,false,false,false,true,pixel,pixels,px,px,1,0 -PixelDensity,-1,0,0,0,0,0,0,false,false,false,false,false,true,pixel per inch,pixels per inch,ppi,ppi,0.3937008,0 -PixelDensity,-1,0,0,0,0,0,0,false,false,false,false,false,true,pixel per foot,pixels per foot,ppf,ppf,4.7244096,0 -PixelDensity,-1,0,0,0,0,0,0,false,false,false,false,false,true,pixel per yard,pixels per yard,ppy,ppy,14.1732288,0 -PixelDensity,-1,0,0,0,0,0,0,false,false,false,false,false,true,pixel per centimeter,pixels per centimeter,ppcm,ppcm,1,0 -PixelDensity,-1,0,0,0,0,0,0,false,false,false,false,false,true,pixel per meter,pixels per meter,ppm,ppm,0.001,0 diff --git a/src/script/execution/types/math/vector.rs b/src/script/execution/types/math/vector.rs deleted file mode 100644 index 4bb7fd4..0000000 --- a/src/script/execution/types/math/vector.rs +++ /dev/null @@ -1,1127 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::borrow::Cow; - -use arrayvec::ArrayVec; -use common_data_types::{consts, Dimension, Float, RawFloat}; -use enum_downcast::{AsVariant, EnumDowncast, IntoVariant}; -use fj_math::Scalar as FornjotScalar; -use nalgebra::{ - allocator::Allocator, base::dimension::Const, DefaultAllocator, DimName, ToTypenum, -}; - -use crate::script::{ - execution::{ - types::{ - function::{AutoCall, BuiltinFunctionRef}, - number::UnwrapNotNan, - BuiltinFunction, NamedObject, Object, OperatorResult, TypedObject, Value, - }, - ExecutionContext, Failure, - }, - logging::RuntimeLog, - parsing::{Expression, VariableType}, - Span, -}; - -use super::{get_dimension_name, CheckNan, ConvertUnit, Number, Scalar}; - -pub(super) type NVector = nalgebra::OVector; - -pub type Vector2 = Vector>; -pub type Vector3 = Vector>; -pub type Vector4 = Vector>; - -pub type LengthVector2 = LengthVector>; -pub type LengthVector3 = LengthVector>; - -macro_rules! define_fixed_dimension_vector { - ($name:ident, $dimension_name:literal, $dimension:expr) => { - #[derive(Debug, Clone, PartialEq)] - pub struct $name - where - DefaultAllocator: Allocator, - { - pub value: NVector, - } - - impl From<$name> for Vector - where - DefaultAllocator: Allocator, - { - fn from(value: $name) -> Vector { - Vector { - dimension: $dimension, - value: value.value, - } - } - } - - impl From<$name> for Value - where - DefaultAllocator: Allocator, - Value: From>, - { - fn from(value: $name) -> Value { - Value::from(Vector::from(value)) - } - } - - impl TryFrom> for $name - where - DefaultAllocator: Allocator, - Value: IntoVariant>, - { - type Error = (); - - fn try_from(value: Value) -> Result { - let vector: Vector = value.enum_downcast().map_err(|_| ())?; - Self::try_from(vector).map_err(|_| ()) - } - } - - impl TryFrom> for $name - where - DefaultAllocator: Allocator, - { - type Error = Vector; - - fn try_from(value: Vector) -> Result { - if value.dimension == $dimension { - Ok(Self { value: value.value }) - } else { - Err(value) - } - } - } - - impl<'a, D: DimName> TryFrom<&'a Vector> for $name - where - DefaultAllocator: Allocator, - { - type Error = &'a Vector; - - fn try_from(value: &'a Vector) -> Result { - if value.dimension == $dimension { - Ok(Self { - value: value.value.clone(), - }) - } else { - Err(value) - } - } - } - - impl TypedObject for $name - where - DefaultAllocator: Allocator, - { - fn get_type() -> VariableType { - VariableType::Vector(D::USIZE as u8, S::from_str($dimension_name)) - } - } - - impl NamedObject for $name - where - Vector: NamedObject, - DefaultAllocator: Allocator, - { - fn static_type_name() -> &'static str { - Vector::::static_type_name() - } - } - }; -} - -define_fixed_dimension_vector!(LengthVector, "Length", Dimension::length()); - -impl LengthVector -where - DefaultAllocator: Allocator, -{ - fn as_fornjot_scale_array( - &self, - context: &ExecutionContext, - ) -> [Float; FD] { - let mut number_array = context - .global_resources - .fornjot_unit_conversion_factor - .convert_from_vector_to_iter_without_dimension_check(&self.value); - - std::array::from_fn(|_| number_array.next().unwrap()) - } - - pub fn as_fornjot_scale_nalgebra_vector( - &self, - context: &ExecutionContext, - ) -> NVector { - let components: [_; FD] = self.as_fornjot_scale_array(context).map(|c| c.into_inner()); - NVector::from_row_slice(&components) - } - - pub fn as_fornjot_vector( - &self, - context: &ExecutionContext, - ) -> fj_math::Vector - where - Const: ToTypenum, - { - let components = self - .as_fornjot_scale_array(context) - .map(|c| FornjotScalar::from_f64(c.into_inner())); - - fj_math::Vector { components } - } - - pub fn as_fornjot_point( - &self, - context: &ExecutionContext, - ) -> fj_math::Point - where - Const: ToTypenum, - { - fj_math::Point { - coords: self.as_fornjot_vector(context), - } - } -} - -pub fn register_globals(context: &mut ExecutionContext) { - fn build_constructor() -> BuiltinFunctionRef - where - DefaultAllocator: Allocator, - Value: From>, - { - let closure: Box> = Box::new( - |context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression]| { - let splat_arguments = arguments.to_vec(); - - match Vector::::splat.auto_call(context, span, splat_arguments, expressions) { - Ok(vector) => Ok(vector), - Err(Failure::FunctionCall(_call_failure)) => { - Vector::::from_components(context, span, arguments, expressions) - } - Err(failure) => Err(failure), - } - }, - ); - BuiltinFunctionRef::from(closure) - } - - context - .stack - .new_variable_str("vec2", build_constructor::>().into()); - context - .stack - .new_variable_str("vec3", build_constructor::>().into()); - context - .stack - .new_variable_str("vec4", build_constructor::>().into()); -} - -#[derive(Debug, Clone, PartialEq)] -pub struct Vector -where - DefaultAllocator: Allocator, -{ - pub(super) dimension: Dimension, - pub(super) value: NVector, -} - -impl Object for Vector -where - S: Span, - DefaultAllocator: Allocator, - Vector: NamedObject + Into>, - Value: AsVariant> + TryInto>, - NVector: Copy, -{ - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(if let VariableType::Vector(dimension, name) = ty { - *dimension as usize == D::USIZE - && name.as_str() == Object::::type_name(self).as_ref() - } else { - false - }) - } - - fn type_name(&self) -> Cow<'static, str> { - get_dimension_name(&self.dimension) - } - - // TODO add formatting support. - - fn index( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - index: Value, - ) -> OperatorResult> { - let index = index.downcast::(span)?; - let index = Number::try_from(index.clone()).map_err(|_| { - Failure::ExpectedGot( - span.clone(), - Number::static_type_name().into(), - >::type_name(&index), - ) - })?; - let index = index.to_index(); - - if let Some(component) = self.value.get(index as usize).copied() { - Ok(Float::new(component).unwrap().into()) - } else { - Err(Failure::IndexOutOfRange(span.clone(), index)) - } - } - - fn attribute( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - attribute: &S, - ) -> OperatorResult> { - let swizzle = attribute.as_str(); - let len = swizzle.len(); - let mut chars = swizzle.chars(); - - match len { - 1 => { - let value = self.index_by_character(span, chars.next().unwrap())?; - Ok(Scalar { - dimension: self.dimension, - value, - } - .into()) - } - 2 => { - let x = self - .index_by_character(span, chars.next().unwrap())? - .into_inner(); - let y = self - .index_by_character(span, chars.next().unwrap())? - .into_inner(); - - Ok(Vector::> { - dimension: self.dimension, - value: NVector::>::new(x, y), - } - .into()) - } - 3 => { - let x = self - .index_by_character(span, chars.next().unwrap())? - .into_inner(); - let y = self - .index_by_character(span, chars.next().unwrap())? - .into_inner(); - let z = self - .index_by_character(span, chars.next().unwrap())? - .into_inner(); - - Ok(Vector::> { - dimension: self.dimension, - value: NVector::>::new(x, y, z), - } - .into()) - } - 4 => { - let x = self - .index_by_character(span, chars.next().unwrap())? - .into_inner(); - let y = self - .index_by_character(span, chars.next().unwrap())? - .into_inner(); - let z = self - .index_by_character(span, chars.next().unwrap())? - .into_inner(); - let w = self - .index_by_character(span, chars.next().unwrap())? - .into_inner(); - - Ok(Vector::> { - dimension: self.dimension, - value: NVector::>::new(x, y, z, w), - } - .into()) - } - _ => Err(Failure::SwizzleTooLong(span.clone(), len)), - } - } - - fn addition( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let rhs = self.unpack_for_addition_or_subtraction(span, rhs)?; - - let value = self.value + rhs.value; - value.check_nan(span)?; - - Ok(Self { - dimension: self.dimension, - value, - } - .into()) - } - fn subtraction( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let rhs = self.unpack_for_addition_or_subtraction(span, rhs)?; - - let value = self.value - rhs.value; - value.check_nan(span)?; - - Ok(Self { - dimension: self.dimension, - value, - } - .into()) - } - fn multiply( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let scalar = rhs.downcast_ref::(span)?; - - let dimension = self.dimension + scalar.dimension; - let value = self.value * scalar.value.into_inner(); - value.check_nan(span)?; - - Ok(Self { dimension, value }.into()) - } - fn divide( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let scalar = rhs.downcast_ref::(span)?; - - let dimension = self.dimension - scalar.dimension; - let value = self.value / scalar.value.into_inner(); - value.check_nan(span)?; - - Ok(Self { dimension, value }.into()) - } - fn method_call( - &self, - context: &mut ExecutionContext, - span: &S, - attribute: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult> { - match attribute.as_str() { - "dot" => |_context: &mut ExecutionContext, - span: &S, - rhs: Vector| - -> OperatorResult> { - self.validate_dimensions_match(span, &rhs)?; - - Ok(Scalar { - dimension: Dimension::zero(), - value: Float::new(self.value.dot(&rhs.value)).unwrap_not_nan(span)?, - } - .into()) - } - .auto_call(context, span, arguments, expressions), - "cross" => |_context: &mut ExecutionContext, - span: &S, - rhs: Vector| - -> OperatorResult> { - self.validate_dimensions_match(span, &rhs)?; - let value = self.value.cross(&rhs.value); - value.check_nan(span)?; - - Ok(Self { - dimension: self.dimension, - value, - } - .into()) - } - .auto_call(context, span, arguments, expressions), - "abs" => { - |_context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(Self { - dimension: self.dimension, - value: self.value.abs(), - } - .into()) - } - .auto_call(context, span, arguments, expressions) - } - "add_scalar" => |_context: &mut ExecutionContext, - span: &S, - scalar: Scalar| - -> OperatorResult> { - if self.dimension == scalar.dimension { - Ok(Self { - dimension: self.dimension, - value: self.value.add_scalar(*scalar.value), - } - .into()) - } else { - Err(Failure::ExpectedGot( - span.clone(), - >::type_name(self), - Object::::type_name(&scalar), - )) - } - } - .auto_call(context, span, arguments, expressions), - "sub_scalar" => |_context: &mut ExecutionContext, - span: &S, - scalar: Scalar| - -> OperatorResult> { - if self.dimension == scalar.dimension { - Ok(Self { - dimension: self.dimension, - value: self.value.add_scalar(-*scalar.value), - } - .into()) - } else { - Err(Failure::ExpectedGot( - span.clone(), - >::type_name(self), - Object::::type_name(&scalar), - )) - } - } - .auto_call(context, span, arguments, expressions), - "angle" => |_context: &mut ExecutionContext, - span: &S, - rhs: Vector| - -> OperatorResult> { - // In Radians - let value = self.value.angle(&rhs.value) / consts::PI; - let value = Float::new(value).unwrap_not_nan(span)?; - let dimension = Dimension::angle(); - - Ok(Scalar { dimension, value }.into()) - } - .auto_call(context, span, arguments, expressions), - "norm" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - Ok(Scalar { - dimension: self.dimension, - value: Float::new(self.value.norm()).unwrap_not_nan(span)?, - } - .into()) - } - .auto_call(context, span, arguments, expressions) - } - "norm_squared" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - Ok(Scalar { - dimension: self.dimension, - value: Float::new(self.value.norm_squared()).unwrap_not_nan(span)?, - } - .into()) - } - .auto_call(context, span, arguments, expressions) - } - "normalize" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - let value = self.value.normalize(); - value.check_nan(span)?; - - Ok(Self { - dimension: Dimension::zero(), - value, - } - .into()) - } - .auto_call(context, span, arguments, expressions) - } - _ => Err(Failure::UnknownAttribute(attribute.clone())), - } - } -} - -impl NamedObject for Vector> { - fn static_type_name() -> &'static str { - "Vector2" - } -} - -impl NamedObject for Vector> { - fn static_type_name() -> &'static str { - "Vector3" - } -} - -impl NamedObject for Vector> { - fn static_type_name() -> &'static str { - "Vector4" - } -} - -impl Vector -where - DefaultAllocator: Allocator, -{ - pub(super) fn check_dimension( - &self, - span: &S, - dimension: Dimension, - ) -> OperatorResult { - if self.dimension == dimension { - Ok(()) - } else { - Err(Failure::ExpectedGot( - span.clone(), - get_dimension_name(&dimension), - get_dimension_name(&self.dimension), - )) - } - } - - pub(super) fn from_value_ref<'b, S: Span>( - span: &S, - value: &'b Value, - dimension: Dimension, - ) -> OperatorResult - where - Self: NamedObject, - Value: AsVariant, - { - let value = value.downcast_ref::(span)?; - value.check_dimension(span, dimension)?; - - Ok(value) - } - fn validate_dimensions_match(&self, span: &S, rhs: &Self) -> OperatorResult - where - Vector: NamedObject + Object, - { - if self.dimension == rhs.dimension { - Ok(()) - } else { - Err(Failure::ExpectedGot( - span.clone(), - >::type_name(self), - >::type_name(rhs), - )) - } - } - - fn unpack_for_addition_or_subtraction<'b, S: Span>( - &'b self, - span: &S, - rhs: &'b Value, - ) -> OperatorResult - where - Vector: NamedObject + Object, - Value: AsVariant>, - { - let rhs = rhs.downcast_ref::>(span)?; - self.validate_dimensions_match(span, rhs)?; - - Ok(rhs) - } - - fn index_by_character(&self, span: &S, c: char) -> OperatorResult { - let index = match c { - 'x' | 'r' => 0, - 'y' | 'g' => 1, - 'z' | 'b' => 2, - 'w' | 'a' => 3, - _ => return Err(Failure::CharacterNotInVector(span.clone(), c)), - }; - - if let Some(component) = self.value.get(index).copied() { - Ok(Float::new(component).unwrap()) - } else { - Err(Failure::CharacterNotInVector(span.clone(), c)) - } - } - - fn splat( - _context: &mut ExecutionContext, - _span: &S, - splat_value: Scalar, - ) -> OperatorResult> - where - Value: From, - { - let dimension = splat_value.dimension; - let value = NVector::repeat(*splat_value.value); - - Ok(Vector { dimension, value }.into()) - } - - fn from_components( - _context: &mut ExecutionContext, - span: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult> - where - Value: From, - { - let mut expression_iter = expressions.iter(); - let mut argument_iter = arguments.into_iter(); - - let mut components = ArrayVec::::new(); - - let first_argument = argument_iter - .next() - .ok_or(Failure::MissingArguments(span.clone()))?; - let first_span = expression_iter.next().unwrap(); - - let first_argument: Scalar = first_argument.downcast(first_span.get_span())?; - - let dimension = first_argument.dimension; - components.push(*first_argument.value); - - for _ in 1..D::USIZE { - if let Some(value) = argument_iter.next() { - let value: Scalar = value.downcast(expression_iter.next().unwrap().get_span())?; - - if value.dimension == dimension { - components.push(*value.value); - } else { - return Err(Failure::ExpectedGot( - span.clone(), - get_dimension_name(&dimension), - get_dimension_name(&value.dimension), - )); - } - } else { - return Err(Failure::MissingArguments(span.clone())); - } - } - - if let Some(extra_expression) = expression_iter.next() { - Err(Failure::TooManyArguments( - extra_expression.get_span().clone(), - )) - } else { - let components = components.into_iter(); - Ok(Self { - dimension, - value: NVector::::from_iterator(components), - } - .into()) - } - } -} - -#[cfg(test)] -mod test { - use super::*; - use common_data_types::{Dimension, RatioTypeHint, RawFloat}; - - use crate::script::{ - execution::{expressions::run_expression, ExecutionContext}, - parsing::Expression, - Runtime, - }; - - #[test] - fn construct_vec2() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("vec2(1)").unwrap().1), - Ok(Vector { - dimension: Dimension::zero(), - value: NVector::>::new(1.0, 1.0), - } - .into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("vec2(1, 2)").unwrap().1), - Ok(Vector { - dimension: Dimension::zero(), - value: NVector::>::new(1.0, 2.0), - } - .into()) - ); - }); - } - - #[test] - fn construct_vec3() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("vec3(1)").unwrap().1), - Ok(Vector { - dimension: Dimension { - length: 0, - mass: 0, - time: 0, - electric_current: 0, - thermodynamic_temprature: 0, - amount_of_substance: 0, - luminous_intensity: 0, - ratio_type_hint: RatioTypeHint(0), - }, - value: NVector::>::new(1.0, 1.0, 1.0), - } - .into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("vec3(1, 2, 3)").unwrap().1), - Ok(Vector { - dimension: Dimension { - length: 0, - mass: 0, - time: 0, - electric_current: 0, - thermodynamic_temprature: 0, - amount_of_substance: 0, - luminous_intensity: 0, - ratio_type_hint: RatioTypeHint(0), - }, - value: NVector::>::new(1.0, 2.0, 3.0), - } - .into()) - ); - }); - } - - #[test] - fn construct_vec4() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("vec4(1)").unwrap().1), - Ok(Vector { - dimension: Dimension { - length: 0, - mass: 0, - time: 0, - electric_current: 0, - thermodynamic_temprature: 0, - amount_of_substance: 0, - luminous_intensity: 0, - ratio_type_hint: RatioTypeHint(0), - }, - value: NVector::>::new(1.0, 1.0, 1.0, 1.0), - } - .into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("vec4(1, 2, 3, 4)").unwrap().1), - Ok(Vector { - dimension: Dimension { - length: 0, - mass: 0, - time: 0, - electric_current: 0, - thermodynamic_temprature: 0, - amount_of_substance: 0, - luminous_intensity: 0, - ratio_type_hint: RatioTypeHint(0), - }, - value: NVector::>::new(1.0, 2.0, 3.0, 4.0), - } - .into()) - ); - }); - } - - #[test] - fn to_fornjot_vector() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("vec2(1mm, 2mm)").unwrap().1) - .unwrap() - .downcast::>>(&"") - .map(|v| -> LengthVector2 { v.try_into().unwrap() }) - .unwrap() - .as_fornjot_vector(context), - fj_math::Vector::<2> { - components: [1.0.into(), 2.0.into()] - } - ); - }); - } - #[test] - fn to_fornjot_point() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("vec2(1mm, 2mm)").unwrap().1) - .unwrap() - .downcast::>>(&"") - .map(|v| -> LengthVector2 { v.try_into().unwrap() }) - .unwrap() - .as_fornjot_point(context), - fj_math::Point::<2> { - coords: fj_math::Vector::<2> { - components: [1.0.into(), 2.0.into()] - } - } - ); - }); - } - - #[test] - fn index() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("vec2(1, 2)[0]").unwrap().1), - Ok(Scalar::from_number(Float::new(1.0).unwrap()).into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("vec2(1, 2)[1]").unwrap().1), - Ok(Scalar::from_number(Float::new(2.0).unwrap()).into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("vec2(1, 2)[2]").unwrap().1), - Err(Failure::IndexOutOfRange("vec2", 2)) - ); - assert_eq!( - run_expression(context, &Expression::parse("vec2(1, 2)[-1]").unwrap().1), - Err(Failure::IndexOutOfRange("vec2", -1)) - ); - }); - } - - #[test] - fn swizzle() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("vec4(1, 2, 3, 4).x").unwrap().1), - Ok(Float::new(1.0).unwrap().into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("vec4(1, 2, 3, 4).y").unwrap().1), - Ok(Float::new(2.0).unwrap().into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("vec4(1, 2, 3, 4).z").unwrap().1), - Ok(Float::new(3.0).unwrap().into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("vec4(1, 2, 3, 4).w").unwrap().1), - Ok(Float::new(4.0).unwrap().into()) - ); - - assert_eq!( - run_expression(context, &Expression::parse("vec4(1, 2, 3, 4).r").unwrap().1), - Ok(Float::new(1.0).unwrap().into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("vec4(1, 2, 3, 4).g").unwrap().1), - Ok(Float::new(2.0).unwrap().into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("vec4(1, 2, 3, 4).b").unwrap().1), - Ok(Float::new(3.0).unwrap().into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("vec4(1, 2, 3, 4).a").unwrap().1), - Ok(Float::new(4.0).unwrap().into()) - ); - - assert_eq!( - run_expression( - context, - &Expression::parse("vec4(1, 2, 3, 4).xy").unwrap().1 - ), - Ok(Vector { - dimension: Dimension { - length: 0, - mass: 0, - time: 0, - electric_current: 0, - thermodynamic_temprature: 0, - amount_of_substance: 0, - luminous_intensity: 0, - ratio_type_hint: RatioTypeHint(0), - }, - value: NVector::>::new(1.0, 2.0), - } - .into()) - ); - assert_eq!( - run_expression( - context, - &Expression::parse("vec4(1, 2, 3, 4).xyz").unwrap().1 - ), - Ok(Vector { - dimension: Dimension { - length: 0, - mass: 0, - time: 0, - electric_current: 0, - thermodynamic_temprature: 0, - amount_of_substance: 0, - luminous_intensity: 0, - ratio_type_hint: RatioTypeHint(0), - }, - value: NVector::>::new(1.0, 2.0, 3.0,), - } - .into()) - ); - assert_eq!( - run_expression( - context, - &Expression::parse("vec4(1, 2, 3, 4).xyzw").unwrap().1 - ), - Ok(Vector { - dimension: Dimension { - length: 0, - mass: 0, - time: 0, - electric_current: 0, - thermodynamic_temprature: 0, - amount_of_substance: 0, - luminous_intensity: 0, - ratio_type_hint: RatioTypeHint(0), - }, - value: NVector::>::new(1.0, 2.0, 3.0, 4.0,), - } - .into()) - ); - }); - } - - #[test] - fn addition() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression( - context, - &Expression::parse("vec2(1, 2) + vec2(3, 4)").unwrap().1 - ), - Ok(Vector { - dimension: Dimension::zero(), - value: NVector::>::new(4.0, 6.0), - } - .into()) - ); - }); - } - - #[test] - fn subtraction() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression( - context, - &Expression::parse("vec2(1, 2) - vec2(3, 4)").unwrap().1 - ), - Ok(Vector { - dimension: Dimension::zero(), - value: NVector::>::new(-2.0, -2.0), - } - .into()) - ); - }); - } - - #[test] - fn scalar_multiplication() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("vec2(1, 2) * 4").unwrap().1), - Ok(Vector { - dimension: Dimension::zero(), - value: NVector::>::new(4.0, 8.0), - } - .into()) - ); - }); - } - - #[test] - fn scalar_division() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression(context, &Expression::parse("vec2(1, 2) / 2").unwrap().1), - Ok(Vector { - dimension: Dimension::zero(), - value: NVector::>::new(0.5, 1.0), - } - .into()) - ); - assert_eq!( - run_expression(context, &Expression::parse("vec2(1, 2) / 0").unwrap().1), - Ok(Vector { - dimension: Dimension::zero(), - value: NVector::>::new(RawFloat::INFINITY, RawFloat::INFINITY,), - } - .into()) - ); - }); - } - - #[test] - fn nan_check() { - assert_eq!(NVector::>::new(1.0, 1.0).check_nan(&"nan"), Ok(())); - assert_eq!( - NVector::>::new(RawFloat::NAN, 1.0).check_nan(&"nan"), - Err(Failure::ResultIsNan("nan")), - ); - assert_eq!( - NVector::>::new(1.0, RawFloat::NAN).check_nan(&"nan"), - Err(Failure::ResultIsNan("nan")), - ); - - assert_eq!( - NVector::>::new(1.0, 1.0, 1.0).check_nan(&"nan"), - Ok(()) - ); - assert_eq!( - NVector::>::new(RawFloat::NAN, 1.0, 1.0).check_nan(&"nan"), - Err(Failure::ResultIsNan("nan")), - ); - assert_eq!( - NVector::>::new(1.0, RawFloat::NAN, 1.0).check_nan(&"nan"), - Err(Failure::ResultIsNan("nan")), - ); - assert_eq!( - NVector::>::new(1.0, 1.0, RawFloat::NAN).check_nan(&"nan"), - Err(Failure::ResultIsNan("nan")), - ); - } - - #[test] - fn angle() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression( - context, - &Expression::parse("vec2(0, 1).angle(vec2(1, 0))").unwrap().1 - ), - Ok(Scalar { - dimension: Dimension::angle(), - value: Float::new(0.5).unwrap(), - } - .into()) - ); - }); - } -} diff --git a/src/script/execution/types/mod.rs b/src/script/execution/types/mod.rs deleted file mode 100644 index 0c629c2..0000000 --- a/src/script/execution/types/mod.rs +++ /dev/null @@ -1,369 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::{borrow::Cow, cmp::Ordering, fmt::Write}; - -use enum_dispatch::enum_dispatch; -use enum_downcast::{AsVariant, EnumDowncast}; - -use crate::script::{ - logging::RuntimeLog, - parsing::{Expression, Litteral, VariableType}, - Span, -}; - -use super::{ExecutionContext, Failure}; - -mod none; -pub use none::NoneType; - -mod default; -pub use default::DefaultValue; - -mod boolean; -pub use boolean::Boolean; - -mod number; - -pub mod function; -pub use function::{BuiltinFunction, UserFunction}; - -mod structures; -pub use structures::{StructDefinition, Structure}; - -mod list; -pub use list::List; - -mod string; -pub use string::{ - formatting::{Style, UnwrapFormattingResult}, - SString, -}; - -mod math; -use self::function::BuiltinFunctionRef; -pub use self::math::{ - print_all_supported_units, Length, LengthVector2, Quaternion, Scalar, Transform2D, Transform3D, - Vector2, Vector3, Vector4, -}; - -mod range; -pub use range::Range; - -mod closure; -pub use closure::Closure; - -mod serializable; -pub use serializable::SerializableValue; - -mod modeling; -pub use modeling::{ - curve::Curve, cycle::Cycle, face::Face, half_edge::HalfEdge, region::Region, shell::Shell, - sketch::Sketch, solid::Solid, surface::Surface, vertex::Vertex, -}; - -pub fn register_globals(context: &mut ExecutionContext<'_, S>) { - math::register_globals(context); - modeling::register_globals(context); -} - -// TODO this should probably be moved to failure_message.rs -pub type OperatorResult = std::result::Result>; - -fn unsupported_operation_message + ?Sized>( - object: &O, - span: &S, - operation_name: &'static str, -) -> OperatorResult { - Err(Failure::UnsupportedOperation( - span.clone(), - object.type_name(), - operation_name, - )) -} - -pub trait TypedObject { - fn get_type() -> VariableType; -} - -pub trait NamedObject { - fn static_type_name() -> &'static str; -} - -#[enum_dispatch] -pub trait Object: NamedObject { - fn matches_type( - &self, - ty: &VariableType, - log: &mut dyn RuntimeLog, - variable_name_span: &S, - ) -> OperatorResult; - - fn format( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - _f: &mut dyn Write, - _style: Style, - _precision: Option, - ) -> OperatorResult { - unsupported_operation_message(self, span, "format") - } - - fn type_name(&self) -> Cow<'static, str> { - Self::static_type_name().into() - } - - fn and( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - _rhs: &Value, - ) -> OperatorResult> { - unsupported_operation_message(self, span, "and") - } - fn or( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - _rhs: &Value, - ) -> OperatorResult> { - unsupported_operation_message(self, span, "or") - } - fn cmp( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - _rhs: &Value, - ) -> OperatorResult { - unsupported_operation_message(self, span, "compare") - } - fn eq(&self, log: &mut dyn RuntimeLog, span: &S, rhs: &Value) -> OperatorResult { - Ok(matches!(self.cmp(log, span, rhs)?, Ordering::Equal)) - } - fn addition( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - _rhs: &Value, - ) -> OperatorResult> { - unsupported_operation_message(self, span, "addition") - } - fn subtraction( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - _rhs: &Value, - ) -> OperatorResult> { - unsupported_operation_message(self, span, "subtraction") - } - fn multiply( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - _rhs: &Value, - ) -> OperatorResult> { - unsupported_operation_message(self, span, "multiply") - } - fn divide( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - _rhs: &Value, - ) -> OperatorResult> { - unsupported_operation_message(self, span, "divide") - } - fn attribute( - &self, - _log: &mut dyn RuntimeLog, - _span: &S, - attribute: &S, - ) -> OperatorResult> { - Err(Failure::UnknownAttribute(attribute.clone())) - } - fn call( - &self, - _context: &mut ExecutionContext, - span: &S, - _arguments: Vec>, - _spans: &[Expression], - ) -> OperatorResult> { - unsupported_operation_message(self, span, "call") - } - fn method_call( - &self, - _context: &mut ExecutionContext, - _span: &S, - attribute: &S, - _arguments: Vec>, - _spans: &[Expression], - ) -> OperatorResult> { - Err(Failure::UnknownAttribute(attribute.clone())) - } - fn index( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - _index: Value, - ) -> OperatorResult> { - unsupported_operation_message(self, span, "index") - } - fn iterate( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - ) -> OperatorResult>>> { - unsupported_operation_message(self, span, "iterate") - } - fn unary_plus(&self, _log: &mut dyn RuntimeLog, span: &S) -> OperatorResult> { - unsupported_operation_message(self, span, "unary plus") - } - fn unary_minus(&self, _log: &mut dyn RuntimeLog, span: &S) -> OperatorResult> { - unsupported_operation_message(self, span, "unary minus") - } - fn unary_logical_not( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - ) -> OperatorResult> { - unsupported_operation_message(self, span, "unary logical not") - } - - fn export( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - ) -> OperatorResult { - unsupported_operation_message(self, span, "export") - } -} - -trait UnwrapBorrowFailure { - fn unwrap_borrow_failure(self, span: &S) -> Result>; -} - -impl UnwrapBorrowFailure for Result { - fn unwrap_borrow_failure(self, span: &S) -> Result> { - self.map_err(|_error| Failure::CannotBorrowImmutably(span.clone(), span.clone())) - } -} - -impl UnwrapBorrowFailure for Result { - fn unwrap_borrow_failure(self, span: &S) -> Result> { - self.map_err(|_error| Failure::CannotBorrowMutably(span.clone(), span.clone())) - } -} - -#[enum_dispatch(Object, ObjectClone, FormatArgument)] -#[derive(Debug, PartialEq, EnumDowncast, Clone)] -pub enum Value { - NoneType, - Default(DefaultValue), - Boolean, - BuiltinFunction(BuiltinFunctionRef), - UserFunction(UserFunction), - Structure(Structure), - StructDefinition(StructDefinition), - List(List), - String(SString), - Range(Range), - Closure(Closure), - Scalar, - Vector2(Vector2), - Vector3(Vector3), - Vector4(Vector4), - Transform2D, - Transform3D, - Quaternion, - Cycle, - Region, - Sketch, - Surface, - Solid, - Shell, - Face, - Curve, - HalfEdge, - Vertex, -} - -impl NamedObject for Value { - fn static_type_name() -> &'static str { - "Value" - } -} - -impl Value { - pub fn downcast_ref(&self, span: &S) -> OperatorResult - where - T: NamedObject, - Self: AsVariant, - { - if let Some(value) = self.enum_downcast_ref() { - Ok(value) - } else { - Err(Failure::ExpectedGot( - span.clone(), - T::static_type_name().into(), - self.type_name(), - )) - } - } - - pub fn downcast(self, span: &S) -> OperatorResult - where - T: NamedObject, - Self: TryInto, - { - let type_name = self.type_name(); - - match self.try_into() { - Ok(value) => Ok(value), - Err(_original) => Err(Failure::ExpectedGot( - span.clone(), - T::static_type_name().into(), - type_name, - )), - } - } - - pub fn downcast_optional(self, span: &S) -> OperatorResult> - where - T: NamedObject, - Self: TryInto, - { - match self { - Self::NoneType(_) => Ok(None), - this => Ok(Some(this.downcast::(span)?)), - } - } - - pub fn from_litteral( - context: &mut ExecutionContext, - value: &Litteral, - ) -> OperatorResult { - match value { - Litteral::Scalar(scalar) => Scalar::from_parsed(scalar), - Litteral::String(string) => SString::from_parsed(string), - Litteral::List(list) => List::from_parsed(context, list), - Litteral::Boolean(_span, value) => Ok(Self::Boolean(*value)), - Litteral::Default(_span) => Ok(DefaultValue.into()), - Litteral::Closure(closure) => Ok(Closure::from(closure).into()), - } - } -} diff --git a/src/script/execution/types/modeling/curve.rs b/src/script/execution/types/modeling/curve.rs deleted file mode 100644 index e226777..0000000 --- a/src/script/execution/types/modeling/curve.rs +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use fj_core::{storage::Handle, topology::Curve as FornjotCurve}; - -use crate::script::{ - execution::{ - types::{Object, OperatorResult}, - ExecutionContext, - }, - logging::RuntimeLog, - parsing::VariableType, - Span, -}; - -use super::handle_wrapper; - -pub fn register_globals(_context: &mut ExecutionContext) { - // TODO we should have the power to build faces from surfaces and regions. -} - -#[derive(Clone)] -pub struct Curve { - pub handle: Handle, -} - -impl Object for Curve { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::Face)) - } -} - -handle_wrapper!(Curve, FornjotCurve); diff --git a/src/script/execution/types/modeling/cycle.rs b/src/script/execution/types/modeling/cycle.rs deleted file mode 100644 index baba2d3..0000000 --- a/src/script/execution/types/modeling/cycle.rs +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::ops::Deref; - -use crate::script::{ - execution::{ - types::{ - function::{AutoCall, IntoBuiltinFunction}, - Object, OperatorResult, Value, - }, - ExecutionContext, Failure, - }, - logging::RuntimeLog, - parsing::VariableType, - Span, -}; - -use fj_core::{ - operations::{build::BuildCycle, insert::Insert, reverse::Reverse}, - storage::Handle, - topology::Cycle as FornjotCycle, -}; - -use super::{ - handle_wrapper, - structs::{Circle, Polygon, Segments}, -}; - -pub fn register_globals(context: &mut ExecutionContext) { - context.stack.new_variable_str( - "new_cycle", - (|context: &mut ExecutionContext, span: &S, configuration: Value| match configuration - { - Value::Structure(configuration) => match configuration.name() { - "Circle" => { - let circle = Circle::unpack_struct(span, configuration)?; - - let circle = FornjotCycle::circle( - circle.center.as_fornjot_point(context), - circle.radius.as_fornjot_scalar(context), - circle.surface.handle, - &mut context.global_resources.fornjot_core, - ); - let circle = circle.insert(&mut context.global_resources.fornjot_core); - context.unpack_validation_warnings(span); - - Ok(Cycle { handle: circle }.into()) - } - "Polygon" => { - let polygon = Polygon::unpack_struct(span, configuration)?; - - let polygone = FornjotCycle::polygon( - polygon.points(context, span)?, - polygon.surface.handle, - &mut context.global_resources.fornjot_core, - ); - let polygon = polygone.insert(&mut context.global_resources.fornjot_core); - context.unpack_validation_warnings(span); - - Ok(Cycle { handle: polygon }.into()) - } - "Segments" => { - let segments = Segments::unpack_struct(span, configuration)?; - let points = segments.as_polygon(context, span)?; - - let polygone = FornjotCycle::polygon( - points, - segments.surface.handle, - &mut context.global_resources.fornjot_core, - ); - let polygon = polygone.insert(&mut context.global_resources.fornjot_core); - context.unpack_validation_warnings(span); - - Ok(Cycle { handle: polygon }.into()) - } - _ => Err(Failure::ExpectedGot( - span.clone(), - "Empty, Circle, Polygon, or list of edges".into(), - configuration.name().to_string().into(), - )), - }, - configuration => Err(Failure::ExpectedGot( - span.clone(), - "Empty, Circle, Polygon, or list of edges".into(), - configuration.type_name(), - )), - }) - .into_builtin_function() - .into(), - ) -} - -#[derive(Clone)] -pub struct Cycle { - pub handle: Handle, -} - -impl Object for Cycle { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::Cycle)) - } - - fn method_call( - &self, - context: &mut ExecutionContext, - span: &S, - attribute: &S, - arguments: Vec>, - spans: &[crate::script::parsing::Expression], - ) -> OperatorResult> { - match attribute.as_str() { - "reverse" => { - |context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - let reversed = self - .handle - .deref() - .reverse(&mut context.global_resources.fornjot_core); - - let reversed = reversed.insert(&mut context.global_resources.fornjot_core); - context.unpack_validation_warnings(span); - - Ok(Self::from(reversed).into()) - } - .auto_call(context, span, arguments, spans) - } - _ => Err(Failure::UnknownAttribute(attribute.clone())), - } - } -} - -handle_wrapper!(Cycle, FornjotCycle); - -#[cfg(test)] -mod test { - use crate::script::{ - execution::{expressions::run_expression, types::Value}, - parsing::Expression, - Runtime, - }; - - use super::*; - - #[test] - fn construct_circle() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert!(matches!( - run_expression( - context, - &Expression::parse( - "new_cycle(Circle { center = vec2(1mm, 2mm), radius = 3mm, surface = global_xy_plane() })" - ) - .unwrap() - .1 - ), - Ok(Value::Cycle(_)) - )); - }); - } - - #[test] - fn construct_polygon() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert!(matches!( - run_expression( - context, - &Expression::parse( - "new_cycle(Polygon { points = [vec2(0m, 0m), vec2(0m, 1m), vec2(1m, 1m), vec2(1m, 0m)], surface = global_xy_plane() })" - ) - .unwrap() - .1 - ), - Ok(Value::Cycle(_)) - )); - }); - } -} diff --git a/src/script/execution/types/modeling/face.rs b/src/script/execution/types/modeling/face.rs deleted file mode 100644 index a47ef05..0000000 --- a/src/script/execution/types/modeling/face.rs +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use fj_core::{storage::Handle, topology::Face as FornjotFace}; - -use crate::script::{ - execution::{ - types::{Object, OperatorResult}, - ExecutionContext, - }, - logging::RuntimeLog, - parsing::VariableType, - Span, -}; - -use super::handle_wrapper; - -pub fn register_globals(_context: &mut ExecutionContext) { - // TODO we should have the power to build faces from surfaces and regions. -} - -#[derive(Clone)] -pub struct Face { - pub handle: Handle, -} - -impl Object for Face { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::Face)) - } -} - -handle_wrapper!(Face, FornjotFace); - -// TODO test adding duplicate regions to the face (through update and add_regions) -// TODO test updating a region that did not exist in the face diff --git a/src/script/execution/types/modeling/half_edge.rs b/src/script/execution/types/modeling/half_edge.rs deleted file mode 100644 index f62644c..0000000 --- a/src/script/execution/types/modeling/half_edge.rs +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use fj_core::{storage::Handle, topology::HalfEdge as FornjotHalfEdge}; - -use crate::script::{ - execution::{ - types::{Object, OperatorResult}, - ExecutionContext, - }, - logging::RuntimeLog, - parsing::VariableType, - Span, -}; - -use super::handle_wrapper; - -pub fn register_globals(_context: &mut ExecutionContext) { - // TODO we should have the power to build faces from surfaces and regions. -} - -#[derive(Clone)] -pub struct HalfEdge { - pub handle: Handle, -} - -impl Object for HalfEdge { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::Face)) - } -} - -handle_wrapper!(HalfEdge, FornjotHalfEdge); diff --git a/src/script/execution/types/modeling/mod.rs b/src/script/execution/types/modeling/mod.rs deleted file mode 100644 index 45f4b70..0000000 --- a/src/script/execution/types/modeling/mod.rs +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use crate::script::{execution::ExecutionContext, Span}; - -// TODO I want a box type that can be a square or a rectangle. -pub mod curve; -pub mod cycle; -pub mod face; -pub mod half_edge; -pub mod object_set; -pub mod region; -pub mod shell; -pub mod sketch; -pub mod solid; -mod structs; -pub mod surface; -pub mod vertex; - -pub fn register_globals(context: &mut ExecutionContext<'_, S>) { - structs::register_globals(context); - - cycle::register_globals(context); - face::register_globals(context); - region::register_globals(context); - shell::register_globals(context); - sketch::register_globals(context); - solid::register_globals(context); - surface::register_globals(context); - curve::register_globals(context); - half_edge::register_globals(context); - vertex::register_globals(context); -} - -macro_rules! handle_wrapper { - ($name:ident, $handle:ident) => { - impl From> for crate::script::execution::types::Value { - fn from(handle: Handle<$handle>) -> Self { - $name::from(handle).into() - } - } - - impl std::fmt::Debug for $name { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - #[allow(unused)] - use std::ops::Deref; - f.debug_struct(stringify!($name)) - .field("id", &self.handle.id()) - .field("content", &self.handle.deref()) - .finish() - } - } - - impl TryFrom> for Handle<$handle> { - type Error = crate::script::execution::types::Value; - - fn try_from( - value: crate::script::execution::types::Value, - ) -> Result { - use enum_downcast::EnumDowncast; - let value = value.enum_downcast::<$name>()?; - Ok(value.handle.into()) - } - } - - impl From> for $name { - fn from(handle: Handle<$handle>) -> Self { - Self { - handle: handle.into(), - } - } - } - - impl From<$name> for Handle<$handle> { - fn from(val: $name) -> Self { - val.handle.into() - } - } - - impl crate::script::execution::types::TypedObject for $name { - fn get_type() -> VariableType { - VariableType::$name - } - } - - impl crate::script::execution::types::NamedObject for $name { - fn static_type_name() -> &'static str { - stringify!($name) - } - } - - impl PartialEq for $name { - fn eq(&self, other: &Self) -> bool { - self.handle == other.handle - } - } - }; -} - -pub(crate) use handle_wrapper; diff --git a/src/script/execution/types/modeling/object_set.rs b/src/script/execution/types/modeling/object_set.rs deleted file mode 100644 index e23ae01..0000000 --- a/src/script/execution/types/modeling/object_set.rs +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use fj_core::{storage::Handle, topology::ObjectSet}; - -use crate::script::{ - execution::{ - types::{List, OperatorResult, Value}, - Failure, - }, - Span, -}; - -impl Value -where - S: Span, -{ - pub fn from_object_set(object_set: &ObjectSet) -> Self - where - Value: From>, - { - List::from(object_set.iter().map(|handle| Value::from(handle.clone()))).into() - } -} - -pub fn check_for_duplicates( - span: &S, - expected_items: usize, - items: impl Iterator, -) -> OperatorResult> -where - S: Span, - T: Eq, -{ - let mut set = Vec::with_capacity(expected_items); - - for (index, item) in items.enumerate() { - if !set.contains(&item) { - set.push(item); - } else { - return Err(Failure::ListContainsDuplicate(span.clone(), index)); - } - } - - Ok(set) -} diff --git a/src/script/execution/types/modeling/region.rs b/src/script/execution/types/modeling/region.rs deleted file mode 100644 index 707e437..0000000 --- a/src/script/execution/types/modeling/region.rs +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::rc::Rc; - -use fj_core::{ - operations::{build::BuildRegion, insert::Insert}, - storage::Handle, - topology::Region as FornjotRegion, -}; - -use crate::script::{ - execution::{ - types::{ - function::IntoBuiltinFunction, List, Object, OperatorResult, StructDefinition, - Structure, - }, - ExecutionContext, Failure, - }, - logging::RuntimeLog, - parsing::{self, MemberVariable, MemberVariableType, VariableType}, - Span, -}; - -use super::{ - cycle::Cycle, - handle_wrapper, - structs::{Circle, Polygon, Segments}, -}; - -pub fn register_globals(context: &mut ExecutionContext) { - context.stack.new_variable_str( - "RawRegion", - StructDefinition { - // TODO replace box leak with lazy static. - definition: Rc::new(parsing::StructDefinition { - name: S::from_str("RawRegion"), - members: vec![ - MemberVariable { - name: S::from_str("exterior"), - ty: MemberVariableType { - ty: VariableType::Cycle, - constraints: None, - default_value: None, - }, - }, - MemberVariable { - name: S::from_str("interiors"), - ty: MemberVariableType { - ty: VariableType::List, - constraints: None, - default_value: None, - }, - }, - ], - }), - } - .into(), - ); - - context.stack.new_variable_str( - "new_region", - (|context: &mut ExecutionContext, span: &S, configuration: Structure| { - match configuration.name() { - "Circle" => { - let circle = Circle::unpack_struct(span, configuration)?; - - let region = Region::from( - FornjotRegion::circle( - circle.center.as_fornjot_point(context), - circle.radius.as_fornjot_scalar(context), - circle.surface.handle, - &mut context.global_resources.fornjot_core, - ) - .insert(&mut context.global_resources.fornjot_core), - ); - - context.unpack_validation_warnings(span); - - Ok(region.into()) - } - "Polygon" => { - let polygon = Polygon::unpack_struct(span, configuration)?; - - let region = Region::from( - FornjotRegion::polygon( - polygon.points(context, span)?, - polygon.surface.handle, - &mut context.global_resources.fornjot_core, - ) - .insert(&mut context.global_resources.fornjot_core), - ); - - context.unpack_validation_warnings(span); - - Ok(region.into()) - } - "Segments" => { - let segments = Segments::unpack_struct(span, configuration)?; - let mut polygon = segments.as_polygon(context, span)?; - - // The last point just returns to the starting point. - // TODO validate that it's actually at the starting point. - polygon.pop(); - - let region = Region::from( - FornjotRegion::polygon( - polygon, - segments.surface.handle, - &mut context.global_resources.fornjot_core, - ) - .insert(&mut context.global_resources.fornjot_core), - ); - context.unpack_validation_warnings(span); - Ok(region.into()) - } - "RawRegion" => { - let region = Region::build_raw(context, span, configuration)?; - Ok(region.into()) - } - // TODO build a region from an SVG file. - _ => Err(Failure::ExpectedGot( - span.clone(), - "Empty, Circle, Polygon, or Segments".into(), - configuration.name().to_string().into(), - )), - } - }) - .into_builtin_function() - .into(), - ) -} - -#[derive(Clone)] -pub struct Region { - pub handle: Handle, -} - -impl Region { - fn build_raw( - context: &mut ExecutionContext, - span: &S, - configuration: Structure, - ) -> OperatorResult { - let mut members = Rc::unwrap_or_clone(configuration.members); - - // We assume that this is a `RawRegion` type. - let exterior_cycle = members - .remove("exterior") - .unwrap() - .downcast::(span)?; - let exterior_cycle = exterior_cycle.handle; - - let interior_cylce_list = members - .remove("interiors") - .unwrap() - .downcast::>(span)?; - - let interior_cycles = interior_cylce_list - .unpack_dynamic_length::(span)? - .map(|cycle| cycle.handle); - - let region = Self::from( - FornjotRegion::new(exterior_cycle, interior_cycles) - .insert(&mut context.global_resources.fornjot_core), - ); - - context.unpack_validation_warnings(span); - - Ok(region) - } -} - -impl Object for Region { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::Region)) - } -} - -handle_wrapper!(Region, FornjotRegion); - -#[cfg(test)] -mod test { - use crate::script::{ - execution::{expressions::run_expression, types::Value}, - parsing::Expression, - Runtime, - }; - - use super::*; - - #[test] - fn construct_circle() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert!(matches!( - run_expression( - context, - &Expression::parse( - "new_region(Circle { center = vec2(1mm, 2mm), radius = 3mm, surface = global_xy_plane() })" - ) - .unwrap() - .1 - ), - Ok(Value::Region(_)) - )); - }); - } - - #[test] - fn construct_polygon() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert!(matches!( - run_expression( - context, - &Expression::parse( - "new_region(Polygon { points = [vec2(0m, 0m), vec2(0m, 1m), vec2(1m, 1m), vec2(1m, 0m)], surface = global_xy_plane() })" - ) - .unwrap() - .1 - ), - Ok(Value::Region(_)) - )); - }); - } - - #[test] - fn construct_raw() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert!(matches!( - run_expression( - context, - &Expression::parse( - "new_region(RawRegion { exterior = new_cycle(Circle { center = vec2(1mm, 2mm), radius = 3mm, surface = global_xy_plane() }), - interiors = [new_cycle(Circle { center = vec2(1mm, 2mm), radius = 3mm / 2, surface = global_xy_plane() })] })" - ) - .unwrap() - .1, - ), - Ok(Value::Region(_)) - )); - }); - } - - // TODO validation failure test (Fornjot failure validation should result in a Failure type when constructing an invalid region) -} diff --git a/src/script/execution/types/modeling/shell.rs b/src/script/execution/types/modeling/shell.rs deleted file mode 100644 index 7270e6d..0000000 --- a/src/script/execution/types/modeling/shell.rs +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::ops::Deref; - -use fj_core::{ - operations::{ - holes::{AddHole, HoleLocation}, - insert::Insert, - update::UpdateShell, - }, - storage::Handle, - topology::Shell as FornjotShell, -}; - -use crate::script::{ - execution::{ - types::{ - function::AutoCall, math::LengthVector3, Length, LengthVector2, List, Object, - OperatorResult, Value, - }, - ExecutionContext, Failure, - }, - logging::RuntimeLog, - parsing::{Expression, VariableType}, - Span, -}; - -use super::{face::Face, handle_wrapper, object_set::check_for_duplicates}; - -pub fn register_globals(_context: &mut ExecutionContext) { - // TODO we should have the power to build shells from faces. -} - -#[derive(Clone)] -pub struct Shell { - pub handle: Handle, -} - -impl Object for Shell { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::Shell)) - } - - fn attribute( - &self, - _log: &mut dyn RuntimeLog, - _span: &S, - attribute: &S, - ) -> OperatorResult> { - match attribute.as_str() { - "faces" => Ok(Value::from_object_set(self.handle.faces())), - _ => Err(Failure::UnknownAttribute(attribute.clone())), - } - } - - fn method_call( - &self, - context: &mut ExecutionContext, - span: &S, - attribute: &S, - arguments: Vec>, - spans: &[Expression], - ) -> OperatorResult> { - match attribute.as_str() { - "add_blind_hole" => |context: &mut ExecutionContext, - span: &S, - face: Face, - position: LengthVector2, - radius: Length, - path: LengthVector3| - -> OperatorResult> { - if !self.handle.deref().faces().contains(&face.handle) { - return Err(Failure::FaceNotInShell(span.clone())); - } - - let position = position.as_fornjot_point(context); - let radius = radius.as_fornjot_scalar(context); - let path = path.as_fornjot_vector(context); - - let new_shell = self.handle.deref().add_blind_hole( - HoleLocation { - face: &face.handle, - position, - }, - radius, - path, - &mut context.global_resources.fornjot_core, - ); - - let new_shell = - Self::from(new_shell.insert(&mut context.global_resources.fornjot_core)); - context.unpack_validation_warnings(span); - - Ok(new_shell.into()) - } - .auto_call(context, span, arguments, spans), - "add_through_hole" => |context: &mut ExecutionContext, - span: &S, - front_face: Face, - front_position: LengthVector2, - - back_face: Face, - back_position: LengthVector2, - - radius: Length| - -> OperatorResult> { - let faces = self.handle.deref().faces(); - if !faces.contains(&front_face.handle) || !faces.contains(&front_face.handle) { - return Err(Failure::FaceNotInShell(span.clone())); - } - - let front_position = front_position.as_fornjot_point(context); - let back_position = back_position.as_fornjot_point(context); - - let radius = radius.as_fornjot_scalar(context); - - let new_shell = self.handle.deref().add_through_hole( - [ - HoleLocation { - face: &front_face.handle, - position: front_position, - }, - HoleLocation { - face: &back_face.handle, - position: back_position, - }, - ], - radius, - &mut context.global_resources.fornjot_core, - ); - - let new_shell = - Self::from(new_shell.insert(&mut context.global_resources.fornjot_core)); - context.unpack_validation_warnings(span); - - Ok(new_shell.into()) - } - .auto_call(context, span, arguments, spans), - "update_face" => |context: &mut ExecutionContext, - span: &S, - face: Face, - update: Value| - -> OperatorResult> { - // Update shell will panic if the shell isn't found in the solid, so check that it's in there. - if !self.handle.deref().faces().contains(&face.handle) { - return Err(Failure::FaceNotInShell(span.clone())); - } - - // Due to borrowing issues, we have to run the update call before we go into - // the update function. - let new_faces = update.call(context, span, vec![face.clone().into()], &[])?; - let new_faces = new_faces.downcast::>(span)?; - let num_faces = new_faces.len(span)?; - let new_faces = new_faces - .unpack_dynamic_length::(span)? - .map(|shell| shell.handle); - - // Update shell will panic if we insert a duplicate, so deduplicate it. - let new_faces = check_for_duplicates(span, num_faces, new_faces)?; - - let new_shell = self.handle.deref().update_face( - &face.handle, - |_face, _core| new_faces.into_iter(), - &mut context.global_resources.fornjot_core, - ); - - let new_shell = - Self::from(new_shell.insert(&mut context.global_resources.fornjot_core)); - context.unpack_validation_warnings(span); - - Ok(new_shell.into()) - } - .auto_call(context, span, arguments, spans), - "add_faces" => { - |context: &mut ExecutionContext, - span: &S, - new_faces: List| - -> OperatorResult> { - let num_faces = new_faces.len(span)?; - let new_faces = new_faces - .unpack_dynamic_length::(span)? - .map(|shell| shell.handle); - - // Update shell will panic if we insert a duplicate, so deduplicate it. - let new_faces = check_for_duplicates(span, num_faces, new_faces)?; - - let new_shell = self - .handle - .deref() - .add_faces(new_faces, &mut context.global_resources.fornjot_core); - - let new_shell = - Self::from(new_shell.insert(&mut context.global_resources.fornjot_core)); - context.unpack_validation_warnings(span); - - Ok(new_shell.into()) - } - .auto_call(context, span, arguments, spans) - } - _ => Err(Failure::UnknownAttribute(attribute.clone())), - } - } -} - -handle_wrapper!(Shell, FornjotShell); - -// TODO test that the hole creating functions correctly prevent non-existing faces from being used. -// TODO test adding duplicate faces to the shell (through update and add_faces) -// TODO test updating a face that did not exist in the shell -// TODO test blind hole -// TODO test through hole diff --git a/src/script/execution/types/modeling/sketch.rs b/src/script/execution/types/modeling/sketch.rs deleted file mode 100644 index 1786094..0000000 --- a/src/script/execution/types/modeling/sketch.rs +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use fj_core::{ - operations::{build::BuildRegion, insert::Insert, sweep::SweepSketch}, - storage::Handle, - topology::{Region as FornjotRegion, Sketch as FornjotSketch}, -}; - -use crate::script::{ - execution::{ - types::{ - function::{AutoCall, IntoBuiltinFunction}, - math::LengthVector3, - Object, OperatorResult, Value, - }, - ExecutionContext, Failure, - }, - logging::RuntimeLog, - parsing::{self, VariableType}, - Span, -}; - -use super::{ - handle_wrapper, - region::Region, - solid::Solid, - structs::{Circle, Polygon}, - surface::Surface, -}; - -pub fn register_globals(context: &mut ExecutionContext) { - context.stack.new_variable_str( - "new_sketch", - (|context: &mut ExecutionContext, - span: &S, - argument1: Value, - argument2: Value| - -> OperatorResult> { - match (argument1, argument2) { - (Value::Surface(surface), Value::List(regions)) => { - let regions = regions - .unpack_dynamic_length::(span)? - .map(|region| region.handle); - let handle = FornjotSketch::new(surface.handle, regions) - .insert(&mut context.global_resources.fornjot_core); - context.unpack_validation_warnings(span); - - Ok(Sketch { handle }.into()) - } - (Value::Structure(configuration), Value::NoneType(_)) => match configuration.name() - { - "Circle" => { - let circle = Circle::unpack_struct(span, configuration)?; - let region = FornjotRegion::circle( - circle.center.as_fornjot_point(context), - circle.radius.as_fornjot_scalar(context), - circle.surface.handle.clone(), - &mut context.global_resources.fornjot_core, - ) - .insert(&mut context.global_resources.fornjot_core); - context.unpack_validation_warnings(span); - - let handle = FornjotSketch::new(circle.surface.handle, [region]) - .insert(&mut context.global_resources.fornjot_core); - context.unpack_validation_warnings(span); - - Ok(Sketch { handle }.into()) - } - "Polygon" => { - let polygon = Polygon::unpack_struct(span, configuration)?; - - let points = polygon.points(context, span)?; - let surface = polygon.surface; - - let polygon = FornjotRegion::polygon( - points, - surface.handle.clone(), - &mut context.global_resources.fornjot_core, - ); - let region = polygon.insert(&mut context.global_resources.fornjot_core); - context.unpack_validation_warnings(span); - - let handle = FornjotSketch::new(surface.handle, [region]) - .insert(&mut context.global_resources.fornjot_core); - context.unpack_validation_warnings(span); - - Ok(Sketch { handle }.into()) - } - // TODO sketch from an SVG file. - _ => Err(Failure::ExpectedGot( - span.clone(), - "Empty, Circle, or Polygon".into(), - configuration.name().to_string().into(), - )), - }, - (value_a, _value_b) => Err(Failure::ExpectedGot( - span.clone(), - "Circle, Polygon, or a surface followed by a List of regions".into(), - value_a.type_name(), - )), - } - }) - .into_builtin_function_optional() - .into(), - ) -} - -#[derive(Clone)] -pub struct Sketch { - pub handle: Handle, -} - -impl Object for Sketch { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::Sketch)) - } - - fn method_call( - &self, - context: &mut ExecutionContext, - span: &S, - attribute: &S, - arguments: Vec>, - spans: &[parsing::Expression], - ) -> OperatorResult> { - match attribute.as_str() { - "sweep" => |context: &mut ExecutionContext, - span: &S, - surface: Surface, - path: LengthVector3| - -> OperatorResult> { - let surface = surface.handle; - let path = path.as_fornjot_vector(context); - - let solid = self - .handle - .sweep_sketch(surface, path, &mut context.global_resources.fornjot_core) - .insert(&mut context.global_resources.fornjot_core); - context.unpack_validation_warnings(span); - - Ok(Solid::from(solid).into()) - } - .auto_call(context, span, arguments, spans), - _ => Err(Failure::UnknownAttribute(attribute.clone())), - } - } -} - -handle_wrapper!(Sketch, FornjotSketch); - -#[cfg(test)] -mod test { - use crate::script::{execution::expressions::run_expression, parsing::Expression, Runtime}; - - use super::*; - - #[test] - fn construct_circle() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert!(matches!( - run_expression( - context, - &Expression::parse( - "new_sketch(Circle { center = vec2(1mm, 2mm), radius = 3mm, surface = global_xy_plane() })" - ) - .unwrap() - .1 - ), - Ok(Value::Sketch(_)) - )); - }); - } - - #[test] - fn construct_polygon() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert!(matches!( - run_expression( - context, - &Expression::parse( - "new_sketch(Polygon { points = [vec2(0m, 0m), vec2(0m, 1m), vec2(1m, 1m), vec2(1m, 0m)], surface = global_xy_plane() })" - ) - .unwrap() - .1 - ), - Ok(Value::Sketch(_)) - )); - }); - } - - #[test] - fn construct_from_regions() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert!(matches!( - run_expression( - context, - &Expression::parse( - "new_sketch(global_xy_plane(), [new_region(Circle { center = vec2(1mm, 2mm), radius = 3mm, surface = global_xy_plane() }), -new_region(Circle { center = vec2(4mm, 2mm), radius = 3mm, surface = global_xy_plane() })])" - ) - .unwrap() - .1 - ), - Ok(Value::Sketch(_)) - )); - }); - } - - #[test] - fn sweep() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert!(matches!( - dbg!(run_expression( - context, - &Expression::parse( - "new_sketch(Circle { center = vec2(1mm, 2mm), radius = 3mm, surface = global_xy_plane() }).sweep(global_xz_plane(), vec3(0cm, 1cm, 0cm))" - ) - .unwrap() - .1, - )), - Ok(Value::Solid(_)) - )); - }); - } - - // TODO validation failure test (Fornjot failure validation should result in a Failure type when constructing an invalid region) -} diff --git a/src/script/execution/types/modeling/solid.rs b/src/script/execution/types/modeling/solid.rs deleted file mode 100644 index 3aacde3..0000000 --- a/src/script/execution/types/modeling/solid.rs +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::ops::Deref; - -use fj_core::{ - operations::{insert::Insert, update::UpdateSolid}, - storage::Handle, - topology::Solid as FornjotSolid, -}; - -use crate::script::{ - execution::{ - types::{function::AutoCall, List, Object, OperatorResult, Value}, - ExecutionContext, Failure, - }, - logging::RuntimeLog, - parsing::VariableType, - Span, -}; - -use super::{handle_wrapper, object_set::check_for_duplicates, shell::Shell}; - -pub fn register_globals(_context: &mut ExecutionContext<'_, S>) {} - -#[derive(Clone)] -pub struct Solid { - pub handle: Handle, -} - -impl Object for Solid { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::Sketch)) - } - - fn attribute( - &self, - _log: &mut dyn RuntimeLog, - _span: &S, - attribute: &S, - ) -> OperatorResult> { - match attribute.as_str() { - "shells" => Ok(Value::from_object_set(self.handle.shells())), - _ => Err(Failure::UnknownAttribute(attribute.clone())), - } - } - - fn method_call( - &self, - context: &mut ExecutionContext, - span: &S, - attribute: &S, - arguments: Vec>, - spans: &[crate::script::parsing::Expression], - ) -> OperatorResult> { - match attribute.as_str() { - "update_shell" => |context: &mut ExecutionContext, - span: &S, - shell: Shell, - update: Value| - -> OperatorResult> { - // Update shell will panic if the shell isn't found in the solid, so check that it's in there. - if !self.handle.deref().shells().contains(&shell.handle) { - return Err(Failure::ShellNotInSolid(span.clone())); - } - - // Due to borrowing issues, we have to run the update call before we go into - // the update function. - let new_shells = update.call(context, span, vec![shell.clone().into()], &[])?; - let new_shells = new_shells.downcast::>(span)?; - let num_shells = new_shells.len(span)?; - let new_shells = new_shells - .unpack_dynamic_length::(span)? - .map(|shell| shell.handle); - - // Update shell will panic if we insert a duplicate, so deduplicate it. - let new_shells = check_for_duplicates(span, num_shells, new_shells)?; - - let new_solid = self.handle.deref().update_shell( - &shell.handle, - |_shell, _core| new_shells.into_iter(), - &mut context.global_resources.fornjot_core, - ); - - let new_solid = - Self::from(new_solid.insert(&mut context.global_resources.fornjot_core)); - context.unpack_validation_warnings(span); - - Ok(new_solid.into()) - } - .auto_call(context, span, arguments, spans), - "add_shells" => { - |context: &mut ExecutionContext, - span: &S, - new_shells: List| - -> OperatorResult> { - let num_shells = new_shells.len(span)?; - let new_shells = new_shells - .unpack_dynamic_length::(span)? - .map(|shell| shell.handle); - - // Update shell will panic if we insert a duplicate, so deduplicate it. - let new_shells = check_for_duplicates(span, num_shells, new_shells)?; - - let new_solid = self - .handle - .deref() - .add_shells(new_shells, &mut context.global_resources.fornjot_core); - - let new_solid = - Self::from(new_solid.insert(&mut context.global_resources.fornjot_core)); - context.unpack_validation_warnings(span); - - Ok(new_solid.into()) - } - .auto_call(context, span, arguments, spans) - } - _ => Err(Failure::UnknownAttribute(attribute.clone())), - } - } -} - -handle_wrapper!(Solid, FornjotSolid); - -// TODO test adding duplicate shells to the solid (through update and add_shells) -// TODO test updating a shell that did not exist in the solid diff --git a/src/script/execution/types/modeling/structs.rs b/src/script/execution/types/modeling/structs.rs deleted file mode 100644 index 934993d..0000000 --- a/src/script/execution/types/modeling/structs.rs +++ /dev/null @@ -1,313 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::rc::Rc; - -use bezier_rs::{Bezier, BezierHandles, TValueType}; -use common_data_types::Float; -use fj_math::Point; -use glam::f64::DVec2; -use macros::Struct; -use parsing::Span; - -use crate::script::{ - execution::{ - types::{ - math::{Angle, ConvertUnit}, - Length, LengthVector2, List, NamedObject, Object, OperatorResult, StructDefinition, - Structure, Vector2, - }, - ExecutionContext, - }, - parsing::{self, MemberVariable, MemberVariableType}, - Failure, -}; - -use super::surface::Surface; - -pub fn register_globals(context: &mut ExecutionContext<'_, S>) { - Circle::define_struct(context); - Polygon::define_struct(context); - - Segments::define_struct(context); - CenterArc::define_struct(context); - Line::define_struct(context); - QuadraticBezier::define_struct(context); - CubicBezier::define_struct(context); -} - -/// A single, perfectly round, and closed circle. -#[derive(Debug, Struct)] -pub struct Circle { - pub center: LengthVector2, - pub radius: Length, - pub surface: Surface, -} - -/// A list of straight segments that may or may not be closed. -/// Some functions expect this to be closed and will give an error if it is not. -#[derive(Debug, Struct)] -pub struct Polygon { - pub points: List, - pub surface: Surface, -} - -impl Polygon { - pub fn points( - &self, - context: &ExecutionContext, - span: &S, - ) -> OperatorResult>> { - let mut fornjot_points = Vec::with_capacity(self.points.len(span)?); - for point in self.points.clone().unpack_dynamic_length::(span)? { - let point = LengthVector2::try_from(point).map_err(|point| { - Failure::ExpectedGot( - span.clone(), - LengthVector2::static_type_name().into(), - >::type_name(&point), - ) - })?; - let point = point.as_fornjot_point(context); - - fornjot_points.push(point); - } - - Ok(fornjot_points) - } -} - -/// Defines a region made of complex segments, such as lines, arcs, and bezier curves. -#[derive(Debug, Struct)] -pub struct Segments { - pub start: LengthVector2, - pub segments: List, - #[default = "1mm"] - pub distance_between_verticies: Length, - pub surface: Surface, -} - -impl Segments { - pub fn as_polygon( - &self, - context: &ExecutionContext, - span: &S, - ) -> OperatorResult>> { - let mut last_point = self.start.clone(); - let mut points = vec![last_point.as_fornjot_point(context)]; - let distance_per_step = self.distance_between_verticies; - - for edge in self.segments.iter(span)? { - let structure = edge.downcast::>(span)?; - - match structure.name() { - "CenterArc" => { - let arc = CenterArc::unpack_struct(span, structure)?; - let direction = if arc.clockwise { - ArcDirection::Clockwise - } else { - ArcDirection::CounterClockwise - }; - let end = arc_to_points(context, distance_per_step, last_point, arc.center, arc.angle, direction, &mut points); - last_point = end; - } - "Line" => { - let line = Line::unpack_struct(span, structure)?; - last_point = line.end; - points.push(last_point.as_fornjot_point(context)); - }, - "QuadraticBezier" => { - let bezier = QuadraticBezier::unpack_struct(span, structure)?; - let start = last_point.value; - let end = bezier.end.value; - last_point = bezier.end.clone(); - let handle = bezier.handle.value; - let bezier = Bezier { - start: DVec2::new(start.x, start.y), - end: DVec2::new(end.x, end.y), - handles: BezierHandles::Quadratic { - handle: DVec2::new(handle.x, handle.y), - }, - }; - beizer_to_points(context, &bezier, distance_per_step, &mut points); - } - "CubicBezier" => { - let bezier = CubicBezier::unpack_struct(span, structure)?; - - let start = last_point.value; - let start_handle = bezier.start_handle.value; - - let end = bezier.end.value; - let end_handle = bezier.end_handle.value; - last_point = bezier.end.clone(); - let bezier = Bezier { - start: DVec2::new(start.x, start.y), - end: DVec2::new(end.x, end.y), - handles: BezierHandles::Cubic { - handle_start: DVec2::new(start_handle.x, start_handle.y), - handle_end: DVec2::new(end_handle.x, end_handle.y) - }, - }; - beizer_to_points(context, &bezier, distance_per_step, &mut points); - } - name => { - return Err(Failure::ExpectedGot( - span.clone(), - "A Circle, Polygon, CenterArc, EndsArc, LengthArc, LinearBezier, QuadraticBezier, or a CubicBezier".into(), - name.to_string().into(), - )) - } - } - } - - Ok(points) - } -} - -fn beizer_to_points( - context: &ExecutionContext, - beizer: &Bezier, - distance_per_step: Length, - points: &mut Vec>, -) { - let length = beizer.length(None); - let steps = (length / distance_per_step.value.into_inner()).ceil() as usize; - - let lookup_table = beizer.compute_lookup_table(Some(steps), Some(TValueType::Euclidean)); - - for vertex in &lookup_table[1..] { - let x = context - .global_resources - .fornjot_unit_conversion_factor - .convert_from_base_unit(Float::new(vertex.x).unwrap()) - .into_inner(); - let y = context - .global_resources - .fornjot_unit_conversion_factor - .convert_from_base_unit(Float::new(vertex.y).unwrap()) - .into_inner(); - - points.push(fj_math::Point::<2> { - coords: fj_math::Vector::<2> { - components: [x.into(), y.into()], - }, - }); - } -} - -#[derive(Debug, Clone, Copy)] -enum ArcDirection { - Clockwise, - CounterClockwise, -} - -fn arc_to_points( - context: &ExecutionContext, - distance_per_step: Length, - start: LengthVector2, - center: LengthVector2, - angle: Angle, - direction: ArcDirection, - points: &mut Vec>, -) -> LengthVector2 { - let distance_per_step = distance_per_step - .as_fornjot_scale_float(context) - .into_inner(); - let start = start.as_fornjot_scale_nalgebra_vector::(context); - let center = center.as_fornjot_scale_nalgebra_vector::(context); - - let center_to_start = start - center; - let radius = center_to_start.norm(); - - let starting_angle = (start.y - center.y).atan2(start.x - center.x); - let angle = angle.value.into_inner(); - - let (sin, cos) = (starting_angle + angle).sin_cos(); - let end = center + nalgebra::Vector2::new(cos, sin) * radius; - - let arch_length = angle * radius; - let steps = (arch_length / distance_per_step).ceil(); - - let angle_direction = if matches!(direction, ArcDirection::Clockwise) { - -1.0 - } else { - 1.0 - }; - - let angle_step = (angle / steps) * angle_direction; - - let steps = steps as usize; - - // We skip the first step because that's already represented with the starting point. - for step_index in 1..steps { - let angle = starting_angle + angle_step * step_index as f64; - - let (sin, cos) = angle.sin_cos(); - let offset = nalgebra::Vector2::new(cos, sin) * radius; - - let new_position = center + offset; - - points.push(fj_math::Point::<2> { - coords: fj_math::Vector::<2> { - components: [new_position.x.into(), new_position.y.into()], - }, - }) - } - - points.push(fj_math::Point::<2> { - coords: fj_math::Vector::<2> { - components: [end.x.into(), end.y.into()], - }, - }); - - LengthVector2 { value: end } -} - -/// An arc defined by a senter point and a radius. -/// The radius is calulated by using the distance from the center point to the starting point/ -/// The starting point is the previous end point. -#[derive(Debug, Struct)] -pub struct CenterArc { - pub center: LengthVector2, - pub angle: Angle, - #[default = "true"] - pub clockwise: bool, -} - -/// A linear line segment. -/// The start point is assumed by the previous end point. -#[derive(Debug, Struct)] -pub struct Line { - pub end: LengthVector2, -} - -/// A quadratic Bezier curve. -/// The start point is assumed by the previous end point. -#[derive(Debug, Struct)] -pub struct QuadraticBezier { - pub end: LengthVector2, - pub handle: LengthVector2, -} - -/// A cubic Bezier curve. -/// The start point is assumed by the previous end point. -#[derive(Debug, Struct)] -pub struct CubicBezier { - pub start_handle: LengthVector2, - pub end: LengthVector2, - pub end_handle: LengthVector2, -} diff --git a/src/script/execution/types/modeling/surface.rs b/src/script/execution/types/modeling/surface.rs deleted file mode 100644 index dd70705..0000000 --- a/src/script/execution/types/modeling/surface.rs +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use fj_core::{storage::Handle, topology::Surface as FornjotSurface}; - -use crate::script::{ - execution::{ - types::{function::IntoBuiltinFunction, Object, OperatorResult, Value}, - ExecutionContext, - }, - logging::RuntimeLog, - parsing::VariableType, - Span, -}; - -use super::handle_wrapper; - -pub fn register_globals(context: &mut ExecutionContext) { - context.stack.new_variable_str( - "sketch_plane", - (|context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(Surface::from( - context - .global_resources - .fornjot_core - .layers - .topology - .surfaces - .space_2d(), - ) - .into()) - }) - .into_builtin_function() - .into(), - ); - - context.stack.new_variable_str( - "global_xy_plane", - (|context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(Surface::from( - context - .global_resources - .fornjot_core - .layers - .topology - .surfaces - .xy_plane(), - ) - .into()) - }) - .into_builtin_function() - .into(), - ); - - context.stack.new_variable_str( - "global_xz_plane", - (|context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(Surface::from( - context - .global_resources - .fornjot_core - .layers - .topology - .surfaces - .xz_plane(), - ) - .into()) - }) - .into_builtin_function() - .into(), - ); - - context.stack.new_variable_str( - "global_yz_plane", - (|context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(Surface::from( - context - .global_resources - .fornjot_core - .layers - .topology - .surfaces - .yz_plane(), - ) - .into()) - }) - .into_builtin_function() - .into(), - ); - - // TODO surface from plane points. -} - -#[derive(Clone)] -pub struct Surface { - pub handle: Handle, -} - -impl Object for Surface { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::Surface)) - } -} - -handle_wrapper!(Surface, FornjotSurface); diff --git a/src/script/execution/types/modeling/vertex.rs b/src/script/execution/types/modeling/vertex.rs deleted file mode 100644 index 24392db..0000000 --- a/src/script/execution/types/modeling/vertex.rs +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use fj_core::{storage::Handle, topology::Vertex as FornjotVertex}; - -use crate::script::{ - execution::{ - types::{Object, OperatorResult}, - ExecutionContext, - }, - logging::RuntimeLog, - parsing::VariableType, - Span, -}; - -use super::handle_wrapper; - -pub fn register_globals(_context: &mut ExecutionContext) { - // TODO we should have the power to build faces from surfaces and regions. -} - -#[derive(Clone)] -pub struct Vertex { - pub handle: Handle, -} - -impl Object for Vertex { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::Face)) - } -} - -handle_wrapper!(Vertex, FornjotVertex); diff --git a/src/script/execution/types/none.rs b/src/script/execution/types/none.rs deleted file mode 100644 index 653b8ad..0000000 --- a/src/script/execution/types/none.rs +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use crate::script::{logging::RuntimeLog, parsing::VariableType, Span}; - -use super::{NamedObject, Object, OperatorResult}; - -#[derive(Debug, Clone, PartialEq)] -pub struct NoneType; - -impl Object for NoneType { - fn matches_type( - &self, - _ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(false) - } -} - -impl NamedObject for NoneType { - fn static_type_name() -> &'static str { - "None" - } -} diff --git a/src/script/execution/types/number.rs b/src/script/execution/types/number.rs deleted file mode 100644 index 224c9dc..0000000 --- a/src/script/execution/types/number.rs +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use common_data_types::{Float, FloatIsNan}; - -use crate::script::{execution::Failure, parsing, Span}; - -use super::{OperatorResult, Scalar, Value}; - -pub trait UnwrapNotNan: Sized { - fn unwrap_not_nan(self, span: &S) -> OperatorResult; -} - -pub fn unwrap_float(span: S, number: &parsing::Number) -> OperatorResult { - match number.to_float::() { - Ok(number) => Ok(number), - Err(error) => Err(Failure::NumberConversion(span, error)), - } -} - -impl UnwrapNotNan for std::result::Result { - fn unwrap_not_nan(self, span: &S) -> OperatorResult { - match self { - Ok(number) => Ok(number), - Err(_float_is_nan) => Err(Failure::ResultIsNan(span.clone())), - } - } -} - -impl From for Value { - fn from(value: Float) -> Self { - let measurement: Scalar = value.into(); - measurement.into() - } -} diff --git a/src/script/execution/types/range.rs b/src/script/execution/types/range.rs deleted file mode 100644 index ef58636..0000000 --- a/src/script/execution/types/range.rs +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use common_data_types::Float; - -use crate::script::{ - execution::{expressions::run_trailer, ExecutionContext, Failure}, - logging::RuntimeLog, - parsing::{self, VariableType}, - Span, -}; - -use super::{math::Number, NamedObject, Object, OperatorResult, Value}; - -#[derive(Debug, Clone, PartialEq)] -pub struct Range { - pub lower_bound: Option, - pub upper_bound_is_inclusive: bool, - pub upper_bound: Option, -} - -impl Object for Range { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::Range)) - } - - fn iterate( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - ) -> OperatorResult>>> { - match ( - self.lower_bound.as_ref(), - self.upper_bound.as_ref(), - self.upper_bound_is_inclusive, - ) { - (None, None, false) => Err(Failure::CannotConvertFromTo( - span.clone(), - "..".into(), - "iterator".into(), - )), - (Some(_lower_bound), None, false) => Err(Failure::CannotConvertFromTo( - span.clone(), - "lower_bound..".into(), - "iterator".into(), - )), - (None, Some(_upper_bound), false) => Err(Failure::CannotConvertFromTo( - span.clone(), - "..upper_bound".into(), - "iterator".into(), - )), - (None, Some(_upper_bound), true) => Err(Failure::CannotConvertFromTo( - span.clone(), - "..=upper_bound".into(), - "iterator".into(), - )), - (Some(lower_bound), Some(upper_bound), false) => { - let lower_bound = lower_bound.to_index(); - let upper_bound = upper_bound.to_index(); - Ok(Box::new( - (lower_bound..upper_bound).map(|index| Float::new(index as _).unwrap().into()), - )) - } - (Some(lower_bound), Some(upper_bound), true) => { - let lower_bound = lower_bound.to_index(); - let upper_bound = upper_bound.to_index(); - Ok(Box::new( - (lower_bound..=upper_bound).map(|index| Float::new(index as _).unwrap().into()), - )) - } - (_, None, true) => unreachable!(), // Inclusive ranges without an upper bound are illegal to construct. - } - } -} - -impl Range { - pub fn from_parsed( - context: &mut ExecutionContext, - range: &parsing::Range, - ) -> OperatorResult { - let lower_bound = if let Some(lower_bound) = &range.lower_bound { - let span = lower_bound.get_span(); - Some(run_trailer(context, lower_bound)?.downcast(span)?) - } else { - None - }; - - let upper_bound_is_inclusive = range.upper_bound_is_inclusive; - - let upper_bound = if let Some(upper_bound) = &range.upper_bound { - let span = upper_bound.get_span(); - - Some(run_trailer(context, upper_bound)?.downcast(span)?) - } else { - None - }; - - if upper_bound_is_inclusive && upper_bound.is_none() { - return Err(Failure::MissingUpperBound(range.get_span().clone())); - } - - Ok(Self { - lower_bound, - upper_bound_is_inclusive, - upper_bound, - }) - } -} - -impl NamedObject for Range { - fn static_type_name() -> &'static str { - "Range" - } -} - -#[cfg(test)] -mod test { - use crate::script::Runtime; - - use super::*; - - #[test] - fn iterate() { - let mut runtime = Runtime::default(); - ExecutionContext::create(&mut runtime, |context| { - assert!( - Range::from_parsed(context, &parsing::Range::parse("..").unwrap().1) - .unwrap() - .iterate(context.log, &"span") - .is_err() - ); - - assert!( - Range::from_parsed(context, &parsing::Range::parse("1..").unwrap().1) - .unwrap() - .iterate(context.log, &"span") - .is_err() - ); - - assert!( - Range::from_parsed(context, &parsing::Range::parse("..1").unwrap().1) - .unwrap() - .iterate(context.log, &"span") - .is_err() - ); - assert!( - Range::from_parsed(context, &parsing::Range::parse("..=1").unwrap().1) - .unwrap() - .iterate(context.log, &"span") - .is_err() - ); - assert!( - Range::from_parsed(context, &parsing::Range::parse("..=1").unwrap().1) - .unwrap() - .iterate(context.log, &"span") - .is_err() - ); - assert_eq!( - Range::from_parsed(context, &parsing::Range::parse("1..5").unwrap().1) - .unwrap() - .iterate(context.log, &"span") - .unwrap() - .collect::>(), - [ - Float::new(1.0).unwrap().into(), - Float::new(2.0).unwrap().into(), - Float::new(3.0).unwrap().into(), - Float::new(4.0).unwrap().into(), - ] - ); - assert_eq!( - Range::from_parsed(context, &parsing::Range::parse("1..=5").unwrap().1) - .unwrap() - .iterate(context.log, &"span") - .unwrap() - .collect::>(), - [ - Float::new(1.0).unwrap().into(), - Float::new(2.0).unwrap().into(), - Float::new(3.0).unwrap().into(), - Float::new(4.0).unwrap().into(), - Float::new(5.0).unwrap().into(), - ] - ); - }); - } -} diff --git a/src/script/execution/types/serializable.rs b/src/script/execution/types/serializable.rs deleted file mode 100644 index 8a6adaa..0000000 --- a/src/script/execution/types/serializable.rs +++ /dev/null @@ -1,453 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::{borrow::Cow, collections::HashMap}; - -use serde::{Deserialize, Serialize}; - -use crate::script::{ - execution::{types::StructDefinition, validate_assignment_type, ExecutionContext, Failure}, - logging::RuntimeLog, - parsing::VariableType, - Span, -}; - -use super::{DefaultValue, List, Object, OperatorResult, SString, Scalar, Structure, Value}; - -#[derive(Debug, Serialize, Deserialize, PartialEq)] -#[serde(rename_all = "snake_case")] -pub enum SerializableValue { - #[serde(skip_serializing)] - Default, - #[serde(untagged)] - Boolean(bool), - #[serde(untagged)] - Struct { - #[serde(rename = "type")] - ty: String, - members: HashMap, - }, - #[serde(untagged)] - List(Vec), - #[serde(untagged)] - Scalar(Scalar), - #[serde(untagged)] - String(String), -} - -impl SerializableValue { - pub fn into_value_without_type_check( - self, - context: &mut ExecutionContext, - span: &S, - ) -> OperatorResult> { - match self { - Self::Default => Ok(DefaultValue.into()), - Self::Boolean(value) => Ok((value).into()), - Self::Struct { - ty, - members: mut values, - } => { - let initalizer = context - .stack - .get_variable_str(span, ty.as_ref())? - .downcast_ref::>(span)? - .definition - .clone(); - - let mut failures = Vec::new(); - let mut table = HashMap::with_capacity(initalizer.members.len()); - - for member in initalizer.members.iter() { - if let Some(value) = values.remove(member.name.as_str()) { - match value.into_value(context, span, &member.ty.ty) { - Ok(value) => { - match validate_assignment_type(context, member, span, value, span) { - Ok(value) => { - table.insert(member.name.to_string(), value); - } - Err(failure) => failures.push(failure), - } - } - Err(failure) => { - failures.push(failure); - } - } - } else { - failures.push(Failure::StructMissingAssignment( - span.clone(), - member.name.clone(), - )); - } - } - - if failures.is_empty() { - Ok(Structure::new(initalizer, table).into()) - } else { - Err(Failure::StructConstruction(span.clone(), failures)) - } - } - Self::List(values) => { - let mut collected_values: Vec> = Vec::with_capacity(values.len()); - - for value in values { - let value = value.into_value_without_type_check(context, span)?; - collected_values.push(value); - } - - Ok(List::from(collected_values).into()) - } - Self::String(value) => Ok(SString::from(value).into()), - Self::Scalar(measurement) => Ok(measurement.into()), - } - } - - pub fn into_value( - self, - context: &mut ExecutionContext, - span: &S, - ty: &VariableType, - ) -> OperatorResult> { - if self.matches_type(ty, context.log, span)? { - self.into_value_without_type_check(context, span) - } else { - Err(Failure::CannotConvertFromTo( - span.clone(), - self.type_name(), - ty.name(), - )) - } - } - - fn matches_type( - &self, - ty: &VariableType, - log: &mut dyn RuntimeLog, - variable_name_span: &S, - ) -> OperatorResult { - Ok(match (self, ty) { - (Self::Boolean(_), VariableType::Boolean) => true, - (Self::Struct { ty: s_ty, .. }, VariableType::Struct(v_ty)) => v_ty.as_str() == s_ty, - (Self::List(_), VariableType::List) => true, - (Self::String(_), VariableType::String) => true, - (Self::Scalar(measurement), ty) => { - measurement.matches_type(ty, log, variable_name_span)? - } - (Self::Default, _) => true, - _ => false, - }) - } - - fn type_name(&self) -> Cow<'static, str> { - match self { - SerializableValue::Default => "Default".into(), - SerializableValue::Boolean(_) => "Boolean".into(), - SerializableValue::Struct { ty, members: _ } => format!("struct {}", ty).into(), - SerializableValue::List(_) => "List".into(), - SerializableValue::String(_) => "String".into(), - SerializableValue::Scalar(measurement) => { - >::type_name(measurement) - } - } - } -} - -#[cfg(test)] -mod test { - use common_data_types::Float; - use uom::si::{f64::Length, length::millimeter}; - - use crate::script::{ - execution::{ - expressions::run_expression, - types::{Object, SString, Scalar}, - Module, - }, - parsing::Expression, - Runtime, - }; - - use super::*; - - #[test] - fn deserialize_boolean() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - serde_yaml::from_str::("true") - .unwrap() - .into_value(context, &"", &VariableType::Boolean), - Ok(true.into()) - ); - assert_eq!( - serde_yaml::from_str::("false") - .unwrap() - .into_value(context, &"", &VariableType::Boolean), - Ok(false.into()) - ); - }); - } - - #[test] - fn serialize_boolean() { - ExecutionContext::create(&mut Runtime::default(), |context| { - let boolean: Value<&'static str> = true.into(); - assert_eq!( - boolean.export(context.log, &""), - Ok(SerializableValue::Boolean(true)) - ); - - let boolean: Value<&'static str> = false.into(); - assert_eq!( - boolean.export(context.log, &""), - Ok(SerializableValue::Boolean(false)) - ); - }); - } - - #[test] - fn deserialize_number() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - serde_yaml::from_str::("42") - .unwrap() - .into_value(context, &"", &VariableType::Scalar("Number")), - Ok(Float::new(42.0).unwrap().into()) - ); - }); - } - - #[test] - fn serialize_number() { - let value = SerializableValue::Scalar(Scalar::from(Float::new(42.0).unwrap())); - - assert_eq!(serde_yaml::to_string(&value).unwrap(), "42.0\n"); - } - - #[test] - fn deserialize_struct() { - let mut log = Vec::new(); - - let module = Module::load( - &mut log, - "test_module.ccm", - r#"struct MyStruct { value: Number = 1 }"#, - ) - .unwrap(); - - assert!(log.is_empty()); - - ExecutionContext::create(&mut Runtime::from(module), |context| { - let struct_def = r#" - type: MyStruct - members: - value: 42"#; - - let structure = serde_yaml::from_str::(struct_def) - .unwrap() - .into_value(context, &"", &VariableType::Struct("MyStruct")); - - assert_eq!( - structure.unwrap(), - run_expression( - context, - &Expression::parse("MyStruct { value = 42 }").unwrap().1 - ) - .unwrap() - ); - - let struct_def = r#" - type: MyStruct - members: - value: default"#; - - let structure = serde_yaml::from_str::(struct_def) - .unwrap() - .into_value(context, &"", &VariableType::Struct("MyStruct")); - - assert_eq!( - structure.unwrap(), - run_expression( - context, - &Expression::parse("MyStruct { ..default }").unwrap().1 - ) - .unwrap() - ); - - assert!(serde_yaml::from_str::(struct_def) - .unwrap() - .into_value(context, &"", &VariableType::Struct("OtherStruct")) - .is_err()); - - let struct_def = r#" - type: MyStruct - members: - wrong_value: 42"#; - assert!(serde_yaml::from_str::(struct_def) - .unwrap() - .into_value(context, &"", &VariableType::Struct("MyStruct")) - .is_err()); - - let struct_def = r#" - type: MyStruct - members: - value: true"#; - assert!(serde_yaml::from_str::(struct_def) - .unwrap() - .into_value(context, &"", &VariableType::Struct("MyStruct")) - .is_err()); - }); - } - - #[test] - fn serialize_struct() { - let mut log = Vec::new(); - - let module = Module::load( - &mut log, - "test_module.ccm", - r#"struct MyStruct { value: Number }"#, - ) - .unwrap(); - - assert!(log.is_empty()); - - ExecutionContext::create(&mut Runtime::from(module), |context| { - let value: Value<&'static str> = run_expression( - context, - &Expression::parse("MyStruct { value = 42 }").unwrap().1, - ) - .unwrap(); - - assert_eq!( - value.export(context.log, &""), - Ok(SerializableValue::Struct { - ty: "MyStruct".to_string(), - members: HashMap::from([( - "value".to_string(), - SerializableValue::Scalar(Scalar::from(Float::new(42.0).unwrap())) - )]) - }) - ); - }); - } - - #[test] - fn deserialize_list() { - let list_def = r#"[1, true, "some text"]"#; - - ExecutionContext::create(&mut Runtime::default(), |context| { - let list = serde_yaml::from_str::(list_def).unwrap(); - - let list = list.into_value(context, &"", &VariableType::List); - - assert_eq!( - list.unwrap(), - run_expression( - context, - &Expression::parse("[1, true, \"some text\"]").unwrap().1 - ) - .unwrap() - ); - }); - } - - #[test] - fn serialize_list() { - ExecutionContext::create(&mut Runtime::default(), |context| { - let value: Value<&'static str> = List::from([ - Float::new(1.0).unwrap().into(), - true.into(), - SString::from("some text".to_string()).into(), - ]) - .into(); - assert_eq!( - value.export(context.log, &""), - Ok(SerializableValue::List(vec![ - SerializableValue::Scalar(Scalar::from(Float::new(1.0).unwrap())), - SerializableValue::Boolean(true), - SerializableValue::String("some text".to_string()) - ])) - ); - }); - } - - #[test] - fn deserialize_string() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - serde_yaml::from_str::("text") - .unwrap() - .into_value(context, &"", &VariableType::String), - Ok(SString::from("text").into()) - ); - }); - } - - #[test] - fn serialize_string() { - ExecutionContext::create(&mut Runtime::default(), |context| { - let value: Value<&'static str> = SString::from("This is a test".to_string()).into(); - assert_eq!( - value.export(context.log, &""), - Ok(SerializableValue::String("This is a test".to_string())) - ); - }); - } - - #[test] - fn deserialize_measurement() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - serde_yaml::from_str::("42mm") - .unwrap() - .into_value(context, &"", &VariableType::Scalar("Length")), - Ok(Scalar::try_from(Length::new::(42.0)) - .unwrap() - .into()) - ); - }); - } - - #[test] - fn serialize_measurement() { - let value = - SerializableValue::Scalar(Scalar::try_from(Length::new::(42.0)).unwrap()); - - assert_eq!(serde_yaml::to_string(&value).unwrap(), "0.042 m\n"); - } - - #[test] - fn deserialize_default() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - serde_yaml::from_str::("default") - .unwrap() - .into_value(context, &"", &VariableType::Scalar("Length")), - Ok(DefaultValue.into()) - ); - }); - } - - #[test] - fn serialize_default() { - let value = SerializableValue::Default; - - // It's supposed to fail. - assert!(serde_yaml::to_string(&value).is_err()); - } -} diff --git a/src/script/execution/types/string/formatting.rs b/src/script/execution/types/string/formatting.rs deleted file mode 100644 index f3e9a5a..0000000 --- a/src/script/execution/types/string/formatting.rs +++ /dev/null @@ -1,534 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::fmt::Write; - -use nom::{ - branch::alt, - bytes::complete::{tag, take_while1}, - character::complete::char as nom_char, - combinator::{all_consuming, cut, map, opt, success, value, verify}, - error::context, - multi::{fold_many0, many0}, - sequence::{delimited, pair, preceded, terminated}, - IResult, -}; - -use crate::script::{ - execution::{ - types::{ - math::Number, unsupported_operation_message, NamedObject, Object, OperatorResult, Value, - }, - Failure, - }, - logging::RuntimeLog, - Scalar, Span, -}; - -pub type VResult = IResult>; - -#[derive(Debug, PartialEq, Clone, Copy)] -pub enum Style { - Default, - Debug, - Octal, - Hex, - CapitalizedHex, - Exponent, - CapitalizedExponent, -} - -impl Style { - fn parse(input: &str) -> VResult<&str, Self> { - alt(( - value(Self::Debug, nom_char('?')), - value(Self::Octal, nom_char('o')), - value(Self::Hex, nom_char('x')), - value(Self::CapitalizedHex, nom_char('X')), - value(Self::Exponent, nom_char('e')), - value(Self::CapitalizedExponent, nom_char('E')), - ))(input) - } -} - -impl UnsupportedMessage for Style { - fn unsupported_message>( - &self, - object: &O, - span: &S, - ) -> OperatorResult { - match self { - Self::Default => { - unsupported_operation_message::(object, span, "format with default style") - } - Self::Debug => { - unsupported_operation_message::(object, span, "format with debug style") - } - Self::Octal => { - unsupported_operation_message::(object, span, "format with octal style") - } - Self::Hex => { - unsupported_operation_message::(object, span, "format with hex style") - } - Self::CapitalizedHex => unsupported_operation_message::( - object, - span, - "format with capitalized hex style", - ), - Self::Exponent => unsupported_operation_message::( - object, - span, - "format with exponent style", - ), - Self::CapitalizedExponent => unsupported_operation_message::( - object, - span, - "format with capitalized exponent style", - ), - } - } -} - -#[derive(Debug, PartialEq, Clone, Copy)] -enum Precision { - Default, - Inline(u8), - Referenced(u8), -} - -impl Precision { - fn parse(input: &str) -> VResult<&str, Self> { - preceded( - nom_char('.'), - alt(( - map(terminated(number, nom_char('$')), Self::Referenced), - map(number, Self::Inline), - )), - )(input) - } -} - -// We don't directly pass the precision information to objects when formatting, rather -// we dereference it (when applicable) before hand and pass them the final result. -impl UnsupportedMessage for Option { - fn unsupported_message>( - &self, - object: &O, - span: &S, - ) -> OperatorResult { - match self { - None => unsupported_operation_message::( - object, - span, - "format with default precision", - ), - Some(_) => { - unsupported_operation_message::(object, span, "format with precision") - } - } - } -} - -#[derive(Debug, PartialEq)] -struct Parameter { - index: Option, - style: Style, - precision: Precision, -} - -impl Parameter { - fn parse(input: &str) -> VResult<&str, Self> { - delimited( - nom_char('{'), - cut(map( - pair( - opt(number), - alt(( - preceded( - nom_char(':'), - pair( - alt((Style::parse, success(Style::Default))), - alt((Precision::parse, success(Precision::Default))), - ), - ), - success((Style::Default, Precision::Default)), - )), - ), - |(index, (style, precision))| Parameter { - index, - style, - precision, - }, - )), - cut(context("Expected closing `}` for parameter", nom_char('}'))), - )(input) - } -} - -#[derive(Debug, PartialEq)] -enum Component { - Litteral(String), - Parameter(Parameter), -} - -impl Component { - fn parse(input: &str) -> VResult<&str, Self> { - alt((Self::parse_litteral, map(Parameter::parse, Self::Parameter)))(input) - } - - fn parse_litteral(input: &str) -> VResult<&str, Self> { - map( - verify( - fold_many0( - alt((take_while1(|c| c != '{'), tag("{{"), tag("}}"))), - String::default, - |mut accum, item: &str| { - match item { - "{{" => accum.push('{'), - "}}" => accum.push('}'), - _ => { - accum.push_str(item); - } - } - - accum - }, - ), - |output: &str| !output.is_empty(), - ), - Self::Litteral, - )(input) - } -} - -#[derive(Debug, PartialEq)] -pub struct Format { - components: Vec, -} - -impl Format { - pub fn parse(input: &str) -> VResult<&str, Self> { - map(all_consuming(many0(Component::parse)), |components| Self { - components, - })(input) - } - - pub fn format( - &self, - log: &mut dyn RuntimeLog, - span: &S, - f: &mut dyn Write, - arguments: &[Value], - ) -> OperatorResult { - let mut next_argument_index = 0; - - fn get_precision( - span: &S, - - precision: &Precision, - arguments: &[Value], - ) -> OperatorResult> { - match precision { - Precision::Default => Ok(None), - Precision::Inline(precision) => Ok(Some(*precision)), - Precision::Referenced(index) => { - if let Some(argument) = arguments.get(*index as usize) { - let precision = argument.downcast_ref::(span)?; - let precision = Number::try_from(precision).map_err(|_| { - Failure::ExpectedGot( - span.clone(), - Number::static_type_name().into(), - >::type_name(precision), - ) - })?; - let precision = precision.to_index(); - - if precision.is_positive() { - Ok(Some(precision as u8)) - } else { - Err(Failure::InvalidPrecision(span.clone(), precision)) - } - } else { - Err(Failure::FormatArgumentIndexOutOfRange( - span.clone(), - *index as isize, - )) - } - } - } - } - - for component in self.components.iter() { - match component { - Component::Litteral(text) => { - write!(f, "{}", text).unwrap_formatting_result(span)? - } - Component::Parameter(Parameter { - index: None, - style, - precision, - }) => { - let precision = get_precision(span, precision, arguments)?; - let argument_index = next_argument_index; - next_argument_index += 1; - - if let Some(argument) = arguments.get(argument_index) { - argument.format(log, span, f, *style, precision)?; - } else { - return Err(Failure::FormatArgumentIndexOutOfRange( - span.clone(), - argument_index as isize, - )); - } - } - Component::Parameter(Parameter { - index: Some(index), - style, - precision, - }) => { - let precision = get_precision(span, precision, arguments)?; - let argument_index = *index as usize; - - if let Some(argument) = arguments.get(argument_index) { - argument.format(log, span, f, *style, precision)?; - } else { - return Err(Failure::FormatArgumentIndexOutOfRange( - span.clone(), - argument_index as isize, - )); - } - } - } - } - - Ok(()) - } -} - -fn number(input: &str) -> VResult<&str, u8> { - map(take_while1(|c| "0123456789".contains(c)), |digits: &str| { - digits.parse::().unwrap() - })(input) -} - -pub trait UnwrapFormattingResult { - fn unwrap_formatting_result(self, span: &S) -> OperatorResult; -} - -impl UnwrapFormattingResult for std::result::Result { - fn unwrap_formatting_result(self, span: &S) -> OperatorResult { - match self { - Ok(result) => Ok(result), - Err(error) => Err(Failure::Formatting(span.clone(), error)), - } - } -} - -pub trait UnsupportedMessage { - fn unsupported_message>( - &self, - object: &O, - span: &S, - ) -> OperatorResult; -} - -#[cfg(test)] -mod test { - use crate::script::logging::StandardLog; - use common_data_types::Float; - - use super::*; - - #[test] - fn litterals() { - assert_eq!( - Component::parse_litteral("1234"), - Ok(("", Component::Litteral("1234".into()))) - ); - - assert_eq!( - Component::parse_litteral("1234{{}"), - Ok(("", Component::Litteral("1234{}".into()))) - ); - } - - #[test] - fn parameters() { - assert_eq!( - Parameter::parse("{}"), - Ok(( - "", - Parameter { - index: None, - style: Style::Default, - precision: Precision::Default - } - )) - ); - assert_eq!( - Parameter::parse("{1}"), - Ok(( - "", - Parameter { - index: Some(1), - style: Style::Default, - precision: Precision::Default - } - )) - ); - assert_eq!( - Parameter::parse("{:?}"), - Ok(( - "", - Parameter { - index: None, - style: Style::Debug, - precision: Precision::Default - } - )) - ); - assert_eq!( - Parameter::parse("{1:?}"), - Ok(( - "", - Parameter { - index: Some(1), - style: Style::Debug, - precision: Precision::Default - } - )) - ); - assert_eq!( - Parameter::parse("{:.5}"), - Ok(( - "", - Parameter { - index: None, - style: Style::Default, - precision: Precision::Inline(5) - } - )) - ); - assert_eq!( - Parameter::parse("{:.5$}"), - Ok(( - "", - Parameter { - index: None, - style: Style::Default, - precision: Precision::Referenced(5) - } - )) - ); - } - - #[test] - fn litterals_and_parameters() { - assert_eq!(Format::parse(""), Ok(("", Format { components: vec![] }))); - - assert_eq!( - Format::parse(" {{}}"), - Ok(( - "", - Format { - components: vec![Component::Litteral(" {}".into())] - } - )) - ); - - assert_eq!( - Format::parse("{}"), - Ok(( - "", - Format { - components: vec![Component::Parameter(Parameter { - index: None, - style: Style::Default, - precision: Precision::Default - })] - } - )) - ); - assert_eq!( - Format::parse(" {}"), - Ok(( - "", - Format { - components: vec![ - Component::Litteral(" ".into()), - Component::Parameter(Parameter { - index: None, - style: Style::Default, - precision: Precision::Default - }) - ] - } - )) - ); - assert_eq!( - Format::parse(" {{}}{}"), - Ok(( - "", - Format { - components: vec![ - Component::Litteral(" {}".into()), - Component::Parameter(Parameter { - index: None, - style: Style::Default, - precision: Precision::Default - }) - ] - } - )) - ); - } - - #[test] - fn do_format() { - let mut log = StandardLog; - - let mut formatted = String::default(); - Format::parse("Test {}") - .unwrap() - .1 - .format::<&str>( - &mut log, - &"scope", - &mut formatted, - &[Float::new(42.24).unwrap().into()], - ) - .unwrap(); - assert_eq!(formatted, "Test 42.24"); - - let mut formatted = String::default(); - Format::parse("Test {1} {0}") - .unwrap() - .1 - .format::<&str>( - &mut log, - &"scope", - &mut formatted, - &[ - Float::new(1.0).unwrap().into(), - Float::new(2.0).unwrap().into(), - ], - ) - .unwrap(); - assert_eq!(formatted, "Test 2 1"); - } -} diff --git a/src/script/execution/types/string/mod.rs b/src/script/execution/types/string/mod.rs deleted file mode 100644 index ebe357e..0000000 --- a/src/script/execution/types/string/mod.rs +++ /dev/null @@ -1,393 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use common_data_types::Float; -use imstr::ImString; -use std::{cell::RefCell, cmp::Ordering, fmt::Write}; - -use crate::script::{ - execution::{ExecutionContext, Failure}, - logging::RuntimeLog, - parsing::{self, Expression, VariableType}, - Span, -}; - -use super::{ - function::AutoCall, math::Number, number::UnwrapNotNan, serializable::SerializableValue, - NamedObject, NoneType, Object, OperatorResult, Range, UnwrapBorrowFailure, Value, -}; - -pub mod formatting; -use formatting::{Style, UnsupportedMessage, UnwrapFormattingResult}; - -static ESCAPE_SEQUENCES: &[(&str, &str)] = &[("\\\"", "\""), ("\\n", "\n"), ("\\\\", "\\")]; - -#[derive(Debug, Clone, PartialEq)] -pub struct SString { - string: RefCell, -} - -impl Object for SString { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(matches!(ty, VariableType::String)) - } - - fn format( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - f: &mut dyn Write, - style: Style, - precision: Option, - ) -> OperatorResult { - let string = self.string.try_borrow().unwrap_borrow_failure(span)?; - - match (style, precision) { - (Style::Default, None) => write!(f, "{}", string).unwrap_formatting_result(span), - (Style::Debug, None) => { - let mut sequence_iter = ESCAPE_SEQUENCES.iter(); - let (replace, find) = sequence_iter.next().unwrap(); // Should never fail since we static initalized that array. - - let mut to_print = string.replace(find, replace); - - for (replace, find) in sequence_iter { - to_print = to_print.replace(find, replace); - } - - write!(f, "\"{}\"", to_print).unwrap_formatting_result(span) - } - (_, None) => style.unsupported_message(self, span), - (Style::Default | Style::Debug, _) => style.unsupported_message(self, span), - _ => { - style.unsupported_message(self, span).ok(); - precision.unsupported_message(self, span) - } - } - } - - fn index( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - index: Value, - ) -> OperatorResult> { - let range = index.downcast::(span)?; - let string = self.string.try_borrow().unwrap_borrow_failure(span)?; - - // TODO could we keep an immutable reference to the original string to avoid a copy? - let slice = match ( - range.lower_bound, - range.upper_bound, - range.upper_bound_is_inclusive, - ) { - (None, None, false) => string.get(..).ok_or((None, None)), - (Some(lower_bound), None, false) => { - let signed_lower_bound = lower_bound.to_index(); - let lower_bound = self.internalize_index(span, signed_lower_bound)?; - string - .get(lower_bound..) - .ok_or((Some(signed_lower_bound), None)) - } - (None, Some(upper_bound), false) => { - let signed_upper_bound = upper_bound.to_index(); - let upper_bound = self.internalize_index(span, signed_upper_bound)?; - string - .get(..upper_bound) - .ok_or((None, Some(signed_upper_bound))) - } - (None, Some(upper_bound), true) => { - let signed_upper_bound = upper_bound.to_index(); - let upper_bound = self.internalize_index(span, signed_upper_bound)?; - string - .get(..=upper_bound) - .ok_or((None, Some(signed_upper_bound))) - } - (Some(lower_bound), Some(upper_bound), false) => { - let signed_lower_bound = lower_bound.to_index(); - let lower_bound = self.internalize_index(span, signed_lower_bound)?; - let signed_upper_bound = upper_bound.to_index(); - let upper_bound = self.internalize_index(span, signed_upper_bound)?; - string - .get(lower_bound..upper_bound) - .ok_or((Some(signed_lower_bound), Some(signed_upper_bound))) - } - (Some(lower_bound), Some(upper_bound), true) => { - let signed_lower_bound = lower_bound.to_index(); - let lower_bound = self.internalize_index(span, signed_lower_bound)?; - let signed_upper_bound = upper_bound.to_index(); - let upper_bound = self.internalize_index(span, signed_upper_bound)?; - string - .get(lower_bound..=upper_bound) - .ok_or((Some(signed_lower_bound), Some(signed_upper_bound))) - } - (_, None, true) => unreachable!(), // Inclusive ranges without an upper bound are illegal to construct. - }; - - // TODO List has an identical error handling. We should probably move this to a common library. - let range_type = if range.upper_bound_is_inclusive { - "..=" - } else { - ".." - }; - - slice - .map(|slice| Self::from(slice.to_string()).into()) - .map_err(|(lower_bound, upper_bound)| { - Failure::SliceOutOfRange(span.clone(), lower_bound, range_type, upper_bound) - }) - } - - fn cmp( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult { - let rhs = rhs.downcast_ref::(span)?; - - Ok(self.string.cmp(&rhs.string)) - } - - fn addition( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - rhs: &Value, - ) -> OperatorResult> { - let mut string = self - .string - .try_borrow() - .unwrap_borrow_failure(span)? - .clone() - .into_std_string(); - - match rhs { - Value::String(rhs) => { - string.push_str(&rhs.as_str(span)?); - - Ok(Self::from(string).into()) - } - Value::Scalar(rhs) => { - // convert numbers to strings. - let rhs = rhs.to_number(span)?; - - string += &format!("{}", rhs.into_inner()); - - Ok(Self::from(string).into()) - } - _ => Err(Failure::ExpectedGot( - span.clone(), - "string or number".into(), - rhs.type_name(), - )), - } - } - - fn method_call( - &self, - context: &mut ExecutionContext, - span: &S, - attribute: &S, - arguments: Vec>, - expressions: &[Expression], - ) -> OperatorResult> { - match attribute.as_str() { - "insert" => |_context: &mut ExecutionContext, - span: &S, - index: Number, - text: SString| - -> OperatorResult> { - let index = index.to_index(); - let index = self.internalize_index(span, index)?; - - self.string - .try_borrow_mut() - .unwrap_borrow_failure(span)? - .insert_str(index, &text.as_str(span)?); - Ok(NoneType.into()) - } - .auto_call(context, span, arguments, expressions), // insert_str - "is_empty" => { - |_context: &mut ExecutionContext, _span: &S| -> OperatorResult> { - Ok(self - .string - .try_borrow() - .unwrap_borrow_failure(span)? - .is_empty() - .into()) - } - .auto_call(context, span, arguments, expressions) - } - "len" => { - |_context: &mut ExecutionContext, span: &S| -> OperatorResult> { - Float::new(self.string.try_borrow().unwrap_borrow_failure(span)?.len() as f64) - .unwrap_not_nan(span) - .map(|n| n.into()) - } - .auto_call(context, span, arguments, expressions) - } - "format" => { - let string = self.string.try_borrow().unwrap_borrow_failure(span)?; - match formatting::Format::parse(string.as_str()) { - Ok((_, format)) => { - let mut output = String::new(); - format.format(context.log, span, &mut output, &arguments)?; - - Ok(Self::from(output).into()) - } - Err(_error) => { - // TODO Better context would be appreciated here. - Err(Failure::ParseFormatter(span.clone())) - } - } - } - // "lines" => todo!(), // TODO when we have iterators. - _ => Err(Failure::UnknownAttribute(attribute.clone())), - } - } - - fn export( - &self, - _log: &mut dyn RuntimeLog, - span: &S, - ) -> OperatorResult { - let string = self.to_string(span)?; - Ok(SerializableValue::String(string)) - } -} - -pub struct StrRef<'a> { - reference: std::cell::Ref<'a, ImString>, -} - -impl<'a> std::ops::Deref for StrRef<'a> { - type Target = str; - - fn deref(&self) -> &Self::Target { - self.reference.as_str() - } -} - -impl SString { - pub fn from_parsed(parsed: &parsing::PString) -> OperatorResult> { - let mut sequence_iter = ESCAPE_SEQUENCES.iter(); - let (find, replace) = sequence_iter.next().unwrap(); // Should never fail since we static initalized that array. - - let mut string = parsed.value.as_str().replace(find, replace); - - for (find, replace) in sequence_iter { - string = string.replace(find, replace); - } - - let string = RefCell::new(string.into()); - Ok(Self { string }.into()) - } - - pub fn as_str<'a, S: Span>(&'a self, span: &S) -> OperatorResult> { - let reference = self.string.try_borrow().unwrap_borrow_failure(span)?; - let string_reference = StrRef { reference }; - - Ok(string_reference) - } - - pub fn to_string(&self, span: &S) -> OperatorResult { - Ok(self - .string - .try_borrow() - .unwrap_borrow_failure(span)? - .clone() - .into_std_string()) - } - - fn internalize_index(&self, span: &S, index: isize) -> OperatorResult { - let string = self.string.try_borrow().unwrap_borrow_failure(span)?; - - let new_index = if index >= 0 { - Ok(index as usize) - } else if let Some(index) = string.len().checked_sub(index.unsigned_abs()) { - Ok(index) - } else { - Err(Failure::IndexOutOfRange(span.clone(), index)) - }?; - - if new_index >= string.len() { - Err(Failure::IndexOutOfRange(span.clone(), index)) - } else if string.is_char_boundary(new_index) { - Ok(new_index) - } else if new_index < string.len() { - Err(Failure::InvalidCharIndex(span.clone(), new_index as isize)) - } else { - Err(Failure::IndexOutOfRange(span.clone(), new_index as isize)) - } - } -} - -impl NamedObject for SString { - fn static_type_name() -> &'static str { - "String" - } -} - -impl From for SString -where - S: Into, -{ - fn from(value: S) -> Self { - Self { - string: RefCell::new(value.into()), - } - } -} - -#[cfg(test)] -mod test { - use crate::script::{ - execution::{expressions::run_expression, ExecutionContext}, - Runtime, - }; - - use super::*; - - #[test] - fn string_concat() { - ExecutionContext::create(&mut Runtime::default(), |context| { - assert_eq!( - run_expression( - context, - &Expression::parse("\"test\" + \"test\" == \"testtest\"") - .unwrap() - .1 - ), - Ok(true.into()) - ); - - assert_eq!( - run_expression( - context, - &Expression::parse("\"test\" + 5 == \"test5\"").unwrap().1 - ), - Ok(true.into()) - ); - }); - } -} diff --git a/src/script/execution/types/structures.rs b/src/script/execution/types/structures.rs deleted file mode 100644 index 1b46df6..0000000 --- a/src/script/execution/types/structures.rs +++ /dev/null @@ -1,536 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::{collections::HashMap, rc::Rc}; - -use crate::script::{ - execution::{ - expressions::{run_expression, run_trailer}, - validate_assignment_type, ExecutionContext, Failure, - }, - logging::RuntimeLog, - parsing::{self, StructInitialization, Trailer, VariableType}, - Span, -}; - -use super::{serializable::SerializableValue, NamedObject, Object, OperatorResult, Value}; - -#[derive(Debug, PartialEq, Clone)] -pub struct Structure { - ty: Rc>, - pub members: Rc>>, -} - -impl Structure { - pub fn name(&self) -> &str { - self.ty.name.as_str() - } -} - -impl Object for Structure { - fn matches_type( - &self, - ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - Ok(if let VariableType::Struct(type_name) = ty { - type_name.as_str() == self.ty.name.as_str() - } else { - false - }) - } - - fn attribute( - &self, - _log: &mut dyn RuntimeLog, - _span: &S, - name: &S, - ) -> OperatorResult> { - let key = name.as_str(); - - if let Some(value) = self.members.get(key) { - Ok(value.clone()) - } else { - Err(Failure::UnknownAttribute(name.clone())) - } - } - - fn export( - &self, - log: &mut dyn RuntimeLog, - span: &S, - ) -> OperatorResult { - let mut members = HashMap::with_capacity(self.members.len()); - - for (key, item) in self.members.iter() { - let serializable = item.export(log, span)?; - members.insert(key.clone(), serializable); - } - - Ok(SerializableValue::Struct { - ty: self.ty.name.to_string(), - members, - }) - } -} - -impl NamedObject for Structure { - fn static_type_name() -> &'static str { - "struct" - } -} - -impl Structure { - pub fn new(ty: Rc>, table: HashMap>) -> Self { - Self { - ty, - members: Rc::new(table), - } - } - - #[cfg(test)] - pub fn from_array( - ty: Rc>, - values: [(String, Value); N], - ) -> Self { - Self { - ty, - members: Rc::new(HashMap::from(values)), - } - } - - pub fn initalization( - context: &mut ExecutionContext, - struct_definition: &Trailer, - initalization: &StructInitialization, - ) -> OperatorResult> { - enum Inheritance<'a, S: Span> { - Structure(&'a Structure), - Default, - None, - } - - fn build_struct( - context: &mut ExecutionContext, - struct_definition: &Rc>, - initalization: &StructInitialization, - inheritance: Inheritance, - ) -> OperatorResult> { - // We're going to run through this whole struct and collect all the errors at once. - let mut failures = Vec::new(); - - let mut members = HashMap::with_capacity(struct_definition.members.len()); - - for member in struct_definition.members.iter() { - let name = member.name.as_str(); - - let assignment = - initalization - .assignments - .iter() - .find_map(|(assignment_name, assignment)| { - if assignment_name.as_str() == name { - Some(assignment) - } else { - None - } - }); - - let value = if let Some(expression) = assignment { - match run_expression(context, expression) { - Ok(value) => match validate_assignment_type( - context, - member, - expression.get_span(), - value, - expression.get_span(), - ) { - Ok(value) => value, - Err(failure) => { - failures.push(failure); - continue; - } - }, - Err(failure) => { - failures.push(failure); - continue; - } - } - } else { - match inheritance { - Inheritance::Structure(inheritance) => { - if let Some(value) = inheritance.members.get(member.name.as_str()) { - value.clone() - } else { - failures.push(Failure::StructMissingAssignment( - initalization.get_span().clone(), - member.name.clone(), - )); - continue; - } - } - Inheritance::Default => { - if let Some(default) = &member.ty.default_value { - match Value::from_litteral(context, default) { - Ok(value) => value, - Err(failure) => { - failures.push(failure); - continue; - } - } - } else { - failures.push(Failure::NoDefault( - initalization.get_span().clone(), - member.name.clone(), - )); - continue; - } - } - Inheritance::None => { - failures.push(Failure::StructMissingAssignment( - initalization.get_span().clone(), - member.name.clone(), - )); - continue; - } - } - }; - - members.insert(member.name.to_string(), value); - } - - // Make sure there aren't extra assignments. - for (name, _expression) in initalization.assignments.iter() { - if !struct_definition - .members - .iter() - .any(|member| member.name.as_str() == name.as_str()) - { - failures.push(Failure::StructExcessAssignment(name.clone())); - } - } - - if failures.is_empty() { - Ok(Structure { - ty: Rc::clone(struct_definition), - members: Rc::new(members), - } - .into()) - } else { - Err(Failure::StructConstruction( - initalization.get_span().clone(), - failures, - )) - } - } - - let struct_evaluated_definition = run_trailer(context, struct_definition)? - .downcast::>(struct_definition.get_span())? - .definition; - - // Figure out our inheritance, if any. - if let Some(trailer) = &initalization.inheritance { - let trailer_result = run_trailer(context, trailer)?; - - match trailer_result { - Value::Structure(structure) => { - if structure.ty == struct_evaluated_definition { - build_struct( - context, - &struct_evaluated_definition, - initalization, - Inheritance::Structure(&structure), - ) - } else { - return Err(Failure::StructWrongInheritanceType( - trailer.get_span().clone(), - struct_evaluated_definition.name.clone(), - structure.ty.name.clone(), - )); - } - } - Value::Default(_span) => build_struct( - context, - &struct_evaluated_definition, - initalization, - Inheritance::Default, - ), - _ => { - return Err(Failure::ExpectedGot( - trailer.get_span().clone(), - "Struct or Default".into(), - trailer_result.type_name(), - )); - } - } - } else { - build_struct( - context, - &struct_evaluated_definition, - initalization, - Inheritance::None, - ) - } - } -} - -#[derive(Clone)] -pub struct StructDefinition { - pub definition: Rc>, -} - -impl Object for StructDefinition { - fn matches_type( - &self, - _ty: &VariableType, - _log: &mut dyn RuntimeLog, - _variable_name_span: &S, - ) -> OperatorResult { - // You cannot assign struct definitions to variables or pass them between functions. - Ok(false) - } -} - -impl std::fmt::Debug for StructDefinition { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("StructDefinition").finish() - } -} - -impl PartialEq for StructDefinition { - fn eq(&self, _other: &Self) -> bool { - false - } -} - -impl NamedObject for StructDefinition { - fn static_type_name() -> &'static str { - "StructDefinition" - } -} - -#[cfg(test)] -mod test { - use crate::script::{ - execution::{expressions::run_expression, ExecutionContext, Module}, - parsing::Expression, - Runtime, - }; - use common_data_types::Float; - - use super::*; - - #[test] - fn struct_initalization() { - let mut log = Vec::new(); - - let module = Module::load( - &mut log, - "test_module.ccm", - r#"struct EmptyStruct {} - struct DefaultStruct { value: Number = 42 } - struct TwoPartStruct { value: Number = 1, other: Number = 2 }"#, - ) - .unwrap(); - - assert!(log.is_empty()); - - let mut runtime = Runtime::from(module); - ExecutionContext::create(&mut runtime, |context| { - let two_part_struct = context - .stack - .get_variable(&"TwoPartStruct") - .unwrap() - .downcast_ref::>(&"") - .unwrap() - .definition - .clone(); - let empty_struct = context - .stack - .get_variable(&"EmptyStruct") - .unwrap() - .downcast_ref::>(&"") - .unwrap() - .definition - .clone(); - let default_struct = context - .stack - .get_variable(&"DefaultStruct") - .unwrap() - .downcast_ref::>(&"") - .unwrap() - .definition - .clone(); - - context.stack.new_variable( - &"two_part_struct", - Structure::from_array( - two_part_struct.clone(), - [ - ("value".into(), Float::new(3.0).unwrap().into()), - ("other".into(), Float::new(4.0).unwrap().into()), - ], - ) - .into(), - ); - - assert_eq!( - run_expression(context, &Expression::parse("EmptyStruct {}").unwrap().1), - Ok(Structure::from_array(empty_struct, []).into()) - ); - - assert_eq!( - run_expression( - context, - &Expression::parse("DefaultStruct { value = 24 }").unwrap().1 - ), - Ok(Structure::from_array( - default_struct.clone(), - [("value".into(), Float::new(24.0).unwrap().into())] - ) - .into()) - ); - assert_eq!( - run_expression( - context, - &Expression::parse("DefaultStruct { ..default }").unwrap().1 - ), - Ok(Structure::from_array( - default_struct.clone(), - [("value".into(), Float::new(42.0).unwrap().into())] - ) - .into()) - ); - assert_eq!( - run_expression( - context, - &Expression::parse("DefaultStruct { value = default }") - .unwrap() - .1 - ), - Ok(Structure::from_array( - default_struct, - [("value".into(), Float::new(42.0).unwrap().into())] - ) - .into()) - ); - assert_eq!( - run_expression( - context, - &Expression::parse("TwoPartStruct { ..default }").unwrap().1 - ), - Ok(Structure::from_array( - two_part_struct.clone(), - [ - ("value".into(), Float::new(1.0).unwrap().into()), - ("other".into(), Float::new(2.0).unwrap().into()) - ] - ) - .into()) - ); - assert_eq!( - run_expression( - context, - &Expression::parse("TwoPartStruct { value = 3, ..default }") - .unwrap() - .1 - ), - Ok(Structure::from_array( - two_part_struct.clone(), - [ - ("value".into(), Float::new(3.0).unwrap().into()), - ("other".into(), Float::new(2.0).unwrap().into()) - ] - ) - .into()) - ); - assert_eq!( - run_expression( - context, - &Expression::parse("TwoPartStruct { ..two_part_struct }") - .unwrap() - .1 - ), - Ok(Structure::from_array( - two_part_struct.clone(), - [ - ("value".into(), Float::new(3.0).unwrap().into()), - ("other".into(), Float::new(4.0).unwrap().into()) - ] - ) - .into()) - ); - assert_eq!( - run_expression( - context, - &Expression::parse("TwoPartStruct { value = 5, ..two_part_struct }") - .unwrap() - .1 - ), - Ok(Structure::from_array( - two_part_struct, - [ - ("value".into(), Float::new(5.0).unwrap().into()), - ("other".into(), Float::new(4.0).unwrap().into()) - ] - ) - .into()) - ); - assert_eq!( - run_expression( - context, - &Expression::parse("TwoPartStruct { ..EmptyStruct {} }") - .unwrap() - .1 - ), - Err(Failure::StructWrongInheritanceType( - "EmptyStruct", - "TwoPartStruct", - "EmptyStruct" - )) - ); - assert_eq!( - run_expression( - context, - &Expression::parse("EmptyStruct { bogus = 24 }").unwrap().1 - ), - Err(Failure::StructConstruction( - "{", - vec![Failure::StructExcessAssignment("bogus")] - )) - ); - assert_eq!( - run_expression( - context, - &Expression::parse("DefaultStruct { value = false }") - .unwrap() - .1 - ), - Err(Failure::StructConstruction( - "{", - vec![Failure::ExpectedGot( - "false", - "Number".into(), - "Boolean".into() - )] - )), - ); - }); - } -} diff --git a/src/script/logging.rs b/src/script/logging.rs deleted file mode 100644 index b801bca..0000000 --- a/src/script/logging.rs +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::error::Error; - -use fj_core::{validation::ValidationError, Core}; - -use super::{ - execution::{ - types::{function::IntoBuiltinFunction, NoneType, OperatorResult, SString, Value}, - ExecutionContext, Failure, GlobalResources, - }, - Span, -}; - -pub fn register_globals(context: &mut ExecutionContext) { - context.stack.new_variable_str( - "print", - (|context: &mut ExecutionContext, - span: &S, - text: SString| - -> OperatorResult> { - let text = text.to_string(span)?; - context - .log - .push(LogMessage::UserMessage(span.clone(), text)); - - Ok(NoneType.into()) - }) - .into_builtin_function() - .into(), - ); - - context.stack.new_variable_str( - "warn", - (|context: &mut ExecutionContext, - span: &S, - text: SString| - -> OperatorResult> { - let text = text.to_string(span)?; - context - .log - .push(LogMessage::UserWarning(span.clone(), text)); - - Ok(NoneType.into()) - }) - .into_builtin_function() - .into(), - ); - - context.stack.new_variable_str( - "error", - (|_context: &mut ExecutionContext, - span: &S, - text: SString| - -> OperatorResult> { - let text = text.to_string(span)?; - - Err(Failure::User(span.clone(), text)) - }) - .into_builtin_function() - .into(), - ); -} - -pub trait RuntimeLog { - fn push(&mut self, message: LogMessage); -} - -#[derive(Debug)] -pub enum LogMessage { - UserMessage(S, String), - UserWarning(S, String), - FormatIntegerPrecision(S), - ModelValidation(S, Vec), -} - -impl LogMessage { - pub fn log_level(&self) -> LogLevel { - match self { - Self::UserMessage(_, _) => LogLevel::Info, - Self::UserWarning(_, _) => LogLevel::Warning, - Self::FormatIntegerPrecision(_) => LogLevel::Warning, - Self::ModelValidation(_, _) => LogLevel::Warning, - } - } -} - -impl std::fmt::Display for LogMessage { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Self::UserMessage(span, message) => write!(f, "{}: {}", span.format_span(), message), - Self::UserWarning(span, message) => write!(f, "{}: {}", span.format_span(), message), - Self::FormatIntegerPrecision(span) => { - write!( - f, - "{}: Integer formats such as Octal and Hex ignore precision", - span.format_span() - ) - } - Self::ModelValidation(span, error_map) => { - writeln!(f, "{}: Model Validation errors:", span.format_span())?; - - for error in error_map.iter() { - writeln!(f, "\t{}", error)?; - - let mut source = error.source(); - while let Some(error) = source { - writeln!(f, "\n\tCaused by:\n\t{}", error)?; - source = error.source(); - } - } - - Ok(()) - } - } - } -} - -pub enum LogLevel { - Info, - Warning, -} - -pub trait UnpackValidationWarnings { - fn unpack_validation_warnings(&mut self, span: &S, log: &mut dyn RuntimeLog); -} - -impl UnpackValidationWarnings for Core { - fn unpack_validation_warnings(&mut self, span: &S, log: &mut dyn RuntimeLog) { - let errors = self.layers.validation.take_errors(); - - if let Err(errors) = errors { - log.push(LogMessage::ModelValidation(span.clone(), errors.0)); - } - } -} - -impl UnpackValidationWarnings for GlobalResources { - fn unpack_validation_warnings(&mut self, span: &S, log: &mut dyn RuntimeLog) { - self.fornjot_core.unpack_validation_warnings(span, log) - } -} - -pub struct StandardLog; - -impl StandardLog { - pub fn global() -> &'static mut Self { - static mut STANDARD_LOG: StandardLog = StandardLog; - - // SAFETY: We contain no data and are never modified, so we can safely have multiple mutable references. - unsafe { &mut STANDARD_LOG } - } -} - -impl RuntimeLog for StandardLog { - fn push(&mut self, message: LogMessage) { - match message.log_level() { - LogLevel::Info => log::info!("{}", message), - LogLevel::Warning => log::warn!("{}", message), - } - } -} diff --git a/src/script/mod.rs b/src/script/mod.rs deleted file mode 100644 index a375a60..0000000 --- a/src/script/mod.rs +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use anyhow::{bail, Result}; - -mod parsing; -pub use parsing::Span; - -use crate::script::{ - execution::{ - types::{Solid, UserFunction}, - Module, - }, - parsing::FunctionSignature, -}; - -pub use crate::script::execution::types::{Scalar, SerializableValue}; - -mod execution; -pub use execution::{print_all_supported_units, Failure}; -use execution::{ - types::{Object, Sketch}, - GlobalResources, -}; - -use self::execution::{ExecutionContext, Stack}; - -pub mod logging; - -#[derive(Default)] -pub struct Runtime { - pub global_resources: GlobalResources, - pub stack: Stack, - pub root_span: S, -} - -impl From> for Runtime { - fn from(module: Module) -> Self { - let root_span = module.get_span().clone(); - let stack = Stack::new(module); - - Runtime { - global_resources: GlobalResources::default(), - stack, - root_span, - } - } -} - -impl Runtime { - pub fn load(file_name: impl Into, code: S) -> Result { - let mut validation_log = Vec::new(); - - let file_name = file_name.into(); - let module = Module::load(&mut validation_log, file_name, code)?; - - if !validation_log.is_empty() { - // TODO there's got to be a better way to present validation errors. - bail!("Module failed validation: {:?}", validation_log); - } - - Ok(Self::from(module)) - } - - pub fn run_sketch( - &mut self, - name: &str, - arguments: Vec, - ) -> std::result::Result<(), Failure> { - let root_span = self.root_span.clone(); - ExecutionContext::create(self, |context| { - let mut argument_values = Vec::with_capacity(arguments.len()); - for argument in arguments { - let value = argument.into_value_without_type_check(context, &root_span)?; - argument_values.push(value); - } - - let sketch = context.stack.get_variable_str(&root_span, name)?; - - let sketch = sketch.downcast_ref::>(&root_span)?.clone(); - - if matches!( - sketch.source.signature, - FunctionSignature::Sketch { arguments: _ } - ) { - // TODO attaching a span to a user function would be useful for debug purposes. - let result = sketch.call(context, &root_span, argument_values, &[])?; - - result.downcast::(&root_span)?; - - log::warn!( - "Sketches currently cannot be serialized, so no output will be provied." - ); - - Ok(()) - } else { - Err(Failure::ExpectedGot( - root_span.clone(), - "sketch".into(), - sketch.source.signature.to_string().into(), - )) - } - }) - } - - pub fn run_solid( - &mut self, - name: &str, - arguments: Vec, - ) -> std::result::Result> { - let root_span = self.root_span.clone(); - ExecutionContext::create(self, |context| { - let mut argument_values = Vec::with_capacity(arguments.len()); - for argument in arguments { - let value = argument.into_value_without_type_check(context, &root_span)?; - argument_values.push(value); - } - - let solid = context.stack.get_variable_str(&root_span, name)?; - - let solid = solid.downcast_ref::>(&root_span)?.clone(); - - if matches!( - solid.source.signature, - FunctionSignature::Solid { arguments: _ } - ) { - // TODO attaching a span to a user function would be useful for debug purposes. - let result = solid.call(context, &root_span, argument_values, &[])?; - - let solid = result.downcast::(&root_span)?; - Ok(solid) - } else { - Err(Failure::ExpectedGot( - root_span.clone(), - "solid".into(), - solid.source.signature.to_string().into(), - )) - } - }) - } - - pub fn run_task( - &mut self, - name: &str, - arguments: Vec, - ) -> std::result::Result> { - let root_span = self.root_span.clone(); - ExecutionContext::create(self, |context| { - let mut argument_values = Vec::with_capacity(arguments.len()); - for argument in arguments { - let value = argument.into_value_without_type_check(context, &root_span)?; - argument_values.push(value); - } - - let task = context.stack.get_variable_str(&root_span, name)?; - - let task = task.downcast_ref::>(&root_span)?.clone(); - - if matches!( - task.source.signature, - FunctionSignature::Task { - return_type: _, - arguments: _ - } - ) { - // TODO attaching a span to a user function would be useful for debug purposes. - let result = task.call(context, &root_span, argument_values, &[])?; - - let result = result.export(context.log, &root_span)?; - - Ok(result) - } else { - Err(Failure::ExpectedGot( - root_span.clone(), - "task".into(), - task.source.signature.to_string().into(), - )) - } - }) - } -} - -#[cfg(test)] -mod test { - use std::borrow::Cow; - - use common_data_types::Float; - use uom::si::{ - f64::Length, - length::{meter, millimeter}, - }; - - use crate::script::execution::types::Scalar; - - use super::*; - - #[test] - fn run_sketch() { - let mut runtime = Runtime::load( - "root_module", - "sketch my_sketch(input: Length = 50m) { new_sketch(global_xy_plane(), []) }", - ) - .unwrap(); - - assert!(matches!( - runtime.run_sketch("my_sketch", vec![]), - Err(Failure::MissingArguments(_)) - )); - - runtime - .run_sketch("my_sketch", vec![SerializableValue::Default]) - .unwrap(); - - runtime - .run_sketch( - "my_sketch", - vec![SerializableValue::Scalar( - Scalar::try_from(Length::new::(10.0)).unwrap(), - )], - ) - .unwrap(); - - let mut runtime = - Runtime::load("root_module", "function my_sketch() -> Number { 2 }").unwrap(); - - assert!(matches!( - runtime.run_sketch("my_sketch", vec![]), - Err(Failure::ExpectedGot( - _, - Cow::Borrowed("sketch"), - _, // Cow::Borrowed("function() -> Number") - )) - )); - } - - #[test] - fn run_solid() { - let mut runtime = Runtime::load( - "root_module", - "solid my_solid(input: Length = 1cm) { new_sketch(Circle { center = vec2(0m, 0m), radius = input, surface = global_xy_plane() }).sweep(global_xy_plane(), vec3(0cm, 0cm, 1cm)) }", - ) - .unwrap(); - - assert!(matches!( - runtime.run_solid("my_solid", vec![]), - Err(Failure::MissingArguments(_)) - )); - - runtime - .run_solid("my_solid", vec![SerializableValue::Default]) - .unwrap(); - - runtime - .run_solid( - "my_solid", - vec![SerializableValue::Scalar( - Scalar::try_from(Length::new::(10.0)).unwrap(), - )], - ) - .unwrap(); - - let mut runtime = - Runtime::load("root_module", "function my_solid() -> Number { 2 }").unwrap(); - - assert!(matches!( - runtime.run_solid("my_solid", vec![]), - Err(Failure::ExpectedGot( - _, - Cow::Borrowed("solid"), - _, // Cow::Borrowed("function() -> Number") - )) - )); - } - - #[test] - fn run_task() { - let mut runtime = Runtime::load( - "root_module", - "task my_task(input: Number = 50) -> Number { input }", - ) - .unwrap(); - - assert!(matches!( - runtime.run_task("my_task", vec![]), - Err(Failure::MissingArguments(_)) - )); - - assert_eq!( - runtime.run_task("my_task", vec![SerializableValue::Default]), - Ok(SerializableValue::Scalar(Float::new(50.0).unwrap().into())) - ); - - assert_eq!( - runtime.run_task( - "my_task", - vec![SerializableValue::Scalar(Float::new(22.0).unwrap().into())] - ), - Ok(SerializableValue::Scalar(Float::new(22.0).unwrap().into())) - ); - - let mut runtime = - Runtime::load("root_module", "sketch my_sketch() { new_sketch([]) }").unwrap(); - - assert!(matches!( - runtime.run_task("my_sketch", vec![]), - Err(Failure::ExpectedGot( - _, - Cow::Borrowed("task"), - _, // Cow::Borrowed("sketch()") - )) - )); - } -} diff --git a/src/script/module.rs b/src/script/module.rs deleted file mode 100644 index 2716503..0000000 --- a/src/script/module.rs +++ /dev/null @@ -1,419 +0,0 @@ -use std::collections::HashMap; - -use anyhow::{anyhow, Context, Result}; - -use super::parsing; -use parsing::Span; - -const RESERVED_KEYWORDS: &[&str] = &[ - "let", "import", "extern", "struct", "sketch", "widget", "function", "return", "if", "else", - "match", "for", "while", "loop", "in", "break", "continue", "struct", "true", "false", - "default", -]; - -fn is_reserved_keyword(word: &S) -> Option<&'static str> { - for keyword in RESERVED_KEYWORDS { - if matches!(word.compare(keyword), nom::CompareResult::Ok) { - return Some(keyword); - } - } - - None -} - -#[derive(Debug, Eq, PartialEq)] -enum CallableReference { - Function(usize), - Sketch(usize), - Widget(usize), -} - -#[derive(Debug, Eq, PartialEq)] -pub struct Module { - file_name: String, - root_elements: RootElements, - callables: HashMap, -} - -impl Module { - pub fn load(file_name: impl Into, code: impl Into) -> Result { - let file_name = file_name.into(); - let code = code.into(); - - let root_elements = Self::load_ast(code)?; - - Ok(Self { - file_name, - root_elements, - callables, - }) - } - - fn load_ast(code: S) -> Result> { - let (_, ast) = parsing::FileAST::parse(code) - .map_err(|error| anyhow!("Failed to parse file: {:?}", error))?; - - let mut imports = Vec::new(); - let mut structs = Vec::new(); - let mut functions = Vec::new(); - let mut sketches = Vec::new(); - let mut widgets = Vec::new(); - - for element in ast.root_elements.into_iter() { - match element { - parsing::RootElement::Import(import) => imports.push(import), - parsing::RootElement::Struct(sstruct) => structs.push(sstruct), - parsing::RootElement::Sketch(sketch) => sketches.push(sketch), - parsing::RootElement::Widget(widget) => widgets.push(widget), - parsing::RootElement::Function(function) => functions.push(function), - } - } - - Ok(RootElements { - imports, - structs, - functions, - sketches, - widgets, - }) - } - - /// Validation is checking for errors that don't require the context of execution. - fn validate(&self, log: &mut ValidationLog) { - self.root_elements.validate(log); - } -} - -#[derive(Debug, Eq, PartialEq)] -struct RootElements { - imports: Vec>, - structs: Vec>, - functions: Vec>, - sketches: Vec>, - widgets: Vec>, -} - -impl RootElements { - /// Validation is checking for errors that don't require the context of execution.1 - fn validate(&self, log: &mut ValidationLog) { - // There is no validation to be done for imports. - - for structure in self.structs.iter() { - Self::validate_struct(log, structure); - } - for function in self.functions.iter() { - Self::validate_named_block(log, &function.named_block); - } - for sketch in self.sketches.iter() { - Self::validate_named_block(log, &sketch.named_block); - } - for widget in self.widgets.iter() { - Self::validate_named_block(log, &widget.named_block); - } - } - - fn validate_struct(log: &mut ValidationLog, structure: &parsing::Struct) { - // Name should not be a reserved keyword. - if let Some(keyword) = is_reserved_keyword(&structure.name) { - log.push( - structure.name.clone(), - ValidationMessage::ReservedKeyword(keyword), - ); - } - - // None of the members should have a reserved keyword for a name. - for member in structure.members.iter() { - if let Some(keyword) = is_reserved_keyword(&member.name) { - log.push( - member.name.clone(), - ValidationMessage::ReservedKeyword(keyword), - ); - } - } - } - - fn validate_named_block(log: &mut ValidationLog, block: &parsing::NamedBlock) { - // Name should not be a reserved keyword. - if let Some(keyword) = is_reserved_keyword(&block.name) { - log.push( - block.name.clone(), - ValidationMessage::ReservedKeyword(keyword), - ); - } - - // Parameter names should not be reserved keywords. - for parameter in block.parameters.iter() { - if let Some(keyword) = is_reserved_keyword(¶meter.name) { - log.push( - parameter.name.clone(), - ValidationMessage::ReservedKeyword(keyword), - ); - } - } - - Self::validate_block(log, &block.block); - } - - fn validate_block(log: &mut ValidationLog, block: &parsing::Block) { - let mut core_iter = block.statements.iter().peekable(); - let statement_iter = std::iter::from_fn(|| { - core_iter - .next() - .map(|next| (next, core_iter.peek().is_none())) - }); - - for (statement, is_last) in statement_iter { - // Variables should not contain keywords. - if let Some(parsing::Statement::Assign(assignment)) = statement.get() { - for to_assign in assignment.to_assign.iter() { - for part in to_assign.path.parts.iter() { - if let Some(keyword) = is_reserved_keyword(part) { - log.push(part.clone(), ValidationMessage::ReservedKeyword(keyword)); - } - } - } - } - - // Some statements require that they have a semicolon behind them, unless they are the last line. - // Enforce that. - if let parsing::BlockStatement::Open(statement) = statement { - if !is_last { - if let Some(span) = match statement { - parsing::Statement::Expression(spanable) => Some(spanable.get_span()), - parsing::Statement::Assign(spanable) => Some(spanable.get_span()), - parsing::Statement::Return(spanable) => Some(spanable.get_span()), - parsing::Statement::Break(spanable) => Some(spanable.get_span()), - parsing::Statement::Continue(spanable) => Some(spanable.get_span()), - - _ => None, - } { - log.push(span, ValidationMessage::UnclosedStatement); - } - } - } - } - } -} - -#[derive(Debug, Eq, PartialEq, Default)] -struct ValidationLog { - entries: Vec>, -} - -impl ValidationLog { - fn push(&mut self, span: S, message: ValidationMessage) { - self.entries.push(ValidationEntry { span, message }); - } - - fn containes_error(&self) -> bool { - for entry in self.entries.iter() { - if matches!(entry.message.log_level(), ValidationLogLevel::Error) { - return true; - } - } - - false - } -} - -#[derive(Debug, Eq, PartialEq)] -struct ValidationEntry { - span: S, - message: ValidationMessage, -} - -#[derive(Debug, Eq, PartialEq)] -enum ValidationMessage { - UnclosedStatement, - ReservedKeyword(&'static str), -} - -impl ValidationMessage { - fn log_level(&self) -> ValidationLogLevel { - match self { - Self::UnclosedStatement => ValidationLogLevel::Error, - Self::ReservedKeyword(_) => ValidationLogLevel::Error, - } - } -} - -impl std::fmt::Display for ValidationMessage { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - ValidationMessage::UnclosedStatement => { - f.write_str("Non-tail expressions must be closed with a semicolon") - } - ValidationMessage::ReservedKeyword(keyword) => { - write!(f, "Keyword `{}` is reserved", keyword) - } - } - } -} - -enum ValidationLogLevel { - Warning, - Error, -} - -#[cfg(test)] -mod test { - use super::*; - - const TEST_AST_CODE: &str = r#" - import path::to::module; - struct MyStruct {} - sketch my_sketch() {} - widget my_widget() {} - function my_function() -> Length {} -"#; - - #[test] - fn load_module() { - assert!(Module::<&str>::load("my_module.ccm", "").is_ok()); - } - - #[test] - fn load_ast() { - let root: RootElements<&str> = Module::load_ast(TEST_AST_CODE).unwrap(); - - assert_eq!( - root.imports, - [parsing::Import { - path: vec!["path", "to", "module"], - external: false - }] - ); - - assert_eq!( - root.structs, - [parsing::Struct { - name: "MyStruct", - members: vec![] - }] - ); - assert_eq!( - root.sketches, - [parsing::Sketch { - named_block: parsing::NamedBlock { - name: "my_sketch", - parameters: vec![], - block: parsing::Block { statements: vec![] } - }, - }] - ); - assert_eq!( - root.widgets, - [parsing::Widget { - named_block: parsing::NamedBlock { - name: "my_widget", - parameters: vec![], - block: parsing::Block { statements: vec![] } - }, - }] - ); - assert_eq!( - root.functions, - [parsing::Function { - named_block: parsing::NamedBlock { - name: "my_function", - parameters: vec![], - block: parsing::Block { statements: vec![] } - }, - return_type: parsing::VariableType::Length - }] - ); - } - - fn validate(code: &str) -> ValidationLog<&str> { - let module = Module::<&str>::load("my_module.ccs", code).unwrap(); - - let mut validation_log = ValidationLog::default(); - module.validate(&mut validation_log); - - validation_log - } - - #[test] - fn validate_block_empty() { - assert_eq!(validate("widget MyWidget() {}").entries, []); - } - - #[test] - fn validate_block_tail_expressions() { - assert_eq!(validate("widget MyWidget() { let a = b; }").entries, []); - assert_eq!(validate("widget MyWidget() { let a = b }").entries, []); - assert_eq!( - validate("widget MyWidget() { let a = b; let c = d }").entries, - [] - ); - assert_eq!( - validate("widget MyWidget() { let a = b let c = d }").entries, - [ValidationEntry { - span: "let", - message: ValidationMessage::UnclosedStatement, - }] - ); - } - - #[test] - fn validate_assignment_keyword_resurvation() { - assert_eq!( - validate("widget MyWidget() { let break = b; }").entries, - [ValidationEntry { - span: "break", - message: ValidationMessage::ReservedKeyword("break") - }] - ); - } - - #[test] - fn validate_named_block_keyword_resurvation() { - assert_eq!( - validate("widget break() { }").entries, - [ValidationEntry { - span: "break", - message: ValidationMessage::ReservedKeyword("break") - }] - ); - } - - #[test] - fn validate_parameter_names_are_not_keywords() { - assert_eq!(validate("widget MyWidget() { }").entries, []); - - assert_eq!(validate("widget MyWidget(okay: Length) { }").entries, []); - - assert_eq!( - validate("widget MyWidget(break: Length) { }").entries, - [ValidationEntry { - span: "break", - message: ValidationMessage::ReservedKeyword("break") - }] - ); - } - - #[test] - fn validate_struct_name_not_keyword() { - assert_eq!(validate("struct MyStruct { }").entries, []); - assert_eq!( - validate("struct break { }").entries, - [ValidationEntry { - span: "break", - message: ValidationMessage::ReservedKeyword("break") - }] - ); - } - - #[test] - fn validate_struct_member_not_keyword() { - assert_eq!(validate("struct MyStruct { }").entries, []); - assert_eq!(validate("struct MyStruct { okay: Length }").entries, []); - assert_eq!( - validate("struct MyStruct { break: Length }").entries, - [ValidationEntry { - span: "break", - message: ValidationMessage::ReservedKeyword("break") - }] - ); - } -} diff --git a/src/script/parsing/blocks.rs b/src/script/parsing/blocks.rs deleted file mode 100644 index 1888c3f..0000000 --- a/src/script/parsing/blocks.rs +++ /dev/null @@ -1,441 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - branch::alt, - bytes::complete::tag, - character::complete::char as nom_char, - combinator::{map, success}, - error::context, - multi::{many0, separated_list0}, - sequence::{delimited, pair, preceded, terminated, tuple}, -}; - -use super::{parse_name, space0, MemberVariable, Span, Statement, VResult, VariableType}; - -#[derive(Debug, Eq, PartialEq)] -pub struct CallableBlock { - pub parameter_span: S, - pub parameters: Vec>, - pub block: Block, -} - -impl CallableBlock { - pub fn parse_with_return_type(input: S) -> VResult)> { - Self::parse_internal( - input, - context( - "Could not parse return type", - preceded(pair(tag("->"), space0), VariableType::parse), - ), - ) - } - - pub fn parse(input: S) -> VResult { - Self::parse_internal(input, success(())).map(|(input, (callable, _))| (input, callable)) - } - - fn parse_internal( - input: S, - return_type_parser: impl FnMut(S) -> VResult, - ) -> VResult { - map( - tuple(( - context( - "Expected parameter list", - terminated( - pair( - preceded(space0, tag("(")), - separated_list0( - nom_char(','), - delimited(space0, MemberVariable::parse, space0), - ), - ), - pair(nom_char(')'), space0), - ), - ), - delimited(space0, return_type_parser, space0), - Block::parse, - )), - |((parameter_span, parameters), return_type, block)| { - ( - Self { - parameter_span, - parameters, - block, - }, - return_type, - ) - }, - )(input) - } -} - -#[derive(Debug, Eq, PartialEq)] -pub struct NamedBlock { - pub name: S, - pub callable: CallableBlock, -} - -impl NamedBlock { - pub fn parse(input: S) -> VResult { - map( - pair(parse_name, CallableBlock::parse), - |(name, callable)| Self { name, callable }, - )(input) - } - - pub fn parse_with_return_type(input: S) -> VResult)> { - map( - pair(parse_name, CallableBlock::parse_with_return_type), - |(name, (callable, return_type))| (Self { name, callable }, return_type), - )(input) - } -} - -#[derive(Debug, Eq, PartialEq)] -pub enum BlockStatement { - Closed(Statement), - Open(Statement), - Blank(S), -} - -impl BlockStatement { - fn parse(input: S) -> VResult { - alt(( - map( - delimited(space0, Statement::parse, pair(space0, nom_char(';'))), - Self::Closed, - ), - map(preceded(space0, Statement::parse), Self::Open), - map(preceded(space0, tag(";")), Self::Blank), - ))(input) - } - - pub fn get(&self) -> Option<&Statement> { - match self { - BlockStatement::Closed(statement) | BlockStatement::Open(statement) => Some(statement), - BlockStatement::Blank(_) => None, - } - } - - pub fn get_span(&self) -> &S { - match self { - BlockStatement::Closed(spanable) => spanable.get_span(), - BlockStatement::Open(spanable) => spanable.get_span(), - BlockStatement::Blank(spanable) => spanable, - } - } -} - -#[derive(Debug, Eq, PartialEq)] -pub struct Block { - pub statements: Vec>, -} - -impl Block { - pub fn parse(input: S) -> VResult { - map( - delimited( - context("Block is missing opening bracket", nom_char('{')), - many0(alt((delimited(space0, BlockStatement::parse, space0),))), - context( - "Block is missing closing bracket", - pair(space0, nom_char('}')), - ), - ), - |statements| Self { statements }, - )(input) - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::{ - member_variable::{ - MemberVariableConstraint, MemberVariableConstraintList, MemberVariableType, - }, - Assign, Assignable, AssignableVariable, Break, Litteral, Loop, Number, Return, Scalar, - }; - - use super::*; - - #[test] - fn block() { - assert_eq!(Block::parse("{}"), Ok(("", Block { statements: vec![] }))); - assert_eq!( - Block::parse("{;}"), - Ok(( - "", - Block { - statements: vec![BlockStatement::Blank(";")], - } - )) - ); - - assert_eq!( - Block::parse("{ break; a = b; }"), - Ok(( - "", - Block { - statements: vec![ - BlockStatement::Closed(Statement::Break(Break { - starting_span: "break", - loop_name: None, - expression: None - })), - BlockStatement::Closed(Statement::Assign(Assign { - starting_span: "a", - is_new: false, - to_assign: Assignable::Variable(AssignableVariable { - name: "a", - ty: None, - }), - statement: Box::new(Statement::parse("b").unwrap().1) - })) - ], - } - )) - ); - - assert_eq!( - Block::parse("{ a = b }"), - Ok(( - "", - Block { - statements: vec![BlockStatement::Open(Statement::Assign(Assign { - starting_span: "a", - is_new: false, - to_assign: Assignable::Variable(AssignableVariable { - name: "a", - ty: None, - }), - statement: Box::new(Statement::parse("b").unwrap().1) - }))], - } - )) - ); - - assert_eq!( - Block::parse("{ break; a = b }"), - Ok(( - "", - Block { - statements: vec![ - BlockStatement::Closed(Statement::Break(Break { - starting_span: "break", - loop_name: None, - expression: None - })), - BlockStatement::Open(Statement::Assign(Assign { - starting_span: "a", - is_new: false, - to_assign: Assignable::Variable(AssignableVariable { - name: "a", - ty: None, - }), - statement: Box::new(Statement::parse("b").unwrap().1) - })) - ], - } - )) - ); - - assert_eq!( - Block::parse("{ loop {} }"), - Ok(( - "", - Block { - statements: vec![BlockStatement::Open(Statement::Loop(Loop { - starting_span: "loop", - name: None, - block: Block { statements: vec![] } - }))], - } - )) - ); - - assert_eq!( - Block::parse("{ loop {} return }"), - Ok(( - "", - Block { - statements: vec![ - BlockStatement::Open(Statement::Loop(Loop { - starting_span: "loop", - name: None, - block: Block { statements: vec![] } - })), - BlockStatement::Open(Statement::Return(Return { - starting_span: "return", - expression: None - })) - ], - } - )) - ); - - assert!(Block::parse("{ break a = b }").is_err()); - assert!(Block::parse("{ break a = b; }").is_err()); - } - - #[test] - fn named_block() { - assert_eq!( - NamedBlock::parse("my_thing() {}"), - Ok(( - "", - NamedBlock { - name: "my_thing", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - } - } - )) - ); - - assert_eq!( - NamedBlock::parse("my_thing(one: Length) {}"), - Ok(( - "", - NamedBlock { - name: "my_thing", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![MemberVariable { - name: "one", - ty: MemberVariableType { - ty: VariableType::Scalar("Length"), - constraints: None, - default_value: None - } - }], - block: Block { statements: vec![] } - } - } - )) - ); - - assert_eq!( - NamedBlock::parse("my_thing(one: Length, two: Angle = 2) {}"), - Ok(( - "", - NamedBlock { - name: "my_thing", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![ - MemberVariable { - name: "one", - ty: MemberVariableType { - ty: VariableType::Scalar("Length"), - constraints: None, - default_value: None - } - }, - MemberVariable { - name: "two", - ty: MemberVariableType { - ty: VariableType::Scalar("Angle"), - constraints: None, - default_value: Some(Litteral::Scalar(Scalar { - number: Number { - integer: Some("2"), - dot: None, - fractional: None - }, - ty: "" - })) - } - } - ], - block: Block { statements: vec![] } - } - } - )) - ); - - assert_eq!( - NamedBlock::parse("my_thing(one: Length, two: Angle = 2, #[integer] three: Number) {}"), - Ok(( - "", - NamedBlock { - name: "my_thing", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![ - MemberVariable { - name: "one", - ty: MemberVariableType { - ty: VariableType::Scalar("Length"), - constraints: None, - default_value: None - } - }, - MemberVariable { - name: "two", - ty: MemberVariableType { - ty: VariableType::Scalar("Angle"), - constraints: None, - default_value: Some(Litteral::Scalar(Scalar { - number: Number { - integer: Some("2"), - dot: None, - fractional: None - }, - ty: "" - })) - } - }, - MemberVariable { - name: "three", - ty: MemberVariableType { - ty: VariableType::Scalar("Number"), - constraints: Some(MemberVariableConstraintList { - constraints: vec![MemberVariableConstraint::Integer] - }), - default_value: None, - } - } - ], - block: Block { statements: vec![] } - } - } - )) - ); - - assert_eq!( - NamedBlock::parse_with_return_type("my_thing() -> struct T {}"), - Ok(( - "", - ( - NamedBlock { - name: "my_thing", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - }, - }, - VariableType::Struct("T") - ) - )) - ); - } -} diff --git a/src/script/parsing/closure.rs b/src/script/parsing/closure.rs deleted file mode 100644 index b39bef2..0000000 --- a/src/script/parsing/closure.rs +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use nom::{ - branch::alt, - bytes::complete::tag, - character::complete::{char as nom_char, space0}, - combinator::map, - multi::separated_list0, - sequence::{delimited, pair, preceded, terminated}, -}; - -use super::{parse_name, CallableBlock, FunctionSignature, Span, VResult}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub enum CapturedVariable { - Copy(S), - Reference(S), -} - -impl CapturedVariable { - fn parse(input: S) -> VResult { - alt(( - map( - preceded(pair(nom_char('&'), space0), parse_name), - Self::Reference, - ), - map(parse_name, Self::Copy), - ))(input) - } -} - -#[derive(Debug, Eq, PartialEq)] -pub struct Closure { - pub starting_span: S, - pub captured_variables: Vec>, - pub callable: CallableBlock, - pub signature: FunctionSignature, -} - -impl Closure { - pub fn parse(input: S) -> VResult { - map( - pair( - pair( - terminated(tag("["), space0), - terminated( - separated_list0( - delimited(space0, nom_char(','), space0), - CapturedVariable::parse, - ), - pair(space0, tag("]")), - ), - ), - CallableBlock::parse_with_return_type, - ), - |((starting_span, captured_variables), (callable, return_type))| Self { - signature: FunctionSignature::Function { - return_type: Box::new(return_type), - arguments: callable.parameters.iter().map(|p| p.ty.clone()).collect(), - }, - starting_span, - captured_variables, - callable, - }, - )(input) - } - - pub fn get_span(&self) -> &S { - &self.starting_span - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::{Block, VariableType}; - - use super::*; - - #[test] - fn captured_variable() { - assert_eq!( - CapturedVariable::parse("&variable"), - Ok(("", CapturedVariable::Reference("variable"))) - ); - assert_eq!( - CapturedVariable::parse("variable"), - Ok(("", CapturedVariable::Copy("variable"))) - ); - } - - #[test] - fn closure() { - assert_eq!( - Closure::parse("[]() -> Number {}"), - Ok(( - "", - Closure { - starting_span: "[", - captured_variables: vec![], - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - }, - signature: FunctionSignature::Function { - return_type: Box::new(VariableType::Scalar("Number")), - arguments: vec![] - } - } - )) - ); - - assert_eq!( - Closure::parse("[a]() -> Number {}"), - Ok(( - "", - Closure { - starting_span: "[", - captured_variables: vec![CapturedVariable::Copy("a")], - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - }, - signature: FunctionSignature::Function { - return_type: Box::new(VariableType::Scalar("Number")), - arguments: vec![] - } - } - )) - ); - - assert_eq!( - Closure::parse("[a, &b]() -> Number {}"), - Ok(( - "", - Closure { - starting_span: "[", - captured_variables: vec![ - CapturedVariable::Copy("a"), - CapturedVariable::Reference("b") - ], - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - }, - signature: FunctionSignature::Function { - return_type: Box::new(VariableType::Scalar("Number")), - arguments: vec![] - } - } - )) - ); - } -} diff --git a/src/script/parsing/function.rs b/src/script/parsing/function.rs deleted file mode 100644 index 7bbef10..0000000 --- a/src/script/parsing/function.rs +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use nom::{ - combinator::{cut, map}, - sequence::{pair, terminated}, -}; - -use super::{space1, take_keyword, FunctionSignature, NamedBlock, Span, VResult}; - -#[derive(Debug, Eq, PartialEq)] -pub struct Function { - pub starting_span: S, - pub named_block: NamedBlock, - pub signature: FunctionSignature, -} - -impl Function { - pub fn parse_as_function(input: S) -> VResult { - map( - pair( - terminated(take_keyword("function"), space1), - cut(NamedBlock::parse_with_return_type), - ), - |(starting_span, (named_block, return_type))| Self { - starting_span, - signature: FunctionSignature::Function { - return_type: Box::new(return_type), - arguments: named_block - .callable - .parameters - .iter() - .map(|p| p.ty.clone()) - .collect(), - }, - named_block, - }, - )(input) - } - - pub fn parse_as_sketch(input: S) -> VResult { - map( - pair( - terminated(take_keyword("sketch"), space1), - cut(NamedBlock::parse), - ), - |(starting_span, named_block)| Self { - starting_span, - signature: FunctionSignature::Sketch { - arguments: named_block - .callable - .parameters - .iter() - .map(|p| p.ty.clone()) - .collect(), - }, - named_block, - }, - )(input) - } - - pub fn parse_as_solid(input: S) -> VResult { - map( - pair( - terminated(take_keyword("solid"), space1), - cut(NamedBlock::parse), - ), - |(starting_span, named_block)| Self { - starting_span, - signature: FunctionSignature::Solid { - arguments: named_block - .callable - .parameters - .iter() - .map(|p| p.ty.clone()) - .collect(), - }, - named_block, - }, - )(input) - } - - pub fn parse_as_task(input: S) -> VResult { - map( - pair( - terminated(take_keyword("task"), space1), - cut(NamedBlock::parse_with_return_type), - ), - |(starting_span, (named_block, return_type))| Self { - starting_span, - signature: FunctionSignature::Task { - return_type: Box::new(return_type), - arguments: named_block - .callable - .parameters - .iter() - .map(|p| p.ty.clone()) - .collect(), - }, - named_block, - }, - )(input) - } - - pub fn get_span(&self) -> &S { - &self.starting_span - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::{blocks::CallableBlock, Block, VariableType}; - - use super::*; - - #[test] - fn function() { - assert!(Function::parse_as_function("function my_function() {}").is_err()); - assert_eq!( - Function::parse_as_function("function my_function() -> Length {}"), - Ok(( - "", - Function { - starting_span: "function", - named_block: NamedBlock { - name: "my_function", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - } - }, - signature: FunctionSignature::Function { - return_type: Box::new(VariableType::Scalar("Length")), - arguments: vec![], - } - } - )) - ); - } -} diff --git a/src/script/parsing/list.rs b/src/script/parsing/list.rs deleted file mode 100644 index 4296595..0000000 --- a/src/script/parsing/list.rs +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - bytes::complete::tag, - character::complete::char as nom_char, - combinator::opt, - multi::separated_list0, - sequence::{delimited, pair, terminated}, -}; - -use super::{space0, Expression, Span, VResult}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub struct List { - pub starting_span: S, - pub expressions: Vec>, -} - -impl List { - pub fn parse(input: S) -> VResult { - let (input, (starting_span, expressions)) = terminated( - pair( - terminated(tag("["), space0), - separated_list0(nom_char(','), delimited(space0, Expression::parse, space0)), - ), - pair(opt(pair(nom_char(','), space0)), nom_char(']')), - )(input)?; - - Ok(( - input, - Self { - starting_span, - expressions, - }, - )) - } - - pub fn get_span(&self) -> &S { - &self.starting_span - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::{ArithmeticExpression, Comparison, Factor, Term, Trailer}; - - use super::*; - - #[test] - fn list() { - assert_eq!( - List::parse("[]"), - Ok(( - "", - List { - starting_span: "[", - expressions: vec![] - } - )) - ); - assert_eq!( - List::parse("[\n]"), - Ok(( - "", - List { - starting_span: "[", - expressions: vec![] - } - )) - ); - assert_eq!( - List::parse("[one]"), - Ok(( - "", - List { - starting_span: "[", - expressions: vec![Expression::Buffer(Comparison::None( - ArithmeticExpression::Term(Term::Trailer(Trailer::None(Factor::Variable( - "one" - )))) - ))] - } - )) - ); - assert_eq!( - List::parse("[one, two]"), - Ok(( - "", - List { - starting_span: "[", - expressions: vec![ - Expression::Buffer(Comparison::None(ArithmeticExpression::Term( - Term::Trailer(Trailer::None(Factor::Variable("one"),)) - ))), - Expression::Buffer(Comparison::None(ArithmeticExpression::Term( - Term::Trailer(Trailer::None(Factor::Variable("two"))) - ))) - ] - } - )) - ); - assert_eq!( - List::parse("[one, two, three]"), - Ok(( - "", - List { - starting_span: "[", - expressions: vec![ - Expression::Buffer(Comparison::None(ArithmeticExpression::Term( - Term::Trailer(Trailer::None(Factor::Variable("one"),)) - ))), - Expression::Buffer(Comparison::None(ArithmeticExpression::Term( - Term::Trailer(Trailer::None(Factor::Variable("two"),)) - ))), - Expression::Buffer(Comparison::None(ArithmeticExpression::Term( - Term::Trailer(Trailer::None(Factor::Variable("three"),)) - ))) - ] - } - )) - ); - - assert_eq!( - List::parse("[one, two, three, ]"), - Ok(( - "", - List { - starting_span: "[", - expressions: vec![ - Expression::Buffer(Comparison::None(ArithmeticExpression::Term( - Term::Trailer(Trailer::None(Factor::Variable("one"),)) - ))), - Expression::Buffer(Comparison::None(ArithmeticExpression::Term( - Term::Trailer(Trailer::None(Factor::Variable("two"),)) - ))), - Expression::Buffer(Comparison::None(ArithmeticExpression::Term( - Term::Trailer(Trailer::None(Factor::Variable("three"),)) - ))) - ] - } - )) - ); - - assert!(List::parse("[one two]").is_err()); - } -} diff --git a/src/script/parsing/litteral.rs b/src/script/parsing/litteral.rs deleted file mode 100644 index b8b8fbc..0000000 --- a/src/script/parsing/litteral.rs +++ /dev/null @@ -1,156 +0,0 @@ -use std::rc::Rc; - -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{branch::alt, combinator::map}; - -use super::{closure::Closure, take_keyword, List, PString, Scalar, Span, VResult}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub enum Litteral { - Scalar(Scalar), - String(PString), - List(List), - Boolean(S, bool), - Default(S), - Closure(Rc>), -} - -impl Litteral { - pub fn parse(input: S) -> VResult { - alt(( - map(Scalar::parse, Self::Scalar), - map(PString::parse, Self::String), - map(Closure::parse, |closure| Self::Closure(Rc::new(closure))), - map(List::parse, Self::List), - map(take_keyword("true"), |span| Self::Boolean(span, true)), - map(take_keyword("false"), |span| Self::Boolean(span, false)), - map(take_keyword("default"), Self::Default), - ))(input) - } - - pub fn get_span(&self) -> &S { - match self { - Litteral::Scalar(spanable) => spanable.get_span(), - Litteral::String(spanable) => spanable.get_span(), - Litteral::List(spanable) => spanable.get_span(), - Litteral::Boolean(spanable, _) => spanable, - Litteral::Default(spanable) => spanable, - Litteral::Closure(spanable) => spanable.get_span(), - } - } -} - -#[cfg(test)] -mod test { - use std::rc::Rc; - - use crate::script::parsing::{Block, CallableBlock, FunctionSignature, Number, VariableType}; - - use super::*; - - #[test] - fn litteral() { - // Scalar(Scalar), - assert_eq!( - Litteral::parse("1234.5678m"), - Ok(( - "", - Litteral::Scalar(Scalar { - number: Number { - integer: Some("1234"), - dot: Some("."), - fractional: Some("5678") - }, - ty: "m" - }) - )) - ); - - // Scalar, but it's just a number - assert_eq!( - Litteral::parse("1234.5678"), - Ok(( - "", - Litteral::Scalar(Scalar { - number: Number { - integer: Some("1234"), - dot: Some("."), - fractional: Some("5678") - }, - ty: "", - }) - )) - ); - - // String(PString), - assert_eq!( - Litteral::parse(r#""test""#), - Ok(("", Litteral::String(PString { value: "test" }))) - ); - - // List(List), - assert_eq!( - Litteral::parse("[]"), - Ok(( - "", - Litteral::List(List { - starting_span: "[", - expressions: vec![] - }) - )) - ); - - // Boolean(bool), - assert_eq!( - Litteral::parse("true"), - Ok(("", Litteral::Boolean("true", true))) - ); - assert_eq!( - Litteral::parse("false"), - Ok(("", Litteral::Boolean("false", false))) - ); - - // Default, - assert_eq!( - Litteral::parse("default"), - Ok(("", Litteral::Default("default"))) - ); - - // Closure - assert_eq!( - Litteral::parse("[]() -> Number {}"), - Ok(( - "", - Litteral::Closure(Rc::new(Closure { - starting_span: "[", - captured_variables: vec![], - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - }, - signature: FunctionSignature::Function { - return_type: Box::new(VariableType::Scalar("Number")), - arguments: vec![] - } - })) - )) - ) - } -} diff --git a/src/script/parsing/member_variable.rs b/src/script/parsing/member_variable.rs deleted file mode 100644 index 2f490c3..0000000 --- a/src/script/parsing/member_variable.rs +++ /dev/null @@ -1,484 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - branch::alt, - bytes::complete::tag, - character::complete::char as nom_char, - combinator::{cut, map, opt, value}, - error::context, - multi::separated_list0, - sequence::{delimited, pair, preceded, terminated, tuple}, -}; -use std::fmt::Display; - -use super::{ - parse_name, space0, take_keyword, IteratorFormatter, Litteral, Span, VResult, VariableType, -}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub enum MemberVariableConstraint { - Min(Litteral), - Max(Litteral), - Enum(Vec>), - Integer, - // TODO add the ability to constrain lists to a certain type, or set of types. -} - -impl MemberVariableConstraint { - fn parse(input: S) -> VResult { - alt(( - Self::parametric_constraint("min", map(Litteral::parse, Self::Min)), - Self::parametric_constraint("max", map(Litteral::parse, Self::Max)), - Self::parametric_constraint( - "enum", - map( - separated_list0(nom_char(','), delimited(space0, Litteral::parse, space0)), - Self::Enum, - ), - ), - value(Self::Integer, take_keyword("integer")), - ))(input) - } - - fn parametric_constraint( - name: &'static str, - parameter_parser: impl FnMut(S) -> VResult, - ) -> impl FnMut(S) -> VResult { - preceded( - take_keyword(name), - delimited( - pair( - space0, - context("Expected opening `(` to begin arguments", nom_char('(')), - ), - delimited(space0, parameter_parser, space0), - context("Expected closing `)` to end arguments", nom_char(')')), - ), - ) - } -} - -/// Display a litteral, but is limited and can only display litterals that do not require runtime evaluation. -struct DisplayLitteral<'a, S: Span>(&'a Litteral); - -impl Display for DisplayLitteral<'_, S> { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self.0 { - Litteral::Scalar(measurement) => write!(f, "{}", measurement.ty.as_str()), - Litteral::String(string) => write!(f, "\"{}\"", string.value.as_str()), - Litteral::List(_list) => write!(f, "[...]"), - Litteral::Boolean(_span, value) => write!(f, "{}", value), - Litteral::Default(_span) => write!(f, "default"), - Litteral::Closure(_closure) => write!(f, "[...](...) -> ? {{...}}"), // TODO we should probably display closures correctly. - } - } -} - -impl Display for MemberVariableConstraint { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - MemberVariableConstraint::Min(min) => write!(f, "min({})", DisplayLitteral(min)), - MemberVariableConstraint::Max(max) => write!(f, "max({})", DisplayLitteral(max)), - MemberVariableConstraint::Enum(enumeration) => { - write!( - f, - "enum({})", - IteratorFormatter(enumeration.iter().map(|l| DisplayLitteral(l))) - ) - } - MemberVariableConstraint::Integer => write!(f, "Integer"), - } - } -} - -#[derive(Debug, Eq, PartialEq, Clone)] -pub struct MemberVariableConstraintList { - pub constraints: Vec>, -} - -impl MemberVariableConstraintList { - fn parse(input: S) -> VResult { - map( - delimited( - pair(tag("#["), space0), - separated_list0( - nom_char(','), - delimited(space0, MemberVariableConstraint::parse, space0), - ), - pair( - space0, - context("Missing closing `]` for constraint list", cut(tag("]"))), - ), - ), - |constraints| Self { constraints }, - )(input) - } -} - -#[derive(Debug, Eq, PartialEq, Clone)] -pub struct MemberVariableType { - pub ty: VariableType, - pub constraints: Option>, - pub default_value: Option>, -} - -impl MemberVariableType { - pub fn parse(input: S) -> VResult { - map( - tuple(( - opt(terminated(MemberVariableConstraintList::parse, space0)), - VariableType::parse, - opt(preceded( - delimited(space0, nom_char('='), space0), - Litteral::parse, - )), - )), - |(constraints, ty, default_value)| Self { - constraints, - ty, - default_value, - }, - )(input) - } -} - -impl Display for MemberVariableType { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match (self.constraints.as_ref(), self.default_value.is_some()) { - (None, false) => write!(f, "{}", self.ty), - (Some(constraints), false) => { - write!( - f, - "#[{}] {}", - IteratorFormatter(constraints.constraints.iter()), - self.ty - ) - } - (None, true) => write!(f, "{} = default", self.ty), - (Some(constraints), true) => write!( - f, - "#[{}] {} = default", - IteratorFormatter(constraints.constraints.iter(),), - self.ty - ), - } - } -} - -#[derive(Debug, Eq, PartialEq, Clone)] -pub struct MemberVariable { - pub name: S, - pub ty: MemberVariableType, -} - -impl MemberVariable { - pub fn parse(input: S) -> VResult { - map( - tuple(( - opt(terminated(MemberVariableConstraintList::parse, space0)), - terminated(parse_name, space0), - preceded(nom_char(':'), preceded(space0, VariableType::parse)), - opt(preceded( - delimited(space0, nom_char('='), space0), - Litteral::parse, - )), - )), - |(constraints, name, ty, default_value)| Self { - ty: MemberVariableType { - constraints, - ty, - default_value, - }, - name, - }, - )(input) - } -} - -impl Display for MemberVariable { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match ( - self.ty.constraints.as_ref(), - self.ty.default_value.is_some(), - ) { - (None, false) => write!(f, "{}: {}", self.name.as_str(), self.ty.ty), - (Some(constraints), false) => { - write!( - f, - "#[{}] {}: {}", - IteratorFormatter(constraints.constraints.iter()), - self.name.as_str(), - self.ty.ty - ) - } - (None, true) => write!(f, "{}: {} = default", self.name.as_str(), self.ty.ty), - (Some(constraints), true) => write!( - f, - "#[{}] {}: {} = default", - IteratorFormatter(constraints.constraints.iter(),), - self.name.as_str(), - self.ty.ty - ), - } - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::{Number, Scalar}; - - use super::*; - - #[test] - fn member_variable_constraint() { - assert_eq!( - MemberVariableConstraint::parse("integer"), - Ok(("", MemberVariableConstraint::Integer)) - ); - - assert_eq!( - MemberVariableConstraint::parse("min(0)"), - Ok(( - "", - MemberVariableConstraint::Min(Litteral::Scalar(Scalar { - number: Number { - integer: Some("0"), - dot: None, - fractional: None - }, - ty: "" - })) - )) - ); - assert_eq!( - MemberVariableConstraint::parse("max(0)"), - Ok(( - "", - MemberVariableConstraint::Max(Litteral::Scalar(Scalar { - number: Number { - integer: Some("0"), - dot: None, - fractional: None - }, - ty: "", - })) - )) - ); - assert_eq!( - MemberVariableConstraint::parse("enum(0, 1, 2)"), - Ok(( - "", - MemberVariableConstraint::Enum(vec![ - Litteral::Scalar(Scalar { - number: Number { - integer: Some("0"), - dot: None, - fractional: None - }, - ty: "" - }), - Litteral::Scalar(Scalar { - number: Number { - integer: Some("1"), - dot: None, - fractional: None - }, - ty: "" - }), - Litteral::Scalar(Scalar { - number: Number { - integer: Some("2"), - dot: None, - fractional: None - }, - ty: "" - }) - ]) - )) - ); - } - - #[test] - fn member_variable_constraint_list() { - assert_eq!( - MemberVariableConstraintList::parse("#[]"), - Ok(( - "", - MemberVariableConstraintList { - constraints: vec![] - } - )) - ); - - assert_eq!( - MemberVariableConstraintList::parse("#[integer]"), - Ok(( - "", - MemberVariableConstraintList { - constraints: vec![MemberVariableConstraint::Integer] - } - )) - ); - - assert_eq!( - MemberVariableConstraintList::parse("#[integer, integer]"), - Ok(( - "", - MemberVariableConstraintList { - constraints: vec![ - MemberVariableConstraint::Integer, - MemberVariableConstraint::Integer - ] - } - )) - ); - - assert_eq!( - MemberVariableConstraintList::parse("#[integer, integer, integer]"), - Ok(( - "", - MemberVariableConstraintList { - constraints: vec![ - MemberVariableConstraint::Integer, - MemberVariableConstraint::Integer, - MemberVariableConstraint::Integer - ] - } - )) - ); - } - - #[test] - fn member_variable() { - assert_eq!( - MemberVariable::parse("variable: Number"), - Ok(( - "", - MemberVariable { - name: "variable", - ty: MemberVariableType { - ty: VariableType::Scalar("Number"), - constraints: None, - default_value: None - }, - } - )) - ); - - assert_eq!( - MemberVariable::parse("variable: Number = 2"), - Ok(( - "", - MemberVariable { - name: "variable", - ty: MemberVariableType { - ty: VariableType::Scalar("Number"), - constraints: None, - default_value: Some(Litteral::Scalar(Scalar { - number: Number { - integer: Some("2"), - dot: None, - fractional: None - }, - ty: "" - })) - }, - } - )) - ); - - assert_eq!( - MemberVariable::parse("#[integer] variable: Number = 2"), - Ok(( - "", - MemberVariable { - name: "variable", - ty: MemberVariableType { - ty: VariableType::Scalar("Number"), - constraints: Some(MemberVariableConstraintList { - constraints: vec![MemberVariableConstraint::Integer] - }), - default_value: Some(Litteral::Scalar(Scalar { - number: Number { - integer: Some("2"), - dot: None, - fractional: None - }, - ty: "" - })) - }, - } - )) - ); - } - - #[test] - fn member_variable_type() { - assert_eq!( - MemberVariableType::parse("Number"), - Ok(( - "", - MemberVariableType { - ty: VariableType::Scalar("Number"), - constraints: None, - default_value: None - }, - )) - ); - - assert_eq!( - MemberVariableType::parse("Number = 2"), - Ok(( - "", - MemberVariableType { - ty: VariableType::Scalar("Number"), - constraints: None, - default_value: Some(Litteral::Scalar(Scalar { - number: Number { - integer: Some("2"), - dot: None, - fractional: None - }, - ty: "" - })) - }, - )) - ); - - assert_eq!( - MemberVariableType::parse("#[integer] Number = 2"), - Ok(( - "", - MemberVariableType { - ty: VariableType::Scalar("Number"), - constraints: Some(MemberVariableConstraintList { - constraints: vec![MemberVariableConstraint::Integer] - }), - default_value: Some(Litteral::Scalar(Scalar { - number: Number { - integer: Some("2"), - dot: None, - fractional: None - }, - ty: "" - })) - }, - )) - ); - } -} diff --git a/src/script/parsing/mod.rs b/src/script/parsing/mod.rs deleted file mode 100644 index 5677899..0000000 --- a/src/script/parsing/mod.rs +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::fmt::Display; - -use nom::{ - branch::alt, - bytes::complete::{tag, take_until, take_while, take_while1}, - character::complete::char as nom_char, - combinator::{recognize, rest, value, verify}, - error::context, - multi::{fold_many0, fold_many1}, - sequence::{delimited, preceded}, - CompareResult, IResult, -}; - -// TODO currently all comments are just discarded. -// I would like to start tracking them for auto-formatting and generation -// of documentation. - -pub type VResult = IResult>; - -mod span; -pub use span::Span; - -mod root; -pub use root::{FileAST, Import, RootElement}; - -mod pstruct; -pub use pstruct::StructDefinition; - -mod function; -pub use function::Function; - -mod member_variable; -pub use member_variable::{MemberVariable, MemberVariableType}; - -mod blocks; -pub use blocks::{Block, BlockStatement, CallableBlock, NamedBlock}; - -mod statements; -pub use statements::{ - ArithmeticExpression, Assign, Assignable, AssignableVariable, Break, Comparison, Continue, - Else, Expression, Factor, For, If, Loop, Match, Return, Statement, Term, Trailer, While, -}; - -mod variable_type; -pub use variable_type::{FunctionSignature, VariableType}; - -mod range; -pub use range::Range; - -mod struct_initalization; -pub use struct_initalization::StructInitialization; - -mod litteral; -pub use litteral::Litteral; - -mod list; -pub use list::List; - -mod string; -pub use string::PString; - -mod number; -pub use number::Number; - -mod scalar; -pub use scalar::Scalar; - -mod closure; -pub use closure::{CapturedVariable, Closure}; - -fn is_digit(c: char) -> bool { - "0123456789".contains(c) -} - -fn parse_integer(input: S) -> VResult { - take_while1(is_digit)(input) -} - -fn parse_name(input: S) -> VResult { - fn is_alpha(c: char) -> bool { - c.is_alphabetic() || matches!(c, '_') - } - - fn is_alphanumeric(c: char) -> bool { - is_alpha(c) || c.is_numeric() - } - - context( - "Failed to parse name", - recognize(preceded(take_while1(is_alpha), take_while(is_alphanumeric))), - )(input) -} - -fn take_keyword(keyword: &'static str) -> impl FnMut(S) -> VResult { - verify(parse_name::, move |name| { - matches!(name.compare(keyword), CompareResult::Ok) && name.input_len() == keyword.len() - }) -} - -fn is_space(c: char) -> bool { - matches!(c, ' ' | '\t' | '\r' | '\n') -} - -fn consume_space_token(input: S) -> VResult { - value( - (), - alt(( - take_while1(is_space), - delimited(tag("//"), take_while(|c| c != '\n'), nom_char('\n')), - delimited(tag("/*"), take_until("*/"), tag("*/")), - preceded(tag("//"), rest), - )), - )(input) -} - -fn space0(input: S) -> VResult { - value((), fold_many0(consume_space_token, || (), |_, _| {}))(input) -} - -fn space1(input: S) -> VResult { - value((), fold_many1(consume_space_token, || (), |_, _| {}))(input) -} - -/// Presents iterators in a comma separated format. -struct IteratorFormatter(pub I) -where - I: Iterator + Clone, - D: Display; - -impl Display for IteratorFormatter -where - I: Iterator + Clone, - D: Display, -{ - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let mut iter = self.0.clone().peekable(); - - loop { - match (iter.next(), iter.peek().is_some()) { - (Some(next), true) => write!(f, "{}, ", next)?, - (Some(next), false) => write!(f, "{}", next)?, - (None, _) => break Ok(()), - } - } - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn integer() { - assert_eq!(parse_integer("1234"), Ok(("", "1234"))); - assert_eq!(parse_integer("1234.5678"), Ok((".5678", "1234"))); - } - - #[test] - fn name() { - assert_eq!(parse_name("name"), Ok(("", "name"))); - assert_eq!(parse_name("name1"), Ok(("", "name1"))); - assert_eq!(parse_name("name_1"), Ok(("", "name_1"))); - assert_eq!(parse_name("_name"), Ok(("", "_name"))); - assert!(parse_name("1name").is_err()); - } - - #[test] - fn space_and_comments() { - assert_eq!(space0(" \t\r\n"), Ok(("", ()))); - assert_eq!( - space0(" // A line comment. \n after_the_line"), - Ok(("after_the_line", ())) - ); - assert_eq!( - space0(" /* a block comment. */ after_the_comment"), - Ok(("after_the_comment", ())) - ); - - assert_eq!( - space0(" /* a block comment. */ /* another comment */ after_the_comment"), - Ok(("after_the_comment", ())) - ); - assert_eq!(space0(""), Ok(("", ()))); - - assert_eq!(space1(" \t\r\n"), Ok(("", ()))); - assert_eq!( - space1(" // A line comment. \n after_the_line"), - Ok(("after_the_line", ())) - ); - assert_eq!(space1(" // A line comment with no newline"), Ok(("", ()))); - assert_eq!( - space1(" /* a block comment. */ after_the_comment"), - Ok(("after_the_comment", ())) - ); - - assert_eq!( - space1(" /* a block comment. */ /* another comment */ after_the_comment"), - Ok(("after_the_comment", ())) - ); - assert!(space1("").is_err()); - } -} diff --git a/src/script/parsing/number.rs b/src/script/parsing/number.rs deleted file mode 100644 index 0f0e81f..0000000 --- a/src/script/parsing/number.rs +++ /dev/null @@ -1,179 +0,0 @@ -use std::fmt::Display; - -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - branch::alt, - bytes::complete::take_while1, - combinator::{map, success, verify}, - sequence::{delimited, tuple}, -}; - -use crate::script::parsing::{parse_integer, space0}; - -use super::{Span, VResult}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub struct Number { - pub integer: Option, - pub dot: Option, - pub fractional: Option, -} - -impl Number { - pub fn parse(input: S) -> VResult { - fn take_dot(input: S) -> VResult { - verify(take_while1(|c| c == '.'), |output: &S| { - output.as_str().len() == 1 - })(input) - } - - let (input, (integer, dot, fractional)) = alt(( - tuple(( - map(parse_integer, Some), - map(delimited(space0, take_dot, space0), Some), - map(parse_integer, Some), - )), - tuple(( - success(None), - map(delimited(space0, take_dot, space0), Some), - map(parse_integer, Some), - )), - tuple(( - map(parse_integer, Some), - map(delimited(space0, take_dot, space0), Some), - success(None), - )), - tuple((map(parse_integer, Some), success(None), success(None))), - ))(input)?; - - Ok(( - input, - Self { - integer, - dot, - fractional, - }, - )) - } - - pub fn get_span(&self) -> &S { - // We accept '0.0', '.0', '0.', and '.', but not ''. It should not be possible for this to fail. - self.integer.as_ref().unwrap_or_else(|| { - self.dot - .as_ref() - .unwrap_or_else(|| self.fractional.as_ref().unwrap()) - }) - } - - pub fn to_float

(&self) -> Result - where - P: std::str::FromStr, - { - match (self.integer.as_ref(), self.fractional.as_ref()) { - (None, None) => P::from_str("0.0"), - (Some(integer), None) => P::from_str(&integer.to_string()), - (None, Some(fractional)) => P::from_str(&format!(".{}", fractional.to_string())), - (Some(integer), Some(fractional)) => P::from_str(&format!( - "{}.{}", - integer.to_string(), - fractional.to_string() - )), - } - } -} - -impl Display for Number { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match ( - self.integer.as_ref().map(|s| s.as_str()), - self.fractional.as_ref().map(|s| s.as_str()), - ) { - (None, None) => write!(f, "."), - (Some(integer), None) => write!(f, "{}", integer), - (None, Some(fractional)) => write!(f, ".{}", fractional), - (Some(integer), Some(fractional)) => write!(f, "{}.{}", integer, fractional), - } - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn number() { - assert_eq!( - Number::parse("1234"), - Ok(( - "", - Number { - integer: Some("1234"), - dot: None, - fractional: None - } - )) - ); - assert_eq!( - Number::parse(".1234"), - Ok(( - "", - Number { - integer: None, - dot: Some("."), - fractional: Some("1234") - } - )) - ); - assert_eq!( - Number::parse("1234."), - Ok(( - "", - Number { - integer: Some("1234"), - dot: Some("."), - fractional: None - } - )) - ); - assert_eq!( - Number::parse("1234.5678"), - Ok(( - "", - Number { - integer: Some("1234"), - dot: Some("."), - fractional: Some("5678") - } - )) - ); - assert_eq!( - Number::parse("1234;"), - Ok(( - ";", - Number { - integer: Some("1234"), - dot: None, - fractional: None - } - )) - ); - assert!(Number::parse("").is_err()); - assert!(Number::parse(".").is_err()); - } -} diff --git a/src/script/parsing/pstruct.rs b/src/script/parsing/pstruct.rs deleted file mode 100644 index 73bd29a..0000000 --- a/src/script/parsing/pstruct.rs +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use nom::{ - character::complete::char as nom_char, - combinator::{map, opt}, - multi::separated_list0, - sequence::{delimited, pair, preceded}, -}; - -use super::{parse_name, space0, take_keyword, MemberVariable, Span, VResult}; - -#[derive(Debug, Eq, PartialEq)] -pub struct StructDefinition { - pub name: S, - pub members: Vec>, -} - -impl StructDefinition { - pub fn parse(input: S) -> VResult { - map( - preceded( - take_keyword("struct"), - pair( - delimited(space0, parse_name, space0), - delimited( - pair(nom_char('{'), space0), - separated_list0(nom_char(','), preceded(space0, MemberVariable::parse)), - preceded( - pair(opt(pair(space0, nom_char(','))), space0), - nom_char('}'), - ), - ), - ), - ), - |(name, assignments)| Self { - name, - members: assignments, - }, - )(input) - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::member_variable::{ - MemberVariableConstraint, MemberVariableConstraintList, MemberVariableType, - }; - use crate::script::parsing::{Litteral, VariableType}; - - use super::*; - - #[test] - fn parse_struct() { - assert_eq!( - StructDefinition::parse("struct MyStruct {}"), - Ok(( - "", - StructDefinition { - name: "MyStruct", - members: vec![] - } - )) - ); - - assert_eq!( - StructDefinition::parse("struct MyStruct { a: Length }"), - Ok(( - "", - StructDefinition { - name: "MyStruct", - members: vec![MemberVariable { - name: "a", - ty: MemberVariableType { - ty: VariableType::Scalar("Length"), - constraints: None, - default_value: None - } - }] - } - )) - ); - - assert_eq!( - StructDefinition::parse("struct MyStruct { a: Length, #[integer] b: Angle = true }"), - Ok(( - "", - StructDefinition { - name: "MyStruct", - members: vec![ - MemberVariable { - name: "a", - ty: MemberVariableType { - ty: VariableType::Scalar("Length"), - constraints: None, - default_value: None - } - }, - MemberVariable { - name: "b", - ty: MemberVariableType { - ty: VariableType::Scalar("Angle"), - constraints: Some(MemberVariableConstraintList { - constraints: vec![MemberVariableConstraint::Integer] - }), - default_value: Some(Litteral::Boolean("true", true)) - } - } - ] - } - )) - ); - - assert_eq!( - StructDefinition::parse("struct MyStruct { a: Length, #[integer] b: Angle = true, }"), - Ok(( - "", - StructDefinition { - name: "MyStruct", - members: vec![ - MemberVariable { - name: "a", - ty: MemberVariableType { - ty: VariableType::Scalar("Length"), - constraints: None, - default_value: None - } - }, - MemberVariable { - name: "b", - ty: MemberVariableType { - ty: VariableType::Scalar("Angle"), - constraints: Some(MemberVariableConstraintList { - constraints: vec![MemberVariableConstraint::Integer] - }), - default_value: Some(Litteral::Boolean("true", true)) - } - } - ] - } - )) - ); - } -} diff --git a/src/script/parsing/range.rs b/src/script/parsing/range.rs deleted file mode 100644 index acfb156..0000000 --- a/src/script/parsing/range.rs +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - branch::alt, - bytes::complete::tag, - combinator::{map, opt}, - sequence::{delimited, tuple}, -}; - -use crate::script::parsing::space0; - -use super::{Span, Trailer, VResult}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub struct Range { - pub comparison_operator: S, - pub lower_bound: Option>, - pub upper_bound_is_inclusive: bool, - pub upper_bound: Option>, -} - -impl Range { - pub fn parse(input: S) -> VResult { - enum RangeType { - Exclusive(S), - Inclusive(S), - } - - map( - tuple(( - opt(Trailer::parse), - delimited( - space0, - alt(( - map(tag("..="), RangeType::Inclusive), - map(tag(".."), RangeType::Exclusive), - )), - space0, - ), - opt(Trailer::parse), - )), - |(lower_bound, range_type, upper_bound)| { - let (comparison_operator, upper_bound_is_inclusive) = match range_type { - RangeType::Inclusive(operator) => (operator, true), - RangeType::Exclusive(operator) => (operator, false), - }; - - Self { - comparison_operator, - upper_bound, - upper_bound_is_inclusive, - lower_bound, - } - }, - )(input) - } - - pub fn get_span(&self) -> &S { - self.lower_bound - .as_ref() - .map(|expression| expression.get_span()) - .unwrap_or(&self.comparison_operator) - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::Factor; - - use super::*; - - #[test] - fn range() { - assert_eq!( - Range::parse(".."), - Ok(( - "", - Range { - comparison_operator: "..", - upper_bound: None, - upper_bound_is_inclusive: false, - lower_bound: None, - } - )) - ); - assert_eq!( - Range::parse("..="), - Ok(( - "", - Range { - comparison_operator: "..=", - upper_bound: None, - upper_bound_is_inclusive: true, - lower_bound: None, - } - )) - ); - assert_eq!( - Range::parse("a..b"), - Ok(( - "", - Range { - comparison_operator: "..", - upper_bound: Some(Trailer::None(Factor::Variable("b"))), - lower_bound: Some(Trailer::None(Factor::Variable("a"))), - upper_bound_is_inclusive: false, - } - )) - ); - - assert_eq!(*Range::parse("..").unwrap().1.get_span(), ".."); - assert_eq!(*Range::parse("a..").unwrap().1.get_span(), "a"); - } -} diff --git a/src/script/parsing/root/import.rs b/src/script/parsing/root/import.rs deleted file mode 100644 index 1612eca..0000000 --- a/src/script/parsing/root/import.rs +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use nom::{ - bytes::complete::tag, - character::complete::char as nom_char, - combinator::{map, opt}, - multi::separated_list0, - sequence::{delimited, pair, preceded}, -}; - -use crate::script::{ - parsing::{parse_name, space0, take_keyword, VResult}, - Span, -}; - -#[derive(Debug, Eq, PartialEq)] -pub struct Import { - pub path: Vec, - pub external: bool, -} - -impl Import { - pub fn parse(input: S) -> VResult { - map( - preceded( - take_keyword("import"), - delimited( - space0, - pair( - opt(take_keyword("extern")), - separated_list0(tag("::"), delimited(space0, parse_name, space0)), - ), - pair(space0, nom_char(';')), - ), - ), - |(external, path)| Import { - path, - external: external.is_some(), - }, - )(input) - } -} diff --git a/src/script/parsing/root/mod.rs b/src/script/parsing/root/mod.rs deleted file mode 100644 index ebfc055..0000000 --- a/src/script/parsing/root/mod.rs +++ /dev/null @@ -1,271 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use nom::{ - branch::alt, - combinator::{all_consuming, map}, - multi::many0, - sequence::delimited, -}; - -pub use self::import::Import; - -use super::{space0, Function, Span, StructDefinition, VResult}; - -mod import; - -#[derive(Debug, Eq, PartialEq)] -pub struct FileAST { - pub root_elements: Vec>, -} - -impl FileAST { - pub fn parse(input: S) -> VResult { - all_consuming(map( - many0(delimited(space0, RootElement::parse, space0)), - |root_elements| FileAST { root_elements }, - ))(input) - } -} - -#[derive(Debug, Eq, PartialEq)] -pub enum RootElement { - Import(Import), - Struct(StructDefinition), - Function(Function), -} - -impl RootElement { - fn parse(input: S) -> VResult { - alt(( - map(Import::parse, Self::Import), - map(StructDefinition::parse, Self::Struct), - map(Function::parse_as_sketch, Self::Function), - map(Function::parse_as_solid, Self::Function), - map(Function::parse_as_task, Self::Function), - map(Function::parse_as_function, Self::Function), - ))(input) - } -} - -#[cfg(test)] -mod test { - - use crate::script::parsing::{ - blocks::CallableBlock, Block, FunctionSignature, NamedBlock, VariableType, - }; - - use super::*; - - #[test] - fn root_element() { - // Import(Import), - assert_eq!( - RootElement::parse("import path::to::module;"), - Ok(( - "", - RootElement::Import(Import { - path: vec!["path", "to", "module"], - external: false - }) - )) - ); - - // Struct(Struct), - assert_eq!( - RootElement::parse("struct MyStruct {}"), - Ok(( - "", - RootElement::Struct(StructDefinition { - name: "MyStruct", - members: vec![] - }) - )) - ); - - // Sketch(Sketch), - assert_eq!( - RootElement::parse("sketch my_sketch() {}"), - Ok(( - "", - RootElement::Function(Function { - starting_span: "sketch", - named_block: NamedBlock { - name: "my_sketch", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - } - }, - signature: FunctionSignature::Sketch { arguments: vec![] }, - }) - )) - ); - - // Solid(Solid), - assert_eq!( - RootElement::parse("solid my_solid() {}"), - Ok(( - "", - RootElement::Function(Function { - starting_span: "solid", - named_block: NamedBlock { - name: "my_solid", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - } - }, - signature: FunctionSignature::Solid { arguments: vec![] }, - }) - )) - ); - - // Function(NamedBlock), - assert_eq!( - RootElement::parse("function my_function() -> Length {}"), - Ok(( - "", - RootElement::Function(Function { - starting_span: "function", - named_block: NamedBlock { - name: "my_function", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - } - }, - signature: FunctionSignature::Function { - return_type: Box::new(VariableType::Scalar("Length")), - arguments: vec![] - }, - }) - )) - ); - } - - #[test] - fn import() { - assert_eq!( - Import::parse("import path::to::module;"), - Ok(( - "", - Import { - path: vec!["path", "to", "module"], - external: false - } - )) - ); - assert_eq!( - Import::parse("import extern path::to::module;"), - Ok(( - "", - Import { - path: vec!["path", "to", "module"], - external: true - } - )) - ); - } - - #[test] - fn file_ast() { - assert_eq!( - FileAST::parse( - r#" - /// My Struct - struct MyStruct {} - - /* My Sketch */ - sketch my_sketch() {} - solid my_solid() {} - function my_function() -> Length {} - task my_task() -> Length {} -"# - ), - Ok(( - "", - FileAST { - root_elements: vec![ - RootElement::Struct(StructDefinition { - name: "MyStruct", - members: vec![] - }), - RootElement::Function(Function { - starting_span: "sketch", - named_block: NamedBlock { - name: "my_sketch", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - } - }, - signature: FunctionSignature::Sketch { arguments: vec![] }, - }), - RootElement::Function(Function { - starting_span: "solid", - named_block: NamedBlock { - name: "my_solid", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - } - }, - signature: FunctionSignature::Solid { arguments: vec![] }, - }), - RootElement::Function(Function { - starting_span: "function", - named_block: NamedBlock { - name: "my_function", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - } - }, - signature: FunctionSignature::Function { - return_type: Box::new(VariableType::Scalar("Length")), - arguments: vec![] - }, - }), - RootElement::Function(Function { - starting_span: "task", - named_block: NamedBlock { - name: "my_task", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - } - }, - signature: FunctionSignature::Task { - return_type: Box::new(VariableType::Scalar("Length")), - arguments: vec![] - }, - }), - ] - } - )) - ); - } -} diff --git a/src/script/parsing/scalar.rs b/src/script/parsing/scalar.rs deleted file mode 100644 index aedb0a9..0000000 --- a/src/script/parsing/scalar.rs +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - branch::alt, - bytes::complete::{tag, take_while, take_while1}, - character::complete::char as nom_char, - combinator::{consumed, map, verify}, - multi::fold_many0, - sequence::{delimited, separated_pair}, -}; - -use super::{space0, Number, Span, VResult}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub struct Scalar { - pub number: Number, - pub ty: S, -} - -impl Scalar { - pub fn parse(input: S) -> VResult { - // TODO the unit type parsing is terribly under-tested. - map( - separated_pair(Number::parse, space0, Self::parse_type), - |(number, ty)| Scalar { number, ty }, - )(input) - } - - fn parse_type(input: S) -> VResult { - fn parse_unit(input: S) -> VResult { - verify( - map( - consumed(fold_many0( - alt(( - take_while1(|c: char| { - c.is_alphanumeric() || matches!(c, '^' | '/' | '%' | '-' | '\\') - }), - tag("<-"), - )), - || (), - |_, _| (), - )), - |(span, _)| span, - ), - |input: &S| { - let input = input.as_str(); - // If the unit type exists, it must start with a letter or number. - input.is_empty() - || input - .chars() - .next() - .map(|input| input.is_alphanumeric()) - .unwrap_or(false) - }, - )(input) - } - - fn parse_unit_quoted(input: S) -> VResult { - delimited(nom_char('<'), take_while(|c| c != '>'), nom_char('>'))(input) - } - - fn empty_unit(input: S) -> VResult { - let empty = input.slice(..0); - Ok((input, empty)) - } - - alt((parse_unit_quoted, parse_unit, empty_unit))(input) - } - - pub fn get_span(&self) -> &S { - self.number.get_span() - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn parse_type() { - assert_eq!(Scalar::parse_type(""), Ok(("", "cm^3(STP)"))); - assert_eq!(Scalar::parse_type("mm"), Ok(("", "mm"))); - assert_eq!(Scalar::parse_type(""), Ok(("", ""))); - - assert_eq!(Scalar::parse_type("mm <"), Ok((" <", "mm"))); - assert_eq!(Scalar::parse_type("mm.floor()"), Ok((".floor()", "mm"))); - assert_eq!(Scalar::parse_type(".floor()"), Ok((".floor()", ""))); - } - - #[test] - fn measurement() { - assert_eq!( - Scalar::parse("22 m"), - Ok(( - "", - Scalar { - number: Number { - integer: Some("22"), - dot: None, - fractional: None - }, - ty: "m" - } - )) - ); - - assert_eq!( - Scalar::parse("22m"), - Ok(( - "", - Scalar { - number: Number { - integer: Some("22"), - dot: None, - fractional: None - }, - ty: "m" - } - )) - ); - - assert_eq!( - Scalar::parse("22.44m"), - Ok(( - "", - Scalar { - number: Number { - integer: Some("22"), - dot: Some("."), - fractional: Some("44"), - }, - ty: "m" - } - )) - ); - } - - #[test] - fn number() { - assert_eq!( - Scalar::parse("22"), - Ok(( - "", - Scalar { - number: Number { - integer: Some("22"), - dot: None, - fractional: None - }, - ty: "" - } - )) - ); - - assert_eq!( - Scalar::parse("22.44"), - Ok(( - "", - Scalar { - number: Number { - integer: Some("22"), - dot: Some("."), - fractional: Some("44"), - }, - ty: "" - } - )) - ); - - assert_eq!( - Scalar::parse("22.44 <"), - Ok(( - "<", - Scalar { - number: Number { - integer: Some("22"), - dot: Some("."), - fractional: Some("44"), - }, - ty: "" - } - )) - ); - - assert_eq!( - Scalar::parse("22.44.floor()"), - Ok(( - ".floor()", - Scalar { - number: Number { - integer: Some("22"), - dot: Some("."), - fractional: Some("44"), - }, - ty: "" - } - )) - ); - } -} diff --git a/src/script/parsing/span.rs b/src/script/parsing/span.rs deleted file mode 100644 index c9a8e8c..0000000 --- a/src/script/parsing/span.rs +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::ops::{RangeFrom, RangeTo}; - -use nom_locate::LocatedSpan; - -pub trait Span: - nom::InputIter - + for<'b> nom::Compare<&'b str> - + nom::InputLength - + nom::InputTake - + nom::InputTakeAtPosition - + nom::Slice> - + nom::Slice> - + nom::Offset - + for<'b> nom::FindSubstring<&'b str> - + Clone - + std::fmt::Debug - + Eq - + PartialEq - + std::hash::Hash - + ToString - + AsStr - + FromStr - + FormatSpan - + 'static -{ - fn chars(&self) -> impl Iterator; -} - -pub trait AsStr { - fn as_str(&self) -> &str; -} - -pub trait FromStr { - fn from_str(string: &'static str) -> Self; -} - -impl AsStr for &'static str { - fn as_str(&self) -> &str { - self - } -} - -impl FromStr for &'static str { - fn from_str(string: &'static str) -> Self { - string - } -} - -impl AsStr for LocatedSpan<&'static str> { - fn as_str(&self) -> &str { - self.fragment() - } -} - -impl FromStr for LocatedSpan<&'static str> { - fn from_str(string: &'static str) -> Self { - LocatedSpan::new(string) - } -} - -impl AsStr for imstr::ImString { - fn as_str(&self) -> &str { - self.as_str() - } -} - -impl FromStr for imstr::ImString { - fn from_str(string: &'static str) -> Self { - imstr::ImString::from(string) - } -} - -impl AsStr for LocatedSpan { - fn as_str(&self) -> &str { - self.fragment().as_str() - } -} - -impl FromStr for LocatedSpan { - fn from_str(string: &'static str) -> Self { - LocatedSpan::new(imstr::ImString::from(string)) - } -} - -impl Span for &'static str { - fn chars(&self) -> impl Iterator { - str::chars(self) - } -} -impl Span for LocatedSpan<&'static str> { - fn chars(&self) -> impl Iterator { - self.fragment().chars() - } -} -impl Span for imstr::ImString { - fn chars(&self) -> impl Iterator { - imstr::ImString::chars(self) - } -} -impl Span for LocatedSpan { - fn chars(&self) -> impl Iterator { - self.fragment().chars() - } -} - -pub trait FormatSpan { - fn format_span(&self) -> String; -} - -impl<'a> FormatSpan for &'a str { - fn format_span(&self) -> String { - format!("`{}`", self) - } -} -impl<'a> FormatSpan for LocatedSpan<&'a str> { - fn format_span(&self) -> String { - format!("[{}:{}]", self.location_line(), self.get_column()) - } -} -impl FormatSpan for imstr::ImString { - fn format_span(&self) -> String { - format!("`{}`", self) - } -} -impl FormatSpan for LocatedSpan { - fn format_span(&self) -> String { - format!("[{}:{}]", self.location_line(), self.get_column()) - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::PString; - - use super::*; - - #[test] - fn span_types() { - assert_eq!( - PString::parse(r#""test""#), - Ok(("", PString { value: "test" })) - ); - - assert_eq!( - PString::parse(LocatedSpan::new(r#""test""#)) - .unwrap() - .1 - .value - .fragment(), - &"test" - ); - } -} diff --git a/src/script/parsing/statements/assign.rs b/src/script/parsing/statements/assign.rs deleted file mode 100644 index c6b70cb..0000000 --- a/src/script/parsing/statements/assign.rs +++ /dev/null @@ -1,317 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use nom::{ - branch::alt, - bytes::complete::tag, - character::complete::char as nom_char, - combinator::{map, opt}, - multi::separated_list0, - sequence::{delimited, pair, preceded, terminated, tuple}, -}; - -use crate::script::{ - parsing::{parse_name, space0, space1, take_keyword, VResult, VariableType}, - Span, -}; - -use super::Statement; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub struct AssignableVariable { - pub name: S, - pub ty: Option>, -} - -impl AssignableVariable { - fn parse(input: S) -> VResult { - map( - pair( - terminated(parse_name, space0), - opt(preceded(pair(nom_char(':'), space0), VariableType::parse)), - ), - |(name, ty)| Self { name, ty }, - )(input) - } - - pub fn get_span(&self) -> &S { - &self.name - } -} - -#[derive(Debug, Eq, PartialEq, Clone)] -pub enum Assignable { - Variable(AssignableVariable), - List(S, Vec>), -} - -pub enum AssignableIter< - 'a, - S: Span + 'a, - A: Iterator>, - B: Iterator>, -> { - A(A), - B(B), -} - -impl< - 'a, - S: Span + 'a, - A: Iterator>, - B: Iterator>, - > std::iter::Iterator for AssignableIter<'a, S, A, B> -{ - type Item = &'a AssignableVariable; - - fn next(&mut self) -> Option { - match self { - AssignableIter::A(iter) => iter.next(), - AssignableIter::B(iter) => iter.next(), - } - } -} - -impl Assignable { - pub(super) fn parse(input: S) -> VResult { - alt(( - map(AssignableVariable::parse, Self::Variable), - map(Self::parse_list, |(starting_span, list)| { - Self::List(starting_span, list) - }), - ))(input) - } - - fn parse_list(input: S) -> VResult>)> { - terminated( - pair( - tag("["), - separated_list0( - delimited(space0, nom_char(','), space0), - AssignableVariable::parse, - ), - ), - nom_char(']'), - )(input) - } - - pub fn iter( - &self, - ) -> AssignableIter< - '_, - S, - std::iter::Once<&AssignableVariable>, - std::slice::Iter>, - > { - match self { - Assignable::Variable(single) => AssignableIter::A(std::iter::once(single)), - Assignable::List(_span, list) => AssignableIter::B(list.iter()), - } - } - - pub fn get_span(&self) -> &S { - match self { - Assignable::Variable(spanable) => spanable.get_span(), - Assignable::List(spanable, _) => spanable, - } - } -} - -#[derive(Debug, Eq, PartialEq)] -pub struct Assign { - pub starting_span: S, - pub is_new: bool, - pub to_assign: Assignable, - pub statement: Box>, -} - -impl Assign { - pub fn parse(input: S) -> VResult { - map( - tuple(( - opt(terminated(take_keyword::("let"), space1)), - Assignable::parse, - preceded(delimited(space0, nom_char('='), space0), Statement::parse), - )), - |(let_keyword, to_assign, statement)| { - let is_new = let_keyword.is_some(); - Self { - starting_span: let_keyword.unwrap_or_else(|| to_assign.get_span().clone()), - is_new, - to_assign, - statement: Box::new(statement), - } - }, - )(input) - } - - pub fn get_span(&self) -> &S { - &self.starting_span - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn assignable_variable() { - assert_eq!( - AssignableVariable::parse("variable"), - Ok(( - "", - AssignableVariable { - name: "variable", - ty: None - } - )) - ); - - assert_eq!( - AssignableVariable::parse("variable: Length"), - Ok(( - "", - AssignableVariable { - name: "variable", - ty: Some(VariableType::Scalar("Length")), - } - )) - ); - } - - #[test] - fn assignable() { - assert_eq!( - Assignable::parse("variable"), - Ok(( - "", - Assignable::Variable(AssignableVariable { - name: "variable", - ty: None - }) - )) - ); - - assert_eq!( - Assignable::parse("[a, b]"), - Ok(( - "", - Assignable::List( - "[", - vec![ - AssignableVariable { - name: "a", - ty: None - }, - AssignableVariable { - name: "b", - ty: None - } - ] - ) - )) - ); - - assert_eq!( - Assignable::parse("[a: Length, b: Angle]"), - Ok(( - "", - Assignable::List( - "[", - vec![ - AssignableVariable { - name: "a", - ty: Some(VariableType::Scalar("Length")) - }, - AssignableVariable { - name: "b", - ty: Some(VariableType::Scalar("Angle")) - } - ] - ) - )) - ); - } - - #[test] - fn statement_assign() { - assert_eq!( - Assign::parse("a = b"), - Ok(( - "", - Assign { - starting_span: "a", - is_new: false, - to_assign: Assignable::Variable(AssignableVariable { - name: "a", - ty: None, - }), - statement: Box::new(Statement::parse("b").unwrap().1) - } - )) - ); - - assert_eq!( - Assign::parse("a: Length = b"), - Ok(( - "", - Assign { - starting_span: "a", - is_new: false, - to_assign: Assignable::Variable(AssignableVariable { - name: "a", - ty: Some(VariableType::Scalar("Length")), - }), - statement: Box::new(Statement::parse("b").unwrap().1) - } - )) - ); - - assert_eq!( - Assign::parse("a = loop {}"), - Ok(( - "", - Assign { - starting_span: "a", - is_new: false, - to_assign: Assignable::Variable(AssignableVariable { - name: "a", - ty: None, - }), - statement: Box::new(Statement::parse("loop {}").unwrap().1), - } - )) - ); - - assert_eq!( - Assign::parse("let a = b"), - Ok(( - "", - Assign { - starting_span: "let", - is_new: true, - to_assign: Assignable::Variable(AssignableVariable { - name: "a", - ty: None, - }), - statement: Box::new(Statement::parse("b").unwrap().1) - } - )) - ); - } -} diff --git a/src/script/parsing/statements/expression/arithmetic.rs b/src/script/parsing/statements/expression/arithmetic.rs deleted file mode 100644 index 9bebe3f..0000000 --- a/src/script/parsing/statements/expression/arithmetic.rs +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - branch::alt, - character::complete::char as nom_char, - combinator::{cut, flat_map, map, value}, - error::context, - multi::fold_many0, - sequence::{delimited, pair}, -}; - -use crate::script::{ - parsing::{space0, VResult}, - Span, -}; - -use super::{term::Term, Trailer}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub enum ArithmeticExpression { - Addition(Box, Term), - Subtraction(Box, Term), - Term(Term), -} - -impl ArithmeticExpression { - pub fn parser( - trailer_parser: fn(S) -> VResult>, - ) -> impl FnMut(S) -> VResult { - #[derive(Clone)] - enum Operator { - Addition, - Subtraction, - } - - alt(( - flat_map( - move |input| Term::parser(trailer_parser, input), - move |first_term| { - fold_many0( - pair( - delimited( - space0, - alt(( - value(Operator::Addition, nom_char('+')), - value(Operator::Subtraction, nom_char('-')), - )), - space0, - ), - context( - "Expected right side term", - cut(move |input| Term::parser(trailer_parser, input)), - ), - ), - move || ArithmeticExpression::Term(first_term.clone()), - |expression, (operator, factor)| match operator { - Operator::Addition => Self::Addition(Box::new(expression), factor), - Operator::Subtraction => { - Self::Subtraction(Box::new(expression), factor) - } - }, - ) - }, - ), - map(move |input| Term::parser(trailer_parser, input), Self::Term), - )) - } - - pub fn get_span(&self) -> &S { - match self { - ArithmeticExpression::Addition(spanable, _) => spanable.get_span(), - ArithmeticExpression::Subtraction(spanable, _) => spanable.get_span(), - ArithmeticExpression::Term(spanable) => spanable.get_span(), - } - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::statements::expression::{factor::Factor, trailer::Trailer}; - - use super::*; - - #[test] - fn arithmetic_expression() { - // Addition(Box, Term), - assert_eq!( - ArithmeticExpression::parser(Trailer::parse)("a + b"), - Ok(( - "", - ArithmeticExpression::Addition( - Box::new(ArithmeticExpression::Term(Term::Trailer(Trailer::None( - Factor::Variable("a") - )))), - Term::Trailer(Trailer::None(Factor::Variable("b"))) - ) - )) - ); - // Subtraction(Box, Term), - assert_eq!( - ArithmeticExpression::parser(Trailer::parse)("a - b"), - Ok(( - "", - ArithmeticExpression::Subtraction( - Box::new(ArithmeticExpression::Term(Term::Trailer(Trailer::None( - Factor::Variable("a") - )))), - Term::Trailer(Trailer::None(Factor::Variable("b"))) - ) - )) - ); - // Term(Term), - assert_eq!( - ArithmeticExpression::parser(Trailer::parse)("a"), - Ok(( - "", - ArithmeticExpression::Term(Term::Trailer(Trailer::None(Factor::Variable("a")))) - )) - ); - - // Order of operation tests. - assert_eq!( - ArithmeticExpression::parser(Trailer::parse)("+a + b"), - Ok(( - "", - ArithmeticExpression::Addition( - Box::new(ArithmeticExpression::Term(Term::Trailer(Trailer::None( - Factor::UnaryPlus(Box::new(Factor::Variable("a"))) - )))), - Term::Trailer(Trailer::None(Factor::Variable("b"))) - ) - )) - ); - } -} diff --git a/src/script/parsing/statements/expression/comparison.rs b/src/script/parsing/statements/expression/comparison.rs deleted file mode 100644 index 0738c20..0000000 --- a/src/script/parsing/statements/expression/comparison.rs +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - branch::alt, - bytes::complete::tag, - character::complete::char as nom_char, - combinator::{cut, flat_map, map, value}, - error::context, - multi::fold_many0, - sequence::{delimited, pair}, -}; - -use crate::script::{ - parsing::{space0, VResult}, - Span, -}; - -use super::{arithmetic::ArithmeticExpression, Trailer}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub enum Comparison { - LessThan(Box, ArithmeticExpression), - LessThanEqual(Box, ArithmeticExpression), - Equal(Box, ArithmeticExpression), - GreaterThanEqual(Box, ArithmeticExpression), - GreaterThan(Box, ArithmeticExpression), - None(ArithmeticExpression), -} - -impl Comparison { - pub(super) fn parser( - trailer_parser: fn(S) -> VResult>, - input: S, - ) -> VResult { - #[derive(Clone)] - enum Operator { - LessThan, - LessThanEqual, - Equal, - GreaterThanEqual, - GreaterThan, - } - - alt(( - flat_map( - ArithmeticExpression::parser(trailer_parser), - move |first_expression| { - fold_many0( - pair( - delimited( - space0, - alt(( - value(Operator::LessThanEqual, tag("<=")), - value(Operator::Equal, tag("==")), - value(Operator::GreaterThanEqual, tag(">=")), - value(Operator::LessThan, nom_char('<')), - value(Operator::GreaterThan, nom_char('>')), - )), - space0, - ), - context( - "Expected right side arithmetic expression.", - cut(ArithmeticExpression::parser(trailer_parser)), - ), - ), - move || Comparison::None(first_expression.clone()), - |comparison, (operator, expression)| match operator { - Operator::LessThan => Self::LessThan(Box::new(comparison), expression), - Operator::LessThanEqual => { - Self::LessThanEqual(Box::new(comparison), expression) - } - Operator::Equal => Self::Equal(Box::new(comparison), expression), - Operator::GreaterThanEqual => { - Self::GreaterThanEqual(Box::new(comparison), expression) - } - Operator::GreaterThan => { - Self::GreaterThan(Box::new(comparison), expression) - } - }, - ) - }, - ), - map(ArithmeticExpression::parser(trailer_parser), Self::None), - ))(input) - } - - pub fn get_span(&self) -> &S { - match self { - Comparison::LessThan(spanable, _) => spanable.get_span(), - Comparison::LessThanEqual(spanable, _) => spanable.get_span(), - Comparison::Equal(spanable, _) => spanable.get_span(), - Comparison::GreaterThanEqual(spanable, _) => spanable.get_span(), - Comparison::GreaterThan(spanable, _) => spanable.get_span(), - Comparison::None(spanable) => spanable.get_span(), - } - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::statements::expression::{ - factor::Factor, term::Term, trailer::Trailer, - }; - - use super::*; - - #[test] - fn comparison() { - assert_eq!( - Comparison::parser(Trailer::parse, "a"), - Ok(( - "", - Comparison::None(ArithmeticExpression::Term(Term::Trailer(Trailer::None( - Factor::Variable("a") - )))) - )) - ); - - assert_eq!( - Comparison::parser(Trailer::parse, "a < b"), - Ok(( - "", - Comparison::LessThan( - Box::new(Comparison::None(ArithmeticExpression::Term(Term::Trailer( - Trailer::None(Factor::Variable("a")) - )))), - ArithmeticExpression::Term(Term::Trailer(Trailer::None(Factor::Variable("b")))), - ) - )) - ); - - assert_eq!( - Comparison::parser(Trailer::parse, "a <= b"), - Ok(( - "", - Comparison::LessThanEqual( - Box::new(Comparison::None(ArithmeticExpression::Term(Term::Trailer( - Trailer::None(Factor::Variable("a")) - )))), - ArithmeticExpression::Term(Term::Trailer(Trailer::None(Factor::Variable("b")))), - ) - )) - ); - - assert_eq!( - Comparison::parser(Trailer::parse, "a == b"), - Ok(( - "", - Comparison::Equal( - Box::new(Comparison::None(ArithmeticExpression::Term(Term::Trailer( - Trailer::None(Factor::Variable("a")) - )))), - ArithmeticExpression::Term(Term::Trailer(Trailer::None(Factor::Variable("b")))), - ) - )) - ); - - assert_eq!( - Comparison::parser(Trailer::parse, "a >= b"), - Ok(( - "", - Comparison::GreaterThanEqual( - Box::new(Comparison::None(ArithmeticExpression::Term(Term::Trailer( - Trailer::None(Factor::Variable("a")) - )))), - ArithmeticExpression::Term(Term::Trailer(Trailer::None(Factor::Variable("b")))), - ) - )) - ); - - assert_eq!( - Comparison::parser(Trailer::parse, "a > b"), - Ok(( - "", - Comparison::GreaterThan( - Box::new(Comparison::None(ArithmeticExpression::Term(Term::Trailer( - Trailer::None(Factor::Variable("a")) - )))), - ArithmeticExpression::Term(Term::Trailer(Trailer::None(Factor::Variable("b")))), - ) - )) - ); - } -} diff --git a/src/script/parsing/statements/expression/define_function.rs b/src/script/parsing/statements/expression/define_function.rs deleted file mode 100644 index e69de29..0000000 diff --git a/src/script/parsing/statements/expression/factor.rs b/src/script/parsing/statements/expression/factor.rs deleted file mode 100644 index be297ff..0000000 --- a/src/script/parsing/statements/expression/factor.rs +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - branch::alt, - character::complete::char as nom_char, - combinator::map, - sequence::{delimited, pair, preceded}, -}; - -use crate::script::{ - parsing::{parse_name, space0, Litteral, VResult}, - Span, -}; - -use super::Expression; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub enum Factor { - Litteral(Litteral), - Variable(S), - Parenthesis(Box>), - UnaryPlus(Box>), - UnaryMinus(Box>), - UnaryLogicalNot(Box>), -} - -impl Factor { - pub fn parse(input: S) -> VResult { - alt(( - map( - preceded(pair(nom_char('+'), space0), Self::parse), - |factor| Self::UnaryPlus(Box::new(factor)), - ), - map( - preceded(pair(nom_char('-'), space0), Self::parse), - |factor| Self::UnaryMinus(Box::new(factor)), - ), - map( - preceded(pair(nom_char('!'), space0), Self::parse), - |factor| Self::UnaryLogicalNot(Box::new(factor)), - ), - map(Litteral::parse, Self::Litteral), - map( - delimited(nom_char('('), Expression::parse, nom_char(')')), - |expression| Self::Parenthesis(Box::new(expression)), - ), - map(parse_name, Self::Variable), - ))(input) - } - - pub fn get_span(&self) -> &S { - match self { - Factor::Litteral(spanable) => spanable.get_span(), - Factor::Variable(spanable) => spanable, - Factor::Parenthesis(spanable) => spanable.get_span(), - Factor::UnaryPlus(spanable) => spanable.get_span(), - Factor::UnaryMinus(spanable) => spanable.get_span(), - Factor::UnaryLogicalNot(spanable) => spanable.get_span(), - } - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::{ - statements::expression::{ - arithmetic::ArithmeticExpression, comparison::Comparison, term::Term, trailer::Trailer, - }, - Number, Scalar, - }; - - use super::*; - - #[test] - fn factor() { - // Const(Litteral), - assert_eq!( - Factor::parse("22"), - Ok(( - "", - Factor::Litteral(Litteral::Scalar(Scalar { - number: Number { - integer: Some("22"), - dot: None, - fractional: None - }, - ty: "" - })) - )) - ); - // Variable(S), - assert_eq!( - Factor::parse("my_variable"), - Ok(("", Factor::Variable("my_variable"))) - ); - // Parenthesis(Box>), - assert_eq!( - Factor::parse("(my_variable)"), - Ok(( - "", - Factor::Parenthesis(Box::new(Expression::Buffer(Comparison::None( - ArithmeticExpression::Term(Term::Trailer(Trailer::None(Factor::Variable( - "my_variable" - )))) - )))) - )) - ); - // UnaryPlus(Term), - assert_eq!( - Factor::parse("+my_variable"), - Ok(( - "", - Factor::UnaryPlus(Box::new(Factor::Variable("my_variable"))) - )) - ); - // UnaryMinus(Term), - assert_eq!( - Factor::parse("-my_variable"), - Ok(( - "", - Factor::UnaryMinus(Box::new(Factor::Variable("my_variable"))) - )) - ); - // UnaryLogicalNot(Term), - assert_eq!( - Factor::parse("!my_variable"), - Ok(( - "", - Factor::UnaryLogicalNot(Box::new(Factor::Variable("my_variable"))) - )) - ); - } -} diff --git a/src/script/parsing/statements/expression/mod.rs b/src/script/parsing/statements/expression/mod.rs deleted file mode 100644 index 4aad8e8..0000000 --- a/src/script/parsing/statements/expression/mod.rs +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - branch::alt, - bytes::complete::tag, - combinator::{cut, flat_map, map, value}, - error::context, - multi::fold_many0, - sequence::{delimited, pair}, -}; - -use crate::script::{ - parsing::{space0, VResult}, - Span, -}; - -pub use self::{ - arithmetic::ArithmeticExpression, comparison::Comparison, factor::Factor, term::Term, - trailer::Trailer, -}; - -mod arithmetic; -mod comparison; -mod factor; -mod term; -mod trailer; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub enum Expression { - And(Box, Comparison), - Or(Box, Comparison), - Buffer(Comparison), -} - -impl Expression { - pub fn parse(input: S) -> VResult { - Self::parse_impl(Trailer::parse, input) - } - - pub fn parse_no_struct_initalization(input: S) -> VResult { - Self::parse_impl(Trailer::parse_no_struct_initalization, input) - } - - fn parse_impl(trailer_parser: fn(S) -> VResult>, input: S) -> VResult { - #[derive(Clone)] - enum Operator { - And, - Or, - } - - alt(( - flat_map( - |input| Comparison::parser(trailer_parser, input), - move |first_comp| { - fold_many0( - pair( - delimited( - space0, - alt(( - value(Operator::And, tag("&&")), - value(Operator::Or, tag("||")), - )), - space0, - ), - context( - "Expected right side comparison or arithmetic expression", - cut(move |input| Comparison::parser(trailer_parser, input)), - ), - ), - move || Self::Buffer(first_comp.clone()), - |expression, (operator, comparison)| match operator { - Operator::And => Self::And(Box::new(expression), comparison), - Operator::Or => Self::Or(Box::new(expression), comparison), - }, - ) - }, - ), - map( - |input| Comparison::parser(trailer_parser, input), - Self::Buffer, - ), - ))(input) - } - - pub fn get_span(&self) -> &S { - match self { - Expression::And(spanable, _) => spanable.get_span(), - Expression::Or(spanable, _) => spanable.get_span(), - Expression::Buffer(spanable) => spanable.get_span(), - } - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::statements::expression::{ - arithmetic::ArithmeticExpression, factor::Factor, term::Term, trailer::Trailer, - }; - - use super::*; - - #[test] - fn expression() { - assert_eq!( - Expression::parse("a"), - Ok(( - "", - Expression::Buffer(Comparison::None(ArithmeticExpression::Term(Term::Trailer( - Trailer::None(Factor::Variable("a")) - ))),) - )) - ); - - assert_eq!( - Expression::parse("a || b"), - Ok(( - "", - Expression::Or( - Box::new(Expression::Buffer(Comparison::None( - ArithmeticExpression::Term(Term::Trailer(Trailer::None(Factor::Variable( - "a" - )))) - ))), - Comparison::None(ArithmeticExpression::Term(Term::Trailer(Trailer::None( - Factor::Variable("b") - )))) - ) - )) - ); - - assert_eq!( - Expression::parse("a && b"), - Ok(( - "", - Expression::And( - Box::new(Expression::Buffer(Comparison::None( - ArithmeticExpression::Term(Term::Trailer(Trailer::None(Factor::Variable( - "a" - )))) - ))), - Comparison::None(ArithmeticExpression::Term(Term::Trailer(Trailer::None( - Factor::Variable("b") - )))) - ) - )) - ); - } -} diff --git a/src/script/parsing/statements/expression/term.rs b/src/script/parsing/statements/expression/term.rs deleted file mode 100644 index 5db8db3..0000000 --- a/src/script/parsing/statements/expression/term.rs +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - branch::alt, - character::complete::char as nom_char, - combinator::{cut, flat_map, map, value}, - error::context, - multi::fold_many0, - sequence::{delimited, pair}, -}; - -use crate::script::{ - parsing::{space0, Range, VResult}, - Span, -}; - -use super::trailer::Trailer; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub enum Term { - Multiply(Box, Trailer), - Divide(Box, Trailer), - Range(Range), - Trailer(Trailer), -} - -impl Term { - pub fn parser(trailer_parser: fn(S) -> VResult>, input: S) -> VResult { - #[derive(Clone)] - enum Operator { - Multiplication, - Division, - } - - alt(( - map(Range::parse, Self::Range), - flat_map(trailer_parser, move |first_trailer| { - fold_many0( - pair( - delimited( - space0, - alt(( - value(Operator::Multiplication, nom_char('*')), - value(Operator::Division, nom_char('/')), - )), - space0, - ), - context("Expected right side term.", cut(trailer_parser)), - ), - move || Self::Trailer(first_trailer.clone()), - |term, (operator, accessor)| match operator { - Operator::Multiplication => Self::Multiply(Box::new(term), accessor), - Operator::Division => Self::Divide(Box::new(term), accessor), - }, - ) - }), - map(trailer_parser, Self::Trailer), - ))(input) - } - - pub fn get_span(&self) -> &S { - match self { - Term::Multiply(spanable, _) => spanable.get_span(), - Term::Divide(spanable, _) => spanable.get_span(), - Term::Range(spannable) => spannable.get_span(), - Term::Trailer(spanable) => spanable.get_span(), - } - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::statements::expression::factor::Factor; - - use super::*; - - #[test] - fn term() { - // Multiply(Box, Factor), - assert_eq!( - Term::parser(Trailer::parse, "x * y"), - Ok(( - "", - Term::Multiply( - Box::new(Term::Trailer(Trailer::None(Factor::Variable("x")))), - Trailer::None(Factor::Variable("y")) - ) - )) - ); - // Divide(Box, Factor), - assert_eq!( - Term::parser(Trailer::parse, "x / y"), - Ok(( - "", - Term::Divide( - Box::new(Term::Trailer(Trailer::None(Factor::Variable("x")))), - Trailer::None(Factor::Variable("y")) - ) - )) - ); - // Factor(Factor), - assert_eq!( - Term::parser(Trailer::parse, "x"), - Ok(("", Term::Trailer(Trailer::None(Factor::Variable("x"))))) - ); - - // Range(Range), - assert_eq!( - Term::parser(Trailer::parse, "a..b"), - Ok(( - "", - Term::Range(Range { - comparison_operator: "..", - upper_bound: Some(Trailer::None(Factor::Variable("b"))), - lower_bound: Some(Trailer::None(Factor::Variable("a"))), - upper_bound_is_inclusive: false, - }) - )) - ); - assert_eq!( - Term::parser(Trailer::parse, ".."), - Ok(( - "", - Term::Range(Range { - comparison_operator: "..", - upper_bound: None, - lower_bound: None, - upper_bound_is_inclusive: false, - }) - )) - ); - } -} diff --git a/src/script/parsing/statements/expression/trailer.rs b/src/script/parsing/statements/expression/trailer.rs deleted file mode 100644 index 7eab8a0..0000000 --- a/src/script/parsing/statements/expression/trailer.rs +++ /dev/null @@ -1,413 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - branch::alt, - character::complete::char as nom_char, - combinator::{flat_map, map}, - multi::{fold_many0, separated_list0}, - sequence::{delimited, pair, preceded}, -}; - -use crate::script::{ - parsing::{parse_name, space0, StructInitialization, VResult}, - Span, -}; - -use super::{factor::Factor, Expression}; - -#[derive(Clone)] -enum Operation { - Attribute(S), - Call(Vec>), - MethodCall(S, Vec>), - StructInitalization(StructInitialization), - Index(Expression), -} - -#[derive(Debug, Eq, PartialEq, Clone)] -pub enum Trailer { - None(Factor), - Attribute(Box>, S), - Call(Box>, Vec>), - MethodCall(Box>, S, Vec>), - StructInitalization(Box>, StructInitialization), - Index(Box>, Box>), -} - -impl Trailer { - fn parse_method_call(input: S) -> VResult> { - map( - pair( - preceded(pair(nom_char('.'), space0), parse_name), - preceded( - space0, - delimited( - nom_char('('), - separated_list0( - nom_char(','), - delimited(space0, Expression::parse, space0), - ), - nom_char(')'), - ), - ), - ), - |(attribute, arguments)| Operation::MethodCall(attribute, arguments), - )(input) - } - - fn parse_attribute_access(input: S) -> VResult> { - map( - preceded(pair(nom_char('.'), space0), parse_name), - Operation::Attribute, - )(input) - } - - fn parse_struct_initalization(input: S) -> VResult> { - map(StructInitialization::parse, Operation::StructInitalization)(input) - } - - fn parse_call(input: S) -> VResult> { - map( - delimited( - nom_char('('), - separated_list0(nom_char(','), delimited(space0, Expression::parse, space0)), - nom_char(')'), - ), - Operation::Call, - )(input) - } - - fn parse_index(input: S) -> VResult> { - map( - delimited( - nom_char('['), - delimited(space0, Expression::parse, space0), - nom_char(']'), - ), - Operation::Index, - )(input) - } - - fn unpack_operation(trailer: Trailer, operation: Operation) -> Self { - match operation { - Operation::Attribute(member_name) => Self::Attribute(Box::new(trailer), member_name), - Operation::Call(arguments) => Self::Call(Box::new(trailer), arguments), - Operation::MethodCall(member_name, arguments) => { - Self::MethodCall(Box::new(trailer), member_name, arguments) - } - Operation::StructInitalization(initalization) => { - Self::StructInitalization(Box::new(trailer), initalization) - } - Operation::Index(indexer) => Self::Index(Box::new(trailer), Box::new(indexer)), - } - } - - pub fn parse(input: S) -> VResult { - alt(( - flat_map(Factor::parse, |first_factor| { - fold_many0( - delimited( - space0, - alt(( - Self::parse_method_call, - Self::parse_attribute_access, - Self::parse_struct_initalization, - Self::parse_call, - Self::parse_index, - )), - space0, - ), - move || Self::None(first_factor.clone()), - Self::unpack_operation, - ) - }), - map(Factor::parse, Self::None), - ))(input) - } - - pub fn parse_no_struct_initalization(input: S) -> VResult { - alt(( - flat_map(Factor::parse, |first_factor| { - fold_many0( - delimited( - space0, - alt(( - Self::parse_method_call, - Self::parse_attribute_access, - Self::parse_call, - Self::parse_index, - )), - space0, - ), - move || Self::None(first_factor.clone()), - Self::unpack_operation, - ) - }), - map(Factor::parse, Self::None), - ))(input) - } - - pub fn get_span(&self) -> &S { - match self { - Trailer::None(spanable) => spanable.get_span(), - Trailer::Attribute(spanable, _) => spanable.get_span(), - Trailer::Call(spanable, _) => spanable.get_span(), - Trailer::Index(spanable, _) => spanable.get_span(), - Trailer::StructInitalization(spanable, _) => spanable.get_span(), - Trailer::MethodCall(spanable, _, _) => spanable.get_span(), - } - } -} - -#[cfg(test)] -mod test { - use crate::script::parsing::Litteral; - - use super::*; - - #[test] - fn trailer_call() { - assert_eq!( - Trailer::parse("my_function()"), - Ok(( - "", - Trailer::Call( - Box::new(Trailer::None(Factor::Variable("my_function"))), - vec![] - ) - )) - ); - - assert_eq!( - Trailer::parse("my_function(a)"), - Ok(( - "", - Trailer::Call( - Box::new(Trailer::None(Factor::Variable("my_function"))), - vec![Expression::parse("a").unwrap().1] - ) - )) - ); - - assert_eq!( - Trailer::parse("my_function(a, b)"), - Ok(( - "", - Trailer::Call( - Box::new(Trailer::None(Factor::Variable("my_function"))), - vec![ - Expression::parse("a").unwrap().1, - Expression::parse("b").unwrap().1 - ] - ) - )) - ); - } - - #[test] - fn trailer_attribute() { - assert_eq!( - Trailer::parse("variable"), - Ok(("", Trailer::None(Factor::Variable("variable")))) - ); - - assert_eq!( - Trailer::parse("variable.access"), - Ok(( - "", - Trailer::Attribute( - Box::new(Trailer::None(Factor::Variable("variable"))), - "access" - ) - )) - ); - - assert_eq!( - Trailer::parse("variable.access.sub_access"), - Ok(( - "", - Trailer::Attribute( - Box::new(Trailer::Attribute( - Box::new(Trailer::None(Factor::Variable("variable"))), - "access" - )), - "sub_access" - ) - )) - ); - } - - #[test] - fn trailer_index() { - assert_eq!( - Trailer::parse("x[y]"), - Ok(( - "", - Trailer::Index( - Box::new(Trailer::None(Factor::Variable("x"))), - Box::new(Expression::parse("y").unwrap().1) - ) - )) - ); - - assert_eq!( - Trailer::parse("x[y][z]"), - Ok(( - "", - Trailer::Index( - Box::new(Trailer::Index( - Box::new(Trailer::None(Factor::Variable("x"))), - Box::new(Expression::parse("y").unwrap().1) - )), - Box::new(Expression::parse("z").unwrap().1) - ) - )) - ); - } - - #[test] - fn trailer_method_call() { - assert_eq!( - Trailer::parse("test.sub_call()"), - Ok(( - "", - Trailer::MethodCall( - Box::new(Trailer::None(Factor::Variable("test"))), - "sub_call", - vec![] - ), - )) - ); - - assert_eq!( - Trailer::parse("test.sub_call(a, b)"), - Ok(( - "", - Trailer::MethodCall( - Box::new(Trailer::None(Factor::Variable("test"))), - "sub_call", - vec![ - Expression::parse("a").unwrap().1, - Expression::parse("b").unwrap().1 - ] - ), - )) - ); - - assert_eq!( - Trailer::parse("test.sub_call().returned()"), - Ok(( - "", - Trailer::MethodCall( - Box::new(Trailer::MethodCall( - Box::new(Trailer::None(Factor::Variable("test"))), - "sub_call", - vec![] - )), - "returned", - vec![] - ) - )) - ); - } - - #[test] - fn trailer_struct_initalization() { - assert_eq!( - Trailer::parse("MyStruct { ..default }"), - Ok(( - "", - Trailer::StructInitalization( - Box::new(Trailer::None(Factor::Variable("MyStruct"))), - StructInitialization { - starting_span: "{", - assignments: vec![], - inheritance: Some(Box::new(Trailer::None(Factor::Litteral( - Litteral::Default("default") - )))) - } - ) - )) - ); - // StructInitalization(StructInitalization), - assert_eq!( - Trailer::parse("MyStruct {}"), - Ok(( - "", - Trailer::StructInitalization( - Box::new(Trailer::None(Factor::Variable("MyStruct"))), - StructInitialization { - starting_span: "{", - assignments: vec![], - inheritance: None - } - ) - )) - ); - assert_eq!( - Trailer::parse("MyStruct { a = b, }"), - Ok(( - "", - Trailer::StructInitalization( - Box::new(Trailer::None(Factor::Variable("MyStruct"))), - StructInitialization { - starting_span: "{", - assignments: vec![("a", Expression::parse("b").unwrap().1),], - inheritance: None - } - ) - )) - ); - assert_eq!( - Trailer::parse("MyStruct { a = b, c = d }"), - Ok(( - "", - Trailer::StructInitalization( - Box::new(Trailer::None(Factor::Variable("MyStruct"))), - StructInitialization { - starting_span: "{", - assignments: vec![ - ("a", Expression::parse("b").unwrap().1), - ("c", Expression::parse("d").unwrap().1) - ], - inheritance: None - } - ) - )) - ); - assert_eq!( - Trailer::parse("MyStruct { a = b, c = d, ..default }"), - Ok(( - "", - Trailer::StructInitalization( - Box::new(Trailer::None(Factor::Variable("MyStruct"))), - StructInitialization { - starting_span: "{", - assignments: vec![ - ("a", Expression::parse("b").unwrap().1), - ("c", Expression::parse("d").unwrap().1) - ], - inheritance: Some(Box::new(Trailer::None(Factor::Litteral( - Litteral::Default("default") - )))) - } - ) - )) - ); - } -} diff --git a/src/script/parsing/statements/mod.rs b/src/script/parsing/statements/mod.rs deleted file mode 100644 index d3c3798..0000000 --- a/src/script/parsing/statements/mod.rs +++ /dev/null @@ -1,259 +0,0 @@ -use std::rc::Rc; - -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{branch::alt, combinator::map, error::context}; - -pub use self::{ - assign::{Assign, Assignable, AssignableVariable}, - expression::{ArithmeticExpression, Comparison, Expression, Factor, Term, Trailer}, - s_break::Break, - s_continue::Continue, - s_for::For, - s_if::{Else, If}, - s_loop::Loop, - s_match::Match, - s_return::Return, - s_while::While, -}; - -use super::{Function, Span, StructDefinition, VResult}; - -mod assign; -mod expression; -mod s_break; -mod s_continue; -mod s_for; -mod s_if; -mod s_loop; -mod s_match; -mod s_return; -mod s_while; - -#[derive(Debug, Eq, PartialEq)] -pub enum Statement { - Expression(Expression), - Assign(Assign), - Return(Return), - If(If), - Match(Match), - For(For), - While(While), - Loop(Loop), - Break(Break), - Continue(Continue), - DefineFunction(Rc>), - DefineStruct(Rc>), -} - -impl Statement { - pub fn parse(input: S) -> VResult { - context( - "Failed to parse statement", - alt(( - map(Assign::parse, Self::Assign), - map(Return::parse, Self::Return), - map(If::parse, Self::If), - map(Match::parse, Self::Match), - map(For::parse, Self::For), - map(While::parse, Self::While), - map(Loop::parse, Self::Loop), - map(Break::parse, Self::Break), - map(Continue::parse, Self::Continue), - map(Function::parse_as_function, |function| { - Self::DefineFunction(Rc::new(function)) - }), - map(StructDefinition::parse, |structure| { - Self::DefineStruct(Rc::new(structure)) - }), - map(Expression::parse, Self::Expression), - )), - )(input) - } - - pub fn get_span(&self) -> &S { - match self { - Statement::Expression(spanable) => spanable.get_span(), - Statement::Assign(spanable) => spanable.get_span(), - Statement::Return(spanable) => spanable.get_span(), - Statement::If(spanable) => spanable.get_span(), - Statement::Match(spanable) => spanable.get_span(), - Statement::For(spanable) => spanable.get_span(), - Statement::While(spanable) => spanable.get_span(), - Statement::Loop(spanable) => spanable.get_span(), - Statement::Break(spanable) => spanable.get_span(), - Statement::Continue(spanable) => spanable.get_span(), - Statement::DefineFunction(spanable) => spanable.get_span(), - Statement::DefineStruct(spanable) => &spanable.name, - } - } -} - -#[cfg(test)] -mod test { - use std::rc::Rc; - - use crate::script::parsing::{ - blocks::CallableBlock, - statements::assign::{Assignable, AssignableVariable}, - Block, FunctionSignature, NamedBlock, VariableType, - }; - - use super::*; - - #[test] - fn statement() { - assert_eq!( - Statement::parse("a = b"), - Ok(( - "", - Statement::Assign(Assign { - starting_span: "a", - is_new: false, - to_assign: Assignable::Variable(AssignableVariable { - name: "a", - ty: None, - }), - statement: Box::new(Statement::parse("b").unwrap().1) - }) - )) - ); - - assert_eq!( - Statement::parse("return"), - Ok(( - "", - Statement::Return(Return { - starting_span: "return", - expression: None - }) - )) - ); - - assert_eq!( - Statement::parse("match a {}"), - Ok(( - "", - Statement::Match(Match { - starting_span: "match", - expression: Expression::parse("a").unwrap().1, - branches: vec![] - }) - )) - ); - - assert_eq!( - Statement::parse("for a in b {}"), - Ok(( - "", - Statement::For(For { - starting_span: "for", - name: None, - variable_assignment: Assignable::parse("a").unwrap().1, - iterator_expression: Expression::parse("b").unwrap().1, - block: Block { statements: vec![] } - }) - )) - ); - - assert_eq!( - Statement::parse("while a {}"), - Ok(( - "", - Statement::While(While { - starting_span: "while", - name: None, - expression: Expression::parse("a").unwrap().1, - block: Block { statements: vec![] } - }) - )) - ); - - assert_eq!( - Statement::parse("loop {}"), - Ok(( - "", - Statement::Loop(Loop { - starting_span: "loop", - name: None, - block: Block { statements: vec![] } - }) - )) - ); - - assert_eq!( - Statement::parse("break"), - Ok(( - "", - Statement::Break(Break { - starting_span: "break", - loop_name: None, - expression: None - }) - )) - ); - - assert_eq!( - Statement::parse("continue"), - Ok(( - "", - Statement::Continue(Continue { - starting_span: "continue", - - loop_name: None - }) - )) - ); - - assert_eq!( - Statement::parse("function my_function() -> Number {}"), - Ok(( - "", - Statement::DefineFunction( - Function { - starting_span: "function", - named_block: NamedBlock { - name: "my_function", - callable: CallableBlock { - parameter_span: "(", - parameters: vec![], - block: Block { statements: vec![] } - } - }, - signature: FunctionSignature::Function { - return_type: Box::new(VariableType::Scalar("Number")), - arguments: vec![] - } - } - .into() - ) - )) - ); - - assert_eq!( - Statement::parse("struct MyStruct {}"), - Ok(( - "", - Statement::DefineStruct(Rc::new(StructDefinition { - name: "MyStruct", - members: vec![] - })) - )) - ); - } -} diff --git a/src/script/parsing/statements/s_break.rs b/src/script/parsing/statements/s_break.rs deleted file mode 100644 index e39bb6a..0000000 --- a/src/script/parsing/statements/s_break.rs +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - character::complete::char as nom_char, - combinator::{map, opt}, - sequence::{pair, preceded}, -}; - -use crate::script::{ - parsing::{parse_name, space0, space1, take_keyword, Expression, VResult}, - Span, -}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub struct Break { - pub starting_span: S, - pub loop_name: Option, - pub expression: Option>, -} - -impl Break { - pub fn parse(input: S) -> VResult { - map( - pair( - take_keyword("break"), - pair( - opt(preceded(pair(space0, nom_char('\'')), parse_name)), - opt(preceded(space1, Expression::parse)), - ), - ), - |(starting_span, (loop_name, expression))| Break { - starting_span, - loop_name, - expression, - }, - )(input) - } - - pub fn get_span(&self) -> &S { - &self.starting_span - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn statement_break() { - assert_eq!( - Break::parse("break"), - Ok(( - "", - Break { - starting_span: "break", - loop_name: None, - expression: None - } - )) - ); - - assert_eq!( - Break::parse("break a"), - Ok(( - "", - Break { - starting_span: "break", - loop_name: None, - expression: Some(Expression::parse("a").unwrap().1) - } - )) - ); - - assert_eq!( - Break::parse("break 'my_loop"), - Ok(( - "", - Break { - starting_span: "break", - loop_name: Some("my_loop"), - expression: None - } - )) - ); - - assert_eq!( - Break::parse("break 'my_loop a"), - Ok(( - "", - Break { - starting_span: "break", - loop_name: Some("my_loop"), - expression: Some(Expression::parse("a").unwrap().1) - } - )) - ); - } -} diff --git a/src/script/parsing/statements/s_continue.rs b/src/script/parsing/statements/s_continue.rs deleted file mode 100644 index a765be3..0000000 --- a/src/script/parsing/statements/s_continue.rs +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - character::complete::char as nom_char, - combinator::{map, opt}, - sequence::{pair, preceded}, -}; - -use crate::script::{ - parsing::{parse_name, space0, take_keyword, VResult}, - Span, -}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub struct Continue { - pub starting_span: S, - pub loop_name: Option, -} - -impl Continue { - pub fn parse(input: S) -> VResult { - map( - pair( - take_keyword("continue"), - opt(preceded(pair(space0, nom_char('\'')), parse_name)), - ), - |(starting_span, loop_name)| Continue { - starting_span, - loop_name, - }, - )(input) - } - - pub fn get_span(&self) -> &S { - &self.starting_span - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn statement_continue() { - assert_eq!( - Continue::parse("continue"), - Ok(( - "", - Continue { - starting_span: "continue", - - loop_name: None - } - )) - ); - assert_eq!( - Continue::parse("continue 'my_loop"), - Ok(( - "", - Continue { - starting_span: "continue", - loop_name: Some("my_loop") - } - )) - ); - } -} diff --git a/src/script/parsing/statements/s_for.rs b/src/script/parsing/statements/s_for.rs deleted file mode 100644 index 1f1f0b6..0000000 --- a/src/script/parsing/statements/s_for.rs +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - character::complete::char as nom_char, - combinator::{cut, map, opt}, - error::context, - sequence::{delimited, pair, tuple}, -}; - -use crate::script::{ - parsing::{parse_name, space0, take_keyword, Block, Expression, VResult}, - Span, -}; - -use super::assign::Assignable; - -#[derive(Debug, Eq, PartialEq)] -pub struct For { - pub starting_span: S, - pub name: Option, - pub variable_assignment: Assignable, - pub iterator_expression: Expression, - pub block: Block, -} - -impl For { - pub fn parse(input: S) -> VResult { - map( - tuple(( - opt(delimited( - nom_char('\''), - parse_name, - pair(nom_char(':'), space0), - )), - pair( - take_keyword("for"), - cut(tuple(( - delimited( - space0, - context("Missing variable assignment", Assignable::parse), - space0, - ), - context("Missing `in` keyword", take_keyword("in")), - delimited( - space0, - context( - "Missing iterator expression", - Expression::parse_no_struct_initalization, - ), - space0, - ), - Block::parse, - ))), - ), - )), - |(name, (starting_span, (variable_assignment, _in, iterator_expression, block)))| { - Self { - starting_span, - name, - variable_assignment, - iterator_expression, - block, - } - }, - )(input) - } - - pub fn get_span(&self) -> &S { - &self.starting_span - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn statement_for() { - assert_eq!( - For::parse("for a in b {}"), - Ok(( - "", - For { - starting_span: "for", - name: None, - variable_assignment: Assignable::parse("a").unwrap().1, - iterator_expression: Expression::parse("b").unwrap().1, - block: Block { statements: vec![] } - } - )) - ); - - assert_eq!( - For::parse("'my_for_loop: for a in b {}"), - Ok(( - "", - For { - starting_span: "for", - name: Some("my_for_loop"), - variable_assignment: Assignable::parse("a").unwrap().1, - iterator_expression: Expression::parse("b").unwrap().1, - block: Block { statements: vec![] } - } - )) - ); - } -} diff --git a/src/script/parsing/statements/s_if.rs b/src/script/parsing/statements/s_if.rs deleted file mode 100644 index 34b7ebf..0000000 --- a/src/script/parsing/statements/s_if.rs +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use nom::{ - branch::alt, - combinator::{cut, map, opt}, - error::context, - sequence::{delimited, pair, preceded, terminated, tuple}, -}; - -use crate::script::{ - parsing::{space0, space1, take_keyword, Block, Expression, VResult}, - Span, -}; - -#[derive(Debug, Eq, PartialEq)] -pub struct If { - pub starting_span: S, - pub expression: Expression, - pub block: Block, - pub else_statement: Option>, -} - -#[derive(Debug, Eq, PartialEq)] -pub enum Else { - Else(Block), - IfElse(Box>), -} - -impl If { - pub fn parse(input: S) -> VResult { - map( - pair( - terminated(take_keyword("if"), space1), - tuple(( - context( - "An expression is required for the if condition", - Expression::parse_no_struct_initalization, - ), - delimited( - space0, - context("Expected a code block for if statement", Block::parse), - space0, - ), - opt(preceded( - take_keyword("else"), - context( - "Expected a code block or another if statement after `else` keyword", - cut(alt(( - map(preceded(space0, Block::parse), |block| Else::Else(block)), - map(preceded(space1, Self::parse), |if_statement| { - Else::IfElse(Box::new(if_statement)) - }), - ))), - ), - )), - )), - ), - |(starting_span, (expression, block, else_statement))| Self { - starting_span, - expression, - block, - else_statement, - }, - )(input) - } - - pub fn get_span(&self) -> &S { - &self.starting_span - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn statement_if() { - assert_eq!( - If::parse("if a {}"), - Ok(( - "", - If { - starting_span: "if", - expression: Expression::parse("a").unwrap().1, - block: Block { statements: vec![] }, - else_statement: None - } - )) - ); - - assert_eq!( - If::parse("if a {} else {}"), - Ok(( - "", - If { - starting_span: "if", - expression: Expression::parse("a").unwrap().1, - block: Block { statements: vec![] }, - else_statement: Some(Else::Else(Block { statements: vec![] })) - } - )) - ); - - assert_eq!( - If::parse("if a {} else if b {}"), - Ok(( - "", - If { - starting_span: "if", - expression: Expression::parse("a").unwrap().1, - block: Block { statements: vec![] }, - else_statement: Some(Else::IfElse(Box::new(If { - starting_span: "if", - expression: Expression::parse("b").unwrap().1, - block: Block { statements: vec![] }, - else_statement: None, - }))) - } - )) - ); - - assert!(If::parse("ifa {}").is_err()); - assert_eq!(If::parse("if a {} elseif").unwrap().0, "elseif"); - assert!(If::parse("if a {} else = 0").is_err()); - assert_eq!(If::parse("if a {} var = 0").unwrap().0, "var = 0"); - } -} diff --git a/src/script/parsing/statements/s_loop.rs b/src/script/parsing/statements/s_loop.rs deleted file mode 100644 index 2ff20a8..0000000 --- a/src/script/parsing/statements/s_loop.rs +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - character::complete::char as nom_char, - combinator::{cut, map, opt}, - error::context, - sequence::{delimited, pair, preceded, tuple}, -}; - -use crate::script::{ - parsing::{parse_name, space0, take_keyword, Block, VResult}, - Span, -}; - -#[derive(Debug, Eq, PartialEq)] -pub struct Loop { - pub starting_span: S, - pub name: Option, - pub block: Block, -} - -impl Loop { - pub fn parse(input: S) -> VResult { - map( - tuple(( - opt(delimited( - nom_char('\''), - parse_name, - pair(nom_char(':'), space0), - )), - pair( - take_keyword("loop"), - cut(preceded( - space0, - context("Loop is missing its block", Block::parse), - )), - ), - )), - |(name, (starting_span, block))| Self { - starting_span, - name, - block, - }, - )(input) - } - - pub fn get_span(&self) -> &S { - &self.starting_span - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn statement_loop() { - assert_eq!( - Loop::parse("loop {}"), - Ok(( - "", - Loop { - starting_span: "loop", - name: None, - block: Block { statements: vec![] } - } - )) - ); - - assert_eq!( - Loop::parse("'my_loop: loop {}"), - Ok(( - "", - Loop { - starting_span: "loop", - name: Some("my_loop"), - block: Block { statements: vec![] } - } - )) - ); - } -} diff --git a/src/script/parsing/statements/s_match.rs b/src/script/parsing/statements/s_match.rs deleted file mode 100644 index 3631600..0000000 --- a/src/script/parsing/statements/s_match.rs +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - branch::alt, - bytes::complete::tag, - character::complete::char as nom_char, - combinator::map, - error::context, - multi::separated_list0, - sequence::{delimited, pair, separated_pair, terminated}, -}; - -use crate::script::{ - parsing::{space0, space1, take_keyword, Block, BlockStatement, Expression, Litteral, VResult}, - Span, -}; - -use super::Statement; - -#[derive(Debug, Eq, PartialEq)] -pub struct Match { - pub starting_span: S, - pub expression: Expression, - pub branches: Vec>, -} - -impl Match { - pub fn parse(input: S) -> VResult { - map( - pair( - terminated(take_keyword("match"), space1), - pair( - Expression::parse_no_struct_initalization, - delimited( - pair(space0, nom_char('{')), - separated_list0( - nom_char(','), - delimited(space0, MatchBranch::parse, space0), - ), - pair(space0, nom_char('}')), - ), - ), - ), - |(starting_span, (expression, branches))| Self { - starting_span, - expression, - branches, - }, - )(input) - } - - pub fn get_span(&self) -> &S { - &self.starting_span - } -} - -#[derive(Debug, Eq, PartialEq)] -pub struct MatchBranch { - pub litteral: Litteral, - pub block: Block, -} - -impl MatchBranch { - fn parse(input: S) -> VResult { - map( - separated_pair( - context("Match branch must start with a litteral", Litteral::parse), - delimited( - space0, - context("Match branch missing `=>` token", tag("=>")), - space0, - ), - alt(( - Block::parse, - map(Expression::parse, |expression| Block { - statements: vec![BlockStatement::Open(Statement::Expression(expression))], - }), - )), - ), - |(litteral, block)| Self { litteral, block }, - )(input) - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn match_branch() { - assert_eq!( - MatchBranch::parse("1 => {}"), - Ok(( - "", - MatchBranch { - litteral: Litteral::parse("1").unwrap().1, - block: Block { statements: vec![] } - } - )) - ); - - assert_eq!( - MatchBranch::parse("1 => false"), - Ok(( - "", - MatchBranch { - litteral: Litteral::parse("1").unwrap().1, - block: Block { - statements: vec![BlockStatement::Open(Statement::Expression( - Expression::parse("false").unwrap().1 - ))] - } - } - )) - ); - } - - #[test] - fn statement_match() { - assert_eq!( - Match::parse("match a {}"), - Ok(( - "", - Match { - starting_span: "match", - expression: Expression::parse("a").unwrap().1, - branches: vec![] - } - )) - ); - - assert_eq!( - Match::parse("match a { 1 => {} }"), - Ok(( - "", - Match { - starting_span: "match", - expression: Expression::parse("a").unwrap().1, - branches: vec![MatchBranch { - litteral: Litteral::parse("1").unwrap().1, - block: Block { statements: vec![] } - }] - } - )) - ); - - assert_eq!( - Match::parse("match a { 1 => {}, 2 => {}}"), - Ok(( - "", - Match { - starting_span: "match", - expression: Expression::parse("a").unwrap().1, - branches: vec![ - MatchBranch { - litteral: Litteral::parse("1").unwrap().1, - block: Block { statements: vec![] } - }, - MatchBranch { - litteral: Litteral::parse("2").unwrap().1, - block: Block { statements: vec![] } - } - ] - } - )) - ); - - assert!(Match::parse("match a { not a branch }").is_err(),); - } -} diff --git a/src/script/parsing/statements/s_return.rs b/src/script/parsing/statements/s_return.rs deleted file mode 100644 index a0e6bfd..0000000 --- a/src/script/parsing/statements/s_return.rs +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - combinator::{map, opt}, - sequence::{pair, preceded}, -}; - -use crate::script::{ - parsing::{space1, take_keyword, Expression, VResult}, - Span, -}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub struct Return { - pub starting_span: S, - pub expression: Option>, -} - -impl Return { - pub fn parse(input: S) -> VResult { - map( - pair( - take_keyword("return"), - opt(preceded(space1, Expression::parse)), - ), - |(starting_span, expression)| Self { - starting_span, - expression, - }, - )(input) - } - - pub fn get_span(&self) -> &S { - &self.starting_span - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn statement_return() { - assert_eq!( - Return::parse("return"), - Ok(( - "", - Return { - starting_span: "return", - expression: None - } - )) - ); - - assert_eq!( - Return::parse("return a"), - Ok(( - "", - Return { - starting_span: "return", - expression: Some(Expression::parse("a").unwrap().1) - } - )) - ); - assert!(Return::parse("returna").is_err()); - } -} diff --git a/src/script/parsing/statements/s_while.rs b/src/script/parsing/statements/s_while.rs deleted file mode 100644 index 88a48ad..0000000 --- a/src/script/parsing/statements/s_while.rs +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - character::complete::char as nom_char, - combinator::{cut, map, opt}, - error::context, - sequence::{delimited, pair, tuple}, -}; - -use crate::script::{ - parsing::{parse_name, space0, take_keyword, Block, Expression, VResult}, - Span, -}; - -#[derive(Debug, Eq, PartialEq)] -pub struct While { - pub starting_span: S, - pub name: Option, - pub expression: Expression, - pub block: Block, -} - -impl While { - pub fn parse(input: S) -> VResult { - map( - tuple(( - opt(delimited( - nom_char('\''), - parse_name, - pair(nom_char(':'), space0), - )), - pair( - take_keyword("while"), - cut(pair( - delimited( - space0, - context( - "Missing while loop condition expression", - Expression::parse_no_struct_initalization, - ), - space0, - ), - context("While loop is missing block", Block::parse), - )), - ), - )), - |(name, (starting_span, (expression, block)))| Self { - starting_span, - name, - expression, - block, - }, - )(input) - } - - pub fn get_span(&self) -> &S { - &self.starting_span - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn statement_while() { - assert_eq!( - While::parse("while a {}"), - Ok(( - "", - While { - starting_span: "while", - name: None, - expression: Expression::parse("a").unwrap().1, - block: Block { statements: vec![] } - } - )) - ); - - assert_eq!( - While::parse("'my_while_loop: while a {}"), - Ok(( - "", - While { - starting_span: "while", - name: Some("my_while_loop"), - expression: Expression::parse("a").unwrap().1, - block: Block { statements: vec![] } - } - )) - ); - } -} diff --git a/src/script/parsing/string.rs b/src/script/parsing/string.rs deleted file mode 100644 index c605b10..0000000 --- a/src/script/parsing/string.rs +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - branch::alt, - bytes::complete::{escaped, take_till, take_while1}, - character::complete::{char as nom_char, one_of}, - sequence::delimited, -}; - -use super::{Span, VResult}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub struct PString { - pub value: S, -} - -impl PString { - pub fn parse(input: S) -> VResult { - let (input, value) = delimited( - nom_char('"'), - alt(( - escaped( - take_while1(|c| !matches!(c, '\\' | '"')), - '\\', - one_of(r#""n\"#), - ), - take_till(|c| c == '"'), - )), - nom_char('"'), - )(input)?; - - Ok((input, PString { value })) - } - - pub fn get_span(&self) -> &S { - &self.value - } -} - -impl ToString for PString { - fn to_string(&self) -> String { - let mut char_iterator = self.value.chars().peekable(); - let iterator = std::iter::from_fn(|| { - char_iterator - .next() - .map(|next| (next, char_iterator.peek().copied())) - }); - let mut string = String::default(); - - for (current, next) in iterator { - if current == '\\' { - match next { - Some('"') => string.push('"'), - Some('\n') => string.push('\n'), - Some('\\') => string.push('\\'), - _ => {} // Shouldn't be possible to get an unrecognized char. This could happen for a downslash at the end of the string though. - } - } else { - string.push(current); - } - } - - string - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn test_string() { - assert_eq!( - PString::parse(r#""test""#), - Ok(("", PString { value: "test" })) - ); - assert_eq!( - PString::parse(r#"" \n \\ \" ""#), - Ok(( - "", - PString { - value: r#" \n \\ \" "#, - } - )) - ); - assert_eq!(PString::parse("\"\""), Ok(("", PString { value: "" }))); - } -} diff --git a/src/script/parsing/struct_initalization.rs b/src/script/parsing/struct_initalization.rs deleted file mode 100644 index 8931e86..0000000 --- a/src/script/parsing/struct_initalization.rs +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use nom::{ - branch::alt, - bytes::complete::tag, - character::complete::char as nom_char, - combinator::{map, success, value}, - error::context, - multi::separated_list0, - sequence::{delimited, pair, preceded, separated_pair, terminated}, -}; - -use super::{parse_name, space0, Expression, Span, Trailer, VResult}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub struct StructInitialization { - pub starting_span: S, - pub assignments: Vec<(S, Expression)>, - pub inheritance: Option>>, -} - -impl StructInitialization { - pub fn parse(input: S) -> VResult { - map( - terminated( - pair( - terminated(context("Missing opening bracket", tag("{")), space0), - alt(( - pair( - success(vec![]), - map( - preceded( - terminated(tag(".."), space0), - map(Trailer::parse, Box::new), - ), - Some, - ), - ), - pair( - separated_list0( - nom_char(','), - delimited( - space0, - separated_pair( - parse_name, - delimited(space0, nom_char('='), space0), - Expression::parse, - ), - space0, - ), - ), - alt(( - map( - preceded( - pair( - pair(space0, nom_char(',')), - delimited(space0, tag(".."), space0), - ), - map(Trailer::parse, Box::new), - ), - Some, - ), - value(None, delimited(space0, nom_char(','), space0)), - success(None), - )), - ), - )), - ), - pair(space0, context("Missing closing bracket", nom_char('}'))), - ), - |(starting_span, (assignments, inheritance))| Self { - starting_span, - assignments, - inheritance, - }, - )(input) - } - - pub fn get_span(&self) -> &S { - &self.starting_span - } -} - -// The functionality of struct initalization is done in the tests for trailers. diff --git a/src/script/parsing/variable_type.rs b/src/script/parsing/variable_type.rs deleted file mode 100644 index 28af6c2..0000000 --- a/src/script/parsing/variable_type.rs +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Copyright 2024 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ -use std::{borrow::Cow, fmt::Display}; - -use nom::{ - branch::alt, - bytes::complete::tag, - character::complete::char as nom_char, - combinator::map, - error::context, - multi::many0, - sequence::{delimited, pair, preceded, terminated}, -}; - -use crate::script::parsing::IteratorFormatter; - -use super::{parse_name, space0, take_keyword, MemberVariableType, Span, VResult}; - -#[derive(Debug, Eq, PartialEq, Clone)] -pub enum FunctionSignature { - Function { - return_type: Box>, - arguments: Vec>, - }, - Task { - return_type: Box>, - arguments: Vec>, - }, - Sketch { - arguments: Vec>, - }, - Solid { - arguments: Vec>, - }, -} - -impl FunctionSignature { - fn parse(input: S) -> VResult { - alt(( - Self::parse_private_function, - Self::parse_task, - Self::parse_sketch, - Self::parse_solid, - ))(input) - } - - fn parse_private_function(input: S) -> VResult { - map( - preceded( - pair(tag("function"), space0), - pair( - terminated(Self::parse_argument_list, space0), - Self::parse_return_type, - ), - ), - |(arguments, return_type)| Self::Function { - arguments, - return_type: Box::new(return_type), - }, - )(input) - } - fn parse_task(input: S) -> VResult { - map( - preceded( - pair(tag("task"), space0), - pair( - terminated(Self::parse_argument_list, space0), - Self::parse_return_type, - ), - ), - |(arguments, return_type)| Self::Task { - arguments, - return_type: Box::new(return_type), - }, - )(input) - } - fn parse_sketch(input: S) -> VResult { - map( - preceded( - pair(tag("sketch"), space0), - terminated(Self::parse_argument_list, space0), - ), - |arguments| Self::Sketch { arguments }, - )(input) - } - fn parse_solid(input: S) -> VResult { - map( - preceded( - pair(tag("solid"), space0), - terminated(Self::parse_argument_list, space0), - ), - |arguments| Self::Sketch { arguments }, - )(input) - } - - fn parse_argument_list(input: S) -> VResult>> { - delimited( - nom_char('('), - many0(MemberVariableType::parse), - nom_char(')'), - )(input) - } - - fn parse_return_type(input: S) -> VResult> { - preceded(pair(tag("->"), space0), VariableType::parse)(input) - } -} - -impl Display for FunctionSignature { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - FunctionSignature::Function { - return_type, - arguments, - } => write!( - f, - "function({}) -> {}", - IteratorFormatter(arguments.iter()), - return_type - ), - FunctionSignature::Task { - return_type, - arguments, - } => write!( - f, - "task({}) -> {}", - IteratorFormatter(arguments.iter()), - return_type - ), - FunctionSignature::Sketch { arguments } => { - write!(f, "sketch({})", IteratorFormatter(arguments.iter())) - } - FunctionSignature::Solid { arguments } => { - write!(f, "solid({})", IteratorFormatter(arguments.iter())) - } - } - } -} - -#[derive(Debug, Eq, PartialEq, Clone)] -pub enum VariableType { - String, - List, - Boolean, - Range, - Struct(S), - Scalar(S), - Vector(u8, S), - Transform(u8), - Quaternion, - Cycle, - Region, - Sketch, - Surface, - Solid, - Shell, - Face, - Curve, - HalfEdge, - Vertex, - Function(FunctionSignature), -} - -impl VariableType { - pub(super) fn parse(input: S) -> VResult { - context( - "Invalid type", - alt(( - alt(( - map(tag("String"), |_| Self::String), - map(tag("List"), |_| Self::List), - map(tag("Boolean"), |_| Self::Boolean), - map(tag("Range"), |_| Self::Range), - map(tag("Cycle"), |_| Self::Cycle), - map(tag("Region"), |_| Self::Region), - map(tag("Sketch"), |_| Self::Sketch), - map(tag("Surface"), |_| Self::Surface), - map(tag("Solid"), |_| Self::Solid), - map(tag("Shell"), |_| Self::Shell), - map(tag("Face"), |_| Self::Face), - map(tag("Curve"), |_| Self::Curve), - map(tag("HalfEdge"), |_| Self::HalfEdge), - map(tag("Vertex"), |_| Self::Vertex), - )), - map( - preceded(pair(take_keyword("struct"), space0), parse_name), - Self::Struct, - ), - map( - preceded( - pair(take_keyword("Vector2"), space0), - delimited( - pair(nom_char('<'), space0), - parse_name, - pair(space0, nom_char('>')), - ), - ), - |name| Self::Vector(2, name), - ), - map( - preceded( - pair(take_keyword("Vector3"), space0), - delimited( - pair(nom_char('<'), space0), - parse_name, - pair(space0, nom_char('>')), - ), - ), - |name| Self::Vector(3, name), - ), - map( - preceded( - pair(take_keyword("Vector4"), space0), - delimited( - pair(nom_char('<'), space0), - parse_name, - pair(space0, nom_char('>')), - ), - ), - |name| Self::Vector(4, name), - ), - map(tag("Transform2D"), |_| Self::Transform(2)), - map(tag("Transform3D"), |_| Self::Transform(3)), - map(tag("Quaternion"), |_| Self::Quaternion), - map(FunctionSignature::parse, Self::Function), - map(parse_name, Self::Scalar), - )), - )(input) - } - - pub fn name(&self) -> Cow<'static, str> { - match self { - Self::String => "String".into(), - Self::List => "List".into(), - Self::Boolean => "Boolean".into(), - Self::Range => "Range".into(), - Self::Struct(name) => format!("struct {}", name.as_str()).into(), - Self::Scalar(name) => name.to_string().into(), - Self::Vector(dimension, name) => { - format!("Vector{}<{}>", dimension, name.as_str()).into() - } - Self::Transform(2) => "Transform2D".into(), - Self::Transform(3) => "Transform3D".into(), - Self::Transform(_) => unreachable!(), - Self::Quaternion => "Quaternion".into(), - Self::Cycle => "Cycle".into(), - Self::Region => "Region".into(), - Self::Sketch => "Sketch".into(), - Self::Surface => "Surface".into(), - Self::Solid => "Solid".into(), - Self::Shell => "Shell".into(), - Self::Face => "Face".into(), - Self::Curve => "Curve".into(), - Self::HalfEdge => "HalfEdge".into(), - Self::Vertex => "Vertex".into(), - Self::Function(function) => format!("{}", function).into(), - } - } -} - -impl Display for VariableType { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Self::String => write!(f, "String"), - Self::List => write!(f, "List"), - Self::Boolean => write!(f, "Boolean"), - Self::Range => write!(f, "Range"), - Self::Struct(name) => write!(f, "struct {}", name.as_str()), - Self::Scalar(name) => write!(f, "{}", name.as_str()), - Self::Vector(dimension, name) => { - write!(f, "Vector{}<{}>", dimension, name.as_str()) - } - Self::Transform(2) => write!(f, "Transform2D"), - Self::Transform(3) => write!(f, "Transform3D"), - Self::Transform(_) => unreachable!(), - Self::Quaternion => write!(f, "Quaternion"), - Self::Cycle => write!(f, "Cycle"), - Self::Region => write!(f, "Region"), - Self::Sketch => write!(f, "Sketch"), - Self::Surface => write!(f, "Surface"), - Self::Solid => write!(f, "Solid"), - Self::Shell => write!(f, "Shell"), - Self::Face => write!(f, "Face"), - Self::Curve => write!(f, "Curve"), - Self::HalfEdge => write!(f, "HalfEdge"), - Self::Vertex => write!(f, "Vertex"), - Self::Function(function) => write!(f, "{}", function), - } - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn variable_type() { - assert_eq!( - VariableType::parse("Length"), - Ok(("", VariableType::Scalar("Length"))) - ); - assert_eq!( - VariableType::parse("Angle"), - Ok(("", VariableType::Scalar("Angle"))) - ); - assert_eq!( - VariableType::parse("Vector2"), - Ok(("", VariableType::Vector(2, "Length"))) - ); - assert_eq!( - VariableType::parse("Vector3"), - Ok(("", VariableType::Vector(3, "Length"))) - ); - assert_eq!( - VariableType::parse("Vector4"), - Ok(("", VariableType::Vector(4, "Length"))) - ); - assert_eq!(VariableType::parse("List"), Ok(("", VariableType::List))); - assert_eq!( - VariableType::parse("Boolean"), - Ok(("", VariableType::Boolean)) - ); - assert_eq!( - VariableType::parse("struct MyStruct"), - Ok(("", VariableType::Struct("MyStruct"))) - ); - - assert_eq!( - VariableType::parse("function() -> Number"), - Ok(( - "", - VariableType::Function(FunctionSignature::Function { - return_type: Box::new(VariableType::Scalar("Number")), - arguments: vec![] - }) - )) - ); - - assert_eq!( - VariableType::parse("function() -> Number"), - Ok(( - "", - VariableType::Function(FunctionSignature::Function { - return_type: Box::new(VariableType::Scalar("Number")), - arguments: vec![] - }) - )) - ); - } -} diff --git a/crates/topiary/command_cad_model.scm b/topiary/command_cad_model.scm similarity index 100% rename from crates/topiary/command_cad_model.scm rename to topiary/command_cad_model.scm diff --git a/crates/topiary/language.ncl b/topiary/language.ncl similarity index 100% rename from crates/topiary/language.ncl rename to topiary/language.ncl diff --git a/crates/topiary/shell.nix b/topiary/shell.nix similarity index 100% rename from crates/topiary/shell.nix rename to topiary/shell.nix diff --git a/crates/topiary/test.ccm b/topiary/test.ccm similarity index 100% rename from crates/topiary/test.ccm rename to topiary/test.ccm diff --git a/crates/tree-sitter-command-cad-model/.editorconfig b/tree-sitter-command-cad-model/.editorconfig similarity index 100% rename from crates/tree-sitter-command-cad-model/.editorconfig rename to tree-sitter-command-cad-model/.editorconfig diff --git a/crates/tree-sitter-command-cad-model/.gitattributes b/tree-sitter-command-cad-model/.gitattributes similarity index 100% rename from crates/tree-sitter-command-cad-model/.gitattributes rename to tree-sitter-command-cad-model/.gitattributes diff --git a/crates/tree-sitter-command-cad-model/.gitignore b/tree-sitter-command-cad-model/.gitignore similarity index 100% rename from crates/tree-sitter-command-cad-model/.gitignore rename to tree-sitter-command-cad-model/.gitignore diff --git a/crates/tree-sitter-command-cad-model/CMakeLists.txt b/tree-sitter-command-cad-model/CMakeLists.txt similarity index 100% rename from crates/tree-sitter-command-cad-model/CMakeLists.txt rename to tree-sitter-command-cad-model/CMakeLists.txt diff --git a/crates/tree-sitter-command-cad-model/Cargo.toml b/tree-sitter-command-cad-model/Cargo.toml similarity index 100% rename from crates/tree-sitter-command-cad-model/Cargo.toml rename to tree-sitter-command-cad-model/Cargo.toml diff --git a/crates/tree-sitter-command-cad-model/Makefile b/tree-sitter-command-cad-model/Makefile similarity index 100% rename from crates/tree-sitter-command-cad-model/Makefile rename to tree-sitter-command-cad-model/Makefile diff --git a/crates/tree-sitter-command-cad-model/Package.swift b/tree-sitter-command-cad-model/Package.swift similarity index 100% rename from crates/tree-sitter-command-cad-model/Package.swift rename to tree-sitter-command-cad-model/Package.swift diff --git a/crates/tree-sitter-command-cad-model/binding.gyp b/tree-sitter-command-cad-model/binding.gyp similarity index 100% rename from crates/tree-sitter-command-cad-model/binding.gyp rename to tree-sitter-command-cad-model/binding.gyp diff --git a/crates/tree-sitter-command-cad-model/bindings/c/tree-sitter-command_cad_model.h b/tree-sitter-command-cad-model/bindings/c/tree-sitter-command_cad_model.h similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/c/tree-sitter-command_cad_model.h rename to tree-sitter-command-cad-model/bindings/c/tree-sitter-command_cad_model.h diff --git a/crates/tree-sitter-command-cad-model/bindings/c/tree-sitter-command_cad_model.pc.in b/tree-sitter-command-cad-model/bindings/c/tree-sitter-command_cad_model.pc.in similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/c/tree-sitter-command_cad_model.pc.in rename to tree-sitter-command-cad-model/bindings/c/tree-sitter-command_cad_model.pc.in diff --git a/crates/tree-sitter-command-cad-model/bindings/go/binding.go b/tree-sitter-command-cad-model/bindings/go/binding.go similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/go/binding.go rename to tree-sitter-command-cad-model/bindings/go/binding.go diff --git a/crates/tree-sitter-command-cad-model/bindings/go/binding_test.go b/tree-sitter-command-cad-model/bindings/go/binding_test.go similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/go/binding_test.go rename to tree-sitter-command-cad-model/bindings/go/binding_test.go diff --git a/crates/tree-sitter-command-cad-model/bindings/go/go.mod b/tree-sitter-command-cad-model/bindings/go/go.mod similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/go/go.mod rename to tree-sitter-command-cad-model/bindings/go/go.mod diff --git a/crates/tree-sitter-command-cad-model/bindings/node/binding.cc b/tree-sitter-command-cad-model/bindings/node/binding.cc similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/node/binding.cc rename to tree-sitter-command-cad-model/bindings/node/binding.cc diff --git a/crates/tree-sitter-command-cad-model/bindings/node/index.d.ts b/tree-sitter-command-cad-model/bindings/node/index.d.ts similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/node/index.d.ts rename to tree-sitter-command-cad-model/bindings/node/index.d.ts diff --git a/crates/tree-sitter-command-cad-model/bindings/node/index.js b/tree-sitter-command-cad-model/bindings/node/index.js similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/node/index.js rename to tree-sitter-command-cad-model/bindings/node/index.js diff --git a/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.py b/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.py similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.py rename to tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.py diff --git a/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.pyi b/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.pyi similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.pyi rename to tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/__init__.pyi diff --git a/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/binding.c b/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/binding.c similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/binding.c rename to tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/binding.c diff --git a/crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/py.typed b/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/py.typed similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/py.typed rename to tree-sitter-command-cad-model/bindings/python/tree_sitter_command_cad_model/py.typed diff --git a/crates/tree-sitter-command-cad-model/bindings/rust/build.rs b/tree-sitter-command-cad-model/bindings/rust/build.rs similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/rust/build.rs rename to tree-sitter-command-cad-model/bindings/rust/build.rs diff --git a/crates/tree-sitter-command-cad-model/bindings/rust/lib.rs b/tree-sitter-command-cad-model/bindings/rust/lib.rs similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/rust/lib.rs rename to tree-sitter-command-cad-model/bindings/rust/lib.rs diff --git a/crates/tree-sitter-command-cad-model/bindings/swift/TreeSitterCommandCadModel/command_cad_model.h b/tree-sitter-command-cad-model/bindings/swift/TreeSitterCommandCadModel/command_cad_model.h similarity index 100% rename from crates/tree-sitter-command-cad-model/bindings/swift/TreeSitterCommandCadModel/command_cad_model.h rename to tree-sitter-command-cad-model/bindings/swift/TreeSitterCommandCadModel/command_cad_model.h diff --git a/crates/tree-sitter-command-cad-model/go.mod b/tree-sitter-command-cad-model/go.mod similarity index 100% rename from crates/tree-sitter-command-cad-model/go.mod rename to tree-sitter-command-cad-model/go.mod diff --git a/crates/tree-sitter-command-cad-model/grammar.js b/tree-sitter-command-cad-model/grammar.js similarity index 100% rename from crates/tree-sitter-command-cad-model/grammar.js rename to tree-sitter-command-cad-model/grammar.js diff --git a/crates/tree-sitter-command-cad-model/package.json b/tree-sitter-command-cad-model/package.json similarity index 100% rename from crates/tree-sitter-command-cad-model/package.json rename to tree-sitter-command-cad-model/package.json diff --git a/crates/tree-sitter-command-cad-model/pyproject.toml b/tree-sitter-command-cad-model/pyproject.toml similarity index 100% rename from crates/tree-sitter-command-cad-model/pyproject.toml rename to tree-sitter-command-cad-model/pyproject.toml diff --git a/crates/tree-sitter-command-cad-model/setup.py b/tree-sitter-command-cad-model/setup.py similarity index 100% rename from crates/tree-sitter-command-cad-model/setup.py rename to tree-sitter-command-cad-model/setup.py diff --git a/crates/tree-sitter-command-cad-model/src/grammar.json b/tree-sitter-command-cad-model/src/grammar.json similarity index 100% rename from crates/tree-sitter-command-cad-model/src/grammar.json rename to tree-sitter-command-cad-model/src/grammar.json diff --git a/crates/tree-sitter-command-cad-model/src/node-types.json b/tree-sitter-command-cad-model/src/node-types.json similarity index 100% rename from crates/tree-sitter-command-cad-model/src/node-types.json rename to tree-sitter-command-cad-model/src/node-types.json diff --git a/crates/tree-sitter-command-cad-model/src/parser.c b/tree-sitter-command-cad-model/src/parser.c similarity index 100% rename from crates/tree-sitter-command-cad-model/src/parser.c rename to tree-sitter-command-cad-model/src/parser.c diff --git a/crates/tree-sitter-command-cad-model/src/tree_sitter/alloc.h b/tree-sitter-command-cad-model/src/tree_sitter/alloc.h similarity index 100% rename from crates/tree-sitter-command-cad-model/src/tree_sitter/alloc.h rename to tree-sitter-command-cad-model/src/tree_sitter/alloc.h diff --git a/crates/tree-sitter-command-cad-model/src/tree_sitter/array.h b/tree-sitter-command-cad-model/src/tree_sitter/array.h similarity index 100% rename from crates/tree-sitter-command-cad-model/src/tree_sitter/array.h rename to tree-sitter-command-cad-model/src/tree_sitter/array.h diff --git a/crates/tree-sitter-command-cad-model/src/tree_sitter/parser.h b/tree-sitter-command-cad-model/src/tree_sitter/parser.h similarity index 100% rename from crates/tree-sitter-command-cad-model/src/tree_sitter/parser.h rename to tree-sitter-command-cad-model/src/tree_sitter/parser.h diff --git a/crates/tree-sitter-command-cad-model/test/corpus/closure.txt b/tree-sitter-command-cad-model/test/corpus/closure.txt similarity index 100% rename from crates/tree-sitter-command-cad-model/test/corpus/closure.txt rename to tree-sitter-command-cad-model/test/corpus/closure.txt diff --git a/crates/tree-sitter-command-cad-model/test/corpus/comments.txt b/tree-sitter-command-cad-model/test/corpus/comments.txt similarity index 100% rename from crates/tree-sitter-command-cad-model/test/corpus/comments.txt rename to tree-sitter-command-cad-model/test/corpus/comments.txt diff --git a/crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt b/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt similarity index 100% rename from crates/tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt rename to tree-sitter-command-cad-model/test/corpus/dictionary_construction.txt diff --git a/crates/tree-sitter-command-cad-model/test/corpus/formulas.txt b/tree-sitter-command-cad-model/test/corpus/formulas.txt similarity index 100% rename from crates/tree-sitter-command-cad-model/test/corpus/formulas.txt rename to tree-sitter-command-cad-model/test/corpus/formulas.txt diff --git a/crates/tree-sitter-command-cad-model/test/corpus/if.txt b/tree-sitter-command-cad-model/test/corpus/if.txt similarity index 100% rename from crates/tree-sitter-command-cad-model/test/corpus/if.txt rename to tree-sitter-command-cad-model/test/corpus/if.txt diff --git a/crates/tree-sitter-command-cad-model/test/corpus/let_in.txt b/tree-sitter-command-cad-model/test/corpus/let_in.txt similarity index 100% rename from crates/tree-sitter-command-cad-model/test/corpus/let_in.txt rename to tree-sitter-command-cad-model/test/corpus/let_in.txt diff --git a/crates/tree-sitter-command-cad-model/test/corpus/list.txt b/tree-sitter-command-cad-model/test/corpus/list.txt similarity index 100% rename from crates/tree-sitter-command-cad-model/test/corpus/list.txt rename to tree-sitter-command-cad-model/test/corpus/list.txt diff --git a/crates/tree-sitter-command-cad-model/test/corpus/precedence.txt b/tree-sitter-command-cad-model/test/corpus/precedence.txt similarity index 100% rename from crates/tree-sitter-command-cad-model/test/corpus/precedence.txt rename to tree-sitter-command-cad-model/test/corpus/precedence.txt diff --git a/crates/tree-sitter-command-cad-model/test/corpus/primitives.txt b/tree-sitter-command-cad-model/test/corpus/primitives.txt similarity index 100% rename from crates/tree-sitter-command-cad-model/test/corpus/primitives.txt rename to tree-sitter-command-cad-model/test/corpus/primitives.txt diff --git a/crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt b/tree-sitter-command-cad-model/test/corpus/struct_definition.txt similarity index 100% rename from crates/tree-sitter-command-cad-model/test/corpus/struct_definition.txt rename to tree-sitter-command-cad-model/test/corpus/struct_definition.txt diff --git a/crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt b/tree-sitter-command-cad-model/test/corpus/variable_paths.txt similarity index 100% rename from crates/tree-sitter-command-cad-model/test/corpus/variable_paths.txt rename to tree-sitter-command-cad-model/test/corpus/variable_paths.txt diff --git a/crates/tree-sitter-command-cad-model/tree-sitter.json b/tree-sitter-command-cad-model/tree-sitter.json similarity index 100% rename from crates/tree-sitter-command-cad-model/tree-sitter.json rename to tree-sitter-command-cad-model/tree-sitter.json diff --git a/crates/units/Cargo.toml b/units/Cargo.toml similarity index 100% rename from crates/units/Cargo.toml rename to units/Cargo.toml diff --git a/crates/units/build.rs b/units/build.rs similarity index 100% rename from crates/units/build.rs rename to units/build.rs diff --git a/crates/units/src/lib.rs b/units/src/lib.rs similarity index 100% rename from crates/units/src/lib.rs rename to units/src/lib.rs diff --git a/crates/units/src/units.csv b/units/src/units.csv similarity index 100% rename from crates/units/src/units.csv rename to units/src/units.csv From bb6f3547f4a00cf4ec788d0c0b0ffddccb1db6a9 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 17 Jan 2026 18:10:20 -0500 Subject: [PATCH 078/106] Setup basic REPL loop --- Cargo.lock | 1062 ++++++++++++++++++++++++++++++++++++++++-- Cargo.toml | 12 +- cli/Cargo.toml | 8 + cli/src/arguments.rs | 14 + cli/src/main.rs | 36 ++ 5 files changed, 1097 insertions(+), 35 deletions(-) create mode 100644 cli/Cargo.toml create mode 100644 cli/src/arguments.rs create mode 100644 cli/src/main.rs diff --git a/Cargo.lock b/Cargo.lock index a838a2b..ea218af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,6 +11,65 @@ dependencies = [ "memchr", ] +[[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 = "anstream" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.61.2", +] + [[package]] name = "approx" version = "0.5.1" @@ -20,6 +79,24 @@ dependencies = [ "num-traits", ] +[[package]] +name = "arboard" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" +dependencies = [ + "clipboard-win", + "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "parking_lot", + "percent-encoding", + "windows-sys 0.59.0", + "wl-clipboard-rs", + "x11rb", +] + [[package]] name = "autocfg" version = "1.5.0" @@ -37,6 +114,15 @@ name = "bitflags" version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +dependencies = [ + "serde_core", +] + +[[package]] +name = "bumpalo" +version = "3.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "bytemuck" @@ -69,12 +155,87 @@ dependencies = [ "phf", ] +[[package]] +name = "chrono" +version = "0.4.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" +dependencies = [ + "iana-time-zone", + "num-traits", + "serde", + "windows-link", +] + +[[package]] +name = "clap" +version = "4.5.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" + +[[package]] +name = "cli" +version = "0.1.0" +dependencies = [ + "clap", + "reedline", +] + +[[package]] +name = "clipboard-win" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" +dependencies = [ + "error-code", +] + [[package]] name = "coalesce" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7f42f93baa58655bd5b3db91dd9b2073dc8a0c887dc35bd1cfefbd43fc7cf07" +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + [[package]] name = "common_data_types" version = "0.1.0" @@ -93,6 +254,21 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -118,6 +294,34 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crossterm" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +dependencies = [ + "bitflags", + "crossterm_winapi", + "derive_more", + "document-features", + "mio", + "parking_lot", + "rustix", + "serde", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + [[package]] name = "csv" version = "1.4.0" @@ -139,12 +343,59 @@ dependencies = [ "memchr", ] +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case 0.10.0", + "proc-macro2", + "quote", + "rustc_version", + "syn", +] + [[package]] name = "diff" version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags", + "objc2", +] + +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + [[package]] name = "dunce" version = "1.0.5" @@ -222,15 +473,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.61.2", ] +[[package]] +name = "error-code" +version = "3.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" + [[package]] name = "fastrand" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "fd-lock" +version = "4.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78" +dependencies = [ + "cfg-if", + "rustix", + "windows-sys 0.59.0", +] + [[package]] name = "file-guard" version = "0.2.0" @@ -247,12 +515,34 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8591b0bcc8a98a64310a2fae1bb3e9b8564dd10e381e6e28010fde8e8e8568db" +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "gethostname" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" +dependencies = [ + "rustix", + "windows-link", +] + [[package]] name = "getrandom" version = "0.3.4" @@ -367,12 +657,51 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46ab77e35afc7a5a3087e72e8e93a90a226a78f62c5f4dceaeb3d7ef5decdccb" +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash", +] + [[package]] name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "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 = "imstr" version = "0.2.0" @@ -386,7 +715,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.16.1", ] [[package]] @@ -415,6 +744,12 @@ dependencies = [ "unwrap-enum", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + [[package]] name = "itertools" version = "0.10.5" @@ -424,6 +759,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.17" @@ -436,6 +780,16 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e90f66baf362a8a5ce2ca820290fbede0572a76fabf8408bc68c02f9ad1d03bf" +[[package]] +name = "js-sys" +version = "0.3.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -464,6 +818,27 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + [[package]] name = "logos" version = "0.15.1" @@ -514,6 +889,18 @@ version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +[[package]] +name = "mio" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.61.2", +] + [[package]] name = "nalgebra" version = "0.34.1" @@ -566,6 +953,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "num-bigint" version = "0.4.6" @@ -615,54 +1011,183 @@ dependencies = [ ] [[package]] -name = "once_cell" -version = "1.21.3" +name = "objc2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +dependencies = [ + "objc2-encode", +] [[package]] -name = "ordered-float" -version = "4.6.0" +name = "objc2-app-kit" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "num-traits", + "bitflags", + "objc2", + "objc2-core-graphics", + "objc2-foundation", ] [[package]] -name = "paste" -version = "1.0.15" +name = "objc2-core-foundation" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags", + "dispatch2", + "objc2", +] [[package]] -name = "phf" -version = "0.11.3" +name = "objc2-core-graphics" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "phf_macros", - "phf_shared", + "bitflags", + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", ] [[package]] -name = "phf_generator" -version = "0.11.3" +name = "objc2-encode" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "phf_shared", - "rand", + "bitflags", + "objc2", + "objc2-core-foundation", ] [[package]] -name = "phf_macros" -version = "0.11.3" +name = "objc2-io-surface" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "phf_generator", - "phf_shared", + "bitflags", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "ordered-float" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" +dependencies = [ + "num-traits", +] + +[[package]] +name = "os_pipe" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "petgraph" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" +dependencies = [ + "fixedbitset", + "hashbrown 0.15.5", + "indexmap", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", "proc-macro2", "quote", "syn", @@ -677,6 +1202,12 @@ dependencies = [ "siphasher", ] +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + [[package]] name = "pretty_assertions" version = "1.4.1" @@ -723,11 +1254,20 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79bc0a2b2a185610156579070227676cf31d6282045d01273bbfc65804df6022" dependencies = [ - "itertools", + "itertools 0.10.5", "proc-macro2", "quote", ] +[[package]] +name = "quick-xml" +version = "0.38.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +dependencies = [ + "memchr", +] + [[package]] name = "quote" version = "1.0.43" @@ -784,6 +1324,37 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "reedline" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67478e45862a0c29fd99658e382c07b1b80b9c1b7d946ce6bd2e4a679141554b" +dependencies = [ + "arboard", + "chrono", + "crossterm", + "fd-lock", + "itertools 0.13.0", + "nu-ansi-term", + "serde", + "strip-ansi-escapes", + "strum", + "strum_macros", + "thiserror 2.0.17", + "unicase", + "unicode-segmentation", + "unicode-width", +] + [[package]] name = "regex" version = "1.12.2" @@ -838,9 +1409,15 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.61.2", ] +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + [[package]] name = "ryu" version = "1.0.22" @@ -865,6 +1442,12 @@ dependencies = [ "winapi-util", ] +[[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.27" @@ -921,6 +1504,37 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b75a19a7a740b25bc7944bdee6172368f988763b744e3d4dfe753f6b4ece40cc" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + [[package]] name = "simba" version = "0.9.1" @@ -946,6 +1560,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + [[package]] name = "stack" version = "0.4.0" @@ -961,6 +1581,40 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" +[[package]] +name = "strip-ansi-escapes" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025" +dependencies = [ + "vte", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + [[package]] name = "syn" version = "2.0.114" @@ -982,7 +1636,7 @@ dependencies = [ "getrandom", "once_cell", "rustix", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -991,7 +1645,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +dependencies = [ + "thiserror-impl 2.0.17", ] [[package]] @@ -1005,6 +1668,17 @@ dependencies = [ "syn", ] +[[package]] +name = "thiserror-impl" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tree-sitter" version = "0.25.10" @@ -1033,6 +1707,17 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae62f7eae5eb549c71b76658648b72cc6111f2d87d24a1e31fa907f4943e3ce" +[[package]] +name = "tree_magic_mini" +version = "3.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8765b90061cba6c22b5831f675da109ae5561588290f9fa2317adab2714d5a6" +dependencies = [ + "memchr", + "nom", + "petgraph", +] + [[package]] name = "type-sitter" version = "0.8.1" @@ -1051,7 +1736,7 @@ checksum = "95ad6a9e8aa527b2c037cd5016d6291e197c98eb6160ff09b25f2398374a3003" dependencies = [ "cc", "check_keyword", - "convert_case", + "convert_case 0.8.0", "dunce", "enum-map", "join-lazy-fmt", @@ -1104,9 +1789,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63cc5d2fd8648d7e2be86098f60c9ece7045cc710b3c1e226910e2f37d11dc73" dependencies = [ "serde", - "thiserror", + "thiserror 1.0.69", ] +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + [[package]] name = "unicode-ident" version = "1.0.22" @@ -1119,6 +1810,12 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + [[package]] name = "units" version = "0.1.0" @@ -1150,6 +1847,21 @@ dependencies = [ "syn", ] +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "vte" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077" +dependencies = [ + "memchr", +] + [[package]] name = "walkdir" version = "2.5.0" @@ -1160,6 +1872,12 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + [[package]] name = "wasip2" version = "1.0.2+wasi-0.2.9" @@ -1169,6 +1887,121 @@ dependencies = [ "wit-bindgen", ] +[[package]] +name = "wasm-bindgen" +version = "0.2.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wayland-backend" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fee64194ccd96bf648f42a65a7e589547096dfa702f7cadef84347b66ad164f9" +dependencies = [ + "cc", + "downcast-rs", + "rustix", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e6faa537fbb6c186cb9f1d41f2f811a4120d1b57ec61f50da451a0c5122bec" +dependencies = [ + "bitflags", + "rustix", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols" +version = "0.32.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baeda9ffbcfc8cd6ddaade385eaf2393bd2115a69523c735f12242353c3df4f3" +dependencies = [ + "bitflags", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9597cdf02cf0c34cd5823786dce6b5ae8598f05c2daf5621b6e178d4f7345f3" +dependencies = [ + "bitflags", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5423e94b6a63e68e439803a3e153a9252d5ead12fd853334e2ad33997e3889e3" +dependencies = [ + "proc-macro2", + "quick-xml", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6dbfc3ac5ef974c92a2235805cc0114033018ae1290a72e474aa8b28cbbdfd" +dependencies = [ + "pkg-config", +] + [[package]] name = "wide" version = "0.7.33" @@ -1201,7 +2034,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -1210,12 +2043,74 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.61.2" @@ -1225,12 +2120,111 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + [[package]] name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +[[package]] +name = "wl-clipboard-rs" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9651471a32e87d96ef3a127715382b2d11cc7c8bb9822ded8a7cc94072eb0a3" +dependencies = [ + "libc", + "log", + "os_pipe", + "rustix", + "thiserror 2.0.17", + "tree_magic_mini", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-wlr", +] + +[[package]] +name = "x11rb" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" +dependencies = [ + "gethostname", + "rustix", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" + [[package]] name = "yansi" version = "1.0.1" diff --git a/Cargo.toml b/Cargo.toml index e6ca685..33da150 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,5 +5,15 @@ members = [ "interpreter", "common_data_types", "tree-sitter-command-cad-model", - "units" + "units", + "cli" +] + +# We skip tree-sitter because it doesn't have actual tests and one of the generated documentation +# does not pass +default-members = [ + "interpreter", + "common_data_types", + "units", + "cli" ] diff --git a/cli/Cargo.toml b/cli/Cargo.toml new file mode 100644 index 0000000..04eb24a --- /dev/null +++ b/cli/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "cli" +version = "0.1.0" +edition = "2024" + +[dependencies] +clap = { version = "4.5.54", features = ["derive"] } +reedline = { version = "0.45.0", features = ["system_clipboard", "bashisms"] } diff --git a/cli/src/arguments.rs b/cli/src/arguments.rs new file mode 100644 index 0000000..8ea180b --- /dev/null +++ b/cli/src/arguments.rs @@ -0,0 +1,14 @@ +use clap::{Parser, Subcommand}; + +#[derive(Parser)] +#[command(version, about, long_about = None)] +pub struct Arguments { + #[command(subcommand)] + pub command: Commands, +} + +#[derive(Subcommand)] +pub enum Commands { + /// Enter read-eval-print loop + Repl, +} diff --git a/cli/src/main.rs b/cli/src/main.rs new file mode 100644 index 0000000..7b9a393 --- /dev/null +++ b/cli/src/main.rs @@ -0,0 +1,36 @@ +mod arguments; +use arguments::Arguments; +use clap::Parser as _; +use reedline::{DefaultPrompt, Reedline, Signal}; + +use crate::arguments::Commands; + +fn main() { + let arguments = Arguments::parse(); + + match arguments.command { + Commands::Repl => repl(), + } +} + +fn repl() { + let mut line_editor = Reedline::create(); + let prompt = DefaultPrompt::default(); + println!("Welcome to REPL mode. Press Ctrl-C or Ctrl-D to exit"); + + loop { + let sig = line_editor.read_line(&prompt); + match sig { + Ok(Signal::Success(buffer)) => { + println!("We processed: {}", buffer); + } + Ok(Signal::CtrlD) | Ok(Signal::CtrlC) => { + println!("\nAborted!"); + break; + } + x => { + println!("Event: {:?}", x); + } + } + } +} From d5fba5529ae5619ae3a64e142fc129e67cd283e1 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 17 Jan 2026 22:32:55 -0500 Subject: [PATCH 079/106] Basic repl --- Cargo.lock | 137 +++++++++++++++++++++++- cli/Cargo.toml | 3 + cli/src/main.rs | 79 +++++++++++++- interpreter/src/compile/expressions.rs | 10 +- interpreter/src/compile/mod.rs | 28 +++++ interpreter/src/execution/errors.rs | 2 + interpreter/src/execution/mod.rs | 16 ++- interpreter/src/execution/values/mod.rs | 6 +- interpreter/src/lib.rs | 9 +- 9 files changed, 264 insertions(+), 26 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ea218af..f60e1cf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -70,6 +70,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + [[package]] name = "approx" version = "0.5.1" @@ -211,8 +217,11 @@ checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" name = "cli" version = "0.1.0" dependencies = [ + "anyhow", "clap", + "interpreter", "reedline", + "termimad", ] [[package]] @@ -263,12 +272,69 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "coolor" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "980c2afde4af43d6a05c5be738f9eae595cff86dce1f38f88b95058a98c027f3" +dependencies = [ + "crossterm", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "crokey" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51360853ebbeb3df20c76c82aecf43d387a62860f1a59ba65ab51f00eea85aad" +dependencies = [ + "crokey-proc_macros", + "crossterm", + "once_cell", + "serde", + "strict", +] + +[[package]] +name = "crokey-proc_macros" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bf1a727caeb5ee5e0a0826a97f205a9cf84ee964b0b48239fef5214a00ae439" +dependencies = [ + "crossterm", + "proc-macro2", + "quote", + "strict", + "syn", +] + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -288,6 +354,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -790,6 +865,29 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "lazy-regex" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5c13b6857ade4c8ee05c3c3dc97d2ab5415d691213825b90d3211c425c1f907" +dependencies = [ + "lazy-regex-proc_macros", + "once_cell", + "regex", +] + +[[package]] +name = "lazy-regex-proc_macros" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a95c68db5d41694cea563c86a4ba4dc02141c16ef64814108cb23def4d5438" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -889,6 +987,15 @@ version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +[[package]] +name = "minimad" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8b688969b16915f3ecadc7829d5b7779dee4977e503f767f34136803d5c06f" +dependencies = [ + "once_cell", +] + [[package]] name = "mio" version = "1.1.1" @@ -1352,7 +1459,7 @@ dependencies = [ "thiserror 2.0.17", "unicase", "unicode-segmentation", - "unicode-width", + "unicode-width 0.2.2", ] [[package]] @@ -1581,6 +1688,12 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" +[[package]] +name = "strict" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f42444fea5b87a39db4218d9422087e66a85d0e7a0963a439b07bcdf91804006" + [[package]] name = "strip-ansi-escapes" version = "0.2.1" @@ -1639,6 +1752,22 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "termimad" +version = "0.34.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "889a9370996b74cf46016ce35b96c248a9ac36d69aab1d112b3e09bc33affa49" +dependencies = [ + "coolor", + "crokey", + "crossbeam", + "lazy-regex", + "minimad", + "serde", + "thiserror 2.0.17", + "unicode-width 0.1.14", +] + [[package]] name = "thiserror" version = "1.0.69" @@ -1810,6 +1939,12 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + [[package]] name = "unicode-width" version = "0.2.2" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 04eb24a..b111b48 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -6,3 +6,6 @@ edition = "2024" [dependencies] clap = { version = "4.5.54", features = ["derive"] } reedline = { version = "0.45.0", features = ["system_clipboard", "bashisms"] } +termimad = "0.34.1" +interpreter = { path = "../interpreter/" } +anyhow = "1.0.100" diff --git a/cli/src/main.rs b/cli/src/main.rs index 7b9a393..40d986d 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -1,10 +1,21 @@ +use std::{collections::HashMap, path::PathBuf, sync::Arc}; + mod arguments; +use anyhow::{anyhow, Context, Result}; use arguments::Arguments; use clap::Parser as _; use reedline::{DefaultPrompt, Reedline, Signal}; use crate::arguments::Commands; +use interpreter::{ + build_prelude, compile, execute_expression, + execution::values::BuiltinCallableDatabase, + new_parser, + values::{Object, Style, Value}, + ExecutionContext, ImString, LogMessage, Parser, RuntimeLog, StackScope, StackTrace, +}; + fn main() { let arguments = Arguments::parse(); @@ -13,16 +24,40 @@ fn main() { } } +#[derive(Debug)] +struct StderrLog; + +impl RuntimeLog for StderrLog { + fn push_message(&self, message: LogMessage) { + let level_char = match message.level { + interpreter::LogLevel::Info => 'I', + interpreter::LogLevel::Warning => 'W', + }; + + eprintln!("{}: {}: {}", level_char, message.origin, message); + } +} + fn repl() { let mut line_editor = Reedline::create(); let prompt = DefaultPrompt::default(); println!("Welcome to REPL mode. Press Ctrl-C or Ctrl-D to exit"); + let repl_file = Arc::new(PathBuf::from("repl.ccm")); + let mut parser = new_parser(); + + let database = BuiltinCallableDatabase::new(); + let prelude = build_prelude(&database); + loop { let sig = line_editor.read_line(&prompt); match sig { - Ok(Signal::Success(buffer)) => { - println!("We processed: {}", buffer); + Ok(Signal::Success(input)) => { + if let Err(error) = + run_line(&mut parser, &prelude, &database, &repl_file, input.as_str()) + { + eprintln!("Failed to run line: {error}"); + } } Ok(Signal::CtrlD) | Ok(Signal::CtrlC) => { println!("\nAborted!"); @@ -34,3 +69,43 @@ fn repl() { } } } + +fn run_line( + parser: &mut Parser, + prelude: &HashMap, + database: &BuiltinCallableDatabase, + repl_file: &Arc, + input: &str, +) -> Result<()> { + let root = parser + .parse(input, None) + .map_err(|error| anyhow!("Failed to parse input: {error:?}"))?; + let root = + compile(&repl_file, input, &root).map_err(|error| anyhow!("Failed to compile: {error}"))?; + + let log = StderrLog; + let context = ExecutionContext { + log: &log as &dyn RuntimeLog, + stack_trace: &StackTrace::top(root.reference.clone()), + stack: &StackScope::top(&prelude), + database: &database, + }; + + let result = execute_expression(&context, &root); + + match result { + Ok(result) => { + let mut output = String::new(); + result + .format(&context, &mut output, Style::Default, None) + .context("Failed to write output to display")?; + + println!("{output}"); + } + Err(error) => { + eprintln!("Failed to evaluate: {error}"); + } + } + + Ok(()) +} diff --git a/interpreter/src/compile/expressions.rs b/interpreter/src/compile/expressions.rs index aa73421..70e8409 100644 --- a/interpreter/src/compile/expressions.rs +++ b/interpreter/src/compile/expressions.rs @@ -3,7 +3,6 @@ use std::{cmp::Ordering, collections::HashSet, path::PathBuf, sync::Arc}; use hashable_map::HashableSet; use imstr::ImString; use nodes::SourceFile; -use tree_sitter::Range; use type_sitter::{HasChild, Node}; use unwrap_enum::EnumAs; @@ -86,12 +85,6 @@ pub struct ParseNumberError<'t> { pub node: nodes::Number<'t>, } -#[derive(Debug, Hash, Eq, PartialEq, Clone)] -pub struct SourceReference { - pub file: Arc, - pub range: Range, -} - #[derive(Debug, Hash, Eq, PartialEq, EnumAs)] pub enum Expression { BinaryExpression(AstNode>), @@ -1159,7 +1152,8 @@ impl<'t> Parse<'t, nodes::LetIn<'t>> for LetIn { } } -pub fn new_parser() -> type_sitter::Parser> { +pub type Parser = type_sitter::Parser>; +pub fn new_parser() -> Parser { type_sitter::Parser::new(&tree_sitter_command_cad_model::language()) .expect("Error loading CommandCadModel grammar") } diff --git a/interpreter/src/compile/mod.rs b/interpreter/src/compile/mod.rs index 4f1e549..7bcbdcf 100644 --- a/interpreter/src/compile/mod.rs +++ b/interpreter/src/compile/mod.rs @@ -4,6 +4,7 @@ mod formula; use common_data_types::{ConversionFactor, Dimension, Float, RawFloat}; use imstr::ImString; use std::{path::PathBuf, sync::Arc}; +use tree_sitter::Range; use type_sitter::{HasChild, IncorrectKind, Node}; pub use expressions::*; @@ -12,6 +13,12 @@ pub mod nodes { include!(concat!(env!("OUT_DIR"), "/nodes.rs")); } +#[derive(Debug, Hash, Eq, PartialEq, Clone)] +pub struct SourceReference { + pub file: Arc, + pub range: Range, +} + #[derive(Debug, Hash, Eq, PartialEq)] pub struct AstNode { pub reference: SourceReference, @@ -237,6 +244,27 @@ pub enum Error<'t, 'i> { ParseNumber(ParseNumberError<'t>), } +impl<'t> std::error::Error for Error<'t, '_> {} + +impl<'t> std::fmt::Display for Error<'t, '_> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Error::IncorrectKind(incorrect_kind) => { + write!(f, "incorrect node type, expected {}", incorrect_kind.kind) + } + Error::InvalidUnit(invalid_unit_error) => { + write!(f, "invalid scalar unit: {}", invalid_unit_error.name) + } + Error::ParseInt(parse_int_error) => { + write!(f, "failed to parse integer: {}", parse_int_error.error) + } + Error::ParseNumber(parse_number_error) => { + write!(f, "failed to parse scalar: {}", parse_number_error.error) + } + } + } +} + impl<'t> From> for Error<'t, '_> { fn from(value: IncorrectKind<'t>) -> Self { Self::IncorrectKind(value) diff --git a/interpreter/src/execution/errors.rs b/interpreter/src/execution/errors.rs index 4441cbf..18814ea 100644 --- a/interpreter/src/execution/errors.rs +++ b/interpreter/src/execution/errors.rs @@ -40,6 +40,8 @@ impl Display for Error { } } +impl std::error::Error for Error {} + /// A generic error that will just display a static message. #[derive(Debug, Eq, PartialEq)] pub struct GenericFailure(pub Cow<'static, str>); diff --git a/interpreter/src/execution/mod.rs b/interpreter/src/execution/mod.rs index 87384a5..931ef0b 100644 --- a/interpreter/src/execution/mod.rs +++ b/interpreter/src/execution/mod.rs @@ -19,14 +19,9 @@ use std::{cmp::Ordering, collections::HashMap}; use crate::{ - compile::{ - self, AstNode, BinaryExpressionOperation, Expression, SourceReference, - UnaryExpressionOperation, - }, - execution::{ - stack::{ScopeType, StackScope}, - values::BuiltinCallableDatabase, - }, + compile::{self, AstNode, BinaryExpressionOperation, Expression, UnaryExpressionOperation}, + execution::{stack::ScopeType, values::BuiltinCallableDatabase}, + SourceReference, }; use rayon::{join, prelude::*}; @@ -38,7 +33,10 @@ mod standard_environment; pub mod values; use errors::ExpressionResult; use imstr::ImString; -use logging::{LocatedStr, RuntimeLog, StackTrace}; +use logging::LocatedStr; +pub use logging::{LogLevel, LogMessage, RuntimeLog, StackTrace}; +pub use stack::StackScope; + use values::{ closure::find_all_variable_accesses_in_closure_capture, dictionary::find_all_variable_accesses_in_dictionary_construction, Object, Value, ValueType, diff --git a/interpreter/src/execution/values/mod.rs b/interpreter/src/execution/values/mod.rs index 6b6ee45..d8a79db 100644 --- a/interpreter/src/execution/values/mod.rs +++ b/interpreter/src/execution/values/mod.rs @@ -22,9 +22,7 @@ use enum_dispatch::enum_dispatch; use enum_downcast::{AsVariant, EnumDowncast, IntoVariant}; use unwrap_enum::EnumAs; -use crate::execution::{ - logging::StackTrace, stack::ScopeType, values::string::formatting::Style, ExecutionContext, -}; +use crate::execution::{logging::StackTrace, stack::ScopeType, ExecutionContext}; use super::errors::{ErrorType, ExpressionResult, Raise as _}; @@ -53,7 +51,7 @@ mod list; pub use list::List; mod string; -pub use string::IString; +pub use string::{formatting::Style, IString}; mod file; pub use file::File; diff --git a/interpreter/src/lib.rs b/interpreter/src/lib.rs index a436236..108a695 100644 --- a/interpreter/src/lib.rs +++ b/interpreter/src/lib.rs @@ -19,5 +19,10 @@ pub mod compile; pub mod execution; -pub use compile::{compile, new_parser}; -pub use execution::execute_expression; +pub use compile::{compile, new_parser, Parser, SourceReference}; +pub use execution::{ + build_prelude, execute_expression, values, ExecutionContext, LogLevel, LogMessage, RuntimeLog, + StackScope, StackTrace, +}; +pub use imstr::ImString; +pub use tree_sitter::{Point as TextPoint, Range as TextRange}; From 7e6817e837540e1407a54e35036dfd8ba44526dd Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 18 Jan 2026 01:30:14 -0500 Subject: [PATCH 080/106] Pretty error messages --- Cargo.lock | 12 +++++ Cargo.toml | 3 ++ cli/Cargo.toml | 1 + cli/src/main.rs | 23 ++++++++- interpreter/Cargo.toml | 1 + interpreter/src/compile/mod.rs | 17 +++++++ interpreter/src/execution/errors.rs | 14 +++++ interpreter/src/execution/mod.rs | 1 + interpreter/src/execution/values/boolean.rs | 8 +-- interpreter/src/execution/values/integer.rs | 26 +++++----- interpreter/src/execution/values/list.rs | 2 +- interpreter/src/execution/values/mod.rs | 51 +++++++++++++++++-- interpreter/src/execution/values/scalar.rs | 20 ++++---- .../src/execution/values/string/mod.rs | 2 +- .../src/execution/values/value_type.rs | 2 +- interpreter/src/execution/values/vector.rs | 22 ++++---- interpreter/src/lib.rs | 4 +- 17 files changed, 161 insertions(+), 48 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f60e1cf..cb048b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -103,6 +103,16 @@ dependencies = [ "x11rb", ] +[[package]] +name = "ariadne" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8454c8a44ce2cb9cc7e7fae67fc6128465b343b92c6631e94beca3c8d1524ea5" +dependencies = [ + "unicode-width 0.2.2", + "yansi", +] + [[package]] name = "autocfg" version = "1.5.0" @@ -218,6 +228,7 @@ name = "cli" version = "0.1.0" dependencies = [ "anyhow", + "ariadne", "clap", "interpreter", "reedline", @@ -797,6 +808,7 @@ dependencies = [ name = "interpreter" version = "0.1.0" dependencies = [ + "ariadne", "common_data_types", "enum_dispatch", "enum_downcast", diff --git a/Cargo.toml b/Cargo.toml index 33da150..a179ed1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,3 +17,6 @@ default-members = [ "units", "cli" ] + +[workspace.dependencies] +ariadne = "0.6.0" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index b111b48..0319c2a 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -9,3 +9,4 @@ reedline = { version = "0.45.0", features = ["system_clipboard", "bashisms"] } termimad = "0.34.1" interpreter = { path = "../interpreter/" } anyhow = "1.0.100" +ariadne = { workspace = true } diff --git a/cli/src/main.rs b/cli/src/main.rs index 40d986d..6503812 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -3,6 +3,7 @@ use std::{collections::HashMap, path::PathBuf, sync::Arc}; mod arguments; use anyhow::{anyhow, Context, Result}; use arguments::Arguments; +use ariadne::{Cache, Source}; use clap::Parser as _; use reedline::{DefaultPrompt, Reedline, Signal}; @@ -38,6 +39,23 @@ impl RuntimeLog for StderrLog { } } +struct ReplFileCache<'i>(Source<&'i str>); + +impl<'i> Cache> for ReplFileCache<'i> { + type Storage = &'i str; + + fn fetch( + &mut self, + _id: &Arc, + ) -> Result<&Source, impl std::fmt::Debug> { + self.0.fetch(&()) + } + + fn display<'a>(&self, _id: &'a Arc) -> Option { + self.0.display(&()) + } +} + fn repl() { let mut line_editor = Reedline::create(); let prompt = DefaultPrompt::default(); @@ -103,7 +121,10 @@ fn run_line( println!("{output}"); } Err(error) => { - eprintln!("Failed to evaluate: {error}"); + let report = error.report(); + report + .eprint(ReplFileCache(Source::from(input))) + .context("Failed to format error message")?; } } diff --git a/interpreter/Cargo.toml b/interpreter/Cargo.toml index 1a87925..8fbf68c 100644 --- a/interpreter/Cargo.toml +++ b/interpreter/Cargo.toml @@ -22,6 +22,7 @@ paste = "1.0.15" tempfile = "3.24.0" rayon = "1.11.0" nom = "8.0.0" +ariadne = { workspace = true } [build-dependencies] type-sitter-gen = "0.8" diff --git a/interpreter/src/compile/mod.rs b/interpreter/src/compile/mod.rs index 7bcbdcf..10416c8 100644 --- a/interpreter/src/compile/mod.rs +++ b/interpreter/src/compile/mod.rs @@ -1,6 +1,7 @@ mod expressions; mod formula; +use ariadne::Span; use common_data_types::{ConversionFactor, Dimension, Float, RawFloat}; use imstr::ImString; use std::{path::PathBuf, sync::Arc}; @@ -19,6 +20,22 @@ pub struct SourceReference { pub range: Range, } +impl Span for SourceReference { + type SourceId = Arc; + + fn source(&self) -> &Self::SourceId { + &self.file + } + + fn start(&self) -> usize { + self.range.start_byte + } + + fn end(&self) -> usize { + self.range.end_byte + } +} + #[derive(Debug, Hash, Eq, PartialEq)] pub struct AstNode { pub reference: SourceReference, diff --git a/interpreter/src/execution/errors.rs b/interpreter/src/execution/errors.rs index 18814ea..bef29b4 100644 --- a/interpreter/src/execution/errors.rs +++ b/interpreter/src/execution/errors.rs @@ -18,6 +18,8 @@ use std::{any::Any, borrow::Cow, fmt::Display}; +use ariadne::{Label, Report, ReportKind}; + use crate::compile::SourceReference; pub type ExpressionResult = std::result::Result; @@ -28,6 +30,18 @@ pub struct Error { pub trace: Vec, } +impl Error { + pub fn report(&self) -> Report<'_, SourceReference> { + let bottom = self.trace.first().expect("Error has no trace").clone(); + + let mut builder = Report::build(ReportKind::Error, bottom.clone()); + builder.set_message("Failed to evaluate"); + builder.add_label(Label::new(bottom).with_message(format!("{}", self.ty))); + + builder.finish() + } +} + impl Display for Error { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { writeln!(f, "{}", self.ty)?; diff --git a/interpreter/src/execution/mod.rs b/interpreter/src/execution/mod.rs index 931ef0b..70b3874 100644 --- a/interpreter/src/execution/mod.rs +++ b/interpreter/src/execution/mod.rs @@ -27,6 +27,7 @@ use crate::{ use rayon::{join, prelude::*}; mod errors; +pub use errors::Error; mod logging; mod stack; mod standard_environment; diff --git a/interpreter/src/execution/values/boolean.rs b/interpreter/src/execution/values/boolean.rs index c296c07..2bb9fec 100644 --- a/interpreter/src/execution/values/boolean.rs +++ b/interpreter/src/execution/values/boolean.rs @@ -61,21 +61,21 @@ impl Object for Boolean { } fn eq(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(self.0 == rhs.0) } fn and(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(Self(self.0 && rhs.0).into()) } fn or(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(Self(self.0 || rhs.0).into()) } fn xor(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(Self((self.0 && rhs.0) || (!self.0 && !rhs.0)).into()) } diff --git a/interpreter/src/execution/values/integer.rs b/interpreter/src/execution/values/integer.rs index 6e657a5..10e42da 100644 --- a/interpreter/src/execution/values/integer.rs +++ b/interpreter/src/execution/values/integer.rs @@ -111,24 +111,24 @@ where } fn bit_and(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(Self(self.0 & rhs.0).into()) } fn bit_or(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(Self(self.0 | rhs.0).into()) } fn bit_xor(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(Self(self.0 ^ rhs.0).into()) } fn cmp(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(self.0.cmp(&rhs.0)) } fn addition(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(Self(self.0.checked_add(&rhs.0).ok_or_else(|| { GenericFailure( "Integer overflow: The computed value is too large to store in the integer".into(), @@ -138,7 +138,7 @@ where .into()) } fn subtraction(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(Self(self.0.checked_sub(&rhs.0).ok_or_else(|| { GenericFailure( "Integer underflow: The computed value is too small to store in the integer".into(), @@ -148,7 +148,7 @@ where .into()) } fn multiply(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(Self(self.0.checked_mul(&rhs.0).ok_or_else(|| { GenericFailure( "Integer overflow: The computed value is too large to store in the integer".into(), @@ -158,7 +158,7 @@ where .into()) } fn divide(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(Self( self.0 .checked_div(&rhs.0) @@ -167,7 +167,7 @@ where .into()) } fn exponent(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; // This failure can only happen on 32bit (or less) systems. let rhs = rhs.0.to_usize().ok_or_else(|| { @@ -186,11 +186,11 @@ where .into()) } fn left_shift(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(Self(self.0 << rhs.0).into()) } fn right_shift(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(Self(self.0 >> rhs.0).into()) } fn unary_plus(self, _context: &ExecutionContext) -> ExpressionResult { @@ -714,7 +714,7 @@ mod methods { this: Integer, other: Value ) -> UnsignedInteger { - let other = other.downcast::>(context.stack_trace)?; + let other = other.downcast_for_binary_op::>(context.stack_trace)?; Ok(UnsignedInteger::from(this.0.abs_diff(other.0))) } ); @@ -752,7 +752,7 @@ mod methods { this: Integer, rhs: Value ) -> Integer { - let rhs = rhs.downcast::>(context.stack_trace)?; + let rhs = rhs.downcast_for_binary_op::>(context.stack_trace)?; Ok(Integer::::from(this.0.midpoint(rhs.0))) } ); diff --git a/interpreter/src/execution/values/list.rs b/interpreter/src/execution/values/list.rs index bd73ac3..b7e48b1 100644 --- a/interpreter/src/execution/values/list.rs +++ b/interpreter/src/execution/values/list.rs @@ -145,7 +145,7 @@ impl Object for List { } fn eq(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(self.values == rhs.values) } diff --git a/interpreter/src/execution/values/mod.rs b/interpreter/src/execution/values/mod.rs index d8a79db..4e8329b 100644 --- a/interpreter/src/execution/values/mod.rs +++ b/interpreter/src/execution/values/mod.rs @@ -309,7 +309,34 @@ impl ErrorType for DowncastError {} impl Display for DowncastError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "Expected type `{}`, got {}", self.expected, self.got) + write!(f, "Expected `{}`, got {}", self.expected, self.got) + } +} + +#[derive(Debug, Eq, PartialEq)] +pub struct DowncastForBinaryOpError { + pub expected: Cow<'static, str>, + pub got: Cow<'static, str>, +} + +impl ErrorType for DowncastForBinaryOpError {} + +impl Display for DowncastForBinaryOpError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "Left side is `{}`, right side is {}, these must be the same", + self.expected, self.got + ) + } +} + +impl From for DowncastForBinaryOpError { + fn from(error: DowncastError) -> Self { + Self { + expected: error.expected, + got: error.got, + } } } @@ -323,6 +350,22 @@ impl IntoVariant for Value { } impl Value { + pub fn downcast_for_binary_op_ref(&self, stack_trace: &StackTrace) -> ExpressionResult<&T> + where + T: StaticTypeName, + Self: AsVariant, + { + self.downcast_ref(stack_trace).map_err(|error| error.into()) + } + + pub fn downcast_for_binary_op(self, stack_trace: &StackTrace) -> ExpressionResult + where + T: StaticTypeName, + Self: IntoVariant, + { + self.downcast(stack_trace).map_err(|error| error.into()) + } + pub fn downcast_ref(&self, stack_trace: &StackTrace) -> ExpressionResult<&T> where T: StaticTypeName, @@ -331,7 +374,7 @@ impl Value { if let Some(value) = self.enum_downcast_ref() { Ok(value) } else { - Err(DowncastError { + Err(DowncastForBinaryOpError { expected: T::static_type_name().into(), got: self.type_name(), } @@ -346,7 +389,7 @@ impl Value { { match self.into_variant() { Ok(value) => Ok(value), - Err(original) => Err(DowncastError { + Err(original) => Err(DowncastForBinaryOpError { expected: T::static_type_name().into(), got: original.type_name(), } @@ -361,7 +404,7 @@ impl Value { { match self { Self::ValueNone(_) => Ok(None), - this => Ok(Some(this.downcast::(stack_trace)?)), + this => Ok(Some(this.downcast_for_binary_op::(stack_trace)?)), } } } diff --git a/interpreter/src/execution/values/scalar.rs b/interpreter/src/execution/values/scalar.rs index a8e5209..2fb0e3f 100644 --- a/interpreter/src/execution/values/scalar.rs +++ b/interpreter/src/execution/values/scalar.rs @@ -33,7 +33,7 @@ use crate::{ }, }; -use super::{value_type::ValueType, DowncastError, Object, StaticTypeName, Value}; +use super::{value_type::ValueType, DowncastForBinaryOpError, Object, StaticTypeName, Value}; pub trait UnwrapNotNan: Sized { fn unwrap_not_nan(self, stack_trace: &StackTrace) -> ExpressionResult; @@ -169,17 +169,17 @@ impl Object for Scalar { .into()) } fn multiply(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs = rhs.downcast_ref::(context.stack_trace)?; + let rhs = rhs.downcast_for_binary_op_ref::(context.stack_trace)?; self.multiply_by_scalar(context.stack_trace, rhs) .map(|rhs| rhs.into()) } fn divide(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs = rhs.downcast_ref::(context.stack_trace)?; + let rhs = rhs.downcast_for_binary_op_ref::(context.stack_trace)?; self.divide_by_measurement(context.stack_trace, rhs) .map(|rhs| rhs.into()) } fn exponent(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs = rhs.downcast::(context.stack_trace)?; + let rhs = rhs.downcast_for_binary_op::(context.stack_trace)?; Ok(Scalar { dimension: self.dimension * *rhs.value as i8, value: Float::new(self.value.powf(*rhs.value)).unwrap_not_nan(context.stack_trace)?, @@ -197,11 +197,11 @@ impl Object for Scalar { .into()) } fn cmp(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs = rhs.downcast_ref::(context.stack_trace)?; + let rhs = rhs.downcast_for_binary_op_ref::(context.stack_trace)?; if self.dimension == rhs.dimension { Ok(std::cmp::Ord::cmp(&self.value, &rhs.value)) } else { - Err(DowncastError { + Err(DowncastForBinaryOpError { expected: self.type_name(), got: rhs.type_name(), } @@ -324,14 +324,14 @@ impl Scalar { if self.dimension == rhs.dimension { Ok(rhs) } else { - Err(DowncastError { + Err(DowncastForBinaryOpError { expected: self.type_name(), got: rhs.type_name(), } .to_error(stack_trace)) } } else { - Err(DowncastError { + Err(DowncastForBinaryOpError { expected: self.type_name(), got: rhs.type_name(), } @@ -534,7 +534,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { }) }, formula = |context: &ExecutionContext, value: Value| -> ExpressionResult { - let value = value.downcast::(context.stack_trace)?; + let value = value.downcast_for_binary_op::(context.stack_trace)?; Ok(Scalar { dimension: value.dimension / 2, @@ -542,7 +542,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { }.into()) }, inverse = |context: &ExecutionContext, value: Value| -> ExpressionResult { - let value = value.downcast::(context.stack_trace)?; + let value = value.downcast_for_binary_op::(context.stack_trace)?; Ok(Scalar { dimension: value.dimension * 2, diff --git a/interpreter/src/execution/values/string/mod.rs b/interpreter/src/execution/values/string/mod.rs index 4dcd392..2b92c95 100644 --- a/interpreter/src/execution/values/string/mod.rs +++ b/interpreter/src/execution/values/string/mod.rs @@ -78,7 +78,7 @@ impl Object for IString { } fn eq(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: &Self = rhs.downcast_ref(context.stack_trace)?; + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; Ok(self.0 == rhs.0) } diff --git a/interpreter/src/execution/values/value_type.rs b/interpreter/src/execution/values/value_type.rs index 7286223..25a7d74 100644 --- a/interpreter/src/execution/values/value_type.rs +++ b/interpreter/src/execution/values/value_type.rs @@ -215,7 +215,7 @@ impl Object for ValueType { } fn bit_or(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: Self = rhs.downcast(context.stack_trace)?; + let rhs: Self = rhs.downcast_for_binary_op(context.stack_trace)?; Ok(self.merge(rhs).into()) } diff --git a/interpreter/src/execution/values/vector.rs b/interpreter/src/execution/values/vector.rs index e5df099..aedb2d1 100644 --- a/interpreter/src/execution/values/vector.rs +++ b/interpreter/src/execution/values/vector.rs @@ -11,8 +11,8 @@ use crate::{ logging::StackTrace, values::{ closure::BuiltinCallableDatabase, scalar::UnwrapNotNan, string::formatting::Style, - BuiltinFunction, DowncastError, MissingAttributeError, Object, Scalar, StaticType, - StaticTypeName, Value, ValueType, + BuiltinFunction, DowncastForBinaryOpError, MissingAttributeError, Object, Scalar, + StaticType, StaticTypeName, Value, ValueType, }, ExecutionContext, }, @@ -90,14 +90,14 @@ where Ok(Self::new_raw(context, self.dimension, value)?.into()) } fn multiply(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs = rhs.downcast_ref::(context.stack_trace)?; + let rhs = rhs.downcast_for_binary_op_ref::(context.stack_trace)?; let value = self.value * *rhs.value; let dimension = self.dimension + rhs.dimension; Ok(Self::new_raw(context, dimension, value)?.into()) } fn divide(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs = rhs.downcast_ref::(context.stack_trace)?; + let rhs = rhs.downcast_for_binary_op_ref::(context.stack_trace)?; let value = self.value / *rhs.value; let dimension = self.dimension - rhs.dimension; @@ -115,7 +115,7 @@ where } fn eq(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs: Self = rhs.downcast(context.stack_trace)?; + let rhs: Self = rhs.downcast_for_binary_op(context.stack_trace)?; Ok(self.dimension == rhs.dimension && self.value == rhs.value) } @@ -219,12 +219,12 @@ where } fn unpack_same_dimension(self, stack_trace: &StackTrace, rhs: Value) -> ExpressionResult { - let rhs: Vector = rhs.downcast(stack_trace)?; + let rhs: Vector = rhs.downcast_for_binary_op(stack_trace)?; if self.dimension == rhs.dimension { Ok(rhs) } else { - Err(DowncastError { + Err(DowncastForBinaryOpError { expected: self.type_name(), got: rhs.type_name(), } @@ -342,7 +342,7 @@ mod methods { let value = this.value.add_scalar(*value.value); Vector::new_raw(context, this.dimension, value) } else { - Err(DowncastError { + Err(DowncastForBinaryOpError { expected: this.type_name(), got: value.type_name(), } @@ -394,7 +394,7 @@ mod methods { value }) } else { - Err(DowncastError { + Err(DowncastForBinaryOpError { expected: this.type_name(), got: rhs.type_name(), } @@ -433,7 +433,7 @@ mod methods { this: Vector, other: Value) -> Scalar { - let other = other.downcast::>(context.stack_trace)?; + let other = other.downcast_for_binary_op::>(context.stack_trace)?; let value = common_data_types::Float::new(this.value.angle(&other.value)).unwrap_not_nan(context.stack_trace)?; Ok(Scalar { @@ -522,7 +522,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { let value = this.value.cross(&rhs.value); Vector3::new_raw(context, this.dimension, value) } else { - Err(DowncastError { + Err(DowncastForBinaryOpError { expected: this.type_name(), got: rhs.type_name(), } diff --git a/interpreter/src/lib.rs b/interpreter/src/lib.rs index 108a695..492dfc4 100644 --- a/interpreter/src/lib.rs +++ b/interpreter/src/lib.rs @@ -21,8 +21,8 @@ pub mod execution; pub use compile::{compile, new_parser, Parser, SourceReference}; pub use execution::{ - build_prelude, execute_expression, values, ExecutionContext, LogLevel, LogMessage, RuntimeLog, - StackScope, StackTrace, + build_prelude, execute_expression, values, Error, ExecutionContext, LogLevel, LogMessage, + RuntimeLog, StackScope, StackTrace, }; pub use imstr::ImString; pub use tree_sitter::{Point as TextPoint, Range as TextRange}; From 5ba15d57cfd28fc38a5559ae55ced10bdb6a2ab0 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 18 Jan 2026 03:37:09 -0500 Subject: [PATCH 081/106] Fix scalars exponenting with any kind of scalar --- interpreter/src/execution/values/scalar.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/interpreter/src/execution/values/scalar.rs b/interpreter/src/execution/values/scalar.rs index 2fb0e3f..4c65196 100644 --- a/interpreter/src/execution/values/scalar.rs +++ b/interpreter/src/execution/values/scalar.rs @@ -31,6 +31,7 @@ use crate::{ }, ExecutionContext, }, + values::DowncastError, }; use super::{value_type::ValueType, DowncastForBinaryOpError, Object, StaticTypeName, Value}; @@ -179,12 +180,22 @@ impl Object for Scalar { .map(|rhs| rhs.into()) } fn exponent(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let rhs = rhs.downcast_for_binary_op::(context.stack_trace)?; - Ok(Scalar { - dimension: self.dimension * *rhs.value as i8, - value: Float::new(self.value.powf(*rhs.value)).unwrap_not_nan(context.stack_trace)?, + let rhs = rhs.downcast::(context.stack_trace)?; + + if rhs.dimension == Dimension::zero() { + Ok(Scalar { + dimension: self.dimension * *rhs.value as i8, + value: Float::new(self.value.powf(*rhs.value)) + .unwrap_not_nan(context.stack_trace)?, + } + .into()) + } else { + Err(DowncastError { + expected: ValueType::Scalar(Some(Dimension::zero())).name(), + got: rhs.get_type(context).name(), + } + .to_error(context.stack_trace)) } - .into()) } fn unary_plus(self, _context: &ExecutionContext) -> ExpressionResult { Ok(self.clone().into()) From c90ac2c34301f80a86137b59d1197ce843ba1c37 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 18 Jan 2026 03:27:52 -0500 Subject: [PATCH 082/106] Report missing syntax --- interpreter/src/compile/expressions.rs | 57 ++++++++++++++++++- interpreter/src/compile/formula.rs | 44 +++++++++++++- interpreter/src/compile/mod.rs | 25 +++++++- interpreter/src/execution/mod.rs | 12 +++- interpreter/src/execution/values/mod.rs | 4 +- .../test/corpus/errors.txt | 15 +++++ 6 files changed, 149 insertions(+), 8 deletions(-) create mode 100644 tree-sitter-command-cad-model/test/corpus/errors.txt diff --git a/interpreter/src/compile/expressions.rs b/interpreter/src/compile/expressions.rs index 70e8409..edf259e 100644 --- a/interpreter/src/compile/expressions.rs +++ b/interpreter/src/compile/expressions.rs @@ -7,7 +7,7 @@ use type_sitter::{HasChild, Node}; use unwrap_enum::EnumAs; use crate::{ - compile::{formula::Formula, Scalar}, + compile::{formula::Formula, unwrap_missing, Scalar}, execution::find_all_variable_accesses_in_expression, }; @@ -110,6 +110,7 @@ pub enum Expression { MethodCall(AstNode>), LetIn(AstNode>), Formula(AstNode), + Missing(ImString), } impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for Expression { @@ -118,6 +119,8 @@ impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for Expression { input: &'i str, value: nodes::BinaryExpression<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -134,6 +137,8 @@ impl<'t> Parse<'t, nodes::Formula<'t>> for Expression { input: &'i str, value: nodes::Formula<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -148,6 +153,8 @@ impl<'t> Parse<'t, nodes::Boolean<'t>> for Expression { input: &'i str, value: nodes::Boolean<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -162,6 +169,8 @@ impl<'t> Parse<'t, nodes::ClosureDefinition<'t>> for Expression { input: &'i str, value: nodes::ClosureDefinition<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -176,6 +185,8 @@ impl<'t> Parse<'t, nodes::DictionaryConstruction<'t>> for Expression { input: &'i str, value: nodes::DictionaryConstruction<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -190,6 +201,8 @@ impl<'t> Parse<'t, nodes::If<'t>> for Expression { input: &'i str, value: nodes::If<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -204,6 +217,8 @@ impl<'t> Parse<'t, nodes::List<'t>> for Expression { input: &'i str, value: nodes::List<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + let mut cursor = value.walk(); let mut list = Vec::new(); @@ -227,6 +242,8 @@ impl<'t> Parse<'t, nodes::Parenthesis<'t>> for Expression { input: &'i str, value: nodes::Parenthesis<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + let expression = value.expression()?; Ok(AstNode::new( file, @@ -242,6 +259,8 @@ impl<'t> Parse<'t, nodes::MemberAccess<'t>> for Expression { input: &'i str, value: nodes::MemberAccess<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -270,6 +289,8 @@ impl<'t> Parse<'t, nodes::Scalar<'t>> for Expression { input: &'i str, value: nodes::Scalar<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -284,6 +305,8 @@ impl<'t> Parse<'t, nodes::Vector2<'t>> for Expression { input: &'i str, value: nodes::Vector2<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -298,6 +321,8 @@ impl<'t> Parse<'t, nodes::Vector3<'t>> for Expression { input: &'i str, value: nodes::Vector3<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -312,6 +337,8 @@ impl<'t> Parse<'t, nodes::Vector4<'t>> for Expression { input: &'i str, value: nodes::Vector4<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -326,6 +353,8 @@ impl<'t> Parse<'t, nodes::SignedInteger<'t>> for Expression { input: &'i str, value: nodes::SignedInteger<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -340,6 +369,8 @@ impl<'t> Parse<'t, nodes::UnsignedInteger<'t>> for Expression { input: &'i str, value: nodes::UnsignedInteger<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -356,6 +387,8 @@ impl<'t> Parse<'t, nodes::String<'t>> for Expression { ) -> Result, Error<'t, 'i>> { static ESCAPE_SEQUENCES: &[(&str, &str); 3] = &[("\"", "\\\""), ("\n", "\\n"), ("\\", "\\\\")]; + unwrap_missing(&value)?; + let raw_text = &input[value.byte_range()]; let raw_text = &raw_text[1..raw_text.len() - 1]; @@ -382,6 +415,8 @@ impl<'t> Parse<'t, nodes::StructDefinition<'t>> for Expression { input: &'i str, value: nodes::StructDefinition<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -396,6 +431,8 @@ impl<'t> Parse<'t, nodes::UnaryExpression<'t>> for Expression { input: &'i str, value: nodes::UnaryExpression<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -412,6 +449,8 @@ impl<'t> Parse<'t, nodes::FunctionCall<'t>> for Expression { input: &'i str, value: nodes::FunctionCall<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -426,6 +465,8 @@ impl<'t> Parse<'t, nodes::MethodCall<'t>> for Expression { input: &'i str, value: nodes::MethodCall<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -440,6 +481,8 @@ impl<'t> Parse<'t, nodes::LetIn<'t>> for Expression { input: &'i str, node: nodes::LetIn<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&node)?; + Ok(AstNode::new( file, &node, @@ -456,7 +499,7 @@ impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { ) -> Result, Error<'t, 'i>> { type ChildType<'t> = as HasChild<'t>>::Child; - match value.child()? { + let result = match value.child()? { ChildType::BinaryExpression(binary_expression) => { Self::parse(file, input, binary_expression) } @@ -496,6 +539,16 @@ impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { ChildType::MethodCall(method_call) => Self::parse(file, input, method_call), ChildType::Formula(formula) => Self::parse(file, input, formula), ChildType::LetIn(let_in) => Self::parse(file, input, let_in), + }; + + match result { + Ok(expression) => Ok(expression), + Err(Error::Missing(kind)) => Ok(AstNode::new( + file, + &value, + Self::Missing(ImString::from(kind)), + )), + Err(error) => Err(error), } } } diff --git a/interpreter/src/compile/formula.rs b/interpreter/src/compile/formula.rs index 032803f..f547b4f 100644 --- a/interpreter/src/compile/formula.rs +++ b/interpreter/src/compile/formula.rs @@ -18,7 +18,7 @@ use std::{path::PathBuf, sync::Arc}; -use crate::compile::{nodes, Error, Parse}; +use crate::compile::{nodes, unwrap_missing, Error, Parse}; use super::{AstNode, Scalar}; use imstr::ImString; @@ -37,6 +37,8 @@ impl<'t> Parse<'t, nodes::Formula<'t>> for Formula { input: &'i str, value: nodes::Formula<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + let left = Expression::parse(file, input, value.lhs()?)?; let right = Expression::parse(file, input, value.rhs()?)?; @@ -97,6 +99,8 @@ impl<'t> Parse<'t, nodes::FormulaExpression<'t>> for Expression { ) -> Result, Error<'t, 'i>> { type ChildType<'t> = as HasChild<'t>>::Child; + unwrap_missing(&value)?; + match value.child()? { ChildType::FormulaBinaryExpression(binary_expression) => { Self::parse(file, input, binary_expression) @@ -133,6 +137,8 @@ impl<'t> Parse<'t, nodes::FormulaBinaryExpression<'t>> for Expression { input: &'i str, value: nodes::FormulaBinaryExpression<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -147,6 +153,8 @@ impl<'t> Parse<'t, nodes::Boolean<'t>> for Expression { input: &'i str, value: nodes::Boolean<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -161,6 +169,8 @@ impl<'t> Parse<'t, nodes::FormulaParenthesis<'t>> for Expression { input: &'i str, value: nodes::FormulaParenthesis<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + let expression = value.formula_expression()?; Ok(AstNode::new( file, @@ -176,6 +186,8 @@ impl<'t> Parse<'t, nodes::Scalar<'t>> for Expression { input: &'i str, value: nodes::Scalar<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -190,6 +202,8 @@ impl<'t> Parse<'t, nodes::FormulaVector2<'t>> for Expression { input: &'i str, value: nodes::FormulaVector2<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -204,6 +218,8 @@ impl<'t> Parse<'t, nodes::FormulaVector3<'t>> for Expression { input: &'i str, value: nodes::FormulaVector3<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -218,6 +234,8 @@ impl<'t> Parse<'t, nodes::FormulaVector4<'t>> for Expression { input: &'i str, value: nodes::FormulaVector4<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -232,6 +250,8 @@ impl<'t> Parse<'t, nodes::SignedInteger<'t>> for Expression { input: &'i str, value: nodes::SignedInteger<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -246,6 +266,8 @@ impl<'t> Parse<'t, nodes::UnsignedInteger<'t>> for Expression { input: &'i str, value: nodes::UnsignedInteger<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -260,6 +282,8 @@ impl<'t> Parse<'t, nodes::FormulaUnaryExpression<'t>> for Expression { input: &'i str, value: nodes::FormulaUnaryExpression<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -274,6 +298,8 @@ impl<'t> Parse<'t, nodes::FormulaFunctionCall<'t>> for Expression { input: &'i str, value: nodes::FormulaFunctionCall<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -288,6 +314,8 @@ impl<'t> Parse<'t, nodes::FormulaMethodCall<'t>> for Expression { input: &'i str, value: nodes::FormulaMethodCall<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + Ok(AstNode::new( file, &value, @@ -315,6 +343,8 @@ impl<'t> Parse<'t, nodes::FormulaUnaryExpression<'t>> for UnaryExpression { input: &'i str, value: nodes::FormulaUnaryExpression<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + let operation = value.op()?; let operation = match operation { @@ -367,6 +397,8 @@ impl<'t> Parse<'t, nodes::FormulaBinaryExpression<'t>> for BinaryExpression { input: &'i str, value: nodes::FormulaBinaryExpression<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + type Operation<'t> = nodes::anon_unions::AndAnd_Mul_MulMul_Add_Sub_Div_BitXorBitXor_OrOr<'t>; @@ -411,6 +443,8 @@ impl<'t> Parse<'t, nodes::FormulaVector2<'t>> for Vector2 { input: &'i str, value: nodes::FormulaVector2<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + let x = value.x()?; let x = Expression::parse(file, input, x)?; @@ -434,6 +468,8 @@ impl<'t> Parse<'t, nodes::FormulaVector3<'t>> for Vector3 { input: &'i str, value: nodes::FormulaVector3<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + let x = value.x()?; let x = Expression::parse(file, input, x)?; @@ -461,6 +497,8 @@ impl<'t> Parse<'t, nodes::FormulaVector4<'t>> for Vector4 { input: &'i str, value: nodes::FormulaVector4<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + let x = value.x()?; let x = Expression::parse(file, input, x)?; @@ -489,6 +527,8 @@ impl<'t> Parse<'t, nodes::FormulaFunctionCall<'t>> for FunctionCall { input: &'i str, value: nodes::FormulaFunctionCall<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + let to_call = Expression::parse(file, input, value.to_call()?)?; let argument = Expression::parse(file, input, value.argument()?)?; @@ -509,6 +549,8 @@ impl<'t> Parse<'t, nodes::FormulaMethodCall<'t>> for MethodCall { input: &'i str, value: nodes::FormulaMethodCall<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + let self_dictionary = Expression::parse(file, input, value.self_dictionary()?)?; let to_call = ImString::parse(file, input, value.to_call()?)?; let argument = Expression::parse(file, input, value.argument()?)?; diff --git a/interpreter/src/compile/mod.rs b/interpreter/src/compile/mod.rs index 10416c8..08e3f86 100644 --- a/interpreter/src/compile/mod.rs +++ b/interpreter/src/compile/mod.rs @@ -61,6 +61,14 @@ impl AstNode { } } +fn unwrap_missing<'t, 'i, N: Node<'t> + 't>(value: &N) -> Result<(), Error<'t, 'i>> { + if !value.raw().is_missing() { + Ok(()) + } else { + Err(Error::Missing(value.raw().kind())) + } +} + trait Parse<'t, N: 't>: Sized { fn parse<'i>( file: &Arc, @@ -75,6 +83,7 @@ impl<'t, N: Node<'t> + 't> Parse<'t, N> for ImString { input: &'i str, value: N, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; let text = &input[value.byte_range()]; Ok(AstNode::new(file, &value, ImString::from(text.to_string()))) } @@ -86,6 +95,7 @@ impl<'t> Parse<'t, nodes::Boolean<'t>> for bool { _input: &'i str, value: nodes::Boolean<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; type ChildType<'t> = as HasChild<'t>>::Child; let child = value.child()?; @@ -103,6 +113,7 @@ impl<'t> Parse<'t, nodes::SignedInteger<'t>> for i64 { input: &'i str, value: nodes::SignedInteger<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; let number = value.value()?; let integer = match number.child()? { nodes::anon_unions::BaseTen_Binary_Hex_Octal::Hex(value) => { @@ -137,6 +148,7 @@ impl<'t> Parse<'t, nodes::UnsignedInteger<'t>> for u64 { input: &'i str, value: nodes::UnsignedInteger<'t>, ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; let number = value.value()?; let integer = match number.child()? { nodes::anon_unions::BaseTen_Binary_Hex_Octal::Hex(value) => { @@ -183,6 +195,8 @@ impl<'t> Parse<'t, nodes::Scalar<'t>> for Scalar { dimension: Dimension::zero(), }; + unwrap_missing(&value)?; + // Get the conversion factor using the unit name. let conversion_factor = if let Some(unit_name) = value.unit() { let unit_name = unit_name?; @@ -259,6 +273,7 @@ pub enum Error<'t, 'i> { InvalidUnit(InvalidUnitError<'t, 'i>), ParseInt(ParseIntError<'t>), ParseNumber(ParseNumberError<'t>), + Missing(&'static str), } impl<'t> std::error::Error for Error<'t, '_> {} @@ -267,7 +282,12 @@ impl<'t> std::fmt::Display for Error<'t, '_> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Error::IncorrectKind(incorrect_kind) => { - write!(f, "incorrect node type, expected {}", incorrect_kind.kind) + write!( + f, + "incorrect node type, got {}, expected {}", + incorrect_kind.node.kind(), + incorrect_kind.kind + ) } Error::InvalidUnit(invalid_unit_error) => { write!(f, "invalid scalar unit: {}", invalid_unit_error.name) @@ -278,6 +298,9 @@ impl<'t> std::fmt::Display for Error<'t, '_> { Error::ParseNumber(parse_number_error) => { write!(f, "failed to parse scalar: {}", parse_number_error.error) } + Error::Missing(kind) => { + write!(f, "Missing `{kind}`") + } } } } diff --git a/interpreter/src/execution/mod.rs b/interpreter/src/execution/mod.rs index 70b3874..adeb523 100644 --- a/interpreter/src/execution/mod.rs +++ b/interpreter/src/execution/mod.rs @@ -20,7 +20,11 @@ use std::{cmp::Ordering, collections::HashMap}; use crate::{ compile::{self, AstNode, BinaryExpressionOperation, Expression, UnaryExpressionOperation}, - execution::{stack::ScopeType, values::BuiltinCallableDatabase}, + execution::{ + errors::{GenericFailure, Raise}, + stack::ScopeType, + values::BuiltinCallableDatabase, + }, SourceReference, }; @@ -163,7 +167,8 @@ pub fn find_all_variable_accesses_in_expression( | Expression::SignedInteger(_) | Expression::String(_) | Expression::UnsignedInteger(_) - | Expression::Self_(_) => Ok(()), + | Expression::Self_(_) + | Expression::Missing(_) => Ok(()), } } @@ -294,6 +299,9 @@ pub fn execute_expression( compile::Expression::Formula(formula) => { todo!() } + compile::Expression::Missing(kind) => { + Err(GenericFailure(format!("Missing {kind}").into()).to_error(context.stack_trace)) + } } }) } diff --git a/interpreter/src/execution/values/mod.rs b/interpreter/src/execution/values/mod.rs index 4e8329b..5c2d20f 100644 --- a/interpreter/src/execution/values/mod.rs +++ b/interpreter/src/execution/values/mod.rs @@ -309,7 +309,7 @@ impl ErrorType for DowncastError {} impl Display for DowncastError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "Expected `{}`, got {}", self.expected, self.got) + write!(f, "Expected `{}`, got `{}`", self.expected, self.got) } } @@ -325,7 +325,7 @@ impl Display for DowncastForBinaryOpError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, - "Left side is `{}`, right side is {}, these must be the same", + "Left side is `{}`, right side is `{}`, these must be the same", self.expected, self.got ) } diff --git a/tree-sitter-command-cad-model/test/corpus/errors.txt b/tree-sitter-command-cad-model/test/corpus/errors.txt new file mode 100644 index 0000000..2492f5c --- /dev/null +++ b/tree-sitter-command-cad-model/test/corpus/errors.txt @@ -0,0 +1,15 @@ +================== +Missing second operand +================== + +a + + +--- + +(source_file + (expression + (binary_expression + (expression + (identifier)) + (expression + (MISSING identifier))))) From 0e34b27e1a1228b667bf792c4ec6f82dfbb38ea5 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 18 Jan 2026 10:48:14 -0500 Subject: [PATCH 083/106] Fix stack overflow when displaying Any type --- interpreter/src/execution/values/string/mod.rs | 1 - interpreter/src/execution/values/value_type.rs | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/interpreter/src/execution/values/string/mod.rs b/interpreter/src/execution/values/string/mod.rs index 2b92c95..68b5f3f 100644 --- a/interpreter/src/execution/values/string/mod.rs +++ b/interpreter/src/execution/values/string/mod.rs @@ -457,7 +457,6 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ) -> Scalar { let value = this.0.parse::() .map_err(|error| GenericFailure(format!("Failed to parse scalar value: {error:?}").into()).to_error(context.stack_trace))?; - dbg!(&value); Ok(Scalar { dimension: Dimension::zero(), value, diff --git a/interpreter/src/execution/values/value_type.rs b/interpreter/src/execution/values/value_type.rs index 25a7d74..2becce8 100644 --- a/interpreter/src/execution/values/value_type.rs +++ b/interpreter/src/execution/values/value_type.rs @@ -91,6 +91,7 @@ impl ValueType { Self::Vector4(Option::None) => "Vector4".into(), Self::String => IString::static_type_name().into(), Self::File => File::static_type_name().into(), + Self::Any => "Any".into(), _ => format!("{}", self).into(), } } From 9005682c40290286540863c1ca1e1a366f3dfdba Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 18 Jan 2026 14:14:17 -0500 Subject: [PATCH 084/106] Improve builtin method automatic typing --- interpreter/src/execution/values/closure.rs | 67 +++++++++++---------- interpreter/src/execution/values/integer.rs | 10 ++- interpreter/src/execution/values/scalar.rs | 45 +++++--------- interpreter/src/execution/values/vector.rs | 6 +- 4 files changed, 56 insertions(+), 72 deletions(-) diff --git a/interpreter/src/execution/values/closure.rs b/interpreter/src/execution/values/closure.rs index fc2e90b..3f61ab0 100644 --- a/interpreter/src/execution/values/closure.rs +++ b/interpreter/src/execution/values/closure.rs @@ -479,23 +479,20 @@ macro_rules! build_method_callable { formula = $formula:expr, inverse = $inverse:expr ) => {{ - struct BuiltFunction + struct BuiltFunction where - F: Fn(&$crate::execution::ExecutionContext, S $(, $($ty),*)?) -> ExpressionResult<$crate::execution::values::Value> + F: Fn(&$crate::execution::ExecutionContext, &$crate::execution::values::closure::Signature, $crate::values::Dictionary) -> ExpressionResult<$crate::execution::values::Value> { function: F, formula: FC, inverse: FI, signature: std::sync::Arc<$crate::execution::values::closure::Signature>, name: String, - _self_type: std::marker::PhantomData } - impl $crate::execution::values::closure::BuiltinCallable for BuiltFunction + impl $crate::execution::values::closure::BuiltinCallable for BuiltFunction where - S: Send + Sync + Clone + StaticTypeName, - $crate::execution::values::Value: enum_downcast::AsVariant, - F: Fn(&$crate::execution::ExecutionContext, S $(, $($ty),*)?) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync, + F: Fn(&$crate::execution::ExecutionContext, &$crate::execution::values::closure::Signature, $crate::values::Dictionary) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync, FC: Fn(&$crate::execution::ExecutionContext, $crate::execution::values::Value) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync, FI: Fn(&$crate::execution::ExecutionContext, $crate::execution::values::Value) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync { @@ -504,28 +501,7 @@ macro_rules! build_method_callable { context: &$crate::execution::ExecutionContext, argument: $crate::execution::values::Dictionary, ) -> $crate::execution::errors::ExpressionResult<$crate::execution::values::Value> { - use $crate::execution::errors::Raise; - - let this = context.get_variable( - $crate::execution::logging::LocatedStr { - location: context.stack_trace.bottom().clone(), - string: "self", - }, - )?.downcast_ref::(context.stack_trace)?.clone(); - - self.signature - .argument_type - .check_other_qualifies(argument.struct_def()) - .map_err(|error| error.to_error(context.stack_trace.iter()))?; - - // Argument is potentially unused if we take no arguments. - let mut _argument = self.signature.argument_type.fill_defaults(argument); - - let _data = std::sync::Arc::make_mut(&mut _argument.data); - $($(let $arg: $ty = _data.members.remove(stringify!($arg)) - .expect("Argument was not present after argument check.").downcast(context.stack_trace)?;)*)? - - (self.function)(context, this $(, $($arg),*)?) + (self.function)(context, &self.signature, argument) } fn formula_call( @@ -554,12 +530,41 @@ macro_rules! build_method_callable { } BuiltFunction { - function: move |$context: &$crate::execution::ExecutionContext, $this: $this_type $(, $($arg: $ty),*)?| -> ExpressionResult<$crate::execution::values::Value> { let result: $return_type = $code?; Ok(result.into()) }, + function: move | + $context: &$crate::execution::ExecutionContext, + signature: &$crate::execution::values::closure::Signature, + argument: $crate::execution::values::Dictionary + | -> ExpressionResult<$crate::execution::values::Value> { + // use $crate::execution::errors::Raise; + + let $this = $context.get_variable( + $crate::execution::logging::LocatedStr { + location: $context.stack_trace.bottom().clone(), + string: "self", + }, + )?.downcast_ref::<$this_type>($context.stack_trace)?.clone(); + + signature + .argument_type + .check_other_qualifies(argument.struct_def()) + .map_err(|error| error.to_error($context.stack_trace.iter()))?; + + // Argument is potentially unused if we take no arguments. + let mut _argument = signature.argument_type.fill_defaults(argument); + + let _data = std::sync::Arc::make_mut(&mut _argument.data); + $($(let $arg: $ty = _data.members.remove(stringify!($arg)) + .expect("Argument was not present after argument check.").downcast::<$ty>($context.stack_trace)?;)*)? + + let result: $return_type = { + $code? + }; + Ok(result.into()) + }, formula: $formula, inverse: $inverse, signature: $crate::build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type), name: $name.into(), - _self_type: std::marker::PhantomData } }}; } diff --git a/interpreter/src/execution/values/integer.rs b/interpreter/src/execution/values/integer.rs index 10e42da..b4b7ed3 100644 --- a/interpreter/src/execution/values/integer.rs +++ b/interpreter/src/execution/values/integer.rs @@ -16,7 +16,7 @@ * program. If not, see . */ -use enum_downcast::AsVariant; +use enum_downcast::{AsVariant, IntoVariant}; use num_traits::{ pow::checked_pow, CheckedAdd, CheckedDiv, CheckedMul, CheckedSub, One, ToPrimitive, }; @@ -55,7 +55,7 @@ impl Object for Integer where I: IntOps, Self: StaticTypeName + Into, - Value: AsVariant, + Value: AsVariant + IntoVariant, { fn get_type(&self, _context: &ExecutionContext) -> ValueType { I::static_type() @@ -712,9 +712,8 @@ mod methods { ::AbsDiff, format!("{}::abs_diff", Integer::::static_type_name()), ( context: &ExecutionContext, this: Integer, - other: Value + other: Integer ) -> UnsignedInteger { - let other = other.downcast_for_binary_op::>(context.stack_trace)?; Ok(UnsignedInteger::from(this.0.abs_diff(other.0))) } ); @@ -750,9 +749,8 @@ mod methods { ::Midpoint, format!("{}::midpoint", Integer::::static_type_name()), ( context: &ExecutionContext, this: Integer, - rhs: Value + rhs: Integer ) -> Integer { - let rhs = rhs.downcast_for_binary_op::>(context.stack_trace)?; Ok(Integer::::from(this.0.midpoint(rhs.0))) } ); diff --git a/interpreter/src/execution/values/scalar.rs b/interpreter/src/execution/values/scalar.rs index 4c65196..87a7364 100644 --- a/interpreter/src/execution/values/scalar.rs +++ b/interpreter/src/execution/values/scalar.rs @@ -439,14 +439,11 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, methods::Clamp, "Scalar::clamp", ( - context: &ExecutionContext, + _context: &ExecutionContext, this: Scalar, - min: Value, - max: Value) -> Scalar + min: Scalar, + max: Scalar) -> Scalar { - let min = this.unpack_same_dimension(context.stack_trace, min)?; - let max = this.unpack_same_dimension(context.stack_trace, max)?; - Ok(Scalar { dimension: this.dimension, value: this.value.clamp(min.value, max.value) @@ -471,10 +468,8 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { methods::Hypot, "Scalar::hypot", ( context: &ExecutionContext, this: Scalar, - other: Value) -> Scalar + other: Scalar) -> Scalar { - let other = this.unpack_same_dimension(context.stack_trace, other)?; - Ok(Scalar { dimension: Dimension::zero(), value: Float::new(this.value.hypot(*other.value)).unwrap_not_nan(context.stack_trace)? @@ -596,9 +591,9 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { methods::Round, "Scalar::round", ( context: &ExecutionContext, this: Scalar, - unit: Value) -> Scalar + unit: Scalar) -> Scalar { - let unit = this.unpack_same_dimension(context.stack_trace, unit)?; + let unit = this.unpack_same_dimension(context.stack_trace, unit.into())?; let value = this.value / unit.value; @@ -613,10 +608,8 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { methods::Trunc, "Scalar::trunc", ( context: &ExecutionContext, this: Scalar, - unit: Value) -> Scalar + unit: Scalar) -> Scalar { - let unit = this.unpack_same_dimension(context.stack_trace, unit)?; - let value = this.value / unit.value; Ok(Scalar { @@ -630,10 +623,8 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { methods::Fract, "Scalar::fract", ( context: &ExecutionContext, this: Scalar, - unit: Value) -> Scalar + unit: Scalar) -> Scalar { - let unit = this.unpack_same_dimension(context.stack_trace, unit)?; - let value = this.value / unit.value; Ok(Scalar { @@ -647,10 +638,8 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { methods::Floor, "Scalar::floor", ( context: &ExecutionContext, this: Scalar, - unit: Value) -> Scalar + unit: Scalar) -> Scalar { - let unit = this.unpack_same_dimension(context.stack_trace, unit)?; - let value = this.value / unit.value; Ok(Scalar { @@ -664,10 +653,8 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { methods::Ceil, "Scalar::ceil", ( context: &ExecutionContext, this: Scalar, - unit: Value) -> Scalar + unit: Scalar) -> Scalar { - let unit = this.unpack_same_dimension(context.stack_trace, unit)?; - let value = this.value / unit.value; Ok(Scalar { @@ -679,12 +666,10 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, methods::Max, "Scalar::max", ( - context: &ExecutionContext, + _context: &ExecutionContext, this: Scalar, - other: Value) -> Scalar + other: Scalar) -> Scalar { - let other = this.unpack_same_dimension(context.stack_trace, other)?; - Ok(Scalar { dimension: this.dimension, value: this.value.max(other.value) @@ -694,12 +679,10 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { build_method!( database, methods::Min, "Scalar::min", ( - context: &ExecutionContext, + _context: &ExecutionContext, this: Scalar, - other: Value) -> Scalar + other: Scalar) -> Scalar { - let other = this.unpack_same_dimension(context.stack_trace, other)?; - Ok(Scalar { dimension: this.dimension, value: this.value.min(other.value) diff --git a/interpreter/src/execution/values/vector.rs b/interpreter/src/execution/values/vector.rs index aedb2d1..bda795e 100644 --- a/interpreter/src/execution/values/vector.rs +++ b/interpreter/src/execution/values/vector.rs @@ -383,9 +383,8 @@ mod methods { M::Dot, format!("Vector{dimension}::dot"), ( context: &ExecutionContext, this: Vector, - rhs: Value) -> Scalar + rhs: Vector) -> Scalar { - let rhs = rhs.downcast::>(context.stack_trace)?; if this.dimension == rhs.dimension { let value = common_data_types::Float::new(this.value.dot(&rhs.value)).unwrap_not_nan(context.stack_trace)?; @@ -431,9 +430,8 @@ mod methods { M::Angle, format!("Vector{dimension}::angle"),( context: &ExecutionContext, this: Vector, - other: Value) -> Scalar + other: Vector) -> Scalar { - let other = other.downcast_for_binary_op::>(context.stack_trace)?; let value = common_data_types::Float::new(this.value.angle(&other.value)).unwrap_not_nan(context.stack_trace)?; Ok(Scalar { From 026cffebad0ef056baf5b28ea7fb337f07e39c5b Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 18 Jan 2026 03:46:29 -0500 Subject: [PATCH 085/106] Unamed units are now indicated with a question mark --- units/src/lib.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/units/src/lib.rs b/units/src/lib.rs index 5ff47d1..002c0e9 100644 --- a/units/src/lib.rs +++ b/units/src/lib.rs @@ -61,5 +61,11 @@ pub fn get_base_unit_name(dimension: &Dimension) -> Option<&'static str> { static BASE_UNITS: OnceLock = OnceLock::new(); let database = BASE_UNITS.get_or_init(|| include!(concat!(env!("OUT_DIR"), "/base_units.rs"))); - database.get(dimension).map(|cow| cow.borrow()) + let name = database.get(dimension).map(|cow| cow.borrow()); + + match name { + Some(name) => Some(name), + Option::None if *dimension != Dimension::zero() => Some("?"), + _ => Option::None, + } } From edf960cd52639bed3107ddef590280ab603a1c7b Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 18 Jan 2026 22:03:31 -0500 Subject: [PATCH 086/106] Improve syntax error reporting --- Cargo.lock | 2 + Cargo.toml | 2 + cli/Cargo.toml | 2 + cli/src/main.rs | 64 ++++++++++++++++++++++++-- interpreter/Cargo.toml | 4 +- interpreter/src/compile/expressions.rs | 17 ++----- interpreter/src/compile/mod.rs | 48 +++++++++++++++++-- interpreter/src/execution/mod.rs | 9 ++-- 8 files changed, 118 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cb048b6..3cb8169 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -233,6 +233,8 @@ dependencies = [ "interpreter", "reedline", "termimad", + "tree-sitter", + "type-sitter", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a179ed1..927c2f9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,3 +20,5 @@ default-members = [ [workspace.dependencies] ariadne = "0.6.0" +type-sitter = "0.8" +tree-sitter = "0.25" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 0319c2a..9a663ca 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -10,3 +10,5 @@ termimad = "0.34.1" interpreter = { path = "../interpreter/" } anyhow = "1.0.100" ariadne = { workspace = true } +type-sitter = { workspace = true } +tree-sitter = { workspace = true } diff --git a/cli/src/main.rs b/cli/src/main.rs index 6503812..c4d0aa4 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -3,18 +3,22 @@ use std::{collections::HashMap, path::PathBuf, sync::Arc}; mod arguments; use anyhow::{anyhow, Context, Result}; use arguments::Arguments; -use ariadne::{Cache, Source}; +use ariadne::{Cache, Label, Report, ReportKind, Source}; use clap::Parser as _; use reedline::{DefaultPrompt, Reedline, Signal}; +use type_sitter::Node as _; use crate::arguments::Commands; use interpreter::{ - build_prelude, compile, execute_expression, + build_prelude, + compile::{compile, iter_raw_nodes}, + execute_expression, execution::values::BuiltinCallableDatabase, new_parser, values::{Object, Style, Value}, - ExecutionContext, ImString, LogMessage, Parser, RuntimeLog, StackScope, StackTrace, + ExecutionContext, ImString, LogMessage, Parser, RuntimeLog, SourceReference, StackScope, + StackTrace, }; fn main() { @@ -88,6 +92,50 @@ fn repl() { } } +fn build_syntax_errors<'t>( + tree: &'t interpreter::compile::RootTree, + repl_file: &'t Arc, + span: SourceReference, +) -> Option> { + let mut report_builder = Report::build(ReportKind::Error, span); + report_builder.set_message("Syntax issues found while parsing"); + + let mut has_syntax_issues = false; + + for node in iter_raw_nodes(tree) { + if node.is_missing() { + let kind = node.raw().kind(); + report_builder.add_label( + Label::new(SourceReference { + file: repl_file.clone(), + range: node.range(), + }) + .with_message(format!("Missing expected node `{kind}`")), + ); + + has_syntax_issues = true; + } + + if node.is_error() { + report_builder.add_label( + Label::new(SourceReference { + file: repl_file.clone(), + range: node.range(), + }) + .with_message("Could not parse node"), + ); + + has_syntax_issues = true; + } + } + + if has_syntax_issues { + Some(report_builder.finish()) + } else { + Option::None + } +} + fn run_line( parser: &mut Parser, prelude: &HashMap, @@ -95,11 +143,11 @@ fn run_line( repl_file: &Arc, input: &str, ) -> Result<()> { - let root = parser + let tree = parser .parse(input, None) .map_err(|error| anyhow!("Failed to parse input: {error:?}"))?; let root = - compile(&repl_file, input, &root).map_err(|error| anyhow!("Failed to compile: {error}"))?; + compile(&repl_file, input, &tree).map_err(|error| anyhow!("Failed to compile: {error}"))?; let log = StderrLog; let context = ExecutionContext { @@ -109,6 +157,12 @@ fn run_line( database: &database, }; + if let Some(report) = build_syntax_errors(&tree, repl_file, root.reference.clone()) { + report + .eprint(ReplFileCache(Source::from(input))) + .context("Failed to format syntax error message")?; + } + let result = execute_expression(&context, &root); match result { diff --git a/interpreter/Cargo.toml b/interpreter/Cargo.toml index 8fbf68c..356c35a 100644 --- a/interpreter/Cargo.toml +++ b/interpreter/Cargo.toml @@ -6,9 +6,9 @@ edition = "2021" [dependencies] common_data_types = { path = "../common_data_types" } units = { path = "../units" } -tree-sitter = "0.25" +tree-sitter = { workspace = true } tree-sitter-command-cad-model = { path = "../tree-sitter-command-cad-model" } -type-sitter = "0.8" +type-sitter = { workspace = true } unwrap-enum = "0.1.0" file-guard = "0.2.0" enum_dispatch = "0.3" diff --git a/interpreter/src/compile/expressions.rs b/interpreter/src/compile/expressions.rs index edf259e..c1cf89a 100644 --- a/interpreter/src/compile/expressions.rs +++ b/interpreter/src/compile/expressions.rs @@ -2,7 +2,6 @@ use std::{cmp::Ordering, collections::HashSet, path::PathBuf, sync::Arc}; use hashable_map::HashableSet; use imstr::ImString; -use nodes::SourceFile; use type_sitter::{HasChild, Node}; use unwrap_enum::EnumAs; @@ -110,7 +109,7 @@ pub enum Expression { MethodCall(AstNode>), LetIn(AstNode>), Formula(AstNode), - Missing(ImString), + Malformed(ImString), } impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for Expression { @@ -543,10 +542,10 @@ impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { match result { Ok(expression) => Ok(expression), - Err(Error::Missing(kind)) => Ok(AstNode::new( + Err(Error::Malformed(kind)) => Ok(AstNode::new( file, &value, - Self::Missing(ImString::from(kind)), + Self::Malformed(ImString::from(kind)), )), Err(error) => Err(error), } @@ -1211,16 +1210,6 @@ pub fn new_parser() -> Parser { .expect("Error loading CommandCadModel grammar") } -pub fn compile<'t, 'i>( - file: &Arc, - input: &'i str, - tree: &'t type_sitter::Tree>, -) -> Result, Error<'t, 'i>> { - let root = tree.root_node()?; - - Expression::parse(file, input, root.expression()?) -} - #[cfg(test)] mod test { use crate::compile::full_compile; diff --git a/interpreter/src/compile/mod.rs b/interpreter/src/compile/mod.rs index 08e3f86..edf1b9b 100644 --- a/interpreter/src/compile/mod.rs +++ b/interpreter/src/compile/mod.rs @@ -6,7 +6,7 @@ use common_data_types::{ConversionFactor, Dimension, Float, RawFloat}; use imstr::ImString; use std::{path::PathBuf, sync::Arc}; use tree_sitter::Range; -use type_sitter::{HasChild, IncorrectKind, Node}; +use type_sitter::{HasChild, IncorrectKind, Node, UntypedNode}; pub use expressions::*; @@ -62,10 +62,10 @@ impl AstNode { } fn unwrap_missing<'t, 'i, N: Node<'t> + 't>(value: &N) -> Result<(), Error<'t, 'i>> { - if !value.raw().is_missing() { + if !value.has_error() { Ok(()) } else { - Err(Error::Missing(value.raw().kind())) + Err(Error::Malformed(value.raw().kind())) } } @@ -273,7 +273,7 @@ pub enum Error<'t, 'i> { InvalidUnit(InvalidUnitError<'t, 'i>), ParseInt(ParseIntError<'t>), ParseNumber(ParseNumberError<'t>), - Missing(&'static str), + Malformed(&'static str), } impl<'t> std::error::Error for Error<'t, '_> {} @@ -298,7 +298,7 @@ impl<'t> std::fmt::Display for Error<'t, '_> { Error::ParseNumber(parse_number_error) => { write!(f, "failed to parse scalar: {}", parse_number_error.error) } - Error::Missing(kind) => { + Error::Malformed(kind) => { write!(f, "Missing `{kind}`") } } @@ -323,6 +323,44 @@ impl<'t> From> for Error<'t, '_> { } } +pub fn compile<'t, 'i>( + file: &Arc, + input: &'i str, + tree: &'t RootTree, +) -> Result, Error<'t, 'i>> { + let root = tree.root_node()?; + + Expression::parse(file, input, root.expression()?) +} + +pub type RootTree = type_sitter::Tree>; + +pub fn iter_raw_nodes<'t>(tree: &'t RootTree) -> impl Iterator> { + let mut cursor: type_sitter::TreeCursor = tree.walk(); + + std::iter::from_fn(move || loop { + let node = cursor.node(); + + // Go to the first child, or the next sibling. + if cursor.goto_first_child() || cursor.goto_next_sibling() { + break Some(node); + } else { + // No more children. + // Work your way back up the tree until you can reach another sibling, or you reach the + // root. + loop { + if !cursor.goto_parent() { + // We have reached the root. We are done iterating. + return Option::None; + } + if cursor.goto_next_sibling() { + return Some(node); + } + } + } + }) +} + /// Compiles a full document. Panics if there are any issues. /// This is for testing only. #[cfg(test)] diff --git a/interpreter/src/execution/mod.rs b/interpreter/src/execution/mod.rs index adeb523..9aec9e3 100644 --- a/interpreter/src/execution/mod.rs +++ b/interpreter/src/execution/mod.rs @@ -168,7 +168,7 @@ pub fn find_all_variable_accesses_in_expression( | Expression::String(_) | Expression::UnsignedInteger(_) | Expression::Self_(_) - | Expression::Missing(_) => Ok(()), + | Expression::Malformed(_) => Ok(()), } } @@ -299,9 +299,10 @@ pub fn execute_expression( compile::Expression::Formula(formula) => { todo!() } - compile::Expression::Missing(kind) => { - Err(GenericFailure(format!("Missing {kind}").into()).to_error(context.stack_trace)) - } + compile::Expression::Malformed(kind) => Err(GenericFailure( + format!("Malformed syntax, expected {kind}").into(), + ) + .to_error(context.stack_trace)), } }) } From 3d4d3c4d45099d42adf252ebf8ccfe276b29a57b Mon Sep 17 00:00:00 2001 From: James Carl Date: Mon, 19 Jan 2026 02:45:51 -0500 Subject: [PATCH 087/106] Add default auto-complete suggestions --- Cargo.lock | 1 + cli/Cargo.toml | 1 + cli/src/main.rs | 10 ++++++++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3cb8169..8967234 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -231,6 +231,7 @@ dependencies = [ "ariadne", "clap", "interpreter", + "nu-ansi-term", "reedline", "termimad", "tree-sitter", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 9a663ca..201c41c 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -12,3 +12,4 @@ anyhow = "1.0.100" ariadne = { workspace = true } type-sitter = { workspace = true } tree-sitter = { workspace = true } +nu-ansi-term = "0.50.3" diff --git a/cli/src/main.rs b/cli/src/main.rs index c4d0aa4..d3e1eb9 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -5,7 +5,7 @@ use anyhow::{anyhow, Context, Result}; use arguments::Arguments; use ariadne::{Cache, Label, Report, ReportKind, Source}; use clap::Parser as _; -use reedline::{DefaultPrompt, Reedline, Signal}; +use reedline::{DefaultHinter, DefaultPrompt, Reedline, Signal}; use type_sitter::Node as _; use crate::arguments::Commands; @@ -61,7 +61,13 @@ impl<'i> Cache> for ReplFileCache<'i> { } fn repl() { - let mut line_editor = Reedline::create(); + let mut line_editor = Reedline::create().with_hinter(Box::new( + DefaultHinter::default().with_style( + nu_ansi_term::Style::new() + .italic() + .fg(nu_ansi_term::Color::DarkGray), + ), + )); let prompt = DefaultPrompt::default(); println!("Welcome to REPL mode. Press Ctrl-C or Ctrl-D to exit"); From e49084adb1dceec91109ed91060021f515cb47d9 Mon Sep 17 00:00:00 2001 From: James Carl Date: Mon, 19 Jan 2026 11:06:19 -0500 Subject: [PATCH 088/106] Fix syntax errors discovered in unit tests --- interpreter/src/execution/values/closure.rs | 2 +- interpreter/src/execution/values/integer.rs | 12 ------------ 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/interpreter/src/execution/values/closure.rs b/interpreter/src/execution/values/closure.rs index 3f61ab0..645af42 100644 --- a/interpreter/src/execution/values/closure.rs +++ b/interpreter/src/execution/values/closure.rs @@ -748,7 +748,7 @@ mod test { #[test] fn call_custom_method() { let product = test_run( - "let object = (value = 5u, method = () -> std.types.UInt: self.value;); in object::method()", + "let object = (value = 5u, method = () -> std.types.UInt: self.value); in object::method()", ) .unwrap(); assert_eq!(product, values::UnsignedInteger::from(5).into()); diff --git a/interpreter/src/execution/values/integer.rs b/interpreter/src/execution/values/integer.rs index b4b7ed3..88882de 100644 --- a/interpreter/src/execution/values/integer.rs +++ b/interpreter/src/execution/values/integer.rs @@ -862,12 +862,6 @@ mod test { assert_eq!(product, SignedInteger::from(3).into()); } - #[test] - fn signed_floor_divide() { - let product = test_run("6i // 2i").unwrap(); - assert_eq!(product, SignedInteger::from(3).into()); - } - #[test] fn signed_exponent() { let product = test_run("6i ** 3i").unwrap(); @@ -995,12 +989,6 @@ mod test { assert_eq!(product, UnsignedInteger::from(3).into()); } - #[test] - fn unsigned_floor_divide() { - let product = test_run("6u // 2u").unwrap(); - assert_eq!(product, UnsignedInteger::from(3).into()); - } - #[test] fn unsigned_exponent() { let product = test_run("6u ** 3u").unwrap(); From 81a113c56528047d7fd2fa2ae202a72618036d33 Mon Sep 17 00:00:00 2001 From: James Carl Date: Mon, 19 Jan 2026 12:30:12 -0500 Subject: [PATCH 089/106] Add suggestions for missing variables --- Cargo.lock | 7 + interpreter/Cargo.toml | 1 + interpreter/src/execution/mod.rs | 11 +- interpreter/src/execution/stack.rs | 216 ++++++++++++++++++-- interpreter/src/execution/values/closure.rs | 17 +- 5 files changed, 225 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8967234..fdf7f69 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -818,6 +818,7 @@ dependencies = [ "file-guard", "hashable-map", "imstr", + "levenshtein", "nalgebra", "nom", "num-traits", @@ -909,6 +910,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "levenshtein" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" + [[package]] name = "libc" version = "0.2.180" diff --git a/interpreter/Cargo.toml b/interpreter/Cargo.toml index 356c35a..25b8cdf 100644 --- a/interpreter/Cargo.toml +++ b/interpreter/Cargo.toml @@ -23,6 +23,7 @@ tempfile = "3.24.0" rayon = "1.11.0" nom = "8.0.0" ariadne = { workspace = true } +levenshtein = "1.0.5" [build-dependencies] type-sitter-gen = "0.8" diff --git a/interpreter/src/execution/mod.rs b/interpreter/src/execution/mod.rs index 9aec9e3..4daa29e 100644 --- a/interpreter/src/execution/mod.rs +++ b/interpreter/src/execution/mod.rs @@ -198,7 +198,16 @@ impl<'c> ExecutionContext<'c> { } pub fn get_variable<'s, S: Into>>(&self, name: S) -> ExpressionResult<&Value> { - self.stack.get_variable(self.stack_trace, name) + self.stack.get_variable(self.stack_trace, [], name) + } + + pub fn get_variable_for_closure<'s, S: Into>>( + &self, + local_variables: impl IntoIterator, + name: S, + ) -> ExpressionResult<&Value> { + self.stack + .get_variable(self.stack_trace, local_variables, name) } pub fn stack_scope( diff --git a/interpreter/src/execution/stack.rs b/interpreter/src/execution/stack.rs index aa1303c..a8625e1 100644 --- a/interpreter/src/execution/stack.rs +++ b/interpreter/src/execution/stack.rs @@ -24,7 +24,8 @@ use super::{ values::Value, }; use imstr::ImString; -use std::{collections::HashMap, fmt::Display}; +use levenshtein::levenshtein; +use std::{cmp::Ordering, collections::HashMap, fmt::Display}; #[derive(Debug, Clone, Copy)] pub enum ScopeType { @@ -98,23 +99,56 @@ impl<'p> StackScope<'p> { self.variables.insert(name, value); } - fn iter(&'p self) -> StackScopeIter<'p> { + fn iter_visible_scopes(&'p self) -> StackScopeIter<'p> { StackScopeIter { - current: Some(self), + only_visible: true, + next: Some(self), } } + pub fn iter_visible_variables(&'p self) -> impl Iterator { + self.iter_visible_scopes() + .flat_map(|scope| scope.variables.iter()) + .chain(self.prelude.iter()) + } + + pub fn suggest_similar_names( + &self, + local_variables: impl IntoIterator, + name: &str, + ) -> Vec { + let mut names: Vec<_> = self + .iter_visible_variables() + .map(|(name, _value)| name.clone()) + .chain(local_variables.into_iter()) + .collect(); + names.sort_by(|name_a, name_b| { + match (name_a.starts_with(name), name_b.starts_with(name)) { + (true, false) => Ordering::Less, + _ => match levenshtein(name_a, name).cmp(&levenshtein(name_b, name)) { + Ordering::Equal => name_b.cmp(name_a), // They're equel, so just alphabetize + // them to insure consistent test + // results. + ord => ord, + }, + } + }); + + names + } + /// Gets a reference to a variable on the stack. // TODO Recommending similar named variables would help users to notice typos. // https://crates.io/crates/levenshtein pub fn get_variable<'s, S: Into>>( &self, stack_trace: &StackTrace, + local_variables: impl IntoIterator, name: S, ) -> ExpressionResult<&Value> { let name = name.into(); - let mut scope_iterator = self.iter(); + let mut scope_iterator = self.iter_visible_scopes(); let mut value = None; // Search the stack for the thing. @@ -123,15 +157,6 @@ impl<'p> StackScope<'p> { value = Some(local_value); break; } - - match &scope.ty { - // If this scope is isolated, then we should not continue searching up the stack. - // Skip to the prelude. - ScopeType::Isolated => { - break; - } - _ => {} - } } if let Some(value) = value { @@ -144,7 +169,8 @@ impl<'p> StackScope<'p> { // We couldn't find it. Err(NotInScopeError { - variable_name: name.string.to_string(), + variable_name: ImString::from(name.string), + suggestions: self.suggest_similar_names(local_variables, name.string), } .to_error(stack_trace.iter().chain([&name.location]))) } @@ -152,24 +178,30 @@ impl<'p> StackScope<'p> { } pub struct StackScopeIter<'p> { - current: Option<&'p StackScope<'p>>, + only_visible: bool, + next: Option<&'p StackScope<'p>>, } impl<'p> Iterator for StackScopeIter<'p> { type Item = &'p StackScope<'p>; fn next(&mut self) -> Option { - let next = self.current.take(); - if let Some(next) = next { - self.current = next.parent; + let current = self.next.take(); + if let Some(current) = current { + if !self.only_visible || matches!(current.ty, ScopeType::Inherited) { + self.next = current.parent; + } else { + self.next = None; + } } - next + current } } #[derive(Debug, Eq, PartialEq)] struct NotInScopeError { - variable_name: String, + variable_name: ImString, + suggestions: Vec, } impl ErrorType for NotInScopeError {} @@ -178,8 +210,148 @@ impl Display for NotInScopeError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!( f, - "`{}` could not be found in the current scope", + "`{}` could not be found in the current scope. Possible alternatives: ", self.variable_name - ) + )?; + + let mut names = self.suggestions.iter().take(3).peekable(); + + while let Some(name) = names.next() { + if names.peek().is_some() { + write!(f, "{name}, ")?; + } else { + write!(f, "{name}")?; + } + } + + Ok(()) + } +} + +#[cfg(test)] +mod test { + use pretty_assertions::assert_eq; + + use crate::values::{UnsignedInteger, ValueNone}; + + use super::*; + + #[test] + fn iter_variables() { + let stack_trace = StackTrace::test(); + let prelude = HashMap::from_iter([("a".into(), UnsignedInteger::from(1).into())]); + let stack = StackScope::top(&prelude); + + stack + .scope( + &stack_trace, + ScopeType::Inherited, + HashMap::from_iter([("b".into(), UnsignedInteger::from(2).into())]), + |stack, stack_trace| { + stack + .scope( + &stack_trace, + ScopeType::Inherited, + HashMap::from_iter([("c".into(), UnsignedInteger::from(3).into())]), + |stack, _stack_trace| { + let mut variables = + stack.iter_visible_variables().collect::>(); + variables.sort_by(|(name_a, _value_a), (name_b, _value_b)| { + name_a.cmp(name_b) + }); + assert_eq!( + variables, + vec![ + (&"a".into(), &UnsignedInteger::from(1).into()), + (&"b".into(), &UnsignedInteger::from(2).into()), + (&"c".into(), &UnsignedInteger::from(3).into()) + ] + ); + }, + ) + .unwrap(); + }, + ) + .unwrap(); + } + + #[test] + fn iter_isolated_variables() { + let stack_trace = StackTrace::test(); + let prelude = HashMap::from_iter([("a".into(), UnsignedInteger::from(1).into())]); + let stack = StackScope::top(&prelude); + + stack + .scope( + &stack_trace, + ScopeType::Inherited, + HashMap::from_iter([("b".into(), UnsignedInteger::from(2).into())]), + |stack, stack_trace| { + stack + .scope( + &stack_trace, + ScopeType::Isolated, + HashMap::from_iter([("c".into(), UnsignedInteger::from(3).into())]), + |stack, _stack_trace| { + let mut variables = + stack.iter_visible_variables().collect::>(); + variables.sort_by(|(name_a, _value_a), (name_b, _value_b)| { + name_a.cmp(name_b) + }); + + assert_eq!( + variables, + vec![ + (&"a".into(), &UnsignedInteger::from(1).into()), + (&"c".into(), &UnsignedInteger::from(3).into()) + ] + ); + }, + ) + .unwrap(); + }, + ) + .unwrap(); + } + + #[test] + fn suggest_similar_names() { + let prelude = HashMap::from_iter([ + ("abc".into(), ValueNone.into()), + ("abcdef".into(), ValueNone.into()), + ("123".into(), ValueNone.into()), + ("12345".into(), ValueNone.into()), + ]); + let stack = StackScope::top(&prelude); + + assert_eq!( + stack.suggest_similar_names([], "abc"), + vec![ + ImString::from("abc"), + ImString::from("abcdef"), + ImString::from("123"), + ImString::from("12345") + ] + ); + + assert_eq!( + stack.suggest_similar_names([], "abcde"), + vec![ + ImString::from("abcdef"), + ImString::from("abc"), + ImString::from("12345"), + ImString::from("123"), + ] + ); + + assert_eq!( + stack.suggest_similar_names([], "123"), + vec![ + ImString::from("123"), + ImString::from("12345"), + ImString::from("abc"), + ImString::from("abcdef") + ] + ); } } diff --git a/interpreter/src/execution/values/closure.rs b/interpreter/src/execution/values/closure.rs index 645af42..077ca66 100644 --- a/interpreter/src/execution/values/closure.rs +++ b/interpreter/src/execution/values/closure.rs @@ -182,11 +182,20 @@ impl UserClosure { let mut captured_values = HashableMap::new(); find_all_variable_accesses_in_closure_capture(&source.node, &mut |field_name| { + let local_variables = signature + .argument_type + .members + .iter() + .map(|(name, _value): (&ImString, _)| name.clone()); + let value = context - .get_variable(LocatedStr { - location: field_name.reference.clone(), - string: field_name.node.as_str(), - })? + .get_variable_for_closure( + local_variables, + LocatedStr { + location: field_name.reference.clone(), + string: field_name.node.as_str(), + }, + )? .clone(); captured_values.insert(field_name.node.clone(), value); From 39ab928c199c56a04f4b78bfc23720b01e89c093 Mon Sep 17 00:00:00 2001 From: James Carl Date: Mon, 19 Jan 2026 15:33:39 -0500 Subject: [PATCH 090/106] Update function builder to match method builder's functionality. --- interpreter/src/execution/values/closure.rs | 61 ++++++++++++--------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/interpreter/src/execution/values/closure.rs b/interpreter/src/execution/values/closure.rs index 077ca66..0be5db9 100644 --- a/interpreter/src/execution/values/closure.rs +++ b/interpreter/src/execution/values/closure.rs @@ -396,31 +396,25 @@ macro_rules! build_closure_type { #[macro_export] macro_rules! build_function_callable { ($name:literal ($context:ident: &ExecutionContext $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block) => {{ - struct BuiltFunction ExpressionResult<$crate::execution::values::Value>> { + struct BuiltFunction + where + F: Fn(&$crate::execution::ExecutionContext, &$crate::execution::values::closure::Signature, $crate::values::Dictionary) -> ExpressionResult<$crate::execution::values::Value> + { function: F, signature: std::sync::Arc<$crate::execution::values::closure::Signature>, + name: String, } - impl ExpressionResult<$crate::execution::values::Value> + Send + Sync> $crate::execution::values::closure::BuiltinCallable for BuiltFunction { + impl $crate::execution::values::closure::BuiltinCallable for BuiltFunction + where + F: Fn(&$crate::execution::ExecutionContext, &$crate::execution::values::closure::Signature, $crate::values::Dictionary) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync, + { fn call( &self, context: &$crate::execution::ExecutionContext, argument: $crate::execution::values::Dictionary, ) -> $crate::execution::errors::ExpressionResult<$crate::execution::values::Value> { - use $crate::execution::errors::Raise; - self.signature - .argument_type - .check_other_qualifies(argument.struct_def()) - .map_err(|error| error.to_error(context.stack_trace.iter()))?; - - // Argument is potentially unused if we take no arguments. - let mut _argument = self.signature.argument_type.fill_defaults(argument); - - let _data = std::sync::Arc::make_mut(&mut _argument.data); - $($(let $arg: $ty = _data.members.remove(stringify!($arg)) - .expect("Argument was not present after argument check.").downcast(context.stack_trace)?;)*)? - - (self.function)(context $(, $($arg),*)?) + (self.function)(context, &self.signature, argument) } fn formula_call( @@ -446,7 +440,7 @@ macro_rules! build_function_callable { } fn name(&self) -> &str { - $name + &self.name } fn signature(&self) -> &std::sync::Arc<$crate::execution::values::closure::Signature> { @@ -455,8 +449,30 @@ macro_rules! build_function_callable { } BuiltFunction { - function: move |$context: &$crate::execution::ExecutionContext $(, $($arg: $ty),*)?| -> ExpressionResult<$crate::execution::values::Value> { let result: $return_type = $code?; Ok(result.into()) }, + function: move | + $context: &$crate::execution::ExecutionContext, + signature: &$crate::execution::values::closure::Signature, + argument: $crate::execution::values::Dictionary + | -> ExpressionResult<$crate::execution::values::Value> { + signature + .argument_type + .check_other_qualifies(argument.struct_def()) + .map_err(|error| error.to_error($context.stack_trace.iter()))?; + + // Argument is potentially unused if we take no arguments. + let mut _argument = signature.argument_type.fill_defaults(argument); + + let _data = std::sync::Arc::make_mut(&mut _argument.data); + $($(let $arg: $ty = _data.members.remove(stringify!($arg)) + .expect("Argument was not present after argument check.").downcast::<$ty>($context.stack_trace)?;)*)? + + let result: $return_type = { + $code? + }; + Ok(result.into()) + }, signature: $crate::build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type), + name: $name.into(), } }}; } @@ -470,15 +486,6 @@ macro_rules! build_function { $database.register::<$ident>(Box::new(callable)) }}; - // ($database:ident, - // $forward_ident:ident, $forward_name:literal, ($forward_context:ident: &ExecutionContext $(, $($forward_arg:ident: $forward_ty:path $(= $forward_default:expr)?),+)?) -> $forward_return_type:ty $forward_code:block, - // reverse = $reverse_ident:ident, $reverse_name:literal, ($reverse_context:ident: &ExecutionContext $(, $($reverse_arg:ident: $reverse_ty:path $(= $reverse_default:expr)?),+)?) -> $reverse_return_type:ty $reverse_code:block - // ) => {{ - // let $crate::build_function_callable!($forward_name ($forward_context: &ExecutionContext $(, $($forward_arg: $forward_ty $(= $forward_default)?),+)?) -> $forward_return_type $forward_code); - // let reverse = $crate::build_function_callable!($reverse_name ($reverse_context: &ExecutionContext $(, $($reverse_arg: $reverse_ty $(= $reverse_default)?),+)?) -> $reverse_return_type $reverse_code); - - // $database.register_with_inverse::<$forward_ident, $reverse_ident>(Box::new(forward), Box::new(reverse)) - // }}; } #[macro_export] From c699c1dbdfccb55928909723cb6719b4ee72b2b4 Mon Sep 17 00:00:00 2001 From: James Carl Date: Wed, 21 Jan 2026 01:51:11 -0500 Subject: [PATCH 091/106] Prototype ConstraintSet --- Cargo.lock | 7 + interpreter/Cargo.toml | 1 + interpreter/src/compile/constraint_set.rs | 665 + interpreter/src/compile/expressions.rs | 12 +- interpreter/src/compile/formula.rs | 568 - interpreter/src/compile/mod.rs | 9 +- interpreter/src/execution/mod.rs | 10 +- interpreter/src/execution/values/closure.rs | 86 +- .../src/execution/values/constraint_set.rs | 664 + interpreter/src/execution/values/mod.rs | 4 + interpreter/src/execution/values/scalar.rs | 16 - .../src/execution/values/string/mod.rs | 22 - .../src/execution/values/value_type.rs | 21 +- tree-sitter-command-cad-model/grammar.js | 60 +- .../src/grammar.json | 453 +- .../src/node-types.json | 489 +- tree-sitter-command-cad-model/src/parser.c | 14945 ++++++---------- .../test/corpus/constraint_sets.txt | 54 + .../test/corpus/formulas.txt | 52 - 19 files changed, 7620 insertions(+), 10518 deletions(-) create mode 100644 interpreter/src/compile/constraint_set.rs delete mode 100644 interpreter/src/compile/formula.rs create mode 100644 interpreter/src/execution/values/constraint_set.rs create mode 100644 tree-sitter-command-cad-model/test/corpus/constraint_sets.txt delete mode 100644 tree-sitter-command-cad-model/test/corpus/formulas.txt diff --git a/Cargo.lock b/Cargo.lock index fdf7f69..de00d24 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -825,6 +825,7 @@ dependencies = [ "paste", "pretty_assertions", "rayon", + "selen", "stack", "tempfile", "tree-sitter", @@ -1577,6 +1578,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "selen" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069ccc9fbbb7f2de521452b5c96d7d898b0d2e5f49698adbcfc13914f218d3af" + [[package]] name = "semver" version = "1.0.27" diff --git a/interpreter/Cargo.toml b/interpreter/Cargo.toml index 25b8cdf..27b5b29 100644 --- a/interpreter/Cargo.toml +++ b/interpreter/Cargo.toml @@ -24,6 +24,7 @@ rayon = "1.11.0" nom = "8.0.0" ariadne = { workspace = true } levenshtein = "1.0.5" +selen = "0.15.5" [build-dependencies] type-sitter-gen = "0.8" diff --git a/interpreter/src/compile/constraint_set.rs b/interpreter/src/compile/constraint_set.rs new file mode 100644 index 0000000..cf69b63 --- /dev/null +++ b/interpreter/src/compile/constraint_set.rs @@ -0,0 +1,665 @@ +/* + * Copyright 2026 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use std::{path::PathBuf, sync::Arc}; + +use crate::compile::{nodes, unwrap_missing, Error, Parse}; + +use super::{AstNode, Scalar}; +use imstr::ImString; +use type_sitter::{HasChild, Node}; +use unwrap_enum::EnumAs; + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct ConstraintSet { + pub variables: Vec>, + pub left: AstNode, + pub right: AstNode, + pub relation: Relation, +} + +impl<'t> Parse<'t, nodes::ConstraintSet<'t>> for ConstraintSet { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::ConstraintSet<'t>, + ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + + let variables = { + let variables_node = value.variables()?; + let mut cursor = variables_node.walk(); + + let mut variables = Vec::new(); + for field in variables_node.identifiers(&mut cursor) { + variables.push(ImString::parse(file, input, field)?); + } + + variables + }; + + let left = ConstraintSetExpression::parse(file, input, value.lhs()?)?; + let right = ConstraintSetExpression::parse(file, input, value.rhs()?)?; + + type Operator<'t> = nodes::anon_unions::NotEq_Lt_LtEq_EqEq_Gt_GtEq<'t>; + let relation = match value.relation()? { + Operator::Lt(_) => Relation::Less, + Operator::LtEq(_) => Relation::LessEqual, + Operator::EqEq(_) => Relation::Equal, + Operator::GtEq(_) => Relation::GreaterEqual, + Operator::Gt(_) => Relation::Greater, + Operator::NotEq(_) => Relation::NotEqual, + }; + + Ok(AstNode::new( + file, + &value, + Self { + variables: variables, + left, + right, + relation, + }, + )) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub enum Relation { + Less, + LessEqual, + Equal, + GreaterEqual, + Greater, + NotEqual, +} + +#[derive(Debug, Hash, Eq, PartialEq, EnumAs)] +pub enum ConstraintSetExpression { + Parenthesis(Box>), + Scalar(AstNode), + Identifier(AstNode), + UnaryExpression(Box>), + BinaryExpression(Box>), + MethodCall(Box>), +} + +impl<'t> Parse<'t, nodes::ConstraintSetExpression<'t>> for ConstraintSetExpression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::ConstraintSetExpression<'t>, + ) -> Result, Error<'t, 'i>> { + type ChildType<'t> = as HasChild<'t>>::Child; + + unwrap_missing(&value)?; + + match value.child()? { + ChildType::ConstraintSetBinaryExpression(binary_expression) => { + Self::parse(file, input, binary_expression) + } + ChildType::ConstraintSetParenthesis(parenthesis) => { + Self::parse(file, input, parenthesis) + } + ChildType::Identifier(ident) => Ok(AstNode::new( + file, + &value, + Self::Identifier(ImString::parse(file, input, ident)?), + )), + ChildType::Scalar(scalar) => Self::parse(file, input, scalar), + ChildType::ConstraintSetUnaryExpression(unary_expression) => { + Self::parse(file, input, unary_expression) + } + ChildType::ConstraintSetMethodCall(method_call) => { + Self::parse(file, input, method_call) + } + } + } +} + +impl<'t> Parse<'t, nodes::ConstraintSetBinaryExpression<'t>> for ConstraintSetExpression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::ConstraintSetBinaryExpression<'t>, + ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + + Ok(AstNode::new( + file, + &value, + Self::BinaryExpression(Box::new(BinaryExpression::parse(file, input, value)?)), + )) + } +} + +impl<'t> Parse<'t, nodes::ConstraintSetParenthesis<'t>> for ConstraintSetExpression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::ConstraintSetParenthesis<'t>, + ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + + let expression = value.constraint_set_expression()?; + Ok(AstNode::new( + file, + &value, + Self::Parenthesis(Box::new(Self::parse(file, input, expression)?)), + )) + } +} + +impl<'t> Parse<'t, nodes::Scalar<'t>> for ConstraintSetExpression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::Scalar<'t>, + ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + + Ok(AstNode::new( + file, + &value, + Self::Scalar(Scalar::parse(file, input, value)?), + )) + } +} + +impl<'t> Parse<'t, nodes::ConstraintSetUnaryExpression<'t>> for ConstraintSetExpression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::ConstraintSetUnaryExpression<'t>, + ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + + Ok(AstNode::new( + file, + &value, + Self::UnaryExpression(Box::new(UnaryExpression::parse(file, input, value)?)), + )) + } +} + +impl<'t> Parse<'t, nodes::ConstraintSetMethodCall<'t>> for ConstraintSetExpression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::ConstraintSetMethodCall<'t>, + ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + + Ok(AstNode::new( + file, + &value, + Self::MethodCall(Box::new(MethodCall::parse(file, input, value)?)), + )) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub enum UnaryExpressionOperation { + Add, + Sub, +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct UnaryExpression { + pub operation: AstNode, + pub expression: AstNode, +} + +impl<'t> Parse<'t, nodes::ConstraintSetUnaryExpression<'t>> for UnaryExpression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::ConstraintSetUnaryExpression<'t>, + ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + + let operation = value.op()?; + + let operation = match operation { + nodes::anon_unions::Add_Sub::Add(add) => { + AstNode::new(file, &add, UnaryExpressionOperation::Add) + } + nodes::anon_unions::Add_Sub::Sub(sub) => { + AstNode::new(file, &sub, UnaryExpressionOperation::Sub) + } + }; + + let expression = + ConstraintSetExpression::parse(file, input, value.constraint_set_expression()?)?; + + Ok(AstNode::new( + file, + &value, + Self { + operation, + expression, + }, + )) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub enum BinaryExpressionOperation { + Mul, + Add, + Sub, + Div, +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct BinaryExpression { + pub operation: AstNode, + pub a: AstNode, + pub b: AstNode, +} + +impl<'t> Parse<'t, nodes::ConstraintSetBinaryExpression<'t>> for BinaryExpression { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::ConstraintSetBinaryExpression<'t>, + ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + + type Operation<'t> = nodes::anon_unions::Mul_Add_Sub_Div<'t>; + + let operation = value.op()?; + + let operation = match operation { + Operation::Mul(mul) => AstNode::new(file, &mul, BinaryExpressionOperation::Mul), + Operation::Add(add) => AstNode::new(file, &add, BinaryExpressionOperation::Add), + Operation::Sub(sub) => AstNode::new(file, &sub, BinaryExpressionOperation::Sub), + Operation::Div(div) => AstNode::new(file, &div, BinaryExpressionOperation::Div), + }; + + let a = value.a()?; + let a = ConstraintSetExpression::parse(file, input, a)?; + + let b = value.b()?; + let b = ConstraintSetExpression::parse(file, input, b)?; + + Ok(AstNode::new(file, &value, Self { operation, a, b })) + } +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct Vector2 { + pub x: AstNode, + pub y: AstNode, +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct Vector3 { + pub x: AstNode, + pub y: AstNode, + pub z: AstNode, +} + +#[derive(Debug, Hash, Eq, PartialEq)] +pub struct MethodCall { + pub self_dictionary: AstNode, + pub to_call: AstNode, + pub argument: AstNode, +} + +impl<'t> Parse<'t, nodes::ConstraintSetMethodCall<'t>> for MethodCall { + fn parse<'i>( + file: &Arc, + input: &'i str, + value: nodes::ConstraintSetMethodCall<'t>, + ) -> Result, Error<'t, 'i>> { + unwrap_missing(&value)?; + + let self_dictionary = + ConstraintSetExpression::parse(file, input, value.self_dictionary()?)?; + let to_call = ImString::parse(file, input, value.to_call()?)?; + let argument = ConstraintSetExpression::parse(file, input, value.argument()?)?; + + Ok(AstNode::new( + file, + &value, + Self { + self_dictionary, + to_call, + argument, + }, + )) + } +} + +#[cfg(test)] +mod test { + use common_data_types::{Dimension, Float}; + use pretty_assertions::assert_eq; + + use crate::compile::{full_compile, Expression}; + + use super::*; + + fn comparison_test(input: &str, relation: Relation) { + let root = full_compile(input); + let formula = root.node.as_constraintset().unwrap(); + let a = &formula.node.variables[0]; + let left = &formula.node.left; + let left_ident = left.node.as_identifier().unwrap(); + let right = &formula.node.right; + let right_ident = right.node.as_identifier().unwrap(); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::ConstraintSet(AstNode { + reference: formula.reference.clone(), + node: Arc::new(ConstraintSet { + variables: vec![AstNode { + reference: a.reference.clone(), + node: ImString::from("a") + }], + left: AstNode { + reference: left.reference.clone(), + node: ConstraintSetExpression::Identifier(AstNode { + reference: left_ident.reference.clone(), + node: ImString::from("a") + }) + }, + right: AstNode { + reference: right.reference.clone(), + node: ConstraintSetExpression::Identifier(AstNode { + reference: right_ident.reference.clone(), + node: ImString::from("a") + }) + }, + relation + }) + }) + } + ); + } + + #[test] + fn less_than() { + comparison_test("<<>>", Relation::Less); + } + #[test] + fn less_than_equel() { + comparison_test("<<>>", Relation::LessEqual); + } + #[test] + fn equel() { + comparison_test("<<>>", Relation::Equal); + } + #[test] + fn greater_than_equel() { + comparison_test("<<= a>>>", Relation::GreaterEqual); + } + #[test] + fn greater_than() { + comparison_test("<< a>>>", Relation::Greater); + } + #[test] + fn not_equel() { + comparison_test("<<>>", Relation::NotEqual); + } + + fn expression_test( + input: &str, + expression_builder: impl FnOnce(&ConstraintSetExpression) -> ConstraintSetExpression, + ) { + let root = full_compile(input); + let formula = root.node.as_constraintset().unwrap(); + let a = &formula.node.variables[0]; + let left = &formula.node.left; + let right = &formula.node.right; + let right_ident = right.node.as_identifier().unwrap(); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::ConstraintSet(AstNode { + reference: formula.reference.clone(), + node: Arc::new(ConstraintSet { + variables: vec![AstNode { + reference: a.reference.clone(), + node: ImString::from("a") + }], + left: AstNode { + reference: left.reference.clone(), + node: expression_builder(&left.node) + }, + right: AstNode { + reference: right.reference.clone(), + node: ConstraintSetExpression::Identifier(AstNode { + reference: right_ident.reference.clone(), + node: ImString::from("a") + }) + }, + relation: Relation::Equal + }) + }) + } + ); + } + + #[test] + fn parenthesis() { + expression_test("<<>>", |expression| { + let paren = expression.as_parenthesis().unwrap(); + let ident = paren.node.as_identifier().unwrap(); + ConstraintSetExpression::Parenthesis(Box::new(AstNode { + reference: paren.reference.clone(), + node: ConstraintSetExpression::Identifier(AstNode { + reference: ident.reference.clone(), + node: ImString::from("a"), + }), + })) + }); + } + + #[test] + fn scalar() { + expression_test("<<>>", |expression| { + let value = expression.as_scalar().unwrap(); + ConstraintSetExpression::Scalar(AstNode { + reference: value.reference.clone(), + node: Scalar { + dimension: Dimension::length(), + value: Float::new(5.0).unwrap(), + }, + }) + }); + } + + fn unary_test(input: &str, operation: UnaryExpressionOperation) { + expression_test(input, |expression| { + let unary = expression.as_unaryexpression().unwrap(); + let operation_ref = &unary.node.operation.reference; + let ident = unary.node.expression.node.as_identifier().unwrap(); + ConstraintSetExpression::UnaryExpression(Box::new(AstNode { + reference: unary.reference.clone(), + node: UnaryExpression { + operation: AstNode { + reference: operation_ref.clone(), + node: operation, + }, + expression: AstNode { + reference: unary.node.expression.reference.clone(), + node: ConstraintSetExpression::Identifier(AstNode { + reference: ident.reference.clone(), + node: ImString::from("a"), + }), + }, + }, + })) + }); + } + + #[test] + fn unary_plus() { + unary_test("<<>>", UnaryExpressionOperation::Add); + } + + #[test] + fn unary_minus() { + unary_test("<<>>", UnaryExpressionOperation::Sub); + } + + fn binary_test(input: &str, operation: BinaryExpressionOperation) { + expression_test(input, |expression| { + let binary = expression.as_binaryexpression().unwrap(); + let operation_ref = &binary.node.operation.reference; + let ident_a = binary.node.a.node.as_identifier().unwrap(); + let ident_b = binary.node.b.node.as_identifier().unwrap(); + ConstraintSetExpression::BinaryExpression(Box::new(AstNode { + reference: binary.reference.clone(), + node: BinaryExpression { + operation: AstNode { + reference: operation_ref.clone(), + node: operation, + }, + a: AstNode { + reference: binary.node.a.reference.clone(), + node: ConstraintSetExpression::Identifier(AstNode { + reference: ident_a.reference.clone(), + node: ImString::from("c"), + }), + }, + b: AstNode { + reference: binary.node.b.reference.clone(), + node: ConstraintSetExpression::Identifier(AstNode { + reference: ident_b.reference.clone(), + node: ImString::from("b"), + }), + }, + }, + })) + }); + } + + #[test] + fn multiply() { + binary_test("<<>>", BinaryExpressionOperation::Mul); + } + + #[test] + fn add() { + binary_test("<<>>", BinaryExpressionOperation::Add); + } + + #[test] + fn sub() { + binary_test("<<>>", BinaryExpressionOperation::Sub); + } + + #[test] + fn divide() { + binary_test("<<>>", BinaryExpressionOperation::Div); + } + + #[test] + fn method_call() { + expression_test("<<>>", |expression| { + let method_call = expression.as_methodcall().unwrap(); + let self_dictionary = &method_call + .node + .self_dictionary + .node + .as_identifier() + .unwrap(); + let to_call = &method_call.node.to_call; + let argument = method_call.node.argument.node.as_identifier().unwrap(); + ConstraintSetExpression::MethodCall(Box::new(AstNode { + reference: method_call.reference.clone(), + node: MethodCall { + self_dictionary: AstNode { + reference: method_call.node.self_dictionary.reference.clone(), + node: ConstraintSetExpression::Identifier(AstNode { + reference: self_dictionary.reference.clone(), + node: ImString::from("b"), + }), + }, + to_call: AstNode { + reference: to_call.reference.clone(), + node: ImString::from("method"), + }, + argument: AstNode { + reference: method_call.node.argument.reference.clone(), + node: ConstraintSetExpression::Identifier(AstNode { + reference: argument.reference.clone(), + node: ImString::from("c"), + }), + }, + }, + })) + }); + } + + #[test] + fn multiple_variables() { + let root = full_compile("<<>>"); + let formula = root.node.as_constraintset().unwrap(); + let variables = &formula.node.variables; + let left = &formula.node.left; + let left_ident = left.node.as_identifier().unwrap(); + let right = &formula.node.right; + let right_ident = right.node.as_identifier().unwrap(); + + assert_eq!( + root, + AstNode { + reference: root.reference.clone(), + node: Expression::ConstraintSet(AstNode { + reference: formula.reference.clone(), + node: Arc::new(ConstraintSet { + variables: vec![ + AstNode { + reference: variables[0].reference.clone(), + node: ImString::from("a") + }, + AstNode { + reference: variables[1].reference.clone(), + node: ImString::from("b") + } + ], + left: AstNode { + reference: left.reference.clone(), + node: ConstraintSetExpression::Identifier(AstNode { + reference: left_ident.reference.clone(), + node: ImString::from("a") + }) + }, + right: AstNode { + reference: right.reference.clone(), + node: ConstraintSetExpression::Identifier(AstNode { + reference: right_ident.reference.clone(), + node: ImString::from("b") + }) + }, + relation: Relation::Equal + }) + }) + } + ); + } +} diff --git a/interpreter/src/compile/expressions.rs b/interpreter/src/compile/expressions.rs index c1cf89a..6844611 100644 --- a/interpreter/src/compile/expressions.rs +++ b/interpreter/src/compile/expressions.rs @@ -6,7 +6,7 @@ use type_sitter::{HasChild, Node}; use unwrap_enum::EnumAs; use crate::{ - compile::{formula::Formula, unwrap_missing, Scalar}, + compile::{constraint_set::ConstraintSet, unwrap_missing, Scalar}, execution::find_all_variable_accesses_in_expression, }; @@ -108,7 +108,7 @@ pub enum Expression { FunctionCall(AstNode>), MethodCall(AstNode>), LetIn(AstNode>), - Formula(AstNode), + ConstraintSet(AstNode>), Malformed(ImString), } @@ -130,18 +130,18 @@ impl<'t> Parse<'t, nodes::BinaryExpression<'t>> for Expression { } } -impl<'t> Parse<'t, nodes::Formula<'t>> for Expression { +impl<'t> Parse<'t, nodes::ConstraintSet<'t>> for Expression { fn parse<'i>( file: &Arc, input: &'i str, - value: nodes::Formula<'t>, + value: nodes::ConstraintSet<'t>, ) -> Result, Error<'t, 'i>> { unwrap_missing(&value)?; Ok(AstNode::new( file, &value, - Self::Formula(Formula::parse(file, input, value)?), + Self::ConstraintSet(ConstraintSet::parse(file, input, value)?.into_arc()), )) } } @@ -536,7 +536,7 @@ impl<'t> Parse<'t, nodes::Expression<'t>> for Expression { } ChildType::FunctionCall(function_call) => Self::parse(file, input, function_call), ChildType::MethodCall(method_call) => Self::parse(file, input, method_call), - ChildType::Formula(formula) => Self::parse(file, input, formula), + ChildType::ConstraintSet(constraint_set) => Self::parse(file, input, constraint_set), ChildType::LetIn(let_in) => Self::parse(file, input, let_in), }; diff --git a/interpreter/src/compile/formula.rs b/interpreter/src/compile/formula.rs deleted file mode 100644 index f547b4f..0000000 --- a/interpreter/src/compile/formula.rs +++ /dev/null @@ -1,568 +0,0 @@ -/* - * Copyright 2026 James Carl - * AGPL-3.0-only or AGPL-3.0-or-later - * - * This file is part of Command Cad. - * - * Command CAD is free software: you can redistribute it and/or modify it under the terms of - * the GNU Affero General Public License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this - * program. If not, see . - */ - -use std::{path::PathBuf, sync::Arc}; - -use crate::compile::{nodes, unwrap_missing, Error, Parse}; - -use super::{AstNode, Scalar}; -use imstr::ImString; -use type_sitter::HasChild; - -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct Formula { - left: AstNode, - right: AstNode, - relation: Relation, -} - -impl<'t> Parse<'t, nodes::Formula<'t>> for Formula { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::Formula<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - let left = Expression::parse(file, input, value.lhs()?)?; - let right = Expression::parse(file, input, value.rhs()?)?; - - type Operator<'t> = nodes::anon_unions::NotEq_Lt_LtEq_EqEq_Gt_GtEq<'t>; - let relation = match value.relation()? { - Operator::Lt(_) => Relation::Less, - Operator::LtEq(_) => Relation::LessEqual, - Operator::EqEq(_) => Relation::Equal, - Operator::GtEq(_) => Relation::GreaterEqual, - Operator::Gt(_) => Relation::Greater, - Operator::NotEq(_) => Relation::NotEqual, - }; - - Ok(AstNode::new( - file, - &value, - Self { - left, - right, - relation, - }, - )) - } -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub enum Relation { - Less, - LessEqual, - Equal, - GreaterEqual, - Greater, - NotEqual, -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub enum Expression { - Parenthesis(Box>), - SignedInteger(AstNode), - UnsignedInteger(AstNode), - Boolean(AstNode), - Scalar(AstNode), - Vector2(AstNode>), - Vector3(AstNode>), - Vector4(AstNode>), - Identifier(AstNode), - UnaryExpression(Box>), - BinaryExpression(Box>), - FunctionCall(Box>), - MethodCall(Box>), -} - -impl<'t> Parse<'t, nodes::FormulaExpression<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaExpression<'t>, - ) -> Result, Error<'t, 'i>> { - type ChildType<'t> = as HasChild<'t>>::Child; - - unwrap_missing(&value)?; - - match value.child()? { - ChildType::FormulaBinaryExpression(binary_expression) => { - Self::parse(file, input, binary_expression) - } - ChildType::Boolean(value) => Self::parse(file, input, value), - ChildType::FormulaParenthesis(parenthesis) => Self::parse(file, input, parenthesis), - ChildType::Identifier(ident) => Ok(AstNode::new( - file, - &value, - Self::Identifier(ImString::parse(file, input, ident)?), - )), - ChildType::Scalar(scalar) => Self::parse(file, input, scalar), - ChildType::FormulaVector2(vector) => Self::parse(file, input, vector), - ChildType::FormulaVector3(vector) => Self::parse(file, input, vector), - ChildType::FormulaVector4(vector) => Self::parse(file, input, vector), - ChildType::SignedInteger(signed_integer) => Self::parse(file, input, signed_integer), - ChildType::FormulaUnaryExpression(unary_expression) => { - Self::parse(file, input, unary_expression) - } - ChildType::UnsignedInteger(unsigned_integer) => { - Self::parse(file, input, unsigned_integer) - } - ChildType::FormulaFunctionCall(function_call) => { - Self::parse(file, input, function_call) - } - ChildType::FormulaMethodCall(method_call) => Self::parse(file, input, method_call), - } - } -} - -impl<'t> Parse<'t, nodes::FormulaBinaryExpression<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaBinaryExpression<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - Ok(AstNode::new( - file, - &value, - Self::BinaryExpression(Box::new(BinaryExpression::parse(file, input, value)?)), - )) - } -} - -impl<'t> Parse<'t, nodes::Boolean<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::Boolean<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - Ok(AstNode::new( - file, - &value, - Self::Boolean(bool::parse(file, input, value)?), - )) - } -} - -impl<'t> Parse<'t, nodes::FormulaParenthesis<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaParenthesis<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - let expression = value.formula_expression()?; - Ok(AstNode::new( - file, - &value, - Self::Parenthesis(Box::new(Self::parse(file, input, expression)?)), - )) - } -} - -impl<'t> Parse<'t, nodes::Scalar<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::Scalar<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - Ok(AstNode::new( - file, - &value, - Self::Scalar(Scalar::parse(file, input, value)?), - )) - } -} - -impl<'t> Parse<'t, nodes::FormulaVector2<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaVector2<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - Ok(AstNode::new( - file, - &value, - Self::Vector2(Vector2::parse(file, input, value)?.into_box()), - )) - } -} - -impl<'t> Parse<'t, nodes::FormulaVector3<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaVector3<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - Ok(AstNode::new( - file, - &value, - Self::Vector3(Vector3::parse(file, input, value)?.into_box()), - )) - } -} - -impl<'t> Parse<'t, nodes::FormulaVector4<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaVector4<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - Ok(AstNode::new( - file, - &value, - Self::Vector4(Vector4::parse(file, input, value)?.into_box()), - )) - } -} - -impl<'t> Parse<'t, nodes::SignedInteger<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::SignedInteger<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - Ok(AstNode::new( - file, - &value, - Self::SignedInteger(i64::parse(file, input, value)?), - )) - } -} - -impl<'t> Parse<'t, nodes::UnsignedInteger<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::UnsignedInteger<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - Ok(AstNode::new( - file, - &value, - Self::UnsignedInteger(u64::parse(file, input, value)?), - )) - } -} - -impl<'t> Parse<'t, nodes::FormulaUnaryExpression<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaUnaryExpression<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - Ok(AstNode::new( - file, - &value, - Self::UnaryExpression(Box::new(UnaryExpression::parse(file, input, value)?)), - )) - } -} - -impl<'t> Parse<'t, nodes::FormulaFunctionCall<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaFunctionCall<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - Ok(AstNode::new( - file, - &value, - Self::FunctionCall(Box::new(FunctionCall::parse(file, input, value)?)), - )) - } -} - -impl<'t> Parse<'t, nodes::FormulaMethodCall<'t>> for Expression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaMethodCall<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - Ok(AstNode::new( - file, - &value, - Self::MethodCall(Box::new(MethodCall::parse(file, input, value)?)), - )) - } -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub enum UnaryExpressionOperation { - Add, - Sub, - Not, -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct UnaryExpression { - pub operation: AstNode, - pub expression: AstNode, -} - -impl<'t> Parse<'t, nodes::FormulaUnaryExpression<'t>> for UnaryExpression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaUnaryExpression<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - let operation = value.op()?; - - let operation = match operation { - nodes::anon_unions::Not_Add_Sub::Not(not) => { - AstNode::new(file, ¬, UnaryExpressionOperation::Not) - } - nodes::anon_unions::Not_Add_Sub::Add(add) => { - AstNode::new(file, &add, UnaryExpressionOperation::Add) - } - nodes::anon_unions::Not_Add_Sub::Sub(sub) => { - AstNode::new(file, &sub, UnaryExpressionOperation::Sub) - } - }; - - let expression = Expression::parse(file, input, value.formula_expression()?)?; - - Ok(AstNode::new( - file, - &value, - Self { - operation, - expression, - }, - )) - } -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub enum BinaryExpressionOperation { - AndAnd, - Mul, - MulMul, - Add, - Sub, - Div, - Xor, - OrOr, -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct BinaryExpression { - pub operation: AstNode, - pub a: AstNode, - pub b: AstNode, -} - -impl<'t> Parse<'t, nodes::FormulaBinaryExpression<'t>> for BinaryExpression { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaBinaryExpression<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - type Operation<'t> = - nodes::anon_unions::AndAnd_Mul_MulMul_Add_Sub_Div_BitXorBitXor_OrOr<'t>; - - let operation = value.op()?; - - let operation = match operation { - Operation::AndAnd(and_and) => { - AstNode::new(file, &and_and, BinaryExpressionOperation::AndAnd) - } - Operation::Mul(mul) => AstNode::new(file, &mul, BinaryExpressionOperation::Mul), - Operation::MulMul(mul_mul) => { - AstNode::new(file, &mul_mul, BinaryExpressionOperation::MulMul) - } - Operation::Add(add) => AstNode::new(file, &add, BinaryExpressionOperation::Add), - Operation::Sub(sub) => AstNode::new(file, &sub, BinaryExpressionOperation::Sub), - Operation::Div(div) => AstNode::new(file, &div, BinaryExpressionOperation::Div), - Operation::BitXorBitXor(xor_xor) => { - AstNode::new(file, &xor_xor, BinaryExpressionOperation::Xor) - } - Operation::OrOr(or_or) => AstNode::new(file, &or_or, BinaryExpressionOperation::OrOr), - }; - - let a = value.a()?; - let a = Expression::parse(file, input, a)?; - - let b = value.b()?; - let b = Expression::parse(file, input, b)?; - - Ok(AstNode::new(file, &value, Self { operation, a, b })) - } -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct Vector2 { - pub x: AstNode, - pub y: AstNode, -} - -impl<'t> Parse<'t, nodes::FormulaVector2<'t>> for Vector2 { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaVector2<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - let x = value.x()?; - let x = Expression::parse(file, input, x)?; - - let y = value.y()?; - let y = Expression::parse(file, input, y)?; - - Ok(AstNode::new(file, &value, Self { x, y })) - } -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct Vector3 { - pub x: AstNode, - pub y: AstNode, - pub z: AstNode, -} - -impl<'t> Parse<'t, nodes::FormulaVector3<'t>> for Vector3 { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaVector3<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - let x = value.x()?; - let x = Expression::parse(file, input, x)?; - - let y = value.y()?; - let y = Expression::parse(file, input, y)?; - - let z = value.z()?; - let z = Expression::parse(file, input, z)?; - - Ok(AstNode::new(file, &value, Self { x, y, z })) - } -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct Vector4 { - pub x: AstNode, - pub y: AstNode, - pub z: AstNode, - pub w: AstNode, -} - -impl<'t> Parse<'t, nodes::FormulaVector4<'t>> for Vector4 { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaVector4<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - let x = value.x()?; - let x = Expression::parse(file, input, x)?; - - let y = value.y()?; - let y = Expression::parse(file, input, y)?; - - let z = value.z()?; - let z = Expression::parse(file, input, z)?; - - let w = value.w()?; - let w = Expression::parse(file, input, w)?; - - Ok(AstNode::new(file, &value, Self { x, y, z, w })) - } -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct FunctionCall { - pub to_call: AstNode, - pub argument: AstNode, -} - -impl<'t> Parse<'t, nodes::FormulaFunctionCall<'t>> for FunctionCall { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaFunctionCall<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - let to_call = Expression::parse(file, input, value.to_call()?)?; - let argument = Expression::parse(file, input, value.argument()?)?; - - Ok(AstNode::new(file, &value, Self { to_call, argument })) - } -} - -#[derive(Debug, Hash, Eq, PartialEq)] -pub struct MethodCall { - pub self_dictionary: AstNode, - pub to_call: AstNode, - pub argument: AstNode, -} - -impl<'t> Parse<'t, nodes::FormulaMethodCall<'t>> for MethodCall { - fn parse<'i>( - file: &Arc, - input: &'i str, - value: nodes::FormulaMethodCall<'t>, - ) -> Result, Error<'t, 'i>> { - unwrap_missing(&value)?; - - let self_dictionary = Expression::parse(file, input, value.self_dictionary()?)?; - let to_call = ImString::parse(file, input, value.to_call()?)?; - let argument = Expression::parse(file, input, value.argument()?)?; - - Ok(AstNode::new( - file, - &value, - Self { - self_dictionary, - to_call, - argument, - }, - )) - } -} diff --git a/interpreter/src/compile/mod.rs b/interpreter/src/compile/mod.rs index edf1b9b..f13b777 100644 --- a/interpreter/src/compile/mod.rs +++ b/interpreter/src/compile/mod.rs @@ -1,5 +1,5 @@ +pub mod constraint_set; mod expressions; -mod formula; use ariadne::Span; use common_data_types::{ConversionFactor, Dimension, Float, RawFloat}; @@ -59,6 +59,13 @@ impl AstNode { node: Box::new(self.node), } } + + fn into_arc(self) -> AstNode> { + AstNode { + reference: self.reference, + node: Arc::new(self.node), + } + } } fn unwrap_missing<'t, 'i, N: Node<'t> + 't>(value: &N) -> Result<(), Error<'t, 'i>> { diff --git a/interpreter/src/execution/mod.rs b/interpreter/src/execution/mod.rs index 4daa29e..ae5821f 100644 --- a/interpreter/src/execution/mod.rs +++ b/interpreter/src/execution/mod.rs @@ -25,6 +25,7 @@ use crate::{ stack::ScopeType, values::BuiltinCallableDatabase, }, + values::{constraint_set::find_all_captured_variables_in_constraint_set, ConstraintSet}, SourceReference, }; @@ -155,9 +156,8 @@ pub fn find_all_variable_accesses_in_expression( Ok(()) } Expression::Identifier(ast_node) => access_collector(ast_node), - Expression::Formula(_) => { - // Formulas cannot access external variables. - Ok(()) + Expression::ConstraintSet(constraint_set) => { + find_all_captured_variables_in_constraint_set(&constraint_set.node, access_collector) } Expression::Boolean(_) | Expression::Scalar(_) @@ -305,8 +305,8 @@ pub fn execute_expression( compile::Expression::FunctionCall(ast_node) => execute_function_call(context, ast_node), compile::Expression::MethodCall(ast_node) => execute_method_call(context, ast_node), compile::Expression::LetIn(ast_node) => execute_let_in(context, ast_node), - compile::Expression::Formula(formula) => { - todo!() + compile::Expression::ConstraintSet(constraint_set) => { + ConstraintSet::from_ast(context, constraint_set).map(|set| set.into()) } compile::Expression::Malformed(kind) => Err(GenericFailure( format!("Malformed syntax, expected {kind}").into(), diff --git a/interpreter/src/execution/values/closure.rs b/interpreter/src/execution/values/closure.rs index 0be5db9..c01938a 100644 --- a/interpreter/src/execution/values/closure.rs +++ b/interpreter/src/execution/values/closure.rs @@ -53,6 +53,7 @@ impl BuiltinCallableDatabase { super::list::register_methods(&mut database); super::file::register_methods(&mut database); super::string::register_methods(&mut database); + super::constraint_set::register_methods(&mut database); database } @@ -282,10 +283,6 @@ impl StaticTypeName for UserClosure { pub trait BuiltinCallable: Sync + Send { fn call(&self, context: &ExecutionContext, argument: Dictionary) -> ExpressionResult; - fn formula_call(&self, context: &ExecutionContext, _value: Value) -> ExpressionResult; - fn formula_inverse(&self, context: &ExecutionContext, _value: Value) - -> ExpressionResult; - fn name(&self) -> &str; fn signature(&self) -> &Arc; @@ -417,28 +414,6 @@ macro_rules! build_function_callable { (self.function)(context, &self.signature, argument) } - fn formula_call( - &self, - context: &$crate::execution::ExecutionContext, - _value: $crate::execution::values::Value - ) -> ExpressionResult<$crate::execution::values::Value> { - Err( - $crate::execution::errors::GenericFailure(format!("Function {} cannot be used in formulas", self.name()).into()) - .to_error(context.stack_trace), - ) - } - - fn formula_inverse( - &self, - context: &$crate::execution::ExecutionContext, - _value: $crate::execution::values::Value, - ) -> ExpressionResult<$crate::execution::values::Value> { - Err( - $crate::execution::errors::GenericFailure(format!("Function {} does not have an inverse", self.name()).into()) - .to_error(context.stack_trace), - ) - } - fn name(&self) -> &str { &self.name } @@ -491,26 +466,20 @@ macro_rules! build_function { #[macro_export] macro_rules! build_method_callable { ($name:expr, - ($context:ident: &ExecutionContext, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block, - formula = $formula:expr, - inverse = $inverse:expr + ($context:ident: &ExecutionContext, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block ) => {{ - struct BuiltFunction + struct BuiltFunction where F: Fn(&$crate::execution::ExecutionContext, &$crate::execution::values::closure::Signature, $crate::values::Dictionary) -> ExpressionResult<$crate::execution::values::Value> { function: F, - formula: FC, - inverse: FI, signature: std::sync::Arc<$crate::execution::values::closure::Signature>, name: String, } - impl $crate::execution::values::closure::BuiltinCallable for BuiltFunction + impl $crate::execution::values::closure::BuiltinCallable for BuiltFunction where F: Fn(&$crate::execution::ExecutionContext, &$crate::execution::values::closure::Signature, $crate::values::Dictionary) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync, - FC: Fn(&$crate::execution::ExecutionContext, $crate::execution::values::Value) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync, - FI: Fn(&$crate::execution::ExecutionContext, $crate::execution::values::Value) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync { fn call( &self, @@ -520,22 +489,6 @@ macro_rules! build_method_callable { (self.function)(context, &self.signature, argument) } - fn formula_call( - &self, - context: &$crate::execution::ExecutionContext, - value: $crate::execution::values::Value - ) -> ExpressionResult<$crate::execution::values::Value> { - (self.formula)(context, value) - } - - fn formula_inverse( - &self, - context: &$crate::execution::ExecutionContext, - value: $crate::execution::values::Value, - ) -> ExpressionResult<$crate::execution::values::Value> { - (self.inverse)(context, value) - } - fn name(&self) -> &str { &self.name } @@ -551,8 +504,6 @@ macro_rules! build_method_callable { signature: &$crate::execution::values::closure::Signature, argument: $crate::execution::values::Dictionary | -> ExpressionResult<$crate::execution::values::Value> { - // use $crate::execution::errors::Raise; - let $this = $context.get_variable( $crate::execution::logging::LocatedStr { location: $context.stack_trace.bottom().clone(), @@ -577,8 +528,6 @@ macro_rules! build_method_callable { }; Ok(result.into()) }, - formula: $formula, - inverse: $inverse, signature: $crate::build_closure_signature!(($($($arg: $ty $(= $default)?),*)*) -> $return_type), name: $name.into(), } @@ -591,32 +540,7 @@ macro_rules! build_method { $ident:ty, $name:expr, ($context:ident: &ExecutionContext, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block ) => {{ let callable = $crate::build_method_callable!($name, - ($context: &ExecutionContext, $this: $this_type $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code, - formula = |context: &$crate::execution::ExecutionContext, _value| { - Err( - $crate::execution::errors::GenericFailure(format!("Method {} cannot be used in formulas", stringify!($name)).into()) - .to_error(context.stack_trace), - ) - }, - inverse = |context: &$crate::execution::ExecutionContext, _value| { - Err( - $crate::execution::errors::GenericFailure(format!("Method {} does not have an inverse", stringify!($name)).into()) - .to_error(context.stack_trace), - ) - } - ); - - $database.register::<$ident>(Box::new(callable)) - }}; - ($database:ident, - $ident:ty, $name:expr, ($context:ident: &ExecutionContext, $this:ident: $this_type:ty $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:path $code:block, - formula = $formula:expr, - inverse = $inverse:expr - ) => {{ - let callable = $crate::build_method_callable!($name, - ($context: &ExecutionContext, $this: $this_type $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code, - formula = $formula, - inverse = $inverse + ($context: &ExecutionContext, $this: $this_type $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code ); $database.register::<$ident>(Box::new(callable)) diff --git a/interpreter/src/execution/values/constraint_set.rs b/interpreter/src/execution/values/constraint_set.rs new file mode 100644 index 0000000..99cf114 --- /dev/null +++ b/interpreter/src/execution/values/constraint_set.rs @@ -0,0 +1,664 @@ +/* + * Copyright 2026 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use common_data_types::{Dimension, Float}; +use hashable_map::{HashableMap, HashableSet}; +use imstr::ImString; +use selen::api::{add, div, eq, float, ge, gt, le, lt, mul, ne, sub, ExprBuilder, Model, VarId}; + +use crate::{ + compile::{ + constraint_set::{ + BinaryExpressionOperation, ConstraintSet as AstConstraintSet, ConstraintSetExpression, + Relation, UnaryExpressionOperation, + }, + AstNode, + }, + execution::{ + errors::{ErrorType, ExpressionResult, GenericFailure, Raise}, + logging::LocatedStr, + }, + values::{ + self, + closure::{BuiltinCallable, Signature}, + scalar::UnwrapNotNan, + BuiltinCallableDatabase, BuiltinFunction, Dictionary, MissingAttributeError, Object, + Scalar, StaticTypeName, StructDefinition, Style, Value, ValueType, + }, + ExecutionContext, +}; +use std::{ + borrow::Cow, + collections::{HashMap, HashSet}, + sync::Arc, +}; + +pub fn find_all_captured_variables_in_constraint_set( + constraint_set: &AstConstraintSet, + access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, +) -> ExpressionResult<()> { + use crate::compile::constraint_set; + + fn search_expression( + variables: &Vec>, + expression: &constraint_set::ConstraintSetExpression, + access_collector: &mut dyn FnMut(&AstNode) -> ExpressionResult<()>, + ) -> ExpressionResult<()> { + match expression { + ConstraintSetExpression::Parenthesis(expression) => { + search_expression(variables, &expression.node, access_collector) + } + ConstraintSetExpression::Identifier(ast_node) => { + if !variables + .iter() + .any(|variable| variable.node == ast_node.node) + { + access_collector(ast_node) + } else { + // Is not a captured variable. + Ok(()) + } + } + ConstraintSetExpression::UnaryExpression(ast_node) => { + search_expression(variables, &ast_node.node.expression.node, access_collector) + } + ConstraintSetExpression::BinaryExpression(ast_node) => { + search_expression(variables, &ast_node.node.a.node, access_collector)?; + search_expression(variables, &ast_node.node.b.node, access_collector)?; + Ok(()) + } + ConstraintSetExpression::MethodCall(ast_node) => { + search_expression( + variables, + &ast_node.node.self_dictionary.node, + access_collector, + )?; + search_expression(variables, &ast_node.node.argument.node, access_collector)?; + + Ok(()) + } + ConstraintSetExpression::Scalar(_) => Ok(()), + } + } + + search_expression( + &constraint_set.variables, + &constraint_set.left.node, + access_collector, + )?; + search_expression( + &constraint_set.variables, + &constraint_set.right.node, + access_collector, + )?; + + Ok(()) +} + +fn display_expression( + context: &ExecutionContext, + captured_values: &HashableMap, + expression: &ConstraintSetExpression, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, +) -> std::fmt::Result { + match expression { + ConstraintSetExpression::Parenthesis(ast_node) => { + write!(f, "(")?; + display_expression( + context, + captured_values, + &ast_node.node, + f, + style, + precision, + )?; + write!(f, ")")?; + + Ok(()) + } + ConstraintSetExpression::Scalar(ast_node) => values::Scalar { + dimension: ast_node.node.dimension, + value: ast_node.node.value, + } + .format(context, f, style, precision), + ConstraintSetExpression::Identifier(ast_node) => { + if let Some(value) = captured_values.get(&ast_node.node) { + value.format(context, f, style, precision) + } else { + write!(f, "{}", ast_node.node) + } + } + ConstraintSetExpression::UnaryExpression(ast_node) => { + let operation = match ast_node.node.operation.node { + UnaryExpressionOperation::Add => "+", + UnaryExpressionOperation::Sub => "-", + }; + + write!(f, "{operation}")?; + display_expression( + context, + captured_values, + &ast_node.node.expression.node, + f, + style, + precision, + ) + } + ConstraintSetExpression::BinaryExpression(ast_node) => { + let operation = match ast_node.node.operation.node { + BinaryExpressionOperation::Mul => "*", + BinaryExpressionOperation::Add => "+", + BinaryExpressionOperation::Sub => "-", + BinaryExpressionOperation::Div => "/", + }; + + display_expression( + context, + captured_values, + &ast_node.node.a.node, + f, + style, + precision, + )?; + write!(f, " {operation} ")?; + display_expression( + context, + captured_values, + &ast_node.node.b.node, + f, + style, + precision, + ) + } + ConstraintSetExpression::MethodCall(ast_node) => { + display_expression( + context, + captured_values, + &ast_node.node.self_dictionary.node, + f, + style, + precision, + )?; + write!(f, "::")?; + display_expression( + context, + captured_values, + &ast_node.node.argument.node, + f, + style, + precision, + ) + } + } +} + +#[derive(Debug, Eq, PartialEq, Clone)] +pub struct ConstraintSet { + variables: Arc>, + captured_values: Arc>, + source: Arc, +} + +impl ConstraintSet { + pub fn from_ast( + context: &ExecutionContext, + source: &AstNode>, + ) -> ExpressionResult { + let mut variables = HashSet::new(); + let mut duplicate_variables = Vec::new(); + for variable in source.node.variables.iter().map(|field| &field.node) { + if !variables.insert(variable.clone()) { + duplicate_variables.push(variable.clone()); + } + } + + if !duplicate_variables.is_empty() { + return Err(DuplicateVariablesError { + variables: duplicate_variables, + } + .to_error(context.stack_trace)); + } + + let mut captured_values = HashMap::new(); + find_all_captured_variables_in_constraint_set(&source.node, &mut |name| { + let value = context + .get_variable_for_closure( + [], + LocatedStr { + location: name.reference.clone(), + string: name.node.as_str(), + }, + )? + .clone(); + + captured_values.insert(name.node.clone(), value); + + Ok(()) + })?; + + Ok(Self { + variables: Arc::new(HashableSet::from(HashSet::from_iter(variables))), + captured_values: Arc::new(HashableMap::from(captured_values)), + source: source.node.clone(), + }) + } +} + +impl Object for ConstraintSet { + fn get_type(&self, _context: &ExecutionContext) -> ValueType { + ValueType::ConstraintSet(self.variables.clone()) + } + + fn format( + &self, + context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + style: Style, + precision: Option, + ) -> std::fmt::Result { + write!(f, "<<<")?; + + let mut variables: Vec<_> = self.variables.iter().collect(); + variables.sort_unstable(); + + let mut variables = self.variables.iter().peekable(); + + while let Some(variable) = variables.next() { + if variables.peek().is_some() { + write!(f, "{variable}, ")?; + } else { + write!(f, "{variable}")?; + } + } + + write!(f, ": ")?; + + display_expression( + context, + &self.captured_values, + &self.source.left.node, + f, + style, + precision, + )?; + + let relation = match self.source.relation { + Relation::Less => "<", + Relation::LessEqual => "<=", + Relation::Equal => "==", + Relation::GreaterEqual => ">=", + Relation::Greater => ">", + Relation::NotEqual => "!=", + }; + write!(f, " {} ", relation)?; + + display_expression( + context, + &self.captured_values, + &self.source.right.node, + f, + style, + precision, + )?; + + write!(f, ">>>")?; + + Ok(()) + } + + fn get_attribute( + &self, + context: &ExecutionContext, + attribute: &str, + ) -> ExpressionResult { + match attribute { + "solve" => Ok(BuiltinFunction::new::().into()), + _ => Err(MissingAttributeError { + name: attribute.into(), + } + .to_error(context.stack_trace)), + } + } +} + +struct ValueProvider<'l> { + provided: &'l Dictionary, + captured: &'l HashableMap, +} + +impl<'l> ValueProvider<'l> { + fn get(&self, name: &ImString) -> Option<&Value> { + self.provided + .get(name.as_str()) + .or_else(|| self.captured.get(name)) + } +} + +impl ConstraintSet { + fn solve( + &self, + context: &ExecutionContext, + provided: Dictionary, + ) -> ExpressionResult { + let value_provider = ValueProvider { + provided: &provided, + captured: &self.captured_values, + }; + + let mut m = Model::default(); + let mut dimension = Option::None; + + let mut variables = HashMap::new(); + + let left = Self::model_expression( + context, + &value_provider, + &mut m, + &mut variables, + &mut dimension, + &self.source.left.node, + )?; + let right = Self::model_expression( + context, + &value_provider, + &mut m, + &mut variables, + &mut dimension, + &self.source.right.node, + )?; + + Self::build_relation(&mut m, &self.source.relation, left, right); + let solution = m + .solve() + .map_err(|error| SolverError(error).to_error(context.stack_trace))?; + + let dimension = dimension.ok_or_else(|| { + GenericFailure("Could not determine dimension of constraint set".into()) + .to_error(context.stack_trace) + })?; + + let mut members = HashMap::new(); + for (variable_name, variable_id) in variables { + // Values that do not get solved are our inputs. + if let Some(value) = solution.as_float(variable_id) { + members.insert( + variable_name, + Scalar { + dimension, + value: Float::new(value).unwrap_not_nan(context.stack_trace)?, + } + .into(), + ); + } + } + + // Include the provided values. + for (name, value) in provided.data.members.iter() { + members.entry(name.clone()).or_insert(value.clone()); + } + + Ok(Dictionary::new(context, members)) + } + + fn build_relation( + m: &mut Model, + relation: &Relation, + left: impl Into, + right: impl Into, + ) { + match relation { + Relation::Less => lt(m, left, right), + Relation::LessEqual => le(m, left, right), + Relation::Equal => eq(m, left, right), + Relation::GreaterEqual => ge(m, left, right), + Relation::Greater => gt(m, left, right), + Relation::NotEqual => ne(m, left, right), + } + } + + fn model_expression( + context: &ExecutionContext, + value_provider: &ValueProvider<'_>, + m: &mut Model, + variables: &mut HashMap, + dimension: &mut Option, + expression: &ConstraintSetExpression, + ) -> ExpressionResult { + match expression { + ConstraintSetExpression::Parenthesis(ast_node) => Self::model_expression( + context, + value_provider, + m, + variables, + dimension, + &ast_node.node, + ), + ConstraintSetExpression::Scalar(ast_node) => { + let value = Scalar { + dimension: ast_node.node.dimension, + value: ast_node.node.value, + }; + + context.trace_scope(ast_node.reference.clone(), |context| { + Self::build_scalar(context, dimension, value) + }) + } + ConstraintSetExpression::Identifier(ast_node) => { + context.trace_scope(ast_node.reference.clone(), |context| { + let name = &ast_node.node; + if let Some(value) = value_provider + .get(name) + .filter(|value| !matches!(value, Value::ValueNone(_))) + { + match value { + Value::Scalar(scalar) => { + Self::build_scalar(context, dimension, scalar.clone()) + } + value => Err(GenericFailure( + format!( + "{} types are not supported in constraint sets", + value.type_name() + ) + .into(), + ) + .to_error(context.stack_trace)), + } + } else { + let variable = variables + .entry(name.clone()) + .or_insert_with(|| m.float(f64::MIN, f64::MAX)); + Ok(ExprBuilder::Var(*variable)) + } + }) + } + ConstraintSetExpression::UnaryExpression(ast_node) => { + let expression = Self::model_expression( + context, + value_provider, + m, + variables, + dimension, + &ast_node.node.expression.node, + )?; + + match ast_node.node.operation.node { + UnaryExpressionOperation::Add => Ok(expression), + UnaryExpressionOperation::Sub => Ok(expression.mul(-1)), + } + } + ConstraintSetExpression::BinaryExpression(ast_node) => { + let a = Self::model_expression( + context, + value_provider, + m, + variables, + dimension, + &ast_node.node.a.node, + )?; + let b = Self::model_expression( + context, + value_provider, + m, + variables, + dimension, + &ast_node.node.b.node, + )?; + + match ast_node.node.operation.node { + BinaryExpressionOperation::Mul => Ok(mul(a, b)), + BinaryExpressionOperation::Add => Ok(add(a, b)), + BinaryExpressionOperation::Sub => Ok(sub(a, b)), + BinaryExpressionOperation::Div => Ok(div(a, b)), + } + } + ConstraintSetExpression::MethodCall(ast_node) => { + context.trace_scope(ast_node.reference.clone(), |context| { + Err( + GenericFailure("Methods are not yet supported in constraint sets".into()) + .to_error(context.stack_trace), + ) + }) + } + } + } + + fn build_scalar( + context: &ExecutionContext, + dimension: &mut Option, + value: Scalar, + ) -> ExpressionResult { + if let Some(dimension) = dimension { + if value.dimension != Dimension::zero() && *dimension != value.dimension { + return Err(GenericFailure( + "All measurements in constraint set must be of the same dimension".into(), + ) + .to_error(context.stack_trace)); + } + } else { + if value.dimension != Dimension::zero() { + *dimension = Some(value.dimension); + } + } + + Ok(ExprBuilder::Val(float(*value.value))) + } +} + +impl StaticTypeName for ConstraintSet { + fn static_type_name() -> Cow<'static, str> { + "ConstraintSet".into() + } +} + +#[derive(Debug, Eq, PartialEq)] +struct DuplicateVariablesError { + pub variables: Vec, +} + +impl ErrorType for DuplicateVariablesError {} + +impl std::fmt::Display for DuplicateVariablesError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "Constraint set contains the following duplicate fields: " + )?; + + let mut variables = self.variables.iter().peekable(); + + while let Some(variable) = variables.next() { + if variables.peek().is_some() { + write!(f, "{variable}, ")?; + } else { + write!(f, "{variable}")?; + } + } + + Ok(()) + } +} + +#[derive(Debug)] +struct SolverError(selen::api::SolverError); + +impl ErrorType for SolverError {} + +impl std::fmt::Display for SolverError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.0) + } +} + +mod methods { + pub struct Solve; +} + +pub fn register_methods(database: &mut BuiltinCallableDatabase) { + struct BuiltFunction { + signature: Arc, + } + + impl BuiltinCallable for BuiltFunction { + fn call( + &self, + context: &ExecutionContext, + argument: Dictionary, + ) -> ExpressionResult { + let this = context + .get_variable(LocatedStr { + location: context.stack_trace.bottom().clone(), + string: "self", + })? + .downcast_ref::(context.stack_trace)? + .clone(); + + let solution = this.solve(context, argument)?; + Ok(solution.into()) + } + + fn name(&self) -> &str { + "ConstraintSet::solve" + } + + fn signature(&self) -> &Arc { + &self.signature + } + } + + let callable = BuiltFunction { + signature: Arc::new(Signature { + argument_type: StructDefinition { + members: Arc::new(HashableMap::from(HashMap::new())), + variadic: true, + }, + return_type: ValueType::Dictionary(StructDefinition { + members: Arc::new(HashableMap::new()), + variadic: true, + }), + }), + }; + + database.register::(Box::new(callable)) +} + +// TODO test variable capturing. +// TODO test formatting +// TODO test explicitly passing none. +// TODO test all 6 constraint types. diff --git a/interpreter/src/execution/values/mod.rs b/interpreter/src/execution/values/mod.rs index 5c2d20f..d915aba 100644 --- a/interpreter/src/execution/values/mod.rs +++ b/interpreter/src/execution/values/mod.rs @@ -56,6 +56,9 @@ pub use string::{formatting::Style, IString}; mod file; pub use file::File; +pub mod constraint_set; +pub use constraint_set::ConstraintSet; + mod value_type; pub use value_type::{StructDefinition, StructMember, ValueType}; @@ -284,6 +287,7 @@ pub enum Value { Vector3(Vector3), Vector4(Vector4), File, + ConstraintSet, // Quaternion, } diff --git a/interpreter/src/execution/values/scalar.rs b/interpreter/src/execution/values/scalar.rs index 87a7364..b6fe868 100644 --- a/interpreter/src/execution/values/scalar.rs +++ b/interpreter/src/execution/values/scalar.rs @@ -538,22 +538,6 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { dimension: this.dimension / 2, value: Float::new(this.value.sqrt()).unwrap_not_nan(context.stack_trace)? }) - }, - formula = |context: &ExecutionContext, value: Value| -> ExpressionResult { - let value = value.downcast_for_binary_op::(context.stack_trace)?; - - Ok(Scalar { - dimension: value.dimension / 2, - value: Float::new(value.value.sqrt()).unwrap_not_nan(context.stack_trace)? - }.into()) - }, - inverse = |context: &ExecutionContext, value: Value| -> ExpressionResult { - let value = value.downcast_for_binary_op::(context.stack_trace)?; - - Ok(Scalar { - dimension: value.dimension * 2, - value: Float::new(value.value.powi(2)).unwrap_not_nan(context.stack_trace)? - }.into()) } ); build_method!( diff --git a/interpreter/src/execution/values/string/mod.rs b/interpreter/src/execution/values/string/mod.rs index 68b5f3f..0e426fa 100644 --- a/interpreter/src/execution/values/string/mod.rs +++ b/interpreter/src/execution/values/string/mod.rs @@ -199,28 +199,6 @@ fn register_format_method(database: &mut BuiltinCallableDatabase) { Ok(IString(ImString::from(output)).into()) } - fn formula_call( - &self, - context: &ExecutionContext, - _value: Value, - ) -> ExpressionResult { - Err( - GenericFailure("Method String::format cannot be used in formulas".into()) - .to_error(context.stack_trace), - ) - } - - fn formula_inverse( - &self, - context: &ExecutionContext, - _value: Value, - ) -> ExpressionResult { - Err( - GenericFailure("Method String::format does not have an inverse".into()) - .to_error(context.stack_trace), - ) - } - fn name(&self) -> &str { "String::format" } diff --git a/interpreter/src/execution/values/value_type.rs b/interpreter/src/execution/values/value_type.rs index 2becce8..182001d 100644 --- a/interpreter/src/execution/values/value_type.rs +++ b/interpreter/src/execution/values/value_type.rs @@ -18,7 +18,7 @@ use std::{borrow::Cow, collections::HashMap, fmt::Display, sync::Arc}; use common_data_types::Dimension; -use hashable_map::HashableMap; +use hashable_map::{HashableMap, HashableSet}; use imstr::ImString; use super::{ @@ -60,6 +60,7 @@ pub enum ValueType { MultiType(Box, Box), File, Any, + ConstraintSet(Arc>), } impl From for ValueType { @@ -179,6 +180,24 @@ impl Display for ValueType { Self::MultiType(left, right) => write!(f, "{left} | {right}"), Self::List(Some(ty)) => write!(f, "[{ty}]"), Self::List(Option::None) => write!(f, "[]"), + Self::ConstraintSet(variables) => { + write!(f, "<<<")?; + + // To get a consistent output, sort the variables. + let mut variables: Vec<_> = variables.iter().collect(); + variables.sort_unstable(); + let mut variables = variables.iter().peekable(); + + while let Some(variable) = variables.next() { + if variables.peek().is_some() { + write!(f, "{variable}, ")?; + } else { + write!(f, "{variable}")?; + } + } + + write!(f, ": _ >>>") + } _ => write!(f, "{}", self.name()), } } diff --git a/tree-sitter-command-cad-model/grammar.js b/tree-sitter-command-cad-model/grammar.js index 51b5683..a8f9bf8 100644 --- a/tree-sitter-command-cad-model/grammar.js +++ b/tree-sitter-command-cad-model/grammar.js @@ -32,7 +32,7 @@ const PREC = { }; const unary_operator_table = ['-', '+', '!']; -const formula_unary_operator_table = ['-', '+', '!']; +const constraint_set_unary_operator_table = ['-', '+']; function make_unary_expression(table, expression) { return choice(...table.map((operator) => seq( @@ -68,18 +68,12 @@ const binary_operator_table = [ [PREC.xor, '^^'], ]; -const formula_binary_operator_table = [ - [PREC.exponential, '**'], - +const constraint_set_binary_operator_table = [ [PREC.multiplicative, '*'], [PREC.multiplicative, '/'], [PREC.additive, '+'], [PREC.additive, '-'], - - [PREC.and, '&&'], - [PREC.or, '||'], - [PREC.xor, '^^'], ]; function make_binary_expression(table, expression) { @@ -164,7 +158,7 @@ module.exports = grammar({ $.binary_expression, $.function_call, $.method_call, - $.formula, + $.constraint_set, $.let_in ), unary_expression: $=> make_unary_expression(unary_operator_table, $.expression), @@ -185,7 +179,7 @@ module.exports = grammar({ list: $ => seq( '[', repeat(seq($.expression, ',')), - optional(seq($.expression)), + optional($.expression), ']' ), @@ -223,38 +217,30 @@ module.exports = grammar({ field('expression', $.expression), )), - _formula_relation: $ => choice('>', '>=', '==', '<=', '<', '!='), - formula: $ => seq('<<<', field('lhs', $.formula_expression), field('relation', $._formula_relation), field('rhs', $.formula_expression), '>>>'), - formula_expression: $ => choice( - $.formula_parenthesis, - $.signed_integer, - $.unsigned_integer, - $.boolean, + _constraint_set_relation: $ => choice('>', '>=', '==', '<=', '<', '!='), + constraint_set_fields: $ => seq(repeat(seq($.identifier, ',')), $.identifier), + constraint_set: $ => seq( + '<<<', + field('variables', $.constraint_set_fields), ':', + field('lhs', $.constraint_set_expression), + field('relation', $._constraint_set_relation), + field('rhs', $.constraint_set_expression), + '>>>'), + constraint_set_expression: $ => choice( + $.constraint_set_parenthesis, $.scalar, - $.formula_vector2, - $.formula_vector3, - $.formula_vector4, $.identifier, - $.formula_unary_expression, - $.formula_binary_expression, - $.formula_method_call, - $.formula_function_call + $.constraint_set_unary_expression, + $.constraint_set_binary_expression, + $.constraint_set_method_call, ), - formula_parenthesis: $ => seq('(', $.formula_expression, ')'), - formula_unary_expression: $ => make_unary_expression(formula_unary_operator_table, $.formula_expression), - formula_binary_expression: $ => make_binary_expression(formula_binary_operator_table, $.formula_expression), - formula_method_call: $ => seq( + constraint_set_parenthesis: $ => seq('(', $.constraint_set_expression, ')'), + constraint_set_unary_expression: $ => make_unary_expression(constraint_set_unary_operator_table, $.constraint_set_expression), + constraint_set_binary_expression: $ => make_binary_expression(constraint_set_binary_operator_table, $.constraint_set_expression), + constraint_set_method_call: $ => seq( prec.left(PREC.method_call, seq( - field('self_dictionary', $.formula_expression), '::', field('to_call', $.identifier), '(', field("argument", $.formula_expression), ')' - )) - ), - formula_function_call: $ => seq( - prec.left(PREC.function_call, seq( - field('to_call', $.formula_expression), '(', field("argument", $.formula_expression, ')'), + field('self_dictionary', $.constraint_set_expression), '::', field('to_call', $.identifier), '(', field("argument", $.constraint_set_expression), ')' )) ), - formula_vector2: $ => seq('<(', field('x', $.formula_expression), ',', field('y', $.formula_expression), ')>'), - formula_vector3: $ => seq('<(', field('x', $.formula_expression), ',', field('y', $.formula_expression), ',', field('z', $.formula_expression), ')>'), - formula_vector4: $ => seq('<(', field('x', $.formula_expression), ',', field('y', $.formula_expression), ',', field('z', $.formula_expression), ',', field('w', $.formula_expression), ')>'), } }); diff --git a/tree-sitter-command-cad-model/src/grammar.json b/tree-sitter-command-cad-model/src/grammar.json index b83d8b0..f9cd538 100644 --- a/tree-sitter-command-cad-model/src/grammar.json +++ b/tree-sitter-command-cad-model/src/grammar.json @@ -566,7 +566,7 @@ }, { "type": "SYMBOL", - "name": "formula" + "name": "constraint_set" }, { "type": "SYMBOL", @@ -1470,13 +1470,8 @@ "type": "CHOICE", "members": [ { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "expression" - } - ] + "type": "SYMBOL", + "name": "expression" }, { "type": "BLANK" @@ -1768,7 +1763,7 @@ ] } }, - "_formula_relation": { + "_constraint_set_relation": { "type": "CHOICE", "members": [ { @@ -1797,19 +1792,56 @@ } ] }, - "formula": { + "constraint_set_fields": { + "type": "SEQ", + "members": [ + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "STRING", + "value": "," + } + ] + } + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + }, + "constraint_set": { "type": "SEQ", "members": [ { "type": "STRING", "value": "<<<" }, + { + "type": "FIELD", + "name": "variables", + "content": { + "type": "SYMBOL", + "name": "constraint_set_fields" + } + }, + { + "type": "STRING", + "value": ":" + }, { "type": "FIELD", "name": "lhs", "content": { "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" } }, { @@ -1817,7 +1849,7 @@ "name": "relation", "content": { "type": "SYMBOL", - "name": "_formula_relation" + "name": "_constraint_set_relation" } }, { @@ -1825,7 +1857,7 @@ "name": "rhs", "content": { "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" } }, { @@ -1834,64 +1866,36 @@ } ] }, - "formula_expression": { + "constraint_set_expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", - "name": "formula_parenthesis" - }, - { - "type": "SYMBOL", - "name": "signed_integer" - }, - { - "type": "SYMBOL", - "name": "unsigned_integer" - }, - { - "type": "SYMBOL", - "name": "boolean" + "name": "constraint_set_parenthesis" }, { "type": "SYMBOL", "name": "scalar" }, - { - "type": "SYMBOL", - "name": "formula_vector2" - }, - { - "type": "SYMBOL", - "name": "formula_vector3" - }, - { - "type": "SYMBOL", - "name": "formula_vector4" - }, { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", - "name": "formula_unary_expression" + "name": "constraint_set_unary_expression" }, { "type": "SYMBOL", - "name": "formula_binary_expression" + "name": "constraint_set_binary_expression" }, { "type": "SYMBOL", - "name": "formula_method_call" - }, - { - "type": "SYMBOL", - "name": "formula_function_call" + "name": "constraint_set_method_call" } ] }, - "formula_parenthesis": { + "constraint_set_parenthesis": { "type": "SEQ", "members": [ { @@ -1900,7 +1904,7 @@ }, { "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" }, { "type": "STRING", @@ -1908,7 +1912,7 @@ } ] }, - "formula_unary_expression": { + "constraint_set_unary_expression": { "type": "CHOICE", "members": [ { @@ -1927,7 +1931,7 @@ }, { "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" } ] } @@ -1949,29 +1953,7 @@ }, { "type": "SYMBOL", - "name": "formula_expression" - } - ] - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "!" - } - }, - { - "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" } ] } @@ -1979,42 +1961,9 @@ } ] }, - "formula_binary_expression": { + "constraint_set_binary_expression": { "type": "CHOICE", "members": [ - { - "type": "PREC_LEFT", - "value": 11, - "content": { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "a", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "**" - } - }, - { - "type": "FIELD", - "name": "b", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - } - ] - } - }, { "type": "PREC_LEFT", "value": 10, @@ -2026,7 +1975,7 @@ "name": "a", "content": { "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" } }, { @@ -2042,7 +1991,7 @@ "name": "b", "content": { "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" } } ] @@ -2059,7 +2008,7 @@ "name": "a", "content": { "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" } }, { @@ -2075,7 +2024,7 @@ "name": "b", "content": { "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" } } ] @@ -2092,7 +2041,7 @@ "name": "a", "content": { "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" } }, { @@ -2108,7 +2057,7 @@ "name": "b", "content": { "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" } } ] @@ -2125,7 +2074,7 @@ "name": "a", "content": { "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" } }, { @@ -2141,106 +2090,7 @@ "name": "b", "content": { "type": "SYMBOL", - "name": "formula_expression" - } - } - ] - } - }, - { - "type": "PREC_LEFT", - "value": 3, - "content": { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "a", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "&&" - } - }, - { - "type": "FIELD", - "name": "b", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - } - ] - } - }, - { - "type": "PREC_LEFT", - "value": 2, - "content": { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "a", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "||" - } - }, - { - "type": "FIELD", - "name": "b", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - } - ] - } - }, - { - "type": "PREC_LEFT", - "value": 1, - "content": { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "a", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - }, - { - "type": "FIELD", - "name": "op", - "content": { - "type": "STRING", - "value": "^^" - } - }, - { - "type": "FIELD", - "name": "b", - "content": { - "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" } } ] @@ -2248,7 +2098,7 @@ } ] }, - "formula_method_call": { + "constraint_set_method_call": { "type": "SEQ", "members": [ { @@ -2262,7 +2112,7 @@ "name": "self_dictionary", "content": { "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" } }, { @@ -2286,7 +2136,7 @@ "name": "argument", "content": { "type": "SYMBOL", - "name": "formula_expression" + "name": "constraint_set_expression" } }, { @@ -2297,175 +2147,6 @@ } } ] - }, - "formula_function_call": { - "type": "SEQ", - "members": [ - { - "type": "PREC_LEFT", - "value": 14, - "content": { - "type": "SEQ", - "members": [ - { - "type": "FIELD", - "name": "to_call", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - }, - { - "type": "STRING", - "value": "(" - }, - { - "type": "FIELD", - "name": "argument", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - } - ] - } - } - ] - }, - "formula_vector2": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "<(" - }, - { - "type": "FIELD", - "name": "x", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - }, - { - "type": "STRING", - "value": "," - }, - { - "type": "FIELD", - "name": "y", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - }, - { - "type": "STRING", - "value": ")>" - } - ] - }, - "formula_vector3": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "<(" - }, - { - "type": "FIELD", - "name": "x", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - }, - { - "type": "STRING", - "value": "," - }, - { - "type": "FIELD", - "name": "y", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - }, - { - "type": "STRING", - "value": "," - }, - { - "type": "FIELD", - "name": "z", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - }, - { - "type": "STRING", - "value": ")>" - } - ] - }, - "formula_vector4": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "<(" - }, - { - "type": "FIELD", - "name": "x", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - }, - { - "type": "STRING", - "value": "," - }, - { - "type": "FIELD", - "name": "y", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - }, - { - "type": "STRING", - "value": "," - }, - { - "type": "FIELD", - "name": "z", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - }, - { - "type": "STRING", - "value": "," - }, - { - "type": "FIELD", - "name": "w", - "content": { - "type": "SYMBOL", - "name": "formula_expression" - } - }, - { - "type": "STRING", - "value": ")>" - } - ] } }, "extras": [ diff --git a/tree-sitter-command-cad-model/src/node-types.json b/tree-sitter-command-cad-model/src/node-types.json index c7bafd1..ce4d974 100644 --- a/tree-sitter-command-cad-model/src/node-types.json +++ b/tree-sitter-command-cad-model/src/node-types.json @@ -173,171 +173,7 @@ } }, { - "type": "declaration_type", - "named": true, - "fields": {}, - "children": { - "multiple": false, - "required": true, - "types": [ - { - "type": "expression", - "named": true - } - ] - } - }, - { - "type": "dictionary_construction", - "named": true, - "fields": { - "assignments": { - "multiple": true, - "required": false, - "types": [ - { - "type": ",", - "named": false - }, - { - "type": "dictionary_member_assignment", - "named": true - } - ] - } - } - }, - { - "type": "dictionary_member_assignment", - "named": true, - "fields": { - "assignment": { - "multiple": false, - "required": true, - "types": [ - { - "type": "expression", - "named": true - } - ] - }, - "name": { - "multiple": false, - "required": true, - "types": [ - { - "type": "identifier", - "named": true - } - ] - } - } - }, - { - "type": "expression", - "named": true, - "fields": {}, - "children": { - "multiple": false, - "required": true, - "types": [ - { - "type": "binary_expression", - "named": true - }, - { - "type": "boolean", - "named": true - }, - { - "type": "closure_definition", - "named": true - }, - { - "type": "dictionary_construction", - "named": true - }, - { - "type": "formula", - "named": true - }, - { - "type": "function_call", - "named": true - }, - { - "type": "identifier", - "named": true - }, - { - "type": "if", - "named": true - }, - { - "type": "let_in", - "named": true - }, - { - "type": "list", - "named": true - }, - { - "type": "member_access", - "named": true - }, - { - "type": "method_call", - "named": true - }, - { - "type": "parenthesis", - "named": true - }, - { - "type": "scalar", - "named": true - }, - { - "type": "self", - "named": true - }, - { - "type": "signed_integer", - "named": true - }, - { - "type": "string", - "named": true - }, - { - "type": "struct_definition", - "named": true - }, - { - "type": "unary_expression", - "named": true - }, - { - "type": "unsigned_integer", - "named": true - }, - { - "type": "vector2", - "named": true - }, - { - "type": "vector3", - "named": true - }, - { - "type": "vector4", - "named": true - } - ] - } - }, - { - "type": "formula", + "type": "constraint_set", "named": true, "fields": { "lhs": { @@ -345,7 +181,7 @@ "required": true, "types": [ { - "type": "formula_expression", + "type": "constraint_set_expression", "named": true } ] @@ -385,7 +221,17 @@ "required": true, "types": [ { - "type": "formula_expression", + "type": "constraint_set_expression", + "named": true + } + ] + }, + "variables": { + "multiple": false, + "required": true, + "types": [ + { + "type": "constraint_set_fields", "named": true } ] @@ -393,7 +239,7 @@ } }, { - "type": "formula_binary_expression", + "type": "constraint_set_binary_expression", "named": true, "fields": { "a": { @@ -401,7 +247,7 @@ "required": true, "types": [ { - "type": "formula_expression", + "type": "constraint_set_expression", "named": true } ] @@ -411,7 +257,7 @@ "required": true, "types": [ { - "type": "formula_expression", + "type": "constraint_set_expression", "named": true } ] @@ -420,18 +266,10 @@ "multiple": false, "required": true, "types": [ - { - "type": "&&", - "named": false - }, { "type": "*", "named": false }, - { - "type": "**", - "named": false - }, { "type": "+", "named": false @@ -443,21 +281,13 @@ { "type": "/", "named": false - }, - { - "type": "^^", - "named": false - }, - { - "type": "||", - "named": false } ] } } }, { - "type": "formula_expression", + "type": "constraint_set_expression", "named": true, "fields": {}, "children": { @@ -465,39 +295,19 @@ "required": true, "types": [ { - "type": "boolean", + "type": "constraint_set_binary_expression", "named": true }, { - "type": "formula_binary_expression", + "type": "constraint_set_method_call", "named": true }, { - "type": "formula_function_call", + "type": "constraint_set_parenthesis", "named": true }, { - "type": "formula_method_call", - "named": true - }, - { - "type": "formula_parenthesis", - "named": true - }, - { - "type": "formula_unary_expression", - "named": true - }, - { - "type": "formula_vector2", - "named": true - }, - { - "type": "formula_vector3", - "named": true - }, - { - "type": "formula_vector4", + "type": "constraint_set_unary_expression", "named": true }, { @@ -507,46 +317,27 @@ { "type": "scalar", "named": true - }, - { - "type": "signed_integer", - "named": true - }, - { - "type": "unsigned_integer", - "named": true } ] } }, { - "type": "formula_function_call", + "type": "constraint_set_fields", "named": true, - "fields": { - "argument": { - "multiple": false, - "required": true, - "types": [ - { - "type": "formula_expression", - "named": true - } - ] - }, - "to_call": { - "multiple": false, - "required": true, - "types": [ - { - "type": "formula_expression", - "named": true - } - ] - } + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] } }, { - "type": "formula_method_call", + "type": "constraint_set_method_call", "named": true, "fields": { "argument": { @@ -554,7 +345,7 @@ "required": true, "types": [ { - "type": "formula_expression", + "type": "constraint_set_expression", "named": true } ] @@ -564,7 +355,7 @@ "required": true, "types": [ { - "type": "formula_expression", + "type": "constraint_set_expression", "named": true } ] @@ -582,7 +373,7 @@ } }, { - "type": "formula_parenthesis", + "type": "constraint_set_parenthesis", "named": true, "fields": {}, "children": { @@ -590,24 +381,20 @@ "required": true, "types": [ { - "type": "formula_expression", + "type": "constraint_set_expression", "named": true } ] } }, { - "type": "formula_unary_expression", + "type": "constraint_set_unary_expression", "named": true, "fields": { "op": { "multiple": false, "required": true, "types": [ - { - "type": "!", - "named": false - }, { "type": "+", "named": false @@ -624,68 +411,41 @@ "required": true, "types": [ { - "type": "formula_expression", + "type": "constraint_set_expression", "named": true } ] } }, { - "type": "formula_vector2", + "type": "declaration_type", "named": true, - "fields": { - "x": { - "multiple": false, - "required": true, - "types": [ - { - "type": "formula_expression", - "named": true - } - ] - }, - "y": { - "multiple": false, - "required": true, - "types": [ - { - "type": "formula_expression", - "named": true - } - ] - } + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] } }, { - "type": "formula_vector3", + "type": "dictionary_construction", "named": true, "fields": { - "x": { - "multiple": false, - "required": true, - "types": [ - { - "type": "formula_expression", - "named": true - } - ] - }, - "y": { - "multiple": false, - "required": true, + "assignments": { + "multiple": true, + "required": false, "types": [ { - "type": "formula_expression", - "named": true - } - ] - }, - "z": { - "multiple": false, - "required": true, - "types": [ + "type": ",", + "named": false + }, { - "type": "formula_expression", + "type": "dictionary_member_assignment", "named": true } ] @@ -693,51 +453,134 @@ } }, { - "type": "formula_vector4", + "type": "dictionary_member_assignment", "named": true, "fields": { - "w": { - "multiple": false, - "required": true, - "types": [ - { - "type": "formula_expression", - "named": true - } - ] - }, - "x": { - "multiple": false, - "required": true, - "types": [ - { - "type": "formula_expression", - "named": true - } - ] - }, - "y": { + "assignment": { "multiple": false, "required": true, "types": [ { - "type": "formula_expression", + "type": "expression", "named": true } ] }, - "z": { + "name": { "multiple": false, "required": true, "types": [ { - "type": "formula_expression", + "type": "identifier", "named": true } ] } } }, + { + "type": "expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "binary_expression", + "named": true + }, + { + "type": "boolean", + "named": true + }, + { + "type": "closure_definition", + "named": true + }, + { + "type": "constraint_set", + "named": true + }, + { + "type": "dictionary_construction", + "named": true + }, + { + "type": "function_call", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "if", + "named": true + }, + { + "type": "let_in", + "named": true + }, + { + "type": "list", + "named": true + }, + { + "type": "member_access", + "named": true + }, + { + "type": "method_call", + "named": true + }, + { + "type": "parenthesis", + "named": true + }, + { + "type": "scalar", + "named": true + }, + { + "type": "self", + "named": true + }, + { + "type": "signed_integer", + "named": true + }, + { + "type": "string", + "named": true + }, + { + "type": "struct_definition", + "named": true + }, + { + "type": "unary_expression", + "named": true + }, + { + "type": "unsigned_integer", + "named": true + }, + { + "type": "vector2", + "named": true + }, + { + "type": "vector3", + "named": true + }, + { + "type": "vector4", + "named": true + } + ] + } + }, { "type": "function_call", "named": true, diff --git a/tree-sitter-command-cad-model/src/parser.c b/tree-sitter-command-cad-model/src/parser.c index 9b1fa0c..919ee9f 100644 --- a/tree-sitter-command-cad-model/src/parser.c +++ b/tree-sitter-command-cad-model/src/parser.c @@ -7,16 +7,16 @@ #endif #define LANGUAGE_VERSION 15 -#define STATE_COUNT 384 +#define STATE_COUNT 322 #define LARGE_STATE_COUNT 4 -#define SYMBOL_COUNT 107 +#define SYMBOL_COUNT 105 #define ALIAS_COUNT 0 #define TOKEN_COUNT 58 #define EXTERNAL_TOKEN_COUNT 0 -#define FIELD_COUNT 31 +#define FIELD_COUNT 32 #define MAX_ALIAS_SEQUENCE_LENGTH 9 #define MAX_RESERVED_WORD_SET_SIZE 0 -#define PRODUCTION_ID_COUNT 31 +#define PRODUCTION_ID_COUNT 30 #define SUPERTYPE_COUNT 0 enum ts_symbol_identifiers { @@ -111,21 +111,19 @@ enum ts_symbol_identifiers { sym_dictionary_member_assignment = 89, sym_dictionary_construction = 90, sym_closure_definition = 91, - sym__formula_relation = 92, - sym_formula = 93, - sym_formula_expression = 94, - sym_formula_parenthesis = 95, - sym_formula_unary_expression = 96, - sym_formula_binary_expression = 97, - sym_formula_method_call = 98, - sym_formula_function_call = 99, - sym_formula_vector2 = 100, - sym_formula_vector3 = 101, - sym_formula_vector4 = 102, - aux_sym_let_in_repeat1 = 103, - aux_sym_list_repeat1 = 104, - aux_sym_struct_definition_repeat1 = 105, - aux_sym_dictionary_construction_repeat1 = 106, + sym__constraint_set_relation = 92, + sym_constraint_set_fields = 93, + sym_constraint_set = 94, + sym_constraint_set_expression = 95, + sym_constraint_set_parenthesis = 96, + sym_constraint_set_unary_expression = 97, + sym_constraint_set_binary_expression = 98, + sym_constraint_set_method_call = 99, + aux_sym_let_in_repeat1 = 100, + aux_sym_list_repeat1 = 101, + aux_sym_struct_definition_repeat1 = 102, + aux_sym_dictionary_construction_repeat1 = 103, + aux_sym_constraint_set_fields_repeat1 = 104, }; static const char * const ts_symbol_names[] = { @@ -221,21 +219,19 @@ static const char * const ts_symbol_names[] = { [sym_dictionary_member_assignment] = "dictionary_member_assignment", [sym_dictionary_construction] = "dictionary_construction", [sym_closure_definition] = "closure_definition", - [sym__formula_relation] = "_formula_relation", - [sym_formula] = "formula", - [sym_formula_expression] = "formula_expression", - [sym_formula_parenthesis] = "formula_parenthesis", - [sym_formula_unary_expression] = "formula_unary_expression", - [sym_formula_binary_expression] = "formula_binary_expression", - [sym_formula_method_call] = "formula_method_call", - [sym_formula_function_call] = "formula_function_call", - [sym_formula_vector2] = "formula_vector2", - [sym_formula_vector3] = "formula_vector3", - [sym_formula_vector4] = "formula_vector4", + [sym__constraint_set_relation] = "_constraint_set_relation", + [sym_constraint_set_fields] = "constraint_set_fields", + [sym_constraint_set] = "constraint_set", + [sym_constraint_set_expression] = "constraint_set_expression", + [sym_constraint_set_parenthesis] = "constraint_set_parenthesis", + [sym_constraint_set_unary_expression] = "constraint_set_unary_expression", + [sym_constraint_set_binary_expression] = "constraint_set_binary_expression", + [sym_constraint_set_method_call] = "constraint_set_method_call", [aux_sym_let_in_repeat1] = "let_in_repeat1", [aux_sym_list_repeat1] = "list_repeat1", [aux_sym_struct_definition_repeat1] = "struct_definition_repeat1", [aux_sym_dictionary_construction_repeat1] = "dictionary_construction_repeat1", + [aux_sym_constraint_set_fields_repeat1] = "constraint_set_fields_repeat1", }; static const TSSymbol ts_symbol_map[] = { @@ -331,21 +327,19 @@ static const TSSymbol ts_symbol_map[] = { [sym_dictionary_member_assignment] = sym_dictionary_member_assignment, [sym_dictionary_construction] = sym_dictionary_construction, [sym_closure_definition] = sym_closure_definition, - [sym__formula_relation] = sym__formula_relation, - [sym_formula] = sym_formula, - [sym_formula_expression] = sym_formula_expression, - [sym_formula_parenthesis] = sym_formula_parenthesis, - [sym_formula_unary_expression] = sym_formula_unary_expression, - [sym_formula_binary_expression] = sym_formula_binary_expression, - [sym_formula_method_call] = sym_formula_method_call, - [sym_formula_function_call] = sym_formula_function_call, - [sym_formula_vector2] = sym_formula_vector2, - [sym_formula_vector3] = sym_formula_vector3, - [sym_formula_vector4] = sym_formula_vector4, + [sym__constraint_set_relation] = sym__constraint_set_relation, + [sym_constraint_set_fields] = sym_constraint_set_fields, + [sym_constraint_set] = sym_constraint_set, + [sym_constraint_set_expression] = sym_constraint_set_expression, + [sym_constraint_set_parenthesis] = sym_constraint_set_parenthesis, + [sym_constraint_set_unary_expression] = sym_constraint_set_unary_expression, + [sym_constraint_set_binary_expression] = sym_constraint_set_binary_expression, + [sym_constraint_set_method_call] = sym_constraint_set_method_call, [aux_sym_let_in_repeat1] = aux_sym_let_in_repeat1, [aux_sym_list_repeat1] = aux_sym_list_repeat1, [aux_sym_struct_definition_repeat1] = aux_sym_struct_definition_repeat1, [aux_sym_dictionary_construction_repeat1] = aux_sym_dictionary_construction_repeat1, + [aux_sym_constraint_set_fields_repeat1] = aux_sym_constraint_set_fields_repeat1, }; static const TSSymbolMetadata ts_symbol_metadata[] = { @@ -717,47 +711,35 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, - [sym__formula_relation] = { + [sym__constraint_set_relation] = { .visible = false, .named = true, }, - [sym_formula] = { + [sym_constraint_set_fields] = { .visible = true, .named = true, }, - [sym_formula_expression] = { + [sym_constraint_set] = { .visible = true, .named = true, }, - [sym_formula_parenthesis] = { + [sym_constraint_set_expression] = { .visible = true, .named = true, }, - [sym_formula_unary_expression] = { + [sym_constraint_set_parenthesis] = { .visible = true, .named = true, }, - [sym_formula_binary_expression] = { + [sym_constraint_set_unary_expression] = { .visible = true, .named = true, }, - [sym_formula_method_call] = { + [sym_constraint_set_binary_expression] = { .visible = true, .named = true, }, - [sym_formula_function_call] = { - .visible = true, - .named = true, - }, - [sym_formula_vector2] = { - .visible = true, - .named = true, - }, - [sym_formula_vector3] = { - .visible = true, - .named = true, - }, - [sym_formula_vector4] = { + [sym_constraint_set_method_call] = { .visible = true, .named = true, }, @@ -777,6 +759,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = false, .named = false, }, + [aux_sym_constraint_set_fields_repeat1] = { + .visible = false, + .named = false, + }, }; enum ts_field_identifiers { @@ -806,11 +792,12 @@ enum ts_field_identifiers { field_to_call = 24, field_unit = 25, field_value = 26, - field_w = 27, - field_whole = 28, - field_x = 29, - field_y = 30, - field_z = 31, + field_variables = 27, + field_w = 28, + field_whole = 29, + field_x = 30, + field_y = 31, + field_z = 32, }; static const char * const ts_field_names[] = { @@ -841,6 +828,7 @@ static const char * const ts_field_names[] = { [field_to_call] = "to_call", [field_unit] = "unit", [field_value] = "value", + [field_variables] = "variables", [field_w] = "w", [field_whole] = "whole", [field_x] = "x", @@ -867,18 +855,17 @@ static const TSMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [16] = {.index = 24, .length = 2}, [17] = {.index = 26, .length = 2}, [18] = {.index = 28, .length = 2}, - [19] = {.index = 30, .length = 2}, - [20] = {.index = 32, .length = 3}, + [19] = {.index = 30, .length = 3}, + [20] = {.index = 33, .length = 2}, [21] = {.index = 35, .length = 2}, [22] = {.index = 37, .length = 2}, - [23] = {.index = 39, .length = 2}, - [24] = {.index = 41, .length = 3}, - [25] = {.index = 44, .length = 3}, - [26] = {.index = 47, .length = 3}, - [27] = {.index = 50, .length = 3}, - [28] = {.index = 53, .length = 3}, - [29] = {.index = 56, .length = 3}, - [30] = {.index = 59, .length = 4}, + [23] = {.index = 39, .length = 3}, + [24] = {.index = 42, .length = 3}, + [25] = {.index = 45, .length = 3}, + [26] = {.index = 48, .length = 3}, + [27] = {.index = 51, .length = 4}, + [28] = {.index = 55, .length = 4}, + [29] = {.index = 59, .length = 3}, }; static const TSFieldMapEntry ts_field_map_entries[] = { @@ -931,50 +918,48 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_final_element, 2}, {field_members, 1}, [30] = - {field_argument, 2}, - {field_to_call, 0}, - [32] = {field_argument, 3}, {field_self_dictionary, 0}, {field_to_call, 2}, - [35] = + [33] = {field_x, 1}, {field_y, 3}, - [37] = + [35] = {field_ident, 0}, {field_value, 2}, - [39] = + [37] = {field_default, 3}, {field_name, 0}, - [41] = + [39] = {field_assignments, 1}, {field_assignments, 2}, {field_assignments, 3}, - [44] = - {field_lhs, 1}, - {field_relation, 2}, - {field_rhs, 3}, - [47] = + [42] = {field_argument, 0}, {field_expression, 4}, {field_result, 2}, - [50] = + [45] = {field_condition, 1}, {field_on_false, 5}, {field_on_true, 3}, - [53] = + [48] = {field_x, 1}, {field_y, 3}, {field_z, 5}, - [56] = - {field_argument, 4}, - {field_self_dictionary, 0}, - {field_to_call, 2}, - [59] = + [51] = + {field_lhs, 3}, + {field_relation, 4}, + {field_rhs, 5}, + {field_variables, 1}, + [55] = {field_w, 7}, {field_x, 1}, {field_y, 3}, {field_z, 5}, + [59] = + {field_argument, 4}, + {field_self_dictionary, 0}, + {field_to_call, 2}, }; static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { @@ -992,9 +977,9 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [3] = 2, [4] = 4, [5] = 5, - [6] = 6, + [6] = 5, [7] = 4, - [8] = 6, + [8] = 8, [9] = 9, [10] = 10, [11] = 11, @@ -1027,14 +1012,14 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [38] = 12, [39] = 13, [40] = 14, - [41] = 34, - [42] = 16, - [43] = 17, - [44] = 18, - [45] = 19, - [46] = 20, - [47] = 30, - [48] = 32, + [41] = 16, + [42] = 17, + [43] = 18, + [44] = 19, + [45] = 24, + [46] = 46, + [47] = 31, + [48] = 33, [49] = 34, [50] = 35, [51] = 10, @@ -1047,23 +1032,23 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [58] = 17, [59] = 18, [60] = 19, - [61] = 20, - [62] = 25, - [63] = 30, - [64] = 32, - [65] = 35, - [66] = 66, - [67] = 21, - [68] = 22, - [69] = 23, - [70] = 31, - [71] = 33, - [72] = 21, - [73] = 23, - [74] = 28, - [75] = 66, - [76] = 66, - [77] = 25, + [61] = 24, + [62] = 29, + [63] = 31, + [64] = 34, + [65] = 33, + [66] = 35, + [67] = 20, + [68] = 21, + [69] = 22, + [70] = 30, + [71] = 32, + [72] = 20, + [73] = 22, + [74] = 46, + [75] = 27, + [76] = 27, + [77] = 29, [78] = 78, [79] = 79, [80] = 80, @@ -1076,7 +1061,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [87] = 87, [88] = 88, [89] = 89, - [90] = 83, + [90] = 90, [91] = 91, [92] = 92, [93] = 93, @@ -1087,185 +1072,185 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [98] = 98, [99] = 99, [100] = 100, - [101] = 86, - [102] = 100, + [101] = 101, + [102] = 102, [103] = 103, [104] = 104, [105] = 105, [106] = 106, - [107] = 85, + [107] = 107, [108] = 108, - [109] = 87, - [110] = 88, - [111] = 89, - [112] = 91, + [109] = 109, + [110] = 110, + [111] = 111, + [112] = 112, [113] = 113, - [114] = 84, - [115] = 100, + [114] = 114, + [115] = 115, [116] = 116, - [117] = 85, - [118] = 108, - [119] = 87, - [120] = 88, - [121] = 89, - [122] = 83, - [123] = 91, - [124] = 103, - [125] = 92, - [126] = 96, - [127] = 97, - [128] = 98, - [129] = 99, - [130] = 130, - [131] = 108, - [132] = 132, + [117] = 117, + [118] = 118, + [119] = 119, + [120] = 120, + [121] = 121, + [122] = 122, + [123] = 123, + [124] = 79, + [125] = 78, + [126] = 79, + [127] = 127, + [128] = 81, + [129] = 80, + [130] = 78, + [131] = 131, + [132] = 82, [133] = 133, - [134] = 134, - [135] = 135, - [136] = 136, - [137] = 137, - [138] = 138, - [139] = 139, + [134] = 98, + [135] = 99, + [136] = 100, + [137] = 101, + [138] = 102, + [139] = 104, [140] = 140, - [141] = 141, - [142] = 142, - [143] = 143, - [144] = 144, - [145] = 145, - [146] = 146, + [141] = 80, + [142] = 114, + [143] = 115, + [144] = 133, + [145] = 112, + [146] = 122, [147] = 147, - [148] = 148, - [149] = 149, + [148] = 83, + [149] = 97, [150] = 150, [151] = 151, - [152] = 152, - [153] = 153, + [152] = 140, + [153] = 84, [154] = 154, - [155] = 155, - [156] = 156, - [157] = 157, - [158] = 158, - [159] = 159, - [160] = 160, - [161] = 161, - [162] = 162, - [163] = 163, - [164] = 78, - [165] = 79, - [166] = 78, + [155] = 85, + [156] = 82, + [157] = 81, + [158] = 86, + [159] = 87, + [160] = 116, + [161] = 154, + [162] = 92, + [163] = 94, + [164] = 95, + [165] = 96, + [166] = 150, [167] = 167, - [168] = 168, - [169] = 82, - [170] = 80, - [171] = 81, - [172] = 79, - [173] = 173, - [174] = 133, - [175] = 134, - [176] = 135, - [177] = 136, - [178] = 137, - [179] = 138, - [180] = 139, - [181] = 140, - [182] = 142, - [183] = 95, - [184] = 93, - [185] = 154, - [186] = 157, - [187] = 130, - [188] = 80, - [189] = 161, - [190] = 81, - [191] = 94, - [192] = 192, - [193] = 193, - [194] = 194, - [195] = 152, - [196] = 173, - [197] = 113, - [198] = 155, - [199] = 192, - [200] = 194, - [201] = 156, - [202] = 132, - [203] = 203, - [204] = 204, - [205] = 82, - [206] = 193, - [207] = 116, - [208] = 208, - [209] = 209, - [210] = 146, - [211] = 152, - [212] = 212, - [213] = 161, - [214] = 133, - [215] = 134, - [216] = 135, - [217] = 136, - [218] = 137, - [219] = 138, - [220] = 139, - [221] = 140, - [222] = 141, - [223] = 142, - [224] = 144, - [225] = 145, - [226] = 149, - [227] = 150, - [228] = 151, - [229] = 153, - [230] = 154, - [231] = 157, - [232] = 160, - [233] = 162, - [234] = 104, - [235] = 105, - [236] = 106, + [168] = 120, + [169] = 121, + [170] = 110, + [171] = 171, + [172] = 90, + [173] = 116, + [174] = 89, + [175] = 175, + [176] = 93, + [177] = 123, + [178] = 178, + [179] = 91, + [180] = 92, + [181] = 94, + [182] = 95, + [183] = 96, + [184] = 97, + [185] = 98, + [186] = 99, + [187] = 100, + [188] = 101, + [189] = 102, + [190] = 103, + [191] = 104, + [192] = 105, + [193] = 167, + [194] = 107, + [195] = 108, + [196] = 196, + [197] = 111, + [198] = 113, + [199] = 114, + [200] = 115, + [201] = 117, + [202] = 118, + [203] = 119, + [204] = 88, + [205] = 205, + [206] = 206, + [207] = 122, + [208] = 175, + [209] = 178, + [210] = 167, + [211] = 211, + [212] = 178, + [213] = 211, + [214] = 109, + [215] = 106, + [216] = 112, + [217] = 217, + [218] = 171, + [219] = 171, + [220] = 217, + [221] = 221, + [222] = 78, + [223] = 80, + [224] = 82, + [225] = 225, + [226] = 226, + [227] = 227, + [228] = 228, + [229] = 229, + [230] = 229, + [231] = 231, + [232] = 232, + [233] = 233, + [234] = 234, + [235] = 226, + [236] = 232, [237] = 237, - [238] = 238, + [238] = 81, [239] = 239, - [240] = 158, - [241] = 143, + [240] = 228, + [241] = 234, [242] = 242, - [243] = 148, + [243] = 242, [244] = 244, - [245] = 155, + [245] = 88, [246] = 246, - [247] = 208, - [248] = 209, - [249] = 239, - [250] = 208, - [251] = 209, - [252] = 163, - [253] = 156, - [254] = 159, - [255] = 132, - [256] = 238, - [257] = 244, - [258] = 244, - [259] = 147, - [260] = 246, - [261] = 78, - [262] = 79, - [263] = 82, - [264] = 80, - [265] = 81, + [247] = 246, + [248] = 244, + [249] = 249, + [250] = 250, + [251] = 251, + [252] = 252, + [253] = 252, + [254] = 251, + [255] = 255, + [256] = 256, + [257] = 257, + [258] = 256, + [259] = 257, + [260] = 257, + [261] = 256, + [262] = 262, + [263] = 263, + [264] = 264, + [265] = 265, [266] = 266, [267] = 267, - [268] = 268, + [268] = 267, [269] = 269, [270] = 270, - [271] = 271, - [272] = 272, + [271] = 269, + [272] = 266, [273] = 273, - [274] = 116, - [275] = 105, - [276] = 106, - [277] = 104, + [274] = 265, + [275] = 273, + [276] = 270, + [277] = 277, [278] = 278, - [279] = 278, + [279] = 279, [280] = 280, [281] = 281, [282] = 282, @@ -1273,103 +1258,41 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [284] = 284, [285] = 285, [286] = 286, - [287] = 280, - [288] = 285, - [289] = 286, - [290] = 283, - [291] = 284, - [292] = 282, - [293] = 281, - [294] = 267, - [295] = 266, - [296] = 268, - [297] = 286, - [298] = 284, - [299] = 282, - [300] = 273, - [301] = 269, + [287] = 287, + [288] = 279, + [289] = 289, + [290] = 290, + [291] = 279, + [292] = 279, + [293] = 293, + [294] = 294, + [295] = 295, + [296] = 296, + [297] = 281, + [298] = 295, + [299] = 299, + [300] = 300, + [301] = 301, [302] = 302, [303] = 303, - [304] = 285, - [305] = 270, - [306] = 281, - [307] = 280, - [308] = 302, - [309] = 283, - [310] = 303, - [311] = 271, + [304] = 304, + [305] = 305, + [306] = 306, + [307] = 307, + [308] = 308, + [309] = 302, + [310] = 310, + [311] = 311, [312] = 312, - [313] = 312, - [314] = 314, - [315] = 315, - [316] = 314, + [313] = 313, + [314] = 310, + [315] = 300, + [316] = 312, [317] = 317, - [318] = 317, + [318] = 318, [319] = 319, - [320] = 319, - [321] = 315, - [322] = 322, - [323] = 322, - [324] = 324, - [325] = 325, - [326] = 325, - [327] = 327, - [328] = 327, - [329] = 325, - [330] = 327, - [331] = 331, - [332] = 332, - [333] = 333, - [334] = 334, - [335] = 334, - [336] = 336, - [337] = 337, - [338] = 337, - [339] = 339, - [340] = 340, - [341] = 341, - [342] = 336, - [343] = 340, - [344] = 332, - [345] = 345, - [346] = 346, - [347] = 347, - [348] = 348, - [349] = 349, - [350] = 350, - [351] = 351, - [352] = 352, - [353] = 353, - [354] = 354, - [355] = 354, - [356] = 348, - [357] = 357, - [358] = 358, - [359] = 354, - [360] = 358, - [361] = 361, - [362] = 358, - [363] = 358, - [364] = 364, - [365] = 365, - [366] = 366, - [367] = 367, - [368] = 368, - [369] = 369, - [370] = 365, - [371] = 369, - [372] = 372, - [373] = 373, - [374] = 374, - [375] = 372, - [376] = 367, - [377] = 377, - [378] = 368, - [379] = 379, - [380] = 380, - [381] = 381, - [382] = 366, - [383] = 383, + [320] = 301, + [321] = 321, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -1377,600 +1300,580 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { eof = lexer->eof(lexer); switch (state) { case 0: - if (eof) ADVANCE(26); + if (eof) ADVANCE(23); ADVANCE_MAP( - '!', 57, + '!', 54, '"', 5, - '#', 27, - '&', 64, - '\'', 8, - '(', 84, - ')', 85, - '*', 59, - '+', 55, - ',', 50, - '-', 54, - '.', 48, - '/', 60, - '0', 36, - '1', 38, - ':', 83, - ';', 82, - '<', 74, - '=', 81, - '>', 68, - '[', 86, - ']', 87, - '^', 66, - 't', 31, - '|', 65, + '#', 24, + '&', 62, + '\'', 7, + '(', 82, + ')', 83, + '*', 57, + '+', 52, + ',', 47, + '-', 51, + '.', 45, + '/', 58, + '0', 33, + '1', 35, + ':', 81, + ';', 80, + '<', 72, + '=', 79, + '>', 66, + '[', 84, + ']', 85, + '^', 64, + 't', 28, + '|', 63, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(28); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(39); + lookahead == ' ') ADVANCE(25); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(36); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 1: ADVANCE_MAP( - '!', 56, + '!', 53, '"', 5, - '#', 27, - '&', 7, - '(', 84, - ')', 85, - '*', 59, - '+', 55, - ',', 50, - '-', 53, - '.', 11, - '/', 60, - '0', 37, - ':', 13, - '<', 10, - '>', 19, - '[', 86, - ']', 87, - '^', 20, - '|', 21, + '#', 24, + '(', 82, + ')', 83, + '*', 56, + '+', 52, + '-', 50, + '.', 10, + '/', 58, + '0', 34, + ':', 12, + '<', 9, + '>', 18, + '[', 84, + ']', 85, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(28); - if (('1' <= lookahead && lookahead <= '9')) ADVANCE(39); + lookahead == ' ') ADVANCE(25); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(36); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 2: ADVANCE_MAP( - '!', 15, - '#', 27, - '&', 64, - '\'', 8, - '(', 84, - ')', 18, - '*', 59, - '+', 55, - ',', 50, - '-', 54, - '.', 47, - '/', 60, - ':', 13, - '<', 74, - '=', 16, - '>', 69, - '^', 66, - '|', 65, + '!', 14, + '#', 24, + '&', 62, + '\'', 7, + '(', 82, + ')', 17, + '*', 57, + '+', 52, + ',', 47, + '-', 51, + '.', 44, + '/', 58, + ':', 12, + '<', 72, + '=', 15, + '>', 67, + '^', 64, + '|', 63, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(28); + lookahead == ' ') ADVANCE(25); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 3: ADVANCE_MAP( - '!', 15, - '#', 27, - '&', 7, - '\'', 8, - '(', 84, - ')', 18, - '*', 59, - '+', 55, - ',', 50, - '-', 53, - '.', 47, - '/', 60, - ':', 13, - '<', 75, - '=', 16, - '>', 67, - '^', 20, - '|', 21, + '!', 14, + '#', 24, + '\'', 7, + '*', 56, + '+', 52, + '-', 50, + '.', 44, + '/', 58, + ':', 12, + '<', 73, + '=', 15, + '>', 65, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(28); + lookahead == ' ') ADVANCE(25); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); case 4: ADVANCE_MAP( - '!', 15, - '#', 27, - '&', 7, - '(', 84, - ')', 85, - '*', 59, - '+', 55, - ',', 50, - '-', 53, - '/', 60, - ':', 13, - '<', 75, - '=', 16, - '>', 70, - '^', 20, - '|', 21, + '!', 14, + '#', 24, + ')', 83, + '*', 56, + '+', 52, + '-', 50, + '/', 58, + ':', 12, + '<', 73, + '=', 15, + '>', 68, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(28); + lookahead == ' ') ADVANCE(25); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(42); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(39); END_STATE(); case 5: - if (lookahead == '"') ADVANCE(34); + if (lookahead == '"') ADVANCE(31); if (lookahead == '\\') ADVANCE(6); if (lookahead != 0) ADVANCE(5); END_STATE(); case 6: - if (lookahead == '"') ADVANCE(35); + if (lookahead == '"') ADVANCE(32); if (lookahead == '\\') ADVANCE(6); if (lookahead != 0) ADVANCE(5); END_STATE(); case 7: - if (lookahead == '&') ADVANCE(77); + if (lookahead == '\'') ADVANCE(42); + if (lookahead == '\\') ADVANCE(8); + if (lookahead != 0) ADVANCE(7); END_STATE(); case 8: - if (lookahead == '\'') ADVANCE(45); - if (lookahead == '\\') ADVANCE(9); - if (lookahead != 0) ADVANCE(8); + if (lookahead == '\'') ADVANCE(43); + if (lookahead == '\\') ADVANCE(8); + if (lookahead != 0) ADVANCE(7); END_STATE(); case 9: - if (lookahead == '\'') ADVANCE(46); - if (lookahead == '\\') ADVANCE(9); - if (lookahead != 0) ADVANCE(8); + if (lookahead == '(') ADVANCE(46); + if (lookahead == '<') ADVANCE(13); END_STATE(); case 10: - if (lookahead == '(') ADVANCE(49); - if (lookahead == '<') ADVANCE(14); + if (lookahead == '.') ADVANCE(11); END_STATE(); case 11: - if (lookahead == '.') ADVANCE(12); + if (lookahead == '.') ADVANCE(86); END_STATE(); case 12: - if (lookahead == '.') ADVANCE(88); + if (lookahead == ':') ADVANCE(49); END_STATE(); case 13: - if (lookahead == ':') ADVANCE(52); + if (lookahead == '<') ADVANCE(88); END_STATE(); case 14: - if (lookahead == '<') ADVANCE(90); + if (lookahead == '=') ADVANCE(74); END_STATE(); case 15: - if (lookahead == '=') ADVANCE(76); + if (lookahead == '=') ADVANCE(70); END_STATE(); case 16: - if (lookahead == '=') ADVANCE(72); + if (lookahead == '>') ADVANCE(89); END_STATE(); case 17: - if (lookahead == '>') ADVANCE(91); + if (lookahead == '>') ADVANCE(48); END_STATE(); case 18: - if (lookahead == '>') ADVANCE(51); + if (lookahead == '>') ADVANCE(16); END_STATE(); case 19: - if (lookahead == '>') ADVANCE(17); - END_STATE(); - case 20: - if (lookahead == '^') ADVANCE(79); - END_STATE(); - case 21: - if (lookahead == '|') ADVANCE(78); - END_STATE(); - case 22: - if (eof) ADVANCE(26); + if (eof) ADVANCE(23); ADVANCE_MAP( - '!', 15, - '#', 27, - '&', 64, - '\'', 8, - '(', 84, - ')', 85, - '*', 59, - '+', 55, - ',', 50, - '-', 54, - '.', 47, - '/', 60, - ':', 83, - ';', 82, - '<', 74, - '=', 81, - '>', 69, - ']', 87, - '^', 66, - 't', 31, - '|', 65, - '0', 44, - '1', 44, + '!', 14, + '#', 24, + '&', 62, + '\'', 7, + '(', 82, + ')', 83, + '*', 57, + '+', 52, + ',', 47, + '-', 51, + '.', 44, + '/', 58, + ':', 81, + ';', 80, + '<', 72, + '=', 79, + '>', 67, + ']', 85, + '^', 64, + 't', 28, + '|', 63, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(28); + lookahead == ' ') ADVANCE(25); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); - case 23: - if (eof) ADVANCE(26); + case 20: + if (eof) ADVANCE(23); ADVANCE_MAP( - '!', 15, - '#', 27, - '&', 64, - '\'', 8, - '(', 84, - ')', 85, - '*', 59, - '+', 55, - ',', 50, - '-', 53, - '.', 47, - '/', 60, - ':', 83, - ';', 82, - '<', 74, - '=', 81, - '>', 68, - ']', 87, - '^', 66, - '|', 65, + '!', 14, + '#', 24, + '&', 62, + '\'', 7, + '(', 82, + ')', 83, + '*', 57, + '+', 52, + ',', 47, + '-', 51, + '.', 44, + '/', 58, + ':', 81, + ';', 80, + '<', 72, + '=', 79, + '>', 67, + ']', 85, + '^', 64, + '|', 63, + '0', 41, + '1', 41, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(28); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(39); + lookahead == ' ') ADVANCE(25); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); - case 24: - if (eof) ADVANCE(26); + case 21: + if (eof) ADVANCE(23); ADVANCE_MAP( - '!', 15, - '#', 27, - '&', 64, - '(', 84, - ')', 85, - '*', 59, - '+', 55, - ',', 50, - '-', 54, - '.', 47, - '/', 60, - ':', 83, - ';', 82, - '<', 74, - '=', 81, - '>', 69, - ']', 87, - '^', 66, - '|', 65, + '!', 14, + '#', 24, + '&', 62, + '\'', 7, + '(', 82, + ')', 83, + '*', 57, + '+', 52, + ',', 47, + '-', 50, + '.', 44, + '/', 58, + ':', 81, + ';', 80, + '<', 72, + '=', 79, + '>', 66, + ']', 85, + '^', 64, + '|', 63, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(28); + lookahead == ' ') ADVANCE(25); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(36); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); - case 25: - if (eof) ADVANCE(26); + case 22: + if (eof) ADVANCE(23); ADVANCE_MAP( - '!', 15, - '#', 27, - '&', 64, - '(', 84, - ')', 85, - '*', 59, - '+', 55, - ',', 50, - '-', 53, - '.', 47, - '/', 60, - ':', 83, - ';', 82, - '<', 74, - '=', 81, - '>', 68, - ']', 87, - '^', 66, - 't', 31, - '|', 65, + '!', 14, + '#', 24, + '&', 62, + '(', 82, + ')', 83, + '*', 57, + '+', 52, + ',', 47, + '-', 50, + '.', 44, + '/', 58, + ':', 81, + ';', 80, + '<', 72, + '=', 79, + '>', 66, + ']', 85, + '^', 64, + 't', 28, + '|', 63, ); if (('\t' <= lookahead && lookahead <= '\r') || - lookahead == ' ') ADVANCE(28); + lookahead == ' ') ADVANCE(25); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); - case 26: + case 23: ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); - case 27: + case 24: ACCEPT_TOKEN(sym_comment); if (lookahead != 0 && - lookahead != '\n') ADVANCE(27); + lookahead != '\n') ADVANCE(24); END_STATE(); - case 28: + case 25: ACCEPT_TOKEN(sym__whitespace); END_STATE(); - case 29: + case 26: ACCEPT_TOKEN(sym_identifier); - if (lookahead == ' ') ADVANCE(80); + if (lookahead == ' ') ADVANCE(78); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); - case 30: + case 27: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'e') ADVANCE(32); + if (lookahead == 'e') ADVANCE(29); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); - case 31: + case 28: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'h') ADVANCE(30); + if (lookahead == 'h') ADVANCE(27); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); - case 32: + case 29: ACCEPT_TOKEN(sym_identifier); - if (lookahead == 'n') ADVANCE(29); + if (lookahead == 'n') ADVANCE(26); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); - case 33: + case 30: ACCEPT_TOKEN(sym_identifier); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(33); + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(30); END_STATE(); - case 34: + case 31: ACCEPT_TOKEN(sym_string); END_STATE(); - case 35: + case 32: ACCEPT_TOKEN(sym_string); - if (lookahead == '"') ADVANCE(34); + if (lookahead == '"') ADVANCE(31); if (lookahead == '\\') ADVANCE(6); if (lookahead != 0) ADVANCE(5); END_STATE(); - case 36: + case 33: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(43); - if (lookahead == 'o') ADVANCE(40); - if (lookahead == 'x') ADVANCE(41); + if (lookahead == 'b') ADVANCE(40); + if (lookahead == 'o') ADVANCE(37); + if (lookahead == 'x') ADVANCE(38); if (lookahead == '0' || - lookahead == '1') ADVANCE(38); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(39); + lookahead == '1') ADVANCE(35); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(36); END_STATE(); - case 37: + case 34: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (lookahead == 'b') ADVANCE(43); - if (lookahead == 'o') ADVANCE(40); - if (lookahead == 'x') ADVANCE(41); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(39); + if (lookahead == 'b') ADVANCE(40); + if (lookahead == 'o') ADVANCE(37); + if (lookahead == 'x') ADVANCE(38); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(36); END_STATE(); - case 38: + case 35: ACCEPT_TOKEN(aux_sym_base_ten_token1); if (lookahead == '0' || - lookahead == '1') ADVANCE(38); - if (('2' <= lookahead && lookahead <= '9')) ADVANCE(39); + lookahead == '1') ADVANCE(35); + if (('2' <= lookahead && lookahead <= '9')) ADVANCE(36); END_STATE(); - case 39: + case 36: ACCEPT_TOKEN(aux_sym_base_ten_token1); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(36); END_STATE(); - case 40: + case 37: ACCEPT_TOKEN(aux_sym_octal_token1); END_STATE(); - case 41: + case 38: ACCEPT_TOKEN(aux_sym_hex_token1); END_STATE(); - case 42: + case 39: ACCEPT_TOKEN(aux_sym_hex_token2); if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'F') || - ('a' <= lookahead && lookahead <= 'f')) ADVANCE(42); + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(39); END_STATE(); - case 43: + case 40: ACCEPT_TOKEN(aux_sym_binary_token1); END_STATE(); - case 44: + case 41: ACCEPT_TOKEN(aux_sym_binary_token2); if (lookahead == '0' || - lookahead == '1') ADVANCE(44); + lookahead == '1') ADVANCE(41); END_STATE(); - case 45: + case 42: ACCEPT_TOKEN(sym_unit_quote); END_STATE(); - case 46: + case 43: ACCEPT_TOKEN(sym_unit_quote); - if (lookahead == '\'') ADVANCE(45); - if (lookahead == '\\') ADVANCE(9); - if (lookahead != 0) ADVANCE(8); + if (lookahead == '\'') ADVANCE(42); + if (lookahead == '\\') ADVANCE(8); + if (lookahead != 0) ADVANCE(7); END_STATE(); - case 47: + case 44: ACCEPT_TOKEN(anon_sym_DOT); END_STATE(); - case 48: + case 45: ACCEPT_TOKEN(anon_sym_DOT); - if (lookahead == '.') ADVANCE(12); + if (lookahead == '.') ADVANCE(11); END_STATE(); - case 49: + case 46: ACCEPT_TOKEN(anon_sym_LT_LPAREN); END_STATE(); - case 50: + case 47: ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); - case 51: + case 48: ACCEPT_TOKEN(anon_sym_RPAREN_GT); END_STATE(); - case 52: + case 49: ACCEPT_TOKEN(anon_sym_COLON_COLON); END_STATE(); - case 53: + case 50: ACCEPT_TOKEN(anon_sym_DASH); END_STATE(); - case 54: + case 51: ACCEPT_TOKEN(anon_sym_DASH); - if (lookahead == '>') ADVANCE(89); + if (lookahead == '>') ADVANCE(87); END_STATE(); - case 55: + case 52: ACCEPT_TOKEN(anon_sym_PLUS); END_STATE(); - case 56: + case 53: ACCEPT_TOKEN(anon_sym_BANG); END_STATE(); - case 57: + case 54: ACCEPT_TOKEN(anon_sym_BANG); - if (lookahead == '=') ADVANCE(76); + if (lookahead == '=') ADVANCE(74); END_STATE(); - case 58: + case 55: ACCEPT_TOKEN(anon_sym_STAR_STAR); END_STATE(); - case 59: + case 56: ACCEPT_TOKEN(anon_sym_STAR); - if (lookahead == '*') ADVANCE(58); END_STATE(); - case 60: + case 57: + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '*') ADVANCE(55); + END_STATE(); + case 58: ACCEPT_TOKEN(anon_sym_SLASH); END_STATE(); - case 61: + case 59: ACCEPT_TOKEN(anon_sym_LT_LT); END_STATE(); - case 62: + case 60: ACCEPT_TOKEN(anon_sym_GT_GT); END_STATE(); - case 63: + case 61: ACCEPT_TOKEN(anon_sym_GT_GT); - if (lookahead == '>') ADVANCE(91); + if (lookahead == '>') ADVANCE(89); END_STATE(); - case 64: + case 62: ACCEPT_TOKEN(anon_sym_AMP); - if (lookahead == '&') ADVANCE(77); + if (lookahead == '&') ADVANCE(75); END_STATE(); - case 65: + case 63: ACCEPT_TOKEN(anon_sym_PIPE); - if (lookahead == '|') ADVANCE(78); + if (lookahead == '|') ADVANCE(76); END_STATE(); - case 66: + case 64: ACCEPT_TOKEN(anon_sym_CARET); - if (lookahead == '^') ADVANCE(79); + if (lookahead == '^') ADVANCE(77); END_STATE(); - case 67: + case 65: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(71); + if (lookahead == '=') ADVANCE(69); END_STATE(); - case 68: + case 66: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(71); - if (lookahead == '>') ADVANCE(63); + if (lookahead == '=') ADVANCE(69); + if (lookahead == '>') ADVANCE(61); END_STATE(); - case 69: + case 67: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(71); - if (lookahead == '>') ADVANCE(62); + if (lookahead == '=') ADVANCE(69); + if (lookahead == '>') ADVANCE(60); END_STATE(); - case 70: + case 68: ACCEPT_TOKEN(anon_sym_GT); - if (lookahead == '=') ADVANCE(71); - if (lookahead == '>') ADVANCE(17); + if (lookahead == '=') ADVANCE(69); + if (lookahead == '>') ADVANCE(16); END_STATE(); - case 71: + case 69: ACCEPT_TOKEN(anon_sym_GT_EQ); END_STATE(); - case 72: + case 70: ACCEPT_TOKEN(anon_sym_EQ_EQ); END_STATE(); - case 73: + case 71: ACCEPT_TOKEN(anon_sym_LT_EQ); END_STATE(); - case 74: + case 72: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '<') ADVANCE(61); - if (lookahead == '=') ADVANCE(73); + if (lookahead == '<') ADVANCE(59); + if (lookahead == '=') ADVANCE(71); END_STATE(); - case 75: + case 73: ACCEPT_TOKEN(anon_sym_LT); - if (lookahead == '=') ADVANCE(73); + if (lookahead == '=') ADVANCE(71); END_STATE(); - case 76: + case 74: ACCEPT_TOKEN(anon_sym_BANG_EQ); END_STATE(); - case 77: + case 75: ACCEPT_TOKEN(anon_sym_AMP_AMP); END_STATE(); - case 78: + case 76: ACCEPT_TOKEN(anon_sym_PIPE_PIPE); END_STATE(); - case 79: + case 77: ACCEPT_TOKEN(anon_sym_CARET_CARET); END_STATE(); - case 80: + case 78: ACCEPT_TOKEN(anon_sym_then); END_STATE(); - case 81: + case 79: ACCEPT_TOKEN(anon_sym_EQ); - if (lookahead == '=') ADVANCE(72); + if (lookahead == '=') ADVANCE(70); END_STATE(); - case 82: + case 80: ACCEPT_TOKEN(anon_sym_SEMI); END_STATE(); - case 83: + case 81: ACCEPT_TOKEN(anon_sym_COLON); - if (lookahead == ':') ADVANCE(52); + if (lookahead == ':') ADVANCE(49); END_STATE(); - case 84: + case 82: ACCEPT_TOKEN(anon_sym_LPAREN); END_STATE(); - case 85: + case 83: ACCEPT_TOKEN(anon_sym_RPAREN); END_STATE(); - case 86: + case 84: ACCEPT_TOKEN(anon_sym_LBRACK); END_STATE(); - case 87: + case 85: ACCEPT_TOKEN(anon_sym_RBRACK); END_STATE(); - case 88: + case 86: ACCEPT_TOKEN(sym_varadic_dots); END_STATE(); - case 89: + case 87: ACCEPT_TOKEN(anon_sym_DASH_GT); END_STATE(); - case 90: + case 88: ACCEPT_TOKEN(anon_sym_LT_LT_LT); END_STATE(); - case 91: + case 89: ACCEPT_TOKEN(anon_sym_GT_GT_GT); END_STATE(); default: @@ -2156,312 +2059,250 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = { [75] = {.lex_state = 1}, [76] = {.lex_state = 1}, [77] = {.lex_state = 1}, - [78] = {.lex_state = 23}, - [79] = {.lex_state = 23}, - [80] = {.lex_state = 23}, - [81] = {.lex_state = 23}, - [82] = {.lex_state = 23}, - [83] = {.lex_state = 1}, - [84] = {.lex_state = 1}, - [85] = {.lex_state = 1}, - [86] = {.lex_state = 1}, - [87] = {.lex_state = 1}, - [88] = {.lex_state = 1}, - [89] = {.lex_state = 1}, - [90] = {.lex_state = 1}, - [91] = {.lex_state = 1}, - [92] = {.lex_state = 1}, - [93] = {.lex_state = 22}, - [94] = {.lex_state = 22}, - [95] = {.lex_state = 22}, - [96] = {.lex_state = 1}, - [97] = {.lex_state = 1}, - [98] = {.lex_state = 1}, - [99] = {.lex_state = 1}, - [100] = {.lex_state = 1}, - [101] = {.lex_state = 1}, - [102] = {.lex_state = 1}, - [103] = {.lex_state = 1}, - [104] = {.lex_state = 25}, - [105] = {.lex_state = 25}, - [106] = {.lex_state = 25}, - [107] = {.lex_state = 1}, - [108] = {.lex_state = 1}, - [109] = {.lex_state = 1}, - [110] = {.lex_state = 1}, - [111] = {.lex_state = 1}, - [112] = {.lex_state = 1}, - [113] = {.lex_state = 22}, - [114] = {.lex_state = 1}, - [115] = {.lex_state = 1}, - [116] = {.lex_state = 25}, - [117] = {.lex_state = 1}, - [118] = {.lex_state = 1}, - [119] = {.lex_state = 1}, - [120] = {.lex_state = 1}, - [121] = {.lex_state = 1}, - [122] = {.lex_state = 1}, - [123] = {.lex_state = 1}, - [124] = {.lex_state = 1}, - [125] = {.lex_state = 1}, - [126] = {.lex_state = 1}, - [127] = {.lex_state = 1}, - [128] = {.lex_state = 1}, - [129] = {.lex_state = 1}, - [130] = {.lex_state = 22}, - [131] = {.lex_state = 1}, - [132] = {.lex_state = 24}, - [133] = {.lex_state = 24}, - [134] = {.lex_state = 24}, - [135] = {.lex_state = 24}, - [136] = {.lex_state = 24}, - [137] = {.lex_state = 24}, - [138] = {.lex_state = 24}, - [139] = {.lex_state = 24}, - [140] = {.lex_state = 24}, - [141] = {.lex_state = 22}, - [142] = {.lex_state = 24}, - [143] = {.lex_state = 22}, - [144] = {.lex_state = 22}, - [145] = {.lex_state = 22}, - [146] = {.lex_state = 22}, - [147] = {.lex_state = 22}, - [148] = {.lex_state = 22}, - [149] = {.lex_state = 22}, - [150] = {.lex_state = 22}, - [151] = {.lex_state = 22}, - [152] = {.lex_state = 24}, - [153] = {.lex_state = 22}, - [154] = {.lex_state = 24}, - [155] = {.lex_state = 24}, - [156] = {.lex_state = 24}, - [157] = {.lex_state = 24}, - [158] = {.lex_state = 22}, - [159] = {.lex_state = 22}, - [160] = {.lex_state = 22}, - [161] = {.lex_state = 24}, - [162] = {.lex_state = 22}, - [163] = {.lex_state = 22}, + [78] = {.lex_state = 21}, + [79] = {.lex_state = 20}, + [80] = {.lex_state = 21}, + [81] = {.lex_state = 21}, + [82] = {.lex_state = 21}, + [83] = {.lex_state = 19}, + [84] = {.lex_state = 19}, + [85] = {.lex_state = 19}, + [86] = {.lex_state = 19}, + [87] = {.lex_state = 19}, + [88] = {.lex_state = 22}, + [89] = {.lex_state = 19}, + [90] = {.lex_state = 19}, + [91] = {.lex_state = 19}, + [92] = {.lex_state = 20}, + [93] = {.lex_state = 19}, + [94] = {.lex_state = 20}, + [95] = {.lex_state = 20}, + [96] = {.lex_state = 20}, + [97] = {.lex_state = 20}, + [98] = {.lex_state = 20}, + [99] = {.lex_state = 20}, + [100] = {.lex_state = 20}, + [101] = {.lex_state = 20}, + [102] = {.lex_state = 20}, + [103] = {.lex_state = 19}, + [104] = {.lex_state = 20}, + [105] = {.lex_state = 19}, + [106] = {.lex_state = 19}, + [107] = {.lex_state = 19}, + [108] = {.lex_state = 19}, + [109] = {.lex_state = 19}, + [110] = {.lex_state = 19}, + [111] = {.lex_state = 19}, + [112] = {.lex_state = 20}, + [113] = {.lex_state = 19}, + [114] = {.lex_state = 20}, + [115] = {.lex_state = 20}, + [116] = {.lex_state = 20}, + [117] = {.lex_state = 19}, + [118] = {.lex_state = 19}, + [119] = {.lex_state = 19}, + [120] = {.lex_state = 19}, + [121] = {.lex_state = 19}, + [122] = {.lex_state = 20}, + [123] = {.lex_state = 19}, + [124] = {.lex_state = 2}, + [125] = {.lex_state = 2}, + [126] = {.lex_state = 19}, + [127] = {.lex_state = 20}, + [128] = {.lex_state = 2}, + [129] = {.lex_state = 2}, + [130] = {.lex_state = 19}, + [131] = {.lex_state = 20}, + [132] = {.lex_state = 2}, + [133] = {.lex_state = 2}, + [134] = {.lex_state = 2}, + [135] = {.lex_state = 2}, + [136] = {.lex_state = 2}, + [137] = {.lex_state = 2}, + [138] = {.lex_state = 2}, + [139] = {.lex_state = 2}, + [140] = {.lex_state = 20}, + [141] = {.lex_state = 19}, + [142] = {.lex_state = 2}, + [143] = {.lex_state = 2}, + [144] = {.lex_state = 2}, + [145] = {.lex_state = 2}, + [146] = {.lex_state = 2}, + [147] = {.lex_state = 20}, + [148] = {.lex_state = 2}, + [149] = {.lex_state = 2}, + [150] = {.lex_state = 20}, + [151] = {.lex_state = 20}, + [152] = {.lex_state = 20}, + [153] = {.lex_state = 2}, + [154] = {.lex_state = 2}, + [155] = {.lex_state = 2}, + [156] = {.lex_state = 19}, + [157] = {.lex_state = 19}, + [158] = {.lex_state = 2}, + [159] = {.lex_state = 2}, + [160] = {.lex_state = 2}, + [161] = {.lex_state = 2}, + [162] = {.lex_state = 2}, + [163] = {.lex_state = 2}, [164] = {.lex_state = 2}, [165] = {.lex_state = 2}, - [166] = {.lex_state = 22}, - [167] = {.lex_state = 22}, - [168] = {.lex_state = 22}, + [166] = {.lex_state = 20}, + [167] = {.lex_state = 20}, + [168] = {.lex_state = 2}, [169] = {.lex_state = 2}, [170] = {.lex_state = 2}, - [171] = {.lex_state = 2}, - [172] = {.lex_state = 22}, - [173] = {.lex_state = 2}, + [171] = {.lex_state = 19}, + [172] = {.lex_state = 2}, + [173] = {.lex_state = 19}, [174] = {.lex_state = 2}, - [175] = {.lex_state = 2}, + [175] = {.lex_state = 20}, [176] = {.lex_state = 2}, [177] = {.lex_state = 2}, - [178] = {.lex_state = 2}, + [178] = {.lex_state = 20}, [179] = {.lex_state = 2}, - [180] = {.lex_state = 2}, - [181] = {.lex_state = 2}, - [182] = {.lex_state = 2}, - [183] = {.lex_state = 2}, - [184] = {.lex_state = 2}, - [185] = {.lex_state = 2}, - [186] = {.lex_state = 2}, - [187] = {.lex_state = 2}, - [188] = {.lex_state = 22}, - [189] = {.lex_state = 2}, - [190] = {.lex_state = 22}, - [191] = {.lex_state = 2}, - [192] = {.lex_state = 22}, - [193] = {.lex_state = 22}, + [180] = {.lex_state = 19}, + [181] = {.lex_state = 19}, + [182] = {.lex_state = 19}, + [183] = {.lex_state = 19}, + [184] = {.lex_state = 19}, + [185] = {.lex_state = 19}, + [186] = {.lex_state = 19}, + [187] = {.lex_state = 19}, + [188] = {.lex_state = 19}, + [189] = {.lex_state = 19}, + [190] = {.lex_state = 2}, + [191] = {.lex_state = 19}, + [192] = {.lex_state = 2}, + [193] = {.lex_state = 20}, [194] = {.lex_state = 2}, [195] = {.lex_state = 2}, - [196] = {.lex_state = 2}, + [196] = {.lex_state = 20}, [197] = {.lex_state = 2}, [198] = {.lex_state = 2}, - [199] = {.lex_state = 22}, - [200] = {.lex_state = 2}, + [199] = {.lex_state = 19}, + [200] = {.lex_state = 19}, [201] = {.lex_state = 2}, [202] = {.lex_state = 2}, - [203] = {.lex_state = 22}, - [204] = {.lex_state = 22}, - [205] = {.lex_state = 22}, - [206] = {.lex_state = 22}, - [207] = {.lex_state = 2}, - [208] = {.lex_state = 22}, - [209] = {.lex_state = 24}, - [210] = {.lex_state = 2}, - [211] = {.lex_state = 22}, - [212] = {.lex_state = 22}, - [213] = {.lex_state = 22}, - [214] = {.lex_state = 22}, - [215] = {.lex_state = 22}, - [216] = {.lex_state = 22}, - [217] = {.lex_state = 22}, - [218] = {.lex_state = 22}, - [219] = {.lex_state = 22}, - [220] = {.lex_state = 22}, - [221] = {.lex_state = 22}, - [222] = {.lex_state = 2}, - [223] = {.lex_state = 22}, - [224] = {.lex_state = 2}, - [225] = {.lex_state = 2}, - [226] = {.lex_state = 2}, - [227] = {.lex_state = 2}, - [228] = {.lex_state = 2}, - [229] = {.lex_state = 2}, - [230] = {.lex_state = 22}, - [231] = {.lex_state = 22}, - [232] = {.lex_state = 2}, - [233] = {.lex_state = 2}, - [234] = {.lex_state = 2}, - [235] = {.lex_state = 2}, - [236] = {.lex_state = 2}, - [237] = {.lex_state = 22}, - [238] = {.lex_state = 22}, - [239] = {.lex_state = 2}, - [240] = {.lex_state = 2}, - [241] = {.lex_state = 2}, - [242] = {.lex_state = 22}, - [243] = {.lex_state = 2}, - [244] = {.lex_state = 22}, - [245] = {.lex_state = 22}, - [246] = {.lex_state = 22}, - [247] = {.lex_state = 22}, - [248] = {.lex_state = 24}, - [249] = {.lex_state = 2}, - [250] = {.lex_state = 22}, - [251] = {.lex_state = 24}, - [252] = {.lex_state = 2}, - [253] = {.lex_state = 22}, - [254] = {.lex_state = 2}, - [255] = {.lex_state = 22}, - [256] = {.lex_state = 22}, - [257] = {.lex_state = 22}, - [258] = {.lex_state = 22}, - [259] = {.lex_state = 2}, - [260] = {.lex_state = 22}, - [261] = {.lex_state = 3}, - [262] = {.lex_state = 3}, - [263] = {.lex_state = 3}, - [264] = {.lex_state = 3}, - [265] = {.lex_state = 3}, - [266] = {.lex_state = 4}, - [267] = {.lex_state = 4}, - [268] = {.lex_state = 4}, - [269] = {.lex_state = 4}, - [270] = {.lex_state = 4}, - [271] = {.lex_state = 4}, - [272] = {.lex_state = 1}, - [273] = {.lex_state = 4}, - [274] = {.lex_state = 3}, - [275] = {.lex_state = 3}, - [276] = {.lex_state = 3}, - [277] = {.lex_state = 3}, - [278] = {.lex_state = 3}, - [279] = {.lex_state = 3}, - [280] = {.lex_state = 3}, - [281] = {.lex_state = 3}, - [282] = {.lex_state = 3}, - [283] = {.lex_state = 3}, - [284] = {.lex_state = 3}, - [285] = {.lex_state = 3}, - [286] = {.lex_state = 3}, - [287] = {.lex_state = 1}, - [288] = {.lex_state = 1}, - [289] = {.lex_state = 1}, - [290] = {.lex_state = 1}, - [291] = {.lex_state = 1}, - [292] = {.lex_state = 1}, + [203] = {.lex_state = 2}, + [204] = {.lex_state = 2}, + [205] = {.lex_state = 20}, + [206] = {.lex_state = 20}, + [207] = {.lex_state = 19}, + [208] = {.lex_state = 20}, + [209] = {.lex_state = 20}, + [210] = {.lex_state = 20}, + [211] = {.lex_state = 2}, + [212] = {.lex_state = 20}, + [213] = {.lex_state = 2}, + [214] = {.lex_state = 2}, + [215] = {.lex_state = 2}, + [216] = {.lex_state = 19}, + [217] = {.lex_state = 20}, + [218] = {.lex_state = 19}, + [219] = {.lex_state = 19}, + [220] = {.lex_state = 20}, + [221] = {.lex_state = 1}, + [222] = {.lex_state = 3}, + [223] = {.lex_state = 3}, + [224] = {.lex_state = 3}, + [225] = {.lex_state = 21}, + [226] = {.lex_state = 21}, + [227] = {.lex_state = 4}, + [228] = {.lex_state = 21}, + [229] = {.lex_state = 21}, + [230] = {.lex_state = 21}, + [231] = {.lex_state = 4}, + [232] = {.lex_state = 21}, + [233] = {.lex_state = 4}, + [234] = {.lex_state = 21}, + [235] = {.lex_state = 21}, + [236] = {.lex_state = 21}, + [237] = {.lex_state = 4}, + [238] = {.lex_state = 3}, + [239] = {.lex_state = 21}, + [240] = {.lex_state = 21}, + [241] = {.lex_state = 21}, + [242] = {.lex_state = 3}, + [243] = {.lex_state = 3}, + [244] = {.lex_state = 3}, + [245] = {.lex_state = 3}, + [246] = {.lex_state = 3}, + [247] = {.lex_state = 1}, + [248] = {.lex_state = 1}, + [249] = {.lex_state = 0}, + [250] = {.lex_state = 0}, + [251] = {.lex_state = 1}, + [252] = {.lex_state = 1}, + [253] = {.lex_state = 1}, + [254] = {.lex_state = 1}, + [255] = {.lex_state = 1}, + [256] = {.lex_state = 1}, + [257] = {.lex_state = 1}, + [258] = {.lex_state = 1}, + [259] = {.lex_state = 1}, + [260] = {.lex_state = 1}, + [261] = {.lex_state = 1}, + [262] = {.lex_state = 1}, + [263] = {.lex_state = 1}, + [264] = {.lex_state = 0}, + [265] = {.lex_state = 1}, + [266] = {.lex_state = 0}, + [267] = {.lex_state = 1}, + [268] = {.lex_state = 1}, + [269] = {.lex_state = 1}, + [270] = {.lex_state = 1}, + [271] = {.lex_state = 1}, + [272] = {.lex_state = 0}, + [273] = {.lex_state = 0}, + [274] = {.lex_state = 1}, + [275] = {.lex_state = 0}, + [276] = {.lex_state = 1}, + [277] = {.lex_state = 0}, + [278] = {.lex_state = 1}, + [279] = {.lex_state = 21}, + [280] = {.lex_state = 1}, + [281] = {.lex_state = 0}, + [282] = {.lex_state = 1}, + [283] = {.lex_state = 0}, + [284] = {.lex_state = 1}, + [285] = {.lex_state = 1}, + [286] = {.lex_state = 0}, + [287] = {.lex_state = 0}, + [288] = {.lex_state = 21}, + [289] = {.lex_state = 0}, + [290] = {.lex_state = 0}, + [291] = {.lex_state = 21}, + [292] = {.lex_state = 21}, [293] = {.lex_state = 1}, - [294] = {.lex_state = 2}, - [295] = {.lex_state = 2}, - [296] = {.lex_state = 2}, - [297] = {.lex_state = 2}, - [298] = {.lex_state = 2}, - [299] = {.lex_state = 2}, - [300] = {.lex_state = 2}, - [301] = {.lex_state = 2}, - [302] = {.lex_state = 2}, - [303] = {.lex_state = 2}, - [304] = {.lex_state = 2}, - [305] = {.lex_state = 2}, - [306] = {.lex_state = 2}, - [307] = {.lex_state = 2}, - [308] = {.lex_state = 2}, - [309] = {.lex_state = 2}, - [310] = {.lex_state = 2}, - [311] = {.lex_state = 2}, + [294] = {.lex_state = 0}, + [295] = {.lex_state = 1}, + [296] = {.lex_state = 1}, + [297] = {.lex_state = 0}, + [298] = {.lex_state = 1}, + [299] = {.lex_state = 1}, + [300] = {.lex_state = 0}, + [301] = {.lex_state = 0}, + [302] = {.lex_state = 1}, + [303] = {.lex_state = 4}, + [304] = {.lex_state = 20}, + [305] = {.lex_state = 21}, + [306] = {.lex_state = 1}, + [307] = {.lex_state = 0}, + [308] = {.lex_state = 0}, + [309] = {.lex_state = 1}, + [310] = {.lex_state = 0}, + [311] = {.lex_state = 0}, [312] = {.lex_state = 1}, - [313] = {.lex_state = 1}, + [313] = {.lex_state = 0}, [314] = {.lex_state = 0}, [315] = {.lex_state = 0}, - [316] = {.lex_state = 0}, - [317] = {.lex_state = 0}, + [316] = {.lex_state = 1}, + [317] = {.lex_state = 1}, [318] = {.lex_state = 0}, - [319] = {.lex_state = 2}, - [320] = {.lex_state = 2}, + [319] = {.lex_state = 0}, + [320] = {.lex_state = 0}, [321] = {.lex_state = 0}, - [322] = {.lex_state = 1}, - [323] = {.lex_state = 1}, - [324] = {.lex_state = 1}, - [325] = {.lex_state = 1}, - [326] = {.lex_state = 1}, - [327] = {.lex_state = 1}, - [328] = {.lex_state = 1}, - [329] = {.lex_state = 1}, - [330] = {.lex_state = 1}, - [331] = {.lex_state = 1}, - [332] = {.lex_state = 1}, - [333] = {.lex_state = 0}, - [334] = {.lex_state = 1}, - [335] = {.lex_state = 1}, - [336] = {.lex_state = 0}, - [337] = {.lex_state = 0}, - [338] = {.lex_state = 0}, - [339] = {.lex_state = 0}, - [340] = {.lex_state = 1}, - [341] = {.lex_state = 1}, - [342] = {.lex_state = 0}, - [343] = {.lex_state = 1}, - [344] = {.lex_state = 1}, - [345] = {.lex_state = 0}, - [346] = {.lex_state = 0}, - [347] = {.lex_state = 1}, - [348] = {.lex_state = 0}, - [349] = {.lex_state = 1}, - [350] = {.lex_state = 0}, - [351] = {.lex_state = 1}, - [352] = {.lex_state = 1}, - [353] = {.lex_state = 1}, - [354] = {.lex_state = 1}, - [355] = {.lex_state = 1}, - [356] = {.lex_state = 0}, - [357] = {.lex_state = 1}, - [358] = {.lex_state = 23}, - [359] = {.lex_state = 1}, - [360] = {.lex_state = 23}, - [361] = {.lex_state = 0}, - [362] = {.lex_state = 23}, - [363] = {.lex_state = 23}, - [364] = {.lex_state = 0}, - [365] = {.lex_state = 0}, - [366] = {.lex_state = 1}, - [367] = {.lex_state = 0}, - [368] = {.lex_state = 1}, - [369] = {.lex_state = 0}, - [370] = {.lex_state = 0}, - [371] = {.lex_state = 0}, - [372] = {.lex_state = 1}, - [373] = {.lex_state = 0}, - [374] = {.lex_state = 4}, - [375] = {.lex_state = 1}, - [376] = {.lex_state = 0}, - [377] = {.lex_state = 0}, - [378] = {.lex_state = 1}, - [379] = {.lex_state = 0}, - [380] = {.lex_state = 23}, - [381] = {.lex_state = 22}, - [382] = {.lex_state = 1}, - [383] = {.lex_state = 0}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { @@ -2522,35 +2363,35 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_GT_GT_GT] = ACTIONS(1), }, [STATE(1)] = { - [sym_source_file] = STATE(379), - [sym_base_ten] = STATE(353), - [sym_octal] = STATE(353), - [sym_hex] = STATE(353), - [sym_binary] = STATE(353), - [sym_integer] = STATE(354), - [sym_signed_integer] = STATE(143), - [sym_unsigned_integer] = STATE(143), - [sym_number] = STATE(82), - [sym__float] = STATE(79), - [sym_scalar] = STATE(143), - [sym_vector2] = STATE(143), - [sym_vector3] = STATE(143), - [sym_vector4] = STATE(143), - [sym_boolean] = STATE(143), - [sym_function_call] = STATE(143), - [sym_method_call] = STATE(143), - [sym_expression] = STATE(237), - [sym_unary_expression] = STATE(143), - [sym_binary_expression] = STATE(143), - [sym_if] = STATE(143), - [sym_let_in] = STATE(143), - [sym_member_access] = STATE(143), - [sym_parenthesis] = STATE(143), - [sym_list] = STATE(143), - [sym_struct_definition] = STATE(132), - [sym_dictionary_construction] = STATE(143), - [sym_closure_definition] = STATE(143), - [sym_formula] = STATE(143), + [sym_source_file] = STATE(319), + [sym_base_ten] = STATE(284), + [sym_octal] = STATE(284), + [sym_hex] = STATE(284), + [sym_binary] = STATE(284), + [sym_integer] = STATE(298), + [sym_signed_integer] = STATE(109), + [sym_unsigned_integer] = STATE(109), + [sym_number] = STATE(80), + [sym__float] = STATE(78), + [sym_scalar] = STATE(109), + [sym_vector2] = STATE(109), + [sym_vector3] = STATE(109), + [sym_vector4] = STATE(109), + [sym_boolean] = STATE(109), + [sym_function_call] = STATE(109), + [sym_method_call] = STATE(109), + [sym_expression] = STATE(206), + [sym_unary_expression] = STATE(109), + [sym_binary_expression] = STATE(109), + [sym_if] = STATE(109), + [sym_let_in] = STATE(109), + [sym_member_access] = STATE(109), + [sym_parenthesis] = STATE(109), + [sym_list] = STATE(109), + [sym_struct_definition] = STATE(112), + [sym_dictionary_construction] = STATE(109), + [sym_closure_definition] = STATE(109), + [sym_constraint_set] = STATE(109), [sym_identifier] = ACTIONS(5), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2573,38 +2414,38 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(2)] = { - [sym_base_ten] = STATE(353), - [sym_octal] = STATE(353), - [sym_hex] = STATE(353), - [sym_binary] = STATE(353), - [sym_integer] = STATE(354), - [sym_signed_integer] = STATE(143), - [sym_unsigned_integer] = STATE(143), - [sym_number] = STATE(82), - [sym__float] = STATE(79), - [sym_scalar] = STATE(143), - [sym_vector2] = STATE(143), - [sym_vector3] = STATE(143), - [sym_vector4] = STATE(143), - [sym_boolean] = STATE(143), - [sym_function_call] = STATE(143), - [sym_method_call] = STATE(143), - [sym_expression] = STATE(246), - [sym_unary_expression] = STATE(143), - [sym_binary_expression] = STATE(143), - [sym_if] = STATE(143), - [sym_let_in] = STATE(143), - [sym_member_access] = STATE(143), - [sym_parenthesis] = STATE(143), - [sym_list] = STATE(143), - [sym_struct_member] = STATE(350), - [sym__struct_final_element] = STATE(371), - [sym_struct_definition] = STATE(132), - [sym_dictionary_member_assignment] = STATE(338), - [sym_dictionary_construction] = STATE(143), - [sym_closure_definition] = STATE(143), - [sym_formula] = STATE(143), - [aux_sym_struct_definition_repeat1] = STATE(322), + [sym_base_ten] = STATE(284), + [sym_octal] = STATE(284), + [sym_hex] = STATE(284), + [sym_binary] = STATE(284), + [sym_integer] = STATE(298), + [sym_signed_integer] = STATE(109), + [sym_unsigned_integer] = STATE(109), + [sym_number] = STATE(80), + [sym__float] = STATE(78), + [sym_scalar] = STATE(109), + [sym_vector2] = STATE(109), + [sym_vector3] = STATE(109), + [sym_vector4] = STATE(109), + [sym_boolean] = STATE(109), + [sym_function_call] = STATE(109), + [sym_method_call] = STATE(109), + [sym_expression] = STATE(175), + [sym_unary_expression] = STATE(109), + [sym_binary_expression] = STATE(109), + [sym_if] = STATE(109), + [sym_let_in] = STATE(109), + [sym_member_access] = STATE(109), + [sym_parenthesis] = STATE(109), + [sym_list] = STATE(109), + [sym_struct_member] = STATE(283), + [sym__struct_final_element] = STATE(310), + [sym_struct_definition] = STATE(112), + [sym_dictionary_member_assignment] = STATE(273), + [sym_dictionary_construction] = STATE(109), + [sym_closure_definition] = STATE(109), + [sym_constraint_set] = STATE(109), + [aux_sym_struct_definition_repeat1] = STATE(252), [sym_identifier] = ACTIONS(33), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2629,38 +2470,38 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LT_LT_LT] = ACTIONS(31), }, [STATE(3)] = { - [sym_base_ten] = STATE(353), - [sym_octal] = STATE(353), - [sym_hex] = STATE(353), - [sym_binary] = STATE(353), - [sym_integer] = STATE(354), - [sym_signed_integer] = STATE(143), - [sym_unsigned_integer] = STATE(143), - [sym_number] = STATE(82), - [sym__float] = STATE(79), - [sym_scalar] = STATE(143), - [sym_vector2] = STATE(143), - [sym_vector3] = STATE(143), - [sym_vector4] = STATE(143), - [sym_boolean] = STATE(143), - [sym_function_call] = STATE(143), - [sym_method_call] = STATE(143), - [sym_expression] = STATE(260), - [sym_unary_expression] = STATE(143), - [sym_binary_expression] = STATE(143), - [sym_if] = STATE(143), - [sym_let_in] = STATE(143), - [sym_member_access] = STATE(143), - [sym_parenthesis] = STATE(143), - [sym_list] = STATE(143), - [sym_struct_member] = STATE(350), - [sym__struct_final_element] = STATE(369), - [sym_struct_definition] = STATE(132), - [sym_dictionary_member_assignment] = STATE(337), - [sym_dictionary_construction] = STATE(143), - [sym_closure_definition] = STATE(143), - [sym_formula] = STATE(143), - [aux_sym_struct_definition_repeat1] = STATE(323), + [sym_base_ten] = STATE(284), + [sym_octal] = STATE(284), + [sym_hex] = STATE(284), + [sym_binary] = STATE(284), + [sym_integer] = STATE(298), + [sym_signed_integer] = STATE(109), + [sym_unsigned_integer] = STATE(109), + [sym_number] = STATE(80), + [sym__float] = STATE(78), + [sym_scalar] = STATE(109), + [sym_vector2] = STATE(109), + [sym_vector3] = STATE(109), + [sym_vector4] = STATE(109), + [sym_boolean] = STATE(109), + [sym_function_call] = STATE(109), + [sym_method_call] = STATE(109), + [sym_expression] = STATE(208), + [sym_unary_expression] = STATE(109), + [sym_binary_expression] = STATE(109), + [sym_if] = STATE(109), + [sym_let_in] = STATE(109), + [sym_member_access] = STATE(109), + [sym_parenthesis] = STATE(109), + [sym_list] = STATE(109), + [sym_struct_member] = STATE(283), + [sym__struct_final_element] = STATE(314), + [sym_struct_definition] = STATE(112), + [sym_dictionary_member_assignment] = STATE(275), + [sym_dictionary_construction] = STATE(109), + [sym_closure_definition] = STATE(109), + [sym_constraint_set] = STATE(109), + [aux_sym_struct_definition_repeat1] = STATE(253), [sym_identifier] = ACTIONS(33), [sym_comment] = ACTIONS(3), [sym__whitespace] = ACTIONS(3), @@ -2712,17 +2553,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT_LT, ACTIONS(41), 1, anon_sym_RBRACK, - STATE(5), 1, + STATE(8), 1, aux_sym_list_repeat1, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(206), 1, + STATE(140), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2737,12 +2578,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2761,63 +2602,63 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [99] = 24, - ACTIONS(46), 1, + ACTIONS(7), 1, sym_string, - ACTIONS(49), 1, + ACTIONS(9), 1, aux_sym_base_ten_token1, - ACTIONS(52), 1, + ACTIONS(11), 1, aux_sym_octal_token1, - ACTIONS(55), 1, + ACTIONS(13), 1, aux_sym_hex_token1, - ACTIONS(58), 1, + ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(61), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(70), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(73), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(76), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(79), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(82), 1, - anon_sym_RBRACK, - ACTIONS(84), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(5), 1, + ACTIONS(43), 1, + anon_sym_RBRACK, + STATE(4), 1, aux_sym_list_repeat1, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(242), 1, + STATE(166), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(43), 2, + ACTIONS(5), 2, sym_identifier, sym_self, - ACTIONS(64), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(67), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2836,7 +2677,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [198] = 24, ACTIONS(7), 1, sym_string, @@ -2860,19 +2701,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(87), 1, + ACTIONS(45), 1, anon_sym_RBRACK, - STATE(4), 1, + STATE(7), 1, aux_sym_list_repeat1, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(199), 1, + STATE(150), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2887,12 +2728,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2911,7 +2752,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [297] = 24, ACTIONS(7), 1, sym_string, @@ -2935,19 +2776,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(89), 1, + ACTIONS(47), 1, anon_sym_RBRACK, - STATE(5), 1, + STATE(8), 1, aux_sym_list_repeat1, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(193), 1, + STATE(152), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -2962,12 +2803,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -2986,63 +2827,63 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [396] = 24, - ACTIONS(7), 1, + ACTIONS(52), 1, sym_string, - ACTIONS(9), 1, + ACTIONS(55), 1, aux_sym_base_ten_token1, - ACTIONS(11), 1, + ACTIONS(58), 1, aux_sym_octal_token1, - ACTIONS(13), 1, + ACTIONS(61), 1, aux_sym_hex_token1, - ACTIONS(15), 1, + ACTIONS(64), 1, aux_sym_binary_token1, - ACTIONS(17), 1, + ACTIONS(67), 1, anon_sym_LT_LPAREN, - ACTIONS(23), 1, + ACTIONS(76), 1, anon_sym_if, - ACTIONS(25), 1, + ACTIONS(79), 1, anon_sym_let, - ACTIONS(27), 1, + ACTIONS(82), 1, anon_sym_LPAREN, - ACTIONS(29), 1, + ACTIONS(85), 1, anon_sym_LBRACK, - ACTIONS(31), 1, - anon_sym_LT_LT_LT, - ACTIONS(91), 1, + ACTIONS(88), 1, anon_sym_RBRACK, - STATE(7), 1, + ACTIONS(90), 1, + anon_sym_LT_LT_LT, + STATE(8), 1, aux_sym_list_repeat1, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(192), 1, + STATE(205), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(5), 2, + ACTIONS(49), 2, sym_identifier, sym_self, - ACTIONS(19), 2, + ACTIONS(70), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(73), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3061,7 +2902,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [495] = 22, ACTIONS(7), 1, sym_string, @@ -3085,15 +2926,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(216), 1, + STATE(185), 1, sym_expression, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3108,12 +2949,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3132,7 +2973,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [588] = 22, ACTIONS(7), 1, sym_string, @@ -3156,15 +2997,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, - sym_struct_definition, - STATE(152), 1, + STATE(86), 1, sym_expression, - STATE(354), 1, + STATE(112), 1, + sym_struct_definition, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3179,12 +3020,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3203,7 +3044,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [681] = 22, ACTIONS(7), 1, sym_string, @@ -3227,15 +3068,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, STATE(94), 1, sym_expression, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3250,12 +3091,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3274,7 +3115,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [774] = 22, ACTIONS(7), 1, sym_string, @@ -3298,15 +3139,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, - sym_struct_definition, - STATE(161), 1, + STATE(95), 1, sym_expression, - STATE(354), 1, + STATE(112), 1, + sym_struct_definition, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3321,12 +3162,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3345,7 +3186,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [867] = 22, ACTIONS(7), 1, sym_string, @@ -3369,15 +3210,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, - sym_struct_definition, - STATE(133), 1, + STATE(96), 1, sym_expression, - STATE(354), 1, + STATE(112), 1, + sym_struct_definition, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3392,12 +3233,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3416,7 +3257,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [960] = 22, ACTIONS(7), 1, sym_string, @@ -3440,15 +3281,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, - sym_struct_definition, - STATE(134), 1, + STATE(97), 1, sym_expression, - STATE(354), 1, + STATE(112), 1, + sym_struct_definition, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3463,12 +3304,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3487,7 +3328,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [1053] = 22, ACTIONS(7), 1, sym_string, @@ -3511,15 +3352,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, - sym_struct_definition, - STATE(135), 1, + STATE(98), 1, sym_expression, - STATE(354), 1, + STATE(112), 1, + sym_struct_definition, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3534,12 +3375,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3558,7 +3399,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [1146] = 22, ACTIONS(7), 1, sym_string, @@ -3582,15 +3423,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, - sym_struct_definition, - STATE(136), 1, + STATE(99), 1, sym_expression, - STATE(354), 1, + STATE(112), 1, + sym_struct_definition, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3605,12 +3446,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3629,7 +3470,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [1239] = 22, ACTIONS(7), 1, sym_string, @@ -3653,15 +3494,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, - sym_struct_definition, - STATE(137), 1, + STATE(100), 1, sym_expression, - STATE(354), 1, + STATE(112), 1, + sym_struct_definition, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3676,12 +3517,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3700,7 +3541,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [1332] = 22, ACTIONS(7), 1, sym_string, @@ -3724,15 +3565,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, - sym_struct_definition, - STATE(138), 1, + STATE(101), 1, sym_expression, - STATE(354), 1, + STATE(112), 1, + sym_struct_definition, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3747,12 +3588,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3771,7 +3612,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [1425] = 22, ACTIONS(7), 1, sym_string, @@ -3795,15 +3636,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, - sym_struct_definition, - STATE(139), 1, + STATE(102), 1, sym_expression, - STATE(354), 1, + STATE(112), 1, + sym_struct_definition, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3818,12 +3659,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3842,7 +3683,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [1518] = 22, ACTIONS(7), 1, sym_string, @@ -3866,15 +3707,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(140), 1, + STATE(178), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -3889,12 +3730,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -3913,79 +3754,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [1611] = 22, - ACTIONS(7), 1, - sym_string, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(17), 1, - anon_sym_LT_LPAREN, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_let, - ACTIONS(27), 1, - anon_sym_LPAREN, - ACTIONS(29), 1, - anon_sym_LBRACK, - ACTIONS(31), 1, - anon_sym_LT_LT_LT, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(132), 1, - sym_struct_definition, - STATE(208), 1, - sym_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(5), 2, - sym_identifier, - sym_self, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(21), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(143), 19, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_vector2, - sym_vector3, - sym_vector4, - sym_boolean, - sym_function_call, - sym_method_call, - sym_unary_expression, - sym_binary_expression, - sym_if, - sym_let_in, - sym_member_access, - sym_parenthesis, - sym_list, - sym_dictionary_construction, - sym_closure_definition, - sym_formula, - [1704] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -4008,15 +3778,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(200), 1, + STATE(144), 1, sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4031,12 +3801,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4055,8 +3825,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [1797] = 22, + sym_constraint_set, + [1704] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4079,15 +3849,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(209), 1, + STATE(193), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4102,12 +3872,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4126,8 +3896,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [1890] = 22, + sym_constraint_set, + [1797] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4150,15 +3920,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(212), 1, + STATE(196), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4173,12 +3943,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4197,8 +3967,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [1983] = 22, + sym_constraint_set, + [1890] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4221,15 +3991,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, - sym_struct_definition, - STATE(142), 1, + STATE(104), 1, sym_expression, - STATE(354), 1, + STATE(112), 1, + sym_struct_definition, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4244,12 +4014,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4268,8 +4038,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [2076] = 22, + sym_constraint_set, + [1983] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4292,15 +4062,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(203), 1, + STATE(151), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4315,12 +4085,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4339,8 +4109,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [2169] = 22, + sym_constraint_set, + [2076] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4363,15 +4133,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(168), 1, + STATE(127), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4386,12 +4156,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4410,12 +4180,10 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [2262] = 22, + sym_constraint_set, + [2169] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - aux_sym_base_ten_token1, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -4424,25 +4192,27 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_let, ACTIONS(27), 1, anon_sym_LPAREN, ACTIONS(29), 1, anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + ACTIONS(93), 1, + aux_sym_base_ten_token1, + ACTIONS(97), 1, + anon_sym_if, + ACTIONS(99), 1, + anon_sym_let, + STATE(130), 1, sym__float, - STATE(82), 1, + STATE(141), 1, sym_number, - STATE(132), 1, - sym_struct_definition, - STATE(238), 1, + STATE(171), 1, sym_expression, - STATE(354), 1, + STATE(216), 1, + sym_struct_definition, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4453,16 +4223,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4481,8 +4251,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [2355] = 22, + sym_constraint_set, + [2262] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4505,15 +4275,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(204), 1, + STATE(147), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4528,12 +4298,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4552,8 +4322,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [2448] = 22, + sym_constraint_set, + [2355] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4576,15 +4346,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(154), 1, + STATE(114), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4599,12 +4369,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4623,8 +4393,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [2541] = 22, + sym_constraint_set, + [2448] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -4647,15 +4417,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(196), 1, - sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(161), 1, + sym_expression, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4670,12 +4440,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4694,8 +4464,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [2634] = 22, + sym_constraint_set, + [2541] = 22, ACTIONS(7), 1, sym_string, ACTIONS(9), 1, @@ -4718,15 +4488,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(157), 1, + STATE(115), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4741,12 +4511,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4765,8 +4535,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [2727] = 22, + sym_constraint_set, + [2634] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -4789,15 +4559,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(239), 1, + STATE(213), 1, sym_expression, - STATE(355), 1, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4812,12 +4582,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4836,8 +4606,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [2820] = 22, + sym_constraint_set, + [2727] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -4860,15 +4630,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(245), 1, + STATE(207), 1, sym_expression, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4883,12 +4653,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4907,8 +4677,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [2913] = 22, + sym_constraint_set, + [2820] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -4931,15 +4701,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(253), 1, + STATE(173), 1, sym_expression, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -4954,12 +4724,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -4978,8 +4748,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [3006] = 22, + sym_constraint_set, + [2913] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5002,15 +4772,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(211), 1, + STATE(180), 1, sym_expression, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5025,12 +4795,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5049,8 +4819,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [3099] = 22, + sym_constraint_set, + [3006] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5073,15 +4843,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(94), 1, + STATE(86), 1, sym_expression, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5096,12 +4866,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5120,8 +4890,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [3192] = 22, + sym_constraint_set, + [3099] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5144,15 +4914,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(213), 1, + STATE(181), 1, sym_expression, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5167,12 +4937,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5191,8 +4961,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [3285] = 22, + sym_constraint_set, + [3192] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5215,15 +4985,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(214), 1, + STATE(182), 1, sym_expression, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5238,12 +5008,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5262,8 +5032,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [3378] = 22, + sym_constraint_set, + [3285] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5286,15 +5056,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(215), 1, + STATE(183), 1, sym_expression, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5309,12 +5079,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5333,12 +5103,10 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [3471] = 22, + sym_constraint_set, + [3378] = 22, ACTIONS(7), 1, sym_string, - ACTIONS(9), 1, - aux_sym_base_ten_token1, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -5347,25 +5115,27 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(23), 1, - anon_sym_if, - ACTIONS(25), 1, - anon_sym_let, ACTIONS(27), 1, anon_sym_LPAREN, ACTIONS(29), 1, anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + ACTIONS(93), 1, + aux_sym_base_ten_token1, + ACTIONS(97), 1, + anon_sym_if, + ACTIONS(99), 1, + anon_sym_let, + STATE(130), 1, sym__float, - STATE(82), 1, + STATE(141), 1, sym_number, - STATE(132), 1, - sym_struct_definition, - STATE(155), 1, + STATE(184), 1, sym_expression, - STATE(354), 1, + STATE(216), 1, + sym_struct_definition, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5376,16 +5146,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(21), 3, + ACTIONS(95), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5404,8 +5174,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [3564] = 22, + sym_constraint_set, + [3471] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5428,15 +5198,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(217), 1, + STATE(186), 1, sym_expression, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5451,12 +5221,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5475,8 +5245,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [3657] = 22, + sym_constraint_set, + [3564] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5499,15 +5269,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(218), 1, + STATE(187), 1, sym_expression, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5522,12 +5292,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5546,8 +5316,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [3750] = 22, + sym_constraint_set, + [3657] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5570,15 +5340,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(219), 1, + STATE(188), 1, sym_expression, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5593,12 +5363,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5617,8 +5387,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [3843] = 22, + sym_constraint_set, + [3750] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5641,15 +5411,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(220), 1, + STATE(189), 1, sym_expression, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5664,12 +5434,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5688,8 +5458,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [3936] = 22, + sym_constraint_set, + [3843] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5712,15 +5482,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(221), 1, + STATE(191), 1, sym_expression, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5735,12 +5505,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5759,10 +5529,12 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [4029] = 22, + sym_constraint_set, + [3936] = 22, ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + aux_sym_base_ten_token1, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -5771,27 +5543,25 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, ACTIONS(17), 1, anon_sym_LT_LPAREN, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_let, ACTIONS(27), 1, anon_sym_LPAREN, ACTIONS(29), 1, anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(93), 1, - aux_sym_base_ten_token1, - ACTIONS(97), 1, - anon_sym_if, - ACTIONS(99), 1, - anon_sym_let, - STATE(172), 1, + STATE(78), 1, sym__float, - STATE(205), 1, + STATE(80), 1, sym_number, - STATE(230), 1, - sym_expression, - STATE(255), 1, + STATE(112), 1, sym_struct_definition, - STATE(354), 1, + STATE(220), 1, + sym_expression, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5802,16 +5572,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(95), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5830,8 +5600,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [4122] = 22, + sym_constraint_set, + [4029] = 22, ACTIONS(7), 1, sym_string, ACTIONS(11), 1, @@ -5854,15 +5624,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(231), 1, + STATE(200), 1, sym_expression, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5877,12 +5647,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5901,8 +5671,8 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [4215] = 22, + sym_constraint_set, + [4122] = 22, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -5925,15 +5695,86 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(198), 1, + STATE(145), 1, + sym_struct_definition, + STATE(146), 1, sym_expression, - STATE(202), 1, + STATE(295), 1, + sym_integer, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(101), 2, + sym_identifier, + sym_self, + ACTIONS(109), 2, + sym_true, + sym_false, + ACTIONS(111), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_BANG, + STATE(284), 4, + sym_base_ten, + sym_octal, + sym_hex, + sym_binary, + STATE(214), 19, + sym_signed_integer, + sym_unsigned_integer, + sym_scalar, + sym_vector2, + sym_vector3, + sym_vector4, + sym_boolean, + sym_function_call, + sym_method_call, + sym_unary_expression, + sym_binary_expression, + sym_if, + sym_let_in, + sym_member_access, + sym_parenthesis, + sym_list, + sym_dictionary_construction, + sym_closure_definition, + sym_constraint_set, + [4215] = 22, + ACTIONS(11), 1, + aux_sym_octal_token1, + ACTIONS(13), 1, + aux_sym_hex_token1, + ACTIONS(15), 1, + aux_sym_binary_token1, + ACTIONS(103), 1, + sym_string, + ACTIONS(105), 1, + aux_sym_base_ten_token1, + ACTIONS(107), 1, + anon_sym_LT_LPAREN, + ACTIONS(113), 1, + anon_sym_if, + ACTIONS(115), 1, + anon_sym_let, + ACTIONS(117), 1, + anon_sym_LPAREN, + ACTIONS(119), 1, + anon_sym_LBRACK, + ACTIONS(121), 1, + anon_sym_LT_LT_LT, + STATE(125), 1, + sym__float, + STATE(129), 1, + sym_number, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(160), 1, + sym_expression, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -5948,12 +5789,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -5972,7 +5813,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [4308] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -5996,15 +5837,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(201), 1, - sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(162), 1, + sym_expression, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6019,12 +5860,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6043,7 +5884,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [4401] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -6067,15 +5908,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(195), 1, - sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(158), 1, + sym_expression, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6090,12 +5931,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6114,7 +5955,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [4494] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -6138,15 +5979,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(191), 1, - sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(163), 1, + sym_expression, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6161,12 +6002,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6185,7 +6026,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [4587] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -6209,15 +6050,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(189), 1, - sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(164), 1, + sym_expression, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6232,12 +6073,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6256,7 +6097,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [4680] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -6280,15 +6121,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(174), 1, - sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(165), 1, + sym_expression, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6303,12 +6144,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6327,7 +6168,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [4773] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -6351,15 +6192,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(175), 1, - sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(149), 1, + sym_expression, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6374,12 +6215,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6398,7 +6239,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [4866] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -6422,15 +6263,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(176), 1, + STATE(134), 1, sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6445,12 +6286,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6469,7 +6310,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [4959] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -6493,15 +6334,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(177), 1, + STATE(135), 1, sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6516,12 +6357,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6540,7 +6381,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [5052] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -6564,15 +6405,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(178), 1, + STATE(136), 1, sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6587,12 +6428,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6611,7 +6452,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [5145] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -6635,15 +6476,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(179), 1, + STATE(137), 1, sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6658,12 +6499,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6682,7 +6523,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [5238] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -6706,15 +6547,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(180), 1, + STATE(138), 1, sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6729,12 +6570,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6753,7 +6594,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [5331] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -6777,15 +6618,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(181), 1, + STATE(139), 1, sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6800,12 +6641,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6824,7 +6665,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [5424] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -6848,15 +6689,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(182), 1, + STATE(142), 1, sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6871,12 +6712,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6895,7 +6736,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [5517] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -6919,15 +6760,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(185), 1, + STATE(143), 1, sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -6942,12 +6783,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -6966,59 +6807,59 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [5610] = 22, + ACTIONS(7), 1, + sym_string, + ACTIONS(9), 1, + aux_sym_base_ten_token1, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, aux_sym_hex_token1, ACTIONS(15), 1, aux_sym_binary_token1, - ACTIONS(103), 1, - sym_string, - ACTIONS(105), 1, - aux_sym_base_ten_token1, - ACTIONS(107), 1, + ACTIONS(17), 1, anon_sym_LT_LPAREN, - ACTIONS(113), 1, + ACTIONS(23), 1, anon_sym_if, - ACTIONS(115), 1, + ACTIONS(25), 1, anon_sym_let, - ACTIONS(117), 1, + ACTIONS(27), 1, anon_sym_LPAREN, - ACTIONS(119), 1, + ACTIONS(29), 1, anon_sym_LBRACK, - ACTIONS(121), 1, + ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(78), 1, sym__float, - STATE(169), 1, + STATE(80), 1, sym_number, - STATE(186), 1, - sym_expression, - STATE(202), 1, + STATE(112), 1, sym_struct_definition, - STATE(355), 1, + STATE(116), 1, + sym_expression, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(101), 2, + ACTIONS(5), 2, sym_identifier, sym_self, - ACTIONS(109), 2, + ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(111), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7037,7 +6878,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [5703] = 22, ACTIONS(7), 1, sym_string, @@ -7061,15 +6902,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(156), 1, + STATE(122), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7084,12 +6925,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7108,10 +6949,12 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [5796] = 22, ACTIONS(7), 1, sym_string, + ACTIONS(9), 1, + aux_sym_base_ten_token1, ACTIONS(11), 1, aux_sym_octal_token1, ACTIONS(13), 1, @@ -7120,27 +6963,25 @@ static const uint16_t ts_small_parse_table[] = { aux_sym_binary_token1, ACTIONS(17), 1, anon_sym_LT_LPAREN, + ACTIONS(23), 1, + anon_sym_if, + ACTIONS(25), 1, + anon_sym_let, ACTIONS(27), 1, anon_sym_LPAREN, ACTIONS(29), 1, anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - ACTIONS(93), 1, - aux_sym_base_ten_token1, - ACTIONS(97), 1, - anon_sym_if, - ACTIONS(99), 1, - anon_sym_let, - STATE(172), 1, + STATE(78), 1, sym__float, - STATE(205), 1, + STATE(80), 1, sym_number, - STATE(244), 1, + STATE(92), 1, sym_expression, - STATE(255), 1, + STATE(112), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7151,16 +6992,16 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(19), 2, sym_true, sym_false, - ACTIONS(95), 3, + ACTIONS(21), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7179,7 +7020,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [5889] = 22, ACTIONS(7), 1, sym_string, @@ -7203,15 +7044,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(247), 1, + STATE(209), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7226,12 +7067,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7250,7 +7091,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [5982] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -7274,15 +7115,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(194), 1, + STATE(133), 1, sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7297,12 +7138,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7321,7 +7162,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [6075] = 22, ACTIONS(7), 1, sym_string, @@ -7345,15 +7186,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(248), 1, + STATE(210), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7368,12 +7209,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7392,7 +7233,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [6168] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -7416,15 +7257,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(173), 1, - sym_expression, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(355), 1, + STATE(154), 1, + sym_expression, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7439,12 +7280,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7463,7 +7304,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [6261] = 22, ACTIONS(11), 1, aux_sym_octal_token1, @@ -7487,15 +7328,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(121), 1, anon_sym_LT_LT_LT, - STATE(165), 1, + STATE(125), 1, sym__float, - STATE(169), 1, + STATE(129), 1, sym_number, - STATE(202), 1, + STATE(145), 1, sym_struct_definition, - STATE(249), 1, + STATE(211), 1, sym_expression, - STATE(355), 1, + STATE(295), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7510,12 +7351,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(241), 19, + STATE(214), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7534,7 +7375,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [6354] = 22, ACTIONS(7), 1, sym_string, @@ -7558,15 +7399,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(250), 1, + STATE(212), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7581,12 +7422,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7605,7 +7446,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [6447] = 22, ACTIONS(7), 1, sym_string, @@ -7629,15 +7470,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(251), 1, + STATE(167), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7652,12 +7493,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7676,7 +7517,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [6540] = 22, ACTIONS(7), 1, sym_string, @@ -7700,15 +7541,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LBRACK, ACTIONS(31), 1, anon_sym_LT_LT_LT, - STATE(79), 1, + STATE(78), 1, sym__float, - STATE(82), 1, + STATE(80), 1, sym_number, - STATE(132), 1, + STATE(112), 1, sym_struct_definition, - STATE(256), 1, + STATE(217), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7723,12 +7564,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7747,7 +7588,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [6633] = 22, ACTIONS(7), 1, sym_string, @@ -7771,15 +7612,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(257), 1, + STATE(218), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7794,12 +7635,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7818,7 +7659,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [6726] = 22, ACTIONS(7), 1, sym_string, @@ -7842,15 +7683,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(258), 1, + STATE(219), 1, sym_expression, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7865,12 +7706,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7889,7 +7730,7 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, + sym_constraint_set, [6819] = 22, ACTIONS(7), 1, sym_string, @@ -7913,15 +7754,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_if, ACTIONS(99), 1, anon_sym_let, - STATE(172), 1, + STATE(130), 1, sym__float, - STATE(205), 1, + STATE(141), 1, sym_number, - STATE(223), 1, + STATE(199), 1, sym_expression, - STATE(255), 1, + STATE(216), 1, sym_struct_definition, - STATE(354), 1, + STATE(298), 1, sym_integer, ACTIONS(3), 2, sym_comment, @@ -7936,12 +7777,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_DASH, anon_sym_PLUS, anon_sym_BANG, - STATE(353), 4, + STATE(284), 4, sym_base_ten, sym_octal, sym_hex, sym_binary, - STATE(143), 19, + STATE(109), 19, sym_signed_integer, sym_unsigned_integer, sym_scalar, @@ -7960,16 +7801,18 @@ static const uint16_t ts_small_parse_table[] = { sym_list, sym_dictionary_construction, sym_closure_definition, - sym_formula, - [6912] = 4, + sym_constraint_set, + [6912] = 6, + ACTIONS(125), 1, + sym_identifier, + ACTIONS(127), 1, + sym_unit_quote, + STATE(88), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(127), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(125), 11, - sym_identifier, + ACTIONS(129), 10, anon_sym_STAR, anon_sym_GT_GT, anon_sym_AMP, @@ -7980,9 +7823,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(123), 22, + ACTIONS(123), 21, ts_builtin_sym_end, - sym_unit_quote, anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8003,19 +7845,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [6958] = 6, - ACTIONS(131), 1, - sym_identifier, - ACTIONS(133), 1, - sym_unit_quote, - STATE(106), 1, - sym__unit, + [6961] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(135), 10, + ACTIONS(135), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(133), 10, + sym_identifier, anon_sym_STAR, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -8024,8 +7863,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(129), 21, + ACTIONS(131), 22, ts_builtin_sym_end, + sym_unit_quote, anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, @@ -8034,6 +7874,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8045,12 +7886,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [7007] = 3, + [7006] = 4, + ACTIONS(141), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(125), 11, + ACTIONS(139), 11, sym_identifier, anon_sym_STAR, anon_sym_GT_GT, @@ -8062,10 +7904,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(123), 22, + ACTIONS(137), 21, ts_builtin_sym_end, sym_unit_quote, - anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8085,11 +7926,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7049] = 3, + [7050] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(139), 11, + ACTIONS(145), 11, sym_identifier, anon_sym_STAR, anon_sym_GT_GT, @@ -8101,7 +7942,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(137), 22, + ACTIONS(143), 22, ts_builtin_sym_end, sym_unit_quote, anon_sym_DOT, @@ -8124,13 +7965,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7091] = 4, - ACTIONS(145), 1, - anon_sym_DOT, + [7092] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(143), 11, + ACTIONS(133), 11, sym_identifier, anon_sym_STAR, anon_sym_GT_GT, @@ -8142,9 +7981,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_else, anon_sym_EQ, anon_sym_COLON, - ACTIONS(141), 21, + ACTIONS(131), 22, ts_builtin_sym_end, sym_unit_quote, + anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, @@ -8164,525 +8004,208 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_GT_GT_GT, - [7135] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(292), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, + [7134] = 4, + ACTIONS(151), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, + ACTIONS(149), 9, anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(147), 22, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [7202] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(278), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, + anon_sym_RPAREN, + anon_sym_RBRACK, + [7177] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(159), 3, + ACTIONS(155), 9, anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(153), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [7269] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(281), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [7218] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(159), 3, + ACTIONS(159), 9, anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(157), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [7336] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(321), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DASH_GT, + [7259] = 7, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, + anon_sym_LPAREN, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, + ACTIONS(167), 8, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(161), 20, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [7403] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(285), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(159), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [7470] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(286), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(159), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [7537] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(284), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(159), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [7604] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(282), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(159), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [7671] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(271), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [7308] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(159), 3, + ACTIONS(173), 9, anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(171), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [7738] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(313), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [7805] = 4, - ACTIONS(165), 1, + anon_sym_RPAREN, + anon_sym_RBRACK, anon_sym_DASH_GT, + [7349] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(163), 9, - anon_sym_DASH, + ACTIONS(177), 9, anon_sym_STAR, + anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -8690,16 +8213,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(161), 22, + ACTIONS(175), 23, ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -8713,19 +8236,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7848] = 7, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - STATE(163), 1, - sym_dictionary_construction, + anon_sym_GT_GT_GT, + [7390] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(173), 8, + ACTIONS(181), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8734,9 +8250,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(167), 20, + ACTIONS(179), 23, ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -8753,14 +8271,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_then, anon_sym_else, anon_sym_SEMI, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [7897] = 3, + [7430] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(179), 9, - anon_sym_DASH, + ACTIONS(185), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -8769,11 +8287,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(177), 23, + ACTIONS(183), 23, ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -8792,422 +8311,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_DASH_GT, - [7938] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - ACTIONS(181), 1, - sym_identifier, - ACTIONS(183), 1, - anon_sym_LT_LPAREN, - ACTIONS(187), 1, - anon_sym_LPAREN, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(308), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, + [7470] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(185), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(301), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [8005] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(318), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [8072] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - ACTIONS(181), 1, - sym_identifier, - ACTIONS(183), 1, - anon_sym_LT_LPAREN, - ACTIONS(187), 1, - anon_sym_LPAREN, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(310), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(185), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(301), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [8139] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - ACTIONS(181), 1, - sym_identifier, - ACTIONS(183), 1, - anon_sym_LT_LPAREN, - ACTIONS(187), 1, - anon_sym_LPAREN, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(319), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(185), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(301), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [8206] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(290), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [8273] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(315), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [8340] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(283), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(159), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [8407] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(314), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [8474] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(191), 9, + ACTIONS(189), 8, anon_sym_STAR, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -9215,7 +8324,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(189), 23, + ACTIONS(187), 23, ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, @@ -9225,6 +8334,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -9238,14 +8348,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [8515] = 3, + [7510] = 10, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(195), 9, - anon_sym_STAR, - anon_sym_GT_GT, + ACTIONS(167), 7, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -9253,16 +8374,13 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(193), 23, + ACTIONS(161), 17, ts_builtin_sym_end, - anon_sym_DOT, anon_sym_COMMA, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -9270,20 +8388,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [8556] = 3, + [7564] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(199), 9, + ACTIONS(199), 8, anon_sym_STAR, - anon_sym_GT_GT, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -9301,6 +8415,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -9314,2398 +8429,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [8597] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(293), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [8664] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(287), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [8731] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(288), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [8798] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(289), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [8865] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(291), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [8932] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(271), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [8999] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(203), 9, - anon_sym_DASH, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(201), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_DASH_GT, - [9040] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(279), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(159), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [9107] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - ACTIONS(181), 1, - sym_identifier, - ACTIONS(183), 1, - anon_sym_LT_LPAREN, - ACTIONS(187), 1, - anon_sym_LPAREN, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(309), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(185), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(301), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [9174] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(207), 9, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(205), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_GT_GT_GT, - [9215] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - ACTIONS(181), 1, - sym_identifier, - ACTIONS(183), 1, - anon_sym_LT_LPAREN, - ACTIONS(187), 1, - anon_sym_LPAREN, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(306), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(185), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(301), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [9282] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - ACTIONS(181), 1, - sym_identifier, - ACTIONS(183), 1, - anon_sym_LT_LPAREN, - ACTIONS(187), 1, - anon_sym_LPAREN, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(307), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(185), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(301), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [9349] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - ACTIONS(181), 1, - sym_identifier, - ACTIONS(183), 1, - anon_sym_LT_LPAREN, - ACTIONS(187), 1, - anon_sym_LPAREN, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(304), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(185), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(301), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [9416] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - ACTIONS(181), 1, - sym_identifier, - ACTIONS(183), 1, - anon_sym_LT_LPAREN, - ACTIONS(187), 1, - anon_sym_LPAREN, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(297), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(185), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(301), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [9483] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - ACTIONS(181), 1, - sym_identifier, - ACTIONS(183), 1, - anon_sym_LT_LPAREN, - ACTIONS(187), 1, - anon_sym_LPAREN, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(298), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(185), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(301), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [9550] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - ACTIONS(181), 1, - sym_identifier, - ACTIONS(183), 1, - anon_sym_LT_LPAREN, - ACTIONS(187), 1, - anon_sym_LPAREN, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(299), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(185), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(301), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [9617] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - ACTIONS(181), 1, - sym_identifier, - ACTIONS(183), 1, - anon_sym_LT_LPAREN, - ACTIONS(187), 1, - anon_sym_LPAREN, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(311), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(185), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(301), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [9684] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(316), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [9751] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(312), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [9818] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - ACTIONS(181), 1, - sym_identifier, - ACTIONS(183), 1, - anon_sym_LT_LPAREN, - ACTIONS(187), 1, - anon_sym_LPAREN, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(302), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(185), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(301), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [9885] = 16, - ACTIONS(9), 1, - aux_sym_base_ten_token1, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - STATE(79), 1, - sym__float, - STATE(82), 1, - sym_number, - STATE(317), 1, - sym_formula_expression, - STATE(354), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(19), 2, - sym_true, - sym_false, - ACTIONS(151), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [9952] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - ACTIONS(181), 1, - sym_identifier, - ACTIONS(183), 1, - anon_sym_LT_LPAREN, - ACTIONS(187), 1, - anon_sym_LPAREN, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(303), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(185), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(301), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [10019] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - ACTIONS(181), 1, - sym_identifier, - ACTIONS(183), 1, - anon_sym_LT_LPAREN, - ACTIONS(187), 1, - anon_sym_LPAREN, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(320), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(185), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(301), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [10086] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(211), 9, - anon_sym_DASH, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(209), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_DASH_GT, - [10127] = 16, - ACTIONS(11), 1, - aux_sym_octal_token1, - ACTIONS(13), 1, - aux_sym_hex_token1, - ACTIONS(15), 1, - aux_sym_binary_token1, - ACTIONS(147), 1, - sym_identifier, - ACTIONS(149), 1, - anon_sym_LT_LPAREN, - ACTIONS(153), 1, - anon_sym_LPAREN, - ACTIONS(155), 1, - aux_sym_base_ten_token1, - STATE(262), 1, - sym__float, - STATE(263), 1, - sym_number, - STATE(280), 1, - sym_formula_expression, - STATE(359), 1, - sym_integer, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(157), 2, - sym_true, - sym_false, - ACTIONS(159), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_BANG, - STATE(353), 4, - sym_base_ten, - sym_octal, - sym_hex, - sym_binary, - STATE(269), 12, - sym_signed_integer, - sym_unsigned_integer, - sym_scalar, - sym_boolean, - sym_formula_parenthesis, - sym_formula_unary_expression, - sym_formula_binary_expression, - sym_formula_method_call, - sym_formula_function_call, - sym_formula_vector2, - sym_formula_vector3, - sym_formula_vector4, - [10194] = 4, - ACTIONS(217), 1, - anon_sym_DASH_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(215), 9, - anon_sym_DASH, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(213), 21, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [10236] = 11, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(173), 7, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(167), 15, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [10292] = 12, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(173), 7, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(167), 13, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [10350] = 14, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(173), 5, - anon_sym_PIPE, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(167), 13, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [10412] = 13, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(173), 6, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(167), 13, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [10472] = 15, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(173), 4, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(167), 13, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [10536] = 17, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(173), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(237), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(167), 9, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [10604] = 18, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(173), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(237), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(167), 8, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [10674] = 19, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(173), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(237), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(167), 7, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [10746] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(163), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(161), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [10786] = 20, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(247), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(237), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(243), 6, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [10860] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(215), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(213), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [10900] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(251), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(249), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [10940] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(255), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(253), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [10980] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(259), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(257), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [11020] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(263), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(261), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [11060] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(267), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(265), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [11100] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(271), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(269), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [11140] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(275), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(273), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [11180] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(279), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(277), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [11220] = 10, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(173), 7, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(167), 17, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [11274] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(283), 8, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(281), 23, - ts_builtin_sym_end, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_else, - anon_sym_SEMI, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_RBRACK, - [11314] = 20, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(287), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(237), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(285), 6, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [11388] = 20, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(291), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(237), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(289), 6, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [11462] = 20, - ACTIONS(169), 1, + [7604] = 8, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(295), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(237), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(293), 6, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [11536] = 20, ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - STATE(163), 1, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(299), 2, - anon_sym_EQ, - anon_sym_COLON, - ACTIONS(237), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - ACTIONS(297), 6, - ts_builtin_sym_end, - anon_sym_COMMA, - anon_sym_else, - anon_sym_SEMI, - anon_sym_RPAREN, - anon_sym_RBRACK, - [11610] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(303), 8, + ACTIONS(167), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, @@ -11714,14 +8452,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(301), 23, + ACTIONS(161), 18, ts_builtin_sym_end, - anon_sym_DOT, anon_sym_COMMA, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -11732,18 +8467,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [11650] = 3, + [7654] = 11, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(307), 8, - anon_sym_STAR, + ACTIONS(201), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(167), 7, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -11751,15 +8500,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(305), 23, + ACTIONS(161), 15, ts_builtin_sym_end, - anon_sym_DOT, anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -11769,18 +8512,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [11690] = 3, + [7710] = 12, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(311), 8, - anon_sym_STAR, + ACTIONS(201), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(167), 7, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, @@ -11788,17 +8548,9 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(309), 23, + ACTIONS(161), 13, ts_builtin_sym_end, - anon_sym_DOT, anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -11806,43 +8558,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [11730] = 8, - ACTIONS(169), 1, + [7768] = 14, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - STATE(163), 1, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(205), 1, + anon_sym_AMP, + ACTIONS(207), 1, + anon_sym_CARET, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(173), 8, - anon_sym_STAR, - anon_sym_AMP, + ACTIONS(201), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(167), 5, anon_sym_PIPE, - anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(167), 18, + ACTIONS(161), 13, ts_builtin_sym_end, anon_sym_COMMA, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -11854,30 +8610,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_SEMI, anon_sym_RPAREN, anon_sym_RBRACK, - [11780] = 3, + [7830] = 13, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(205), 1, + anon_sym_AMP, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 8, - anon_sym_STAR, - anon_sym_AMP, + ACTIONS(201), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(167), 6, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(313), 23, + ACTIONS(161), 13, ts_builtin_sym_end, - anon_sym_DOT, anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -11885,36 +8653,48 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [11820] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(319), 8, + [7890] = 15, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(205), 1, anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(207), 1, anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_PIPE, + STATE(90), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(201), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(167), 4, anon_sym_GT, anon_sym_LT, anon_sym_EQ, anon_sym_COLON, - ACTIONS(317), 23, + ACTIONS(161), 13, ts_builtin_sym_end, - anon_sym_DOT, anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -11922,135 +8702,183 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_else, anon_sym_SEMI, - anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_RBRACK, - [11860] = 4, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(127), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(125), 7, - sym_identifier, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(123), 19, - sym_unit_quote, + [7954] = 17, + ACTIONS(163), 1, anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(165), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, anon_sym_SLASH, + ACTIONS(205), 1, + anon_sym_AMP, + ACTIONS(207), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_PIPE, + STATE(90), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(167), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(201), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(211), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + ACTIONS(161), 9, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8022] = 18, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, anon_sym_LPAREN, - [11899] = 5, - STATE(236), 1, - sym__unit, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(321), 2, - sym_identifier, - sym_unit_quote, - ACTIONS(135), 6, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(205), 1, anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(207), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(129), 18, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, + anon_sym_AMP_AMP, + STATE(90), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(167), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(211), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, + ACTIONS(161), 8, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8092] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, anon_sym_LPAREN, - [11939] = 4, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(127), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(125), 7, - sym_identifier, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(205), 1, anon_sym_AMP, - anon_sym_PIPE, + ACTIONS(207), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(123), 18, - sym_unit_quote, - anon_sym_DOT, - anon_sym_COLON_COLON, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, + anon_sym_AMP_AMP, + ACTIONS(217), 1, + anon_sym_PIPE_PIPE, + STATE(90), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(167), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(211), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, + ACTIONS(161), 7, + ts_builtin_sym_end, + anon_sym_COMMA, anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_LPAREN, - [11977] = 6, - ACTIONS(323), 1, - anon_sym_EQ, - ACTIONS(325), 1, - anon_sym_COLON, - STATE(339), 1, - sym_declaration_type, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8164] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(215), 6, + ACTIONS(149), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(213), 17, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(147), 23, + ts_builtin_sym_end, anon_sym_DOT, + anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -12065,75 +8893,83 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, anon_sym_RPAREN, - [12018] = 20, - ACTIONS(169), 1, + anon_sym_RBRACK, + [8204] = 20, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(229), 1, + ACTIONS(205), 1, anon_sym_AMP, - ACTIONS(231), 1, + ACTIONS(207), 1, anon_sym_CARET, - ACTIONS(233), 1, + ACTIONS(209), 1, anon_sym_PIPE, - ACTIONS(239), 1, + ACTIONS(215), 1, anon_sym_AMP_AMP, - ACTIONS(241), 1, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, - ACTIONS(245), 1, + ACTIONS(221), 1, anon_sym_CARET_CARET, - ACTIONS(329), 1, - anon_sym_EQ, - STATE(163), 1, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(327), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(237), 4, + ACTIONS(223), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12087] = 4, - ACTIONS(331), 1, - anon_sym_DOT, + ACTIONS(219), 6, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8278] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(143), 6, + ACTIONS(227), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(141), 19, - sym_identifier, - sym_unit_quote, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(225), 23, + ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -12148,24 +8984,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - [12124] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8318] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(125), 6, + ACTIONS(231), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(123), 20, - sym_identifier, - sym_unit_quote, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(229), 23, + ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -12180,24 +9021,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - [12159] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8358] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(139), 6, + ACTIONS(235), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(137), 20, - sym_identifier, - sym_unit_quote, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(233), 23, + ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -12212,120 +9058,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - [12194] = 6, - ACTIONS(131), 1, - sym_identifier, - ACTIONS(133), 1, - sym_unit_quote, - STATE(106), 1, - sym__unit, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8398] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(135), 6, + ACTIONS(239), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(129), 17, - anon_sym_DOT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_LPAREN, - [12235] = 20, - ACTIONS(333), 1, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(237), 23, + ts_builtin_sym_end, anon_sym_DOT, - ACTIONS(335), 1, anon_sym_COMMA, - ACTIONS(337), 1, - anon_sym_RPAREN_GT, - ACTIONS(339), 1, anon_sym_COLON_COLON, - ACTIONS(343), 1, - anon_sym_STAR_STAR, - ACTIONS(345), 1, - anon_sym_STAR, - ACTIONS(347), 1, - anon_sym_SLASH, - ACTIONS(351), 1, - anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, - anon_sym_CARET, - ACTIONS(361), 1, - anon_sym_AMP_AMP, - ACTIONS(363), 1, - anon_sym_PIPE_PIPE, - ACTIONS(365), 1, - anon_sym_CARET_CARET, - ACTIONS(367), 1, - anon_sym_LPAREN, - STATE(252), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(341), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(349), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(357), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(359), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [12303] = 11, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(339), 1, - anon_sym_COLON_COLON, - ACTIONS(343), 1, anon_sym_STAR_STAR, - ACTIONS(345), 1, - anon_sym_STAR, - ACTIONS(347), 1, anon_sym_SLASH, - ACTIONS(367), 1, - anon_sym_LPAREN, - STATE(252), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(341), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(173), 5, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(167), 11, - anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -12333,41 +9093,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_EQ, anon_sym_BANG_EQ, anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [12353] = 12, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(339), 1, - anon_sym_COLON_COLON, - ACTIONS(343), 1, - anon_sym_STAR_STAR, - ACTIONS(345), 1, - anon_sym_STAR, - ACTIONS(347), 1, - anon_sym_SLASH, - ACTIONS(367), 1, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - STATE(252), 1, - sym_dictionary_construction, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8438] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(341), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(349), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(173), 5, + ACTIONS(243), 8, + anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 9, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(241), 23, + ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, - anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12375,41 +9132,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [12405] = 14, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(339), 1, - anon_sym_COLON_COLON, - ACTIONS(343), 1, - anon_sym_STAR_STAR, - ACTIONS(345), 1, - anon_sym_STAR, - ACTIONS(347), 1, - anon_sym_SLASH, - ACTIONS(351), 1, - anon_sym_AMP, - ACTIONS(355), 1, - anon_sym_CARET, - ACTIONS(367), 1, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - STATE(252), 1, - sym_dictionary_construction, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8478] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(341), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(349), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(173), 3, + ACTIONS(247), 8, + anon_sym_STAR, + anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 9, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(245), 23, + ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, - anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12417,40 +9169,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [12461] = 13, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(339), 1, - anon_sym_COLON_COLON, - ACTIONS(343), 1, - anon_sym_STAR_STAR, - ACTIONS(345), 1, - anon_sym_STAR, - ACTIONS(347), 1, - anon_sym_SLASH, - ACTIONS(351), 1, - anon_sym_AMP, - ACTIONS(367), 1, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - STATE(252), 1, - sym_dictionary_construction, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8518] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(341), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(349), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(173), 4, + ACTIONS(251), 8, + anon_sym_STAR, + anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 9, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(249), 23, + ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, - anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12458,42 +9206,38 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [12515] = 15, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(339), 1, - anon_sym_COLON_COLON, - ACTIONS(343), 1, - anon_sym_STAR_STAR, - ACTIONS(345), 1, - anon_sym_STAR, - ACTIONS(347), 1, - anon_sym_SLASH, - ACTIONS(351), 1, - anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, - anon_sym_CARET, - ACTIONS(367), 1, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - STATE(252), 1, - sym_dictionary_construction, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8558] = 4, + ACTIONS(253), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(173), 2, + ACTIONS(243), 9, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(341), 2, - anon_sym_DASH, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(241), 21, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_PLUS, - ACTIONS(349), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(167), 9, - anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -12501,205 +9245,229 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [12573] = 16, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(339), 1, - anon_sym_COLON_COLON, - ACTIONS(343), 1, - anon_sym_STAR_STAR, - ACTIONS(345), 1, - anon_sym_STAR, - ACTIONS(347), 1, - anon_sym_SLASH, - ACTIONS(351), 1, - anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, - anon_sym_CARET, - ACTIONS(367), 1, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - STATE(252), 1, - sym_dictionary_construction, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8600] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(341), 2, + ACTIONS(257), 8, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(255), 23, + ts_builtin_sym_end, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(349), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - ACTIONS(167), 5, - anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [12633] = 17, - ACTIONS(333), 1, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8640] = 20, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(339), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(343), 1, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(345), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(347), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(351), 1, + ACTIONS(205), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(207), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, anon_sym_AMP_AMP, - ACTIONS(367), 1, - anon_sym_LPAREN, - STATE(252), 1, + ACTIONS(217), 1, + anon_sym_PIPE_PIPE, + ACTIONS(221), 1, + anon_sym_CARET_CARET, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(341), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(349), 2, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 4, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - ACTIONS(359), 4, + ACTIONS(261), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12695] = 18, - ACTIONS(333), 1, + ACTIONS(259), 6, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8714] = 20, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(339), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(343), 1, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(345), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(347), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(351), 1, + ACTIONS(205), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(207), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, - ACTIONS(367), 1, - anon_sym_LPAREN, - STATE(252), 1, + ACTIONS(221), 1, + anon_sym_CARET_CARET, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(341), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(349), 2, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 3, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_CARET_CARET, - ACTIONS(359), 4, + ACTIONS(265), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12759] = 19, - ACTIONS(333), 1, + ACTIONS(263), 6, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8788] = 20, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(339), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(343), 1, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(345), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(347), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(351), 1, + ACTIONS(205), 1, anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(207), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(221), 1, anon_sym_CARET_CARET, - ACTIONS(367), 1, - anon_sym_LPAREN, - STATE(252), 1, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(243), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(341), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(349), 2, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(269), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12825] = 3, + ACTIONS(267), 6, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8862] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(179), 7, - anon_sym_DASH, + ACTIONS(273), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(177), 18, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(271), 23, + ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -12712,27 +9480,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_DASH_GT, - [12859] = 4, - ACTIONS(165), 1, - anon_sym_DASH_GT, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8902] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(163), 7, - anon_sym_DASH, + ACTIONS(277), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(161), 17, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(275), 23, + ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -12745,118 +9517,68 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - [12895] = 19, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(339), 1, - anon_sym_COLON_COLON, - ACTIONS(343), 1, - anon_sym_STAR_STAR, - ACTIONS(345), 1, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8942] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(281), 8, anon_sym_STAR, - ACTIONS(347), 1, - anon_sym_SLASH, - ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(361), 1, - anon_sym_AMP_AMP, - ACTIONS(363), 1, - anon_sym_PIPE_PIPE, - ACTIONS(365), 1, - anon_sym_CARET_CARET, - ACTIONS(367), 1, - anon_sym_LPAREN, - STATE(252), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(285), 2, + anon_sym_GT, + anon_sym_LT, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(279), 23, + ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(341), 2, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(349), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [12961] = 19, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(339), 1, - anon_sym_COLON_COLON, - ACTIONS(343), 1, - anon_sym_STAR_STAR, - ACTIONS(345), 1, - anon_sym_STAR, - ACTIONS(347), 1, - anon_sym_SLASH, - ACTIONS(351), 1, - anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, - anon_sym_CARET, - ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, anon_sym_CARET_CARET, - ACTIONS(367), 1, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - STATE(252), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(297), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(341), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(349), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(357), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(359), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [13027] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + [8982] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(211), 7, - anon_sym_DASH, + ACTIONS(285), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(209), 18, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(283), 23, + ts_builtin_sym_end, anon_sym_DOT, anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -12869,23 +9591,29 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - anon_sym_DASH_GT, - [13061] = 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + [9022] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(125), 7, - sym_identifier, + ACTIONS(289), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(123), 18, - sym_unit_quote, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(287), 23, + ts_builtin_sym_end, anon_sym_DOT, + anon_sym_COMMA, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -12901,33 +9629,86 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, + anon_sym_else, + anon_sym_SEMI, anon_sym_LPAREN, - [13095] = 8, - ACTIONS(333), 1, + anon_sym_RPAREN, + anon_sym_RBRACK, + [9062] = 20, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(339), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(343), 1, - anon_sym_STAR_STAR, - ACTIONS(367), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - STATE(252), 1, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(205), 1, + anon_sym_AMP, + ACTIONS(207), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, + anon_sym_AMP_AMP, + ACTIONS(217), 1, + anon_sym_PIPE_PIPE, + ACTIONS(221), 1, + anon_sym_CARET_CARET, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(173), 6, + ACTIONS(201), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(211), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(293), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(213), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + ACTIONS(291), 6, + ts_builtin_sym_end, + anon_sym_COMMA, + anon_sym_else, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + [9136] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(297), 8, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 14, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(295), 23, + ts_builtin_sym_end, + anon_sym_DOT, anon_sym_COMMA, - anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -12938,11 +9719,20 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [13139] = 3, + anon_sym_then, + anon_sym_else, + anon_sym_SEMI, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_RBRACK, + [9176] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(139), 7, + ACTIONS(135), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(133), 7, sym_identifier, anon_sym_STAR, anon_sym_AMP, @@ -12950,9 +9740,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(137), 18, + ACTIONS(131), 19, sym_unit_quote, anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -12967,30 +9759,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, anon_sym_LPAREN, - [13173] = 7, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(339), 1, - anon_sym_COLON_COLON, - ACTIONS(367), 1, - anon_sym_LPAREN, - STATE(252), 1, - sym_dictionary_construction, + [9215] = 5, + STATE(204), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(173), 6, + ACTIONS(299), 2, + sym_identifier, + sym_unit_quote, + ACTIONS(129), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 15, + ACTIONS(123), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -13004,179 +9794,145 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [13215] = 20, - ACTIONS(89), 1, - anon_sym_RBRACK, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - ACTIONS(369), 1, - anon_sym_COMMA, - STATE(163), 1, - sym_dictionary_construction, + [9255] = 4, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(135), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + ACTIONS(133), 7, + sym_identifier, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(131), 18, + sym_unit_quote, + anon_sym_DOT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13283] = 20, - ACTIONS(169), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_LPAREN, + [9293] = 20, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(229), 1, + ACTIONS(205), 1, anon_sym_AMP, - ACTIONS(231), 1, + ACTIONS(207), 1, anon_sym_CARET, - ACTIONS(233), 1, + ACTIONS(209), 1, anon_sym_PIPE, - ACTIONS(239), 1, + ACTIONS(215), 1, anon_sym_AMP_AMP, - ACTIONS(241), 1, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, - ACTIONS(245), 1, + ACTIONS(221), 1, anon_sym_CARET_CARET, - ACTIONS(369), 1, - anon_sym_COMMA, - ACTIONS(371), 1, - anon_sym_RBRACK, - STATE(163), 1, + ACTIONS(303), 1, + anon_sym_EQ, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(237), 4, + ACTIONS(301), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13351] = 20, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(339), 1, - anon_sym_COLON_COLON, - ACTIONS(343), 1, - anon_sym_STAR_STAR, - ACTIONS(345), 1, + [9362] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(145), 6, anon_sym_STAR, - ACTIONS(347), 1, - anon_sym_SLASH, - ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(361), 1, - anon_sym_AMP_AMP, - ACTIONS(363), 1, - anon_sym_PIPE_PIPE, - ACTIONS(365), 1, - anon_sym_CARET_CARET, - ACTIONS(367), 1, - anon_sym_LPAREN, - ACTIONS(373), 1, + anon_sym_GT, + anon_sym_LT, + ACTIONS(143), 20, + sym_identifier, + sym_unit_quote, + anon_sym_DOT, anon_sym_COMMA, - ACTIONS(375), 1, anon_sym_RPAREN_GT, - STATE(252), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(341), 2, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(349), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13419] = 10, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(339), 1, - anon_sym_COLON_COLON, - ACTIONS(343), 1, - anon_sym_STAR_STAR, - ACTIONS(345), 1, - anon_sym_STAR, - ACTIONS(347), 1, - anon_sym_SLASH, - ACTIONS(367), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - STATE(252), 1, - sym_dictionary_construction, + [9397] = 4, + ACTIONS(305), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(173), 5, + ACTIONS(139), 6, + anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 13, + ACTIONS(137), 19, + sym_identifier, + sym_unit_quote, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -13186,71 +9942,96 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [13467] = 20, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(339), 1, - anon_sym_COLON_COLON, - ACTIONS(343), 1, - anon_sym_STAR_STAR, - ACTIONS(345), 1, + anon_sym_LPAREN, + [9434] = 6, + ACTIONS(125), 1, + sym_identifier, + ACTIONS(127), 1, + sym_unit_quote, + STATE(88), 1, + sym__unit, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(129), 6, anon_sym_STAR, - ACTIONS(347), 1, - anon_sym_SLASH, - ACTIONS(351), 1, anon_sym_AMP, - ACTIONS(353), 1, anon_sym_PIPE, - ACTIONS(355), 1, anon_sym_CARET, - ACTIONS(361), 1, + anon_sym_GT, + anon_sym_LT, + ACTIONS(123), 17, + anon_sym_DOT, + anon_sym_COLON_COLON, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, - ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, anon_sym_CARET_CARET, - ACTIONS(367), 1, + anon_sym_then, anon_sym_LPAREN, - ACTIONS(377), 1, - anon_sym_COMMA, - ACTIONS(379), 1, - anon_sym_RPAREN_GT, - STATE(252), 1, - sym_dictionary_construction, + [9475] = 6, + ACTIONS(307), 1, + anon_sym_EQ, + ACTIONS(309), 1, + anon_sym_COLON, + STATE(277), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(341), 2, + ACTIONS(243), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(241), 17, + anon_sym_DOT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(349), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13535] = 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + anon_sym_RPAREN, + [9516] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(203), 7, - anon_sym_DASH, + ACTIONS(133), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(201), 18, + ACTIONS(131), 20, + sym_identifier, + sym_unit_quote, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, + anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -13264,418 +10045,384 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - anon_sym_DASH_GT, - [13569] = 19, - ACTIONS(333), 1, + [9551] = 20, + ACTIONS(311), 1, anon_sym_DOT, - ACTIONS(339), 1, + ACTIONS(313), 1, + anon_sym_COMMA, + ACTIONS(315), 1, + anon_sym_RPAREN_GT, + ACTIONS(317), 1, anon_sym_COLON_COLON, - ACTIONS(343), 1, + ACTIONS(321), 1, anon_sym_STAR_STAR, - ACTIONS(345), 1, + ACTIONS(323), 1, anon_sym_STAR, - ACTIONS(347), 1, + ACTIONS(325), 1, anon_sym_SLASH, - ACTIONS(351), 1, + ACTIONS(329), 1, anon_sym_AMP, - ACTIONS(353), 1, + ACTIONS(331), 1, anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(333), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(343), 1, anon_sym_CARET_CARET, - ACTIONS(367), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - STATE(252), 1, + STATE(172), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(289), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(341), 2, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(349), 2, + ACTIONS(327), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13635] = 20, - ACTIONS(41), 1, - anon_sym_RBRACK, - ACTIONS(169), 1, + [9619] = 13, + ACTIONS(311), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(317), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(321), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(323), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(325), 1, anon_sym_SLASH, - ACTIONS(229), 1, + ACTIONS(329), 1, anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - ACTIONS(369), 1, - anon_sym_COMMA, - STATE(163), 1, + ACTIONS(345), 1, + anon_sym_LPAREN, + STATE(172), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + ACTIONS(327), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, + ACTIONS(167), 4, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(237), 4, + ACTIONS(161), 9, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13703] = 20, - ACTIONS(333), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [9673] = 15, + ACTIONS(311), 1, anon_sym_DOT, - ACTIONS(339), 1, + ACTIONS(317), 1, anon_sym_COLON_COLON, - ACTIONS(343), 1, + ACTIONS(321), 1, anon_sym_STAR_STAR, - ACTIONS(345), 1, + ACTIONS(323), 1, anon_sym_STAR, - ACTIONS(347), 1, + ACTIONS(325), 1, anon_sym_SLASH, - ACTIONS(351), 1, + ACTIONS(329), 1, anon_sym_AMP, - ACTIONS(353), 1, + ACTIONS(331), 1, anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(333), 1, anon_sym_CARET, - ACTIONS(361), 1, - anon_sym_AMP_AMP, - ACTIONS(363), 1, - anon_sym_PIPE_PIPE, - ACTIONS(365), 1, - anon_sym_CARET_CARET, - ACTIONS(367), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(381), 1, - anon_sym_COMMA, - ACTIONS(383), 1, - anon_sym_RPAREN_GT, - STATE(252), 1, + STATE(172), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(341), 2, + ACTIONS(167), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(349), 2, + ACTIONS(327), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(161), 9, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13771] = 19, - ACTIONS(333), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [9731] = 16, + ACTIONS(311), 1, anon_sym_DOT, - ACTIONS(339), 1, + ACTIONS(317), 1, anon_sym_COLON_COLON, - ACTIONS(343), 1, + ACTIONS(321), 1, anon_sym_STAR_STAR, - ACTIONS(345), 1, + ACTIONS(323), 1, anon_sym_STAR, - ACTIONS(347), 1, + ACTIONS(325), 1, anon_sym_SLASH, - ACTIONS(351), 1, + ACTIONS(329), 1, anon_sym_AMP, - ACTIONS(353), 1, + ACTIONS(331), 1, anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(333), 1, anon_sym_CARET, - ACTIONS(361), 1, - anon_sym_AMP_AMP, - ACTIONS(363), 1, - anon_sym_PIPE_PIPE, - ACTIONS(365), 1, - anon_sym_CARET_CARET, - ACTIONS(367), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - STATE(252), 1, + STATE(172), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(293), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(341), 2, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(349), 2, + ACTIONS(327), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13837] = 4, - ACTIONS(385), 1, - anon_sym_DASH_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(215), 7, - anon_sym_DASH, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(213), 17, - anon_sym_DOT, + ACTIONS(161), 5, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [13873] = 19, - ACTIONS(169), 1, + [9791] = 17, + ACTIONS(311), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(317), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(321), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(323), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(325), 1, anon_sym_SLASH, - ACTIONS(229), 1, + ACTIONS(329), 1, anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, + ACTIONS(331), 1, anon_sym_PIPE, - ACTIONS(239), 1, + ACTIONS(333), 1, + anon_sym_CARET, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - STATE(163), 1, + ACTIONS(345), 1, + anon_sym_LPAREN, + STATE(172), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + ACTIONS(327), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(387), 2, + ACTIONS(161), 4, anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(237), 4, + anon_sym_RPAREN_GT, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [13939] = 19, - ACTIONS(169), 1, + [9853] = 18, + ACTIONS(311), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(317), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(321), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(323), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(325), 1, anon_sym_SLASH, - ACTIONS(229), 1, + ACTIONS(329), 1, anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, + ACTIONS(331), 1, anon_sym_PIPE, - ACTIONS(239), 1, + ACTIONS(333), 1, + anon_sym_CARET, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(241), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - STATE(163), 1, + ACTIONS(345), 1, + anon_sym_LPAREN, + STATE(172), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + ACTIONS(327), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(389), 2, + ACTIONS(161), 3, anon_sym_COMMA, - anon_sym_RPAREN, - ACTIONS(237), 4, + anon_sym_RPAREN_GT, + anon_sym_CARET_CARET, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14005] = 4, - ACTIONS(391), 1, + [9917] = 19, + ACTIONS(311), 1, anon_sym_DOT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(143), 7, - sym_identifier, + ACTIONS(317), 1, + anon_sym_COLON_COLON, + ACTIONS(321), 1, + anon_sym_STAR_STAR, + ACTIONS(323), 1, anon_sym_STAR, + ACTIONS(325), 1, + anon_sym_SLASH, + ACTIONS(329), 1, anon_sym_AMP, + ACTIONS(331), 1, anon_sym_PIPE, + ACTIONS(333), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(141), 17, - sym_unit_quote, - anon_sym_COLON_COLON, + ACTIONS(339), 1, + anon_sym_AMP_AMP, + ACTIONS(341), 1, + anon_sym_PIPE_PIPE, + ACTIONS(343), 1, + anon_sym_CARET_CARET, + ACTIONS(345), 1, + anon_sym_LPAREN, + STATE(172), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(219), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(327), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(335), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - anon_sym_LPAREN, - [14041] = 20, - ACTIONS(169), 1, + [9983] = 20, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(229), 1, + ACTIONS(205), 1, anon_sym_AMP, - ACTIONS(231), 1, + ACTIONS(207), 1, anon_sym_CARET, - ACTIONS(233), 1, + ACTIONS(209), 1, anon_sym_PIPE, - ACTIONS(239), 1, + ACTIONS(215), 1, anon_sym_AMP_AMP, - ACTIONS(241), 1, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, - ACTIONS(245), 1, + ACTIONS(221), 1, anon_sym_CARET_CARET, - ACTIONS(369), 1, + ACTIONS(347), 1, anon_sym_COMMA, - ACTIONS(393), 1, + ACTIONS(349), 1, anon_sym_RBRACK, - STATE(163), 1, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(237), 4, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14109] = 3, + [10051] = 4, + ACTIONS(351), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(207), 6, + ACTIONS(139), 7, + sym_identifier, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(205), 18, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(137), 17, + sym_unit_quote, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -13690,236 +10437,171 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, anon_sym_LPAREN, - [14142] = 19, - ACTIONS(169), 1, + [10087] = 19, + ACTIONS(311), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(317), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(321), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(323), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(325), 1, anon_sym_SLASH, - ACTIONS(229), 1, + ACTIONS(329), 1, anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, + ACTIONS(331), 1, anon_sym_PIPE, - ACTIONS(239), 1, + ACTIONS(333), 1, + anon_sym_CARET, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(241), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(245), 1, + ACTIONS(343), 1, anon_sym_CARET_CARET, - ACTIONS(395), 1, - anon_sym_COLON, - STATE(163), 1, + ACTIONS(345), 1, + anon_sym_LPAREN, + STATE(172), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(259), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + ACTIONS(327), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(237), 4, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14207] = 19, - ACTIONS(169), 1, + [10153] = 19, + ACTIONS(311), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(317), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(321), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(323), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(325), 1, anon_sym_SLASH, - ACTIONS(229), 1, + ACTIONS(329), 1, anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, + ACTIONS(331), 1, anon_sym_PIPE, - ACTIONS(239), 1, + ACTIONS(333), 1, + anon_sym_CARET, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(241), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(245), 1, + ACTIONS(343), 1, anon_sym_CARET_CARET, - ACTIONS(397), 1, - anon_sym_else, - STATE(163), 1, + ACTIONS(345), 1, + anon_sym_LPAREN, + STATE(172), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(237), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [14272] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(259), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(257), 18, - anon_sym_DOT, + ACTIONS(263), 2, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(327), 2, anon_sym_LT_LT, anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [14305] = 10, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(399), 1, - anon_sym_STAR_STAR, - ACTIONS(401), 1, - anon_sym_STAR, - ACTIONS(403), 1, - anon_sym_SLASH, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(173), 5, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 12, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - [14352] = 19, - ACTIONS(169), 1, + [10219] = 20, + ACTIONS(311), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(317), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(321), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(323), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(325), 1, anon_sym_SLASH, - ACTIONS(229), 1, + ACTIONS(329), 1, anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, + ACTIONS(331), 1, anon_sym_PIPE, - ACTIONS(239), 1, + ACTIONS(333), 1, + anon_sym_CARET, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(241), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(245), 1, + ACTIONS(343), 1, anon_sym_CARET_CARET, - ACTIONS(405), 1, - anon_sym_SEMI, - STATE(163), 1, + ACTIONS(345), 1, + anon_sym_LPAREN, + ACTIONS(353), 1, + anon_sym_COMMA, + ACTIONS(355), 1, + anon_sym_RPAREN_GT, + STATE(172), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + ACTIONS(327), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(237), 4, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14417] = 8, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(399), 1, - anon_sym_STAR_STAR, - STATE(163), 1, - sym_dictionary_construction, + [10287] = 4, + ACTIONS(357), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(173), 6, + ACTIONS(243), 7, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 13, - anon_sym_DASH, + ACTIONS(241), 17, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -13930,117 +10612,125 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - [14460] = 11, - ACTIONS(169), 1, + anon_sym_LPAREN, + [10323] = 19, + ACTIONS(311), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(317), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(399), 1, + ACTIONS(321), 1, anon_sym_STAR_STAR, - ACTIONS(401), 1, + ACTIONS(323), 1, anon_sym_STAR, - ACTIONS(403), 1, + ACTIONS(325), 1, anon_sym_SLASH, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(407), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(173), 5, + ACTIONS(329), 1, anon_sym_AMP, + ACTIONS(331), 1, anon_sym_PIPE, + ACTIONS(333), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(167), 10, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(339), 1, anon_sym_AMP_AMP, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, + ACTIONS(343), 1, anon_sym_CARET_CARET, - anon_sym_then, - [14509] = 12, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(345), 1, anon_sym_LPAREN, - ACTIONS(399), 1, - anon_sym_STAR_STAR, - ACTIONS(401), 1, - anon_sym_STAR, - ACTIONS(403), 1, - anon_sym_SLASH, - STATE(163), 1, + STATE(172), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(291), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(409), 2, + ACTIONS(327), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(173), 5, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 8, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - [14560] = 14, - ACTIONS(169), 1, + [10389] = 19, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(399), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(401), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(403), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(411), 1, + ACTIONS(205), 1, anon_sym_AMP, - ACTIONS(413), 1, + ACTIONS(207), 1, anon_sym_CARET, - STATE(163), 1, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, + anon_sym_AMP_AMP, + ACTIONS(217), 1, + anon_sym_PIPE_PIPE, + ACTIONS(221), 1, + anon_sym_CARET_CARET, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(409), 2, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(173), 3, + ACTIONS(211), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(359), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(213), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [10455] = 4, + ACTIONS(151), 1, + anon_sym_DASH_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(149), 7, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 8, + ACTIONS(147), 17, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -14048,39 +10738,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - [14615] = 13, - ACTIONS(169), 1, + anon_sym_LPAREN, + [10491] = 14, + ACTIONS(311), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(317), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(399), 1, + ACTIONS(321), 1, anon_sym_STAR_STAR, - ACTIONS(401), 1, + ACTIONS(323), 1, anon_sym_STAR, - ACTIONS(403), 1, + ACTIONS(325), 1, anon_sym_SLASH, - ACTIONS(411), 1, + ACTIONS(329), 1, anon_sym_AMP, - STATE(163), 1, + ACTIONS(333), 1, + anon_sym_CARET, + ACTIONS(345), 1, + anon_sym_LPAREN, + STATE(172), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(409), 2, + ACTIONS(327), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(173), 4, + ACTIONS(167), 3, anon_sym_PIPE, - anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 8, + ACTIONS(161), 9, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -14088,198 +10781,245 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_then, - [14668] = 15, - ACTIONS(169), 1, + [10547] = 20, + ACTIONS(47), 1, + anon_sym_RBRACK, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(399), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(401), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(403), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(411), 1, + ACTIONS(205), 1, anon_sym_AMP, - ACTIONS(413), 1, + ACTIONS(207), 1, anon_sym_CARET, - ACTIONS(415), 1, + ACTIONS(209), 1, anon_sym_PIPE, - STATE(163), 1, + ACTIONS(215), 1, + anon_sym_AMP_AMP, + ACTIONS(217), 1, + anon_sym_PIPE_PIPE, + ACTIONS(221), 1, + anon_sym_CARET_CARET, + ACTIONS(347), 1, + anon_sym_COMMA, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(173), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(407), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(409), 2, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(167), 8, + ACTIONS(211), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - [14725] = 16, - ACTIONS(169), 1, + [10615] = 19, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(399), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(401), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(403), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(411), 1, + ACTIONS(205), 1, anon_sym_AMP, - ACTIONS(413), 1, + ACTIONS(207), 1, anon_sym_CARET, - ACTIONS(415), 1, + ACTIONS(209), 1, anon_sym_PIPE, - STATE(163), 1, + ACTIONS(215), 1, + anon_sym_AMP_AMP, + ACTIONS(217), 1, + anon_sym_PIPE_PIPE, + ACTIONS(221), 1, + anon_sym_CARET_CARET, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(409), 2, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(417), 2, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 4, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - ACTIONS(419), 4, + ACTIONS(361), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14784] = 17, - ACTIONS(169), 1, + [10681] = 20, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(399), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(401), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(403), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(411), 1, + ACTIONS(205), 1, anon_sym_AMP, - ACTIONS(413), 1, + ACTIONS(207), 1, anon_sym_CARET, - ACTIONS(415), 1, + ACTIONS(209), 1, anon_sym_PIPE, - ACTIONS(421), 1, + ACTIONS(215), 1, anon_sym_AMP_AMP, - STATE(163), 1, + ACTIONS(217), 1, + anon_sym_PIPE_PIPE, + ACTIONS(221), 1, + anon_sym_CARET_CARET, + ACTIONS(347), 1, + anon_sym_COMMA, + ACTIONS(363), 1, + anon_sym_RBRACK, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(409), 2, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(417), 2, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(167), 3, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_then, - ACTIONS(419), 4, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14845] = 18, - ACTIONS(169), 1, + [10749] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(155), 7, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(153), 18, anon_sym_DOT, - ACTIONS(171), 1, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - ACTIONS(175), 1, + anon_sym_PLUS, + anon_sym_STAR_STAR, + anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, anon_sym_LPAREN, - ACTIONS(399), 1, + anon_sym_DASH_GT, + [10783] = 20, + ACTIONS(311), 1, + anon_sym_DOT, + ACTIONS(317), 1, + anon_sym_COLON_COLON, + ACTIONS(321), 1, anon_sym_STAR_STAR, - ACTIONS(401), 1, + ACTIONS(323), 1, anon_sym_STAR, - ACTIONS(403), 1, + ACTIONS(325), 1, anon_sym_SLASH, - ACTIONS(411), 1, + ACTIONS(329), 1, anon_sym_AMP, - ACTIONS(413), 1, - anon_sym_CARET, - ACTIONS(415), 1, + ACTIONS(331), 1, anon_sym_PIPE, - ACTIONS(421), 1, + ACTIONS(333), 1, + anon_sym_CARET, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(423), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - STATE(163), 1, + ACTIONS(343), 1, + anon_sym_CARET_CARET, + ACTIONS(345), 1, + anon_sym_LPAREN, + ACTIONS(365), 1, + anon_sym_COMMA, + ACTIONS(367), 1, + anon_sym_RPAREN_GT, + STATE(172), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(167), 2, - anon_sym_CARET_CARET, - anon_sym_then, - ACTIONS(407), 2, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(409), 2, + ACTIONS(327), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(417), 2, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(419), 4, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [14908] = 3, + [10851] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(163), 6, + ACTIONS(159), 7, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(161), 18, + ACTIONS(157), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -14293,67 +11033,53 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [14941] = 19, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(243), 1, - anon_sym_then, - ACTIONS(399), 1, - anon_sym_STAR_STAR, - ACTIONS(401), 1, - anon_sym_STAR, - ACTIONS(403), 1, - anon_sym_SLASH, - ACTIONS(411), 1, - anon_sym_AMP, - ACTIONS(413), 1, - anon_sym_CARET, - ACTIONS(415), 1, - anon_sym_PIPE, - ACTIONS(421), 1, - anon_sym_AMP_AMP, - ACTIONS(423), 1, - anon_sym_PIPE_PIPE, - ACTIONS(425), 1, - anon_sym_CARET_CARET, - STATE(163), 1, - sym_dictionary_construction, + anon_sym_DASH_GT, + [10885] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(133), 7, + sym_identifier, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(131), 18, + sym_unit_quote, + anon_sym_DOT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(409), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(417), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(419), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15006] = 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_LPAREN, + [10919] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(251), 6, + ACTIONS(145), 7, + sym_identifier, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(249), 18, + ACTIONS(143), 18, + sym_unit_quote, anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, @@ -14368,23 +11094,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, + anon_sym_LPAREN, + [10953] = 7, + ACTIONS(311), 1, + anon_sym_DOT, + ACTIONS(317), 1, + anon_sym_COLON_COLON, + ACTIONS(345), 1, anon_sym_LPAREN, - [15039] = 3, + STATE(172), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(255), 6, + ACTIONS(167), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(253), 18, - anon_sym_DOT, + ACTIONS(161), 15, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, @@ -14398,24 +11131,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [15072] = 3, + [10995] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(271), 6, + ACTIONS(173), 7, + anon_sym_DASH, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(269), 18, + ACTIONS(171), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, - anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, @@ -14429,26 +11161,131 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [15105] = 3, + anon_sym_DASH_GT, + [11029] = 19, + ACTIONS(311), 1, + anon_sym_DOT, + ACTIONS(317), 1, + anon_sym_COLON_COLON, + ACTIONS(321), 1, + anon_sym_STAR_STAR, + ACTIONS(323), 1, + anon_sym_STAR, + ACTIONS(325), 1, + anon_sym_SLASH, + ACTIONS(329), 1, + anon_sym_AMP, + ACTIONS(331), 1, + anon_sym_PIPE, + ACTIONS(333), 1, + anon_sym_CARET, + ACTIONS(339), 1, + anon_sym_AMP_AMP, + ACTIONS(341), 1, + anon_sym_PIPE_PIPE, + ACTIONS(343), 1, + anon_sym_CARET_CARET, + ACTIONS(345), 1, + anon_sym_LPAREN, + STATE(172), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(275), 6, + ACTIONS(267), 2, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + ACTIONS(319), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(327), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(335), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(337), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [11095] = 20, + ACTIONS(311), 1, + anon_sym_DOT, + ACTIONS(317), 1, + anon_sym_COLON_COLON, + ACTIONS(321), 1, + anon_sym_STAR_STAR, + ACTIONS(323), 1, anon_sym_STAR, + ACTIONS(325), 1, + anon_sym_SLASH, + ACTIONS(329), 1, anon_sym_AMP, + ACTIONS(331), 1, anon_sym_PIPE, + ACTIONS(333), 1, anon_sym_CARET, + ACTIONS(339), 1, + anon_sym_AMP_AMP, + ACTIONS(341), 1, + anon_sym_PIPE_PIPE, + ACTIONS(343), 1, + anon_sym_CARET_CARET, + ACTIONS(345), 1, + anon_sym_LPAREN, + ACTIONS(369), 1, + anon_sym_COMMA, + ACTIONS(371), 1, + anon_sym_RPAREN_GT, + STATE(172), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(319), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(327), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(273), 18, + ACTIONS(337), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [11163] = 10, + ACTIONS(311), 1, anon_sym_DOT, + ACTIONS(317), 1, + anon_sym_COLON_COLON, + ACTIONS(321), 1, + anon_sym_STAR_STAR, + ACTIONS(323), 1, + anon_sym_STAR, + ACTIONS(325), 1, + anon_sym_SLASH, + ACTIONS(345), 1, + anon_sym_LPAREN, + STATE(172), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(167), 5, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(161), 13, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, anon_sym_GT_EQ, @@ -14458,26 +11295,32 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + [11211] = 8, + ACTIONS(311), 1, + anon_sym_DOT, + ACTIONS(317), 1, + anon_sym_COLON_COLON, + ACTIONS(321), 1, + anon_sym_STAR_STAR, + ACTIONS(345), 1, anon_sym_LPAREN, - [15138] = 3, + STATE(172), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(279), 6, + ACTIONS(167), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(277), 18, - anon_sym_DOT, + ACTIONS(161), 14, anon_sym_COMMA, anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, @@ -14488,29 +11331,78 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + [11255] = 11, + ACTIONS(311), 1, + anon_sym_DOT, + ACTIONS(317), 1, + anon_sym_COLON_COLON, + ACTIONS(321), 1, + anon_sym_STAR_STAR, + ACTIONS(323), 1, + anon_sym_STAR, + ACTIONS(325), 1, + anon_sym_SLASH, + ACTIONS(345), 1, anon_sym_LPAREN, - [15171] = 3, + STATE(172), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(283), 6, - anon_sym_STAR, + ACTIONS(319), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(167), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(281), 18, - anon_sym_DOT, + ACTIONS(161), 11, anon_sym_COMMA, anon_sym_RPAREN_GT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + [11305] = 12, + ACTIONS(311), 1, + anon_sym_DOT, + ACTIONS(317), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(321), 1, anon_sym_STAR_STAR, + ACTIONS(323), 1, + anon_sym_STAR, + ACTIONS(325), 1, anon_sym_SLASH, + ACTIONS(345), 1, + anon_sym_LPAREN, + STATE(172), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(319), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(327), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(167), 5, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(161), 9, + anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -14518,111 +11410,112 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [15204] = 19, - ACTIONS(169), 1, + [11357] = 20, + ACTIONS(41), 1, + anon_sym_RBRACK, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(285), 1, - anon_sym_then, - ACTIONS(399), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(401), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(403), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(411), 1, + ACTIONS(205), 1, anon_sym_AMP, - ACTIONS(413), 1, + ACTIONS(207), 1, anon_sym_CARET, - ACTIONS(415), 1, + ACTIONS(209), 1, anon_sym_PIPE, - ACTIONS(421), 1, + ACTIONS(215), 1, anon_sym_AMP_AMP, - ACTIONS(423), 1, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, - ACTIONS(425), 1, + ACTIONS(221), 1, anon_sym_CARET_CARET, - STATE(163), 1, + ACTIONS(347), 1, + anon_sym_COMMA, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(409), 2, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(417), 2, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(419), 4, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15269] = 19, - ACTIONS(169), 1, + [11425] = 19, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(297), 1, - anon_sym_then, - ACTIONS(399), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(401), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(403), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(411), 1, + ACTIONS(205), 1, anon_sym_AMP, - ACTIONS(413), 1, + ACTIONS(207), 1, anon_sym_CARET, - ACTIONS(415), 1, + ACTIONS(209), 1, anon_sym_PIPE, - ACTIONS(421), 1, + ACTIONS(215), 1, anon_sym_AMP_AMP, - ACTIONS(423), 1, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, - ACTIONS(425), 1, + ACTIONS(221), 1, anon_sym_CARET_CARET, - STATE(163), 1, + ACTIONS(373), 1, + anon_sym_else, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(409), 2, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(417), 2, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(419), 4, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15334] = 3, + [11490] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(311), 6, + ACTIONS(285), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(309), 18, + ACTIONS(283), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -14641,18 +11534,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [15367] = 3, + [11523] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(315), 6, + ACTIONS(289), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(313), 18, + ACTIONS(287), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -14671,18 +11564,18 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [15400] = 3, + [11556] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 6, + ACTIONS(247), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(189), 18, + ACTIONS(245), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -14701,48 +11594,64 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [15433] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(195), 6, + [11589] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(377), 1, + anon_sym_STAR_STAR, + ACTIONS(379), 1, anon_sym_STAR, + ACTIONS(381), 1, + anon_sym_SLASH, + ACTIONS(385), 1, anon_sym_AMP, + ACTIONS(387), 1, anon_sym_PIPE, + ACTIONS(389), 1, anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(193), 18, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(395), 1, + anon_sym_AMP_AMP, + ACTIONS(397), 1, + anon_sym_PIPE_PIPE, + ACTIONS(399), 1, + anon_sym_CARET_CARET, + ACTIONS(401), 1, + anon_sym_then, + STATE(90), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(383), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(391), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(393), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [15466] = 3, + [11654] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(199), 6, + ACTIONS(185), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(197), 18, + ACTIONS(183), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -14761,156 +11670,64 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [15499] = 19, - ACTIONS(169), 1, + [11687] = 19, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - ACTIONS(427), 1, - ts_builtin_sym_end, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(237), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15564] = 19, ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - ACTIONS(429), 1, - anon_sym_COMMA, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(219), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(237), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15629] = 19, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(339), 1, - anon_sym_COLON_COLON, - ACTIONS(343), 1, + ACTIONS(267), 1, + anon_sym_then, + ACTIONS(377), 1, anon_sym_STAR_STAR, - ACTIONS(345), 1, + ACTIONS(379), 1, anon_sym_STAR, - ACTIONS(347), 1, + ACTIONS(381), 1, anon_sym_SLASH, - ACTIONS(351), 1, + ACTIONS(385), 1, anon_sym_AMP, - ACTIONS(353), 1, + ACTIONS(387), 1, anon_sym_PIPE, - ACTIONS(355), 1, + ACTIONS(389), 1, anon_sym_CARET, - ACTIONS(361), 1, + ACTIONS(395), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, + ACTIONS(397), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, + ACTIONS(399), 1, anon_sym_CARET_CARET, - ACTIONS(367), 1, - anon_sym_LPAREN, - ACTIONS(431), 1, - anon_sym_RPAREN_GT, - STATE(252), 1, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(341), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(349), 2, + ACTIONS(383), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, + ACTIONS(391), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(359), 4, + ACTIONS(393), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15694] = 3, + [11752] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(303), 6, + ACTIONS(181), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(301), 18, + ACTIONS(179), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -14929,94 +11746,64 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [15727] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(215), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(213), 18, + [11785] = 19, + ACTIONS(163), 1, anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(165), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [15760] = 19, ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(229), 1, + ACTIONS(205), 1, anon_sym_AMP, - ACTIONS(231), 1, + ACTIONS(207), 1, anon_sym_CARET, - ACTIONS(233), 1, + ACTIONS(209), 1, anon_sym_PIPE, - ACTIONS(239), 1, + ACTIONS(215), 1, anon_sym_AMP_AMP, - ACTIONS(241), 1, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, - ACTIONS(245), 1, + ACTIONS(221), 1, anon_sym_CARET_CARET, - ACTIONS(369), 1, - anon_sym_COMMA, - STATE(163), 1, + ACTIONS(403), 1, + anon_sym_RPAREN, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(237), 4, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15825] = 3, + [11850] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(267), 6, + ACTIONS(199), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(265), 18, + ACTIONS(197), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -15035,396 +11822,253 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [15858] = 19, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(399), 1, - anon_sym_STAR_STAR, - ACTIONS(401), 1, - anon_sym_STAR, - ACTIONS(403), 1, - anon_sym_SLASH, - ACTIONS(411), 1, - anon_sym_AMP, - ACTIONS(413), 1, - anon_sym_CARET, - ACTIONS(415), 1, - anon_sym_PIPE, - ACTIONS(421), 1, - anon_sym_AMP_AMP, - ACTIONS(423), 1, - anon_sym_PIPE_PIPE, - ACTIONS(425), 1, - anon_sym_CARET_CARET, - ACTIONS(433), 1, - anon_sym_then, - STATE(163), 1, - sym_dictionary_construction, + [11883] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(409), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(417), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(419), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [15923] = 19, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(289), 1, - anon_sym_then, - ACTIONS(399), 1, - anon_sym_STAR_STAR, - ACTIONS(401), 1, + ACTIONS(297), 6, anon_sym_STAR, - ACTIONS(403), 1, - anon_sym_SLASH, - ACTIONS(411), 1, anon_sym_AMP, - ACTIONS(413), 1, - anon_sym_CARET, - ACTIONS(415), 1, anon_sym_PIPE, - ACTIONS(421), 1, - anon_sym_AMP_AMP, - ACTIONS(423), 1, - anon_sym_PIPE_PIPE, - ACTIONS(425), 1, - anon_sym_CARET_CARET, - STATE(163), 1, - sym_dictionary_construction, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(407), 2, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(295), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(409), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(417), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(419), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [15988] = 19, - ACTIONS(169), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [11916] = 19, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(229), 1, + ACTIONS(205), 1, anon_sym_AMP, - ACTIONS(231), 1, + ACTIONS(207), 1, anon_sym_CARET, - ACTIONS(233), 1, + ACTIONS(209), 1, anon_sym_PIPE, - ACTIONS(239), 1, + ACTIONS(215), 1, anon_sym_AMP_AMP, - ACTIONS(241), 1, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, - ACTIONS(245), 1, + ACTIONS(221), 1, anon_sym_CARET_CARET, - ACTIONS(435), 1, - anon_sym_RPAREN, - STATE(163), 1, + ACTIONS(405), 1, + anon_sym_COLON, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + ACTIONS(203), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(237), 4, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16053] = 19, - ACTIONS(169), 1, - anon_sym_DOT, - ACTIONS(171), 1, - anon_sym_COLON_COLON, - ACTIONS(175), 1, - anon_sym_LPAREN, - ACTIONS(221), 1, - anon_sym_STAR_STAR, - ACTIONS(223), 1, - anon_sym_STAR, - ACTIONS(225), 1, - anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - ACTIONS(437), 1, - anon_sym_COLON, - STATE(163), 1, - sym_dictionary_construction, + [11981] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(189), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(187), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + anon_sym_STAR_STAR, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16118] = 19, - ACTIONS(169), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_LPAREN, + [12014] = 10, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(377), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(379), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(381), 1, anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - ACTIONS(439), 1, - anon_sym_else, - STATE(163), 1, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(167), 5, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(161), 12, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(237), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16183] = 19, - ACTIONS(333), 1, - anon_sym_DOT, - ACTIONS(339), 1, - anon_sym_COLON_COLON, - ACTIONS(343), 1, - anon_sym_STAR_STAR, - ACTIONS(345), 1, - anon_sym_STAR, - ACTIONS(347), 1, - anon_sym_SLASH, - ACTIONS(351), 1, - anon_sym_AMP, - ACTIONS(353), 1, - anon_sym_PIPE, - ACTIONS(355), 1, - anon_sym_CARET, - ACTIONS(361), 1, anon_sym_AMP_AMP, - ACTIONS(363), 1, anon_sym_PIPE_PIPE, - ACTIONS(365), 1, anon_sym_CARET_CARET, - ACTIONS(367), 1, + anon_sym_then, + [12061] = 8, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(441), 1, - anon_sym_RPAREN_GT, - STATE(252), 1, + ACTIONS(377), 1, + anon_sym_STAR_STAR, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(341), 2, + ACTIONS(167), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(161), 13, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(349), 2, + anon_sym_SLASH, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(357), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(359), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16248] = 19, - ACTIONS(169), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + [12104] = 11, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(377), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(379), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(381), 1, anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - ACTIONS(443), 1, - anon_sym_COLON, - STATE(163), 1, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, - anon_sym_LT_LT, - anon_sym_GT_GT, - ACTIONS(235), 2, + ACTIONS(167), 5, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(237), 4, + ACTIONS(161), 10, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16313] = 19, - ACTIONS(169), 1, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + [12153] = 12, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(377), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(379), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(381), 1, anon_sym_SLASH, - ACTIONS(229), 1, - anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, - anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - ACTIONS(445), 1, - anon_sym_else, - STATE(163), 1, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + ACTIONS(383), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(237), 4, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - [16378] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(319), 6, - anon_sym_STAR, + ACTIONS(167), 5, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(317), 18, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_LT_LT, - anon_sym_GT_GT, + ACTIONS(161), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -15432,75 +12076,80 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [16411] = 19, - ACTIONS(169), 1, + anon_sym_then, + [12204] = 14, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(293), 1, - anon_sym_then, - ACTIONS(399), 1, + ACTIONS(377), 1, anon_sym_STAR_STAR, - ACTIONS(401), 1, + ACTIONS(379), 1, anon_sym_STAR, - ACTIONS(403), 1, + ACTIONS(381), 1, anon_sym_SLASH, - ACTIONS(411), 1, + ACTIONS(385), 1, anon_sym_AMP, - ACTIONS(413), 1, + ACTIONS(389), 1, anon_sym_CARET, - ACTIONS(415), 1, - anon_sym_PIPE, - ACTIONS(421), 1, - anon_sym_AMP_AMP, - ACTIONS(423), 1, - anon_sym_PIPE_PIPE, - ACTIONS(425), 1, - anon_sym_CARET_CARET, - STATE(163), 1, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(409), 2, + ACTIONS(383), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(417), 2, + ACTIONS(167), 3, + anon_sym_PIPE, anon_sym_GT, anon_sym_LT, - ACTIONS(419), 4, + ACTIONS(161), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16476] = 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + [12259] = 13, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(377), 1, + anon_sym_STAR_STAR, + ACTIONS(379), 1, + anon_sym_STAR, + ACTIONS(381), 1, + anon_sym_SLASH, + ACTIONS(385), 1, + anon_sym_AMP, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(307), 6, - anon_sym_STAR, - anon_sym_AMP, - anon_sym_PIPE, - anon_sym_CARET, - anon_sym_GT, - anon_sym_LT, - ACTIONS(305), 18, - anon_sym_DOT, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(383), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(167), 4, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(161), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -15508,29 +12157,41 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, + anon_sym_then, + [12312] = 15, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, anon_sym_LPAREN, - [16509] = 4, - ACTIONS(447), 1, - anon_sym_DASH_GT, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(215), 7, - anon_sym_DASH, + ACTIONS(377), 1, + anon_sym_STAR_STAR, + ACTIONS(379), 1, anon_sym_STAR, + ACTIONS(381), 1, + anon_sym_SLASH, + ACTIONS(385), 1, anon_sym_AMP, + ACTIONS(387), 1, anon_sym_PIPE, + ACTIONS(389), 1, anon_sym_CARET, + STATE(90), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(167), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(213), 16, - anon_sym_DOT, - anon_sym_COLON_COLON, + ACTIONS(375), 2, + anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(383), 2, anon_sym_LT_LT, anon_sym_GT_GT, + ACTIONS(161), 8, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -15539,157 +12200,150 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_then, - anon_sym_LPAREN, - [16544] = 19, - ACTIONS(169), 1, + [12369] = 16, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(377), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(379), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(381), 1, anon_sym_SLASH, - ACTIONS(229), 1, + ACTIONS(385), 1, anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, + ACTIONS(387), 1, anon_sym_PIPE, - ACTIONS(239), 1, - anon_sym_AMP_AMP, - ACTIONS(241), 1, - anon_sym_PIPE_PIPE, - ACTIONS(245), 1, - anon_sym_CARET_CARET, - ACTIONS(449), 1, - anon_sym_COMMA, - STATE(163), 1, + ACTIONS(389), 1, + anon_sym_CARET, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + ACTIONS(383), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, + ACTIONS(391), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(237), 4, + ACTIONS(161), 4, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + ACTIONS(393), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16609] = 19, - ACTIONS(169), 1, + [12428] = 17, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(399), 1, + ACTIONS(377), 1, anon_sym_STAR_STAR, - ACTIONS(401), 1, + ACTIONS(379), 1, anon_sym_STAR, - ACTIONS(403), 1, + ACTIONS(381), 1, anon_sym_SLASH, - ACTIONS(411), 1, + ACTIONS(385), 1, anon_sym_AMP, - ACTIONS(413), 1, - anon_sym_CARET, - ACTIONS(415), 1, + ACTIONS(387), 1, anon_sym_PIPE, - ACTIONS(421), 1, + ACTIONS(389), 1, + anon_sym_CARET, + ACTIONS(395), 1, anon_sym_AMP_AMP, - ACTIONS(423), 1, - anon_sym_PIPE_PIPE, - ACTIONS(425), 1, - anon_sym_CARET_CARET, - ACTIONS(451), 1, - anon_sym_then, - STATE(163), 1, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(409), 2, + ACTIONS(383), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(417), 2, + ACTIONS(391), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(419), 4, + ACTIONS(161), 3, + anon_sym_PIPE_PIPE, + anon_sym_CARET_CARET, + anon_sym_then, + ACTIONS(393), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16674] = 19, - ACTIONS(169), 1, + [12489] = 18, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(399), 1, + ACTIONS(377), 1, anon_sym_STAR_STAR, - ACTIONS(401), 1, + ACTIONS(379), 1, anon_sym_STAR, - ACTIONS(403), 1, + ACTIONS(381), 1, anon_sym_SLASH, - ACTIONS(411), 1, + ACTIONS(385), 1, anon_sym_AMP, - ACTIONS(413), 1, - anon_sym_CARET, - ACTIONS(415), 1, + ACTIONS(387), 1, anon_sym_PIPE, - ACTIONS(421), 1, + ACTIONS(389), 1, + anon_sym_CARET, + ACTIONS(395), 1, anon_sym_AMP_AMP, - ACTIONS(423), 1, + ACTIONS(397), 1, anon_sym_PIPE_PIPE, - ACTIONS(425), 1, - anon_sym_CARET_CARET, - ACTIONS(453), 1, - anon_sym_then, - STATE(163), 1, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(407), 2, + ACTIONS(161), 2, + anon_sym_CARET_CARET, + anon_sym_then, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(409), 2, + ACTIONS(383), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(417), 2, + ACTIONS(391), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(419), 4, + ACTIONS(393), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16739] = 3, + [12552] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(263), 6, + ACTIONS(149), 6, anon_sym_STAR, anon_sym_AMP, anon_sym_PIPE, anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(261), 18, + ACTIONS(147), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -15708,66 +12362,64 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [16772] = 19, - ACTIONS(169), 1, + [12585] = 19, + ACTIONS(163), 1, anon_sym_DOT, - ACTIONS(171), 1, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(175), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(221), 1, + ACTIONS(219), 1, + anon_sym_then, + ACTIONS(377), 1, anon_sym_STAR_STAR, - ACTIONS(223), 1, + ACTIONS(379), 1, anon_sym_STAR, - ACTIONS(225), 1, + ACTIONS(381), 1, anon_sym_SLASH, - ACTIONS(229), 1, + ACTIONS(385), 1, anon_sym_AMP, - ACTIONS(231), 1, - anon_sym_CARET, - ACTIONS(233), 1, + ACTIONS(387), 1, anon_sym_PIPE, - ACTIONS(239), 1, + ACTIONS(389), 1, + anon_sym_CARET, + ACTIONS(395), 1, anon_sym_AMP_AMP, - ACTIONS(241), 1, + ACTIONS(397), 1, anon_sym_PIPE_PIPE, - ACTIONS(245), 1, + ACTIONS(399), 1, anon_sym_CARET_CARET, - ACTIONS(455), 1, - anon_sym_RPAREN, - STATE(163), 1, + STATE(90), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(219), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(227), 2, + ACTIONS(383), 2, anon_sym_LT_LT, anon_sym_GT_GT, - ACTIONS(235), 2, + ACTIONS(391), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(237), 4, + ACTIONS(393), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [16837] = 4, + [12650] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(127), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - ACTIONS(125), 4, - sym_identifier, + ACTIONS(227), 6, anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(123), 17, - sym_unit_quote, + ACTIONS(225), 18, anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, @@ -15776,6 +12428,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -15784,74 +12438,65 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [16871] = 5, - STATE(276), 1, - sym__unit, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(457), 2, - sym_identifier, - sym_unit_quote, - ACTIONS(135), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(129), 15, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + [12683] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(205), 1, + anon_sym_AMP, + ACTIONS(207), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, anon_sym_AMP_AMP, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, + ACTIONS(221), 1, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [16905] = 4, - ACTIONS(459), 1, - anon_sym_DOT, + ACTIONS(407), 1, + anon_sym_else, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(143), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(141), 17, - sym_identifier, - sym_unit_quote, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(211), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [16937] = 3, + [12748] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(125), 3, + ACTIONS(235), 6, anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(123), 17, - sym_identifier, - sym_unit_quote, + ACTIONS(233), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -15859,6 +12504,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -15867,17 +12514,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [16966] = 3, + [12781] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(139), 3, + ACTIONS(239), 6, anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(137), 17, - sym_identifier, - sym_unit_quote, + ACTIONS(237), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -15885,6 +12534,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -15893,96 +12544,74 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [16995] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(463), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(461), 16, - anon_sym_COMMA, + [12814] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(205), 1, + anon_sym_AMP, + ACTIONS(207), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, anon_sym_AMP_AMP, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, + ACTIONS(221), 1, anon_sym_CARET_CARET, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [17023] = 3, + ACTIONS(409), 1, + anon_sym_SEMI, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(467), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(465), 16, - anon_sym_COMMA, - anon_sym_COLON_COLON, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [17051] = 3, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(471), 3, - anon_sym_STAR, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(469), 16, - anon_sym_COMMA, - anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [17079] = 3, + anon_sym_BANG_EQ, + [12879] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(475), 3, + ACTIONS(251), 6, anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(473), 16, + ACTIONS(249), 18, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -15991,23 +12620,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [17107] = 3, + [12912] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(479), 3, + ACTIONS(257), 6, anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(477), 16, + ACTIONS(255), 18, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -16016,74 +12650,120 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [17135] = 4, - ACTIONS(483), 1, + [12945] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, anon_sym_COLON_COLON, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(259), 1, + anon_sym_then, + ACTIONS(377), 1, + anon_sym_STAR_STAR, + ACTIONS(379), 1, + anon_sym_STAR, + ACTIONS(381), 1, + anon_sym_SLASH, + ACTIONS(385), 1, + anon_sym_AMP, + ACTIONS(387), 1, + anon_sym_PIPE, + ACTIONS(389), 1, + anon_sym_CARET, + ACTIONS(395), 1, + anon_sym_AMP_AMP, + ACTIONS(397), 1, + anon_sym_PIPE_PIPE, + ACTIONS(399), 1, + anon_sym_CARET_CARET, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(485), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(481), 15, - anon_sym_COMMA, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, + ACTIONS(383), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(391), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(393), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + [13010] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(263), 1, + anon_sym_then, + ACTIONS(377), 1, + anon_sym_STAR_STAR, + ACTIONS(379), 1, + anon_sym_STAR, + ACTIONS(381), 1, + anon_sym_SLASH, + ACTIONS(385), 1, + anon_sym_AMP, + ACTIONS(387), 1, + anon_sym_PIPE, + ACTIONS(389), 1, + anon_sym_CARET, + ACTIONS(395), 1, anon_sym_AMP_AMP, + ACTIONS(397), 1, anon_sym_PIPE_PIPE, + ACTIONS(399), 1, anon_sym_CARET_CARET, - anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [17165] = 3, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(487), 7, - sym_identifier, - sym_self, - aux_sym_base_ten_token1, - sym_true, - sym_false, - anon_sym_if, - anon_sym_let, - ACTIONS(82), 12, - sym_string, - aux_sym_octal_token1, - aux_sym_hex_token1, - aux_sym_binary_token1, - anon_sym_LT_LPAREN, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_BANG, - anon_sym_LPAREN, - anon_sym_LBRACK, - anon_sym_RBRACK, - anon_sym_LT_LT_LT, - [17193] = 3, + ACTIONS(383), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(391), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(393), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13075] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(491), 3, + ACTIONS(273), 6, anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(489), 16, + ACTIONS(271), 18, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_RPAREN_GT, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -16092,17 +12772,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [17221] = 3, + [13108] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(207), 3, + ACTIONS(277), 6, anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(205), 15, + ACTIONS(275), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -16110,6 +12792,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -16118,15 +12802,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [17248] = 3, + [13141] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(195), 3, + ACTIONS(281), 6, anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(193), 15, + ACTIONS(279), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -16134,6 +12822,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -16142,15 +12832,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [17275] = 3, + [13174] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(199), 3, + ACTIONS(177), 6, anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(197), 15, + ACTIONS(175), 18, + anon_sym_DOT, anon_sym_COMMA, anon_sym_RPAREN_GT, anon_sym_COLON_COLON, @@ -16158,6 +12852,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -16166,255 +12862,442 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, anon_sym_LPAREN, - [17302] = 3, + [13207] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, + anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, + anon_sym_SLASH, + ACTIONS(205), 1, + anon_sym_AMP, + ACTIONS(207), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, + anon_sym_AMP_AMP, + ACTIONS(217), 1, + anon_sym_PIPE_PIPE, + ACTIONS(221), 1, + anon_sym_CARET_CARET, + ACTIONS(347), 1, + anon_sym_COMMA, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(191), 3, - anon_sym_STAR, + ACTIONS(201), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(189), 15, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(213), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13272] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, anon_sym_COLON_COLON, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, anon_sym_SLASH, + ACTIONS(205), 1, + anon_sym_AMP, + ACTIONS(207), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, + anon_sym_AMP_AMP, + ACTIONS(217), 1, + anon_sym_PIPE_PIPE, + ACTIONS(221), 1, + anon_sym_CARET_CARET, + ACTIONS(411), 1, + ts_builtin_sym_end, + STATE(90), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(201), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(211), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, + [13337] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, + anon_sym_COLON_COLON, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(291), 1, + anon_sym_then, + ACTIONS(377), 1, + anon_sym_STAR_STAR, + ACTIONS(379), 1, + anon_sym_STAR, + ACTIONS(381), 1, + anon_sym_SLASH, + ACTIONS(385), 1, + anon_sym_AMP, + ACTIONS(387), 1, + anon_sym_PIPE, + ACTIONS(389), 1, + anon_sym_CARET, + ACTIONS(395), 1, anon_sym_AMP_AMP, + ACTIONS(397), 1, anon_sym_PIPE_PIPE, + ACTIONS(399), 1, anon_sym_CARET_CARET, - anon_sym_LPAREN, - [17329] = 13, - ACTIONS(483), 1, + STATE(90), 1, + sym_dictionary_construction, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(375), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(383), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(391), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(393), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13402] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(495), 1, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(497), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(499), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(505), 1, + ACTIONS(205), 1, + anon_sym_AMP, + ACTIONS(207), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, anon_sym_AMP_AMP, - ACTIONS(507), 1, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, - ACTIONS(509), 1, + ACTIONS(221), 1, anon_sym_CARET_CARET, - ACTIONS(511), 1, - anon_sym_LPAREN, - STATE(125), 1, - sym__formula_relation, + ACTIONS(413), 1, + anon_sym_RPAREN, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(493), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(501), 2, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(503), 4, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [17375] = 13, - ACTIONS(483), 1, + [13467] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(495), 1, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(497), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(499), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(505), 1, + ACTIONS(205), 1, + anon_sym_AMP, + ACTIONS(207), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, anon_sym_AMP_AMP, - ACTIONS(507), 1, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, - ACTIONS(509), 1, + ACTIONS(221), 1, anon_sym_CARET_CARET, - ACTIONS(511), 1, - anon_sym_LPAREN, - STATE(92), 1, - sym__formula_relation, + ACTIONS(415), 1, + anon_sym_COLON, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(493), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(513), 2, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(515), 4, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [17421] = 5, - ACTIONS(483), 1, + [13532] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(511), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(519), 3, - anon_sym_STAR, - anon_sym_GT, - anon_sym_LT, - ACTIONS(517), 11, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(191), 1, anon_sym_STAR_STAR, + ACTIONS(193), 1, + anon_sym_STAR, + ACTIONS(195), 1, anon_sym_SLASH, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, + ACTIONS(205), 1, + anon_sym_AMP, + ACTIONS(207), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, anon_sym_AMP_AMP, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, + ACTIONS(221), 1, anon_sym_CARET_CARET, - [17450] = 8, - ACTIONS(483), 1, - anon_sym_COLON_COLON, - ACTIONS(495), 1, - anon_sym_STAR_STAR, - ACTIONS(497), 1, - anon_sym_STAR, - ACTIONS(499), 1, - anon_sym_SLASH, - ACTIONS(511), 1, - anon_sym_LPAREN, + ACTIONS(417), 1, + anon_sym_else, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(519), 2, - anon_sym_GT, - anon_sym_LT, - ACTIONS(517), 9, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(211), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [17485] = 11, - ACTIONS(483), 1, + [13597] = 19, + ACTIONS(311), 1, + anon_sym_DOT, + ACTIONS(317), 1, anon_sym_COLON_COLON, - ACTIONS(495), 1, + ACTIONS(321), 1, anon_sym_STAR_STAR, - ACTIONS(497), 1, + ACTIONS(323), 1, anon_sym_STAR, - ACTIONS(499), 1, + ACTIONS(325), 1, anon_sym_SLASH, - ACTIONS(505), 1, + ACTIONS(329), 1, + anon_sym_AMP, + ACTIONS(331), 1, + anon_sym_PIPE, + ACTIONS(333), 1, + anon_sym_CARET, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(507), 1, + ACTIONS(341), 1, anon_sym_PIPE_PIPE, - ACTIONS(511), 1, + ACTIONS(343), 1, + anon_sym_CARET_CARET, + ACTIONS(345), 1, anon_sym_LPAREN, + ACTIONS(419), 1, + anon_sym_RPAREN_GT, + STATE(172), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(493), 2, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(519), 2, + ACTIONS(327), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(517), 5, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_CARET_CARET, - [17526] = 12, - ACTIONS(483), 1, + [13662] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(495), 1, + ACTIONS(169), 1, + anon_sym_LPAREN, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(497), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(499), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(505), 1, + ACTIONS(205), 1, + anon_sym_AMP, + ACTIONS(207), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, anon_sym_AMP_AMP, - ACTIONS(507), 1, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, - ACTIONS(509), 1, + ACTIONS(221), 1, anon_sym_CARET_CARET, - ACTIONS(511), 1, - anon_sym_LPAREN, + ACTIONS(421), 1, + anon_sym_COLON, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(493), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(521), 2, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(211), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(523), 4, + ACTIONS(213), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - [17569] = 10, - ACTIONS(483), 1, + [13727] = 19, + ACTIONS(311), 1, + anon_sym_DOT, + ACTIONS(317), 1, anon_sym_COLON_COLON, - ACTIONS(495), 1, + ACTIONS(321), 1, anon_sym_STAR_STAR, - ACTIONS(497), 1, + ACTIONS(323), 1, anon_sym_STAR, - ACTIONS(499), 1, + ACTIONS(325), 1, anon_sym_SLASH, - ACTIONS(505), 1, + ACTIONS(329), 1, + anon_sym_AMP, + ACTIONS(331), 1, + anon_sym_PIPE, + ACTIONS(333), 1, + anon_sym_CARET, + ACTIONS(339), 1, anon_sym_AMP_AMP, - ACTIONS(511), 1, + ACTIONS(341), 1, + anon_sym_PIPE_PIPE, + ACTIONS(343), 1, + anon_sym_CARET_CARET, + ACTIONS(345), 1, anon_sym_LPAREN, + ACTIONS(423), 1, + anon_sym_RPAREN_GT, + STATE(172), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(493), 2, + ACTIONS(319), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(519), 2, + ACTIONS(327), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(335), 2, anon_sym_GT, anon_sym_LT, - ACTIONS(517), 6, + ACTIONS(337), 4, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, anon_sym_BANG_EQ, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [17608] = 6, - ACTIONS(483), 1, - anon_sym_COLON_COLON, - ACTIONS(495), 1, - anon_sym_STAR_STAR, - ACTIONS(511), 1, - anon_sym_LPAREN, + [13792] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(519), 3, + ACTIONS(243), 6, anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(517), 10, + ACTIONS(241), 18, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, + anon_sym_STAR_STAR, anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, anon_sym_GT_EQ, anon_sym_EQ_EQ, anon_sym_LT_EQ, @@ -16422,1360 +13305,1489 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - [17639] = 9, - ACTIONS(483), 1, - anon_sym_COLON_COLON, - ACTIONS(495), 1, - anon_sym_STAR_STAR, - ACTIONS(497), 1, - anon_sym_STAR, - ACTIONS(499), 1, - anon_sym_SLASH, - ACTIONS(511), 1, anon_sym_LPAREN, + [13825] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(493), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(519), 2, + ACTIONS(231), 6, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, anon_sym_GT, anon_sym_LT, - ACTIONS(517), 7, - anon_sym_GT_EQ, - anon_sym_EQ_EQ, - anon_sym_LT_EQ, - anon_sym_BANG_EQ, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [17676] = 5, - ACTIONS(483), 1, - anon_sym_COLON_COLON, - ACTIONS(519), 1, - anon_sym_STAR, - ACTIONS(525), 1, - anon_sym_LPAREN, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(517), 10, + ACTIONS(229), 18, + anon_sym_DOT, anon_sym_COMMA, + anon_sym_RPAREN_GT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, anon_sym_STAR_STAR, anon_sym_SLASH, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [17702] = 6, - ACTIONS(483), 1, - anon_sym_COLON_COLON, - ACTIONS(519), 1, - anon_sym_STAR, - ACTIONS(525), 1, anon_sym_LPAREN, - ACTIONS(527), 1, - anon_sym_STAR_STAR, + [13858] = 4, + ACTIONS(425), 1, + anon_sym_DASH_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(517), 9, - anon_sym_COMMA, + ACTIONS(243), 7, anon_sym_DASH, - anon_sym_PLUS, - anon_sym_SLASH, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [17730] = 8, - ACTIONS(483), 1, + anon_sym_STAR, + anon_sym_AMP, + anon_sym_PIPE, + anon_sym_CARET, + anon_sym_GT, + anon_sym_LT, + ACTIONS(241), 16, + anon_sym_DOT, anon_sym_COLON_COLON, - ACTIONS(525), 1, - anon_sym_LPAREN, - ACTIONS(527), 1, + anon_sym_PLUS, anon_sym_STAR_STAR, - ACTIONS(531), 1, - anon_sym_STAR, - ACTIONS(533), 1, anon_sym_SLASH, - ACTIONS(3), 2, - sym_comment, - sym__whitespace, - ACTIONS(529), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(517), 6, - anon_sym_COMMA, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, anon_sym_AMP_AMP, anon_sym_PIPE_PIPE, anon_sym_CARET_CARET, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [17762] = 11, - ACTIONS(483), 1, + anon_sym_then, + anon_sym_LPAREN, + [13893] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(525), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(527), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(531), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(533), 1, + ACTIONS(195), 1, anon_sym_SLASH, - ACTIONS(535), 1, + ACTIONS(205), 1, + anon_sym_AMP, + ACTIONS(207), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, anon_sym_AMP_AMP, - ACTIONS(537), 1, + ACTIONS(217), 1, anon_sym_PIPE_PIPE, - ACTIONS(539), 1, + ACTIONS(221), 1, anon_sym_CARET_CARET, + ACTIONS(427), 1, + anon_sym_COMMA, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(529), 2, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(523), 3, - anon_sym_COMMA, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [17800] = 9, - ACTIONS(483), 1, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(211), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(213), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [13958] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(525), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(527), 1, + ACTIONS(377), 1, anon_sym_STAR_STAR, - ACTIONS(531), 1, + ACTIONS(379), 1, anon_sym_STAR, - ACTIONS(533), 1, + ACTIONS(381), 1, anon_sym_SLASH, - ACTIONS(535), 1, + ACTIONS(385), 1, + anon_sym_AMP, + ACTIONS(387), 1, + anon_sym_PIPE, + ACTIONS(389), 1, + anon_sym_CARET, + ACTIONS(395), 1, anon_sym_AMP_AMP, + ACTIONS(397), 1, + anon_sym_PIPE_PIPE, + ACTIONS(399), 1, + anon_sym_CARET_CARET, + ACTIONS(429), 1, + anon_sym_then, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(529), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(517), 5, - anon_sym_COMMA, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [17834] = 10, - ACTIONS(483), 1, + ACTIONS(383), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(391), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(393), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14023] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(525), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(527), 1, + ACTIONS(377), 1, anon_sym_STAR_STAR, - ACTIONS(531), 1, + ACTIONS(379), 1, anon_sym_STAR, - ACTIONS(533), 1, + ACTIONS(381), 1, anon_sym_SLASH, - ACTIONS(535), 1, + ACTIONS(385), 1, + anon_sym_AMP, + ACTIONS(387), 1, + anon_sym_PIPE, + ACTIONS(389), 1, + anon_sym_CARET, + ACTIONS(395), 1, anon_sym_AMP_AMP, - ACTIONS(537), 1, + ACTIONS(397), 1, anon_sym_PIPE_PIPE, + ACTIONS(399), 1, + anon_sym_CARET_CARET, + ACTIONS(431), 1, + anon_sym_then, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(529), 2, + ACTIONS(375), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(517), 4, - anon_sym_COMMA, - anon_sym_CARET_CARET, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [17870] = 7, - ACTIONS(483), 1, + ACTIONS(383), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(391), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(393), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14088] = 19, + ACTIONS(163), 1, + anon_sym_DOT, + ACTIONS(165), 1, anon_sym_COLON_COLON, - ACTIONS(525), 1, + ACTIONS(169), 1, anon_sym_LPAREN, - ACTIONS(527), 1, + ACTIONS(191), 1, anon_sym_STAR_STAR, - ACTIONS(531), 1, + ACTIONS(193), 1, anon_sym_STAR, - ACTIONS(533), 1, + ACTIONS(195), 1, anon_sym_SLASH, + ACTIONS(205), 1, + anon_sym_AMP, + ACTIONS(207), 1, + anon_sym_CARET, + ACTIONS(209), 1, + anon_sym_PIPE, + ACTIONS(215), 1, + anon_sym_AMP_AMP, + ACTIONS(217), 1, + anon_sym_PIPE_PIPE, + ACTIONS(221), 1, + anon_sym_CARET_CARET, + ACTIONS(433), 1, + anon_sym_COMMA, + STATE(90), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(517), 8, - anon_sym_COMMA, + ACTIONS(201), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_RPAREN, - anon_sym_GT_GT_GT, - [17900] = 3, - ACTIONS(467), 1, - anon_sym_STAR, + ACTIONS(203), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(211), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(213), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14153] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(465), 11, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(435), 7, + sym_identifier, + sym_self, + aux_sym_base_ten_token1, + sym_true, + sym_false, + anon_sym_if, + anon_sym_let, + ACTIONS(88), 12, + sym_string, + aux_sym_octal_token1, + aux_sym_hex_token1, + aux_sym_binary_token1, + anon_sym_LT_LPAREN, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, + anon_sym_BANG, anon_sym_LPAREN, - [17921] = 3, - ACTIONS(463), 1, - anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_LT_LT_LT, + [14181] = 5, + STATE(245), 1, + sym__unit, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(461), 11, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(129), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(437), 2, + sym_identifier, + sym_unit_quote, + ACTIONS(123), 9, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [17942] = 3, - ACTIONS(471), 1, anon_sym_STAR, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14208] = 4, + ACTIONS(439), 1, + anon_sym_DOT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(469), 11, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(139), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(137), 11, + sym_identifier, + sym_unit_quote, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [17963] = 8, - ACTIONS(541), 1, - anon_sym_COLON_COLON, - ACTIONS(545), 1, - anon_sym_STAR_STAR, - ACTIONS(547), 1, anon_sym_STAR, - ACTIONS(549), 1, anon_sym_SLASH, - ACTIONS(551), 1, - anon_sym_LPAREN, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14233] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(543), 2, + ACTIONS(133), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(131), 12, + sym_identifier, + sym_unit_quote, + anon_sym_DOT, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(517), 5, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [17994] = 9, - ACTIONS(541), 1, - anon_sym_COLON_COLON, - ACTIONS(545), 1, - anon_sym_STAR_STAR, - ACTIONS(547), 1, anon_sym_STAR, - ACTIONS(549), 1, anon_sym_SLASH, - ACTIONS(551), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14256] = 9, + ACTIONS(441), 1, + sym_identifier, + ACTIONS(443), 1, + aux_sym_base_ten_token1, + ACTIONS(447), 1, anon_sym_LPAREN, - ACTIONS(553), 1, - anon_sym_AMP_AMP, + STATE(78), 1, + sym__float, + STATE(80), 1, + sym_number, + STATE(249), 1, + sym_constraint_set_expression, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(543), 2, + ACTIONS(445), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(517), 4, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [18027] = 10, - ACTIONS(541), 1, - anon_sym_COLON_COLON, - ACTIONS(545), 1, - anon_sym_STAR_STAR, - ACTIONS(547), 1, - anon_sym_STAR, - ACTIONS(549), 1, - anon_sym_SLASH, - ACTIONS(551), 1, + STATE(233), 5, + sym_scalar, + sym_constraint_set_parenthesis, + sym_constraint_set_unary_expression, + sym_constraint_set_binary_expression, + sym_constraint_set_method_call, + [14290] = 9, + ACTIONS(441), 1, + sym_identifier, + ACTIONS(443), 1, + aux_sym_base_ten_token1, + ACTIONS(447), 1, anon_sym_LPAREN, - ACTIONS(553), 1, - anon_sym_AMP_AMP, - ACTIONS(555), 1, - anon_sym_PIPE_PIPE, + STATE(78), 1, + sym__float, + STATE(80), 1, + sym_number, + STATE(254), 1, + sym_constraint_set_expression, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(543), 2, + ACTIONS(445), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(517), 3, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_CARET_CARET, - [18062] = 3, - ACTIONS(491), 1, - anon_sym_STAR, + STATE(233), 5, + sym_scalar, + sym_constraint_set_parenthesis, + sym_constraint_set_unary_expression, + sym_constraint_set_binary_expression, + sym_constraint_set_method_call, + [14324] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(489), 11, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(451), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(449), 11, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, + anon_sym_STAR, anon_sym_SLASH, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [14346] = 9, + ACTIONS(441), 1, + sym_identifier, + ACTIONS(447), 1, anon_sym_LPAREN, - [18083] = 3, - ACTIONS(475), 1, - anon_sym_STAR, + ACTIONS(453), 1, + aux_sym_base_ten_token1, + STATE(222), 1, + sym__float, + STATE(223), 1, + sym_number, + STATE(244), 1, + sym_constraint_set_expression, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(473), 11, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - anon_sym_COLON_COLON, + ACTIONS(455), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, + STATE(233), 5, + sym_scalar, + sym_constraint_set_parenthesis, + sym_constraint_set_unary_expression, + sym_constraint_set_binary_expression, + sym_constraint_set_method_call, + [14380] = 9, + ACTIONS(441), 1, + sym_identifier, + ACTIONS(443), 1, + aux_sym_base_ten_token1, + ACTIONS(447), 1, anon_sym_LPAREN, - [18104] = 12, - ACTIONS(541), 1, - anon_sym_COLON_COLON, - ACTIONS(545), 1, - anon_sym_STAR_STAR, - ACTIONS(547), 1, - anon_sym_STAR, - ACTIONS(549), 1, - anon_sym_SLASH, - ACTIONS(551), 1, + STATE(78), 1, + sym__float, + STATE(80), 1, + sym_number, + STATE(231), 1, + sym_constraint_set_expression, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(445), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(233), 5, + sym_scalar, + sym_constraint_set_parenthesis, + sym_constraint_set_unary_expression, + sym_constraint_set_binary_expression, + sym_constraint_set_method_call, + [14414] = 9, + ACTIONS(441), 1, + sym_identifier, + ACTIONS(447), 1, anon_sym_LPAREN, - ACTIONS(553), 1, - anon_sym_AMP_AMP, - ACTIONS(555), 1, - anon_sym_PIPE_PIPE, - ACTIONS(557), 1, - anon_sym_COMMA, - ACTIONS(559), 1, - anon_sym_RPAREN_GT, - ACTIONS(561), 1, - anon_sym_CARET_CARET, + ACTIONS(453), 1, + aux_sym_base_ten_token1, + STATE(222), 1, + sym__float, + STATE(223), 1, + sym_number, + STATE(231), 1, + sym_constraint_set_expression, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(543), 2, + ACTIONS(455), 2, anon_sym_DASH, anon_sym_PLUS, - [18143] = 12, - ACTIONS(541), 1, + STATE(233), 5, + sym_scalar, + sym_constraint_set_parenthesis, + sym_constraint_set_unary_expression, + sym_constraint_set_binary_expression, + sym_constraint_set_method_call, + [14448] = 4, + ACTIONS(457), 1, anon_sym_COLON_COLON, - ACTIONS(545), 1, - anon_sym_STAR_STAR, - ACTIONS(547), 1, - anon_sym_STAR, - ACTIONS(549), 1, - anon_sym_SLASH, - ACTIONS(551), 1, - anon_sym_LPAREN, - ACTIONS(553), 1, - anon_sym_AMP_AMP, - ACTIONS(555), 1, - anon_sym_PIPE_PIPE, - ACTIONS(561), 1, - anon_sym_CARET_CARET, - ACTIONS(563), 1, - anon_sym_COMMA, - ACTIONS(565), 1, - anon_sym_RPAREN_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(543), 2, + ACTIONS(461), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(459), 10, anon_sym_DASH, anon_sym_PLUS, - [18182] = 6, - ACTIONS(519), 1, anon_sym_STAR, - ACTIONS(541), 1, - anon_sym_COLON_COLON, - ACTIONS(545), 1, - anon_sym_STAR_STAR, - ACTIONS(551), 1, + anon_sym_SLASH, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [14472] = 9, + ACTIONS(441), 1, + sym_identifier, + ACTIONS(443), 1, + aux_sym_base_ten_token1, + ACTIONS(447), 1, anon_sym_LPAREN, + STATE(78), 1, + sym__float, + STATE(80), 1, + sym_number, + STATE(247), 1, + sym_constraint_set_expression, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(517), 8, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(445), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_SLASH, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [18209] = 3, - ACTIONS(479), 1, - anon_sym_STAR, + STATE(233), 5, + sym_scalar, + sym_constraint_set_parenthesis, + sym_constraint_set_unary_expression, + sym_constraint_set_binary_expression, + sym_constraint_set_method_call, + [14506] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(477), 11, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(465), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(463), 11, anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [18230] = 7, - ACTIONS(541), 1, - anon_sym_COLON_COLON, - ACTIONS(545), 1, - anon_sym_STAR_STAR, - ACTIONS(547), 1, anon_sym_STAR, - ACTIONS(549), 1, anon_sym_SLASH, - ACTIONS(551), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [14528] = 9, + ACTIONS(441), 1, + sym_identifier, + ACTIONS(447), 1, anon_sym_LPAREN, + ACTIONS(453), 1, + aux_sym_base_ten_token1, + STATE(222), 1, + sym__float, + STATE(223), 1, + sym_number, + STATE(243), 1, + sym_constraint_set_expression, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(517), 7, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(455), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [18259] = 5, - ACTIONS(519), 1, - anon_sym_STAR, - ACTIONS(541), 1, - anon_sym_COLON_COLON, - ACTIONS(551), 1, + STATE(233), 5, + sym_scalar, + sym_constraint_set_parenthesis, + sym_constraint_set_unary_expression, + sym_constraint_set_binary_expression, + sym_constraint_set_method_call, + [14562] = 9, + ACTIONS(441), 1, + sym_identifier, + ACTIONS(443), 1, + aux_sym_base_ten_token1, + ACTIONS(447), 1, anon_sym_LPAREN, + STATE(78), 1, + sym__float, + STATE(80), 1, + sym_number, + STATE(251), 1, + sym_constraint_set_expression, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(517), 9, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(445), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - [18284] = 12, - ACTIONS(541), 1, - anon_sym_COLON_COLON, - ACTIONS(545), 1, - anon_sym_STAR_STAR, - ACTIONS(547), 1, - anon_sym_STAR, - ACTIONS(549), 1, - anon_sym_SLASH, - ACTIONS(551), 1, + STATE(233), 5, + sym_scalar, + sym_constraint_set_parenthesis, + sym_constraint_set_unary_expression, + sym_constraint_set_binary_expression, + sym_constraint_set_method_call, + [14596] = 9, + ACTIONS(441), 1, + sym_identifier, + ACTIONS(447), 1, anon_sym_LPAREN, - ACTIONS(553), 1, - anon_sym_AMP_AMP, - ACTIONS(555), 1, - anon_sym_PIPE_PIPE, - ACTIONS(561), 1, - anon_sym_CARET_CARET, - ACTIONS(567), 1, - anon_sym_COMMA, - ACTIONS(569), 1, - anon_sym_RPAREN_GT, + ACTIONS(453), 1, + aux_sym_base_ten_token1, + STATE(222), 1, + sym__float, + STATE(223), 1, + sym_number, + STATE(246), 1, + sym_constraint_set_expression, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(543), 2, + ACTIONS(455), 2, anon_sym_DASH, anon_sym_PLUS, - [18323] = 11, - ACTIONS(541), 1, + STATE(233), 5, + sym_scalar, + sym_constraint_set_parenthesis, + sym_constraint_set_unary_expression, + sym_constraint_set_binary_expression, + sym_constraint_set_method_call, + [14630] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(469), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(467), 11, anon_sym_COLON_COLON, - ACTIONS(545), 1, - anon_sym_STAR_STAR, - ACTIONS(547), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR, - ACTIONS(549), 1, anon_sym_SLASH, - ACTIONS(551), 1, - anon_sym_LPAREN, - ACTIONS(553), 1, - anon_sym_AMP_AMP, - ACTIONS(555), 1, - anon_sym_PIPE_PIPE, - ACTIONS(561), 1, - anon_sym_CARET_CARET, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [14652] = 3, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(523), 2, - anon_sym_COMMA, - anon_sym_RPAREN_GT, - ACTIONS(543), 2, + ACTIONS(145), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(143), 11, + sym_identifier, + sym_unit_quote, + anon_sym_COLON_COLON, anon_sym_DASH, anon_sym_PLUS, - [18360] = 12, - ACTIONS(541), 1, - anon_sym_COLON_COLON, - ACTIONS(545), 1, - anon_sym_STAR_STAR, - ACTIONS(547), 1, anon_sym_STAR, - ACTIONS(549), 1, anon_sym_SLASH, - ACTIONS(551), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14674] = 9, + ACTIONS(441), 1, + sym_identifier, + ACTIONS(443), 1, + aux_sym_base_ten_token1, + ACTIONS(447), 1, anon_sym_LPAREN, - ACTIONS(553), 1, - anon_sym_AMP_AMP, - ACTIONS(555), 1, - anon_sym_PIPE_PIPE, - ACTIONS(561), 1, - anon_sym_CARET_CARET, - ACTIONS(571), 1, - anon_sym_COMMA, - ACTIONS(573), 1, - anon_sym_RPAREN_GT, + STATE(78), 1, + sym__float, + STATE(80), 1, + sym_number, + STATE(250), 1, + sym_constraint_set_expression, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(543), 2, + ACTIONS(445), 2, anon_sym_DASH, anon_sym_PLUS, - [18399] = 4, - ACTIONS(485), 1, - anon_sym_STAR, - ACTIONS(541), 1, - anon_sym_COLON_COLON, + STATE(233), 5, + sym_scalar, + sym_constraint_set_parenthesis, + sym_constraint_set_unary_expression, + sym_constraint_set_binary_expression, + sym_constraint_set_method_call, + [14708] = 9, + ACTIONS(441), 1, + sym_identifier, + ACTIONS(443), 1, + aux_sym_base_ten_token1, + ACTIONS(447), 1, + anon_sym_LPAREN, + STATE(78), 1, + sym__float, + STATE(80), 1, + sym_number, + STATE(248), 1, + sym_constraint_set_expression, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(481), 10, - anon_sym_COMMA, - anon_sym_RPAREN_GT, + ACTIONS(445), 2, anon_sym_DASH, anon_sym_PLUS, - anon_sym_STAR_STAR, - anon_sym_SLASH, - anon_sym_AMP_AMP, - anon_sym_PIPE_PIPE, - anon_sym_CARET_CARET, - anon_sym_LPAREN, - [18422] = 11, - ACTIONS(483), 1, - anon_sym_COLON_COLON, - ACTIONS(525), 1, + STATE(233), 5, + sym_scalar, + sym_constraint_set_parenthesis, + sym_constraint_set_unary_expression, + sym_constraint_set_binary_expression, + sym_constraint_set_method_call, + [14742] = 9, + ACTIONS(441), 1, + sym_identifier, + ACTIONS(447), 1, anon_sym_LPAREN, - ACTIONS(527), 1, - anon_sym_STAR_STAR, - ACTIONS(531), 1, - anon_sym_STAR, - ACTIONS(533), 1, - anon_sym_SLASH, - ACTIONS(535), 1, - anon_sym_AMP_AMP, - ACTIONS(537), 1, - anon_sym_PIPE_PIPE, - ACTIONS(539), 1, - anon_sym_CARET_CARET, - ACTIONS(575), 1, - anon_sym_GT_GT_GT, + ACTIONS(453), 1, + aux_sym_base_ten_token1, + STATE(222), 1, + sym__float, + STATE(223), 1, + sym_number, + STATE(242), 1, + sym_constraint_set_expression, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(529), 2, + ACTIONS(455), 2, anon_sym_DASH, anon_sym_PLUS, - [18458] = 11, - ACTIONS(483), 1, + STATE(233), 5, + sym_scalar, + sym_constraint_set_parenthesis, + sym_constraint_set_unary_expression, + sym_constraint_set_binary_expression, + sym_constraint_set_method_call, + [14776] = 7, + ACTIONS(457), 1, anon_sym_COLON_COLON, - ACTIONS(525), 1, - anon_sym_LPAREN, - ACTIONS(527), 1, - anon_sym_STAR_STAR, - ACTIONS(531), 1, - anon_sym_STAR, - ACTIONS(533), 1, - anon_sym_SLASH, - ACTIONS(535), 1, - anon_sym_AMP_AMP, - ACTIONS(537), 1, - anon_sym_PIPE_PIPE, - ACTIONS(539), 1, - anon_sym_CARET_CARET, - ACTIONS(577), 1, - anon_sym_GT_GT_GT, + STATE(226), 1, + sym__constraint_set_relation, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(529), 2, + ACTIONS(471), 2, anon_sym_DASH, anon_sym_PLUS, - [18494] = 11, - ACTIONS(483), 1, - anon_sym_COLON_COLON, - ACTIONS(525), 1, - anon_sym_LPAREN, - ACTIONS(527), 1, - anon_sym_STAR_STAR, - ACTIONS(531), 1, + ACTIONS(473), 2, anon_sym_STAR, - ACTIONS(533), 1, anon_sym_SLASH, - ACTIONS(535), 1, - anon_sym_AMP_AMP, - ACTIONS(537), 1, - anon_sym_PIPE_PIPE, - ACTIONS(539), 1, - anon_sym_CARET_CARET, - ACTIONS(579), 1, - anon_sym_RPAREN, + ACTIONS(475), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(477), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14805] = 7, + ACTIONS(457), 1, + anon_sym_COLON_COLON, + STATE(235), 1, + sym__constraint_set_relation, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(529), 2, + ACTIONS(471), 2, anon_sym_DASH, anon_sym_PLUS, - [18530] = 11, - ACTIONS(483), 1, - anon_sym_COLON_COLON, - ACTIONS(525), 1, - anon_sym_LPAREN, - ACTIONS(527), 1, - anon_sym_STAR_STAR, - ACTIONS(531), 1, + ACTIONS(473), 2, anon_sym_STAR, - ACTIONS(533), 1, anon_sym_SLASH, - ACTIONS(535), 1, - anon_sym_AMP_AMP, - ACTIONS(537), 1, - anon_sym_PIPE_PIPE, - ACTIONS(539), 1, - anon_sym_CARET_CARET, - ACTIONS(581), 1, - anon_sym_COMMA, + ACTIONS(479), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(481), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14834] = 5, + ACTIONS(457), 1, + anon_sym_COLON_COLON, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(529), 2, + ACTIONS(461), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(473), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(459), 6, anon_sym_DASH, anon_sym_PLUS, - [18566] = 11, - ACTIONS(483), 1, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14858] = 3, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(177), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(175), 9, anon_sym_COLON_COLON, - ACTIONS(525), 1, - anon_sym_LPAREN, - ACTIONS(527), 1, - anon_sym_STAR_STAR, - ACTIONS(531), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_STAR, - ACTIONS(533), 1, anon_sym_SLASH, - ACTIONS(535), 1, - anon_sym_AMP_AMP, - ACTIONS(537), 1, - anon_sym_PIPE_PIPE, - ACTIONS(539), 1, - anon_sym_CARET_CARET, - ACTIONS(583), 1, - anon_sym_RPAREN, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14878] = 6, + ACTIONS(457), 1, + anon_sym_COLON_COLON, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(529), 2, + ACTIONS(471), 2, anon_sym_DASH, anon_sym_PLUS, - [18602] = 11, - ACTIONS(483), 1, - anon_sym_COLON_COLON, - ACTIONS(525), 1, - anon_sym_LPAREN, - ACTIONS(527), 1, - anon_sym_STAR_STAR, - ACTIONS(531), 1, + ACTIONS(473), 2, anon_sym_STAR, - ACTIONS(533), 1, anon_sym_SLASH, - ACTIONS(535), 1, - anon_sym_AMP_AMP, - ACTIONS(537), 1, - anon_sym_PIPE_PIPE, - ACTIONS(539), 1, - anon_sym_CARET_CARET, - ACTIONS(585), 1, - anon_sym_RPAREN, + ACTIONS(483), 2, + anon_sym_GT, + anon_sym_LT, + ACTIONS(485), 4, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_LT_EQ, + anon_sym_BANG_EQ, + [14904] = 5, + ACTIONS(457), 1, + anon_sym_COLON_COLON, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(529), 2, + ACTIONS(485), 2, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + ACTIONS(487), 2, anon_sym_DASH, anon_sym_PLUS, - [18638] = 11, - ACTIONS(483), 1, - anon_sym_COLON_COLON, - ACTIONS(525), 1, - anon_sym_LPAREN, - ACTIONS(527), 1, - anon_sym_STAR_STAR, - ACTIONS(531), 1, + ACTIONS(489), 2, anon_sym_STAR, - ACTIONS(533), 1, anon_sym_SLASH, - ACTIONS(535), 1, - anon_sym_AMP_AMP, - ACTIONS(537), 1, - anon_sym_PIPE_PIPE, - ACTIONS(539), 1, - anon_sym_CARET_CARET, - ACTIONS(587), 1, - anon_sym_RPAREN, + [14924] = 4, + ACTIONS(457), 1, + anon_sym_COLON_COLON, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(529), 2, + ACTIONS(489), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(459), 4, anon_sym_DASH, anon_sym_PLUS, - [18674] = 11, - ACTIONS(541), 1, + anon_sym_RPAREN, + anon_sym_GT_GT_GT, + [14942] = 5, + ACTIONS(457), 1, anon_sym_COLON_COLON, - ACTIONS(545), 1, - anon_sym_STAR_STAR, - ACTIONS(547), 1, - anon_sym_STAR, - ACTIONS(549), 1, - anon_sym_SLASH, - ACTIONS(551), 1, - anon_sym_LPAREN, - ACTIONS(553), 1, - anon_sym_AMP_AMP, - ACTIONS(555), 1, - anon_sym_PIPE_PIPE, - ACTIONS(561), 1, - anon_sym_CARET_CARET, - ACTIONS(589), 1, - anon_sym_RPAREN_GT, + ACTIONS(491), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(543), 2, + ACTIONS(487), 2, anon_sym_DASH, anon_sym_PLUS, - [18710] = 11, - ACTIONS(541), 1, - anon_sym_COLON_COLON, - ACTIONS(545), 1, - anon_sym_STAR_STAR, - ACTIONS(547), 1, + ACTIONS(489), 2, anon_sym_STAR, - ACTIONS(549), 1, anon_sym_SLASH, - ACTIONS(551), 1, - anon_sym_LPAREN, - ACTIONS(553), 1, - anon_sym_AMP_AMP, - ACTIONS(555), 1, - anon_sym_PIPE_PIPE, - ACTIONS(561), 1, - anon_sym_CARET_CARET, - ACTIONS(591), 1, - anon_sym_RPAREN_GT, + [14961] = 5, + ACTIONS(457), 1, + anon_sym_COLON_COLON, + ACTIONS(493), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(543), 2, + ACTIONS(487), 2, anon_sym_DASH, anon_sym_PLUS, - [18746] = 11, - ACTIONS(483), 1, - anon_sym_COLON_COLON, - ACTIONS(525), 1, - anon_sym_LPAREN, - ACTIONS(527), 1, - anon_sym_STAR_STAR, - ACTIONS(531), 1, + ACTIONS(489), 2, anon_sym_STAR, - ACTIONS(533), 1, anon_sym_SLASH, - ACTIONS(535), 1, - anon_sym_AMP_AMP, - ACTIONS(537), 1, - anon_sym_PIPE_PIPE, - ACTIONS(539), 1, - anon_sym_CARET_CARET, - ACTIONS(593), 1, - anon_sym_COMMA, + [14980] = 5, + ACTIONS(457), 1, + anon_sym_COLON_COLON, + ACTIONS(495), 1, + anon_sym_GT_GT_GT, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(529), 2, + ACTIONS(487), 2, anon_sym_DASH, anon_sym_PLUS, - [18782] = 7, + ACTIONS(489), 2, + anon_sym_STAR, + anon_sym_SLASH, + [14999] = 7, ACTIONS(37), 1, sym_varadic_dots, - ACTIONS(595), 1, + ACTIONS(497), 1, sym_identifier, - ACTIONS(597), 1, + ACTIONS(499), 1, anon_sym_RPAREN, - STATE(324), 1, + STATE(255), 1, aux_sym_struct_definition_repeat1, - STATE(350), 1, + STATE(283), 1, sym_struct_member, - STATE(365), 1, + STATE(300), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [18805] = 7, + [15022] = 7, ACTIONS(37), 1, sym_varadic_dots, - ACTIONS(595), 1, + ACTIONS(497), 1, sym_identifier, - ACTIONS(599), 1, + ACTIONS(501), 1, anon_sym_RPAREN, - STATE(324), 1, + STATE(255), 1, aux_sym_struct_definition_repeat1, - STATE(350), 1, + STATE(283), 1, sym_struct_member, - STATE(370), 1, + STATE(315), 1, sym__struct_final_element, ACTIONS(3), 2, sym_comment, sym__whitespace, - [18828] = 5, - ACTIONS(601), 1, + [15045] = 5, + ACTIONS(457), 1, + anon_sym_COLON_COLON, + ACTIONS(503), 1, + anon_sym_GT_GT_GT, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(487), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(489), 2, + anon_sym_STAR, + anon_sym_SLASH, + [15064] = 5, + ACTIONS(505), 1, sym_identifier, - STATE(324), 1, + STATE(255), 1, aux_sym_struct_definition_repeat1, - STATE(383), 1, + STATE(311), 1, sym_struct_member, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(604), 2, + ACTIONS(508), 2, anon_sym_RPAREN, sym_varadic_dots, - [18846] = 4, - ACTIONS(606), 1, + [15082] = 4, + ACTIONS(510), 1, sym_identifier, - ACTIONS(608), 1, + ACTIONS(512), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(331), 2, + STATE(259), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [18861] = 4, - ACTIONS(606), 1, + [15097] = 4, + ACTIONS(510), 1, sym_identifier, - ACTIONS(610), 1, + ACTIONS(514), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(331), 2, + STATE(262), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [18876] = 4, - ACTIONS(606), 1, + [15112] = 4, + ACTIONS(510), 1, sym_identifier, - ACTIONS(612), 1, + ACTIONS(516), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(329), 2, + STATE(257), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [18891] = 4, - ACTIONS(606), 1, + [15127] = 4, + ACTIONS(510), 1, sym_identifier, - ACTIONS(614), 1, + ACTIONS(518), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(326), 2, + STATE(262), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [18906] = 4, - ACTIONS(606), 1, + [15142] = 4, + ACTIONS(510), 1, sym_identifier, - ACTIONS(616), 1, + ACTIONS(520), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(331), 2, + STATE(262), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [18921] = 4, - ACTIONS(606), 1, + [15157] = 4, + ACTIONS(510), 1, sym_identifier, - ACTIONS(618), 1, + ACTIONS(522), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(325), 2, + STATE(260), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [18936] = 4, - ACTIONS(620), 1, + [15172] = 4, + ACTIONS(524), 1, sym_identifier, - ACTIONS(623), 1, + ACTIONS(527), 1, anon_sym_in, ACTIONS(3), 2, sym_comment, sym__whitespace, - STATE(331), 2, + STATE(262), 2, sym_let_in_assignment, aux_sym_let_in_repeat1, - [18951] = 4, - ACTIONS(625), 1, - sym_identifier, - ACTIONS(627), 1, - anon_sym_RPAREN, - STATE(346), 1, - sym_dictionary_member_assignment, + [15187] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [18965] = 4, - ACTIONS(629), 1, + ACTIONS(508), 3, + sym_identifier, + anon_sym_RPAREN, + sym_varadic_dots, + [15197] = 4, + ACTIONS(529), 1, anon_sym_COMMA, - ACTIONS(632), 1, + ACTIONS(532), 1, anon_sym_RPAREN, - STATE(333), 1, + STATE(264), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [18979] = 4, - ACTIONS(625), 1, + [15211] = 4, + ACTIONS(534), 1, sym_identifier, - ACTIONS(634), 1, + ACTIONS(536), 1, anon_sym_RPAREN, - STATE(346), 1, + STATE(286), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [18993] = 4, - ACTIONS(625), 1, - sym_identifier, - ACTIONS(636), 1, + [15225] = 4, + ACTIONS(538), 1, + anon_sym_COMMA, + ACTIONS(540), 1, anon_sym_RPAREN, - STATE(346), 1, - sym_dictionary_member_assignment, + STATE(264), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19007] = 4, - ACTIONS(638), 1, - anon_sym_COMMA, - ACTIONS(640), 1, + [15239] = 4, + ACTIONS(534), 1, + sym_identifier, + ACTIONS(540), 1, anon_sym_RPAREN, - STATE(333), 1, - aux_sym_dictionary_construction_repeat1, + STATE(286), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19021] = 4, - ACTIONS(642), 1, - anon_sym_COMMA, - ACTIONS(644), 1, + [15253] = 4, + ACTIONS(534), 1, + sym_identifier, + ACTIONS(542), 1, anon_sym_RPAREN, - STATE(342), 1, - aux_sym_dictionary_construction_repeat1, + STATE(286), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19035] = 4, - ACTIONS(646), 1, - anon_sym_COMMA, - ACTIONS(648), 1, + [15267] = 4, + ACTIONS(534), 1, + sym_identifier, + ACTIONS(544), 1, anon_sym_RPAREN, - STATE(336), 1, - aux_sym_dictionary_construction_repeat1, + STATE(275), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19049] = 3, - ACTIONS(652), 1, - anon_sym_EQ, + [15281] = 4, + ACTIONS(546), 1, + sym_identifier, + STATE(280), 1, + aux_sym_constraint_set_fields_repeat1, + STATE(320), 1, + sym_constraint_set_fields, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(650), 2, - anon_sym_COMMA, - anon_sym_RPAREN, - [19061] = 4, - ACTIONS(625), 1, + [15295] = 4, + ACTIONS(534), 1, sym_identifier, - ACTIONS(654), 1, + ACTIONS(548), 1, anon_sym_RPAREN, - STATE(337), 1, + STATE(273), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19075] = 2, + [15309] = 4, + ACTIONS(542), 1, + anon_sym_RPAREN, + ACTIONS(550), 1, + anon_sym_COMMA, + STATE(264), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(604), 3, - sym_identifier, - anon_sym_RPAREN, - sym_varadic_dots, - [19085] = 4, - ACTIONS(627), 1, - anon_sym_RPAREN, - ACTIONS(656), 1, + [15323] = 4, + ACTIONS(552), 1, anon_sym_COMMA, - STATE(333), 1, + ACTIONS(554), 1, + anon_sym_RPAREN, + STATE(272), 1, aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19099] = 4, - ACTIONS(625), 1, + [15337] = 4, + ACTIONS(534), 1, sym_identifier, - ACTIONS(658), 1, + ACTIONS(556), 1, anon_sym_RPAREN, - STATE(338), 1, + STATE(286), 1, sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19113] = 4, - ACTIONS(625), 1, - sym_identifier, - ACTIONS(640), 1, + [15351] = 4, + ACTIONS(558), 1, + anon_sym_COMMA, + ACTIONS(560), 1, anon_sym_RPAREN, - STATE(346), 1, - sym_dictionary_member_assignment, + STATE(266), 1, + aux_sym_dictionary_construction_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19127] = 3, - ACTIONS(660), 1, - anon_sym_COLON, - STATE(339), 1, - sym_declaration_type, + [15365] = 4, + ACTIONS(546), 1, + sym_identifier, + STATE(280), 1, + aux_sym_constraint_set_fields_repeat1, + STATE(301), 1, + sym_constraint_set_fields, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19138] = 2, + [15379] = 3, + ACTIONS(564), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(632), 2, + ACTIONS(562), 2, anon_sym_COMMA, anon_sym_RPAREN, - [19147] = 3, - ACTIONS(625), 1, + [15391] = 2, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + ACTIONS(566), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [15400] = 3, + ACTIONS(568), 1, + aux_sym_base_ten_token1, + STATE(157), 1, + sym_number, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [15411] = 3, + ACTIONS(570), 1, sym_identifier, - STATE(346), 1, - sym_dictionary_member_assignment, + STATE(299), 1, + aux_sym_constraint_set_fields_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19158] = 3, - ACTIONS(367), 1, + [15422] = 3, + ACTIONS(345), 1, anon_sym_LPAREN, - STATE(226), 1, + STATE(195), 1, sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19169] = 2, + [15433] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(662), 2, + ACTIONS(572), 2, sym_identifier, anon_sym_in, - [19178] = 3, - ACTIONS(664), 1, + [15442] = 3, + ACTIONS(574), 1, anon_sym_COMMA, - ACTIONS(666), 1, + ACTIONS(576), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19189] = 2, + [15453] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(668), 2, + ACTIONS(578), 2, aux_sym_signed_integer_token1, aux_sym_unsigned_integer_token1, - [19198] = 2, + [15462] = 3, + ACTIONS(534), 1, + sym_identifier, + STATE(286), 1, + sym_dictionary_member_assignment, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(670), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [19207] = 2, + [15473] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(672), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [19216] = 3, - ACTIONS(674), 1, - aux_sym_signed_integer_token1, - ACTIONS(676), 1, - aux_sym_unsigned_integer_token1, + ACTIONS(532), 2, + anon_sym_COMMA, + anon_sym_RPAREN, + [15482] = 3, + ACTIONS(576), 1, + anon_sym_RPAREN, + ACTIONS(580), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19227] = 3, - ACTIONS(678), 1, - aux_sym_signed_integer_token1, - ACTIONS(680), 1, - aux_sym_unsigned_integer_token1, + [15493] = 3, + ACTIONS(582), 1, + aux_sym_base_ten_token1, + STATE(128), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19238] = 3, - ACTIONS(175), 1, - anon_sym_LPAREN, - STATE(149), 1, - sym_dictionary_construction, + [15504] = 3, + ACTIONS(584), 1, + anon_sym_COMMA, + ACTIONS(586), 1, + anon_sym_COLON, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19249] = 2, + [15515] = 3, + ACTIONS(588), 1, + anon_sym_COLON, + STATE(277), 1, + sym_declaration_type, ACTIONS(3), 2, sym_comment, sym__whitespace, - ACTIONS(682), 2, - aux_sym_signed_integer_token1, - aux_sym_unsigned_integer_token1, - [19258] = 3, - ACTIONS(684), 1, + [15526] = 3, + ACTIONS(453), 1, aux_sym_base_ten_token1, - STATE(265), 1, + STATE(238), 1, sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19269] = 3, - ACTIONS(686), 1, - aux_sym_signed_integer_token1, - ACTIONS(688), 1, - aux_sym_unsigned_integer_token1, + [15537] = 3, + ACTIONS(443), 1, + aux_sym_base_ten_token1, + STATE(81), 1, + sym_number, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19280] = 3, - ACTIONS(690), 1, - aux_sym_base_ten_token1, - STATE(171), 1, - sym_number, + [15548] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19291] = 3, - ACTIONS(666), 1, - anon_sym_RPAREN, - ACTIONS(692), 1, + ACTIONS(590), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [15557] = 3, + ACTIONS(584), 1, anon_sym_COMMA, + ACTIONS(592), 1, + anon_sym_COLON, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19302] = 3, - ACTIONS(694), 1, - aux_sym_base_ten_token1, - STATE(81), 1, - sym_number, + [15568] = 3, + ACTIONS(594), 1, + aux_sym_signed_integer_token1, + ACTIONS(596), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19313] = 3, - ACTIONS(696), 1, - aux_sym_base_ten_token1, - STATE(190), 1, - sym_number, + [15579] = 2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19324] = 2, - ACTIONS(698), 1, - anon_sym_EQ, + ACTIONS(598), 2, + aux_sym_signed_integer_token1, + aux_sym_unsigned_integer_token1, + [15588] = 3, + ACTIONS(169), 1, + anon_sym_LPAREN, + STATE(108), 1, + sym_dictionary_construction, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19332] = 2, - ACTIONS(700), 1, - anon_sym_RPAREN, + [15599] = 3, + ACTIONS(600), 1, + aux_sym_signed_integer_token1, + ACTIONS(602), 1, + aux_sym_unsigned_integer_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19340] = 2, - ACTIONS(702), 1, + [15610] = 3, + ACTIONS(604), 1, sym_identifier, + STATE(299), 1, + aux_sym_constraint_set_fields_repeat1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19348] = 2, - ACTIONS(704), 1, - anon_sym_LPAREN, + [15621] = 2, + ACTIONS(607), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [15629] = 2, + ACTIONS(609), 1, + anon_sym_COLON, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19356] = 2, - ACTIONS(706), 1, + [15637] = 2, + ACTIONS(611), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19364] = 2, - ACTIONS(708), 1, - anon_sym_RPAREN, + [15645] = 2, + ACTIONS(613), 1, + aux_sym_hex_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19372] = 2, - ACTIONS(710), 1, - anon_sym_RPAREN, + [15653] = 2, + ACTIONS(615), 1, + aux_sym_binary_token2, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19380] = 2, - ACTIONS(712), 1, - anon_sym_RPAREN, + [15661] = 2, + ACTIONS(617), 1, + aux_sym_base_ten_token1, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19388] = 2, - ACTIONS(714), 1, + [15669] = 2, + ACTIONS(619), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19396] = 2, - ACTIONS(716), 1, + [15677] = 2, + ACTIONS(621), 1, + anon_sym_LPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [15685] = 2, + ACTIONS(623), 1, anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19404] = 2, - ACTIONS(718), 1, - aux_sym_hex_token2, + [15693] = 2, + ACTIONS(625), 1, + sym_identifier, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [15701] = 2, + ACTIONS(627), 1, + anon_sym_RPAREN, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [15709] = 2, + ACTIONS(574), 1, + anon_sym_COMMA, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19412] = 2, - ACTIONS(720), 1, + [15717] = 2, + ACTIONS(629), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19420] = 2, - ACTIONS(722), 1, - anon_sym_LPAREN, + [15725] = 2, + ACTIONS(584), 1, + anon_sym_COMMA, + ACTIONS(3), 2, + sym_comment, + sym__whitespace, + [15733] = 2, + ACTIONS(631), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19428] = 2, - ACTIONS(724), 1, + [15741] = 2, + ACTIONS(633), 1, anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19436] = 2, - ACTIONS(726), 1, + [15749] = 2, + ACTIONS(635), 1, sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19444] = 2, - ACTIONS(728), 1, - ts_builtin_sym_end, + [15757] = 2, + ACTIONS(637), 1, + sym_identifier, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19452] = 2, - ACTIONS(730), 1, - aux_sym_base_ten_token1, + [15765] = 2, + ACTIONS(639), 1, + anon_sym_EQ, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19460] = 2, - ACTIONS(732), 1, - aux_sym_binary_token2, + [15773] = 2, + ACTIONS(641), 1, + ts_builtin_sym_end, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19468] = 2, - ACTIONS(734), 1, - sym_identifier, + [15781] = 2, + ACTIONS(643), 1, + anon_sym_COLON, ACTIONS(3), 2, sym_comment, sym__whitespace, - [19476] = 2, - ACTIONS(664), 1, - anon_sym_COMMA, + [15789] = 2, + ACTIONS(645), 1, + anon_sym_RPAREN, ACTIONS(3), 2, sym_comment, sym__whitespace, @@ -17857,674 +14869,567 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(76)] = 6726, [SMALL_STATE(77)] = 6819, [SMALL_STATE(78)] = 6912, - [SMALL_STATE(79)] = 6958, - [SMALL_STATE(80)] = 7007, - [SMALL_STATE(81)] = 7049, - [SMALL_STATE(82)] = 7091, - [SMALL_STATE(83)] = 7135, - [SMALL_STATE(84)] = 7202, - [SMALL_STATE(85)] = 7269, - [SMALL_STATE(86)] = 7336, - [SMALL_STATE(87)] = 7403, - [SMALL_STATE(88)] = 7470, - [SMALL_STATE(89)] = 7537, - [SMALL_STATE(90)] = 7604, - [SMALL_STATE(91)] = 7671, - [SMALL_STATE(92)] = 7738, - [SMALL_STATE(93)] = 7805, - [SMALL_STATE(94)] = 7848, - [SMALL_STATE(95)] = 7897, - [SMALL_STATE(96)] = 7938, - [SMALL_STATE(97)] = 8005, - [SMALL_STATE(98)] = 8072, - [SMALL_STATE(99)] = 8139, - [SMALL_STATE(100)] = 8206, - [SMALL_STATE(101)] = 8273, - [SMALL_STATE(102)] = 8340, - [SMALL_STATE(103)] = 8407, - [SMALL_STATE(104)] = 8474, - [SMALL_STATE(105)] = 8515, - [SMALL_STATE(106)] = 8556, - [SMALL_STATE(107)] = 8597, - [SMALL_STATE(108)] = 8664, - [SMALL_STATE(109)] = 8731, - [SMALL_STATE(110)] = 8798, - [SMALL_STATE(111)] = 8865, - [SMALL_STATE(112)] = 8932, - [SMALL_STATE(113)] = 8999, - [SMALL_STATE(114)] = 9040, - [SMALL_STATE(115)] = 9107, - [SMALL_STATE(116)] = 9174, - [SMALL_STATE(117)] = 9215, - [SMALL_STATE(118)] = 9282, - [SMALL_STATE(119)] = 9349, - [SMALL_STATE(120)] = 9416, - [SMALL_STATE(121)] = 9483, - [SMALL_STATE(122)] = 9550, - [SMALL_STATE(123)] = 9617, - [SMALL_STATE(124)] = 9684, - [SMALL_STATE(125)] = 9751, - [SMALL_STATE(126)] = 9818, - [SMALL_STATE(127)] = 9885, - [SMALL_STATE(128)] = 9952, - [SMALL_STATE(129)] = 10019, - [SMALL_STATE(130)] = 10086, - [SMALL_STATE(131)] = 10127, - [SMALL_STATE(132)] = 10194, - [SMALL_STATE(133)] = 10236, - [SMALL_STATE(134)] = 10292, - [SMALL_STATE(135)] = 10350, - [SMALL_STATE(136)] = 10412, - [SMALL_STATE(137)] = 10472, - [SMALL_STATE(138)] = 10536, - [SMALL_STATE(139)] = 10604, - [SMALL_STATE(140)] = 10674, - [SMALL_STATE(141)] = 10746, - [SMALL_STATE(142)] = 10786, - [SMALL_STATE(143)] = 10860, - [SMALL_STATE(144)] = 10900, - [SMALL_STATE(145)] = 10940, - [SMALL_STATE(146)] = 10980, - [SMALL_STATE(147)] = 11020, - [SMALL_STATE(148)] = 11060, - [SMALL_STATE(149)] = 11100, - [SMALL_STATE(150)] = 11140, - [SMALL_STATE(151)] = 11180, - [SMALL_STATE(152)] = 11220, - [SMALL_STATE(153)] = 11274, - [SMALL_STATE(154)] = 11314, - [SMALL_STATE(155)] = 11388, - [SMALL_STATE(156)] = 11462, - [SMALL_STATE(157)] = 11536, - [SMALL_STATE(158)] = 11610, - [SMALL_STATE(159)] = 11650, - [SMALL_STATE(160)] = 11690, - [SMALL_STATE(161)] = 11730, - [SMALL_STATE(162)] = 11780, - [SMALL_STATE(163)] = 11820, - [SMALL_STATE(164)] = 11860, - [SMALL_STATE(165)] = 11899, - [SMALL_STATE(166)] = 11939, - [SMALL_STATE(167)] = 11977, - [SMALL_STATE(168)] = 12018, - [SMALL_STATE(169)] = 12087, - [SMALL_STATE(170)] = 12124, - [SMALL_STATE(171)] = 12159, - [SMALL_STATE(172)] = 12194, - [SMALL_STATE(173)] = 12235, - [SMALL_STATE(174)] = 12303, - [SMALL_STATE(175)] = 12353, - [SMALL_STATE(176)] = 12405, - [SMALL_STATE(177)] = 12461, - [SMALL_STATE(178)] = 12515, - [SMALL_STATE(179)] = 12573, - [SMALL_STATE(180)] = 12633, - [SMALL_STATE(181)] = 12695, - [SMALL_STATE(182)] = 12759, - [SMALL_STATE(183)] = 12825, - [SMALL_STATE(184)] = 12859, - [SMALL_STATE(185)] = 12895, - [SMALL_STATE(186)] = 12961, - [SMALL_STATE(187)] = 13027, - [SMALL_STATE(188)] = 13061, - [SMALL_STATE(189)] = 13095, - [SMALL_STATE(190)] = 13139, - [SMALL_STATE(191)] = 13173, - [SMALL_STATE(192)] = 13215, - [SMALL_STATE(193)] = 13283, - [SMALL_STATE(194)] = 13351, - [SMALL_STATE(195)] = 13419, - [SMALL_STATE(196)] = 13467, - [SMALL_STATE(197)] = 13535, - [SMALL_STATE(198)] = 13569, - [SMALL_STATE(199)] = 13635, - [SMALL_STATE(200)] = 13703, - [SMALL_STATE(201)] = 13771, - [SMALL_STATE(202)] = 13837, - [SMALL_STATE(203)] = 13873, - [SMALL_STATE(204)] = 13939, - [SMALL_STATE(205)] = 14005, - [SMALL_STATE(206)] = 14041, - [SMALL_STATE(207)] = 14109, - [SMALL_STATE(208)] = 14142, - [SMALL_STATE(209)] = 14207, - [SMALL_STATE(210)] = 14272, - [SMALL_STATE(211)] = 14305, - [SMALL_STATE(212)] = 14352, - [SMALL_STATE(213)] = 14417, - [SMALL_STATE(214)] = 14460, - [SMALL_STATE(215)] = 14509, - [SMALL_STATE(216)] = 14560, - [SMALL_STATE(217)] = 14615, - [SMALL_STATE(218)] = 14668, - [SMALL_STATE(219)] = 14725, - [SMALL_STATE(220)] = 14784, - [SMALL_STATE(221)] = 14845, - [SMALL_STATE(222)] = 14908, - [SMALL_STATE(223)] = 14941, - [SMALL_STATE(224)] = 15006, - [SMALL_STATE(225)] = 15039, - [SMALL_STATE(226)] = 15072, - [SMALL_STATE(227)] = 15105, - [SMALL_STATE(228)] = 15138, - [SMALL_STATE(229)] = 15171, - [SMALL_STATE(230)] = 15204, - [SMALL_STATE(231)] = 15269, - [SMALL_STATE(232)] = 15334, - [SMALL_STATE(233)] = 15367, - [SMALL_STATE(234)] = 15400, - [SMALL_STATE(235)] = 15433, - [SMALL_STATE(236)] = 15466, - [SMALL_STATE(237)] = 15499, - [SMALL_STATE(238)] = 15564, - [SMALL_STATE(239)] = 15629, - [SMALL_STATE(240)] = 15694, - [SMALL_STATE(241)] = 15727, - [SMALL_STATE(242)] = 15760, - [SMALL_STATE(243)] = 15825, - [SMALL_STATE(244)] = 15858, - [SMALL_STATE(245)] = 15923, - [SMALL_STATE(246)] = 15988, - [SMALL_STATE(247)] = 16053, - [SMALL_STATE(248)] = 16118, - [SMALL_STATE(249)] = 16183, - [SMALL_STATE(250)] = 16248, - [SMALL_STATE(251)] = 16313, - [SMALL_STATE(252)] = 16378, - [SMALL_STATE(253)] = 16411, - [SMALL_STATE(254)] = 16476, - [SMALL_STATE(255)] = 16509, - [SMALL_STATE(256)] = 16544, - [SMALL_STATE(257)] = 16609, - [SMALL_STATE(258)] = 16674, - [SMALL_STATE(259)] = 16739, - [SMALL_STATE(260)] = 16772, - [SMALL_STATE(261)] = 16837, - [SMALL_STATE(262)] = 16871, - [SMALL_STATE(263)] = 16905, - [SMALL_STATE(264)] = 16937, - [SMALL_STATE(265)] = 16966, - [SMALL_STATE(266)] = 16995, - [SMALL_STATE(267)] = 17023, - [SMALL_STATE(268)] = 17051, - [SMALL_STATE(269)] = 17079, - [SMALL_STATE(270)] = 17107, - [SMALL_STATE(271)] = 17135, - [SMALL_STATE(272)] = 17165, - [SMALL_STATE(273)] = 17193, - [SMALL_STATE(274)] = 17221, - [SMALL_STATE(275)] = 17248, - [SMALL_STATE(276)] = 17275, - [SMALL_STATE(277)] = 17302, - [SMALL_STATE(278)] = 17329, - [SMALL_STATE(279)] = 17375, - [SMALL_STATE(280)] = 17421, - [SMALL_STATE(281)] = 17450, - [SMALL_STATE(282)] = 17485, - [SMALL_STATE(283)] = 17526, - [SMALL_STATE(284)] = 17569, - [SMALL_STATE(285)] = 17608, - [SMALL_STATE(286)] = 17639, - [SMALL_STATE(287)] = 17676, - [SMALL_STATE(288)] = 17702, - [SMALL_STATE(289)] = 17730, - [SMALL_STATE(290)] = 17762, - [SMALL_STATE(291)] = 17800, - [SMALL_STATE(292)] = 17834, - [SMALL_STATE(293)] = 17870, - [SMALL_STATE(294)] = 17900, - [SMALL_STATE(295)] = 17921, - [SMALL_STATE(296)] = 17942, - [SMALL_STATE(297)] = 17963, - [SMALL_STATE(298)] = 17994, - [SMALL_STATE(299)] = 18027, - [SMALL_STATE(300)] = 18062, - [SMALL_STATE(301)] = 18083, - [SMALL_STATE(302)] = 18104, - [SMALL_STATE(303)] = 18143, - [SMALL_STATE(304)] = 18182, - [SMALL_STATE(305)] = 18209, - [SMALL_STATE(306)] = 18230, - [SMALL_STATE(307)] = 18259, - [SMALL_STATE(308)] = 18284, - [SMALL_STATE(309)] = 18323, - [SMALL_STATE(310)] = 18360, - [SMALL_STATE(311)] = 18399, - [SMALL_STATE(312)] = 18422, - [SMALL_STATE(313)] = 18458, - [SMALL_STATE(314)] = 18494, - [SMALL_STATE(315)] = 18530, - [SMALL_STATE(316)] = 18566, - [SMALL_STATE(317)] = 18602, - [SMALL_STATE(318)] = 18638, - [SMALL_STATE(319)] = 18674, - [SMALL_STATE(320)] = 18710, - [SMALL_STATE(321)] = 18746, - [SMALL_STATE(322)] = 18782, - [SMALL_STATE(323)] = 18805, - [SMALL_STATE(324)] = 18828, - [SMALL_STATE(325)] = 18846, - [SMALL_STATE(326)] = 18861, - [SMALL_STATE(327)] = 18876, - [SMALL_STATE(328)] = 18891, - [SMALL_STATE(329)] = 18906, - [SMALL_STATE(330)] = 18921, - [SMALL_STATE(331)] = 18936, - [SMALL_STATE(332)] = 18951, - [SMALL_STATE(333)] = 18965, - [SMALL_STATE(334)] = 18979, - [SMALL_STATE(335)] = 18993, - [SMALL_STATE(336)] = 19007, - [SMALL_STATE(337)] = 19021, - [SMALL_STATE(338)] = 19035, - [SMALL_STATE(339)] = 19049, - [SMALL_STATE(340)] = 19061, - [SMALL_STATE(341)] = 19075, - [SMALL_STATE(342)] = 19085, - [SMALL_STATE(343)] = 19099, - [SMALL_STATE(344)] = 19113, - [SMALL_STATE(345)] = 19127, - [SMALL_STATE(346)] = 19138, - [SMALL_STATE(347)] = 19147, - [SMALL_STATE(348)] = 19158, - [SMALL_STATE(349)] = 19169, - [SMALL_STATE(350)] = 19178, - [SMALL_STATE(351)] = 19189, - [SMALL_STATE(352)] = 19198, - [SMALL_STATE(353)] = 19207, - [SMALL_STATE(354)] = 19216, - [SMALL_STATE(355)] = 19227, - [SMALL_STATE(356)] = 19238, - [SMALL_STATE(357)] = 19249, - [SMALL_STATE(358)] = 19258, - [SMALL_STATE(359)] = 19269, - [SMALL_STATE(360)] = 19280, - [SMALL_STATE(361)] = 19291, - [SMALL_STATE(362)] = 19302, - [SMALL_STATE(363)] = 19313, - [SMALL_STATE(364)] = 19324, - [SMALL_STATE(365)] = 19332, - [SMALL_STATE(366)] = 19340, - [SMALL_STATE(367)] = 19348, - [SMALL_STATE(368)] = 19356, - [SMALL_STATE(369)] = 19364, - [SMALL_STATE(370)] = 19372, - [SMALL_STATE(371)] = 19380, - [SMALL_STATE(372)] = 19388, - [SMALL_STATE(373)] = 19396, - [SMALL_STATE(374)] = 19404, - [SMALL_STATE(375)] = 19412, - [SMALL_STATE(376)] = 19420, - [SMALL_STATE(377)] = 19428, - [SMALL_STATE(378)] = 19436, - [SMALL_STATE(379)] = 19444, - [SMALL_STATE(380)] = 19452, - [SMALL_STATE(381)] = 19460, - [SMALL_STATE(382)] = 19468, - [SMALL_STATE(383)] = 19476, + [SMALL_STATE(79)] = 6961, + [SMALL_STATE(80)] = 7006, + [SMALL_STATE(81)] = 7050, + [SMALL_STATE(82)] = 7092, + [SMALL_STATE(83)] = 7134, + [SMALL_STATE(84)] = 7177, + [SMALL_STATE(85)] = 7218, + [SMALL_STATE(86)] = 7259, + [SMALL_STATE(87)] = 7308, + [SMALL_STATE(88)] = 7349, + [SMALL_STATE(89)] = 7390, + [SMALL_STATE(90)] = 7430, + [SMALL_STATE(91)] = 7470, + [SMALL_STATE(92)] = 7510, + [SMALL_STATE(93)] = 7564, + [SMALL_STATE(94)] = 7604, + [SMALL_STATE(95)] = 7654, + [SMALL_STATE(96)] = 7710, + [SMALL_STATE(97)] = 7768, + [SMALL_STATE(98)] = 7830, + [SMALL_STATE(99)] = 7890, + [SMALL_STATE(100)] = 7954, + [SMALL_STATE(101)] = 8022, + [SMALL_STATE(102)] = 8092, + [SMALL_STATE(103)] = 8164, + [SMALL_STATE(104)] = 8204, + [SMALL_STATE(105)] = 8278, + [SMALL_STATE(106)] = 8318, + [SMALL_STATE(107)] = 8358, + [SMALL_STATE(108)] = 8398, + [SMALL_STATE(109)] = 8438, + [SMALL_STATE(110)] = 8478, + [SMALL_STATE(111)] = 8518, + [SMALL_STATE(112)] = 8558, + [SMALL_STATE(113)] = 8600, + [SMALL_STATE(114)] = 8640, + [SMALL_STATE(115)] = 8714, + [SMALL_STATE(116)] = 8788, + [SMALL_STATE(117)] = 8862, + [SMALL_STATE(118)] = 8902, + [SMALL_STATE(119)] = 8942, + [SMALL_STATE(120)] = 8982, + [SMALL_STATE(121)] = 9022, + [SMALL_STATE(122)] = 9062, + [SMALL_STATE(123)] = 9136, + [SMALL_STATE(124)] = 9176, + [SMALL_STATE(125)] = 9215, + [SMALL_STATE(126)] = 9255, + [SMALL_STATE(127)] = 9293, + [SMALL_STATE(128)] = 9362, + [SMALL_STATE(129)] = 9397, + [SMALL_STATE(130)] = 9434, + [SMALL_STATE(131)] = 9475, + [SMALL_STATE(132)] = 9516, + [SMALL_STATE(133)] = 9551, + [SMALL_STATE(134)] = 9619, + [SMALL_STATE(135)] = 9673, + [SMALL_STATE(136)] = 9731, + [SMALL_STATE(137)] = 9791, + [SMALL_STATE(138)] = 9853, + [SMALL_STATE(139)] = 9917, + [SMALL_STATE(140)] = 9983, + [SMALL_STATE(141)] = 10051, + [SMALL_STATE(142)] = 10087, + [SMALL_STATE(143)] = 10153, + [SMALL_STATE(144)] = 10219, + [SMALL_STATE(145)] = 10287, + [SMALL_STATE(146)] = 10323, + [SMALL_STATE(147)] = 10389, + [SMALL_STATE(148)] = 10455, + [SMALL_STATE(149)] = 10491, + [SMALL_STATE(150)] = 10547, + [SMALL_STATE(151)] = 10615, + [SMALL_STATE(152)] = 10681, + [SMALL_STATE(153)] = 10749, + [SMALL_STATE(154)] = 10783, + [SMALL_STATE(155)] = 10851, + [SMALL_STATE(156)] = 10885, + [SMALL_STATE(157)] = 10919, + [SMALL_STATE(158)] = 10953, + [SMALL_STATE(159)] = 10995, + [SMALL_STATE(160)] = 11029, + [SMALL_STATE(161)] = 11095, + [SMALL_STATE(162)] = 11163, + [SMALL_STATE(163)] = 11211, + [SMALL_STATE(164)] = 11255, + [SMALL_STATE(165)] = 11305, + [SMALL_STATE(166)] = 11357, + [SMALL_STATE(167)] = 11425, + [SMALL_STATE(168)] = 11490, + [SMALL_STATE(169)] = 11523, + [SMALL_STATE(170)] = 11556, + [SMALL_STATE(171)] = 11589, + [SMALL_STATE(172)] = 11654, + [SMALL_STATE(173)] = 11687, + [SMALL_STATE(174)] = 11752, + [SMALL_STATE(175)] = 11785, + [SMALL_STATE(176)] = 11850, + [SMALL_STATE(177)] = 11883, + [SMALL_STATE(178)] = 11916, + [SMALL_STATE(179)] = 11981, + [SMALL_STATE(180)] = 12014, + [SMALL_STATE(181)] = 12061, + [SMALL_STATE(182)] = 12104, + [SMALL_STATE(183)] = 12153, + [SMALL_STATE(184)] = 12204, + [SMALL_STATE(185)] = 12259, + [SMALL_STATE(186)] = 12312, + [SMALL_STATE(187)] = 12369, + [SMALL_STATE(188)] = 12428, + [SMALL_STATE(189)] = 12489, + [SMALL_STATE(190)] = 12552, + [SMALL_STATE(191)] = 12585, + [SMALL_STATE(192)] = 12650, + [SMALL_STATE(193)] = 12683, + [SMALL_STATE(194)] = 12748, + [SMALL_STATE(195)] = 12781, + [SMALL_STATE(196)] = 12814, + [SMALL_STATE(197)] = 12879, + [SMALL_STATE(198)] = 12912, + [SMALL_STATE(199)] = 12945, + [SMALL_STATE(200)] = 13010, + [SMALL_STATE(201)] = 13075, + [SMALL_STATE(202)] = 13108, + [SMALL_STATE(203)] = 13141, + [SMALL_STATE(204)] = 13174, + [SMALL_STATE(205)] = 13207, + [SMALL_STATE(206)] = 13272, + [SMALL_STATE(207)] = 13337, + [SMALL_STATE(208)] = 13402, + [SMALL_STATE(209)] = 13467, + [SMALL_STATE(210)] = 13532, + [SMALL_STATE(211)] = 13597, + [SMALL_STATE(212)] = 13662, + [SMALL_STATE(213)] = 13727, + [SMALL_STATE(214)] = 13792, + [SMALL_STATE(215)] = 13825, + [SMALL_STATE(216)] = 13858, + [SMALL_STATE(217)] = 13893, + [SMALL_STATE(218)] = 13958, + [SMALL_STATE(219)] = 14023, + [SMALL_STATE(220)] = 14088, + [SMALL_STATE(221)] = 14153, + [SMALL_STATE(222)] = 14181, + [SMALL_STATE(223)] = 14208, + [SMALL_STATE(224)] = 14233, + [SMALL_STATE(225)] = 14256, + [SMALL_STATE(226)] = 14290, + [SMALL_STATE(227)] = 14324, + [SMALL_STATE(228)] = 14346, + [SMALL_STATE(229)] = 14380, + [SMALL_STATE(230)] = 14414, + [SMALL_STATE(231)] = 14448, + [SMALL_STATE(232)] = 14472, + [SMALL_STATE(233)] = 14506, + [SMALL_STATE(234)] = 14528, + [SMALL_STATE(235)] = 14562, + [SMALL_STATE(236)] = 14596, + [SMALL_STATE(237)] = 14630, + [SMALL_STATE(238)] = 14652, + [SMALL_STATE(239)] = 14674, + [SMALL_STATE(240)] = 14708, + [SMALL_STATE(241)] = 14742, + [SMALL_STATE(242)] = 14776, + [SMALL_STATE(243)] = 14805, + [SMALL_STATE(244)] = 14834, + [SMALL_STATE(245)] = 14858, + [SMALL_STATE(246)] = 14878, + [SMALL_STATE(247)] = 14904, + [SMALL_STATE(248)] = 14924, + [SMALL_STATE(249)] = 14942, + [SMALL_STATE(250)] = 14961, + [SMALL_STATE(251)] = 14980, + [SMALL_STATE(252)] = 14999, + [SMALL_STATE(253)] = 15022, + [SMALL_STATE(254)] = 15045, + [SMALL_STATE(255)] = 15064, + [SMALL_STATE(256)] = 15082, + [SMALL_STATE(257)] = 15097, + [SMALL_STATE(258)] = 15112, + [SMALL_STATE(259)] = 15127, + [SMALL_STATE(260)] = 15142, + [SMALL_STATE(261)] = 15157, + [SMALL_STATE(262)] = 15172, + [SMALL_STATE(263)] = 15187, + [SMALL_STATE(264)] = 15197, + [SMALL_STATE(265)] = 15211, + [SMALL_STATE(266)] = 15225, + [SMALL_STATE(267)] = 15239, + [SMALL_STATE(268)] = 15253, + [SMALL_STATE(269)] = 15267, + [SMALL_STATE(270)] = 15281, + [SMALL_STATE(271)] = 15295, + [SMALL_STATE(272)] = 15309, + [SMALL_STATE(273)] = 15323, + [SMALL_STATE(274)] = 15337, + [SMALL_STATE(275)] = 15351, + [SMALL_STATE(276)] = 15365, + [SMALL_STATE(277)] = 15379, + [SMALL_STATE(278)] = 15391, + [SMALL_STATE(279)] = 15400, + [SMALL_STATE(280)] = 15411, + [SMALL_STATE(281)] = 15422, + [SMALL_STATE(282)] = 15433, + [SMALL_STATE(283)] = 15442, + [SMALL_STATE(284)] = 15453, + [SMALL_STATE(285)] = 15462, + [SMALL_STATE(286)] = 15473, + [SMALL_STATE(287)] = 15482, + [SMALL_STATE(288)] = 15493, + [SMALL_STATE(289)] = 15504, + [SMALL_STATE(290)] = 15515, + [SMALL_STATE(291)] = 15526, + [SMALL_STATE(292)] = 15537, + [SMALL_STATE(293)] = 15548, + [SMALL_STATE(294)] = 15557, + [SMALL_STATE(295)] = 15568, + [SMALL_STATE(296)] = 15579, + [SMALL_STATE(297)] = 15588, + [SMALL_STATE(298)] = 15599, + [SMALL_STATE(299)] = 15610, + [SMALL_STATE(300)] = 15621, + [SMALL_STATE(301)] = 15629, + [SMALL_STATE(302)] = 15637, + [SMALL_STATE(303)] = 15645, + [SMALL_STATE(304)] = 15653, + [SMALL_STATE(305)] = 15661, + [SMALL_STATE(306)] = 15669, + [SMALL_STATE(307)] = 15677, + [SMALL_STATE(308)] = 15685, + [SMALL_STATE(309)] = 15693, + [SMALL_STATE(310)] = 15701, + [SMALL_STATE(311)] = 15709, + [SMALL_STATE(312)] = 15717, + [SMALL_STATE(313)] = 15725, + [SMALL_STATE(314)] = 15733, + [SMALL_STATE(315)] = 15741, + [SMALL_STATE(316)] = 15749, + [SMALL_STATE(317)] = 15757, + [SMALL_STATE(318)] = 15765, + [SMALL_STATE(319)] = 15773, + [SMALL_STATE(320)] = 15781, + [SMALL_STATE(321)] = 15789, }; 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 = false}}, SHIFT(143), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), - [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(380), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(374), - [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(381), - [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(116), - [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), - [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(327), - [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), - [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), - [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), - [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(167), - [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(184), - [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(361), - [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), - [43] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(143), - [46] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(143), - [49] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(78), - [52] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(380), - [55] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(374), - [58] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(381), - [61] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(28), - [64] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(116), - [67] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(41), - [70] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(66), - [73] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(327), - [76] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(3), - [79] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(6), - [82] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [84] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(114), - [87] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), - [89] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), - [91] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), - [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(166), - [95] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(109), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(79), + [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(106), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(65), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(256), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [29] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), + [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), + [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), + [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), + [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), + [49] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(109), + [52] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(109), + [55] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(79), + [58] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(305), + [61] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(303), + [64] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(304), + [67] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(46), + [70] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(106), + [73] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(65), + [76] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(27), + [79] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(256), + [82] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(2), + [85] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(5), + [88] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [90] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), SHIFT_REPEAT(276), + [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(126), + [95] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), - [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(330), - [101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), - [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), - [105] = {.entry = {.count = 1, .reusable = false}}, SHIFT(164), + [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(261), + [101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(214), + [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), + [105] = {.entry = {.count = 1, .reusable = false}}, SHIFT(124), [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), - [109] = {.entry = {.count = 1, .reusable = false}}, SHIFT(207), - [111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [109] = {.entry = {.count = 1, .reusable = false}}, SHIFT(215), + [111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), [113] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), - [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(328), - [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), - [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), - [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), - [123] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), - [125] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), - [127] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), - [129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), - [131] = {.entry = {.count = 1, .reusable = false}}, SHIFT(106), - [133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), - [135] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), - [137] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), - [139] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), - [141] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), - [143] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), - [145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(362), - [147] = {.entry = {.count = 1, .reusable = false}}, SHIFT(269), - [149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), - [151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), - [153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), - [155] = {.entry = {.count = 1, .reusable = false}}, SHIFT(261), - [157] = {.entry = {.count = 1, .reusable = false}}, SHIFT(274), - [159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), - [161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [163] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), - [165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), - [167] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 14), - [169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(368), - [171] = {.entry = {.count = 1, .reusable = true}}, SHIFT(375), - [173] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 14), - [175] = {.entry = {.count = 1, .reusable = true}}, SHIFT(340), - [177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 18), - [179] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 18), - [181] = {.entry = {.count = 1, .reusable = false}}, SHIFT(301), - [183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [185] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), - [187] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), - [189] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), - [191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), - [193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [195] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), - [197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), - [199] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), - [201] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 11), - [203] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 11), - [205] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), - [207] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), - [209] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), - [211] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), - [213] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), - [215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), - [217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), - [221] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [223] = {.entry = {.count = 1, .reusable = false}}, SHIFT(12), - [225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [227] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [229] = {.entry = {.count = 1, .reusable = false}}, SHIFT(14), - [231] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), - [233] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), - [235] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), - [237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [239] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [243] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 15), - [245] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [247] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 15), - [249] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 17), - [251] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 17), - [253] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), - [255] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), - [257] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member_access, 3, 0, 13), - [259] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member_access, 3, 0, 13), - [261] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 10), - [263] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 10), - [265] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), - [267] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), - [269] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 20), - [271] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 20), - [273] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 21), - [275] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 21), - [277] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 24), - [279] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 24), - [281] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula, 5, 0, 25), - [283] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula, 5, 0, 25), - [285] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 26), - [287] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 26), - [289] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), - [291] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), - [293] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 7), - [295] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 7), - [297] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 6, 0, 27), - [299] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 6, 0, 27), - [301] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), - [303] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), - [305] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), - [307] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), - [309] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 28), - [311] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 28), - [313] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 30), - [315] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 30), - [317] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), - [319] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), - [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), - [323] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), - [325] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), - [327] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), - [329] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), - [331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360), - [333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(378), - [335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), - [337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), - [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(372), - [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), - [345] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), - [347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), - [351] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), - [353] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), - [355] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), - [357] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), - [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), - [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), - [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(61), - [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(343), - [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(272), - [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), - [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), - [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), - [381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [385] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), - [387] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 16), - [389] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 23), - [391] = {.entry = {.count = 1, .reusable = true}}, SHIFT(363), - [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(145), - [395] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), - [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [401] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38), - [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(349), - [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [411] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), - [413] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), - [415] = {.entry = {.count = 1, .reusable = false}}, SHIFT(9), - [417] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), - [419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), - [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), - [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254), - [437] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), - [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(258), + [117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(270), + [123] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 1, 0, 2), + [125] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88), + [127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [129] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 1, 0, 2), + [131] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), + [133] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_number, 1, 0, 0), + [135] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_base_ten, 1, 0, 0), + [137] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 1, 0, 1), + [139] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 1, 0, 1), + [141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), + [143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__float, 3, 0, 12), + [145] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__float, 3, 0, 12), + [147] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [149] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 2, 0, 0), + [151] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 2, 0, 0), + [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 9), + [155] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 9), + [157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 3, 0, 11), + [159] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 3, 0, 11), + [161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_expression, 3, 0, 14), + [163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(316), + [165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), + [167] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_expression, 3, 0, 14), + [169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(271), + [171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_definition, 4, 0, 18), + [173] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_definition, 4, 0, 18), + [175] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar, 2, 0, 5), + [177] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar, 2, 0, 5), + [179] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesis, 3, 0, 0), + [181] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesis, 3, 0, 0), + [183] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_call, 2, 0, 6), + [185] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_call, 2, 0, 6), + [187] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_member_access, 3, 0, 13), + [189] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_member_access, 3, 0, 13), + [191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [193] = {.entry = {.count = 1, .reusable = false}}, SHIFT(11), + [195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [197] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 3, 0, 10), + [199] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 3, 0, 10), + [201] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [203] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [205] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), + [207] = {.entry = {.count = 1, .reusable = false}}, SHIFT(15), + [209] = {.entry = {.count = 1, .reusable = false}}, SHIFT(14), + [211] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), + [213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [215] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [219] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 4, 0, 15), + [221] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [223] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 4, 0, 15), + [225] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 4, 0, 17), + [227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 4, 0, 17), + [229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1, 0, 0), + [231] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1, 0, 0), + [233] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 4, 0, 0), + [235] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 4, 0, 0), + [237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_method_call, 4, 0, 19), + [239] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_method_call, 4, 0, 19), + [241] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1, 0, 0), + [243] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1, 0, 0), + [245] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2, 0, 0), + [247] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2, 0, 0), + [249] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector2, 5, 0, 20), + [251] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector2, 5, 0, 20), + [253] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [255] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_construction, 5, 0, 23), + [257] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_construction, 5, 0, 23), + [259] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_closure_definition, 5, 0, 24), + [261] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_closure_definition, 5, 0, 24), + [263] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if, 6, 0, 25), + [265] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if, 6, 0, 25), + [267] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_let_in, 3, 0, 7), + [269] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in, 3, 0, 7), + [271] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector3, 7, 0, 26), + [273] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector3, 7, 0, 26), + [275] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constraint_set, 7, 0, 27), + [277] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constraint_set, 7, 0, 27), + [279] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_vector4, 9, 0, 28), + [281] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_vector4, 9, 0, 28), + [283] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_signed_integer, 2, 0, 4), + [285] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_signed_integer, 2, 0, 4), + [287] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [289] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unsigned_integer, 2, 0, 4), + [291] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, 0, 3), + [293] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, 0, 3), + [295] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 0), + [297] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 0), + [299] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), + [301] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration_type, 2, 0, 0), + [303] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_declaration_type, 2, 0, 0), + [305] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), + [307] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), + [309] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), + [311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(312), + [313] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), + [317] = {.entry = {.count = 1, .reusable = true}}, SHIFT(302), + [319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [323] = {.entry = {.count = 1, .reusable = false}}, SHIFT(52), + [325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [329] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), + [331] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [333] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), + [335] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), + [337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(269), + [347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(221), + [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(279), + [353] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [359] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 4, 0, 22), + [361] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_member_assignment, 3, 0, 16), + [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), + [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), + [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [379] = {.entry = {.count = 1, .reusable = false}}, SHIFT(37), + [381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [385] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), + [387] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), + [389] = {.entry = {.count = 1, .reusable = false}}, SHIFT(9), + [391] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), + [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), + [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [405] = {.entry = {.count = 1, .reusable = false}}, SHIFT(29), + [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), + [411] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), + [415] = {.entry = {.count = 1, .reusable = false}}, SHIFT(77), + [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), + [421] = {.entry = {.count = 1, .reusable = false}}, SHIFT(62), + [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), + [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [435] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), + [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245), + [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), - [443] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), - [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), - [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(67), - [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), - [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), - [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(358), - [461] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_vector3, 7, 0, 28), - [463] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_vector3, 7, 0, 28), - [465] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [467] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_parenthesis, 3, 0, 0), - [469] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_vector4, 9, 0, 30), - [471] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_vector4, 9, 0, 30), - [473] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_expression, 1, 0, 0), - [475] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_expression, 1, 0, 0), - [477] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_vector2, 5, 0, 21), - [479] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_vector2, 5, 0, 21), - [481] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_function_call, 3, 0, 19), - [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(366), - [485] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_function_call, 3, 0, 19), - [487] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2, 0, 0), - [489] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_method_call, 6, 0, 29), - [491] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_method_call, 6, 0, 29), - [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), - [497] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87), - [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [501] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), - [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), - [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), - [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), - [513] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), - [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), - [517] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_binary_expression, 3, 0, 14), - [519] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_binary_expression, 3, 0, 14), - [521] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), - [523] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_formula_unary_expression, 2, 0, 3), - [525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), - [527] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), - [529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), - [531] = {.entry = {.count = 1, .reusable = false}}, SHIFT(109), - [533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), - [535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), - [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), - [539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(382), - [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), - [547] = {.entry = {.count = 1, .reusable = false}}, SHIFT(119), - [549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), - [551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), - [555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), - [559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), - [561] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [563] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), - [565] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), - [567] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), - [569] = {.entry = {.count = 1, .reusable = true}}, SHIFT(270), - [571] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), - [573] = {.entry = {.count = 1, .reusable = true}}, SHIFT(266), - [575] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), - [577] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), - [579] = {.entry = {.count = 1, .reusable = true}}, SHIFT(267), - [581] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), - [583] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), - [585] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), - [587] = {.entry = {.count = 1, .reusable = true}}, SHIFT(273), - [589] = {.entry = {.count = 1, .reusable = true}}, SHIFT(268), - [591] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), - [593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(345), - [597] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), - [599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), - [601] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(345), - [604] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), - [606] = {.entry = {.count = 1, .reusable = false}}, SHIFT(364), - [608] = {.entry = {.count = 1, .reusable = false}}, SHIFT(77), - [610] = {.entry = {.count = 1, .reusable = false}}, SHIFT(62), - [612] = {.entry = {.count = 1, .reusable = false}}, SHIFT(65), - [614] = {.entry = {.count = 1, .reusable = false}}, SHIFT(50), - [616] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25), - [618] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35), - [620] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(364), - [623] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), - [625] = {.entry = {.count = 1, .reusable = true}}, SHIFT(373), - [627] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), - [629] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(347), - [632] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), - [634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), - [636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(334), - [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), - [642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(332), - [644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), - [646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(344), - [648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), - [650] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 8), - [652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), - [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(335), - [658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), - [660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), - [662] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 22), - [664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(341), - [666] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), - [668] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), - [670] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), - [672] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), - [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), - [676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), - [678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(234), - [680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), - [682] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), - [684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(264), - [686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(277), - [688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275), - [690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), - [692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(377), - [694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), - [696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), - [698] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [700] = {.entry = {.count = 1, .reusable = true}}, SHIFT(183), - [702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(367), - [704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), - [706] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), - [708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), - [710] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), - [712] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), - [714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(348), - [716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(352), - [720] = {.entry = {.count = 1, .reusable = true}}, SHIFT(356), - [722] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), - [724] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), - [726] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210), - [728] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(357), - [732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(351), - [734] = {.entry = {.count = 1, .reusable = true}}, SHIFT(376), + [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), + [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(239), + [449] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constraint_set_parenthesis, 3, 0, 0), + [451] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constraint_set_parenthesis, 3, 0, 0), + [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(224), + [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), + [459] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constraint_set_binary_expression, 3, 0, 14), + [461] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constraint_set_binary_expression, 3, 0, 14), + [463] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constraint_set_expression, 1, 0, 0), + [465] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constraint_set_expression, 1, 0, 0), + [467] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constraint_set_method_call, 6, 0, 29), + [469] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constraint_set_method_call, 6, 0, 29), + [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), + [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), + [475] = {.entry = {.count = 1, .reusable = false}}, SHIFT(226), + [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(226), + [479] = {.entry = {.count = 1, .reusable = false}}, SHIFT(235), + [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), + [483] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constraint_set_unary_expression, 2, 0, 3), + [485] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constraint_set_unary_expression, 2, 0, 3), + [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), + [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237), + [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(227), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), + [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [505] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), SHIFT_REPEAT(290), + [508] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_struct_definition_repeat1, 2, 0, 0), + [510] = {.entry = {.count = 1, .reusable = false}}, SHIFT(308), + [512] = {.entry = {.count = 1, .reusable = false}}, SHIFT(64), + [514] = {.entry = {.count = 1, .reusable = false}}, SHIFT(61), + [516] = {.entry = {.count = 1, .reusable = false}}, SHIFT(49), + [518] = {.entry = {.count = 1, .reusable = false}}, SHIFT(24), + [520] = {.entry = {.count = 1, .reusable = false}}, SHIFT(45), + [522] = {.entry = {.count = 1, .reusable = false}}, SHIFT(34), + [524] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), SHIFT_REPEAT(308), + [527] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_let_in_repeat1, 2, 0, 0), + [529] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), SHIFT_REPEAT(285), + [532] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_construction_repeat1, 2, 0, 0), + [534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(318), + [536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), + [538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(265), + [540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), + [542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), + [544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), + [546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), + [548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), + [550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(274), + [552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(268), + [554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(267), + [560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [562] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_member, 2, 0, 8), + [564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [566] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal, 2, 0, 0), + [568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), + [570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), + [572] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_let_in_assignment, 4, 0, 21), + [574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(263), + [576] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 1, 0, 0), + [578] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), + [580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), + [584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(317), + [586] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constraint_set_fields, 1, 0, 0), + [588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [590] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex, 2, 0, 0), + [592] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constraint_set_fields, 2, 0, 0), + [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), + [598] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary, 2, 0, 0), + [600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [604] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_constraint_set_fields_repeat1, 2, 0, 0), SHIFT_REPEAT(313), + [607] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [609] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), + [611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), + [613] = {.entry = {.count = 1, .reusable = true}}, SHIFT(293), + [615] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), + [617] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278), + [619] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), + [621] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), + [623] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [625] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), + [627] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [629] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [631] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [633] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [635] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [637] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_constraint_set_fields_repeat1, 2, 0, 0), + [639] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [641] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [643] = {.entry = {.count = 1, .reusable = true}}, SHIFT(234), + [645] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__struct_final_element, 2, 0, 0), }; #ifdef __cplusplus diff --git a/tree-sitter-command-cad-model/test/corpus/constraint_sets.txt b/tree-sitter-command-cad-model/test/corpus/constraint_sets.txt new file mode 100644 index 0000000..b27539c --- /dev/null +++ b/tree-sitter-command-cad-model/test/corpus/constraint_sets.txt @@ -0,0 +1,54 @@ +================== +Equal +================== + +<<>> + +--- + +(source_file + (expression + (constraint_set + (constraint_set_fields + (identifier)) + (constraint_set_expression + (identifier)) + (constraint_set_expression + (scalar + (number)))))) + +================== +Precedence +================== + +<<>> + +--- + +(source_file + (expression + (constraint_set + (constraint_set_fields + (identifier) + (identifier) + (identifier) + (identifier)) + (constraint_set_expression + (constraint_set_binary_expression + (constraint_set_expression + (constraint_set_parenthesis + (constraint_set_expression + (constraint_set_binary_expression + (constraint_set_expression + (identifier)) + (constraint_set_expression + (constraint_set_binary_expression + (constraint_set_expression + (identifier)) + (constraint_set_expression + (identifier)))))))) + (constraint_set_expression + (identifier)))) + (constraint_set_expression + (scalar + (number)))))) diff --git a/tree-sitter-command-cad-model/test/corpus/formulas.txt b/tree-sitter-command-cad-model/test/corpus/formulas.txt deleted file mode 100644 index e8e9f8a..0000000 --- a/tree-sitter-command-cad-model/test/corpus/formulas.txt +++ /dev/null @@ -1,52 +0,0 @@ -================== -Equal -================== - -<<<1 == 1>>> - ---- - -(source_file - (expression - (formula - (formula_expression - (scalar - (number))) - (formula_expression - (scalar - (number)))))) - -================== -Precedence -================== - -<<<(a + b * c ** d) + c == 1>>> - ---- - -(source_file - (expression - (formula - (formula_expression - (formula_binary_expression - (formula_expression - (formula_parenthesis - (formula_expression - (formula_binary_expression - (formula_expression - (identifier)) - (formula_expression - (formula_binary_expression - (formula_expression - (identifier)) - (formula_expression - (formula_binary_expression - (formula_expression - (identifier)) - (formula_expression - (identifier)))))))))) - (formula_expression - (identifier)))) - (formula_expression - (scalar - (number)))))) From 2165f15426116456a1c7a16e08875032bdeb922e Mon Sep 17 00:00:00 2001 From: James Carl Date: Sun, 25 Jan 2026 18:09:24 -0500 Subject: [PATCH 092/106] Add store --- Cargo.lock | 78 +++++ Cargo.toml | 1 + cli/Cargo.toml | 1 + cli/src/main.rs | 22 +- flake.nix | 6 + interpreter/Cargo.toml | 7 +- interpreter/src/compile/mod.rs | 15 +- interpreter/src/execution/mod.rs | 51 +++- .../src/execution/standard_environment.rs | 12 +- interpreter/src/execution/store.rs | 208 ++++++++++++++ interpreter/src/execution/values/closure.rs | 219 +++++++------- .../src/execution/values/dictionary.rs | 14 + interpreter/src/execution/values/file.rs | 4 +- interpreter/src/execution/values/list.rs | 132 ++++----- .../src/execution/values/string/formatting.rs | 116 ++++---- .../src/execution/values/value_type.rs | 266 +++++++----------- interpreter/src/execution/values/vector.rs | 123 ++++---- interpreter/src/lib.rs | 2 +- 18 files changed, 748 insertions(+), 529 deletions(-) create mode 100644 interpreter/src/execution/store.rs diff --git a/Cargo.lock b/Cargo.lock index de00d24..7f7908c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -134,6 +134,15 @@ dependencies = [ "serde_core", ] +[[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.19.1" @@ -233,6 +242,7 @@ dependencies = [ "interpreter", "nu-ansi-term", "reedline", + "tempfile", "termimad", "tree-sitter", "type-sitter", @@ -301,6 +311,15 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + [[package]] name = "crokey" version = "1.3.0" @@ -411,6 +430,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + [[package]] name = "csv" version = "1.4.0" @@ -460,6 +489,16 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" +[[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 = "dispatch2" version = "0.3.0" @@ -622,6 +661,16 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[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 = "gethostname" version = "1.1.0" @@ -745,6 +794,9 @@ name = "hashable-map" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46ab77e35afc7a5a3087e72e8e93a90a226a78f62c5f4dceaeb3d7ef5decdccb" +dependencies = [ + "serde", +] [[package]] name = "hashbrown" @@ -767,6 +819,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "iana-time-zone" version = "0.1.64" @@ -817,6 +875,7 @@ dependencies = [ "enum_downcast", "file-guard", "hashable-map", + "hex", "imstr", "levenshtein", "nalgebra", @@ -826,6 +885,8 @@ dependencies = [ "pretty_assertions", "rayon", "selen", + "serde", + "sha2", "stack", "tempfile", "tree-sitter", @@ -1634,6 +1695,17 @@ dependencies = [ "zmij", ] +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "shlex" version = "1.3.0" @@ -2017,6 +2089,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + [[package]] name = "vte" version = "0.14.1" diff --git a/Cargo.toml b/Cargo.toml index 927c2f9..d65f730 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,3 +22,4 @@ default-members = [ ariadne = "0.6.0" type-sitter = "0.8" tree-sitter = "0.25" +tempfile = "3" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 201c41c..1e4c03c 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -13,3 +13,4 @@ ariadne = { workspace = true } type-sitter = { workspace = true } tree-sitter = { workspace = true } nu-ansi-term = "0.50.3" +tempfile = { workspace = true } diff --git a/cli/src/main.rs b/cli/src/main.rs index d3e1eb9..e9fa8c3 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -6,6 +6,7 @@ use arguments::Arguments; use ariadne::{Cache, Label, Report, ReportKind, Source}; use clap::Parser as _; use reedline::{DefaultHinter, DefaultPrompt, Reedline, Signal}; +use tempfile::TempDir; use type_sitter::Node as _; use crate::arguments::Commands; @@ -18,14 +19,18 @@ use interpreter::{ new_parser, values::{Object, Style, Value}, ExecutionContext, ImString, LogMessage, Parser, RuntimeLog, SourceReference, StackScope, - StackTrace, + StackTrace, Store, }; fn main() { let arguments = Arguments::parse(); - match arguments.command { + let result = match arguments.command { Commands::Repl => repl(), + }; + + if let Err(error) = result { + println!("Fatal error: {error:?}"); } } @@ -60,7 +65,7 @@ impl<'i> Cache> for ReplFileCache<'i> { } } -fn repl() { +fn repl() -> Result<()> { let mut line_editor = Reedline::create().with_hinter(Box::new( DefaultHinter::default().with_style( nu_ansi_term::Style::new() @@ -75,7 +80,7 @@ fn repl() { let mut parser = new_parser(); let database = BuiltinCallableDatabase::new(); - let prelude = build_prelude(&database); + let prelude = build_prelude(&database).context("Failed to build prelude")?; loop { let sig = line_editor.read_line(&prompt); @@ -89,7 +94,7 @@ fn repl() { } Ok(Signal::CtrlD) | Ok(Signal::CtrlC) => { println!("\nAborted!"); - break; + break Ok(()); } x => { println!("Event: {:?}", x); @@ -155,12 +160,19 @@ fn run_line( let root = compile(&repl_file, input, &tree).map_err(|error| anyhow!("Failed to compile: {error}"))?; + let store_directory = TempDir::new().unwrap(); + let store = Store::new(store_directory.path()); + + println!("Store is located at {:?}", store_directory.path()); + println!("Store will be deleted on exit."); + let log = StderrLog; let context = ExecutionContext { log: &log as &dyn RuntimeLog, stack_trace: &StackTrace::top(root.reference.clone()), stack: &StackScope::top(&prelude), database: &database, + store: &store, }; if let Some(report) = build_syntax_errors(&tree, repl_file, root.reference.clone()) { diff --git a/flake.nix b/flake.nix index 5519900..e8da124 100644 --- a/flake.nix +++ b/flake.nix @@ -58,6 +58,12 @@ fenix-channel.rustc fenix-channel.cargo cargo-expand + openssl + pkg-config + ]; + + LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [ + openssl ]; shellHook = '' diff --git a/interpreter/Cargo.toml b/interpreter/Cargo.toml index 27b5b29..da69540 100644 --- a/interpreter/Cargo.toml +++ b/interpreter/Cargo.toml @@ -14,17 +14,20 @@ file-guard = "0.2.0" enum_dispatch = "0.3" enum_downcast = { version = "0.1", features = [ "derive" ] } num-traits = "0.2" -hashable-map = "0.4.0" +hashable-map = { version = "0.4.0", features = ["serde"] } imstr = "0.2.0" nalgebra = "0.34.1" stack = "0.4.0" paste = "1.0.15" -tempfile = "3.24.0" +tempfile = { workspace = true } rayon = "1.11.0" nom = "8.0.0" ariadne = { workspace = true } levenshtein = "1.0.5" selen = "0.15.5" +sha2 = "0.10.9" +serde = { version = "1.0.228", features = ["derive"] } +hex = "0.4.3" [build-dependencies] type-sitter-gen = "0.8" diff --git a/interpreter/src/compile/mod.rs b/interpreter/src/compile/mod.rs index f13b777..efbfd0e 100644 --- a/interpreter/src/compile/mod.rs +++ b/interpreter/src/compile/mod.rs @@ -36,7 +36,7 @@ impl Span for SourceReference { } } -#[derive(Debug, Hash, Eq, PartialEq)] +#[derive(Debug, Eq, PartialEq)] pub struct AstNode { pub reference: SourceReference, pub node: N, @@ -68,6 +68,19 @@ impl AstNode { } } +impl std::hash::Hash for AstNode +where + N: std::hash::Hash, +{ + fn hash(&self, hash: &mut H) + where + H: std::hash::Hasher, + { + // We only hash the node, not the location of it. + self.node.hash(hash) + } +} + fn unwrap_missing<'t, 'i, N: Node<'t> + 't>(value: &N) -> Result<(), Error<'t, 'i>> { if !value.has_error() { Ok(()) diff --git a/interpreter/src/execution/mod.rs b/interpreter/src/execution/mod.rs index ae5821f..5ab7a8a 100644 --- a/interpreter/src/execution/mod.rs +++ b/interpreter/src/execution/mod.rs @@ -42,6 +42,8 @@ use imstr::ImString; use logging::LocatedStr; pub use logging::{LogLevel, LogMessage, RuntimeLog, StackTrace}; pub use stack::StackScope; +mod store; +pub use store::Store; use values::{ closure::find_all_variable_accesses_in_closure_capture, @@ -178,6 +180,7 @@ pub struct ExecutionContext<'c> { pub stack_trace: &'c StackTrace<'c>, pub stack: &'c StackScope<'c>, pub database: &'c BuiltinCallableDatabase, + pub store: &'c Store, } impl<'c> ExecutionContext<'c> { @@ -187,10 +190,8 @@ impl<'c> ExecutionContext<'c> { { self.stack_trace.trace_scope(reference, move |stack_trace| { let context = ExecutionContext { - log: self.log, stack_trace: &stack_trace, - stack: self.stack, - database: self.database, + ..*self }; code(&context) @@ -222,10 +223,9 @@ impl<'c> ExecutionContext<'c> { self.stack .scope(self.stack_trace, mode, variables, |stack, stack_trace| { let context = ExecutionContext { - log: self.log, stack_trace: &stack_trace, stack: &stack, - database: self.database, + ..*self }; block(&context) @@ -375,10 +375,9 @@ fn execute_let_in( let mut buffer = Vec::new(); for group in expression.node.compute_groups() { let context = ExecutionContext { - log: context.log, stack_trace, stack, - database: context.database, + ..*context }; buffer.par_extend(group.par_iter().map(|assignment| { @@ -395,10 +394,9 @@ fn execute_let_in( } let context = ExecutionContext { - log: context.log, stack_trace, stack, - database: context.database, + ..*context }; let node = &expression.node; @@ -496,21 +494,48 @@ pub fn execute_if_expression( #[cfg(test)] pub(crate) fn test_run(input: &str) -> ExpressionResult { + let root = compile::full_compile(input); + + test_context([], |context| execute_expression(context, &root)) +} + +#[cfg(test)] +pub(crate) fn test_context( + extra_prelude: impl IntoIterator, + f: impl FnOnce(&ExecutionContext) -> R, +) -> R { + let database = BuiltinCallableDatabase::new(); + test_context_custom_database(database, extra_prelude, f) +} + +#[cfg(test)] +pub(crate) fn test_context_custom_database( + database: BuiltinCallableDatabase, + extra_prelude: impl IntoIterator, + f: impl FnOnce(&ExecutionContext) -> R, +) -> R { use standard_environment::build_prelude; use std::sync::Mutex; + use tempfile::TempDir; - let root = compile::full_compile(input); - let database = BuiltinCallableDatabase::new(); - let prelude = build_prelude(&database); + let mut prelude = build_prelude(&database).unwrap(); + + for (name, value) in extra_prelude.into_iter() { + prelude.insert(name, value); + } + + let store_directory = TempDir::new().unwrap(); + let store = Store::new(store_directory.path()); let context = ExecutionContext { log: &Mutex::new(Vec::new()), stack_trace: &StackTrace::test(), stack: &StackScope::top(&prelude), database: &database, + store: &store, }; - execute_expression(&context, &root) + f(&context) } #[cfg(test)] diff --git a/interpreter/src/execution/standard_environment.rs b/interpreter/src/execution/standard_environment.rs index a17feb9..ab5458d 100644 --- a/interpreter/src/execution/standard_environment.rs +++ b/interpreter/src/execution/standard_environment.rs @@ -20,10 +20,12 @@ use std::{collections::HashMap, sync::Mutex}; use common_data_types::{Dimension, Float}; use imstr::ImString; +use tempfile::TempDir; use crate::execution::{ logging::StackTrace, stack::StackScope, + store::Store, values::{BuiltinCallableDatabase, Scalar, SignedInteger, UnsignedInteger, ValueNone}, ExecutionContext, }; @@ -31,19 +33,25 @@ use crate::execution::{ use super::values::{Dictionary, Value, ValueType}; /// Builds standard library. -pub fn build_prelude(database: &BuiltinCallableDatabase) -> HashMap { +pub fn build_prelude( + database: &BuiltinCallableDatabase, +) -> std::io::Result> { // Build an incomplete context for bootstrapping. let prelude = HashMap::new(); + let store_directory = TempDir::new()?; + let store = Store::new(store_directory.path()); + let context = ExecutionContext { log: &Mutex::new(Vec::new()), stack_trace: &StackTrace::bootstrap(), stack: &StackScope::top(&prelude), database: &database, + store: &store, }; let global = HashMap::from([("std".into(), build_std(&context).into())]); - global + Ok(global) } fn build_std(context: &ExecutionContext) -> Dictionary { diff --git a/interpreter/src/execution/store.rs b/interpreter/src/execution/store.rs new file mode 100644 index 0000000..9b50ae0 --- /dev/null +++ b/interpreter/src/execution/store.rs @@ -0,0 +1,208 @@ +/* + * Copyright 2026 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use std::{ + io::{ErrorKind, Write}, + path::{Path, PathBuf}, +}; + +use sha2::{Digest, Sha256}; +use tempfile::{NamedTempFile, TempDir}; + +use crate::{ + execution::errors::{ErrorType, ExpressionResult, Raise}, + ExecutionContext, +}; + +#[derive(Debug)] +pub struct Store { + path: PathBuf, +} + +impl Store { + pub fn new(path: impl Into) -> Self { + Self { path: path.into() } + } + + pub fn get_or_init_file( + &self, + context: &ExecutionContext, + hashable: &impl std::hash::Hash, + name: impl AsRef, + init: impl FnOnce(&mut NamedTempFile) -> ExpressionResult<()>, + ) -> ExpressionResult { + let store_path = self.generate_store_path(hashable, &name); + + if std::fs::exists(&store_path) + .map_err(|error| IoError(error).to_error(context.stack_trace))? + { + Ok(store_path) + } else { + // TODO should we be creating these in the project directory to increase the chances of + // them being on the same filesystem as the store? + let mut asset = PendingAsset { + store_path, + asset: NamedTempFile::new() + .map_err(|error| IoError(error).to_error(context.stack_trace))?, + }; + init(&mut asset.asset)?; + + let (mut file, temp_path) = asset + .asset + .keep() + .map_err(|error| IoError(error.error).to_error(context.stack_trace))?; + + // Make sure that file is flushed and closed. + file.flush() + .map_err(|error| IoError(error).to_error(context.stack_trace))?; + drop(file); + + self.move_path_into_store(context, &temp_path, &asset.store_path)?; + + Ok(asset.store_path) + } + } + + pub fn get_or_init_directory( + &self, + context: &ExecutionContext, + hashable: &impl std::hash::Hash, + name: impl AsRef, + init: impl FnOnce(&mut TempDir) -> ExpressionResult<()>, + ) -> ExpressionResult { + let store_path = self.generate_store_path(hashable, &name); + + if std::fs::exists(&store_path) + .map_err(|error| IoError(error).to_error(context.stack_trace))? + { + Ok(store_path) + } else { + // TODO should we be creating these in the project directory to increase the chances of + // them being on the same filesystem as the store? + let mut asset = PendingAsset { + store_path, + asset: TempDir::new() + .map_err(|error| IoError(error).to_error(context.stack_trace))?, + }; + init(&mut asset.asset)?; + let temp_path = asset.asset.keep(); + self.move_path_into_store(context, &temp_path, &asset.store_path)?; + + Ok(asset.store_path) + } + } + + fn generate_store_path( + &self, + hashable: &impl std::hash::Hash, + name: impl AsRef, + ) -> PathBuf { + let mut hasher = StoreHasher(Sha256::new()); + hashable.hash(&mut hasher); + let hash = hasher.0.finalize(); + let file_name = { + let mut file_name = hex::encode(&hash[..]); + file_name += "-"; + file_name += name.as_ref(); + file_name + }; + self.path.join(file_name) + } + + fn move_path_into_store( + &self, + context: &ExecutionContext, + temp_path: &Path, + store_path: &Path, + ) -> ExpressionResult<()> { + // Move the file into the store. + match std::fs::rename(temp_path, &store_path) { + Ok(_) => Ok(store_path), + Err(error) => { + let result = match error.kind() { + // Seems another thread created the object while we were working. + // That's unfortunate, but we can just use their result. + ErrorKind::AlreadyExists => Ok(store_path), + _ => Err(error), + }; + + // Either way, we need to remove that old directory. + if let Err(error) = std::fs::remove_dir_all(temp_path) { + // This just really isn't our day... + context.log.push_message(super::LogMessage { + origin: context.stack_trace.bottom().clone(), + level: super::LogLevel::Warning, + message: format!( + "Failed to remove temporary file at {temp_path:?}: {error}" + ) + .into(), + }); + } + + result + } + } + .map_err(|error| IoError(error).to_error(context.stack_trace))?; + + Ok(()) + } +} + +#[derive(Debug)] +pub struct PendingAsset { + store_path: PathBuf, + asset: A, +} + +impl std::ops::Deref for PendingAsset { + type Target = A; + + fn deref(&self) -> &Self::Target { + &self.asset + } +} + +impl std::ops::DerefMut for PendingAsset { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.asset + } +} + +#[derive(Debug)] +pub struct IoError(pub std::io::Error); + +impl ErrorType for IoError {} + +impl std::fmt::Display for IoError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.0) + } +} + +struct StoreHasher(Sha256); + +impl std::hash::Hasher for StoreHasher { + fn finish(&self) -> u64 { + // Use the Sha256 built in to get the real hash. + 0 + } + + fn write(&mut self, bytes: &[u8]) { + Digest::update(&mut self.0, bytes); + } +} diff --git a/interpreter/src/execution/values/closure.rs b/interpreter/src/execution/values/closure.rs index c01938a..306812e 100644 --- a/interpreter/src/execution/values/closure.rs +++ b/interpreter/src/execution/values/closure.rs @@ -306,7 +306,7 @@ macro_rules! build_member_from_sig { ($name:ident: $ty:ty) => { ( imstr::ImString::from(stringify!($name)), - $crate::execution::values::value_type::StructMember { + $crate::execution::values::StructMember { ty: <$ty as crate::execution::values::StaticType>::static_type(), default: None, }, @@ -315,7 +315,7 @@ macro_rules! build_member_from_sig { ($name:ident: $ty:ty = $default:expr) => { ( imstr::ImString::from(stringify!($name)), - $crate::execution::values::value_type::StructMember { + $crate::execution::values::StructMember { ty: <$ty as crate::execution::values::StaticType>::static_type(), default: Some($default), }, @@ -326,21 +326,26 @@ macro_rules! build_member_from_sig { #[macro_export] macro_rules! build_argument_signature_list { ($($arg:ident: $ty:path $(= $default:expr)?),*) => {{ - let list: [(imstr::ImString, $crate::execution::values::value_type::StructMember); _] = [$($crate::build_member_from_sig!($arg: $ty $(= $default)?),)*]; + let list: [(imstr::ImString, $crate::execution::values::StructMember); _] = [$($crate::build_member_from_sig!($arg: $ty $(= $default)?),)*]; list }}; } +#[macro_export] +macro_rules! build_struct_definition { + (variadic: $variadic:literal, ($($arg:ident: $ty:path $(= $default:expr)?),*)) => {{ + $crate::execution::values::StructDefinition { + members: std::sync::Arc::new(hashable_map::HashableMap::from(std::collections::HashMap::from($crate::build_argument_signature_list!($($arg: $ty $(= $default)?),*)))), + variadic: $variadic, + } + }}; +} + #[macro_export] macro_rules! build_closure_signature { (($($arg:ident: $ty:path $(= $default:expr)?),*) -> $return_type:ty) => {{ - let members = std::sync::Arc::new(hashable_map::HashableMap::from(std::collections::HashMap::from($crate::build_argument_signature_list!($($arg: $ty $(= $default)?),*)))); - std::sync::Arc::new($crate::execution::values::closure::Signature { - argument_type: crate::execution::values::StructDefinition { - members, - variadic: false, - }, + argument_type: $crate::build_struct_definition!(variadic: false, ($($arg: $ty $(= $default)?),*)), return_type: <$return_type as $crate::execution::values::StaticType>::static_type(), }) }}; @@ -395,7 +400,7 @@ macro_rules! build_function_callable { ($name:literal ($context:ident: &ExecutionContext $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block) => {{ struct BuiltFunction where - F: Fn(&$crate::execution::ExecutionContext, &$crate::execution::values::closure::Signature, $crate::values::Dictionary) -> ExpressionResult<$crate::execution::values::Value> + F: Fn(&$crate::execution::ExecutionContext, &$crate::execution::values::closure::Signature, $crate::values::Dictionary) -> $crate::execution::ExpressionResult<$crate::execution::values::Value> { function: F, signature: std::sync::Arc<$crate::execution::values::closure::Signature>, @@ -404,7 +409,7 @@ macro_rules! build_function_callable { impl $crate::execution::values::closure::BuiltinCallable for BuiltFunction where - F: Fn(&$crate::execution::ExecutionContext, &$crate::execution::values::closure::Signature, $crate::values::Dictionary) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync, + F: Fn(&$crate::execution::ExecutionContext, &$crate::execution::values::closure::Signature, $crate::values::Dictionary) -> $crate::execution::ExpressionResult<$crate::execution::values::Value> + Send + Sync, { fn call( &self, @@ -428,7 +433,9 @@ macro_rules! build_function_callable { $context: &$crate::execution::ExecutionContext, signature: &$crate::execution::values::closure::Signature, argument: $crate::execution::values::Dictionary - | -> ExpressionResult<$crate::execution::values::Value> { + | -> $crate::execution::ExpressionResult<$crate::execution::values::Value> { + use crate::execution::errors::Raise as _; + signature .argument_type .check_other_qualifies(argument.struct_def()) @@ -470,7 +477,7 @@ macro_rules! build_method_callable { ) => {{ struct BuiltFunction where - F: Fn(&$crate::execution::ExecutionContext, &$crate::execution::values::closure::Signature, $crate::values::Dictionary) -> ExpressionResult<$crate::execution::values::Value> + F: Fn(&$crate::execution::ExecutionContext, &$crate::execution::values::closure::Signature, $crate::values::Dictionary) -> $crate::execution::ExpressionResult<$crate::execution::values::Value> { function: F, signature: std::sync::Arc<$crate::execution::values::closure::Signature>, @@ -479,7 +486,7 @@ macro_rules! build_method_callable { impl $crate::execution::values::closure::BuiltinCallable for BuiltFunction where - F: Fn(&$crate::execution::ExecutionContext, &$crate::execution::values::closure::Signature, $crate::values::Dictionary) -> ExpressionResult<$crate::execution::values::Value> + Send + Sync, + F: Fn(&$crate::execution::ExecutionContext, &$crate::execution::values::closure::Signature, $crate::values::Dictionary) -> $crate::execution::ExpressionResult<$crate::execution::values::Value> + Send + Sync, { fn call( &self, @@ -503,7 +510,9 @@ macro_rules! build_method_callable { $context: &$crate::execution::ExecutionContext, signature: &$crate::execution::values::closure::Signature, argument: $crate::execution::values::Dictionary - | -> ExpressionResult<$crate::execution::values::Value> { + | -> $crate::execution::ExpressionResult<$crate::execution::values::Value> { + use crate::execution::errors::Raise as _; + let $this = $context.get_variable( $crate::execution::logging::LocatedStr { location: $context.stack_trace.bottom().clone(), @@ -609,14 +618,11 @@ impl StaticTypeName for BuiltinFunction { mod test { use super::*; use crate::execution::{ - logging::StackTrace, - stack::StackScope, - test_run, + test_context_custom_database, test_run, values::{self, SignedInteger, StructMember, UnsignedInteger}, }; use hashable_map::HashableMap; use pretty_assertions::assert_eq; - use std::sync::Mutex; #[test] fn define_closure() { @@ -771,7 +777,7 @@ mod test { #[test] fn builtin_function_no_args() { - let mut database = BuiltinCallableDatabase::default(); + let mut database = BuiltinCallableDatabase::new(); struct TestFunction; build_function!( @@ -783,29 +789,24 @@ mod test { } ); - use crate::execution::standard_environment::build_prelude; - let root = crate::compile::full_compile("test_function()"); - let mut prelude = build_prelude(&database); - prelude.insert( - "test_function".into(), - BuiltinFunction::new::().into(), - ); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - - let product = execute_expression(&context, &root).unwrap(); + test_context_custom_database( + database, + [( + "test_function".into(), + BuiltinFunction::new::().into(), + )], + |context| { + let product = execute_expression(&context, &root).unwrap(); - assert_eq!(product, values::UnsignedInteger::from(846).into()); + assert_eq!(product, values::UnsignedInteger::from(846).into()); + }, + ) } #[test] fn builtin_function_with_args() { - let mut database = BuiltinCallableDatabase::default(); + let mut database = BuiltinCallableDatabase::new(); struct TestFunction; build_function!( @@ -819,29 +820,24 @@ mod test { } ); - use crate::execution::standard_environment::build_prelude; - let root = crate::compile::full_compile("test_function(a = 1u, b = 2u)"); - let mut prelude = build_prelude(&database); - prelude.insert( - "test_function".into(), - BuiltinFunction::new::().into(), - ); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - - let product = execute_expression(&context, &root).unwrap(); + test_context_custom_database( + database, + [( + "test_function".into(), + BuiltinFunction::new::().into(), + )], + |context| { + let product = execute_expression(&context, &root).unwrap(); - assert_eq!(product, values::UnsignedInteger::from(3).into()); + assert_eq!(product, values::UnsignedInteger::from(3).into()); + }, + ) } #[test] fn builtin_function_with_default_value() { - let mut database = BuiltinCallableDatabase::default(); + let mut database = BuiltinCallableDatabase::new(); struct TestFunction; build_function!( database, @@ -854,29 +850,24 @@ mod test { } ); - use crate::execution::standard_environment::build_prelude; - let root = crate::compile::full_compile("test_function(a = 1u)"); - let mut prelude = build_prelude(&database); - prelude.insert( - "test_function".into(), - BuiltinFunction::new::().into(), - ); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - - let product = execute_expression(&context, &root).unwrap(); + test_context_custom_database( + database, + [( + "test_function".into(), + BuiltinFunction::new::().into(), + )], + |context| { + let product = execute_expression(&context, &root).unwrap(); - assert_eq!(product, values::UnsignedInteger::from(3).into()); + assert_eq!(product, values::UnsignedInteger::from(3).into()); + }, + ) } #[test] fn builtin_function_captured_value() { - let mut database = BuiltinCallableDatabase::default(); + let mut database = BuiltinCallableDatabase::new(); let b = 2; struct TestFunction; @@ -890,29 +881,24 @@ mod test { } ); - use crate::execution::standard_environment::build_prelude; - let root = crate::compile::full_compile("test_function(a = 1u)"); - let mut prelude = build_prelude(&database); - prelude.insert( - "test_function".into(), - BuiltinFunction::new::().into(), - ); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - - let product = execute_expression(&context, &root).unwrap(); + test_context_custom_database( + database, + [( + "test_function".into(), + BuiltinFunction::new::().into(), + )], + |context| { + let product = execute_expression(&context, &root).unwrap(); - assert_eq!(product, values::UnsignedInteger::from(3).into()); + assert_eq!(product, values::UnsignedInteger::from(3).into()); + }, + ) } #[test] fn builtin_method() { - let mut database = BuiltinCallableDatabase::default(); + let mut database = BuiltinCallableDatabase::new(); struct TestMethod; build_method!( database, @@ -921,31 +907,26 @@ mod test { } ); - use crate::execution::standard_environment::build_prelude; - let root = crate::compile::full_compile( "let object = (value = 5u, test_method = provided_test_method); in object::test_method()", ); - let mut prelude = build_prelude(&database); - prelude.insert( - "provided_test_method".into(), - BuiltinFunction::new::().into(), - ); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - - let product = execute_expression(&context, &root).unwrap(); + test_context_custom_database( + database, + [( + "provided_test_method".into(), + BuiltinFunction::new::().into(), + )], + |context| { + let product = execute_expression(&context, &root).unwrap(); - assert_eq!(product, values::UnsignedInteger::from(5).into()); + assert_eq!(product, values::UnsignedInteger::from(5).into()); + }, + ) } #[test] fn builtin_method_with_argument() { - let mut database = BuiltinCallableDatabase::default(); + let mut database = BuiltinCallableDatabase::new(); struct TestMethod; build_method!( @@ -961,26 +942,20 @@ mod test { } ); - use crate::execution::standard_environment::build_prelude; - let root = crate::compile::full_compile( "let object = (value = 5u, test_method = provided_test_method); in object::test_method(to_add = 10u)", ); + test_context_custom_database( + database, + [( + "provided_test_method".into(), + BuiltinFunction::new::().into(), + )], + |context| { + let product = execute_expression(&context, &root).unwrap(); - let mut prelude = build_prelude(&database); - prelude.insert( - "provided_test_method".into(), - BuiltinFunction::new::().into(), - ); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - - let product = execute_expression(&context, &root).unwrap(); - - assert_eq!(product, values::UnsignedInteger::from(15).into()); + assert_eq!(product, values::UnsignedInteger::from(15).into()); + }, + ) } } diff --git a/interpreter/src/execution/values/dictionary.rs b/interpreter/src/execution/values/dictionary.rs index 81646cd..d8b2223 100644 --- a/interpreter/src/execution/values/dictionary.rs +++ b/interpreter/src/execution/values/dictionary.rs @@ -32,6 +32,7 @@ use crate::{ values::string::formatting::Style, ExecutionContext, }, + values::StaticType, }; use super::{ @@ -120,6 +121,18 @@ impl StaticTypeName for Dictionary { } } +impl StaticType for Dictionary { + fn static_type() -> ValueType { + static TYPE: std::sync::OnceLock>> = + std::sync::OnceLock::new(); + let signature = TYPE.get_or_init(|| Arc::new(HashableMap::new())); + ValueType::Dictionary(StructDefinition { + members: signature.clone(), + variadic: true, + }) + } +} + impl Dictionary { pub fn struct_def(&self) -> &StructDefinition { &self.data.struct_def @@ -144,6 +157,7 @@ impl Dictionary { stack_trace, stack, database: context.database, + store: context.store, }; buffer.par_extend(group.par_iter().map(|assignment| { diff --git a/interpreter/src/execution/values/file.rs b/interpreter/src/execution/values/file.rs index 43fb624..a333c93 100644 --- a/interpreter/src/execution/values/file.rs +++ b/interpreter/src/execution/values/file.rs @@ -24,13 +24,13 @@ use tempfile::NamedTempFile; use crate::{ build_method, execution::{ - errors::{GenericFailure, Raise as _}, + errors::GenericFailure, logging::{LogLevel, LogMessage}, values::{ string::formatting::Style, BuiltinCallableDatabase, IString, Object, StaticTypeName, ValueType, }, - ExecutionContext, ExpressionResult, + ExecutionContext, }, }; diff --git a/interpreter/src/execution/values/list.rs b/interpreter/src/execution/values/list.rs index b7e48b1..683b515 100644 --- a/interpreter/src/execution/values/list.rs +++ b/interpreter/src/execution/values/list.rs @@ -674,103 +674,75 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { mod test { use super::*; use crate::execution::{ - build_prelude, - logging::StackTrace, - stack::StackScope, - test_run, + test_context, test_run, values::{Boolean, SignedInteger, UnsignedInteger}, }; - use std::sync::Mutex; #[test] fn create_empty() { - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - let product = test_run("[]").unwrap(); - assert_eq!(product, List::from_iter(&context, []).into()); + test_context([], |context| { + let product = test_run("[]").unwrap(); + assert_eq!(product, List::from_iter(&context, []).into()); + }) } #[test] fn create() { - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - let product = test_run("[1u, 2u, 3u]").unwrap(); - assert_eq!( - product, - List::from_iter( - &context, - [ - UnsignedInteger::from(1).into(), - UnsignedInteger::from(2).into(), - UnsignedInteger::from(3).into() - ] - ) - .into() - ); + test_context([], |context| { + let product = test_run("[1u, 2u, 3u]").unwrap(); + assert_eq!( + product, + List::from_iter( + &context, + [ + UnsignedInteger::from(1).into(), + UnsignedInteger::from(2).into(), + UnsignedInteger::from(3).into() + ] + ) + .into() + ); + }) } #[test] fn create_multi_type() { - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - let product = test_run("[1u, 2i, 3u]").unwrap(); - assert_eq!( - product, - List::from_iter( - &context, - [ - UnsignedInteger::from(1).into(), - SignedInteger::from(2).into(), - UnsignedInteger::from(3).into() - ] - ) - .into() - ); + test_context([], |context| { + let product = test_run("[1u, 2i, 3u]").unwrap(); + assert_eq!( + product, + List::from_iter( + &context, + [ + UnsignedInteger::from(1).into(), + SignedInteger::from(2).into(), + UnsignedInteger::from(3).into() + ] + ) + .into() + ); + }) } #[test] fn type_detection() { - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - assert_eq!( - List::from_iter( - &context, - [ - UnsignedInteger::from(1).into(), - SignedInteger::from(2).into(), - UnsignedInteger::from(3).into() - ] - ) - .internal_type, - Some(ValueType::MultiType( - Box::new(ValueType::UnsignedInteger), - Box::new(ValueType::SignedInteger) - )) - ); + test_context([], |context| { + assert_eq!( + List::from_iter( + &context, + [ + UnsignedInteger::from(1).into(), + SignedInteger::from(2).into(), + UnsignedInteger::from(3).into() + ] + ) + .internal_type, + Some(ValueType::MultiType( + Box::new(ValueType::UnsignedInteger), + Box::new(ValueType::SignedInteger) + )) + ); + }) } #[test] diff --git a/interpreter/src/execution/values/string/formatting.rs b/interpreter/src/execution/values/string/formatting.rs index 80c2b35..82952cc 100644 --- a/interpreter/src/execution/values/string/formatting.rs +++ b/interpreter/src/execution/values/string/formatting.rs @@ -293,15 +293,11 @@ impl UnwrapFormattingResult for std::result::Result { #[cfg(test)] mod test { - use std::{collections::HashMap, sync::Mutex}; + use std::collections::HashMap; use common_data_types::{Dimension, Float}; - use crate::execution::{ - build_prelude, - stack::StackScope, - values::{BuiltinCallableDatabase, Scalar}, - }; + use crate::execution::{test_context, values::Scalar}; use super::*; @@ -429,68 +425,60 @@ mod test { #[test] fn do_format() { - let database = BuiltinCallableDatabase::new(); - let prelude = build_prelude(&database); - - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - - let mut formatted = String::default(); - Format::parse("Test {value}") - .unwrap() - .1 - .format( - &context, - &mut formatted, - Dictionary::new( + test_context([], |context| { + let mut formatted = String::default(); + Format::parse("Test {value}") + .unwrap() + .1 + .format( &context, - HashMap::from_iter([( - "value".into(), - Scalar { - dimension: Dimension::zero(), - value: Float::new(42.24).unwrap(), - } - .into(), - )]), - ), - ) - .unwrap(); - assert_eq!(formatted, "Test 42.24"); - - let mut formatted = String::default(); - Format::parse("Test {one} {two}") - .unwrap() - .1 - .format( - &context, - &mut formatted, - Dictionary::new( - &context, - HashMap::from_iter([ - ( - "one".into(), - Scalar { - dimension: Dimension::zero(), - value: Float::new(1.0).unwrap(), - } - .into(), - ), - ( - "two".into(), + &mut formatted, + Dictionary::new( + &context, + HashMap::from_iter([( + "value".into(), Scalar { dimension: Dimension::zero(), - value: Float::new(2.0).unwrap(), + value: Float::new(42.24).unwrap(), } .into(), - ), - ]), - ), - ) - .unwrap(); - assert_eq!(formatted, "Test 1 2"); + )]), + ), + ) + .unwrap(); + assert_eq!(formatted, "Test 42.24"); + + let mut formatted = String::default(); + Format::parse("Test {one} {two}") + .unwrap() + .1 + .format( + &context, + &mut formatted, + Dictionary::new( + &context, + HashMap::from_iter([ + ( + "one".into(), + Scalar { + dimension: Dimension::zero(), + value: Float::new(1.0).unwrap(), + } + .into(), + ), + ( + "two".into(), + Scalar { + dimension: Dimension::zero(), + value: Float::new(2.0).unwrap(), + } + .into(), + ), + ]), + ), + ) + .unwrap(); + assert_eq!(formatted, "Test 1 2"); + }) } } diff --git a/interpreter/src/execution/values/value_type.rs b/interpreter/src/execution/values/value_type.rs index 182001d..76fcf66 100644 --- a/interpreter/src/execution/values/value_type.rs +++ b/interpreter/src/execution/values/value_type.rs @@ -526,9 +526,8 @@ impl Display for TypeQualificationError { #[cfg(test)] mod test { use pretty_assertions::assert_eq; - use std::sync::Mutex; - use crate::execution::{build_prelude, logging::StackTrace, stack::StackScope, test_run}; + use crate::execution::{test_context, test_run}; use super::*; @@ -654,155 +653,106 @@ mod test { #[test] fn type_closure() { - let closure = test_run("() -> std.types.None: std.consts.None").unwrap(); - let closure = closure.as_userclosure().unwrap(); - - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; + test_context([], |context| { + let closure = test_run("() -> std.types.None: std.consts.None").unwrap(); + let closure = closure.as_userclosure().unwrap(); - closure - .get_type(&context) - .check_other_qualifies(&closure.get_type(&context)) - .unwrap(); + closure + .get_type(&context) + .check_other_qualifies(&closure.get_type(&context)) + .unwrap(); + }) } #[test] fn type_empty_dictionary() { - let structure = test_run("()").unwrap(); - let structure = structure.as_dictionary().unwrap(); - - let dictionary = test_run("()").unwrap(); - let dictionary = dictionary.as_dictionary().unwrap(); - - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; + test_context([], |context| { + let structure = test_run("()").unwrap(); + let structure = structure.as_dictionary().unwrap(); - structure - .get_type(&context) - .check_other_qualifies(&dictionary.get_type(&context)) - .unwrap(); + let dictionary = test_run("()").unwrap(); + let dictionary = dictionary.as_dictionary().unwrap(); + + structure + .get_type(&context) + .check_other_qualifies(&dictionary.get_type(&context)) + .unwrap(); + }) } #[test] fn type_dictionary_with_value() { - let structure = test_run("(a: std.types.None)").unwrap(); - let structure = structure.as_valuetype().unwrap(); - - let dictionary = test_run("(a = std.consts.None)").unwrap(); - let dictionary = dictionary.as_dictionary().unwrap(); - - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; + test_context([], |context| { + let structure = test_run("(a: std.types.None)").unwrap(); + let structure = structure.as_valuetype().unwrap(); - structure - .check_other_qualifies(&dictionary.get_type(&context)) - .unwrap(); + let dictionary = test_run("(a = std.consts.None)").unwrap(); + let dictionary = dictionary.as_dictionary().unwrap(); + + structure + .check_other_qualifies(&dictionary.get_type(&context)) + .unwrap(); + }) } #[test] fn type_dictionary_with_length() { - let structure = test_run("(a: std.scalar.Length)").unwrap(); - let structure = structure.as_valuetype().unwrap(); - - let dictionary = test_run("(a = 1m)").unwrap(); - let dictionary = dictionary.as_dictionary().unwrap(); - - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; + test_context([], |context| { + let structure = test_run("(a: std.scalar.Length)").unwrap(); + let structure = structure.as_valuetype().unwrap(); - structure - .check_other_qualifies(&dictionary.get_type(&context)) - .unwrap(); + let dictionary = test_run("(a = 1m)").unwrap(); + let dictionary = dictionary.as_dictionary().unwrap(); + + structure + .check_other_qualifies(&dictionary.get_type(&context)) + .unwrap(); + }) } #[test] fn type_dictionary_with_extra_value() { - let structure = test_run("(a: std.types.None)").unwrap(); - let structure = structure.as_valuetype().unwrap(); - - let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); - let dictionary = dictionary.as_dictionary().unwrap(); - - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; + test_context([], |context| { + let structure = test_run("(a: std.types.None)").unwrap(); + let structure = structure.as_valuetype().unwrap(); - structure - .check_other_qualifies(&dictionary.get_type(&context)) - .unwrap_err(); + let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); + let dictionary = dictionary.as_dictionary().unwrap(); + + structure + .check_other_qualifies(&dictionary.get_type(&context)) + .unwrap_err(); + }) } #[test] fn type_dictionary_varadic() { - let structure = test_run("(a: std.types.None, ...)").unwrap(); - let structure = structure.as_valuetype().unwrap(); - - let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); - let dictionary = dictionary.as_dictionary().unwrap(); - - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; + test_context([], |context| { + let structure = test_run("(a: std.types.None, ...)").unwrap(); + let structure = structure.as_valuetype().unwrap(); - structure - .check_other_qualifies(&dictionary.get_type(&context)) - .unwrap(); + let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); + let dictionary = dictionary.as_dictionary().unwrap(); + + structure + .check_other_qualifies(&dictionary.get_type(&context)) + .unwrap(); + }) } #[test] fn type_dictionary_nested() { - let structure = test_run("(a: (b: std.types.None))").unwrap(); - let structure = structure.as_valuetype().unwrap(); - - let dictionary = test_run("(a = (b = std.consts.None))").unwrap(); - let dictionary = dictionary.as_dictionary().unwrap(); - - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; + test_context([], |context| { + let structure = test_run("(a: (b: std.types.None))").unwrap(); + let structure = structure.as_valuetype().unwrap(); - structure - .check_other_qualifies(&dictionary.get_type(&context)) - .unwrap(); + let dictionary = test_run("(a = (b = std.consts.None))").unwrap(); + let dictionary = dictionary.as_dictionary().unwrap(); + + structure + .check_other_qualifies(&dictionary.get_type(&context)) + .unwrap(); + }) } #[test] @@ -858,61 +808,45 @@ mod test { #[test] fn value_type_any_value() { - ValueType::Any - .check_other_qualifies(&ValueType::TypeNone) - .unwrap(); + test_context([], |context| { + ValueType::Any + .check_other_qualifies(&ValueType::TypeNone) + .unwrap(); - ValueType::Any - .check_other_qualifies(&ValueType::Boolean) - .unwrap(); + ValueType::Any + .check_other_qualifies(&ValueType::Boolean) + .unwrap(); - ValueType::Any - .check_other_qualifies(&ValueType::SignedInteger) - .unwrap(); + ValueType::Any + .check_other_qualifies(&ValueType::SignedInteger) + .unwrap(); - ValueType::Any - .check_other_qualifies(&ValueType::UnsignedInteger) - .unwrap(); + ValueType::Any + .check_other_qualifies(&ValueType::UnsignedInteger) + .unwrap(); - ValueType::Any - .check_other_qualifies(&ValueType::Scalar(Some(Dimension::length()))) - .unwrap(); + ValueType::Any + .check_other_qualifies(&ValueType::Scalar(Some(Dimension::length()))) + .unwrap(); - let closure = test_run("() -> std.types.None: std.consts.None").unwrap(); - let closure = closure.as_userclosure().unwrap(); + let closure = test_run("() -> std.types.None: std.consts.None").unwrap(); + let closure = closure.as_userclosure().unwrap(); - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; + ValueType::Any + .check_other_qualifies(&closure.get_type(&context)) + .unwrap(); - ValueType::Any - .check_other_qualifies(&closure.get_type(&context)) - .unwrap(); + let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); + let dictionary = dictionary.as_dictionary().unwrap(); - let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); - let dictionary = dictionary.as_dictionary().unwrap(); - - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; + ValueType::Any + .check_other_qualifies(&dictionary.get_type(&context)) + .unwrap(); - ValueType::Any - .check_other_qualifies(&dictionary.get_type(&context)) - .unwrap(); - - ValueType::Any - .check_other_qualifies(&ValueType::ValueType) - .unwrap(); + ValueType::Any + .check_other_qualifies(&ValueType::ValueType) + .unwrap(); + }) } #[test] diff --git a/interpreter/src/execution/values/vector.rs b/interpreter/src/execution/values/vector.rs index bda795e..dc0a1e6 100644 --- a/interpreter/src/execution/values/vector.rs +++ b/interpreter/src/execution/values/vector.rs @@ -974,91 +974,72 @@ impl StaticType for nalgebra::Vector4 { #[cfg(test)] mod test { - use crate::execution::{build_prelude, stack::StackScope, test_run, values::Boolean}; + use crate::execution::{test_context, test_run, values::Boolean}; use pretty_assertions::assert_eq; - use std::sync::Mutex; use super::*; #[test] fn construct_vector2() { - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - let product = test_run("<(1m, 2m)>").unwrap(); - assert_eq!( - product, - Vector2::new(&context, Dimension::length(), [1.0, 2.0]) - .unwrap() - .into() - ); - - let product = test_run("<(-1m, -2m)>").unwrap(); - assert_eq!( - product, - Vector2::new(&context, Dimension::length(), [-1.0, -2.0]) - .unwrap() - .into() - ); + test_context([], |context| { + let product = test_run("<(1m, 2m)>").unwrap(); + assert_eq!( + product, + Vector2::new(&context, Dimension::length(), [1.0, 2.0]) + .unwrap() + .into() + ); + + let product = test_run("<(-1m, -2m)>").unwrap(); + assert_eq!( + product, + Vector2::new(&context, Dimension::length(), [-1.0, -2.0]) + .unwrap() + .into() + ); + }) } #[test] fn construct_vector3() { - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - let product = test_run("<(1m, 2m, 3m)>").unwrap(); - assert_eq!( - product, - Vector3::new(&context, Dimension::length(), [1.0, 2.0, 3.0]) - .unwrap() - .into() - ); - - let product = test_run("<(-1m, -2m, -3m)>").unwrap(); - assert_eq!( - product, - Vector3::new(&context, Dimension::length(), [-1.0, -2.0, -3.0]) - .unwrap() - .into() - ); + test_context([], |context| { + let product = test_run("<(1m, 2m, 3m)>").unwrap(); + assert_eq!( + product, + Vector3::new(&context, Dimension::length(), [1.0, 2.0, 3.0]) + .unwrap() + .into() + ); + + let product = test_run("<(-1m, -2m, -3m)>").unwrap(); + assert_eq!( + product, + Vector3::new(&context, Dimension::length(), [-1.0, -2.0, -3.0]) + .unwrap() + .into() + ); + }) } #[test] fn construct_vector4() { - let database = BuiltinCallableDatabase::default(); - let prelude = build_prelude(&database); - let context = ExecutionContext { - log: &Mutex::new(Vec::new()), - stack_trace: &StackTrace::test(), - stack: &StackScope::top(&prelude), - database: &database, - }; - let product = test_run("<(1m, 2m, 3m, 4m)>").unwrap(); - assert_eq!( - product, - Vector4::new(&context, Dimension::length(), [1.0, 2.0, 3.0, 4.0]) - .unwrap() - .into() - ); - - let product = test_run("<(-1m, -2m, -3m, -4m)>").unwrap(); - assert_eq!( - product, - Vector4::new(&context, Dimension::length(), [-1.0, -2.0, -3.0, -4.0]) - .unwrap() - .into() - ); + test_context([], |context| { + let product = test_run("<(1m, 2m, 3m, 4m)>").unwrap(); + assert_eq!( + product, + Vector4::new(&context, Dimension::length(), [1.0, 2.0, 3.0, 4.0]) + .unwrap() + .into() + ); + + let product = test_run("<(-1m, -2m, -3m, -4m)>").unwrap(); + assert_eq!( + product, + Vector4::new(&context, Dimension::length(), [-1.0, -2.0, -3.0, -4.0]) + .unwrap() + .into() + ); + }) } #[test] diff --git a/interpreter/src/lib.rs b/interpreter/src/lib.rs index 492dfc4..cfad6d5 100644 --- a/interpreter/src/lib.rs +++ b/interpreter/src/lib.rs @@ -22,7 +22,7 @@ pub mod execution; pub use compile::{compile, new_parser, Parser, SourceReference}; pub use execution::{ build_prelude, execute_expression, values, Error, ExecutionContext, LogLevel, LogMessage, - RuntimeLog, StackScope, StackTrace, + RuntimeLog, StackScope, StackTrace, Store, }; pub use imstr::ImString; pub use tree_sitter::{Point as TextPoint, Range as TextRange}; From 6def8982fe7bb80fecb223326d762d594809c6b1 Mon Sep 17 00:00:00 2001 From: James Carl Date: Tue, 10 Feb 2026 18:22:11 -0500 Subject: [PATCH 093/106] Implement ManifoldMesh3D --- Cargo.lock | 11 + interpreter/Cargo.toml | 1 + .../src/execution/standard_environment.rs | 46 +++- interpreter/src/execution/values/closure.rs | 3 +- .../src/execution/values/manifold_mesh.rs | 238 ++++++++++++++++++ interpreter/src/execution/values/mod.rs | 8 +- interpreter/src/execution/values/scalar.rs | 9 +- .../src/execution/values/value_type.rs | 3 + interpreter/src/execution/values/vector.rs | 97 +++++++ 9 files changed, 407 insertions(+), 9 deletions(-) create mode 100644 interpreter/src/execution/values/manifold_mesh.rs diff --git a/Cargo.lock b/Cargo.lock index 7f7908c..d203080 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -143,6 +143,16 @@ dependencies = [ "generic-array", ] +[[package]] +name = "boolmesh" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5e804fa333a4996316770fff780c7cd006371c58bc7824bd8798f17396eac2" +dependencies = [ + "glam 0.30.10", + "rayon", +] + [[package]] name = "bumpalo" version = "3.19.1" @@ -870,6 +880,7 @@ name = "interpreter" version = "0.1.0" dependencies = [ "ariadne", + "boolmesh", "common_data_types", "enum_dispatch", "enum_downcast", diff --git a/interpreter/Cargo.toml b/interpreter/Cargo.toml index da69540..e1c25b9 100644 --- a/interpreter/Cargo.toml +++ b/interpreter/Cargo.toml @@ -28,6 +28,7 @@ selen = "0.15.5" sha2 = "0.10.9" serde = { version = "1.0.228", features = ["derive"] } hex = "0.4.3" +boolmesh = { version = "0.1.7", features = ["rayon"] } [build-dependencies] type-sitter-gen = "0.8" diff --git a/interpreter/src/execution/standard_environment.rs b/interpreter/src/execution/standard_environment.rs index ab5458d..03c5b6c 100644 --- a/interpreter/src/execution/standard_environment.rs +++ b/interpreter/src/execution/standard_environment.rs @@ -22,12 +22,15 @@ use common_data_types::{Dimension, Float}; use imstr::ImString; use tempfile::TempDir; -use crate::execution::{ - logging::StackTrace, - stack::StackScope, - store::Store, - values::{BuiltinCallableDatabase, Scalar, SignedInteger, UnsignedInteger, ValueNone}, - ExecutionContext, +use crate::{ + execution::{ + logging::StackTrace, + stack::StackScope, + store::Store, + values::{BuiltinCallableDatabase, Scalar, SignedInteger, UnsignedInteger, ValueNone}, + ExecutionContext, + }, + values::BuiltinFunction, }; use super::values::{Dictionary, Value, ValueType}; @@ -74,6 +77,7 @@ fn build_std(context: &ExecutionContext) -> Dictionary { build_dimension_types(context, ValueType::Vector4).into(), ), ("consts".into(), build_consts(context).into()), + ("mesh3d".into(), build_mesh_3d(context).into()), ]); Dictionary::new(context, std) } @@ -116,6 +120,7 @@ fn build_types(context: &ExecutionContext) -> Dictionary { ("UInt".into(), ValueType::UnsignedInteger.into()), ("String".into(), ValueType::String.into()), ("ValueType".into(), ValueType::ValueType.into()), + ("ManifoldMesh".into(), ValueType::ManifoldMesh3D.into()), // TODO we need File types. // TODO we'll need a function to build custom function signature types. // ("Function".into(), ValueType::Closure(Arc)), @@ -140,3 +145,32 @@ fn build_dimension_types( Dictionary::new(context, types) } + +fn build_mesh_3d(context: &ExecutionContext) -> Dictionary { + use crate::values::manifold_mesh::methods::*; + + let types: HashMap = HashMap::from_iter( + [ + ("cone".into(), BuiltinFunction::new::().into()), + ("cube".into(), BuiltinFunction::new::().into()), + ( + "cylinder".into(), + BuiltinFunction::new::().into(), + ), + ( + "icosphere".into(), + BuiltinFunction::new::().into(), + ), + ( + "torus".into(), + BuiltinFunction::new::().into(), + ), + ( + "uv_sphere".into(), + BuiltinFunction::new::().into(), + ), + ] + .into_iter(), + ); + Dictionary::new(context, types) +} diff --git a/interpreter/src/execution/values/closure.rs b/interpreter/src/execution/values/closure.rs index 306812e..25b0b12 100644 --- a/interpreter/src/execution/values/closure.rs +++ b/interpreter/src/execution/values/closure.rs @@ -54,6 +54,7 @@ impl BuiltinCallableDatabase { super::file::register_methods(&mut database); super::string::register_methods(&mut database); super::constraint_set::register_methods(&mut database); + super::manifold_mesh::register_methods_and_functions(&mut database); database } @@ -462,7 +463,7 @@ macro_rules! build_function_callable { #[macro_export] macro_rules! build_function { ($database:ident, - $ident:ident, $name:literal, ($context:ident: &ExecutionContext $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block + $ident:ty, $name:literal, ($context:ident: &ExecutionContext $(, $($arg:ident: $ty:path $(= $default:expr)?),+)?) -> $return_type:ty $code:block ) => {{ let callable = $crate::build_function_callable!($name ($context: &ExecutionContext $(, $($arg: $ty $(= $default)?),+)?) -> $return_type $code); diff --git a/interpreter/src/execution/values/manifold_mesh.rs b/interpreter/src/execution/values/manifold_mesh.rs new file mode 100644 index 0000000..ab53d7c --- /dev/null +++ b/interpreter/src/execution/values/manifold_mesh.rs @@ -0,0 +1,238 @@ +/* + * Copyright 2026 James Carl + * AGPL-3.0-only or AGPL-3.0-or-later + * + * This file is part of Command Cad. + * + * Command CAD is free software: you can redistribute it and/or modify it under the terms of + * the GNU Affero General Public License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this + * program. If not, see . + */ + +use boolmesh::prelude::*; +use common_data_types::{Dimension, RawFloat}; +use std::{borrow::Cow, sync::Arc}; + +use crate::{ + build_function, + execution::errors::{ExpressionResult, GenericFailure, Raise}, + values::{ + scalar::Length, vector::Length3, BuiltinCallableDatabase, DowncastForBinaryOpError, Object, + StaticType, StaticTypeName, Style, UnsignedInteger, Value, ValueType, Vector3, + }, + ExecutionContext, +}; + +#[derive(Debug, Clone)] +pub struct ManifoldMesh3D(Arc); + +impl Eq for ManifoldMesh3D {} + +impl PartialEq for ManifoldMesh3D { + fn eq(&self, other: &Self) -> bool { + // FIXME this is skipping a lot of information. + self.0.ps == other.0.ps + } +} + +impl Object for ManifoldMesh3D { + fn get_type(&self, _context: &ExecutionContext) -> ValueType { + ValueType::ManifoldMesh3D + } + + fn format( + &self, + _context: &ExecutionContext, + f: &mut dyn std::fmt::Write, + _style: Style, + _precision: Option, + ) -> std::fmt::Result { + write!( + f, + "Manifold Mesh with {} verticies, {} faces, and {} half-edges", + self.0.nv, self.0.nf, self.0.nh + ) + } + + fn addition(mut self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let input = Self::unpack_transform_input(context, 0.0, rhs)?; + let vector = input.raw_value(); + let manifold = Arc::make_mut(&mut self.0); + manifold.translate(vector.x, vector.y, vector.z); + Ok(self.into()) + } + + fn subtraction(mut self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let input = Self::unpack_transform_input(context, 0.0, rhs)?; + let vector = input.raw_value(); + let manifold = Arc::make_mut(&mut self.0); + manifold.translate(-vector.x, -vector.y, -vector.z); + Ok(self.into()) + } + + fn multiply(mut self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let input = Self::unpack_transform_input(context, 1.0, rhs)?; + let vector = input.raw_value(); + let manifold = Arc::make_mut(&mut self.0); + manifold.scale(vector.x, vector.y, vector.z); + Ok(self.into()) + } + + fn bit_or(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; + let manifold = compute_boolean(&self.0, &rhs.0, OpType::Add) + .map_err(|message| GenericFailure(message.into()).to_error(context.stack_trace))?; + Ok(Self(Arc::new(manifold)).into()) + } + + fn bit_xor(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; + let manifold = compute_boolean(&self.0, &rhs.0, OpType::Subtract) + .map_err(|message| GenericFailure(message.into()).to_error(context.stack_trace))?; + Ok(Self(Arc::new(manifold)).into()) + } + + fn bit_and(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { + let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; + let manifold = compute_boolean(&self.0, &rhs.0, OpType::Intersect) + .map_err(|message| GenericFailure(message.into()).to_error(context.stack_trace))?; + Ok(Self(Arc::new(manifold)).into()) + } +} + +impl ManifoldMesh3D { + fn unpack_transform_input( + context: &ExecutionContext, + default: RawFloat, + input: Value, + ) -> ExpressionResult { + let build_type_error = || { + DowncastForBinaryOpError { + expected: "Vector2 or Vector3 of lengths".into(), + got: input.get_type(context).name(), + } + .to_error(context.stack_trace) + }; + + let vector = match &input { + Value::Vector2(v) => { + let raw = v.raw_value(); + Vector3::new(context, v.dimension(), [raw.x, raw.y, default]) + } + Value::Vector3(v) => Ok(v.clone()), + _ => Err(build_type_error()), + }?; + + if vector.dimension() != Dimension::length() { + // Wrong dimension type. + Err(build_type_error()) + } else { + Ok(vector) + } + } +} + +impl StaticTypeName for ManifoldMesh3D { + fn static_type_name() -> Cow<'static, str> { + "ManifoldMesh3D".into() + } +} + +impl StaticType for ManifoldMesh3D { + fn static_type() -> ValueType { + ValueType::ManifoldMesh3D + } +} + +pub mod methods { + pub struct GenerateCone; + pub struct GenerateCube; + pub struct GenerateCylinder; + pub struct GenerateIcosphere; + pub struct GenerateTorus; + pub struct GenerateUvSphere; +} + +pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { + build_function!( + database, + methods::GenerateCone, "ManifoldMesh3D::cone", ( + context: &ExecutionContext, + apex: Length3, + center: Length3, + radius: Length, + divide: UnsignedInteger) -> ManifoldMesh3D + { + let manifold = generate_cone(apex.into(), center.into(), radius.into(), divide.0 as usize) + .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; + Ok(ManifoldMesh3D(Arc::new(manifold)).into()) + } + ); + build_function!( + database, + methods::GenerateCube, "ManifoldMesh3D::cube", (context: &ExecutionContext) -> ManifoldMesh3D + { + let manifold = generate_cube().map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; + Ok(ManifoldMesh3D(Arc::new(manifold)).into()) + } + ); + build_function!( + database, + methods::GenerateCylinder, "ManifoldMesh3D::cylinder", ( + context: &ExecutionContext, + radius: Length, + height: Length, + sectors: UnsignedInteger, + stacks: UnsignedInteger + ) -> ManifoldMesh3D + { + let manifold = generate_cylinder(radius.into(), height.into(), sectors.0 as usize, stacks.0 as usize) + .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; + Ok(ManifoldMesh3D(Arc::new(manifold)).into()) + } + ); + build_function!( + database, + methods::GenerateIcosphere, "ManifoldMesh3D::icosphere", ( + context: &ExecutionContext, + subdivions: UnsignedInteger) -> ManifoldMesh3D + { + let manifold = generate_icosphere(subdivions.0 as u32) + .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; + Ok(ManifoldMesh3D(Arc::new(manifold)).into()) + } + ); + build_function!( + database, + methods::GenerateTorus, "ManifoldMesh3D::torus", ( + context: &ExecutionContext, + major_radius: Length, + minor_raidus: Length, + rings: UnsignedInteger, + sectors: UnsignedInteger) -> ManifoldMesh3D + { + let manifold = generate_torus(major_radius.into(), minor_raidus.into(), rings.0 as usize, sectors.0 as usize) + .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; + Ok(ManifoldMesh3D(Arc::new(manifold)).into()) + } + ); + build_function!( + database, + methods::GenerateUvSphere, "ManifoldMesh3D::uv_sphere", ( + context: &ExecutionContext, + sectors: UnsignedInteger, + stacks: UnsignedInteger) -> ManifoldMesh3D + { + let manifold = generate_uv_sphere(sectors.0 as usize, stacks.0 as usize) + .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; + Ok(ManifoldMesh3D(Arc::new(manifold)).into()) + } + ); +} diff --git a/interpreter/src/execution/values/mod.rs b/interpreter/src/execution/values/mod.rs index d915aba..613275e 100644 --- a/interpreter/src/execution/values/mod.rs +++ b/interpreter/src/execution/values/mod.rs @@ -22,7 +22,10 @@ use enum_dispatch::enum_dispatch; use enum_downcast::{AsVariant, EnumDowncast, IntoVariant}; use unwrap_enum::EnumAs; -use crate::execution::{logging::StackTrace, stack::ScopeType, ExecutionContext}; +use crate::{ + execution::{logging::StackTrace, stack::ScopeType, ExecutionContext}, + values::manifold_mesh::ManifoldMesh3D, +}; use super::errors::{ErrorType, ExpressionResult, Raise as _}; @@ -59,6 +62,8 @@ pub use file::File; pub mod constraint_set; pub use constraint_set::ConstraintSet; +pub mod manifold_mesh; + mod value_type; pub use value_type::{StructDefinition, StructMember, ValueType}; @@ -288,6 +293,7 @@ pub enum Value { Vector4(Vector4), File, ConstraintSet, + ManifoldMesh3D, // Quaternion, } diff --git a/interpreter/src/execution/values/scalar.rs b/interpreter/src/execution/values/scalar.rs index b6fe868..d184884 100644 --- a/interpreter/src/execution/values/scalar.rs +++ b/interpreter/src/execution/values/scalar.rs @@ -869,7 +869,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { macro_rules! build_scalar_type { ($name:ident = $dimension:expr) => { - struct $name(Scalar); + pub struct $name(Scalar); impl StaticType for $name { fn static_type() -> ValueType { @@ -902,11 +902,18 @@ macro_rules! build_scalar_type { &self.0 } } + + impl Into for $name { + fn into(self) -> common_data_types::RawFloat { + *self.value + } + } }; } build_scalar_type!(Zero = Dimension::zero()); build_scalar_type!(Angle = Dimension::angle()); +build_scalar_type!(Length = Dimension::length()); #[cfg(test)] mod test { diff --git a/interpreter/src/execution/values/value_type.rs b/interpreter/src/execution/values/value_type.rs index 76fcf66..f2ed3cc 100644 --- a/interpreter/src/execution/values/value_type.rs +++ b/interpreter/src/execution/values/value_type.rs @@ -61,6 +61,7 @@ pub enum ValueType { File, Any, ConstraintSet(Arc>), + ManifoldMesh3D, } impl From for ValueType { @@ -93,6 +94,7 @@ impl ValueType { Self::String => IString::static_type_name().into(), Self::File => File::static_type_name().into(), Self::Any => "Any".into(), + Self::ManifoldMesh3D => "ManifoldMesh3D".into(), _ => format!("{}", self).into(), } } @@ -156,6 +158,7 @@ impl ValueType { }), } } + (Self::ManifoldMesh3D, Self::ManifoldMesh3D) => Ok(()), (Self::Any, _) => Ok(()), (expected, got) => { if expected == got { diff --git a/interpreter/src/execution/values/vector.rs b/interpreter/src/execution/values/vector.rs index dc0a1e6..f276534 100644 --- a/interpreter/src/execution/values/vector.rs +++ b/interpreter/src/execution/values/vector.rs @@ -218,6 +218,14 @@ where } } + pub fn dimension(&self) -> Dimension { + self.dimension + } + + pub fn raw_value(&self) -> I { + self.value + } + fn unpack_same_dimension(self, stack_trace: &StackTrace, rhs: Value) -> ExpressionResult { let rhs: Vector = rhs.downcast_for_binary_op(stack_trace)?; @@ -715,6 +723,15 @@ impl StaticType for nalgebra::Vector2 { } } +impl Into for Vector2 { + fn into(self) -> boolmesh::Vec2 { + boolmesh::Vec2 { + x: self.value.x, + y: self.value.y, + } + } +} + impl VectorInternalType for nalgebra::Vector3 { type BuildFrom = [Float; 3]; type NodeType = compile::Vector3; @@ -840,6 +857,16 @@ impl StaticType for nalgebra::Vector3 { } } +impl Into for Vector3 { + fn into(self) -> boolmesh::Vec3 { + boolmesh::Vec3 { + x: self.value.x, + y: self.value.y, + z: self.value.z, + } + } +} + impl VectorInternalType for nalgebra::Vector4 { type BuildFrom = [Float; 4]; type NodeType = compile::Vector4; @@ -972,6 +999,76 @@ impl StaticType for nalgebra::Vector4 { } } +impl Into for Vector4 { + fn into(self) -> boolmesh::Vec4 { + boolmesh::Vec4 { + x: self.value.x, + y: self.value.y, + z: self.value.z, + w: self.value.w, + } + } +} + +macro_rules! equivalent_boolmesh_vector { + (Vector2) => { + boolmesh::Vec2 + }; + (Vector3) => { + boolmesh::Vec3 + }; + (Vector4) => { + boolmesh::Vec4 + }; +} + +macro_rules! build_vector_type { + ($name:ident: $type:tt = $dimension:expr) => { + pub struct $name($type); + + impl StaticTypeName for $name { + fn static_type_name() -> Cow<'static, str> { + stringify!($name).into() + } + } + + impl StaticType for $name { + fn static_type() -> ValueType { + ValueType::$type(Some($dimension)) + } + } + + impl enum_downcast::IntoVariant<$name> for Value { + fn into_variant(self) -> Result<$name, Value> { + Ok($name(self.into_variant()?)) + } + } + + impl Into<$type> for $name { + fn into(self) -> $type { + self.0 + } + } + + impl Into for $name { + fn into(self) -> equivalent_boolmesh_vector!($type) { + self.0.into() + } + } + + impl std::ops::Deref for $name { + type Target = $type; + + fn deref(&self) -> &Self::Target { + &self.0 + } + } + }; +} + +build_vector_type!(Length2: Vector2 = Dimension::length()); +build_vector_type!(Length3: Vector3 = Dimension::length()); + #[cfg(test)] mod test { use crate::execution::{test_context, test_run, values::Boolean}; From ad29868c80179ba0e756bfa5e7e3e8dd9f2add59 Mon Sep 17 00:00:00 2001 From: James Carl Date: Tue, 10 Feb 2026 22:29:52 -0500 Subject: [PATCH 094/106] Do not spawn a new store with every repl line --- cli/src/main.rs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/cli/src/main.rs b/cli/src/main.rs index e9fa8c3..4c2fcc9 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -82,13 +82,24 @@ fn repl() -> Result<()> { let database = BuiltinCallableDatabase::new(); let prelude = build_prelude(&database).context("Failed to build prelude")?; + let store_directory = TempDir::new().unwrap(); + let store = Store::new(store_directory.path()); + + println!("Store is located at {:?}", store_directory.path()); + println!("Store will be deleted on exit."); + loop { let sig = line_editor.read_line(&prompt); match sig { Ok(Signal::Success(input)) => { - if let Err(error) = - run_line(&mut parser, &prelude, &database, &repl_file, input.as_str()) - { + if let Err(error) = run_line( + &mut parser, + &prelude, + &database, + &store, + &repl_file, + input.as_str(), + ) { eprintln!("Failed to run line: {error}"); } } @@ -151,6 +162,7 @@ fn run_line( parser: &mut Parser, prelude: &HashMap, database: &BuiltinCallableDatabase, + store: &Store, repl_file: &Arc, input: &str, ) -> Result<()> { @@ -160,19 +172,13 @@ fn run_line( let root = compile(&repl_file, input, &tree).map_err(|error| anyhow!("Failed to compile: {error}"))?; - let store_directory = TempDir::new().unwrap(); - let store = Store::new(store_directory.path()); - - println!("Store is located at {:?}", store_directory.path()); - println!("Store will be deleted on exit."); - let log = StderrLog; let context = ExecutionContext { log: &log as &dyn RuntimeLog, stack_trace: &StackTrace::top(root.reference.clone()), stack: &StackScope::top(&prelude), database: &database, - store: &store, + store, }; if let Some(report) = build_syntax_errors(&tree, repl_file, root.reference.clone()) { From 261a3a42f53009cd7258a597730fa7c2c6077108 Mon Sep 17 00:00:00 2001 From: James Carl Date: Wed, 11 Feb 2026 00:03:27 -0500 Subject: [PATCH 095/106] STL files can be exported --- Cargo.lock | 26 ++++++ interpreter/Cargo.toml | 1 + interpreter/src/execution/values/file.rs | 22 +++--- .../src/execution/values/manifold_mesh.rs | 79 +++++++++++++++++-- 4 files changed, 114 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d203080..944e279 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -165,6 +165,12 @@ version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "cc" version = "1.2.53" @@ -659,6 +665,15 @@ version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" +[[package]] +name = "float-cmp" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8" +dependencies = [ + "num-traits", +] + [[package]] name = "fnv" version = "1.0.7" @@ -899,6 +914,7 @@ dependencies = [ "serde", "sha2", "stack", + "stl_io", "tempfile", "tree-sitter", "tree-sitter-command-cad-model", @@ -1794,6 +1810,16 @@ dependencies = [ "coalesce", ] +[[package]] +name = "stl_io" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da63e75b86345156b191c021b3ce2a13b973941ecdb8c70d6f00cbbfe0076ed7" +dependencies = [ + "byteorder", + "float-cmp", +] + [[package]] name = "streaming-iterator" version = "0.1.9" diff --git a/interpreter/Cargo.toml b/interpreter/Cargo.toml index e1c25b9..c2ed92b 100644 --- a/interpreter/Cargo.toml +++ b/interpreter/Cargo.toml @@ -29,6 +29,7 @@ sha2 = "0.10.9" serde = { version = "1.0.228", features = ["derive"] } hex = "0.4.3" boolmesh = { version = "0.1.7", features = ["rayon"] } +stl_io = "0.10.0" [build-dependencies] type-sitter-gen = "0.8" diff --git a/interpreter/src/execution/values/file.rs b/interpreter/src/execution/values/file.rs index a333c93..771e5c7 100644 --- a/interpreter/src/execution/values/file.rs +++ b/interpreter/src/execution/values/file.rs @@ -16,10 +16,9 @@ * program. If not, see . */ -use std::{borrow::Cow, io::Read, sync::Arc}; +use std::{borrow::Cow, path::PathBuf, sync::Arc}; use imstr::ImString; -use tempfile::NamedTempFile; use crate::{ build_method, @@ -32,18 +31,19 @@ use crate::{ }, ExecutionContext, }, + values::StaticType, }; #[derive(Debug, Clone)] pub struct File { - content: Arc, + pub path: Arc, } impl Eq for File {} impl PartialEq for File { fn eq(&self, other: &Self) -> bool { - self.content.path() == other.content.path() + self.path == other.path } } @@ -75,7 +75,7 @@ impl Object for File { }); } - write!(f, "{:?}", self.content.path()) + write!(f, "{:?}", self.path) } } @@ -85,6 +85,12 @@ impl StaticTypeName for File { } } +impl StaticType for File { + fn static_type() -> ValueType { + ValueType::File + } +} + mod methods { pub struct ToString; } @@ -96,10 +102,8 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { context: &ExecutionContext, this: File ) -> IString { - let mut file = this.content.reopen().map_err(|error| GenericFailure(format!("Failed to re-open file: {error:?}").into()).to_error(context.stack_trace))?; - - let mut content = String::new(); - file.read_to_string(&mut content).map_err(|error| GenericFailure(format!("File was not UTF8 encoded: {error:?}").into()).to_error(context.stack_trace))?; + let content = std::fs::read_to_string(this.path.as_path()) + .map_err(|error| GenericFailure(format!("Failed to read file to string: {error:?}").into()).to_error(context.stack_trace))?; Ok(IString(ImString::from(content))) } diff --git a/interpreter/src/execution/values/manifold_mesh.rs b/interpreter/src/execution/values/manifold_mesh.rs index ab53d7c..70a6abe 100644 --- a/interpreter/src/execution/values/manifold_mesh.rs +++ b/interpreter/src/execution/values/manifold_mesh.rs @@ -18,14 +18,18 @@ use boolmesh::prelude::*; use common_data_types::{Dimension, RawFloat}; -use std::{borrow::Cow, sync::Arc}; +use std::{borrow::Cow, io::Write as _, sync::Arc}; use crate::{ - build_function, - execution::errors::{ExpressionResult, GenericFailure, Raise}, + build_function, build_method, + execution::{ + errors::{ExpressionResult, GenericFailure, Raise}, + store::IoError, + }, values::{ - scalar::Length, vector::Length3, BuiltinCallableDatabase, DowncastForBinaryOpError, Object, - StaticType, StaticTypeName, Style, UnsignedInteger, Value, ValueType, Vector3, + scalar::Length, vector::Length3, BuiltinCallableDatabase, BuiltinFunction, + DowncastForBinaryOpError, File, IString, MissingAttributeError, Object, StaticType, + StaticTypeName, Style, UnsignedInteger, Value, ValueType, Vector3, }, ExecutionContext, }; @@ -42,6 +46,17 @@ impl PartialEq for ManifoldMesh3D { } } +impl std::hash::Hash for ManifoldMesh3D { + fn hash(&self, state: &mut H) { + // FIXME this is skipping a lot of information. + self.0.ps.iter().for_each(|v| { + v.x.to_le_bytes().hash(state); + v.y.to_le_bytes().hash(state); + v.z.to_le_bytes().hash(state); + }); + } +} + impl Object for ManifoldMesh3D { fn get_type(&self, _context: &ExecutionContext) -> ValueType { ValueType::ManifoldMesh3D @@ -105,6 +120,20 @@ impl Object for ManifoldMesh3D { .map_err(|message| GenericFailure(message.into()).to_error(context.stack_trace))?; Ok(Self(Arc::new(manifold)).into()) } + + fn get_attribute( + &self, + context: &ExecutionContext, + attribute: &str, + ) -> ExpressionResult { + match attribute { + "to_stl" => Ok(BuiltinFunction::new::().into()), + _ => Err(MissingAttributeError { + name: attribute.into(), + } + .to_error(context.stack_trace)), + } + } } impl ManifoldMesh3D { @@ -158,6 +187,8 @@ pub mod methods { pub struct GenerateIcosphere; pub struct GenerateTorus; pub struct GenerateUvSphere; + + pub struct ToStl; } pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { @@ -235,4 +266,42 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { Ok(ManifoldMesh3D(Arc::new(manifold)).into()) } ); + + build_method!( + database, + methods::ToStl, "ManifoldMesh3D::to_stl", (context: &ExecutionContext, this: ManifoldMesh3D, name: IString) -> File { + let mut mesh = Vec::new(); + + use stl_io::{Triangle, Vertex, write_stl}; + + for (face_id, halfedge) in this.0.hs.chunks(3).enumerate() { + let p0 = this.0.ps[halfedge[0].tail]; + let p1 = this.0.ps[halfedge[1].tail]; + let p2 = this.0.ps[halfedge[2].tail]; + let normal = this.0.face_normals[face_id]; + + let triangle = Triangle { + normal: Vertex::new([normal.x as f32, normal.y as f32, normal.z as f32]), + vertices: [Vertex::new([p0.x as f32, p0.y as f32, p0.z as f32]), + Vertex::new([p1.x as f32, p1.y as f32, p1.z as f32]), + Vertex::new([p2.x as f32, p2.y as f32, p2.z as f32])] + }; + + mesh.push(triangle); + } + + // This thing doesn't kick back IO errors, so we'll collect to an infaulable + // structure and then write that ourselves. + let mut serialized = Vec::new(); + write_stl(&mut serialized, mesh.iter()).map_err(|_| GenericFailure("Failed to serialize STL file".into()).to_error(context.stack_trace))?; + + let path = context.store.get_or_init_file(context, &this, format!("{}.stl", name.0), |file| { + file.write_all(&serialized).map_err(|error| IoError(error).to_error(context.stack_trace))?; + + Ok(()) + })?; + + Ok(File { path: Arc::new(path) }) + } + ); } From a7ea08c91940d44ed6b36fb0de730261963e5311 Mon Sep 17 00:00:00 2001 From: James Carl Date: Wed, 11 Feb 2026 21:49:47 -0500 Subject: [PATCH 096/106] Support exporting ascii stls --- .../src/execution/values/manifold_mesh.rs | 121 +++++++++++++----- 1 file changed, 91 insertions(+), 30 deletions(-) diff --git a/interpreter/src/execution/values/manifold_mesh.rs b/interpreter/src/execution/values/manifold_mesh.rs index 70a6abe..1e84a97 100644 --- a/interpreter/src/execution/values/manifold_mesh.rs +++ b/interpreter/src/execution/values/manifold_mesh.rs @@ -17,8 +17,12 @@ */ use boolmesh::prelude::*; -use common_data_types::{Dimension, RawFloat}; -use std::{borrow::Cow, io::Write as _, sync::Arc}; +use common_data_types::{Dimension, Float, RawFloat}; +use std::{ + borrow::Cow, + io::{BufWriter, Write as _}, + sync::Arc, +}; use crate::{ build_function, build_method, @@ -27,9 +31,11 @@ use crate::{ store::IoError, }, values::{ - scalar::Length, vector::Length3, BuiltinCallableDatabase, BuiltinFunction, - DowncastForBinaryOpError, File, IString, MissingAttributeError, Object, StaticType, - StaticTypeName, Style, UnsignedInteger, Value, ValueType, Vector3, + scalar::{Length, UnwrapNotNan}, + vector::Length3, + Boolean, BuiltinCallableDatabase, BuiltinFunction, DowncastForBinaryOpError, File, IString, + MissingAttributeError, Object, Scalar, StaticType, StaticTypeName, Style, UnsignedInteger, + Value, ValueType, Vector3, }, ExecutionContext, }; @@ -269,39 +275,94 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { build_method!( database, - methods::ToStl, "ManifoldMesh3D::to_stl", (context: &ExecutionContext, this: ManifoldMesh3D, name: IString) -> File { - let mut mesh = Vec::new(); + methods::ToStl, "ManifoldMesh3D::to_stl", ( + context: &ExecutionContext, + this: ManifoldMesh3D, + name: IString, + scale: Length = Scalar { + dimension: Dimension::length(), + value: Float::new(1.0/1000.0).expect("Default stl scale was NaN") + }.into(), + ascii: Boolean = Boolean(false).into() + ) -> File { + if !ascii.0 { + // Produce a binary STL + let mut mesh = Vec::new(); - use stl_io::{Triangle, Vertex, write_stl}; + use stl_io::{Triangle, Vertex, write_stl}; - for (face_id, halfedge) in this.0.hs.chunks(3).enumerate() { - let p0 = this.0.ps[halfedge[0].tail]; - let p1 = this.0.ps[halfedge[1].tail]; - let p2 = this.0.ps[halfedge[2].tail]; - let normal = this.0.face_normals[face_id]; + for (normal, halfedge) in this.0.face_normals.iter().zip(this.0.hs.chunks(3)) { + let p0 = this.0.ps[halfedge[0].tail]; + let p1 = this.0.ps[halfedge[1].tail]; + let p2 = this.0.ps[halfedge[2].tail]; - let triangle = Triangle { - normal: Vertex::new([normal.x as f32, normal.y as f32, normal.z as f32]), - vertices: [Vertex::new([p0.x as f32, p0.y as f32, p0.z as f32]), - Vertex::new([p1.x as f32, p1.y as f32, p1.z as f32]), - Vertex::new([p2.x as f32, p2.y as f32, p2.z as f32])] - }; + let scale = 1.0 / *scale.value; - mesh.push(triangle); - } + let triangle = Triangle { + normal: Vertex::new([(normal.x * scale) as f32, (normal.y * scale) as f32, (normal.z * scale) as f32]), + vertices: [Vertex::new([(p0.x * scale) as f32, (p0.y * scale) as f32, (p0.z * scale) as f32]), + Vertex::new([(p1.x * scale) as f32, (p1.y * scale) as f32, (p1.z * scale) as f32]), + Vertex::new([(p2.x * scale) as f32, (p2.y * scale) as f32, (p2.z * scale) as f32])] + }; + + mesh.push(triangle); + } + + // This thing doesn't kick back IO errors, so we'll collect to an infaulable + // structure and then write that ourselves. + let mut serialized = Vec::new(); + write_stl(&mut serialized, mesh.iter()).map_err(|_| GenericFailure("Failed to serialize STL file".into()).to_error(context.stack_trace))?; + + let path = context.store.get_or_init_file(context, &(&this, "ascii"), format!("{}.stl", name.0), |file| { + file.write_all(&serialized).map_err(|error| IoError(error).to_error(context.stack_trace))?; + + Ok(()) + })?; + + Ok(File { path: Arc::new(path) }) + } else { + let path = context.store.get_or_init_file(context, &(&this, "binary"), format!("{}.stl", name.0), |file| { + let mut file = BufWriter::new(file); + let scale = *Float::new(1.0 / *scale.value).unwrap_not_nan(context.stack_trace)?; + + // file.write_all(&serialized).map_err(|error| IoError(error).to_error(context.stack_trace))?; + let mut trampoline = || -> std::io::Result<()> { + writeln!(file, "solid {}", name.0)?; - // This thing doesn't kick back IO errors, so we'll collect to an infaulable - // structure and then write that ourselves. - let mut serialized = Vec::new(); - write_stl(&mut serialized, mesh.iter()).map_err(|_| GenericFailure("Failed to serialize STL file".into()).to_error(context.stack_trace))?; + for (normal, halfedge) in this.0.face_normals.iter().zip(this.0.hs.chunks(3)) { + let p0 = this.0.ps[halfedge[0].tail]; + let p1 = this.0.ps[halfedge[1].tail]; + let p2 = this.0.ps[halfedge[2].tail]; - let path = context.store.get_or_init_file(context, &this, format!("{}.stl", name.0), |file| { - file.write_all(&serialized).map_err(|error| IoError(error).to_error(context.stack_trace))?; + writeln!(file, "\tfacet normal {} {} {}", normal.x, normal.y, normal.z)?; - Ok(()) - })?; + { + writeln!(file, "\t\touter loop")?; - Ok(File { path: Arc::new(path) }) + { + writeln!(file, "\t\t\tvertex {} {} {}", p0.x * scale, p0.y * scale, p0.z * scale)?; + writeln!(file, "\t\t\tvertex {} {} {}", p1.x * scale, p1.y * scale, p1.z * scale)?; + writeln!(file, "\t\t\tvertex {} {} {}", p2.x * scale, p2.y * scale, p2.z * scale)?; + } + + writeln!(file, "\t\tendloop")?; + } + + writeln!(file, "\tendfacet")?; + } + + writeln!(file, "endsolid {}", name.0)?; + + Ok(()) + }; + + trampoline().map_err(|error| IoError(error).to_error(context.stack_trace))?; + + Ok(()) + })?; + + Ok(File { path: Arc::new(path) }) + } } ); } From b300af351b0ba5c7cb35fa5244afce2d6365cb4c Mon Sep 17 00:00:00 2001 From: James Carl Date: Thu, 12 Feb 2026 03:01:28 -0500 Subject: [PATCH 097/106] QOL fixes for mesh creation --- .../src/execution/values/manifold_mesh.rs | 81 ++++++++++++++----- interpreter/src/execution/values/scalar.rs | 1 + interpreter/src/execution/values/vector.rs | 1 + 3 files changed, 62 insertions(+), 21 deletions(-) diff --git a/interpreter/src/execution/values/manifold_mesh.rs b/interpreter/src/execution/values/manifold_mesh.rs index 1e84a97..a9cd8d3 100644 --- a/interpreter/src/execution/values/manifold_mesh.rs +++ b/interpreter/src/execution/values/manifold_mesh.rs @@ -32,10 +32,10 @@ use crate::{ }, values::{ scalar::{Length, UnwrapNotNan}, - vector::Length3, - Boolean, BuiltinCallableDatabase, BuiltinFunction, DowncastForBinaryOpError, File, IString, + vector::{Length3, Zero3}, + Boolean, BuiltinCallableDatabase, BuiltinFunction, DowncastError, File, IString, MissingAttributeError, Object, Scalar, StaticType, StaticTypeName, Style, UnsignedInteger, - Value, ValueType, Vector3, + Value, ValueNone, ValueType, Vector3, }, ExecutionContext, }; @@ -99,7 +99,7 @@ impl Object for ManifoldMesh3D { } fn multiply(mut self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let input = Self::unpack_transform_input(context, 1.0, rhs)?; + let input = rhs.downcast::(context.stack_trace)?; let vector = input.raw_value(); let manifold = Arc::make_mut(&mut self.0); manifold.scale(vector.x, vector.y, vector.z); @@ -149,7 +149,7 @@ impl ManifoldMesh3D { input: Value, ) -> ExpressionResult { let build_type_error = || { - DowncastForBinaryOpError { + DowncastError { expected: "Vector2 or Vector3 of lengths".into(), got: input.get_type(context).name(), } @@ -197,6 +197,28 @@ pub mod methods { pub struct ToStl; } +fn unpack_radius( + context: &ExecutionContext, + radius: Option, + diameter: Option, +) -> ExpressionResult { + match (radius, diameter) { + (Some(radius), Option::None) => Ok(radius.into()), + (Option::None, Some(diameter)) => { + let diameter: RawFloat = diameter.into(); + Ok(diameter / 2.0) + } + (Some(_), Some(_)) => Err(GenericFailure( + "You must provide the radius or the diameter, not both".into(), + ) + .to_error(context.stack_trace)), + (Option::None, Option::None) => Err(GenericFailure( + "You must provide the radius or the diameter, neither were provided".into(), + ) + .to_error(context.stack_trace)), + } +} + pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { build_function!( database, @@ -204,10 +226,13 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { context: &ExecutionContext, apex: Length3, center: Length3, - radius: Length, + radius: Option = ValueNone.into(), + diameter: Option = ValueNone.into(), divide: UnsignedInteger) -> ManifoldMesh3D { - let manifold = generate_cone(apex.into(), center.into(), radius.into(), divide.0 as usize) + let radius = unpack_radius(context, radius, diameter)?; + + let manifold = generate_cone(apex.into(), center.into(), radius, divide.0 as usize) .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; Ok(ManifoldMesh3D(Arc::new(manifold)).into()) } @@ -224,13 +249,15 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { database, methods::GenerateCylinder, "ManifoldMesh3D::cylinder", ( context: &ExecutionContext, - radius: Length, + radius: Option = ValueNone.into(), + diameter: Option = ValueNone.into(), height: Length, sectors: UnsignedInteger, stacks: UnsignedInteger - ) -> ManifoldMesh3D - { - let manifold = generate_cylinder(radius.into(), height.into(), sectors.0 as usize, stacks.0 as usize) + ) -> ManifoldMesh3D { + let radius = unpack_radius(context, radius, diameter)?; + + let manifold = generate_cylinder(radius, height.into(), sectors.0 as usize, stacks.0 as usize) .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; Ok(ManifoldMesh3D(Arc::new(manifold)).into()) } @@ -239,10 +266,16 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { database, methods::GenerateIcosphere, "ManifoldMesh3D::icosphere", ( context: &ExecutionContext, - subdivions: UnsignedInteger) -> ManifoldMesh3D - { - let manifold = generate_icosphere(subdivions.0 as u32) + subdivions: UnsignedInteger, + radius: Option = ValueNone.into(), + diameter: Option = ValueNone.into() + ) -> ManifoldMesh3D { + let scale = unpack_radius(context, radius, diameter)?; + + let mut manifold = generate_icosphere(subdivions.0 as u32) .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; + manifold.scale(scale, scale, scale); + Ok(ManifoldMesh3D(Arc::new(manifold)).into()) } ); @@ -253,8 +286,8 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { major_radius: Length, minor_raidus: Length, rings: UnsignedInteger, - sectors: UnsignedInteger) -> ManifoldMesh3D - { + sectors: UnsignedInteger + ) -> ManifoldMesh3D { let manifold = generate_torus(major_radius.into(), minor_raidus.into(), rings.0 as usize, sectors.0 as usize) .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; Ok(ManifoldMesh3D(Arc::new(manifold)).into()) @@ -265,10 +298,16 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { methods::GenerateUvSphere, "ManifoldMesh3D::uv_sphere", ( context: &ExecutionContext, sectors: UnsignedInteger, - stacks: UnsignedInteger) -> ManifoldMesh3D - { - let manifold = generate_uv_sphere(sectors.0 as usize, stacks.0 as usize) + stacks: UnsignedInteger, + radius: Option = ValueNone.into(), + diameter: Option = ValueNone.into() + ) -> ManifoldMesh3D { + let scale = unpack_radius(context, radius, diameter)?; + + let mut manifold = generate_uv_sphere(sectors.0 as usize, stacks.0 as usize) .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; + manifold.scale(scale, scale, scale); + Ok(ManifoldMesh3D(Arc::new(manifold)).into()) } ); @@ -313,7 +352,7 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { let mut serialized = Vec::new(); write_stl(&mut serialized, mesh.iter()).map_err(|_| GenericFailure("Failed to serialize STL file".into()).to_error(context.stack_trace))?; - let path = context.store.get_or_init_file(context, &(&this, "ascii"), format!("{}.stl", name.0), |file| { + let path = context.store.get_or_init_file(context, &(&this, &scale, "ascii"), format!("{}.stl", name.0), |file| { file.write_all(&serialized).map_err(|error| IoError(error).to_error(context.stack_trace))?; Ok(()) @@ -321,7 +360,7 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { Ok(File { path: Arc::new(path) }) } else { - let path = context.store.get_or_init_file(context, &(&this, "binary"), format!("{}.stl", name.0), |file| { + let path = context.store.get_or_init_file(context, &(&this, &scale, "binary"), format!("{}.stl", name.0), |file| { let mut file = BufWriter::new(file); let scale = *Float::new(1.0 / *scale.value).unwrap_not_nan(context.stack_trace)?; diff --git a/interpreter/src/execution/values/scalar.rs b/interpreter/src/execution/values/scalar.rs index d184884..52ef026 100644 --- a/interpreter/src/execution/values/scalar.rs +++ b/interpreter/src/execution/values/scalar.rs @@ -869,6 +869,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { macro_rules! build_scalar_type { ($name:ident = $dimension:expr) => { + #[derive(Debug, Hash, Clone)] pub struct $name(Scalar); impl StaticType for $name { diff --git a/interpreter/src/execution/values/vector.rs b/interpreter/src/execution/values/vector.rs index f276534..279f79c 100644 --- a/interpreter/src/execution/values/vector.rs +++ b/interpreter/src/execution/values/vector.rs @@ -1066,6 +1066,7 @@ macro_rules! build_vector_type { }; } +build_vector_type!(Zero3: Vector3 = Dimension::length()); build_vector_type!(Length2: Vector2 = Dimension::length()); build_vector_type!(Length3: Vector3 = Dimension::length()); From 08cfaa5a57db183abc93d87d9cae7087b813d1fc Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 13 Feb 2026 15:13:19 -0500 Subject: [PATCH 098/106] Add support for building models from files --- .gitignore | 1 + Cargo.lock | 357 ++++++++++++++++++ Cargo.toml | 1 + cli/Cargo.toml | 1 + cli/src/arguments.rs | 4 + cli/src/main.rs | 102 ++++- examples/language/arithmatic.ccm | 9 + examples/language/closures.ccm | 6 + examples/language/lists.ccm | 5 + examples/language/methods.ccm | 7 + examples/language/vectors.ccm | 6 + examples/modeling/mesh3d.ccm | 6 + examples/other/string_formatting.ccm | 7 + interpreter/src/execution/logging.rs | 36 ++ interpreter/src/execution/mod.rs | 58 ++- .../src/execution/standard_environment.rs | 2 + .../src/execution/values/dictionary.rs | 1 + interpreter/src/lib.rs | 5 +- 18 files changed, 603 insertions(+), 11 deletions(-) create mode 100644 examples/language/arithmatic.ccm create mode 100644 examples/language/closures.ccm create mode 100644 examples/language/lists.ccm create mode 100644 examples/language/methods.ccm create mode 100644 examples/language/vectors.ccm create mode 100644 examples/modeling/mesh3d.ccm create mode 100644 examples/other/string_formatting.ccm diff --git a/.gitignore b/.gitignore index eb2dda0..8d4d81e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ *#*# .*#* .direnv +.ccad diff --git a/Cargo.lock b/Cargo.lock index 944e279..e1e2885 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -178,6 +178,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "755d2fce177175ffca841e9a06afdb2c4ab0f593d53b4dee48147dfaade85932" dependencies = [ "find-msvc-tools", + "jobserver", + "libc", "shlex", ] @@ -255,6 +257,7 @@ dependencies = [ "anyhow", "ariadne", "clap", + "git2", "interpreter", "nu-ansi-term", "reedline", @@ -525,6 +528,17 @@ dependencies = [ "objc2", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "document-features" version = "0.2.12" @@ -686,6 +700,15 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -718,6 +741,21 @@ dependencies = [ "wasip2", ] +[[package]] +name = "git2" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b" +dependencies = [ + "bitflags", + "libc", + "libgit2-sys", + "log", + "openssl-probe", + "openssl-sys", + "url", +] + [[package]] name = "glam" version = "0.14.0" @@ -874,6 +912,108 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" + +[[package]] +name = "icu_properties" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" + +[[package]] +name = "icu_provider" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + [[package]] name = "imstr" version = "0.2.0" @@ -954,6 +1094,16 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom", + "libc", +] + [[package]] name = "join-lazy-fmt" version = "0.9.2" @@ -1011,6 +1161,20 @@ version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" +[[package]] +name = "libgit2-sys" +version = "0.18.3+1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9b3acc4b91781bb0b3386669d325163746af5f6e4f73e6d2d630e09a35f3487" +dependencies = [ + "cc", + "libc", + "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", +] + [[package]] name = "libloading" version = "0.8.9" @@ -1021,12 +1185,44 @@ dependencies = [ "windows-link", ] +[[package]] +name = "libssh2-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "220e4f05ad4a218192533b300327f5150e809b54c4ec83b5a1d91833601811b9" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "linux-raw-sys" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +[[package]] +name = "litemap" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" + [[package]] name = "litrs" version = "1.0.0" @@ -1313,6 +1509,24 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "ordered-float" version = "4.6.0" @@ -1426,6 +1640,15 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "zerovec", +] + [[package]] name = "pretty_assertions" version = "1.4.1" @@ -1801,6 +2024,12 @@ version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + [[package]] name = "stack" version = "0.4.0" @@ -1877,6 +2106,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tempfile" version = "3.24.0" @@ -1946,6 +2186,16 @@ dependencies = [ "syn", ] +[[package]] +name = "tinystr" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tree-sitter" version = "0.25.10" @@ -2120,12 +2370,36 @@ dependencies = [ "syn", ] +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[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.5" @@ -2487,6 +2761,12 @@ dependencies = [ "wayland-protocols-wlr", ] +[[package]] +name = "writeable" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" + [[package]] name = "x11rb" version = "0.13.2" @@ -2510,6 +2790,83 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" +[[package]] +name = "yoke" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "zmij" version = "1.0.14" diff --git a/Cargo.toml b/Cargo.toml index d65f730..c3e2959 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,3 +23,4 @@ ariadne = "0.6.0" type-sitter = "0.8" tree-sitter = "0.25" tempfile = "3" +git2 = "0.20" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 1e4c03c..a3a5d02 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -14,3 +14,4 @@ type-sitter = { workspace = true } tree-sitter = { workspace = true } nu-ansi-term = "0.50.3" tempfile = { workspace = true } +git2 = { workspace = true } diff --git a/cli/src/arguments.rs b/cli/src/arguments.rs index 8ea180b..0527e14 100644 --- a/cli/src/arguments.rs +++ b/cli/src/arguments.rs @@ -1,4 +1,5 @@ use clap::{Parser, Subcommand}; +use std::path::PathBuf; #[derive(Parser)] #[command(version, about, long_about = None)] @@ -11,4 +12,7 @@ pub struct Arguments { pub enum Commands { /// Enter read-eval-print loop Repl, + + /// Evaluate a single file and whatever local dependencies it may reference + File { file: PathBuf }, } diff --git a/cli/src/main.rs b/cli/src/main.rs index 4c2fcc9..9c2980d 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -1,10 +1,15 @@ -use std::{collections::HashMap, path::PathBuf, sync::Arc}; +use std::{ + collections::HashMap, + path::PathBuf, + sync::{Arc, Mutex}, +}; mod arguments; -use anyhow::{anyhow, Context, Result}; +use anyhow::{anyhow, bail, Context, Result}; use arguments::Arguments; use ariadne::{Cache, Label, Report, ReportKind, Source}; use clap::Parser as _; +use git2::Repository; use reedline::{DefaultHinter, DefaultPrompt, Reedline, Signal}; use tempfile::TempDir; use type_sitter::Node as _; @@ -16,10 +21,10 @@ use interpreter::{ compile::{compile, iter_raw_nodes}, execute_expression, execution::values::BuiltinCallableDatabase, - new_parser, + new_parser, run_file, values::{Object, Style, Value}, - ExecutionContext, ImString, LogMessage, Parser, RuntimeLog, SourceReference, StackScope, - StackTrace, Store, + ExecutionContext, ExecutionFileCache, ImString, LogMessage, Parser, RuntimeLog, + SourceReference, StackScope, StackTrace, Store, }; fn main() { @@ -27,6 +32,7 @@ fn main() { let result = match arguments.command { Commands::Repl => repl(), + Commands::File { file } => process_file(file), }; if let Err(error) = result { @@ -46,6 +52,88 @@ impl RuntimeLog for StderrLog { eprintln!("{}: {}: {}", level_char, message.origin, message); } + + fn collect_syntax_errors<'t>( + &self, + input: &str, + tree: &'t interpreter::compile::RootTree, + file: &'t Arc, + span: SourceReference, + ) { + if let Some(report) = build_syntax_errors(&tree, file, span) { + if let Err(error) = report.eprint(ReplFileCache(Source::from(input))) { + eprintln!("Failed to print syntax error message: {error}"); + } + } + } +} + +fn process_file(file: PathBuf) -> Result<()> { + if !file.exists() { + bail!("File does not exist"); + } + + if file.is_dir() { + bail!("File is a directory"); + } + + let database = BuiltinCallableDatabase::new(); + let prelude = build_prelude(&database).context("Failed to build prelude")?; + + let parent = file + .parent() + .context("Could not get parent directory of file")?; + + let store_directory = match Repository::discover(parent) { + Ok(repository) => { + let git_directory = repository.path(); + let project_directory = git_directory + .parent() + .context("Failed to get parent directory of .git")?; + project_directory.join(".ccad/store") + } + Err(error) => { + eprintln!("Failed to discover project directory (is this project in a git repository?): {error}"); + eprintln!("Current directory will be used for the store."); + PathBuf::from("./.ccad/store") + } + }; + std::fs::create_dir_all(&store_directory).context("Failed to create store directory")?; + + let store = Store::new(store_directory); + let log = StderrLog; + let files = Mutex::new(HashMap::new()); + + let context = ExecutionContext { + log: &log as &dyn RuntimeLog, + stack_trace: &StackTrace::bootstrap(), + stack: &StackScope::top(&prelude), + database: &database, + store: &store, + file_cache: &files, + }; + + let result = run_file(&context, file); + match result { + Ok(result) => { + let mut output = String::new(); + result + .format(&context, &mut output, Style::Default, None) + .context("Failed to write output to display")?; + + println!("{output}"); + } + Err(error) => { + let file_cache = context.file_cache.lock().expect("File cache was poisoned"); + + let report = error.report(); + report + .eprint(ExecutionFileCache(&*file_cache)) + .context("Failed to format error message")?; + } + } + + Ok(()) } struct ReplFileCache<'i>(Source<&'i str>); @@ -173,12 +261,15 @@ fn run_line( compile(&repl_file, input, &tree).map_err(|error| anyhow!("Failed to compile: {error}"))?; let log = StderrLog; + let files = Mutex::new(HashMap::new()); + let context = ExecutionContext { log: &log as &dyn RuntimeLog, stack_trace: &StackTrace::top(root.reference.clone()), stack: &StackScope::top(&prelude), database: &database, store, + file_cache: &files, }; if let Some(report) = build_syntax_errors(&tree, repl_file, root.reference.clone()) { @@ -188,7 +279,6 @@ fn run_line( } let result = execute_expression(&context, &root); - match result { Ok(result) => { let mut output = String::new(); diff --git a/examples/language/arithmatic.ccm b/examples/language/arithmatic.ccm new file mode 100644 index 0000000..30cabfc --- /dev/null +++ b/examples/language/arithmatic.ccm @@ -0,0 +1,9 @@ +# Perform some basic arithmatic with units. +[ + 1 + 1, + 1m + 1m, + 1m * 1m, + 1m * 2, + 1ft + 1m, + (32768Mb - 8Gb) / 1Mb +] diff --git a/examples/language/closures.ccm b/examples/language/closures.ccm new file mode 100644 index 0000000..7979d67 --- /dev/null +++ b/examples/language/closures.ccm @@ -0,0 +1,6 @@ +# Show the feature set of closures. +[ + let fn = () -> std.scalar.Length: 5m; in fn(), + let fn = (input: std.scalar.Length) -> std.scalar.Length: input * 2; in fn(input = 2m), + let x = 5; fn = (input: std.scalar.Length) -> std.scalar.Length: input * x; in fn(input = 2m), # Closure capture +] diff --git a/examples/language/lists.ccm b/examples/language/lists.ccm new file mode 100644 index 0000000..dabd845 --- /dev/null +++ b/examples/language/lists.ccm @@ -0,0 +1,5 @@ +[ + [1, 2, 3, 4] * 1m, # An arithmetic operation applied to a list is applied to all its members + [1, 2, 3, 4]::map(f = (c: std.scalar.Number) -> std.scalar.Length: c * 2m + 1ft), # Map values in a list, producing a new list of the mapped values + [1, 2, 3, 4]::fold(init = 0, f = (previous: std.scalar.Number, c: std.scalar.Number) -> std.scalar.Number: previous + c) # Fold all values of the list into a single value +] diff --git a/examples/language/methods.ccm b/examples/language/methods.ccm new file mode 100644 index 0000000..33cef97 --- /dev/null +++ b/examples/language/methods.ccm @@ -0,0 +1,7 @@ +# Call methods on objects +[ + 5deg::sin(), + 1rad::sin(), + 9::cbrt(), + 9 'm^3'::cbrt() +] diff --git a/examples/language/vectors.ccm b/examples/language/vectors.ccm new file mode 100644 index 0000000..ce0ae6a --- /dev/null +++ b/examples/language/vectors.ccm @@ -0,0 +1,6 @@ +[ + <(1, 2)>, <(1, 2, 3)>, <(1, 2, 3, 4)>, # Three different sizes of vector are available + <(1m, 2m, 3m)>, # Vectors can have units + <(1, 2, 3)> * 1m, # Arithmetic operations on the vector are applied to the vector's components. + [<(1, 2, 3)>, <(4, 5, 6)>, <(7, 8, 9)>, <(10, 11, 12)>] * 1mm # Use this with a list to mass-apply a unit +] diff --git a/examples/modeling/mesh3d.ccm b/examples/modeling/mesh3d.ccm new file mode 100644 index 0000000..cb40022 --- /dev/null +++ b/examples/modeling/mesh3d.ccm @@ -0,0 +1,6 @@ +[ + std.mesh3d.icosphere(subdivions = 5u, diameter = 2cm)::to_stl(name="my_sphere"), + (std.mesh3d.icosphere(subdivions = 5u, diameter = 2cm) | std.mesh3d.cube() + <(0.5m, 0m, 0m)>)::to_stl(name="my_cube_sphere_or"), + (std.mesh3d.icosphere(subdivions = 5u, diameter = 2cm) & std.mesh3d.cube() + <(0.5m, 0m, 0m)>)::to_stl(name="my_cube_sphere_and"), + (std.mesh3d.icosphere(subdivions = 5u, diameter = 2cm) ^ std.mesh3d.cube() + <(0.5m, 0m, 0m)>)::to_stl(name="my_cube_sphere_xor") +] diff --git a/examples/other/string_formatting.ccm b/examples/other/string_formatting.ccm new file mode 100644 index 0000000..64bc136 --- /dev/null +++ b/examples/other/string_formatting.ccm @@ -0,0 +1,7 @@ +let + a = 1m; + b = 1ft; + c = b / 1ft; # Units of measurement are always presented with their internal representation. You can use this trick to print them as a specific unit. + d = "hello"; +in + "{a} {b} {c}ft {d} {e}"::format(e = "world") diff --git a/interpreter/src/execution/logging.rs b/interpreter/src/execution/logging.rs index 45b9d3a..bae7068 100644 --- a/interpreter/src/execution/logging.rs +++ b/interpreter/src/execution/logging.rs @@ -16,8 +16,11 @@ * program. If not, see . */ +use ariadne::{Cache, Source}; +use imstr::ImString; use std::{ borrow::Cow, + collections::HashMap, fmt::Display, ops::{Deref, DerefMut}, path::PathBuf, @@ -29,12 +32,27 @@ use crate::compile::SourceReference; pub trait RuntimeLog: std::fmt::Debug + Send + Sync { fn push_message(&self, message: LogMessage); + fn collect_syntax_errors<'t>( + &self, + input: &str, + tree: &'t crate::compile::RootTree, + file: &'t Arc, + span: SourceReference, + ); } impl RuntimeLog for Mutex> { fn push_message(&self, message: LogMessage) { self.lock().expect("Log was poisoned").push(message); } + fn collect_syntax_errors<'t>( + &self, + _input: &str, + _tree: &'t crate::compile::RootTree, + _file: &'t Arc, + _span: SourceReference, + ) { + } } #[derive(Debug, Clone)] @@ -232,3 +250,21 @@ pub enum LogLevel { Info, Warning, } + +pub struct ExecutionFileCache<'i>(pub &'i HashMap, Source>); + +impl<'i> Cache> for ExecutionFileCache<'i> { + type Storage = ImString; + + fn fetch(&mut self, id: &Arc) -> Result<&Source, impl std::fmt::Debug> { + if let Some(source) = self.0.get(id) { + Ok(source) + } else { + Err("File was never loaded during execution") + } + } + + fn display<'a>(&self, id: &'a Arc) -> Option { + Some(id.as_path().display().to_string()) + } +} diff --git a/interpreter/src/execution/mod.rs b/interpreter/src/execution/mod.rs index 5ab7a8a..13a7123 100644 --- a/interpreter/src/execution/mod.rs +++ b/interpreter/src/execution/mod.rs @@ -16,7 +16,12 @@ * program. If not, see . */ -use std::{cmp::Ordering, collections::HashMap}; +use std::{ + cmp::Ordering, + collections::HashMap, + path::PathBuf, + sync::{Arc, Mutex}, +}; use crate::{ compile::{self, AstNode, BinaryExpressionOperation, Expression, UnaryExpressionOperation}, @@ -25,10 +30,12 @@ use crate::{ stack::ScopeType, values::BuiltinCallableDatabase, }, + new_parser, values::{constraint_set::find_all_captured_variables_in_constraint_set, ConstraintSet}, SourceReference, }; +use ariadne::Source; use rayon::{join, prelude::*}; mod errors; @@ -37,10 +44,10 @@ mod logging; mod stack; mod standard_environment; pub mod values; -use errors::ExpressionResult; +pub use errors::ExpressionResult; use imstr::ImString; use logging::LocatedStr; -pub use logging::{LogLevel, LogMessage, RuntimeLog, StackTrace}; +pub use logging::{ExecutionFileCache, LogLevel, LogMessage, RuntimeLog, StackTrace}; pub use stack::StackScope; mod store; pub use store::Store; @@ -181,6 +188,7 @@ pub struct ExecutionContext<'c> { pub stack: &'c StackScope<'c>, pub database: &'c BuiltinCallableDatabase, pub store: &'c Store, + pub file_cache: &'c Mutex, Source>>, } impl<'c> ExecutionContext<'c> { @@ -527,17 +535,61 @@ pub(crate) fn test_context_custom_database( let store_directory = TempDir::new().unwrap(); let store = Store::new(store_directory.path()); + let file_cache = Mutex::new(HashMap::new()); + let context = ExecutionContext { log: &Mutex::new(Vec::new()), stack_trace: &StackTrace::test(), stack: &StackScope::top(&prelude), database: &database, store: &store, + file_cache: &file_cache, }; f(&context) } +pub fn run_file(context: &ExecutionContext, file: impl Into) -> ExpressionResult { + // TODO can/should we make the parser part of the execution context rather than build a new one + // every time we load a file? + let mut parser = new_parser(); + + let file = file.into(); + + let mut files = context.file_cache.lock().map_err(|_error| { + GenericFailure("Failed to lock file cache".into()).to_error(context.stack_trace) + })?; + let file = Arc::new(file); + let input = match files.entry(file.clone()) { + std::collections::hash_map::Entry::Occupied(entry) => entry, + std::collections::hash_map::Entry::Vacant(vacency) => { + let input = std::fs::read_to_string(file.as_path()).map_err(|error| { + GenericFailure(format!("Failed to read file {:?} from disk: {error}", file).into()) + .to_error(context.stack_trace) + })?; + let input = ImString::from(input); + + vacency.insert_entry(Source::from(input)) + } + }; + let input = input.get().text(); + + let tree = parser.parse(input, None).map_err(|error| { + GenericFailure(format!("Failed to parse input: {error:?}").into()) + .to_error(context.stack_trace) + })?; + + let root = crate::compile(&file, input, &tree).map_err(|error| { + GenericFailure(format!("Failed to compile: {error}").into()).to_error(context.stack_trace) + })?; + + context + .log + .collect_syntax_errors(&input, &tree, &file, root.reference.clone()); + + execute_expression(&context, &root) +} + #[cfg(test)] mod test { use hashable_map::HashableMap; diff --git a/interpreter/src/execution/standard_environment.rs b/interpreter/src/execution/standard_environment.rs index 03c5b6c..267ad40 100644 --- a/interpreter/src/execution/standard_environment.rs +++ b/interpreter/src/execution/standard_environment.rs @@ -43,6 +43,7 @@ pub fn build_prelude( let prelude = HashMap::new(); let store_directory = TempDir::new()?; let store = Store::new(store_directory.path()); + let file_cache = Mutex::new(HashMap::new()); let context = ExecutionContext { log: &Mutex::new(Vec::new()), @@ -50,6 +51,7 @@ pub fn build_prelude( stack: &StackScope::top(&prelude), database: &database, store: &store, + file_cache: &file_cache, }; let global = HashMap::from([("std".into(), build_std(&context).into())]); diff --git a/interpreter/src/execution/values/dictionary.rs b/interpreter/src/execution/values/dictionary.rs index d8b2223..e7628ca 100644 --- a/interpreter/src/execution/values/dictionary.rs +++ b/interpreter/src/execution/values/dictionary.rs @@ -158,6 +158,7 @@ impl Dictionary { stack, database: context.database, store: context.store, + file_cache: context.file_cache, }; buffer.par_extend(group.par_iter().map(|assignment| { diff --git a/interpreter/src/lib.rs b/interpreter/src/lib.rs index cfad6d5..8ca108b 100644 --- a/interpreter/src/lib.rs +++ b/interpreter/src/lib.rs @@ -21,8 +21,9 @@ pub mod execution; pub use compile::{compile, new_parser, Parser, SourceReference}; pub use execution::{ - build_prelude, execute_expression, values, Error, ExecutionContext, LogLevel, LogMessage, - RuntimeLog, StackScope, StackTrace, Store, + build_prelude, execute_expression, run_file, values, Error, ExecutionContext, + ExecutionFileCache, ExpressionResult, LogLevel, LogMessage, RuntimeLog, StackScope, StackTrace, + Store, }; pub use imstr::ImString; pub use tree_sitter::{Point as TextPoint, Range as TextRange}; From 5fbea424dbc00430a8929df93cc9e30103be23a5 Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 13 Feb 2026 17:26:00 -0500 Subject: [PATCH 099/106] Add support for importing other files --- cli/src/main.rs | 6 +- examples/other/importing.ccm | 7 + interpreter/src/execution/mod.rs | 131 ++++++++++++++---- .../src/execution/standard_environment.rs | 9 +- interpreter/src/execution/values/closure.rs | 1 + .../src/execution/values/dictionary.rs | 5 +- interpreter/test_assets/import_me.ccm | 2 + .../test_assets/infinite_recursion_import.ccm | 2 + interpreter/test_assets/recursive_import.ccm | 1 + 9 files changed, 131 insertions(+), 33 deletions(-) create mode 100644 examples/other/importing.ccm create mode 100644 interpreter/test_assets/import_me.ccm create mode 100644 interpreter/test_assets/infinite_recursion_import.ccm create mode 100644 interpreter/test_assets/recursive_import.ccm diff --git a/cli/src/main.rs b/cli/src/main.rs index 9c2980d..63e55de 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -1,6 +1,6 @@ use std::{ collections::HashMap, - path::PathBuf, + path::{Path, PathBuf}, sync::{Arc, Mutex}, }; @@ -111,6 +111,8 @@ fn process_file(file: PathBuf) -> Result<()> { database: &database, store: &store, file_cache: &files, + working_directory: Path::new("."), + import_limit: 100, }; let result = run_file(&context, file); @@ -270,6 +272,8 @@ fn run_line( database: &database, store, file_cache: &files, + working_directory: Path::new("."), + import_limit: 100, }; if let Some(report) = build_syntax_errors(&tree, repl_file, root.reference.clone()) { diff --git a/examples/other/importing.ccm b/examples/other/importing.ccm new file mode 100644 index 0000000..adc1317 --- /dev/null +++ b/examples/other/importing.ccm @@ -0,0 +1,7 @@ +[ + std.import(path = "../language/arithmatic.ccm"), + std.import(path = "../language/closures.ccm"), + std.import(path = "../language/lists.ccm"), + std.import(path = "../language/methods.ccm"), + std.import(path = "../language/vectors.ccm") +] diff --git a/interpreter/src/execution/mod.rs b/interpreter/src/execution/mod.rs index 13a7123..8187a91 100644 --- a/interpreter/src/execution/mod.rs +++ b/interpreter/src/execution/mod.rs @@ -19,11 +19,12 @@ use std::{ cmp::Ordering, collections::HashMap, - path::PathBuf, + path::{Path, PathBuf}, sync::{Arc, Mutex}, }; use crate::{ + build_function, compile::{self, AstNode, BinaryExpressionOperation, Expression, UnaryExpressionOperation}, execution::{ errors::{GenericFailure, Raise}, @@ -31,7 +32,9 @@ use crate::{ values::BuiltinCallableDatabase, }, new_parser, - values::{constraint_set::find_all_captured_variables_in_constraint_set, ConstraintSet}, + values::{ + constraint_set::find_all_captured_variables_in_constraint_set, ConstraintSet, IString, + }, SourceReference, }; @@ -181,7 +184,7 @@ pub fn find_all_variable_accesses_in_expression( } } -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct ExecutionContext<'c> { pub log: &'c dyn RuntimeLog, pub stack_trace: &'c StackTrace<'c>, @@ -189,6 +192,8 @@ pub struct ExecutionContext<'c> { pub database: &'c BuiltinCallableDatabase, pub store: &'c Store, pub file_cache: &'c Mutex, Source>>, + pub working_directory: &'c Path, + pub import_limit: usize, } impl<'c> ExecutionContext<'c> { @@ -536,6 +541,7 @@ pub(crate) fn test_context_custom_database( let store = Store::new(store_directory.path()); let file_cache = Mutex::new(HashMap::new()); + let working_directory = Path::new("."); let context = ExecutionContext { log: &Mutex::new(Vec::new()), @@ -544,6 +550,8 @@ pub(crate) fn test_context_custom_database( database: &database, store: &store, file_cache: &file_cache, + working_directory: &working_directory, + import_limit: 100, }; f(&context) @@ -556,40 +564,91 @@ pub fn run_file(context: &ExecutionContext, file: impl Into) -> Express let file = file.into(); - let mut files = context.file_cache.lock().map_err(|_error| { - GenericFailure("Failed to lock file cache".into()).to_error(context.stack_trace) - })?; - let file = Arc::new(file); - let input = match files.entry(file.clone()) { - std::collections::hash_map::Entry::Occupied(entry) => entry, - std::collections::hash_map::Entry::Vacant(vacency) => { - let input = std::fs::read_to_string(file.as_path()).map_err(|error| { - GenericFailure(format!("Failed to read file {:?} from disk: {error}", file).into()) - .to_error(context.stack_trace) - })?; - let input = ImString::from(input); + if file.is_absolute() { + return Err( + GenericFailure("Absolute paths cannot be used for importing files".into()) + .to_error(context.stack_trace), + ); + } - vacency.insert_entry(Source::from(input)) - } - }; - let input = input.get().text(); + if context.import_limit <= 0 { + return Err( + GenericFailure("Import recursion depth has been exceeded".into()) + .to_error(context.stack_trace), + ); + } - let tree = parser.parse(input, None).map_err(|error| { - GenericFailure(format!("Failed to parse input: {error:?}").into()) + let file = context.working_directory.join(file); + let parent_dir = file.parent().ok_or_else(|| { + GenericFailure("Failed to get parent directory of file: {error}".into()) .to_error(context.stack_trace) })?; - let root = crate::compile(&file, input, &tree).map_err(|error| { - GenericFailure(format!("Failed to compile: {error}").into()).to_error(context.stack_trace) - })?; + let root = { + let mut files = context.file_cache.lock().map_err(|_error| { + GenericFailure("Failed to lock file cache".into()).to_error(context.stack_trace) + })?; + let file = Arc::new(file.clone()); + let input = match files.entry(file.clone()) { + std::collections::hash_map::Entry::Occupied(entry) => entry, + std::collections::hash_map::Entry::Vacant(vacency) => { + let input = std::fs::read_to_string(file.as_path()).map_err(|error| { + GenericFailure( + format!("Failed to read file {:?} from disk: {error}", file).into(), + ) + .to_error(context.stack_trace) + })?; + let input = ImString::from(input); + + vacency.insert_entry(Source::from(input)) + } + }; + let input = input.get().text(); + + let tree = parser.parse(input, None).map_err(|error| { + GenericFailure(format!("Failed to parse input: {error:?}").into()) + .to_error(context.stack_trace) + })?; + + let root = crate::compile(&file, input, &tree).map_err(|error| { + GenericFailure(format!("Failed to compile: {error}").into()) + .to_error(context.stack_trace) + })?; + + context + .log + .collect_syntax_errors(&input, &tree, &file, root.reference.clone()); + + root + }; - context - .log - .collect_syntax_errors(&input, &tree, &file, root.reference.clone()); + let context = ExecutionContext { + working_directory: &parent_dir, + import_limit: context.import_limit - 1, + ..context.clone() + }; execute_expression(&context, &root) } +pub mod functions { + pub struct Import; +} + +pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { + build_function!( + database, + functions::Import, "std::import", ( + context: &ExecutionContext, + path: IString + ) -> Value + { + let file = PathBuf::from(path.0.as_str()); + run_file(context, file) + } + ); +} + #[cfg(test)] mod test { use hashable_map::HashableMap; @@ -676,4 +735,22 @@ mod test { let product = test_run("if false then 1u else 2u").unwrap(); assert_eq!(product, values::UnsignedInteger::from(2).into()); } + + #[test] + fn import() { + let product = test_run("std.import(path = \"./test_assets/import_me.ccm\")").unwrap(); + assert_eq!(product, values::UnsignedInteger::from(5).into()); + } + + #[test] + fn recursive_import() { + let product = + test_run("std.import(path = \"./test_assets/recursive_import.ccm\")").unwrap(); + assert_eq!(product, values::UnsignedInteger::from(5).into()); + } + + #[test] + fn infinite_recursion_import() { + test_run("std.import(path = \"./test_assets/infinite_recursion_import.ccm\")").unwrap_err(); + } } diff --git a/interpreter/src/execution/standard_environment.rs b/interpreter/src/execution/standard_environment.rs index 267ad40..8c6ab47 100644 --- a/interpreter/src/execution/standard_environment.rs +++ b/interpreter/src/execution/standard_environment.rs @@ -16,7 +16,7 @@ * program. If not, see . */ -use std::{collections::HashMap, sync::Mutex}; +use std::{collections::HashMap, path::Path, sync::Mutex}; use common_data_types::{Dimension, Float}; use imstr::ImString; @@ -24,6 +24,7 @@ use tempfile::TempDir; use crate::{ execution::{ + functions::Import, logging::StackTrace, stack::StackScope, store::Store, @@ -45,6 +46,8 @@ pub fn build_prelude( let store = Store::new(store_directory.path()); let file_cache = Mutex::new(HashMap::new()); + let working_directory = Path::new("."); + let context = ExecutionContext { log: &Mutex::new(Vec::new()), stack_trace: &StackTrace::bootstrap(), @@ -52,6 +55,8 @@ pub fn build_prelude( database: &database, store: &store, file_cache: &file_cache, + working_directory: &working_directory, + import_limit: 100, }; let global = HashMap::from([("std".into(), build_std(&context).into())]); @@ -80,6 +85,7 @@ fn build_std(context: &ExecutionContext) -> Dictionary { ), ("consts".into(), build_consts(context).into()), ("mesh3d".into(), build_mesh_3d(context).into()), + ("import".into(), BuiltinFunction::new::().into()), ]); Dictionary::new(context, std) } @@ -117,6 +123,7 @@ fn build_types(context: &ExecutionContext) -> Dictionary { let types: HashMap = HashMap::from_iter( [ ("None".into(), ValueType::TypeNone.into()), + ("Any".into(), ValueType::Any.into()), ("Bool".into(), ValueType::Boolean.into()), ("SInt".into(), ValueType::SignedInteger.into()), ("UInt".into(), ValueType::UnsignedInteger.into()), diff --git a/interpreter/src/execution/values/closure.rs b/interpreter/src/execution/values/closure.rs index 25b0b12..82f766b 100644 --- a/interpreter/src/execution/values/closure.rs +++ b/interpreter/src/execution/values/closure.rs @@ -55,6 +55,7 @@ impl BuiltinCallableDatabase { super::string::register_methods(&mut database); super::constraint_set::register_methods(&mut database); super::manifold_mesh::register_methods_and_functions(&mut database); + crate::execution::register_methods_and_functions(&mut database); database } diff --git a/interpreter/src/execution/values/dictionary.rs b/interpreter/src/execution/values/dictionary.rs index e7628ca..1a8decc 100644 --- a/interpreter/src/execution/values/dictionary.rs +++ b/interpreter/src/execution/values/dictionary.rs @@ -153,12 +153,9 @@ impl Dictionary { for group in ast_node.node.compute_groups() { { let context = ExecutionContext { - log: context.log, stack_trace, stack, - database: context.database, - store: context.store, - file_cache: context.file_cache, + ..context.clone() }; buffer.par_extend(group.par_iter().map(|assignment| { diff --git a/interpreter/test_assets/import_me.ccm b/interpreter/test_assets/import_me.ccm new file mode 100644 index 0000000..fea6818 --- /dev/null +++ b/interpreter/test_assets/import_me.ccm @@ -0,0 +1,2 @@ +# This file is imported as part of the `import` unit test. +5u diff --git a/interpreter/test_assets/infinite_recursion_import.ccm b/interpreter/test_assets/infinite_recursion_import.ccm new file mode 100644 index 0000000..7348f46 --- /dev/null +++ b/interpreter/test_assets/infinite_recursion_import.ccm @@ -0,0 +1,2 @@ +# Import ourselves infinitely. Very bad. +std.import(path = "./infinite_recursion_import.ccm") diff --git a/interpreter/test_assets/recursive_import.ccm b/interpreter/test_assets/recursive_import.ccm new file mode 100644 index 0000000..6d38be2 --- /dev/null +++ b/interpreter/test_assets/recursive_import.ccm @@ -0,0 +1 @@ +std.import(path = "import_me.ccm") From a4a1ae8ebb334ea3f54c005cb16c11d0bfdcd8e9 Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 13 Feb 2026 17:34:46 -0500 Subject: [PATCH 100/106] Correct mesh operations --- examples/modeling/mesh3d.ccm | 6 +- .../src/execution/values/manifold_mesh.rs | 125 +++++++++++++----- 2 files changed, 94 insertions(+), 37 deletions(-) diff --git a/examples/modeling/mesh3d.ccm b/examples/modeling/mesh3d.ccm index cb40022..b0cbb9c 100644 --- a/examples/modeling/mesh3d.ccm +++ b/examples/modeling/mesh3d.ccm @@ -1,6 +1,6 @@ [ std.mesh3d.icosphere(subdivions = 5u, diameter = 2cm)::to_stl(name="my_sphere"), - (std.mesh3d.icosphere(subdivions = 5u, diameter = 2cm) | std.mesh3d.cube() + <(0.5m, 0m, 0m)>)::to_stl(name="my_cube_sphere_or"), - (std.mesh3d.icosphere(subdivions = 5u, diameter = 2cm) & std.mesh3d.cube() + <(0.5m, 0m, 0m)>)::to_stl(name="my_cube_sphere_and"), - (std.mesh3d.icosphere(subdivions = 5u, diameter = 2cm) ^ std.mesh3d.cube() + <(0.5m, 0m, 0m)>)::to_stl(name="my_cube_sphere_xor") + (std.mesh3d.icosphere(subdivions = 5u, diameter = 2cm) | std.mesh3d.cube(size = <(2cm, 2cm, 2cm)>) + <(1cm, 0cm, 0cm)>)::to_stl(name="my_cube_sphere_or"), + (std.mesh3d.icosphere(subdivions = 5u, diameter = 2cm) & std.mesh3d.cube(size = <(2cm, 2cm, 2cm)>) + <(1cm, 0cm, 0cm)>)::to_stl(name="my_cube_sphere_and"), + (std.mesh3d.icosphere(subdivions = 5u, diameter = 2cm) ^ std.mesh3d.cube(size = <(2cm, 2cm, 2cm)>) + <(1cm, 0cm, 0cm)>)::to_stl(name="my_cube_sphere_xor") ] diff --git a/interpreter/src/execution/values/manifold_mesh.rs b/interpreter/src/execution/values/manifold_mesh.rs index a9cd8d3..25ad0a2 100644 --- a/interpreter/src/execution/values/manifold_mesh.rs +++ b/interpreter/src/execution/values/manifold_mesh.rs @@ -83,19 +83,41 @@ impl Object for ManifoldMesh3D { } fn addition(mut self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let input = Self::unpack_transform_input(context, 0.0, rhs)?; - let vector = input.raw_value(); - let manifold = Arc::make_mut(&mut self.0); - manifold.translate(vector.x, vector.y, vector.z); - Ok(self.into()) + let input = Self::unpack_arithmetic_input(context, 0.0, rhs)?; + match input { + ArethmeticInput::Vector(vector) => { + let vector = vector.raw_value(); + let manifold = Arc::make_mut(&mut self.0); + manifold.translate(vector.x, vector.y, vector.z); + Ok(self.into()) + } + ArethmeticInput::Manifold(rhs) => { + let manifold = + compute_boolean(&self.0, &rhs.0, OpType::Add).map_err(|message| { + GenericFailure(message.into()).to_error(context.stack_trace) + })?; + Ok(Self(Arc::new(manifold)).into()) + } + } } fn subtraction(mut self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { - let input = Self::unpack_transform_input(context, 0.0, rhs)?; - let vector = input.raw_value(); - let manifold = Arc::make_mut(&mut self.0); - manifold.translate(-vector.x, -vector.y, -vector.z); - Ok(self.into()) + let input = Self::unpack_arithmetic_input(context, 0.0, rhs)?; + match input { + ArethmeticInput::Vector(vector) => { + let vector = vector.raw_value(); + let manifold = Arc::make_mut(&mut self.0); + manifold.translate(-vector.x, -vector.y, -vector.z); + Ok(self.into()) + } + ArethmeticInput::Manifold(rhs) => { + let manifold = + compute_boolean(&self.0, &rhs.0, OpType::Subtract).map_err(|message| { + GenericFailure(message.into()).to_error(context.stack_trace) + })?; + Ok(Self(Arc::new(manifold)).into()) + } + } } fn multiply(mut self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { @@ -115,9 +137,20 @@ impl Object for ManifoldMesh3D { fn bit_xor(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { let rhs: &Self = rhs.downcast_for_binary_op_ref(context.stack_trace)?; - let manifold = compute_boolean(&self.0, &rhs.0, OpType::Subtract) + + // To compute xor, get the intersectiona and then subtract it from the union of the two + // shapes. + + let intersection = compute_boolean(&self.0, &rhs.0, OpType::Intersect) .map_err(|message| GenericFailure(message.into()).to_error(context.stack_trace))?; - Ok(Self(Arc::new(manifold)).into()) + + let union = compute_boolean(&self.0, &rhs.0, OpType::Add) + .map_err(|message| GenericFailure(message.into()).to_error(context.stack_trace))?; + + let difference = compute_boolean(&union, &intersection, OpType::Subtract) + .map_err(|message| GenericFailure(message.into()).to_error(context.stack_trace))?; + + Ok(Self(Arc::new(difference)).into()) } fn bit_and(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { @@ -142,34 +175,51 @@ impl Object for ManifoldMesh3D { } } +enum ArethmeticInput { + Vector(Vector3), + Manifold(ManifoldMesh3D), +} + impl ManifoldMesh3D { - fn unpack_transform_input( + fn unpack_arithmetic_input( context: &ExecutionContext, default: RawFloat, input: Value, - ) -> ExpressionResult { - let build_type_error = || { - DowncastError { - expected: "Vector2 or Vector3 of lengths".into(), - got: input.get_type(context).name(), - } - .to_error(context.stack_trace) - }; - - let vector = match &input { + ) -> ExpressionResult { + let value = match input { Value::Vector2(v) => { let raw = v.raw_value(); - Vector3::new(context, v.dimension(), [raw.x, raw.y, default]) + Ok(ArethmeticInput::Vector(Vector3::new( + context, + v.dimension(), + [raw.x, raw.y, default], + )?)) + } + Value::Vector3(v) => Ok(ArethmeticInput::Vector(v.clone())), + Value::ManifoldMesh3D(manifold) => Ok(ArethmeticInput::Manifold(manifold)), + value => Err(DowncastError { + expected: "Vector2 or Vector3 of lengths, or another ManifoldMesh3D".into(), + got: value.get_type(context).name(), } - Value::Vector3(v) => Ok(v.clone()), - _ => Err(build_type_error()), + .to_error(context.stack_trace)), }?; - if vector.dimension() != Dimension::length() { - // Wrong dimension type. - Err(build_type_error()) - } else { - Ok(vector) + match value { + // We need to validate the value of the dimension. + ArethmeticInput::Vector(vector) => { + if vector.dimension() != Dimension::length() { + // Wrong dimension type. + Err(DowncastError { + expected: "Vector2 or Vector3 of lengths, or another ManifoldMesh3D".into(), + got: vector.get_type(context).name(), + } + .to_error(context.stack_trace)) + } else { + Ok(ArethmeticInput::Vector(vector)) + } + } + // Everything else can be passed as is. + value => Ok(value), } } } @@ -239,9 +289,16 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { ); build_function!( database, - methods::GenerateCube, "ManifoldMesh3D::cube", (context: &ExecutionContext) -> ManifoldMesh3D - { - let manifold = generate_cube().map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; + methods::GenerateCube, "ManifoldMesh3D::cube", ( + context: &ExecutionContext, + size: Length3 + ) -> ManifoldMesh3D { + let size: Vector3 = size.into(); + let size = size.raw_value(); + + let mut manifold = generate_cube().map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; + manifold.scale(size.x, size.y, size.z); + Ok(ManifoldMesh3D(Arc::new(manifold)).into()) } ); From 39ab4a0acb9475568cb45d7c19c96e4d49c3ab55 Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 13 Feb 2026 20:27:22 -0500 Subject: [PATCH 101/106] Fix variable capture for let-in expressions --- interpreter/src/execution/mod.rs | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/interpreter/src/execution/mod.rs b/interpreter/src/execution/mod.rs index 8187a91..f4e9518 100644 --- a/interpreter/src/execution/mod.rs +++ b/interpreter/src/execution/mod.rs @@ -160,9 +160,30 @@ pub fn find_all_variable_accesses_in_expression( )?; } + let variable_names: Vec<&ImString> = { + let mut variable_names = Vec::with_capacity(ast_node.node.assignments.len()); + + for argument in ast_node.node.assignments.iter() { + variable_names.push(&argument.node.ident.node); + } + + // We typically won't have more than 6 arguments, so a binary search will typically + // outperform a hashset. + variable_names.sort(); + + variable_names + }; + find_all_variable_accesses_in_expression( &ast_node.node.expression.node, - access_collector, + &mut move |variable_name| { + if variable_names.binary_search(&&variable_name.node).is_err() { + // This is not an argument, which means it must be captured from the environment. + access_collector(variable_name)?; + } + + Ok(()) + }, )?; Ok(()) @@ -718,6 +739,13 @@ mod test { assert_eq!(product, values::UnsignedInteger::from(25).into()); } + #[test] + fn variable_access_collection_for_let_in() { + let product = + test_run("let fn = () -> std.types.UInt: let value = 5u; in value; in fn()").unwrap(); + assert_eq!(product, values::UnsignedInteger::from(5).into()); + } + #[test] fn string() { let product = test_run("\"a simple string of text\"").unwrap(); From 1cd91f09ead522f39806ed93431f99277ee841af Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 13 Feb 2026 20:04:21 -0500 Subject: [PATCH 102/106] Update readme --- README.md | 123 ++++++++----------------------------- examples/README.md | 10 +++ examples/cooling_plate.ccm | 20 ++++++ 3 files changed, 57 insertions(+), 96 deletions(-) create mode 100644 examples/README.md create mode 100644 examples/cooling_plate.ccm diff --git a/README.md b/README.md index 2a57280..72c59e5 100644 --- a/README.md +++ b/README.md @@ -1,110 +1,41 @@ # Command CAD -In my frustration with the state of CAD software as a whole, I lost my mind and wrote my own CAD program. Out of all of the ones I've used, the only ones that are really palatable are OpenSCAD and CAD Query. Command CAD takes most of its inspiration from these two. Command CAD has some critical differences though, like a stronger and convenient type safety for its scripting language and a more modular design. +Command CAD is the product of my frustrations with the current state of CAD software and my curiosity of what would happen if OpenSCAD was given heavy type safety, functional programming paradigms, and fully declarative. _Please note that Command CAD is in a highly experimental state, do not expect stability, even in the short term_ -Observe the following example: -``` -main_body = 15; -``` -This is valid syntax for both OpenSCAD and CAD Query. -The following critical information is missing: - * What is the dimension? Is this a length? An area? It could even be Power or Time. - * Even if we assume the dimension is length, what is the unit? Meters? Millimeters? +Command CAD is still highly experimental and therefore not well documented, but at least you can find examples in [the examples directory](./examples/README.md). -In the past I've worked around this issue with naming conventions: -``` -main_body_length_cm = 15; +The following is an fictional but practical example of a model: ``` -We now know the dimension and the unit, but there are problems: - * STL files are unaware of the units you use, and will just copy the numbers you input - * If you were to feed this into a slicer and it assumed that 15 is millimeters (this is the default behavior of most slicers), the body's length would be an entire magnitude too short. You would have to rewrite the script to produce millimeters for all final products. - * If you then use a different slicer that doesn't assume millimeters as the unit for STL files, you would have to again change the script to support that slicer. - * This naming convention is tedious to use, and many developers simply won't use it +let + nominal_angle_to_sun = 60deg; -Command CAD's solution to this problem is to make dimension and unit a part of the language: -``` -let main_body: Length = 15cm; -let nominal_angle_to_sun: Angle = 60deg; -let solar_panel_size: Area = main_body * 1m; // A length * by a length gives an area. -let nominal_power_output: Power = solar_panel_size * nominal_angle_to_sun.sin() * (30w/1m^2); // 30watts per square meter multiplied by square meters results in watts. -``` -Not only is the dimension of measurements tracked and verified for you (preventing common mathematical errors), but the units are automatically converted as well. -If I were to do all my calculations using meters and then specify that my STL file should use millimeters, Command CAD will convert all of the final results to millimeters when exporting the STL file. + # 30watts per square meter multiplied by square meters results in watts. + nominal_power_output = (main_body: std.scalar.Length) -> std.scalar.Power: + let + # A length * by a length gives an area. + solar_panel_size = main_body * 1m; + in + solar_panel_size * nominal_angle_to_sun::sin() * (30W/1 'm^2'); -Dimensional analysis also applies to linear algebra types. + # We need 3cm of cooling surface for each watt this produces + cooling_fin_size = nominal_power_output(main_body = 15cm) / 1W * 3cm; +in + std.mesh3d.cylinder( + diameter = cooling_fin_size, + height = 1cm, + sectors = 360u, + stacks = 1u + )::to_stl(name = "cooling_plate") ``` -vec3(1m, 2m, 3m) * 4 == vec3(4m, 8m, 12m) -vec3(1m, 2m, 3m) * 4m == vec3(4m^2, 8m^2, 12m^2) -``` - -## Design Goals - -* Scripting language for user to define models with - * Deterministic evaluation - * Convenient type safety - * Measurement units are automatically converted to the correct output when exporting - * Code Reuse - * Code is organized into projects for easy and robust inclusion into other projects as libraries - * Sketches, Solids, and Tasks can be imported from other projects - * A package manager automatically resolves project dependencies - * Self-Documentation - * Model designs usually have extensive mathematics behind them - * Typically this documentation is kept in separate files or even in a physical notebook. If these files or physical notebook are lost, so is the reasoning behind the model - * The model not only contains the math and reasoning, but is defined by it. Changing the math will automatically update the model, removing opportunities for human error - * If you use git, you will have a commentated history of how you've changed your thinking over time -* Modular - * Code Reuse isn't just for importing parts into your assembly. Other projects can add functionality, such as gcode generation techniques. - -## Current features - * CLI interfaces - * Functions to perform calculation and generate models can be called from the command line - * Arguments provided to functions are serialized from Json or Yaml (detection of format is automatic) - * Automatic unit conversion is applied to provided arguments - * The keyword `default` can be used to invoke a function's default arguments - * Values returned are serialized and printed to stdout or saved to a file - * Scripting Language - * Functions - * Default arguments can be specified. Use the keyword `default` when calling a function to indicate you wish to use the default value - * Constraints can be applied to arguments - * Structs - * Type safe - * Constraints can be applied to struct members - * While there is no polymorphic behavior, there is syntax to copy the values of one struct into another - * Basic types - * Strings - * A text format, UTF8 encoded. - * Can be formatted using similar syntax to Python's format method. - * Lists - * Lists of objects - * Not all values in the list must be the same type - * Measurements - * Guaranteed to never be NaN - * Dimensional analysis enforced through type safety - * Vectors - * Guaranteed to never be NaN - * Dimensional analysis enforced through type safety - * Automatic unit conversions - * Unit conversions provided by [a moderatly large CSV file](src/script/execution/types/measurement/units.csv) - * Boolean - * CAD Kernel - * Built off the impressive [Fornjot](https://fornjot.app/) kernel, which is just as experimental as Command CAD is - -## Alternatives +## Current Features -Other code based CAD programs exist, and with how experimental Command CAD currently is, you should probably prefer them. +The following features are currently available: +* Dimensional analysis + * Dimensional type safety enforced at method calls +* Mesh based modeling + * Note that there are plans to experiment with imperative modeling techniques -### CAD Query - * Technical overhead - * To install Cad Query you must first install Python and Pip, and then you can install CAD Query. A typical Mechanical Engineer on Windows is unwilling to go through this. - * Breaking Changes - * There is still vast numbers of outdated tutorials and advice on the internet for Python. There aren't just the breaking changes between Python 2 and 3, but the breaking changes between 3.5, 3.6, 3.7, etc. Coming back to a project after a few months can be very frustrating to beginner who does not know how to use Python environments. - * Does not provide measurement type safety -### OpenSCAD - * Limited language features - * Does not provide structs - * Lack of package management - * Does not provide measurement type safety diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..9ee7b24 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,10 @@ +# Examples + +Examples are sorted into the following categories: +* Language + * Demonstrate features of the Command CAD language +* Modeling + * Mesh 3D + * Demonstrate 3D meshing features +* Other + * Demonstrate features that do not fit into the other categories. diff --git a/examples/cooling_plate.ccm b/examples/cooling_plate.ccm new file mode 100644 index 0000000..a0110b9 --- /dev/null +++ b/examples/cooling_plate.ccm @@ -0,0 +1,20 @@ +let + nominal_angle_to_sun = 60deg; + + # 30watts per square meter multiplied by square meters results in watts. + nominal_power_output = (main_body: std.scalar.Length) -> std.scalar.Power: + let + # A length * by a length gives an area. + solar_panel_size = main_body * 1m; + in + solar_panel_size * nominal_angle_to_sun::sin() * (30W/1 'm^2'); + + # We need 3cm of cooling surface for each watt this produces + cooling_fin_size = nominal_power_output(main_body = 15cm) / 1W * 3cm; +in + std.mesh3d.cylinder( + diameter = cooling_fin_size, + height = 1cm, + sectors = 360u, + stacks = 1u + )::to_stl(name = "cooling_plate") From bd31184a2460e2e22939d4878fffb91c8e47d8e7 Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 13 Feb 2026 22:42:50 -0500 Subject: [PATCH 103/106] Apply cargo fmt --- cli/src/main.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cli/src/main.rs b/cli/src/main.rs index 63e55de..46addc3 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -5,7 +5,7 @@ use std::{ }; mod arguments; -use anyhow::{anyhow, bail, Context, Result}; +use anyhow::{Context, Result, anyhow, bail}; use arguments::Arguments; use ariadne::{Cache, Label, Report, ReportKind, Source}; use clap::Parser as _; @@ -17,14 +17,13 @@ use type_sitter::Node as _; use crate::arguments::Commands; use interpreter::{ - build_prelude, + ExecutionContext, ExecutionFileCache, ImString, LogMessage, Parser, RuntimeLog, + SourceReference, StackScope, StackTrace, Store, build_prelude, compile::{compile, iter_raw_nodes}, execute_expression, execution::values::BuiltinCallableDatabase, new_parser, run_file, values::{Object, Style, Value}, - ExecutionContext, ExecutionFileCache, ImString, LogMessage, Parser, RuntimeLog, - SourceReference, StackScope, StackTrace, Store, }; fn main() { @@ -93,7 +92,9 @@ fn process_file(file: PathBuf) -> Result<()> { project_directory.join(".ccad/store") } Err(error) => { - eprintln!("Failed to discover project directory (is this project in a git repository?): {error}"); + eprintln!( + "Failed to discover project directory (is this project in a git repository?): {error}" + ); eprintln!("Current directory will be used for the store."); PathBuf::from("./.ccad/store") } From b18b9026bdb708818733790cd667664b457d543c Mon Sep 17 00:00:00 2001 From: James Carl Date: Fri, 13 Feb 2026 22:52:01 -0500 Subject: [PATCH 104/106] Add clippy to development environment --- flake.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/flake.nix b/flake.nix index e8da124..2a8c3ec 100644 --- a/flake.nix +++ b/flake.nix @@ -57,6 +57,7 @@ fenix-channel.rustfmt fenix-channel.rustc fenix-channel.cargo + fenix-channel.clippy cargo-expand openssl pkg-config From 645716bd886f0364e7678ab0a40933e2e07bf760 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 14 Feb 2026 00:07:50 -0500 Subject: [PATCH 105/106] Apply clippy corrections --- cli/src/main.rs | 24 +++--- interpreter/src/compile/constraint_set.rs | 2 +- interpreter/src/compile/expressions.rs | 4 +- interpreter/src/compile/mod.rs | 10 ++- interpreter/src/execution/logging.rs | 2 +- interpreter/src/execution/mod.rs | 16 ++-- interpreter/src/execution/stack.rs | 10 +-- .../src/execution/standard_environment.rs | 82 +++++++++---------- interpreter/src/execution/store.rs | 2 +- interpreter/src/execution/values/closure.rs | 34 ++++---- .../src/execution/values/constraint_set.rs | 8 +- interpreter/src/execution/values/integer.rs | 8 +- interpreter/src/execution/values/list.rs | 28 +++---- .../src/execution/values/manifold_mesh.rs | 14 ++-- interpreter/src/execution/values/mod.rs | 10 +-- interpreter/src/execution/values/scalar.rs | 34 +++----- .../src/execution/values/string/formatting.rs | 10 +-- .../src/execution/values/string/mod.rs | 20 ++--- .../src/execution/values/value_type.rs | 54 ++++++------ interpreter/src/execution/values/vector.rs | 70 ++++++++-------- units/build.rs | 4 +- units/src/lib.rs | 2 + 22 files changed, 216 insertions(+), 232 deletions(-) diff --git a/cli/src/main.rs b/cli/src/main.rs index 46addc3..d5af238 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -5,7 +5,7 @@ use std::{ }; mod arguments; -use anyhow::{Context, Result, anyhow, bail}; +use anyhow::{anyhow, bail, Context, Result}; use arguments::Arguments; use ariadne::{Cache, Label, Report, ReportKind, Source}; use clap::Parser as _; @@ -17,13 +17,14 @@ use type_sitter::Node as _; use crate::arguments::Commands; use interpreter::{ - ExecutionContext, ExecutionFileCache, ImString, LogMessage, Parser, RuntimeLog, - SourceReference, StackScope, StackTrace, Store, build_prelude, + build_prelude, compile::{compile, iter_raw_nodes}, execute_expression, execution::values::BuiltinCallableDatabase, new_parser, run_file, values::{Object, Style, Value}, + ExecutionContext, ExecutionFileCache, ImString, LogMessage, Parser, RuntimeLog, + SourceReference, StackScope, StackTrace, Store, }; fn main() { @@ -59,10 +60,11 @@ impl RuntimeLog for StderrLog { file: &'t Arc, span: SourceReference, ) { - if let Some(report) = build_syntax_errors(&tree, file, span) { - if let Err(error) = report.eprint(ReplFileCache(Source::from(input))) { - eprintln!("Failed to print syntax error message: {error}"); - } + let Some(report) = build_syntax_errors(tree, file, span) else { + return; + }; + if let Err(error) = report.eprint(ReplFileCache(Source::from(input))) { + eprintln!("Failed to print syntax error message: {error}"); } } } @@ -131,7 +133,7 @@ fn process_file(file: PathBuf) -> Result<()> { let report = error.report(); report - .eprint(ExecutionFileCache(&*file_cache)) + .eprint(ExecutionFileCache(&file_cache)) .context("Failed to format error message")?; } } @@ -261,7 +263,7 @@ fn run_line( .parse(input, None) .map_err(|error| anyhow!("Failed to parse input: {error:?}"))?; let root = - compile(&repl_file, input, &tree).map_err(|error| anyhow!("Failed to compile: {error}"))?; + compile(repl_file, input, &tree).map_err(|error| anyhow!("Failed to compile: {error}"))?; let log = StderrLog; let files = Mutex::new(HashMap::new()); @@ -269,8 +271,8 @@ fn run_line( let context = ExecutionContext { log: &log as &dyn RuntimeLog, stack_trace: &StackTrace::top(root.reference.clone()), - stack: &StackScope::top(&prelude), - database: &database, + stack: &StackScope::top(prelude), + database, store, file_cache: &files, working_directory: Path::new("."), diff --git a/interpreter/src/compile/constraint_set.rs b/interpreter/src/compile/constraint_set.rs index cf69b63..7a82640 100644 --- a/interpreter/src/compile/constraint_set.rs +++ b/interpreter/src/compile/constraint_set.rs @@ -70,7 +70,7 @@ impl<'t> Parse<'t, nodes::ConstraintSet<'t>> for ConstraintSet { file, &value, Self { - variables: variables, + variables, left, right, relation, diff --git a/interpreter/src/compile/expressions.rs b/interpreter/src/compile/expressions.rs index 6844611..a56ded2 100644 --- a/interpreter/src/compile/expressions.rs +++ b/interpreter/src/compile/expressions.rs @@ -19,7 +19,7 @@ trait DependentOperation { fn dependencies(&self) -> &HashableSet; } -fn sort_and_group_dependencies(deps: &mut Vec) -> Vec> +fn sort_and_group_dependencies(deps: &mut [D]) -> Vec> where D: DependentOperation, { @@ -2276,7 +2276,7 @@ mod test { index, name: name.into(), dependencies: HashableSet::from(HashSet::from_iter( - dependencies.into_iter().map(|name| ImString::from(name)), + dependencies.into_iter().map(ImString::from), )), } } diff --git a/interpreter/src/compile/mod.rs b/interpreter/src/compile/mod.rs index efbfd0e..2f03781 100644 --- a/interpreter/src/compile/mod.rs +++ b/interpreter/src/compile/mod.rs @@ -10,6 +10,8 @@ use type_sitter::{HasChild, IncorrectKind, Node, UntypedNode}; pub use expressions::*; +// This thing is packed with generated clippy violations. +#[allow(clippy::all)] pub mod nodes { include!(concat!(env!("OUT_DIR"), "/nodes.rs")); } @@ -142,7 +144,7 @@ impl<'t> Parse<'t, nodes::SignedInteger<'t>> for i64 { } nodes::anon_unions::BaseTen_Binary_Hex_Octal::BaseTen(value) => { let text = &input[value.byte_range()]; - i64::from_str_radix(text, 10) + text.parse::() } nodes::anon_unions::BaseTen_Binary_Hex_Octal::Octal(value) => { let text = &input[value.byte_range()][2..]; @@ -177,7 +179,7 @@ impl<'t> Parse<'t, nodes::UnsignedInteger<'t>> for u64 { } nodes::anon_unions::BaseTen_Binary_Hex_Octal::BaseTen(value) => { let text = &input[value.byte_range()]; - u64::from_str_radix(text, 10) + text.parse::() } nodes::anon_unions::BaseTen_Binary_Hex_Octal::Octal(value) => { let text = &input[value.byte_range()][2..]; @@ -358,12 +360,12 @@ pub type RootTree = type_sitter::Tree>; pub fn iter_raw_nodes<'t>(tree: &'t RootTree) -> impl Iterator> { let mut cursor: type_sitter::TreeCursor = tree.walk(); - std::iter::from_fn(move || loop { + std::iter::from_fn(move || { let node = cursor.node(); // Go to the first child, or the next sibling. if cursor.goto_first_child() || cursor.goto_next_sibling() { - break Some(node); + Some(node) } else { // No more children. // Work your way back up the tree until you can reach another sibling, or you reach the diff --git a/interpreter/src/execution/logging.rs b/interpreter/src/execution/logging.rs index bae7068..b925b36 100644 --- a/interpreter/src/execution/logging.rs +++ b/interpreter/src/execution/logging.rs @@ -227,7 +227,7 @@ impl<'s> From<&'s LocatedStr<'s>> for LocatedStr<'s> { fn from(value: &'s LocatedStr<'s>) -> Self { Self { location: value.location.clone(), - string: &value.string, + string: value.string, } } } diff --git a/interpreter/src/execution/mod.rs b/interpreter/src/execution/mod.rs index f4e9518..ee8543f 100644 --- a/interpreter/src/execution/mod.rs +++ b/interpreter/src/execution/mod.rs @@ -257,8 +257,8 @@ impl<'c> ExecutionContext<'c> { self.stack .scope(self.stack_trace, mode, variables, |stack, stack_trace| { let context = ExecutionContext { - stack_trace: &stack_trace, - stack: &stack, + stack_trace, + stack, ..*self }; @@ -287,7 +287,7 @@ pub fn execute_expression( compile::Expression::List(ast_node) => { Ok(values::List::from_ast(context, ast_node)?.into()) } - compile::Expression::Parenthesis(ast_node) => execute_expression(context, &ast_node), + compile::Expression::Parenthesis(ast_node) => execute_expression(context, ast_node), compile::Expression::MemberAccess(ast_node) => { let base = execute_expression(context, &ast_node.node.base)?; @@ -391,7 +391,7 @@ fn execute_method_call( context.stack_scope( to_call.call_scope_type(context), - HashMap::from_iter([(ImString::from("self"), self_dictionary.into())]), + HashMap::from_iter([(ImString::from("self"), self_dictionary)]), |context| to_call.call(context, argument), )? } @@ -571,7 +571,7 @@ pub(crate) fn test_context_custom_database( database: &database, store: &store, file_cache: &file_cache, - working_directory: &working_directory, + working_directory, import_limit: 100, }; @@ -592,7 +592,7 @@ pub fn run_file(context: &ExecutionContext, file: impl Into) -> Express ); } - if context.import_limit <= 0 { + if context.import_limit == 0 { return Err( GenericFailure("Import recursion depth has been exceeded".into()) .to_error(context.stack_trace), @@ -638,13 +638,13 @@ pub fn run_file(context: &ExecutionContext, file: impl Into) -> Express context .log - .collect_syntax_errors(&input, &tree, &file, root.reference.clone()); + .collect_syntax_errors(input, &tree, &file, root.reference.clone()); root }; let context = ExecutionContext { - working_directory: &parent_dir, + working_directory: parent_dir, import_limit: context.import_limit - 1, ..context.clone() }; diff --git a/interpreter/src/execution/stack.rs b/interpreter/src/execution/stack.rs index a8625e1..e517d0f 100644 --- a/interpreter/src/execution/stack.rs +++ b/interpreter/src/execution/stack.rs @@ -51,7 +51,7 @@ impl<'p> StackScope<'p> { } } - pub fn scope<'s, B, R>( + pub fn scope( &'p self, stack_trace: &StackTrace, mode: ScopeType, @@ -73,7 +73,7 @@ impl<'p> StackScope<'p> { Ok(result) } - pub fn scope_mut<'s, B, R>( + pub fn scope_mut( &'p self, stack_trace: &StackTrace, mode: ScopeType, @@ -120,7 +120,7 @@ impl<'p> StackScope<'p> { let mut names: Vec<_> = self .iter_visible_variables() .map(|(name, _value)| name.clone()) - .chain(local_variables.into_iter()) + .chain(local_variables) .collect(); names.sort_by(|name_a, name_b| { match (name_a.starts_with(name), name_b.starts_with(name)) { @@ -250,7 +250,7 @@ mod test { |stack, stack_trace| { stack .scope( - &stack_trace, + stack_trace, ScopeType::Inherited, HashMap::from_iter([("c".into(), UnsignedInteger::from(3).into())]), |stack, _stack_trace| { @@ -289,7 +289,7 @@ mod test { |stack, stack_trace| { stack .scope( - &stack_trace, + stack_trace, ScopeType::Isolated, HashMap::from_iter([("c".into(), UnsignedInteger::from(3).into())]), |stack, _stack_trace| { diff --git a/interpreter/src/execution/standard_environment.rs b/interpreter/src/execution/standard_environment.rs index 8c6ab47..cc97745 100644 --- a/interpreter/src/execution/standard_environment.rs +++ b/interpreter/src/execution/standard_environment.rs @@ -52,10 +52,10 @@ pub fn build_prelude( log: &Mutex::new(Vec::new()), stack_trace: &StackTrace::bootstrap(), stack: &StackScope::top(&prelude), - database: &database, + database, store: &store, file_cache: &file_cache, - working_directory: &working_directory, + working_directory, import_limit: 100, }; @@ -120,24 +120,21 @@ fn build_consts(context: &ExecutionContext) -> Dictionary { /// Adds library for type safety. fn build_types(context: &ExecutionContext) -> Dictionary { - let types: HashMap = HashMap::from_iter( - [ - ("None".into(), ValueType::TypeNone.into()), - ("Any".into(), ValueType::Any.into()), - ("Bool".into(), ValueType::Boolean.into()), - ("SInt".into(), ValueType::SignedInteger.into()), - ("UInt".into(), ValueType::UnsignedInteger.into()), - ("String".into(), ValueType::String.into()), - ("ValueType".into(), ValueType::ValueType.into()), - ("ManifoldMesh".into(), ValueType::ManifoldMesh3D.into()), - // TODO we need File types. - // TODO we'll need a function to build custom function signature types. - // ("Function".into(), ValueType::Closure(Arc)), - - // TODO add a function to build custom unit types. - ] - .into_iter(), - ); + let types: HashMap = HashMap::from_iter([ + ("None".into(), ValueType::TypeNone.into()), + ("Any".into(), ValueType::Any.into()), + ("Bool".into(), ValueType::Boolean.into()), + ("SInt".into(), ValueType::SignedInteger.into()), + ("UInt".into(), ValueType::UnsignedInteger.into()), + ("String".into(), ValueType::String.into()), + ("ValueType".into(), ValueType::ValueType.into()), + ("ManifoldMesh".into(), ValueType::ManifoldMesh3D.into()), + // TODO we need File types. + // TODO we'll need a function to build custom function signature types. + // ("Function".into(), ValueType::Closure(Arc)), + + // TODO add a function to build custom unit types. + ]); Dictionary::new(context, types) } @@ -148,7 +145,7 @@ fn build_dimension_types( let types: HashMap = HashMap::from_iter( units::list_named_dimensions() .map(|(name, dimension)| (name, Some(dimension))) - .chain([("Any", Option::None)].into_iter()) + .chain([("Any", Option::None)]) .map(move |(name, dimension)| (name.into(), type_builder(dimension).into())), ); @@ -158,28 +155,25 @@ fn build_dimension_types( fn build_mesh_3d(context: &ExecutionContext) -> Dictionary { use crate::values::manifold_mesh::methods::*; - let types: HashMap = HashMap::from_iter( - [ - ("cone".into(), BuiltinFunction::new::().into()), - ("cube".into(), BuiltinFunction::new::().into()), - ( - "cylinder".into(), - BuiltinFunction::new::().into(), - ), - ( - "icosphere".into(), - BuiltinFunction::new::().into(), - ), - ( - "torus".into(), - BuiltinFunction::new::().into(), - ), - ( - "uv_sphere".into(), - BuiltinFunction::new::().into(), - ), - ] - .into_iter(), - ); + let types: HashMap = HashMap::from_iter([ + ("cone".into(), BuiltinFunction::new::().into()), + ("cube".into(), BuiltinFunction::new::().into()), + ( + "cylinder".into(), + BuiltinFunction::new::().into(), + ), + ( + "icosphere".into(), + BuiltinFunction::new::().into(), + ), + ( + "torus".into(), + BuiltinFunction::new::().into(), + ), + ( + "uv_sphere".into(), + BuiltinFunction::new::().into(), + ), + ]); Dictionary::new(context, types) } diff --git a/interpreter/src/execution/store.rs b/interpreter/src/execution/store.rs index 9b50ae0..0b760e4 100644 --- a/interpreter/src/execution/store.rs +++ b/interpreter/src/execution/store.rs @@ -131,7 +131,7 @@ impl Store { store_path: &Path, ) -> ExpressionResult<()> { // Move the file into the store. - match std::fs::rename(temp_path, &store_path) { + match std::fs::rename(temp_path, store_path) { Ok(_) => Ok(store_path), Err(error) => { let result = match error.kind() { diff --git a/interpreter/src/execution/values/closure.rs b/interpreter/src/execution/values/closure.rs index 82f766b..5124c32 100644 --- a/interpreter/src/execution/values/closure.rs +++ b/interpreter/src/execution/values/closure.rs @@ -185,11 +185,7 @@ impl UserClosure { let mut captured_values = HashableMap::new(); find_all_variable_accesses_in_closure_capture(&source.node, &mut |field_name| { - let local_variables = signature - .argument_type - .members - .iter() - .map(|(name, _value): (&ImString, _)| name.clone()); + let local_variables = signature.argument_type.members.keys().cloned(); let value = context .get_variable_for_closure( @@ -309,7 +305,7 @@ macro_rules! build_member_from_sig { ( imstr::ImString::from(stringify!($name)), $crate::execution::values::StructMember { - ty: <$ty as crate::execution::values::StaticType>::static_type(), + ty: <$ty as $crate::execution::values::StaticType>::static_type(), default: None, }, ) @@ -318,7 +314,7 @@ macro_rules! build_member_from_sig { ( imstr::ImString::from(stringify!($name)), $crate::execution::values::StructMember { - ty: <$ty as crate::execution::values::StaticType>::static_type(), + ty: <$ty as $crate::execution::values::StaticType>::static_type(), default: Some($default), }, ) @@ -361,7 +357,7 @@ macro_rules! build_closure_type { impl $crate::execution::values::StaticType for $name { fn static_type() -> $crate::execution::values::ValueType { static TYPE: std::sync::OnceLock< - std::sync::Arc, + std::sync::Arc<$crate::execution::values::closure::Signature>, > = std::sync::OnceLock::new(); let signature = TYPE.get_or_init(|| $crate::build_closure_signature!(($($arg: $ty $(= $default)?),*) -> $return_type)); @@ -381,9 +377,9 @@ macro_rules! build_closure_type { } } - impl Into<$crate::execution::values::UserClosure> for $name { - fn into(self) -> $crate::execution::values::UserClosure { - self.0 + impl From<$name> for $crate::execution::values::UserClosure { + fn from(value: $name) -> Self { + value.0 } } @@ -436,7 +432,7 @@ macro_rules! build_function_callable { signature: &$crate::execution::values::closure::Signature, argument: $crate::execution::values::Dictionary | -> $crate::execution::ExpressionResult<$crate::execution::values::Value> { - use crate::execution::errors::Raise as _; + use $crate::execution::errors::Raise as _; signature .argument_type @@ -513,7 +509,7 @@ macro_rules! build_method_callable { signature: &$crate::execution::values::closure::Signature, argument: $crate::execution::values::Dictionary | -> $crate::execution::ExpressionResult<$crate::execution::values::Value> { - use crate::execution::errors::Raise as _; + use $crate::execution::errors::Raise as _; let $this = $context.get_variable( $crate::execution::logging::LocatedStr { @@ -799,7 +795,7 @@ mod test { BuiltinFunction::new::().into(), )], |context| { - let product = execute_expression(&context, &root).unwrap(); + let product = execute_expression(context, &root).unwrap(); assert_eq!(product, values::UnsignedInteger::from(846).into()); }, @@ -830,7 +826,7 @@ mod test { BuiltinFunction::new::().into(), )], |context| { - let product = execute_expression(&context, &root).unwrap(); + let product = execute_expression(context, &root).unwrap(); assert_eq!(product, values::UnsignedInteger::from(3).into()); }, @@ -860,7 +856,7 @@ mod test { BuiltinFunction::new::().into(), )], |context| { - let product = execute_expression(&context, &root).unwrap(); + let product = execute_expression(context, &root).unwrap(); assert_eq!(product, values::UnsignedInteger::from(3).into()); }, @@ -891,7 +887,7 @@ mod test { BuiltinFunction::new::().into(), )], |context| { - let product = execute_expression(&context, &root).unwrap(); + let product = execute_expression(context, &root).unwrap(); assert_eq!(product, values::UnsignedInteger::from(3).into()); }, @@ -919,7 +915,7 @@ mod test { BuiltinFunction::new::().into(), )], |context| { - let product = execute_expression(&context, &root).unwrap(); + let product = execute_expression(context, &root).unwrap(); assert_eq!(product, values::UnsignedInteger::from(5).into()); }, @@ -954,7 +950,7 @@ mod test { BuiltinFunction::new::().into(), )], |context| { - let product = execute_expression(&context, &root).unwrap(); + let product = execute_expression(context, &root).unwrap(); assert_eq!(product, values::UnsignedInteger::from(15).into()); }, diff --git a/interpreter/src/execution/values/constraint_set.rs b/interpreter/src/execution/values/constraint_set.rs index 99cf114..303f9bd 100644 --- a/interpreter/src/execution/values/constraint_set.rs +++ b/interpreter/src/execution/values/constraint_set.rs @@ -469,7 +469,7 @@ impl ConstraintSet { { match value { Value::Scalar(scalar) => { - Self::build_scalar(context, dimension, scalar.clone()) + Self::build_scalar(context, dimension, *scalar) } value => Err(GenericFailure( format!( @@ -551,10 +551,8 @@ impl ConstraintSet { ) .to_error(context.stack_trace)); } - } else { - if value.dimension != Dimension::zero() { - *dimension = Some(value.dimension); - } + } else if value.dimension != Dimension::zero() { + *dimension = Some(value.dimension); } Ok(ExprBuilder::Val(float(*value.value))) diff --git a/interpreter/src/execution/values/integer.rs b/interpreter/src/execution/values/integer.rs index 88882de..508f109 100644 --- a/interpreter/src/execution/values/integer.rs +++ b/interpreter/src/execution/values/integer.rs @@ -48,7 +48,7 @@ impl From for Integer { } } -const INTEGER_FORMAT_WARNING_MESSAGE: &'static str = +const INTEGER_FORMAT_WARNING_MESSAGE: &str = "Integer formats such as Octal and Hex ignore precision"; impl Object for Integer @@ -194,10 +194,10 @@ where Ok(Self(self.0 >> rhs.0).into()) } fn unary_plus(self, _context: &ExecutionContext) -> ExpressionResult { - Ok(self.clone().into()) + Ok(self.into()) } fn unary_minus(self, context: &ExecutionContext) -> ExpressionResult { - self.0.neg(context.stack_trace).into() + self.0.neg(context.stack_trace) } fn unary_not(self, _context: &ExecutionContext) -> ExpressionResult { Ok(Self(!self.0).into()) @@ -436,7 +436,7 @@ impl IntOps for u64 { fn neg(&self, stack_trace: &StackTrace) -> ExpressionResult { Err(super::UnsupportedOperationError { - type_name: UnsignedInteger::static_type_name().into(), + type_name: UnsignedInteger::static_type_name(), operation_name: "negate", } .to_error(stack_trace)) diff --git a/interpreter/src/execution/values/list.rs b/interpreter/src/execution/values/list.rs index 683b515..dae696f 100644 --- a/interpreter/src/execution/values/list.rs +++ b/interpreter/src/execution/values/list.rs @@ -67,14 +67,14 @@ impl List { let values: Vec<_> = iterator.into_iter().collect(); let internal_type = - if let Some(initial_type) = values.first().map(|first| first.get_type(context)) { - Some(values.iter().fold(initial_type, |accumulated, next| { - accumulated.merge(next.get_type(context)) - })) - } else { - // This is an empty list. - None - }; + values + .first() + .map(|first| first.get_type(context)) + .map(|initial_type| { + values.iter().fold(initial_type, |accumulated, next| { + accumulated.merge(next.get_type(context)) + }) + }); Self { internal_type, @@ -390,7 +390,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { let slice = this.values.get(start..end); if let Some(slice) = slice { - Ok(List::from_iter(context, slice.into_iter().cloned())) + Ok(List::from_iter(context, slice.iter().cloned())) } else { Err(GenericFailure("Slice out of range".into()).to_error(context.stack_trace)) } @@ -423,7 +423,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { fn wrap_chunks<'i, I: Iterator>(context: &ExecutionContext, chunks: I) -> List { let mut list = Vec::new(); for chunk in chunks { - list.push(List::from_iter(context, chunk.into_iter().cloned()).into()); + list.push(List::from_iter(context, chunk.iter().cloned()).into()); } List::from_iter(context, list.into_iter()) } @@ -682,7 +682,7 @@ mod test { fn create_empty() { test_context([], |context| { let product = test_run("[]").unwrap(); - assert_eq!(product, List::from_iter(&context, []).into()); + assert_eq!(product, List::from_iter(context, []).into()); }) } @@ -693,7 +693,7 @@ mod test { assert_eq!( product, List::from_iter( - &context, + context, [ UnsignedInteger::from(1).into(), UnsignedInteger::from(2).into(), @@ -712,7 +712,7 @@ mod test { assert_eq!( product, List::from_iter( - &context, + context, [ UnsignedInteger::from(1).into(), SignedInteger::from(2).into(), @@ -729,7 +729,7 @@ mod test { test_context([], |context| { assert_eq!( List::from_iter( - &context, + context, [ UnsignedInteger::from(1).into(), SignedInteger::from(2).into(), diff --git a/interpreter/src/execution/values/manifold_mesh.rs b/interpreter/src/execution/values/manifold_mesh.rs index 25ad0a2..c941d1f 100644 --- a/interpreter/src/execution/values/manifold_mesh.rs +++ b/interpreter/src/execution/values/manifold_mesh.rs @@ -195,7 +195,7 @@ impl ManifoldMesh3D { [raw.x, raw.y, default], )?)) } - Value::Vector3(v) => Ok(ArethmeticInput::Vector(v.clone())), + Value::Vector3(v) => Ok(ArethmeticInput::Vector(v)), Value::ManifoldMesh3D(manifold) => Ok(ArethmeticInput::Manifold(manifold)), value => Err(DowncastError { expected: "Vector2 or Vector3 of lengths, or another ManifoldMesh3D".into(), @@ -284,7 +284,7 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { let manifold = generate_cone(apex.into(), center.into(), radius, divide.0 as usize) .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; - Ok(ManifoldMesh3D(Arc::new(manifold)).into()) + Ok(ManifoldMesh3D(Arc::new(manifold))) } ); build_function!( @@ -299,7 +299,7 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { let mut manifold = generate_cube().map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; manifold.scale(size.x, size.y, size.z); - Ok(ManifoldMesh3D(Arc::new(manifold)).into()) + Ok(ManifoldMesh3D(Arc::new(manifold))) } ); build_function!( @@ -316,7 +316,7 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { let manifold = generate_cylinder(radius, height.into(), sectors.0 as usize, stacks.0 as usize) .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; - Ok(ManifoldMesh3D(Arc::new(manifold)).into()) + Ok(ManifoldMesh3D(Arc::new(manifold))) } ); build_function!( @@ -333,7 +333,7 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; manifold.scale(scale, scale, scale); - Ok(ManifoldMesh3D(Arc::new(manifold)).into()) + Ok(ManifoldMesh3D(Arc::new(manifold))) } ); build_function!( @@ -347,7 +347,7 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { ) -> ManifoldMesh3D { let manifold = generate_torus(major_radius.into(), minor_raidus.into(), rings.0 as usize, sectors.0 as usize) .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; - Ok(ManifoldMesh3D(Arc::new(manifold)).into()) + Ok(ManifoldMesh3D(Arc::new(manifold))) } ); build_function!( @@ -365,7 +365,7 @@ pub fn register_methods_and_functions(database: &mut BuiltinCallableDatabase) { .map_err(|error| GenericFailure(error.into()).to_error(context.stack_trace))?; manifold.scale(scale, scale, scale); - Ok(ManifoldMesh3D(Arc::new(manifold)).into()) + Ok(ManifoldMesh3D(Arc::new(manifold))) } ); diff --git a/interpreter/src/execution/values/mod.rs b/interpreter/src/execution/values/mod.rs index 613275e..6eedf9a 100644 --- a/interpreter/src/execution/values/mod.rs +++ b/interpreter/src/execution/values/mod.rs @@ -181,7 +181,7 @@ pub trait Object: StaticTypeName + Sized + Eq + PartialEq + Clone { ) -> std::fmt::Result; fn type_name(&self) -> Cow<'static, str> { - Self::static_type_name().into() + Self::static_type_name() } fn and(self, context: &ExecutionContext, _rhs: Value) -> ExpressionResult { @@ -365,7 +365,7 @@ impl Value { T: StaticTypeName, Self: AsVariant, { - self.downcast_ref(stack_trace).map_err(|error| error.into()) + self.downcast_ref(stack_trace) } pub fn downcast_for_binary_op(self, stack_trace: &StackTrace) -> ExpressionResult @@ -373,7 +373,7 @@ impl Value { T: StaticTypeName, Self: IntoVariant, { - self.downcast(stack_trace).map_err(|error| error.into()) + self.downcast(stack_trace) } pub fn downcast_ref(&self, stack_trace: &StackTrace) -> ExpressionResult<&T> @@ -385,7 +385,7 @@ impl Value { Ok(value) } else { Err(DowncastForBinaryOpError { - expected: T::static_type_name().into(), + expected: T::static_type_name(), got: self.type_name(), } .to_error(stack_trace)) @@ -400,7 +400,7 @@ impl Value { match self.into_variant() { Ok(value) => Ok(value), Err(original) => Err(DowncastForBinaryOpError { - expected: T::static_type_name().into(), + expected: T::static_type_name(), got: original.type_name(), } .to_error(stack_trace)), diff --git a/interpreter/src/execution/values/scalar.rs b/interpreter/src/execution/values/scalar.rs index 52ef026..c367758 100644 --- a/interpreter/src/execution/values/scalar.rs +++ b/interpreter/src/execution/values/scalar.rs @@ -152,22 +152,14 @@ impl Object for Scalar { let value = Float::new(*self.value + *rhs.value).unwrap_not_nan(context.stack_trace)?; - Ok(Self { - value, - ..self.clone() - } - .into()) + Ok(Self { value, ..self }.into()) } fn subtraction(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { let rhs = self.unpack_same_dimension(context.stack_trace, rhs)?; let value = Float::new(*self.value - *rhs.value).unwrap_not_nan(context.stack_trace)?; - Ok(Self { - value, - ..self.clone() - } - .into()) + Ok(Self { value, ..self }.into()) } fn multiply(self, context: &ExecutionContext, rhs: Value) -> ExpressionResult { let rhs = rhs.downcast_for_binary_op_ref::(context.stack_trace)?; @@ -198,12 +190,12 @@ impl Object for Scalar { } } fn unary_plus(self, _context: &ExecutionContext) -> ExpressionResult { - Ok(self.clone().into()) + Ok(self.into()) } fn unary_minus(self, _context: &ExecutionContext) -> ExpressionResult { Ok(Self { value: -self.value, - ..self.clone() + ..self } .into()) } @@ -398,7 +390,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { this: Scalar) -> SignedInteger { if this.dimension.is_zero_dimension() { - Ok(values::SignedInteger::from(*this.value as i64).into()) + Ok(values::SignedInteger::from(*this.value as i64)) } else { Err(GenericFailure("Only zero dimensional scalars can be converted into an integer".into()) .to_error(context.stack_trace)) @@ -413,7 +405,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { { if this.dimension.is_zero_dimension() { if *this.value >= 0.0 { - Ok(values::UnsignedInteger::from(*this.value as u64).into()) + Ok(values::UnsignedInteger::from(*this.value as u64)) } else { Err(GenericFailure("Negative values cannot be converted to signed integers".into()) .to_error(context.stack_trace)) @@ -500,7 +492,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { _context: &ExecutionContext, this: Scalar) -> Boolean { - Ok(values::Boolean(this.value.is_normal()).into()) + Ok(values::Boolean(this.value.is_normal())) } ); build_method!( @@ -890,9 +882,9 @@ macro_rules! build_scalar_type { } } - impl Into for $name { - fn into(self) -> Scalar { - self.0 + impl From<$name> for Scalar { + fn from(value: $name) -> Scalar { + value.0 } } @@ -904,9 +896,9 @@ macro_rules! build_scalar_type { } } - impl Into for $name { - fn into(self) -> common_data_types::RawFloat { - *self.value + impl From<$name> for common_data_types::RawFloat { + fn from(value: $name) -> common_data_types::RawFloat { + *value.value } } }; diff --git a/interpreter/src/execution/values/string/formatting.rs b/interpreter/src/execution/values/string/formatting.rs index 82952cc..d2a8585 100644 --- a/interpreter/src/execution/values/string/formatting.rs +++ b/interpreter/src/execution/values/string/formatting.rs @@ -105,7 +105,7 @@ impl Parameter { nom_char('{'), cut(map( pair( - map(ident, |name| ImString::from(name)), + map(ident, ImString::from), alt(( preceded( nom_char(':'), @@ -238,7 +238,7 @@ impl Format { style, precision, }) => { - let precision = get_precision(context, &precision, &arguments)?; + let precision = get_precision(context, precision, &arguments)?; if let Some(argument) = arguments.get(name.as_str()).or_else(|| { context @@ -431,10 +431,10 @@ mod test { .unwrap() .1 .format( - &context, + context, &mut formatted, Dictionary::new( - &context, + context, HashMap::from_iter([( "value".into(), Scalar { @@ -453,7 +453,7 @@ mod test { .unwrap() .1 .format( - &context, + context, &mut formatted, Dictionary::new( &context, diff --git a/interpreter/src/execution/values/string/mod.rs b/interpreter/src/execution/values/string/mod.rs index 0e426fa..03d5ed3 100644 --- a/interpreter/src/execution/values/string/mod.rs +++ b/interpreter/src/execution/values/string/mod.rs @@ -318,7 +318,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { f: MapClosure ) -> IString { let mut string = String::new(); - let result: ExpressionResult<()> = this.0.chars().map(|c| { + let result: ExpressionResult<()> = this.0.chars().try_for_each(|c| { let result = f.call(context, Dictionary::new(context, HashMap::from_iter([ ( "c".into(), @@ -328,10 +328,10 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { string.push_str(&result.0); Ok(()) - }).collect(); + }); result?; - Ok(IString(ImString::from(string)).into()) + Ok(IString(ImString::from(string))) } ); build_method!( @@ -381,7 +381,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { } } - Ok(IString(ImString::from(product)).into()) + Ok(IString(ImString::from(product))) } ); build_method!( @@ -391,7 +391,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { this: IString ) -> IString { let reversed: String = this.0.as_str().chars().rev().collect(); - Ok(IString(ImString::from(reversed)).into()) + Ok(IString(ImString::from(reversed))) } ); build_method!( @@ -414,7 +414,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { this: IString ) -> IString { let text = this.0.as_str().to_lowercase(); - Ok(IString(ImString::from(text)).into()) + Ok(IString(ImString::from(text))) } ); build_method!( @@ -424,7 +424,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { this: IString ) -> IString { let text = this.0.as_str().to_uppercase(); - Ok(IString(ImString::from(text)).into()) + Ok(IString(ImString::from(text))) } ); build_method!( @@ -449,7 +449,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ) -> UnsignedInteger { let value = this.0.parse::() .map_err(|error| GenericFailure(format!("Failed to parse unsigned integer: {error:?}").into()).to_error(context.stack_trace))?; - Ok(UnsignedInteger::from(value).into()) + Ok(UnsignedInteger::from(value)) } ); build_method!( @@ -460,7 +460,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { ) -> SignedInteger { let value = this.0.parse::() .map_err(|error| GenericFailure(format!("Failed to parse signed integer: {error:?}").into()).to_error(context.stack_trace))?; - Ok(SignedInteger::from(value).into()) + Ok(SignedInteger::from(value)) } ); build_method!( @@ -471,7 +471,7 @@ pub fn register_methods(database: &mut BuiltinCallableDatabase) { pattern: IString ) -> Boolean { let contained = this.0.contains(pattern.0.as_str()); - Ok(Boolean(contained).into()) + Ok(Boolean(contained)) } ); } diff --git a/interpreter/src/execution/values/value_type.rs b/interpreter/src/execution/values/value_type.rs index f2ed3cc..2eba6cb 100644 --- a/interpreter/src/execution/values/value_type.rs +++ b/interpreter/src/execution/values/value_type.rs @@ -73,11 +73,11 @@ impl From for ValueType { impl ValueType { pub fn name(&self) -> Cow<'static, str> { match self { - Self::TypeNone => ValueNone::static_type_name().into(), - Self::Boolean => Boolean::static_type_name().into(), - Self::SignedInteger => SignedInteger::static_type_name().into(), - Self::UnsignedInteger => UnsignedInteger::static_type_name().into(), - Self::Scalar(Some(dimension)) => units::get_dimension_name(dimension).into(), + Self::TypeNone => ValueNone::static_type_name(), + Self::Boolean => Boolean::static_type_name(), + Self::SignedInteger => SignedInteger::static_type_name(), + Self::UnsignedInteger => UnsignedInteger::static_type_name(), + Self::Scalar(Some(dimension)) => units::get_dimension_name(dimension), Self::Scalar(Option::None) => "Scalar".into(), Self::Vector2(Some(dimension)) => { format!("Vector2<{}>", units::get_dimension_name(dimension)).into() @@ -91,8 +91,8 @@ impl ValueType { Self::Vector2(Option::None) => "Vector2".into(), Self::Vector3(Option::None) => "Vector3".into(), Self::Vector4(Option::None) => "Vector4".into(), - Self::String => IString::static_type_name().into(), - Self::File => File::static_type_name().into(), + Self::String => IString::static_type_name(), + Self::File => File::static_type_name(), Self::Any => "Any".into(), Self::ManifoldMesh3D => "ManifoldMesh3D".into(), _ => format!("{}", self).into(), @@ -392,16 +392,14 @@ impl StructDefinition { error, }); } - } else { - if member.default.is_none() { - errors.push(MissmatchedField { - name: name.clone(), - error: TypeQualificationError::This { - expected: member.ty.clone(), - got: ValueType::TypeNone, - }, - }); - } + } else if member.default.is_none() { + errors.push(MissmatchedField { + name: name.clone(), + error: TypeQualificationError::This { + expected: member.ty.clone(), + got: ValueType::TypeNone, + }, + }); } } @@ -661,8 +659,8 @@ mod test { let closure = closure.as_userclosure().unwrap(); closure - .get_type(&context) - .check_other_qualifies(&closure.get_type(&context)) + .get_type(context) + .check_other_qualifies(&closure.get_type(context)) .unwrap(); }) } @@ -677,8 +675,8 @@ mod test { let dictionary = dictionary.as_dictionary().unwrap(); structure - .get_type(&context) - .check_other_qualifies(&dictionary.get_type(&context)) + .get_type(context) + .check_other_qualifies(&dictionary.get_type(context)) .unwrap(); }) } @@ -693,7 +691,7 @@ mod test { let dictionary = dictionary.as_dictionary().unwrap(); structure - .check_other_qualifies(&dictionary.get_type(&context)) + .check_other_qualifies(&dictionary.get_type(context)) .unwrap(); }) } @@ -708,7 +706,7 @@ mod test { let dictionary = dictionary.as_dictionary().unwrap(); structure - .check_other_qualifies(&dictionary.get_type(&context)) + .check_other_qualifies(&dictionary.get_type(context)) .unwrap(); }) } @@ -723,7 +721,7 @@ mod test { let dictionary = dictionary.as_dictionary().unwrap(); structure - .check_other_qualifies(&dictionary.get_type(&context)) + .check_other_qualifies(&dictionary.get_type(context)) .unwrap_err(); }) } @@ -738,7 +736,7 @@ mod test { let dictionary = dictionary.as_dictionary().unwrap(); structure - .check_other_qualifies(&dictionary.get_type(&context)) + .check_other_qualifies(&dictionary.get_type(context)) .unwrap(); }) } @@ -753,7 +751,7 @@ mod test { let dictionary = dictionary.as_dictionary().unwrap(); structure - .check_other_qualifies(&dictionary.get_type(&context)) + .check_other_qualifies(&dictionary.get_type(context)) .unwrap(); }) } @@ -836,14 +834,14 @@ mod test { let closure = closure.as_userclosure().unwrap(); ValueType::Any - .check_other_qualifies(&closure.get_type(&context)) + .check_other_qualifies(&closure.get_type(context)) .unwrap(); let dictionary = test_run("(a = std.consts.None, b = std.consts.None)").unwrap(); let dictionary = dictionary.as_dictionary().unwrap(); ValueType::Any - .check_other_qualifies(&dictionary.get_type(&context)) + .check_other_qualifies(&dictionary.get_type(context)) .unwrap(); ValueType::Any diff --git a/interpreter/src/execution/values/vector.rs b/interpreter/src/execution/values/vector.rs index 279f79c..8f13e63 100644 --- a/interpreter/src/execution/values/vector.rs +++ b/interpreter/src/execution/values/vector.rs @@ -104,12 +104,12 @@ where Ok(Self::new_raw(context, dimension, value)?.into()) } fn unary_plus(self, _context: &ExecutionContext) -> ExpressionResult { - Ok(self.clone().into()) + Ok(self.into()) } fn unary_minus(self, _context: &ExecutionContext) -> ExpressionResult { Ok(Self { value: -self.value, - ..self.clone() + ..self } .into()) } @@ -618,7 +618,7 @@ impl VectorInternalType for nalgebra::Vector2 { } fn build(value: Self::BuildFrom) -> Self { - Self::from_iterator(value.into_iter()) + Self::from_iterator(value) } fn from_ast( @@ -723,11 +723,11 @@ impl StaticType for nalgebra::Vector2 { } } -impl Into for Vector2 { - fn into(self) -> boolmesh::Vec2 { - boolmesh::Vec2 { - x: self.value.x, - y: self.value.y, +impl From for boolmesh::Vec2 { + fn from(value: Vector2) -> Self { + Self { + x: value.value.x, + y: value.value.y, } } } @@ -742,7 +742,7 @@ impl VectorInternalType for nalgebra::Vector3 { } fn build(value: Self::BuildFrom) -> Self { - Self::from_iterator(value.into_iter()) + Self::from_iterator(value) } fn from_ast( @@ -857,12 +857,12 @@ impl StaticType for nalgebra::Vector3 { } } -impl Into for Vector3 { - fn into(self) -> boolmesh::Vec3 { - boolmesh::Vec3 { - x: self.value.x, - y: self.value.y, - z: self.value.z, +impl From for boolmesh::Vec3 { + fn from(value: Vector3) -> Self { + Self { + x: value.value.x, + y: value.value.y, + z: value.value.z, } } } @@ -877,7 +877,7 @@ impl VectorInternalType for nalgebra::Vector4 { } fn build(value: Self::BuildFrom) -> Self { - Self::from_iterator(value.into_iter()) + Self::from_iterator(value) } fn from_ast( @@ -999,13 +999,13 @@ impl StaticType for nalgebra::Vector4 { } } -impl Into for Vector4 { - fn into(self) -> boolmesh::Vec4 { - boolmesh::Vec4 { - x: self.value.x, - y: self.value.y, - z: self.value.z, - w: self.value.w, +impl From for boolmesh::Vec4 { + fn from(value: Vector4) -> Self { + Self { + x: value.value.x, + y: value.value.y, + z: value.value.z, + w: value.value.w, } } } @@ -1044,15 +1044,15 @@ macro_rules! build_vector_type { } } - impl Into<$type> for $name { - fn into(self) -> $type { - self.0 + impl From<$name> for $type { + fn from(value: $name) -> $type { + value.0 } } - impl Into for $name { - fn into(self) -> equivalent_boolmesh_vector!($type) { - self.0.into() + impl From<$name> for equivalent_boolmesh_vector!($type) { + fn from(value: $name) -> Self { + value.0.into() } } @@ -1083,7 +1083,7 @@ mod test { let product = test_run("<(1m, 2m)>").unwrap(); assert_eq!( product, - Vector2::new(&context, Dimension::length(), [1.0, 2.0]) + Vector2::new(context, Dimension::length(), [1.0, 2.0]) .unwrap() .into() ); @@ -1091,7 +1091,7 @@ mod test { let product = test_run("<(-1m, -2m)>").unwrap(); assert_eq!( product, - Vector2::new(&context, Dimension::length(), [-1.0, -2.0]) + Vector2::new(context, Dimension::length(), [-1.0, -2.0]) .unwrap() .into() ); @@ -1104,7 +1104,7 @@ mod test { let product = test_run("<(1m, 2m, 3m)>").unwrap(); assert_eq!( product, - Vector3::new(&context, Dimension::length(), [1.0, 2.0, 3.0]) + Vector3::new(context, Dimension::length(), [1.0, 2.0, 3.0]) .unwrap() .into() ); @@ -1112,7 +1112,7 @@ mod test { let product = test_run("<(-1m, -2m, -3m)>").unwrap(); assert_eq!( product, - Vector3::new(&context, Dimension::length(), [-1.0, -2.0, -3.0]) + Vector3::new(context, Dimension::length(), [-1.0, -2.0, -3.0]) .unwrap() .into() ); @@ -1125,7 +1125,7 @@ mod test { let product = test_run("<(1m, 2m, 3m, 4m)>").unwrap(); assert_eq!( product, - Vector4::new(&context, Dimension::length(), [1.0, 2.0, 3.0, 4.0]) + Vector4::new(context, Dimension::length(), [1.0, 2.0, 3.0, 4.0]) .unwrap() .into() ); @@ -1133,7 +1133,7 @@ mod test { let product = test_run("<(-1m, -2m, -3m, -4m)>").unwrap(); assert_eq!( product, - Vector4::new(&context, Dimension::length(), [-1.0, -2.0, -3.0, -4.0]) + Vector4::new(context, Dimension::length(), [-1.0, -2.0, -3.0, -4.0]) .unwrap() .into() ); diff --git a/units/build.rs b/units/build.rs index bad0d80..2721240 100644 --- a/units/build.rs +++ b/units/build.rs @@ -99,7 +99,7 @@ fn main() { // Record conversion factor. let already_exists = conversion_factors .insert( - row.keyboard_friendly_abbreviation.clone().into(), + row.keyboard_friendly_abbreviation.clone(), ConversionFactor { constant: row.conversion_constant, coefficient: row.conversion_coefficient, @@ -116,7 +116,7 @@ fn main() { } // Self-deduplicating list of names for the dimensions. - dimension_names.insert(dimension, row.dimension_name.clone().into()); + dimension_names.insert(dimension, row.dimension_name.clone()); unit_list .entry(row.dimension_name) diff --git a/units/src/lib.rs b/units/src/lib.rs index 002c0e9..141e839 100644 --- a/units/src/lib.rs +++ b/units/src/lib.rs @@ -7,6 +7,8 @@ use std::{ sync::OnceLock, }; +// One conversion factors approximates f64::consts::TAU. +#[allow(clippy::approx_constant)] pub fn get_conversion_factor(name: &str) -> Option<&'static ConversionFactor> { static CONVERSION_FACTORS: OnceLock = OnceLock::new(); let database = CONVERSION_FACTORS From 8377baa9e9be0a19979f0ca5acda98f780d8cff7 Mon Sep 17 00:00:00 2001 From: James Carl Date: Sat, 14 Feb 2026 00:08:39 -0500 Subject: [PATCH 106/106] Run cargo fmt again --- cli/src/main.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/cli/src/main.rs b/cli/src/main.rs index d5af238..551df68 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -5,7 +5,7 @@ use std::{ }; mod arguments; -use anyhow::{anyhow, bail, Context, Result}; +use anyhow::{Context, Result, anyhow, bail}; use arguments::Arguments; use ariadne::{Cache, Label, Report, ReportKind, Source}; use clap::Parser as _; @@ -17,14 +17,13 @@ use type_sitter::Node as _; use crate::arguments::Commands; use interpreter::{ - build_prelude, + ExecutionContext, ExecutionFileCache, ImString, LogMessage, Parser, RuntimeLog, + SourceReference, StackScope, StackTrace, Store, build_prelude, compile::{compile, iter_raw_nodes}, execute_expression, execution::values::BuiltinCallableDatabase, new_parser, run_file, values::{Object, Style, Value}, - ExecutionContext, ExecutionFileCache, ImString, LogMessage, Parser, RuntimeLog, - SourceReference, StackScope, StackTrace, Store, }; fn main() {